aboutsummaryrefslogtreecommitdiff
path: root/keyboards/0xcb
diff options
context:
space:
mode:
authorAkshay <[email protected]>2022-04-10 12:13:40 +0100
committerAkshay <[email protected]>2022-04-10 12:13:40 +0100
commitdc90387ce7d8ba7b607d9c48540bf6d8b560f14d (patch)
tree4ccb8fa5886b66fa9d480edef74236c27f035e16 /keyboards/0xcb
Diffstat (limited to 'keyboards/0xcb')
-rw-r--r--keyboards/0xcb/1337/1337.c27
-rw-r--r--keyboards/0xcb/1337/1337.h40
-rw-r--r--keyboards/0xcb/1337/config.h84
-rw-r--r--keyboards/0xcb/1337/gfxfont.c277
-rw-r--r--keyboards/0xcb/1337/info.json20
-rw-r--r--keyboards/0xcb/1337/keymaps/conor/keymap.c186
-rw-r--r--keyboards/0xcb/1337/keymaps/conor/rules.mk1
-rw-r--r--keyboards/0xcb/1337/keymaps/default/keymap.c177
-rw-r--r--keyboards/0xcb/1337/keymaps/jakob/keymap.c186
-rw-r--r--keyboards/0xcb/1337/keymaps/jakob/rules.mk1
-rw-r--r--keyboards/0xcb/1337/keymaps/via/keymap.c186
-rw-r--r--keyboards/0xcb/1337/keymaps/via/rules.mk1
-rw-r--r--keyboards/0xcb/1337/readme.md25
-rw-r--r--keyboards/0xcb/1337/rules.mk23
-rw-r--r--keyboards/0xcb/static/config.h69
-rw-r--r--keyboards/0xcb/static/gfxfont.c277
-rw-r--r--keyboards/0xcb/static/info.json103
-rw-r--r--keyboards/0xcb/static/keymaps/bongocat/keymap.c298
-rw-r--r--keyboards/0xcb/static/keymaps/bongocat/rules.mk2
-rw-r--r--keyboards/0xcb/static/keymaps/default/keymap.c191
-rw-r--r--keyboards/0xcb/static/keymaps/via/keymap.c198
-rw-r--r--keyboards/0xcb/static/keymaps/via/rules.mk1
-rw-r--r--keyboards/0xcb/static/readme.md27
-rw-r--r--keyboards/0xcb/static/rules.mk23
-rw-r--r--keyboards/0xcb/static/static.c17
-rw-r--r--keyboards/0xcb/static/static.h66
26 files changed, 2506 insertions, 0 deletions
diff --git a/keyboards/0xcb/1337/1337.c b/keyboards/0xcb/1337/1337.c
new file mode 100644
index 000000000..85781209b
--- /dev/null
+++ b/keyboards/0xcb/1337/1337.c
@@ -0,0 +1,27 @@
1/*
2Copyright 2021 0xCB - Conor Burns
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#include "1337.h"
18
19void eeconfig_init_kb(void) {
20#ifdef BACKLIGHT_ENABLE
21 backlight_enable();
22 backlight_level(5);
23#endif
24
25 eeconfig_update_kb(0);
26 eeconfig_init_user();
27}
diff --git a/keyboards/0xcb/1337/1337.h b/keyboards/0xcb/1337/1337.h
new file mode 100644
index 000000000..e1f238c12
--- /dev/null
+++ b/keyboards/0xcb/1337/1337.h
@@ -0,0 +1,40 @@
1/*
2Copyright 2021 0xCB - Conor Burns
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#pragma once
18
19#include "quantum.h"
20
21/* This a shortcut to help you visually see your layout.
22 *
23 * The first section contains all of the arguments representing the physical
24 * layout of the board and position of the keys.
25 *
26 * The second converts the arguments into a two-dimensional array which
27 * represents the switch matrix.
28 */
29// clang-format off
30 #define LAYOUT( \
31 KA1, KA2, KA3, \
32 KB1, KB2, KB3, \
33 KC1, KC2, KC3 \
34 ) \
35 { \
36 { KA1, KA2, KA3 }, \
37 { KB1, KB2, KB3 }, \
38 { KC1, KC2, KC3 } \
39 }
40// clang-format on
diff --git a/keyboards/0xcb/1337/config.h b/keyboards/0xcb/1337/config.h
new file mode 100644
index 000000000..d134d1ab4
--- /dev/null
+++ b/keyboards/0xcb/1337/config.h
@@ -0,0 +1,84 @@
1/*
2Copyright 2021 0xCB - Conor Burns
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#pragma once
18
19#include "config_common.h"
20// clang-format off
21
22/* USB Device descriptor parameter */
23#define VENDOR_ID 0xCB00
24#define PRODUCT_ID 0x1337
25#define DEVICE_VER 0x0001
26#define MANUFACTURER 0xCB
27#define PRODUCT 1337
28
29/* key matrix size */
30#define MATRIX_ROWS 3
31#define MATRIX_COLS 3
32
33/* Keyboard Matrix Assignments */
34#define DIRECT_PINS { \
35 { D2, D4, F4 }, \
36 { D7, B1, B3 }, \
37 { E6, B4, B2 } \
38}
39#define TAP_CODE_DELAY 10
40#define ENCODER_RESOLUTION 4
41#define ENCODERS_PAD_A { F6 }
42#define ENCODERS_PAD_B { F5 }
43
44#define BACKLIGHT_PIN B5
45#define BACKLIGHT_BREATHING
46#define BACKLIGHT_LEVELS 7
47
48#define RGB_DI_PIN D3
49#ifdef RGB_DI_PIN
50 #define RGBLED_NUM 4
51 #define RGBLIGHT_HUE_STEP 8
52 #define RGBLIGHT_SAT_STEP 8
53 #define RGBLIGHT_VAL_STEP 8
54 #define RGBLIGHT_LIMIT_VAL 255 /* The maximum brightness level */
55 #define RGBLIGHT_SLEEP /* If defined, the RGB lighting will be switched off when the host goes to sleep */
56 #define RGBLIGHT_ANIMATIONS /* comment this and uncomment the lines below to save space */
57 // #define RGBLIGHT_EFFECT_BREATHING
58 // #define RGBLIGHT_EFFECT_SNAKE
59 // #define RGBLIGHT_EFFECT_STATIC_GRADIENT
60 // #define RGBLIGHT_EFFECT_RAINBOW_SWIRL
61 // #define RGBLIGHT_EFFECT_RAINBOW_MOOD
62 /* default setup after eeprom reset */
63 #define RGBLIGHT_DEFAULT_MODE RGBLIGHT_EFFECT_BREATHING + 2
64 #define RGBLIGHT_DEFAULT_HUE 152
65 #define RGBLIGHT_DEFAULT_SAT 232
66 #define RGBLIGHT_DEFAULT_VAR 255
67 #define RGBLIGHT_DEFAULT_SPD 2
68#endif
69// clang-format on
70
71/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
72#define DEBOUNCE 5
73
74/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
75#define LOCKING_SUPPORT_ENABLE
76/* Locking resynchronize hack */
77#define LOCKING_RESYNC_ENABLE
78/* Oled Size */
79#define OLED_DISPLAY_128X64
80#define OLED_FONT_END 255
81#define OLED_FONT_H "gfxfont.c"
82
83/* QMK DFU */
84#define QMK_LED B0
diff --git a/keyboards/0xcb/1337/gfxfont.c b/keyboards/0xcb/1337/gfxfont.c
new file mode 100644
index 000000000..b78e359c7
--- /dev/null
+++ b/keyboards/0xcb/1337/gfxfont.c
@@ -0,0 +1,277 @@
1/*
2Copyright 2021 0xCB - Conor Burns
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#include "progmem.h"
18// clang-format off
19static const unsigned char font[] PROGMEM = {
20 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
21 0x3E, 0x5B, 0x4F, 0x5B, 0x3E, 0x00,
22 0x3E, 0x6B, 0x4F, 0x6B, 0x3E, 0x00,
23 0x1C, 0x3E, 0x7C, 0x3E, 0x1C, 0x00,
24 0x18, 0x3C, 0x7E, 0x3C, 0x18, 0x00,
25 0x1C, 0x57, 0x7D, 0x57, 0x1C, 0x00,
26 0x1C, 0x5E, 0x7F, 0x5E, 0x1C, 0x00,
27 0x00, 0x18, 0x3C, 0x18, 0x00, 0x00,
28 0xFF, 0xE7, 0xC3, 0xE7, 0xFF, 0x00,
29 0x00, 0x18, 0x24, 0x18, 0x00, 0x00,
30 0xFF, 0xE7, 0xDB, 0xE7, 0xFF, 0x00,
31 0x30, 0x48, 0x3A, 0x06, 0x0E, 0x00,
32 0x26, 0x29, 0x79, 0x29, 0x26, 0x00,
33 0x40, 0x7F, 0x05, 0x05, 0x07, 0x00,
34 0x40, 0x7F, 0x05, 0x25, 0x3F, 0x00,
35 0x5A, 0x3C, 0xE7, 0x3C, 0x5A, 0x00,
36 0x7F, 0x3E, 0x1C, 0x1C, 0x08, 0x00,
37 0x08, 0x1C, 0x1C, 0x3E, 0x7F, 0x00,
38 0x14, 0x22, 0x7F, 0x22, 0x14, 0x00,
39 0x5F, 0x5F, 0x00, 0x5F, 0x5F, 0x00,
40 0x06, 0x09, 0x7F, 0x01, 0x7F, 0x00,
41 0x00, 0x66, 0x89, 0x95, 0x6A, 0x00,
42 0x60, 0x60, 0x60, 0x60, 0x60, 0x00,
43 0x94, 0xA2, 0xFF, 0xA2, 0x94, 0x00,
44 0x08, 0x04, 0x7E, 0x04, 0x08, 0x00,
45 0x10, 0x20, 0x7E, 0x20, 0x10, 0x00,
46 0x08, 0x08, 0x2A, 0x1C, 0x08, 0x00,
47 0x08, 0x1C, 0x2A, 0x08, 0x08, 0x00,
48 0x1E, 0x10, 0x10, 0x10, 0x10, 0x00,
49 0x0C, 0x1E, 0x0C, 0x1E, 0x0C, 0x00,
50 0x30, 0x38, 0x3E, 0x38, 0x30, 0x00,
51 0x06, 0x0E, 0x3E, 0x0E, 0x06, 0x00,
52 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
53 0x00, 0x00, 0x5F, 0x00, 0x00, 0x00,
54 0x00, 0x07, 0x00, 0x07, 0x00, 0x00,
55 0x14, 0x7F, 0x14, 0x7F, 0x14, 0x00,
56 0x24, 0x2A, 0x7F, 0x2A, 0x12, 0x00,
57 0x23, 0x13, 0x08, 0x64, 0x62, 0x00,
58 0x36, 0x49, 0x56, 0x20, 0x50, 0x00,
59 0x00, 0x08, 0x07, 0x03, 0x00, 0x00,
60 0x00, 0x1C, 0x22, 0x41, 0x00, 0x00,
61 0x00, 0x41, 0x22, 0x1C, 0x00, 0x00,
62 0x2A, 0x1C, 0x7F, 0x1C, 0x2A, 0x00,
63 0x08, 0x08, 0x3E, 0x08, 0x08, 0x00,
64 0x00, 0x80, 0x70, 0x30, 0x00, 0x00,
65 0x08, 0x08, 0x08, 0x08, 0x08, 0x00,
66 0x00, 0x00, 0x60, 0x60, 0x00, 0x00,
67 0x20, 0x10, 0x08, 0x04, 0x02, 0x00,
68 0x3E, 0x51, 0x49, 0x45, 0x3E, 0x00,
69 0x00, 0x42, 0x7F, 0x40, 0x00, 0x00,
70 0x72, 0x49, 0x49, 0x49, 0x46, 0x00,
71 0x21, 0x41, 0x49, 0x4D, 0x33, 0x00,
72 0x18, 0x14, 0x12, 0x7F, 0x10, 0x00,
73 0x27, 0x45, 0x45, 0x45, 0x39, 0x00,
74 0x3C, 0x4A, 0x49, 0x49, 0x31, 0x00,
75 0x41, 0x21, 0x11, 0x09, 0x07, 0x00,
76 0x36, 0x49, 0x49, 0x49, 0x36, 0x00,
77 0x46, 0x49, 0x49, 0x29, 0x1E, 0x00,
78 0x00, 0x00, 0x14, 0x00, 0x00, 0x00,
79 0x00, 0x40, 0x34, 0x00, 0x00, 0x00,
80 0x00, 0x08, 0x14, 0x22, 0x41, 0x00,
81 0x14, 0x14, 0x14, 0x14, 0x14, 0x00,
82 0x00, 0x41, 0x22, 0x14, 0x08, 0x00,
83 0x02, 0x01, 0x59, 0x09, 0x06, 0x00,
84 0x3E, 0x41, 0x5D, 0x59, 0x4E, 0x00,
85 0x7C, 0x12, 0x11, 0x12, 0x7C, 0x00,
86 0x7F, 0x49, 0x49, 0x49, 0x36, 0x00,
87 0x3E, 0x41, 0x41, 0x41, 0x22, 0x00,
88 0x7F, 0x41, 0x41, 0x41, 0x3E, 0x00,
89 0x7F, 0x49, 0x49, 0x49, 0x41, 0x00,
90 0x7F, 0x09, 0x09, 0x09, 0x01, 0x00,
91 0x3E, 0x41, 0x41, 0x51, 0x73, 0x00,
92 0x7F, 0x08, 0x08, 0x08, 0x7F, 0x00,
93 0x00, 0x41, 0x7F, 0x41, 0x00, 0x00,
94 0x20, 0x40, 0x41, 0x3F, 0x01, 0x00,
95 0x7F, 0x08, 0x14, 0x22, 0x41, 0x00,
96 0x7F, 0x40, 0x40, 0x40, 0x40, 0x00,
97 0x7F, 0x02, 0x1C, 0x02, 0x7F, 0x00,
98 0x7F, 0x04, 0x08, 0x10, 0x7F, 0x00,
99 0x3E, 0x41, 0x41, 0x41, 0x3E, 0x00,
100 0x7F, 0x09, 0x09, 0x09, 0x06, 0x00,
101 0x3E, 0x41, 0x51, 0x21, 0x5E, 0x00,
102 0x7F, 0x09, 0x19, 0x29, 0x46, 0x00,
103 0x26, 0x49, 0x49, 0x49, 0x32, 0x00,
104 0x03, 0x01, 0x7F, 0x01, 0x03, 0x00,
105 0x3F, 0x40, 0x40, 0x40, 0x3F, 0x00,
106 0x1F, 0x20, 0x40, 0x20, 0x1F, 0x00,
107 0x3F, 0x40, 0x38, 0x40, 0x3F, 0x00,
108 0x63, 0x14, 0x08, 0x14, 0x63, 0x00,
109 0x03, 0x04, 0x78, 0x04, 0x03, 0x00,
110 0x61, 0x59, 0x49, 0x4D, 0x43, 0x00,
111 0x00, 0x7F, 0x41, 0x41, 0x41, 0x00,
112 0x02, 0x04, 0x08, 0x10, 0x20, 0x00,
113 0x00, 0x41, 0x41, 0x41, 0x7F, 0x00,
114 0x04, 0x02, 0x01, 0x02, 0x04, 0x00,
115 0x40, 0x40, 0x40, 0x40, 0x40, 0x00,
116 0x00, 0x03, 0x07, 0x08, 0x00, 0x00,
117 0x20, 0x54, 0x54, 0x78, 0x40, 0x00,
118 0x7F, 0x28, 0x44, 0x44, 0x38, 0x00,
119 0x38, 0x44, 0x44, 0x44, 0x28, 0x00,
120 0x38, 0x44, 0x44, 0x28, 0x7F, 0x00,
121 0x38, 0x54, 0x54, 0x54, 0x18, 0x00,
122 0x00, 0x08, 0x7E, 0x09, 0x02, 0x00,
123 0x18, 0x24, 0x24, 0x1C, 0x78, 0x00,
124 0x7F, 0x08, 0x04, 0x04, 0x78, 0x00,
125 0x00, 0x44, 0x7D, 0x40, 0x00, 0x00,
126 0x20, 0x40, 0x40, 0x3D, 0x00, 0x00,
127 0x7F, 0x10, 0x28, 0x44, 0x00, 0x00,
128 0x00, 0x41, 0x7F, 0x40, 0x00, 0x00,
129 0x7C, 0x04, 0x78, 0x04, 0x78, 0x00,
130 0x7C, 0x08, 0x04, 0x04, 0x78, 0x00,
131 0x38, 0x44, 0x44, 0x44, 0x38, 0x00,
132 0xFC, 0x18, 0x24, 0x24, 0x18, 0x00,
133 0x18, 0x24, 0x24, 0x18, 0xFC, 0x00,
134 0x7C, 0x08, 0x04, 0x04, 0x08, 0x00,
135 0x48, 0x54, 0x54, 0x54, 0x24, 0x00,
136 0x04, 0x04, 0x3F, 0x44, 0x24, 0x00,
137 0x3C, 0x40, 0x40, 0x20, 0x7C, 0x00,
138 0x1C, 0x20, 0x40, 0x20, 0x1C, 0x00,
139 0x3C, 0x40, 0x30, 0x40, 0x3C, 0x00,
140 0x44, 0x28, 0x10, 0x28, 0x44, 0x00,
141 0x4C, 0x10, 0x10, 0x10, 0x7C, 0x00,
142 0x44, 0x64, 0x54, 0x4C, 0x44, 0x00,
143 0x00, 0x08, 0x36, 0x41, 0x00, 0x00,
144 0x00, 0x00, 0x77, 0x00, 0x00, 0x00,
145 0x00, 0x41, 0x36, 0x08, 0x00, 0x00,
146 0x02, 0x01, 0x02, 0x04, 0x02, 0x00,
147 0x3C, 0x26, 0x23, 0x26, 0x3C, 0x00,
148 0x00, 0xE0, 0xFC, 0x1E, 0x06, 0xC6,
149 0xC6, 0x06, 0x1E, 0xFC, 0xE0, 0x00,
150 0x00, 0x00, 0x60, 0xE0, 0x80, 0x00,
151 0x00, 0x80, 0xE0, 0x60, 0x00, 0x00,
152 0x00, 0x00, 0xE0, 0xF8, 0x3C, 0x0E,
153 0x06, 0x06, 0x06, 0x0E, 0x0C, 0x00,
154 0x00, 0x00, 0xFE, 0xFE, 0x86, 0x86,
155 0x86, 0x86, 0x8C, 0x78, 0x70, 0x00,
156 0x00, 0x0E, 0x0E, 0x06, 0x06, 0xFE,
157 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00,
158 0x00, 0x0C, 0x8E, 0x86, 0x86, 0x86,
159 0x86, 0x86, 0xCE, 0xFE, 0x7C, 0x00,
160 0x00, 0x06, 0x06, 0x06, 0x06, 0x06,
161 0x06, 0xE6, 0xE6, 0x3E, 0x3E, 0x00,
162 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
163 0x01, 0x01, 0x06, 0x78, 0x80, 0x00,
164 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
165 0xE0, 0x1C, 0x02, 0x01, 0x04, 0x18,
166 0x00, 0x00, 0x00, 0x02, 0x0C, 0x00,
167 0x80, 0x80, 0x71, 0x02, 0x1C, 0xE0,
168 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
169 0x00, 0x80, 0x78, 0x06, 0x01, 0x01,
170 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
171 0xF0, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8,
172 0x00, 0x00, 0xFC, 0xFC, 0xFC, 0xFC,
173 0xFC, 0xFE, 0xFE, 0xFE, 0xFF, 0xFF,
174 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00,
175 0xE0, 0xE0, 0xE0, 0xE0, 0xF0, 0xF0,
176 0x00, 0x00, 0x40, 0xF0, 0xFC, 0xFF,
177 0xFF, 0xFC, 0xF0, 0xC0, 0x00, 0x00,
178 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00,
179 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
180 0x00, 0x07, 0x3F, 0x78, 0x60, 0x63,
181 0x63, 0x60, 0x78, 0x3F, 0x07, 0x00,
182 0x00, 0x00, 0x60, 0x79, 0x19, 0x06,
183 0x06, 0x19, 0x79, 0x60, 0x00, 0x00,
184 0x00, 0x00, 0x07, 0x1F, 0x3C, 0x70,
185 0x60, 0x60, 0x60, 0x70, 0x30, 0x00,
186 0x00, 0x00, 0x7F, 0x7F, 0x61, 0x61,
187 0x61, 0x61, 0x31, 0x1E, 0x0E, 0x00,
188 0x00, 0x60, 0x60, 0x60, 0x60, 0x7F,
189 0x7F, 0x60, 0x60, 0x60, 0x60, 0x00,
190 0x00, 0x30, 0x71, 0x61, 0x61, 0x61,
191 0x61, 0x61, 0x73, 0x7F, 0x3E, 0x00,
192 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F,
193 0x7F, 0x01, 0x01, 0x00, 0x00, 0x00,
194 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
195 0x00, 0x00, 0x00, 0x00, 0x03, 0xBC,
196 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
197 0x87, 0x38, 0x40, 0x80, 0x08, 0x08,
198 0x08, 0x04, 0x04, 0x02, 0x02, 0x01,
199 0x00, 0x00, 0x80, 0x40, 0x38, 0x87,
200 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
201 0xBC, 0x03, 0x00, 0x00, 0x00, 0x00,
202 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F,
203 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F,
204 0x00, 0x00, 0x7F, 0x7F, 0x7F, 0x7F,
205 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F,
206 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x00,
207 0x00, 0x00, 0x00, 0x00, 0xC0, 0xF0,
208 0xFC, 0xFE, 0xFC, 0xF8, 0xF9, 0xF3,
209 0xF7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC,
210 0xF0, 0xC0, 0x00, 0x00, 0x00, 0x00,
211 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
212 0x70, 0xD0, 0x70, 0x00, 0x07, 0x05,
213 0x07, 0x02, 0x02, 0x82, 0xC2, 0x42,
214 0x7E, 0xC0, 0xC0, 0xC0, 0x40, 0x7E,
215 0x42, 0xC2, 0x82, 0x02, 0x02, 0x07,
216 0x05, 0x07, 0x00, 0x70, 0xD0, 0x70,
217 0x00, 0x00, 0x00, 0x80, 0x40, 0x20,
218 0x10, 0xC8, 0xC8, 0x84, 0x04, 0x02,
219 0x02, 0x02, 0x02, 0xC2, 0xC2, 0xC2,
220 0xC2, 0xC4, 0xC4, 0xC8, 0x88, 0x90,
221 0x20, 0x40, 0x80, 0x00, 0x00, 0x00,
222 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
223 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
224 0x01, 0xFD, 0x05, 0x04, 0x04, 0x04,
225 0x1F, 0x30, 0x40, 0x87, 0x9F, 0x1F,
226 0x01, 0x81, 0xFF, 0xFF, 0x00, 0x00,
227 0x1E, 0x9E, 0x86, 0x40, 0x30, 0x1F,
228 0x04, 0x04, 0x04, 0x05, 0xFD, 0x01,
229 0x00, 0x0F, 0x70, 0x80, 0x00, 0x00,
230 0x00, 0x00, 0x80, 0xE0, 0xF8, 0x3E,
231 0x0F, 0x03, 0x00, 0xFF, 0xFF, 0x01,
232 0x01, 0x01, 0x01, 0x01, 0x00, 0x00,
233 0x00, 0x00, 0x80, 0x70, 0x0F, 0x00,
234 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE,
235 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE,
236 0x00, 0x00, 0xFE, 0xFE, 0xFE, 0xFE,
237 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE,
238 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0x00,
239 0xC0, 0xF0, 0xFC, 0xFF, 0xFF, 0xFF,
240 0xFF, 0xFF, 0xFF, 0x07, 0x03, 0x03,
241 0x03, 0x03, 0x07, 0xFF, 0xFF, 0xFF,
242 0xDF, 0x9F, 0x3F, 0x3C, 0x70, 0x40,
243 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
244 0xC0, 0x5F, 0xD0, 0x90, 0x90, 0x90,
245 0xFC, 0x06, 0x01, 0xF8, 0xFC, 0xFC,
246 0xC0, 0xC0, 0xFF, 0xFF, 0x00, 0x00,
247 0x3C, 0x3C, 0x30, 0x01, 0x06, 0xFC,
248 0x90, 0x90, 0x90, 0xD0, 0x5F, 0xC0,
249 0x00, 0xF0, 0x0E, 0x01, 0x00, 0x00,
250 0x00, 0x00, 0x01, 0x03, 0x07, 0x1E,
251 0x3C, 0xF0, 0xE0, 0xFF, 0xFF, 0x80,
252 0x80, 0x80, 0x80, 0xC1, 0xC1, 0xFF,
253 0x3E, 0x00, 0x01, 0x0E, 0xF0, 0x00,
254 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
255 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
256 0x07, 0x05, 0x07, 0x00, 0x70, 0x50,
257 0x70, 0x20, 0x20, 0x20, 0x21, 0x3F,
258 0x01, 0x61, 0x9F, 0x9F, 0x61, 0x01,
259 0x3F, 0x21, 0x20, 0x20, 0x20, 0x70,
260 0x50, 0x70, 0x00, 0x07, 0x05, 0x07,
261 0x00, 0x00, 0x00, 0x01, 0x02, 0x04,
262 0x08, 0x10, 0x13, 0x23, 0x20, 0x40,
263 0x40, 0x40, 0x40, 0x43, 0x43, 0x40,
264 0x40, 0x20, 0x20, 0x10, 0x10, 0x08,
265 0x04, 0x02, 0x01, 0x00, 0x00, 0x00,
266 0x07, 0x07, 0x07, 0x07, 0x0F, 0x0F,
267 0x0F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F,
268 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F,
269 0x3F, 0x7F, 0x7F, 0x7F, 0xFF, 0xFF,
270 0x00, 0x80, 0xC0, 0x70, 0x7C, 0x3F,
271 0x3F, 0x1F, 0x0F, 0x0F, 0x07, 0x07,
272 0x07, 0x03, 0x03, 0x02, 0x00, 0x00,
273 0x00, 0x00, 0x02, 0x03, 0x03, 0x07,
274 0x07, 0x07, 0x0F, 0x0F, 0x1E, 0x3E,
275 0x3C, 0x7C, 0x70, 0xC0, 0x80, 0x00,
276};
277// clang-format on
diff --git a/keyboards/0xcb/1337/info.json b/keyboards/0xcb/1337/info.json
new file mode 100644
index 000000000..25899933c
--- /dev/null
+++ b/keyboards/0xcb/1337/info.json
@@ -0,0 +1,20 @@
1{
2 "keyboard_name": "0xCB 1337",
3 "url": "https://0xCB.dev",
4 "maintainer": "Conor-Burns",
5 "layouts": {
6 "LAYOUT": {
7 "layout": [
8 {"x":0, "y":0},
9 {"x":1, "y":0},
10 {"x":2, "y":0},
11 {"x":0, "y":1},
12 {"x":1, "y":1},
13 {"x":2, "y":1},
14 {"x":0, "y":2},
15 {"x":1, "y":2},
16 {"x":2, "y":2}
17 ]
18 }
19 }
20}
diff --git a/keyboards/0xcb/1337/keymaps/conor/keymap.c b/keyboards/0xcb/1337/keymaps/conor/keymap.c
new file mode 100644
index 000000000..615ca7baf
--- /dev/null
+++ b/keyboards/0xcb/1337/keymaps/conor/keymap.c
@@ -0,0 +1,186 @@
1/*
2Copyright 2021 0xCB - Conor Burns
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#include QMK_KEYBOARD_H
18// clang-format off
19enum layer_names {
20 _HOME,
21 _MISC,
22 _RGB,
23 _BLED
24};
25
26const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
27[_HOME] = LAYOUT(
28 KC_MPRV, KC_MNXT, KC_MPLY,
29 KC_PGUP, KC_PGDN, TO(3),
30 KC_HOME, KC_END, TO(1)
31),
32[_MISC] = LAYOUT(
33 _______, _______, _______,
34 _______, _______, TO(0),
35 _______, _______, TO(2)
36),
37[_RGB] = LAYOUT(
38 RGB_HUI, RGB_HUD, RGB_MOD,
39 RGB_SAI, RGB_SAD, TO(1),
40 RGB_SPI, RGB_SPD, TO(3)
41),
42[_BLED] = LAYOUT(
43 BL_STEP, BL_BRTG, BL_TOGG,
44 BL_ON, BL_OFF, TO(2),
45 BL_INC, BL_DEC, TO(0)
46)
47};
48// clang-format on
49
50/* rotary encoder (SW3) - add more else if blocks for more granular layer control */
51#ifdef ENCODER_ENABLE
52bool encoder_update_user(uint8_t index, bool clockwise) {
53 if (IS_LAYER_ON(_RGB)) {
54 #ifdef RGBLIGHT_ENABLE
55 if (clockwise) {
56 rgblight_increase_val();
57 } else {
58 rgblight_decrease_val();
59 }
60 #endif
61 } else if (IS_LAYER_ON(_BLED)) {
62 if (clockwise) {
63 backlight_increase();
64 } else {
65 backlight_decrease();
66 }
67 } else {
68 if (clockwise) {
69 tap_code(KC_VOLU);
70 } else {
71 tap_code(KC_VOLD);
72 }
73 }
74 return true;
75}
76#endif
77
78/* oled stuff :) */
79#ifdef OLED_ENABLE
80uint16_t startup_timer;
81
82oled_rotation_t oled_init_user(oled_rotation_t rotation) {
83 startup_timer = timer_read();
84 return rotation;
85}
86
87static void render_logo(void) {
88 static const char PROGMEM raw_logo[] = {
89 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
90 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 64,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 64,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
91 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 1, 2, 4, 2, 1, 1, 1, 1, 1, 1,255, 0, 0, 0, 0, 0, 0, 0, 0, 0,255, 1, 1, 1, 1, 1, 1, 2, 4, 2, 1, 0, 0, 0, 0, 0, 0,128, 0, 0, 0,
92 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 5,248, 5, 2, 0, 0, 0, 0, 0, 0,128,192,192,224,224,112,120, 56, 63, 28, 14, 14, 14,254, 14, 14, 30, 28, 63, 56,120,112,224,224,192,128, 0, 0, 0, 0, 0, 0, 0, 2, 5,248, 5, 2, 0,
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, 64,160, 19,162, 66, 66, 66, 66, 66, 66, 66,255,255,255, 0, 0, 0,252,254,254,192,192,192,192,255, 0, 0, 0, 62, 62, 60, 60, 0, 0, 1,255,255,255, 66, 66, 66, 66, 66, 66, 66,162, 19,160, 64, 0,
94 0, 0, 0,128, 64, 64, 64,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,192, 64, 64,192,128, 0, 0,192, 64, 64,192,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192, 64,192, 0, 0, 0, 0, 0,128,192, 64, 64,192,128, 0, 0,128,192, 64, 64,192,128, 0, 0, 64, 64, 64, 64, 64,192, 0, 0, 0, 0, 0,249, 8, 8, 8, 8, 8, 8, 8, 8,127,255,255,192,128,128, 15, 31, 31, 1, 1, 1, 1,255, 0, 0, 0, 30, 30, 14, 14,128,192,192,255,255,127, 8, 8, 8, 8, 8, 8, 8, 8,249, 0, 0, 0,
95 0, 0, 31, 49, 64, 78, 64, 49, 31, 0, 0, 97, 22, 8, 22, 97, 0, 0, 31, 49, 96, 64, 64, 96, 32, 0, 0,127, 68, 68,100, 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64,127, 64, 64, 0, 0, 0, 32,100, 68, 68,110, 59, 0, 0, 32,100, 68, 68,110, 59, 0, 0, 0, 0, 0,126, 3, 1, 0, 0, 0, 8, 20, 35, 20, 8, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 7, 7, 15,254, 30, 28, 28, 28,255, 28, 28, 28, 30,254, 15, 7, 3, 3, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 4, 10, 17, 10, 4, 0,
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, 16, 40, 68, 40, 16, 16, 16, 16, 16, 16, 31, 0, 0, 16, 40, 71, 40, 16, 0, 0, 31, 16, 16, 16, 16, 16, 16, 40, 68, 40, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
97 };
98 oled_write_raw_P(raw_logo, sizeof(raw_logo));
99}
100static void render_logo_font(void) {
101 static const char PROGMEM qmk_logo[] = {
102 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xCB, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0xCB, 0xCB, 0xCB, 0x9C, 0x9D, 0xCB, 0xCB,
103 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xCB, 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xCB, 0xCB, 0xBB, 0xBC, 0xBD, 0xBE, 0xCB,
104 0xCC, 0xCD, 0xCE, 0xCF, 0xD0, 0xCB, 0x88, 0x89, 0x8A, 0x8B, 0x8A, 0x8B, 0x8C, 0x8D, 0xCB, 0xCB, 0xDB, 0xDC, 0xDD, 0xDE, 0xCB,
105 0xEC, 0xED, 0xEE, 0xEF, 0xF0, 0xCB, 0xA8, 0xA9, 0xAA, 0xAB, 0xAA, 0xAB, 0xAC, 0xAD, 0xCB, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF, 0x00
106 };
107
108 oled_write_P(qmk_logo, false);
109}
110/* Shows the name of the current layer and locks for the host (CAPS etc.) */
111static void render_info(void) {
112 oled_write_P(PSTR("Layer: "), false);
113
114 switch (get_highest_layer(layer_state)) {
115 case _HOME:
116 oled_write_ln_P(PSTR("HOME"), false);
117 break;
118 case _MISC:
119 oled_write_ln_P(PSTR("MISC"), false);
120 break;
121 case _RGB:
122 oled_write_ln_P(PSTR("RGB"), false);
123 break;
124 case _BLED:
125 oled_write_ln_P(PSTR("Backlight"), false);
126 break;
127 default:
128 oled_write_ln_P(PSTR("Undefined"), false);
129 }
130 led_t led_state = host_keyboard_led_state();
131 oled_write_P(led_state.num_lock ? PSTR("NUM ") : PSTR(" "), false);
132 oled_write_P(led_state.caps_lock ? PSTR("CAP ") : PSTR(" "), false);
133 oled_write_ln_P(led_state.scroll_lock ? PSTR("SCR ") : PSTR(" "), false);
134}
135static void render_rgbled_status(bool) {
136 char string[4];
137 if (RGBLIGHT_MODES > 1 && rgblight_is_enabled() && get_highest_layer(layer_state) == _RGB) {
138 uint16_t m = rgblight_get_mode();
139 string[3] = '\0';
140 string[2] = '0' + m % 10;
141 string[1] = ( m /= 10) % 10 ? '0' + (m) % 10 : (m / 10) % 10 ? '0' : ' ';
142 string[0] = m / 10 ? '0' + m / 10 : ' ';
143 oled_write_P(PSTR("Conf:"), false);
144 oled_write(string, false);
145 uint16_t h = rgblight_get_hue()/RGBLIGHT_HUE_STEP;
146 string[3] = '\0';
147 string[2] = '0' + h % 10;
148 string[1] = ( h /= 10) % 10 ? '0' + (h) % 10 : (h / 10) % 10 ? '0' : ' ';
149 string[0] = h / 10 ? '0' + h / 10 : ' ';
150 oled_write_P(PSTR(","), false);
151 oled_write(string, false);
152 uint16_t s = rgblight_get_sat()/RGBLIGHT_SAT_STEP;
153 string[3] = '\0';
154 string[2] = '0' + s % 10;
155 string[1] = ( s /= 10) % 10 ? '0' + (s) % 10 : (s / 10) % 10 ? '0' : ' ';
156 string[0] = s / 10 ? '0' + s / 10 : ' ';
157 oled_write_P(PSTR(","), false);
158 oled_write(string, false);
159 uint16_t v = rgblight_get_val()/RGBLIGHT_VAL_STEP;
160 string[3] = '\0';
161 string[2] = '0' + v % 10;
162 string[1] = ( v /= 10) % 10 ? '0' + (v) % 10 : (v / 10) % 10 ? '0' : ' ';
163 string[0] = v / 10 ? '0' + v / 10 : ' ';
164 oled_write_P(PSTR(","), false);
165 oled_write(string, false);
166 oled_write_ln_P(PSTR("\n MOD HUE SAT VAR"), false);
167 } else {
168 oled_write_ln_P(PSTR("\n"), false);
169 }
170}
171bool oled_task_user(void) {
172 static bool finished_timer = false;
173 if (!finished_timer && (timer_elapsed(startup_timer) < 1000)) {
174 render_logo();
175 } else {
176 if (!finished_timer) {
177 oled_clear();
178 finished_timer = true;
179 }
180 render_info();
181 render_rgbled_status(true);
182 render_logo_font();
183 }
184 return false;
185}
186#endif
diff --git a/keyboards/0xcb/1337/keymaps/conor/rules.mk b/keyboards/0xcb/1337/keymaps/conor/rules.mk
new file mode 100644
index 000000000..1e5b99807
--- /dev/null
+++ b/keyboards/0xcb/1337/keymaps/conor/rules.mk
@@ -0,0 +1 @@
VIA_ENABLE = yes
diff --git a/keyboards/0xcb/1337/keymaps/default/keymap.c b/keyboards/0xcb/1337/keymaps/default/keymap.c
new file mode 100644
index 000000000..751af6f4f
--- /dev/null
+++ b/keyboards/0xcb/1337/keymaps/default/keymap.c
@@ -0,0 +1,177 @@
1/*
2Copyright 2021 0xCB - Conor Burns
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#include QMK_KEYBOARD_H
18// clang-format off
19enum layer_names {
20 _HOME,
21 _MISC,
22 _RGB,
23 _BLED
24};
25
26const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
27[_HOME] = LAYOUT(
28 KC_MPRV, KC_MNXT, KC_MPLY,
29 KC_PGUP, KC_PGDN, TO(3),
30 KC_HOME, KC_END, TO(1)
31),
32[_MISC] = LAYOUT(
33 _______, _______, _______,
34 _______, _______, TO(0),
35 _______, _______, TO(2)
36),
37[_RGB] = LAYOUT(
38 RGB_HUI, RGB_HUD, RGB_MOD,
39 RGB_SAI, RGB_SAD, TO(1),
40 RGB_SPI, RGB_SPD, TO(3)
41),
42[_BLED] = LAYOUT(
43 BL_STEP, BL_BRTG, BL_TOGG,
44 BL_ON, BL_OFF, TO(2),
45 BL_INC, BL_DEC, TO(0)
46)
47};
48// clang-format on
49
50/* rotary encoder (SW3) - add more else if blocks for more granular layer control */
51#ifdef ENCODER_ENABLE
52bool encoder_update_user(uint8_t index, bool clockwise) {
53 if (IS_LAYER_ON(_RGB)) {
54# ifdef RGBLIGHT_ENABLE
55 if (clockwise) {
56 rgblight_increase_val();
57 } else {
58 rgblight_decrease_val();
59 }
60# endif
61 } else if (IS_LAYER_ON(_BLED)) {
62 if (clockwise) {
63 backlight_increase();
64 } else {
65 backlight_decrease();
66 }
67 } else {
68 if (clockwise) {
69 tap_code(KC_VOLU);
70 } else {
71 tap_code(KC_VOLD);
72 }
73 }
74 return true;
75}
76#endif
77
78/* oled stuff :) */
79#ifdef OLED_ENABLE
80uint16_t startup_timer;
81
82oled_rotation_t oled_init_user(oled_rotation_t rotation) {
83 startup_timer = timer_read();
84 return rotation;
85}
86
87static void render_logo(void) {
88 static const char PROGMEM raw_logo[] = {
89 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 64, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 64, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
90 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 0, 0, 0, 0, 0, 0, 1, 2, 4, 2, 1, 1, 1, 1, 1, 1, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 1, 1, 1, 1, 1, 1, 2, 4, 2, 1, 0, 0, 0, 0, 0, 0, 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, 2, 5, 248, 5, 2, 0, 0, 0, 0, 0, 0, 128, 192, 192, 224, 224, 112, 120, 56, 63, 28, 14, 14, 14, 254, 14, 14, 30, 28, 63, 56, 120, 112, 224, 224, 192, 128, 0, 0, 0, 0, 0, 0, 0, 2, 5, 248, 5, 2, 0,
91 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 160, 19, 162, 66, 66, 66, 66, 66, 66, 66, 255, 255, 255, 0, 0, 0, 252, 254, 254, 192, 192, 192, 192, 255, 0, 0, 0, 62, 62, 60, 60, 0, 0, 1, 255, 255, 255, 66, 66, 66, 66, 66, 66, 66, 162, 19, 160, 64, 0, 0, 0, 0, 128, 64, 64, 64, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 192, 64, 64, 192, 128, 0, 0, 192, 64, 64, 192, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 192, 64, 192, 0, 0, 0, 0, 0, 128, 192, 64, 64, 192, 128, 0, 0, 128, 192, 64, 64, 192, 128, 0, 0, 64, 64, 64, 64, 64, 192, 0, 0, 0, 0, 0, 249, 8, 8, 8, 8, 8, 8, 8, 8, 127, 255, 255, 192, 128, 128, 15, 31, 31, 1, 1, 1, 1, 255, 0, 0, 0, 30, 30, 14, 14, 128, 192, 192, 255, 255, 127, 8, 8, 8, 8, 8, 8, 8, 8, 249, 0, 0, 0,
92 0, 0, 31, 49, 64, 78, 64, 49, 31, 0, 0, 97, 22, 8, 22, 97, 0, 0, 31, 49, 96, 64, 64, 96, 32, 0, 0, 127, 68, 68, 100, 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 127, 64, 64, 0, 0, 0, 32, 100, 68, 68, 110, 59, 0, 0, 32, 100, 68, 68, 110, 59, 0, 0, 0, 0, 0, 126, 3, 1, 0, 0, 0, 8, 20, 35, 20, 8, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 7, 7, 15, 254, 30, 28, 28, 28, 255, 28, 28, 28, 30, 254, 15, 7, 3, 3, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 4, 10, 17, 10, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 40, 68, 40, 16, 16, 16, 16, 16, 16, 31, 0, 0, 16, 40, 71, 40, 16, 0, 0, 31, 16, 16, 16, 16, 16, 16, 40, 68, 40, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
93 };
94 oled_write_raw_P(raw_logo, sizeof(raw_logo));
95}
96static void render_logo_font(void) {
97 static const char PROGMEM qmk_logo[] = {0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0xCB, 0xCB, 0xCB, 0xCB, 0xCB, 0xCB, 0xCB, 0xCB, 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xCB, 0xCB, 0xCB, 0xCB, 0xCB, 0xCB, 0xCB, 0xCB, 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0x88, 0x89, 0x8A, 0x8B, 0x8A, 0x8B, 0x8C, 0x8D, 0xCB, 0xCB, 0xCB, 0xCB, 0xCB, 0xCB, 0xCB, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, 0xD0, 0xA8, 0xA9, 0xAA, 0xAB, 0xAA, 0xAB, 0xAC, 0xAD, 0xCB, 0xCB, 0xCB, 0xCB, 0xCB, 0xCB, 0xCB, 0xCB, 0xEC, 0xED, 0xEE, 0xEF, 0xF0, 0x00};
98
99 oled_write_P(qmk_logo, false);
100}
101/* Shows the name of the current layer and locks for the host (CAPS etc.) */
102static void render_info(void) {
103 oled_write_P(PSTR("Layer: "), false);
104
105 switch (get_highest_layer(layer_state)) {
106 case _HOME:
107 oled_write_ln_P(PSTR("HOME"), false);
108 break;
109 case _MISC:
110 oled_write_ln_P(PSTR("MISC"), false);
111 break;
112 case _RGB:
113 oled_write_ln_P(PSTR("RGB"), false);
114 break;
115 case _BLED:
116 oled_write_ln_P(PSTR("Backlight"), false);
117 break;
118 default:
119 oled_write_ln_P(PSTR("Undefined"), false);
120 }
121 led_t led_state = host_keyboard_led_state();
122 oled_write_P(led_state.num_lock ? PSTR("NUM ") : PSTR(" "), false);
123 oled_write_P(led_state.caps_lock ? PSTR("CAP ") : PSTR(" "), false);
124 oled_write_ln_P(led_state.scroll_lock ? PSTR("SCR ") : PSTR(" "), false);
125}
126static void render_rgbled_status(void) {
127 char string[4];
128 if (RGBLIGHT_MODES > 1 && rgblight_is_enabled() && get_highest_layer(layer_state) == _RGB) {
129 uint16_t m = rgblight_get_mode();
130 string[3] = '\0';
131 string[2] = '0' + m % 10;
132 string[1] = (m /= 10) % 10 ? '0' + (m) % 10 : (m / 10) % 10 ? '0' : ' ';
133 string[0] = m / 10 ? '0' + m / 10 : ' ';
134 oled_write_P(PSTR("Conf:"), false);
135 oled_write(string, false);
136 uint16_t h = rgblight_get_hue() / RGBLIGHT_HUE_STEP;
137 string[3] = '\0';
138 string[2] = '0' + h % 10;
139 string[1] = (h /= 10) % 10 ? '0' + (h) % 10 : (h / 10) % 10 ? '0' : ' ';
140 string[0] = h / 10 ? '0' + h / 10 : ' ';
141 oled_write_P(PSTR(","), false);
142 oled_write(string, false);
143 uint16_t s = rgblight_get_sat() / RGBLIGHT_SAT_STEP;
144 string[3] = '\0';
145 string[2] = '0' + s % 10;
146 string[1] = (s /= 10) % 10 ? '0' + (s) % 10 : (s / 10) % 10 ? '0' : ' ';
147 string[0] = s / 10 ? '0' + s / 10 : ' ';
148 oled_write_P(PSTR(","), false);
149 oled_write(string, false);
150 uint16_t v = rgblight_get_val() / RGBLIGHT_VAL_STEP;
151 string[3] = '\0';
152 string[2] = '0' + v % 10;
153 string[1] = (v /= 10) % 10 ? '0' + (v) % 10 : (v / 10) % 10 ? '0' : ' ';
154 string[0] = v / 10 ? '0' + v / 10 : ' ';
155 oled_write_P(PSTR(","), false);
156 oled_write(string, false);
157 oled_write_ln_P(PSTR("\n MOD HUE SAT VAR"), false);
158 } else {
159 oled_write_ln_P(PSTR("\n"), false);
160 }
161}
162bool oled_task_user(void) {
163 static bool finished_timer = false;
164 if (!finished_timer && (timer_elapsed(startup_timer) < 1000)) {
165 render_logo();
166 } else {
167 if (!finished_timer) {
168 oled_clear();
169 finished_timer = true;
170 }
171 render_info();
172 render_rgbled_status();
173 render_logo_font();
174 }
175 return false;
176}
177#endif
diff --git a/keyboards/0xcb/1337/keymaps/jakob/keymap.c b/keyboards/0xcb/1337/keymaps/jakob/keymap.c
new file mode 100644
index 000000000..f4a075844
--- /dev/null
+++ b/keyboards/0xcb/1337/keymaps/jakob/keymap.c
@@ -0,0 +1,186 @@
1/*
2Copyright 2021 0xCB - Conor Burns
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#include QMK_KEYBOARD_H
18// clang-format off
19enum layer_names {
20 _HOME,
21 _MISC,
22 _RGB,
23 _BLED
24};
25
26const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
27[_HOME] = LAYOUT(
28 KC_MPRV, KC_MNXT, KC_MPLY,
29 KC_PGUP, KC_PGDN, TO(3),
30 KC_HOME, KC_END, TO(1)
31),
32[_MISC] = LAYOUT(
33 _______, _______, _______,
34 _______, _______, TO(0),
35 _______, _______, TO(2)
36),
37[_RGB] = LAYOUT(
38 RGB_HUI, RGB_HUD, RGB_MOD,
39 RGB_SAI, RGB_SAD, TO(1),
40 RGB_SPI, RGB_SPD, TO(3)
41),
42[_BLED] = LAYOUT(
43 BL_STEP, BL_BRTG, BL_TOGG,
44 BL_ON, BL_OFF, TO(2),
45 BL_INC, BL_DEC, TO(0)
46)
47};
48// clang-format on
49
50/* rotary encoder (SW3) - add more else if blocks for more granular layer control */
51#ifdef ENCODER_ENABLE
52bool encoder_update_user(uint8_t index, bool clockwise) {
53 if (IS_LAYER_ON(_RGB)) {
54 #ifdef RGBLIGHT_ENABLE
55 if (clockwise) {
56 rgblight_increase_val();
57 } else {
58 rgblight_decrease_val();
59 }
60 #endif
61 } else if (IS_LAYER_ON(_BLED)) {
62 if (clockwise) {
63 backlight_increase();
64 } else {
65 backlight_decrease();
66 }
67 } else {
68 if (clockwise) {
69 tap_code16(C(A(KC_UP)));
70 } else {
71 tap_code16(C(A(KC_DOWN)));
72 }
73 }
74 return true;
75}
76#endif
77
78/* oled stuff :) */
79#ifdef OLED_ENABLE
80uint16_t startup_timer;
81
82oled_rotation_t oled_init_user(oled_rotation_t rotation) {
83 startup_timer = timer_read();
84 return rotation;
85}
86
87static void render_logo(void) {
88 static const char PROGMEM raw_logo[] = {
89 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
90 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 64,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 64,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
91 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 1, 2, 4, 2, 1, 1, 1, 1, 1, 1,255, 0, 0, 0, 0, 0, 0, 0, 0, 0,255, 1, 1, 1, 1, 1, 1, 2, 4, 2, 1, 0, 0, 0, 0, 0, 0,128, 0, 0, 0,
92 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 5,248, 5, 2, 0, 0, 0, 0, 0, 0,128,192,192,224,224,112,120, 56, 63, 28, 14, 14, 14,254, 14, 14, 30, 28, 63, 56,120,112,224,224,192,128, 0, 0, 0, 0, 0, 0, 0, 2, 5,248, 5, 2, 0,
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, 64,160, 19,162, 66, 66, 66, 66, 66, 66, 66,255,255,255, 0, 0, 0,252,254,254,192,192,192,192,255, 0, 0, 0, 62, 62, 60, 60, 0, 0, 1,255,255,255, 66, 66, 66, 66, 66, 66, 66,162, 19,160, 64, 0,
94 0, 0, 0,128, 64, 64, 64,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,192, 64, 64,192,128, 0, 0,192, 64, 64,192,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192, 64,192, 0, 0, 0, 0, 0,128,192, 64, 64,192,128, 0, 0,128,192, 64, 64,192,128, 0, 0, 64, 64, 64, 64, 64,192, 0, 0, 0, 0, 0,249, 8, 8, 8, 8, 8, 8, 8, 8,127,255,255,192,128,128, 15, 31, 31, 1, 1, 1, 1,255, 0, 0, 0, 30, 30, 14, 14,128,192,192,255,255,127, 8, 8, 8, 8, 8, 8, 8, 8,249, 0, 0, 0,
95 0, 0, 31, 49, 64, 78, 64, 49, 31, 0, 0, 97, 22, 8, 22, 97, 0, 0, 31, 49, 96, 64, 64, 96, 32, 0, 0,127, 68, 68,100, 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64,127, 64, 64, 0, 0, 0, 32,100, 68, 68,110, 59, 0, 0, 32,100, 68, 68,110, 59, 0, 0, 0, 0, 0,126, 3, 1, 0, 0, 0, 8, 20, 35, 20, 8, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 7, 7, 15,254, 30, 28, 28, 28,255, 28, 28, 28, 30,254, 15, 7, 3, 3, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 4, 10, 17, 10, 4, 0,
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, 16, 40, 68, 40, 16, 16, 16, 16, 16, 16, 31, 0, 0, 16, 40, 71, 40, 16, 0, 0, 31, 16, 16, 16, 16, 16, 16, 40, 68, 40, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
97 };
98 oled_write_raw_P(raw_logo, sizeof(raw_logo));
99}
100static void render_logo_font(void) {
101 static const char PROGMEM qmk_logo[] = {
102 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0xCB, 0xCB, 0xCB, 0xCB, 0xCB, 0xCB, 0xCB, 0xCB, 0xC0, 0xC1, 0xC2, 0xC3, 0xC4,
103 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xCB, 0xCB, 0xCB, 0xCB, 0xCB, 0xCB, 0xCB, 0xCB, 0xE0, 0xE1, 0xE2, 0xE3, 0xE4,
104 0x88, 0x89, 0x8A, 0x8B, 0x8A, 0x8B, 0x8C, 0x8D, 0xCB, 0xCB, 0xCB, 0xCB, 0xCB, 0xCB, 0xCB, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, 0xD0,
105 0xA8, 0xA9, 0xAA, 0xAB, 0xAA, 0xAB, 0xAC, 0xAD, 0xCB, 0xCB, 0xCB, 0xCB, 0xCB, 0xCB, 0xCB, 0xCB, 0xEC, 0xED, 0xEE, 0xEF, 0xF0, 0x00
106 };
107
108 oled_write_P(qmk_logo, false);
109}
110/* Shows the name of the current layer and locks for the host (CAPS etc.) */
111static void render_info(void) {
112 oled_write_P(PSTR("Layer: "), false);
113
114 switch (get_highest_layer(layer_state)) {
115 case _HOME:
116 oled_write_ln_P(PSTR("HOME"), false);
117 break;
118 case _MISC:
119 oled_write_ln_P(PSTR("MISC"), false);
120 break;
121 case _RGB:
122 oled_write_ln_P(PSTR("RGB"), false);
123 break;
124 case _BLED:
125 oled_write_ln_P(PSTR("Backlight"), false);
126 break;
127 default:
128 oled_write_ln_P(PSTR("Undefined"), false);
129 }
130 led_t led_state = host_keyboard_led_state();
131 oled_write_P(led_state.num_lock ? PSTR("NUM ") : PSTR(" "), false);
132 oled_write_P(led_state.caps_lock ? PSTR("CAP ") : PSTR(" "), false);
133 oled_write_ln_P(led_state.scroll_lock ? PSTR("SCR ") : PSTR(" "), false);
134}
135static void render_rgbled_status(bool) {
136 char string[4];
137 if (RGBLIGHT_MODES > 1 && rgblight_is_enabled() && get_highest_layer(layer_state) == _RGB) {
138 uint16_t m = rgblight_get_mode();
139 string[3] = '\0';
140 string[2] = '0' + m % 10;
141 string[1] = ( m /= 10) % 10 ? '0' + (m) % 10 : (m / 10) % 10 ? '0' : ' ';
142 string[0] = m / 10 ? '0' + m / 10 : ' ';
143 oled_write_P(PSTR("Conf:"), false);
144 oled_write(string, false);
145 uint16_t h = rgblight_get_hue()/RGBLIGHT_HUE_STEP;
146 string[3] = '\0';
147 string[2] = '0' + h % 10;
148 string[1] = ( h /= 10) % 10 ? '0' + (h) % 10 : (h / 10) % 10 ? '0' : ' ';
149 string[0] = h / 10 ? '0' + h / 10 : ' ';
150 oled_write_P(PSTR(","), false);
151 oled_write(string, false);
152 uint16_t s = rgblight_get_sat()/RGBLIGHT_SAT_STEP;
153 string[3] = '\0';
154 string[2] = '0' + s % 10;
155 string[1] = ( s /= 10) % 10 ? '0' + (s) % 10 : (s / 10) % 10 ? '0' : ' ';
156 string[0] = s / 10 ? '0' + s / 10 : ' ';
157 oled_write_P(PSTR(","), false);
158 oled_write(string, false);
159 uint16_t v = rgblight_get_val()/RGBLIGHT_VAL_STEP;
160 string[3] = '\0';
161 string[2] = '0' + v % 10;
162 string[1] = ( v /= 10) % 10 ? '0' + (v) % 10 : (v / 10) % 10 ? '0' : ' ';
163 string[0] = v / 10 ? '0' + v / 10 : ' ';
164 oled_write_P(PSTR(","), false);
165 oled_write(string, false);
166 oled_write_ln_P(PSTR("\n MOD HUE SAT VAR"), false);
167 } else {
168 oled_write_ln_P(PSTR("\n"), false);
169 }
170}
171bool oled_task_user(void) {
172 static bool finished_timer = false;
173 if (!finished_timer && (timer_elapsed(startup_timer) < 1000)) {
174 render_logo();
175 } else {
176 if (!finished_timer) {
177 oled_clear();
178 finished_timer = true;
179 }
180 render_info();
181 render_rgbled_status(true);
182 render_logo_font();
183 }
184 return false;
185}
186#endif
diff --git a/keyboards/0xcb/1337/keymaps/jakob/rules.mk b/keyboards/0xcb/1337/keymaps/jakob/rules.mk
new file mode 100644
index 000000000..1e5b99807
--- /dev/null
+++ b/keyboards/0xcb/1337/keymaps/jakob/rules.mk
@@ -0,0 +1 @@
VIA_ENABLE = yes
diff --git a/keyboards/0xcb/1337/keymaps/via/keymap.c b/keyboards/0xcb/1337/keymaps/via/keymap.c
new file mode 100644
index 000000000..a85670e06
--- /dev/null
+++ b/keyboards/0xcb/1337/keymaps/via/keymap.c
@@ -0,0 +1,186 @@
1/*
2Copyright 2021 0xCB - Conor Burns
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#include QMK_KEYBOARD_H
18// clang-format off
19enum layer_names {
20 _HOME,
21 _MISC,
22 _RGB,
23 _BLED
24};
25
26const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
27[_HOME] = LAYOUT(
28 KC_MPRV, KC_MNXT, KC_MPLY,
29 KC_PGUP, KC_PGDN, TO(3),
30 KC_HOME, KC_END, TO(1)
31),
32[_MISC] = LAYOUT(
33 _______, _______, _______,
34 _______, _______, TO(0),
35 _______, _______, TO(2)
36),
37[_RGB] = LAYOUT(
38 RGB_HUI, RGB_HUD, RGB_MOD,
39 RGB_SAI, RGB_SAD, TO(1),
40 RGB_SPI, RGB_SPD, TO(3)
41),
42[_BLED] = LAYOUT(
43 BL_STEP, BL_BRTG, BL_TOGG,
44 BL_ON, BL_OFF, TO(2),
45 BL_INC, BL_DEC, TO(0)
46)
47};
48// clang-format on
49
50/* rotary encoder (SW3) - add more else if blocks for more granular layer control */
51#ifdef ENCODER_ENABLE
52bool encoder_update_user(uint8_t index, bool clockwise) {
53 if (IS_LAYER_ON(_RGB)) {
54 #ifdef RGBLIGHT_ENABLE
55 if (clockwise) {
56 rgblight_increase_val();
57 } else {
58 rgblight_decrease_val();
59 }
60 #endif
61 } else if (IS_LAYER_ON(_BLED)) {
62 if (clockwise) {
63 backlight_increase();
64 } else {
65 backlight_decrease();
66 }
67 } else {
68 if (clockwise) {
69 tap_code(KC_VOLU);
70 } else {
71 tap_code(KC_VOLD);
72 }
73 }
74 return true;
75}
76#endif
77
78/* oled stuff :) */
79#ifdef OLED_ENABLE
80uint16_t startup_timer;
81
82oled_rotation_t oled_init_user(oled_rotation_t rotation) {
83 startup_timer = timer_read();
84 return rotation;
85}
86
87static void render_logo(void) {
88 static const char PROGMEM raw_logo[] = {
89 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
90 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 64,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 64,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
91 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 1, 2, 4, 2, 1, 1, 1, 1, 1, 1,255, 0, 0, 0, 0, 0, 0, 0, 0, 0,255, 1, 1, 1, 1, 1, 1, 2, 4, 2, 1, 0, 0, 0, 0, 0, 0,128, 0, 0, 0,
92 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 5,248, 5, 2, 0, 0, 0, 0, 0, 0,128,192,192,224,224,112,120, 56, 63, 28, 14, 14, 14,254, 14, 14, 30, 28, 63, 56,120,112,224,224,192,128, 0, 0, 0, 0, 0, 0, 0, 2, 5,248, 5, 2, 0,
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, 64,160, 19,162, 66, 66, 66, 66, 66, 66, 66,255,255,255, 0, 0, 0,252,254,254,192,192,192,192,255, 0, 0, 0, 62, 62, 60, 60, 0, 0, 1,255,255,255, 66, 66, 66, 66, 66, 66, 66,162, 19,160, 64, 0,
94 0, 0, 0,128, 64, 64, 64,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,192, 64, 64,192,128, 0, 0,192, 64, 64,192,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192, 64,192, 0, 0, 0, 0, 0,128,192, 64, 64,192,128, 0, 0,128,192, 64, 64,192,128, 0, 0, 64, 64, 64, 64, 64,192, 0, 0, 0, 0, 0,249, 8, 8, 8, 8, 8, 8, 8, 8,127,255,255,192,128,128, 15, 31, 31, 1, 1, 1, 1,255, 0, 0, 0, 30, 30, 14, 14,128,192,192,255,255,127, 8, 8, 8, 8, 8, 8, 8, 8,249, 0, 0, 0,
95 0, 0, 31, 49, 64, 78, 64, 49, 31, 0, 0, 97, 22, 8, 22, 97, 0, 0, 31, 49, 96, 64, 64, 96, 32, 0, 0,127, 68, 68,100, 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64,127, 64, 64, 0, 0, 0, 32,100, 68, 68,110, 59, 0, 0, 32,100, 68, 68,110, 59, 0, 0, 0, 0, 0,126, 3, 1, 0, 0, 0, 8, 20, 35, 20, 8, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 7, 7, 15,254, 30, 28, 28, 28,255, 28, 28, 28, 30,254, 15, 7, 3, 3, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 4, 10, 17, 10, 4, 0,
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, 16, 40, 68, 40, 16, 16, 16, 16, 16, 16, 31, 0, 0, 16, 40, 71, 40, 16, 0, 0, 31, 16, 16, 16, 16, 16, 16, 40, 68, 40, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
97 };
98 oled_write_raw_P(raw_logo, sizeof(raw_logo));
99}
100static void render_logo_font(void) {
101 static const char PROGMEM qmk_logo[] = {
102 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0xCB, 0xCB, 0xCB, 0xCB, 0xCB, 0xCB, 0xCB, 0xCB, 0xC0, 0xC1, 0xC2, 0xC3, 0xC4,
103 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xCB, 0xCB, 0xCB, 0xCB, 0xCB, 0xCB, 0xCB, 0xCB, 0xE0, 0xE1, 0xE2, 0xE3, 0xE4,
104 0x88, 0x89, 0x8A, 0x8B, 0x8A, 0x8B, 0x8C, 0x8D, 0xCB, 0xCB, 0xCB, 0xCB, 0xCB, 0xCB, 0xCB, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, 0xD0,
105 0xA8, 0xA9, 0xAA, 0xAB, 0xAA, 0xAB, 0xAC, 0xAD, 0xCB, 0xCB, 0xCB, 0xCB, 0xCB, 0xCB, 0xCB, 0xCB, 0xEC, 0xED, 0xEE, 0xEF, 0xF0, 0x00
106 };
107
108 oled_write_P(qmk_logo, false);
109}
110/* Shows the name of the current layer and locks for the host (CAPS etc.) */
111static void render_info(void) {
112 oled_write_P(PSTR("Layer: "), false);
113
114 switch (get_highest_layer(layer_state)) {
115 case _HOME:
116 oled_write_ln_P(PSTR("HOME"), false);
117 break;
118 case _MISC:
119 oled_write_ln_P(PSTR("MISC"), false);
120 break;
121 case _RGB:
122 oled_write_ln_P(PSTR("RGB"), false);
123 break;
124 case _BLED:
125 oled_write_ln_P(PSTR("Backlight"), false);
126 break;
127 default:
128 oled_write_ln_P(PSTR("Undefined"), false);
129 }
130 led_t led_state = host_keyboard_led_state();
131 oled_write_P(led_state.num_lock ? PSTR("NUM ") : PSTR(" "), false);
132 oled_write_P(led_state.caps_lock ? PSTR("CAP ") : PSTR(" "), false);
133 oled_write_ln_P(led_state.scroll_lock ? PSTR("SCR ") : PSTR(" "), false);
134}
135static void render_rgbled_status(void) {
136 char string[4];
137 if (RGBLIGHT_MODES > 1 && rgblight_is_enabled() && get_highest_layer(layer_state) == _RGB) {
138 uint16_t m = rgblight_get_mode();
139 string[3] = '\0';
140 string[2] = '0' + m % 10;
141 string[1] = ( m /= 10) % 10 ? '0' + (m) % 10 : (m / 10) % 10 ? '0' : ' ';
142 string[0] = m / 10 ? '0' + m / 10 : ' ';
143 oled_write_P(PSTR("Conf:"), false);
144 oled_write(string, false);
145 uint16_t h = rgblight_get_hue()/RGBLIGHT_HUE_STEP;
146 string[3] = '\0';
147 string[2] = '0' + h % 10;
148 string[1] = ( h /= 10) % 10 ? '0' + (h) % 10 : (h / 10) % 10 ? '0' : ' ';
149 string[0] = h / 10 ? '0' + h / 10 : ' ';
150 oled_write_P(PSTR(","), false);
151 oled_write(string, false);
152 uint16_t s = rgblight_get_sat()/RGBLIGHT_SAT_STEP;
153 string[3] = '\0';
154 string[2] = '0' + s % 10;
155 string[1] = ( s /= 10) % 10 ? '0' + (s) % 10 : (s / 10) % 10 ? '0' : ' ';
156 string[0] = s / 10 ? '0' + s / 10 : ' ';
157 oled_write_P(PSTR(","), false);
158 oled_write(string, false);
159 uint16_t v = rgblight_get_val()/RGBLIGHT_VAL_STEP;
160 string[3] = '\0';
161 string[2] = '0' + v % 10;
162 string[1] = ( v /= 10) % 10 ? '0' + (v) % 10 : (v / 10) % 10 ? '0' : ' ';
163 string[0] = v / 10 ? '0' + v / 10 : ' ';
164 oled_write_P(PSTR(","), false);
165 oled_write(string, false);
166 oled_write_ln_P(PSTR("\n MOD HUE SAT VAR"), false);
167 } else {
168 oled_write_ln_P(PSTR("\n"), false);
169 }
170}
171bool oled_task_user(void) {
172 static bool finished_timer = false;
173 if (!finished_timer && (timer_elapsed(startup_timer) < 1000)) {
174 render_logo();
175 } else {
176 if (!finished_timer) {
177 oled_clear();
178 finished_timer = true;
179 }
180 render_info();
181 render_rgbled_status();
182 render_logo_font();
183 }
184 return false;
185}
186#endif
diff --git a/keyboards/0xcb/1337/keymaps/via/rules.mk b/keyboards/0xcb/1337/keymaps/via/rules.mk
new file mode 100644
index 000000000..1e5b99807
--- /dev/null
+++ b/keyboards/0xcb/1337/keymaps/via/rules.mk
@@ -0,0 +1 @@
VIA_ENABLE = yes
diff --git a/keyboards/0xcb/1337/readme.md b/keyboards/0xcb/1337/readme.md
new file mode 100644
index 000000000..8fef5be7b
--- /dev/null
+++ b/keyboards/0xcb/1337/readme.md
@@ -0,0 +1,25 @@
1# 0xCB 1337
2
3Macro keypad
4
5* Keyboard Maintainer: [Conor Burns](https://github.com/conor-burns)
6* Hardware Supported: https://github.com/0xcb-dev/0xcb-1337
7* Hardware Availability: On [tindie](https://www.tindie.com/products/0xcb/0xcb-1337-a-customizable-macro-keyboard-with-qmk/) or order your own parts - the hardware in the repo is Open Source :D
8* PCB renders :)
9
10![](https://github.com/0xCB-dev/0xcb-1337/blob/main/PCB/rev3.0/top.png)
11
12![](https://github.com/0xCB-dev/0xcb-1337/blob/main/PCB/rev3.0/bottom.png)
13
14More Pictures [here](https://0xcb.dev/1337/)
15To go to bootloader press row 0 col 0 key (top left) while plugging in the board. (Or press the reset button on V2.0 and v3.0)
16
17Make example for this keyboard (after setting up your build environment):
18
19 make 0xcb/1337:default
20
21Flashing example for this keyboard:
22
23 make 0xcb/1337:default:flash
24
25See 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).
diff --git a/keyboards/0xcb/1337/rules.mk b/keyboards/0xcb/1337/rules.mk
new file mode 100644
index 000000000..267c4d09a
--- /dev/null
+++ b/keyboards/0xcb/1337/rules.mk
@@ -0,0 +1,23 @@
1# MCU name
2MCU = atmega32u4
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 = yes # Mouse keys
12EXTRAKEY_ENABLE = yes # Audio control and System control
13CONSOLE_ENABLE = no # Console for debug
14COMMAND_ENABLE = no # Commands for debug and configuration
15NKRO_ENABLE = no # Enable N-Key Rollover
16BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
17RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
18AUDIO_ENABLE = no # Audio output
19
20ENCODER_ENABLE = yes
21LTO_ENABLE = yes
22OLED_ENABLE = yes
23OLED_DRIVER = SSD1306
diff --git a/keyboards/0xcb/static/config.h b/keyboards/0xcb/static/config.h
new file mode 100644
index 000000000..c30450b46
--- /dev/null
+++ b/keyboards/0xcb/static/config.h
@@ -0,0 +1,69 @@
1/*
2Copyright 2021 0xCB - Conor Burns
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#pragma once
18
19#include "config_common.h"
20// clang-format off
21/* USB Device descriptor parameter */
22#define VENDOR_ID 0xCB00
23#define PRODUCT_ID 0xA455
24#define DEVICE_VER 0x0001
25#define MANUFACTURER 0xCB
26#define PRODUCT Static
27
28/* key matrix size */
29#define MATRIX_ROWS 8
30#define MATRIX_COLS 6
31
32
33/*
34 * Keyboard Matrix Assignments
35 *
36 * Change this to how you wired your keyboard
37 * COLS: AVR pins used for columns, left to right
38 * ROWS: AVR pins used for rows, top to bottom
39 * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
40 * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
41 *
42*/
43#define MATRIX_ROW_PINS { D5, D6, D7, B0, B1, B2, B3, B4 }
44#define MATRIX_COL_PINS { B5, D4, C0, C1, C2, C3 }
45#define UNUSED_PINS
46
47/* COL2ROW, ROW2COL*/
48#define DIODE_DIRECTION COL2ROW
49
50#define TAP_CODE_DELAY 10
51#define ENCODER_RESOLUTION 4
52#define ENCODERS_PAD_A { D0 }
53#define ENCODERS_PAD_B { D1 }
54// clang-format on
55/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
56#define DEBOUNCE 5
57
58/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
59#define LOCKING_SUPPORT_ENABLE
60/* Locking resynchronize hack */
61#define LOCKING_RESYNC_ENABLE
62
63/* oled custom font */
64#define OLED_FONT_END 255
65#define OLED_FONT_H "gfxfont.c"
66
67/* bootmagic */
68#define BOOTMAGIC_LITE_ROW 0
69#define BOOTMAGIC_LITE_COLUMN 0
diff --git a/keyboards/0xcb/static/gfxfont.c b/keyboards/0xcb/static/gfxfont.c
new file mode 100644
index 000000000..3f499a530
--- /dev/null
+++ b/keyboards/0xcb/static/gfxfont.c
@@ -0,0 +1,277 @@
1/*
2Copyright 2021 0xCB - Conor Burns
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#include "progmem.h"
18// clang-format off
19static const unsigned char font[] PROGMEM = {
20 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
21 0x3E, 0x5B, 0x4F, 0x5B, 0x3E, 0x00,
22 0x3E, 0x6B, 0x4F, 0x6B, 0x3E, 0x00,
23 0x1C, 0x3E, 0x7C, 0x3E, 0x1C, 0x00,
24 0x18, 0x3C, 0x7E, 0x3C, 0x18, 0x00,
25 0x1C, 0x57, 0x7D, 0x57, 0x1C, 0x00,
26 0x1C, 0x5E, 0x7F, 0x5E, 0x1C, 0x00,
27 0x00, 0x18, 0x3C, 0x18, 0x00, 0x00,
28 0xFF, 0xE7, 0xC3, 0xE7, 0xFF, 0x00,
29 0x00, 0x18, 0x24, 0x18, 0x00, 0x00,
30 0xFF, 0xE7, 0xDB, 0xE7, 0xFF, 0x00,
31 0x30, 0x48, 0x3A, 0x06, 0x0E, 0x00,
32 0x26, 0x29, 0x79, 0x29, 0x26, 0x00,
33 0x40, 0x7F, 0x05, 0x05, 0x07, 0x00,
34 0x40, 0x7F, 0x05, 0x25, 0x3F, 0x00,
35 0x5A, 0x3C, 0xE7, 0x3C, 0x5A, 0x00,
36 0x7F, 0x3E, 0x1C, 0x1C, 0x08, 0x00,
37 0x08, 0x1C, 0x1C, 0x3E, 0x7F, 0x00,
38 0x14, 0x22, 0x7F, 0x22, 0x14, 0x00,
39 0x5F, 0x5F, 0x00, 0x5F, 0x5F, 0x00,
40 0x06, 0x09, 0x7F, 0x01, 0x7F, 0x00,
41 0x00, 0x66, 0x89, 0x95, 0x6A, 0x00,
42 0x60, 0x60, 0x60, 0x60, 0x60, 0x00,
43 0x94, 0xA2, 0xFF, 0xA2, 0x94, 0x00,
44 0x08, 0x04, 0x7E, 0x04, 0x08, 0x00,
45 0x10, 0x20, 0x7E, 0x20, 0x10, 0x00,
46 0x08, 0x08, 0x2A, 0x1C, 0x08, 0x00,
47 0x08, 0x1C, 0x2A, 0x08, 0x08, 0x00,
48 0x1E, 0x10, 0x10, 0x10, 0x10, 0x00,
49 0x0C, 0x1E, 0x0C, 0x1E, 0x0C, 0x00,
50 0x30, 0x38, 0x3E, 0x38, 0x30, 0x00,
51 0x06, 0x0E, 0x3E, 0x0E, 0x06, 0x00,
52 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
53 0x00, 0x00, 0x5F, 0x00, 0x00, 0x00,
54 0x00, 0x07, 0x00, 0x07, 0x00, 0x00,
55 0x14, 0x7F, 0x14, 0x7F, 0x14, 0x00,
56 0x24, 0x2A, 0x7F, 0x2A, 0x12, 0x00,
57 0x23, 0x13, 0x08, 0x64, 0x62, 0x00,
58 0x36, 0x49, 0x56, 0x20, 0x50, 0x00,
59 0x00, 0x08, 0x07, 0x03, 0x00, 0x00,
60 0x00, 0x1C, 0x22, 0x41, 0x00, 0x00,
61 0x00, 0x41, 0x22, 0x1C, 0x00, 0x00,
62 0x2A, 0x1C, 0x7F, 0x1C, 0x2A, 0x00,
63 0x08, 0x08, 0x3E, 0x08, 0x08, 0x00,
64 0x00, 0x80, 0x70, 0x30, 0x00, 0x00,
65 0x08, 0x08, 0x08, 0x08, 0x08, 0x00,
66 0x00, 0x00, 0x60, 0x60, 0x00, 0x00,
67 0x20, 0x10, 0x08, 0x04, 0x02, 0x00,
68 0x3E, 0x51, 0x49, 0x45, 0x3E, 0x00,
69 0x00, 0x42, 0x7F, 0x40, 0x00, 0x00,
70 0x72, 0x49, 0x49, 0x49, 0x46, 0x00,
71 0x21, 0x41, 0x49, 0x4D, 0x33, 0x00,
72 0x18, 0x14, 0x12, 0x7F, 0x10, 0x00,
73 0x27, 0x45, 0x45, 0x45, 0x39, 0x00,
74 0x3C, 0x4A, 0x49, 0x49, 0x31, 0x00,
75 0x41, 0x21, 0x11, 0x09, 0x07, 0x00,
76 0x36, 0x49, 0x49, 0x49, 0x36, 0x00,
77 0x46, 0x49, 0x49, 0x29, 0x1E, 0x00,
78 0x00, 0x00, 0x14, 0x00, 0x00, 0x00,
79 0x00, 0x40, 0x34, 0x00, 0x00, 0x00,
80 0x00, 0x08, 0x14, 0x22, 0x41, 0x00,
81 0x14, 0x14, 0x14, 0x14, 0x14, 0x00,
82 0x00, 0x41, 0x22, 0x14, 0x08, 0x00,
83 0x02, 0x01, 0x59, 0x09, 0x06, 0x00,
84 0x3E, 0x41, 0x5D, 0x59, 0x4E, 0x00,
85 0x7C, 0x12, 0x11, 0x12, 0x7C, 0x00,
86 0x7F, 0x49, 0x49, 0x49, 0x36, 0x00,
87 0x3E, 0x41, 0x41, 0x41, 0x22, 0x00,
88 0x7F, 0x41, 0x41, 0x41, 0x3E, 0x00,
89 0x7F, 0x49, 0x49, 0x49, 0x41, 0x00,
90 0x7F, 0x09, 0x09, 0x09, 0x01, 0x00,
91 0x3E, 0x41, 0x41, 0x51, 0x73, 0x00,
92 0x7F, 0x08, 0x08, 0x08, 0x7F, 0x00,
93 0x00, 0x41, 0x7F, 0x41, 0x00, 0x00,
94 0x20, 0x40, 0x41, 0x3F, 0x01, 0x00,
95 0x7F, 0x08, 0x14, 0x22, 0x41, 0x00,
96 0x7F, 0x40, 0x40, 0x40, 0x40, 0x00,
97 0x7F, 0x02, 0x1C, 0x02, 0x7F, 0x00,
98 0x7F, 0x04, 0x08, 0x10, 0x7F, 0x00,
99 0x3E, 0x41, 0x41, 0x41, 0x3E, 0x00,
100 0x7F, 0x09, 0x09, 0x09, 0x06, 0x00,
101 0x3E, 0x41, 0x51, 0x21, 0x5E, 0x00,
102 0x7F, 0x09, 0x19, 0x29, 0x46, 0x00,
103 0x26, 0x49, 0x49, 0x49, 0x32, 0x00,
104 0x03, 0x01, 0x7F, 0x01, 0x03, 0x00,
105 0x3F, 0x40, 0x40, 0x40, 0x3F, 0x00,
106 0x1F, 0x20, 0x40, 0x20, 0x1F, 0x00,
107 0x3F, 0x40, 0x38, 0x40, 0x3F, 0x00,
108 0x63, 0x14, 0x08, 0x14, 0x63, 0x00,
109 0x03, 0x04, 0x78, 0x04, 0x03, 0x00,
110 0x61, 0x59, 0x49, 0x4D, 0x43, 0x00,
111 0x00, 0x7F, 0x41, 0x41, 0x41, 0x00,
112 0x02, 0x04, 0x08, 0x10, 0x20, 0x00,
113 0x00, 0x41, 0x41, 0x41, 0x7F, 0x00,
114 0x04, 0x02, 0x01, 0x02, 0x04, 0x00,
115 0x40, 0x40, 0x40, 0x40, 0x40, 0x00,
116 0x00, 0x03, 0x07, 0x08, 0x00, 0x00,
117 0x20, 0x54, 0x54, 0x78, 0x40, 0x00,
118 0x7F, 0x28, 0x44, 0x44, 0x38, 0x00,
119 0x38, 0x44, 0x44, 0x44, 0x28, 0x00,
120 0x38, 0x44, 0x44, 0x28, 0x7F, 0x00,
121 0x38, 0x54, 0x54, 0x54, 0x18, 0x00,
122 0x00, 0x08, 0x7E, 0x09, 0x02, 0x00,
123 0x18, 0x24, 0x24, 0x1C, 0x78, 0x00,
124 0x7F, 0x08, 0x04, 0x04, 0x78, 0x00,
125 0x00, 0x44, 0x7D, 0x40, 0x00, 0x00,
126 0x20, 0x40, 0x40, 0x3D, 0x00, 0x00,
127 0x7F, 0x10, 0x28, 0x44, 0x00, 0x00,
128 0x00, 0x41, 0x7F, 0x40, 0x00, 0x00,
129 0x7C, 0x04, 0x78, 0x04, 0x78, 0x00,
130 0x7C, 0x08, 0x04, 0x04, 0x78, 0x00,
131 0x38, 0x44, 0x44, 0x44, 0x38, 0x00,
132 0xFC, 0x18, 0x24, 0x24, 0x18, 0x00,
133 0x18, 0x24, 0x24, 0x18, 0xFC, 0x00,
134 0x7C, 0x08, 0x04, 0x04, 0x08, 0x00,
135 0x48, 0x54, 0x54, 0x54, 0x24, 0x00,
136 0x04, 0x04, 0x3F, 0x44, 0x24, 0x00,
137 0x3C, 0x40, 0x40, 0x20, 0x7C, 0x00,
138 0x1C, 0x20, 0x40, 0x20, 0x1C, 0x00,
139 0x3C, 0x40, 0x30, 0x40, 0x3C, 0x00,
140 0x44, 0x28, 0x10, 0x28, 0x44, 0x00,
141 0x4C, 0x10, 0x10, 0x10, 0x7C, 0x00,
142 0x44, 0xE4, 0xD4, 0x4C, 0x44, 0x00,
143 0x00, 0x08, 0x36, 0x41, 0x00, 0x00,
144 0x00, 0x00, 0x77, 0x00, 0x00, 0x00,
145 0x00, 0x41, 0x36, 0x08, 0x00, 0x00,
146 0x02, 0x01, 0x02, 0x04, 0x02, 0x00,
147 0x3C, 0x26, 0x23, 0x26, 0x3C, 0x00,
148 0x00, 0xE0, 0xFC, 0x1E, 0x06, 0xC6,
149 0xC6, 0x06, 0x1E, 0xFC, 0xE0, 0x00,
150 0x00, 0x00, 0x60, 0xE0, 0x80, 0x00,
151 0x00, 0x80, 0xE0, 0x60, 0x00, 0x00,
152 0x00, 0x00, 0xE0, 0xF8, 0x3C, 0x0E,
153 0x06, 0x06, 0x06, 0x0E, 0x0C, 0x00,
154 0x00, 0x00, 0xFE, 0xFE, 0x86, 0x86,
155 0x86, 0x86, 0x8C, 0x78, 0x70, 0x00,
156 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
157 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
158 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
159 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
160 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
161 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
162 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
163 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
164 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
165 0xFF, 0xFF, 0x38, 0x38, 0xC0, 0xC0,
166 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00,
167 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00,
168 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00,
169 0xFF, 0xFF, 0x0C, 0x0C, 0xF0, 0xF0,
170 0x0C, 0x0C, 0xFF, 0xFF, 0x00, 0x00,
171 0xFF, 0xFF, 0x7F, 0x07, 0x07, 0x07,
172 0x03, 0x03, 0x00, 0x00, 0x00, 0x07,
173 0x07, 0x00, 0x00, 0x00, 0x03, 0x03,
174 0x07, 0x07, 0x07, 0x7F, 0xFF, 0xFF,
175 0x70, 0xD0, 0x70, 0x00, 0x07, 0x05,
176 0x07, 0x02, 0x02, 0x82, 0xC2, 0x42,
177 0x7E, 0xC0, 0xC0, 0xC0, 0x40, 0x7E,
178 0x42, 0xC2, 0x82, 0x02, 0x02, 0x07,
179 0x05, 0x07, 0x00, 0x70, 0xD0, 0x70,
180 0x00, 0x07, 0x3F, 0x78, 0x60, 0x63,
181 0x63, 0x60, 0x78, 0x3F, 0x07, 0x00,
182 0x00, 0x00, 0x60, 0x79, 0x19, 0x06,
183 0x06, 0x19, 0x79, 0x60, 0x00, 0x00,
184 0x00, 0x00, 0x07, 0x1F, 0x3C, 0x70,
185 0x60, 0x60, 0x60, 0x70, 0x30, 0x00,
186 0x00, 0x00, 0x7F, 0x7F, 0x61, 0x61,
187 0x61, 0x61, 0x31, 0x1E, 0x0E, 0x00,
188 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
189 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
190 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
191 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
192 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
193 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
194 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
195 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
196 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
197 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00,
198 0x07, 0x07, 0x3F, 0x3F, 0x00, 0x00,
199 0x0F, 0x0F, 0x30, 0x30, 0x30, 0x30,
200 0x30, 0x30, 0x0F, 0x0F, 0x00, 0x00,
201 0x3F, 0x3F, 0x00, 0x00, 0x03, 0x03,
202 0x00, 0x00, 0x3F, 0x3F, 0x00, 0x00,
203 0x83, 0x83, 0x80, 0x00, 0x00, 0x00,
204 0x00, 0x00, 0x00, 0x18, 0x18, 0xFE,
205 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00,
206 0x00, 0x00, 0x00, 0x80, 0x83, 0x83,
207 0xC0, 0x5F, 0xD0, 0x90, 0x90, 0x90,
208 0xFC, 0x06, 0x01, 0xF8, 0xFC, 0xFC,
209 0xC0, 0xC0, 0xFF, 0xFF, 0x00, 0x00,
210 0x3C, 0x3C, 0x30, 0x01, 0x06, 0xFC,
211 0x90, 0x90, 0x90, 0xD0, 0x5F, 0xC0,
212 0x00, 0x18, 0x18, 0x86, 0x86, 0x86,
213 0x86, 0x86, 0x86, 0x78, 0x78, 0x00,
214 0x00, 0x06, 0x06, 0x06, 0x06, 0x86,
215 0x86, 0xE6, 0xE6, 0x1E, 0x1E, 0x00,
216 0x00, 0x80, 0x80, 0x60, 0x60, 0x18,
217 0x18, 0xFE, 0xFE, 0x00, 0x00, 0x00,
218 0x00, 0x00, 0x00, 0x00, 0x00, 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 0xFC, 0xFC, 0x03, 0x03, 0x03, 0x03,
230 0x03, 0x03, 0x0C, 0x0C, 0x00, 0x00,
231 0xF0, 0xF0, 0x0C, 0x0C, 0x03, 0x03,
232 0x0C, 0x0C, 0xF0, 0xF0, 0x00, 0x00,
233 0xFF, 0xFF, 0xC3, 0xC3, 0xC3, 0xC3,
234 0xC3, 0xC3, 0x3C, 0x3C, 0x00, 0x00,
235 0xC1, 0xC1, 0x01, 0x00, 0x00, 0x00,
236 0x00, 0x00, 0x00, 0x40, 0x60, 0x7F,
237 0x7F, 0x60, 0x40, 0x00, 0x00, 0x00,
238 0x00, 0x00, 0x00, 0x01, 0xC1, 0xC1,
239 0x01, 0xFD, 0x05, 0x04, 0x04, 0x04,
240 0x1F, 0x30, 0x40, 0x87, 0x9F, 0x1F,
241 0x01, 0x81, 0xFF, 0xFF, 0x00, 0x00,
242 0x1E, 0x9E, 0x86, 0x40, 0x30, 0x1F,
243 0x04, 0x04, 0x04, 0x05, 0xFD, 0x01,
244 0x00, 0x7E, 0x7E, 0x61, 0x61, 0x61,
245 0x61, 0x61, 0x61, 0x60, 0x60, 0x00,
246 0x00, 0x18, 0x18, 0x60, 0x60, 0x61,
247 0x61, 0x61, 0x61, 0x1E, 0x1E, 0x00,
248 0x00, 0x07, 0x07, 0x06, 0x06, 0x06,
249 0x06, 0x7F, 0x7F, 0x06, 0x06, 0x00,
250 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
251 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
252 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
253 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
254 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
255 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
256 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
257 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
258 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
259 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
260 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
261 0x0F, 0x0F, 0x30, 0x30, 0x30, 0x30,
262 0x30, 0x30, 0x0C, 0x0C, 0x00, 0x00,
263 0x3F, 0x3F, 0x03, 0x03, 0x03, 0x03,
264 0x03, 0x03, 0x3F, 0x3F, 0x00, 0x00,
265 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00,
266 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
267 0xFF, 0xFF, 0xFE, 0xE0, 0xE0, 0xE0,
268 0xC0, 0xC0, 0x00, 0x00, 0x00, 0xE0,
269 0xE0, 0x00, 0x00, 0x00, 0xC0, 0xC0,
270 0xE0, 0xE0, 0xE0, 0xFE, 0xFF, 0xFF,
271 0x07, 0x05, 0x07, 0x00, 0x70, 0x50,
272 0x70, 0x20, 0x20, 0x20, 0x21, 0x3F,
273 0x01, 0x61, 0x9F, 0x9F, 0x61, 0x01,
274 0x3F, 0x21, 0x20, 0x20, 0x20, 0x70,
275 0x50, 0x70, 0x00, 0x07, 0x05, 0x07,
276};
277// clang-format on
diff --git a/keyboards/0xcb/static/info.json b/keyboards/0xcb/static/info.json
new file mode 100644
index 000000000..33fa8d265
--- /dev/null
+++ b/keyboards/0xcb/static/info.json
@@ -0,0 +1,103 @@
1{
2 "keyboard_name": "0xCB Static",
3 "url": "https://0xCB.dev",
4 "maintainer": "Conor-Burns",
5 "layout_aliases": {
6 "LAYOUT": "LAYOUT_all"
7 },
8 "layouts": {
9 "LAYOUT_all": {
10 "layout": [
11 {"x":11, "y":0},
12 {"x":0, "y":1},
13 {"x":1, "y":1},
14 {"x":2, "y":1},
15 {"x":3, "y":1},
16 {"x":4, "y":1},
17 {"x":5, "y":1},
18 {"x":6, "y":1},
19 {"x":7, "y":1},
20 {"x":8, "y":1},
21 {"x":9, "y":1},
22 {"x":10, "y":1},
23 {"x":11, "y":1},
24 {"x":0, "y":2, "w":1.25},
25 {"x":1.25, "y":2},
26 {"x":2.25, "y":2},
27 {"x":3.25, "y":2},
28 {"x":4.25, "y":2},
29 {"x":5.25, "y":2},
30 {"x":6.25, "y":2},
31 {"x":7.25, "y":2},
32 {"x":8.25, "y":2},
33 {"x":9.25, "y":2},
34 {"x":10.25, "y":2, "w":1.75},
35 {"x":0, "y":3, "w":1.75},
36 {"x":1.75, "y":3},
37 {"x":2.75, "y":3},
38 {"x":3.75, "y":3},
39 {"x":4.75, "y":3},
40 {"x":5.75, "y":3},
41 {"x":6.75, "y":3},
42 {"x":7.75, "y":3},
43 {"x":8.75, "y":3},
44 {"x":9.75, "y":3},
45 {"x":10.75, "y":3, "w":1.25},
46 {"x":0, "y":4},
47 {"x":1, "y":4},
48 {"x":2, "y":4},
49 {"x":3, "y":4, "w":2.75},
50 {"x":5.75, "y":4},
51 {"x":6.75, "y":4, "w":2.25},
52 {"x":9, "y":4},
53 {"x":10, "y":4},
54 {"x":11, "y":4}
55 ]
56 },
57 "LAYOUT_bigbar": {
58 "layout": [
59 {"x":11, "y":0},
60 {"x":0, "y":1},
61 {"x":1, "y":1},
62 {"x":2, "y":1},
63 {"x":3, "y":1},
64 {"x":4, "y":1},
65 {"x":5, "y":1},
66 {"x":6, "y":1},
67 {"x":7, "y":1},
68 {"x":8, "y":1},
69 {"x":9, "y":1},
70 {"x":10, "y":1},
71 {"x":11, "y":1},
72 {"x":0, "y":2, "w":1.25},
73 {"x":1.25, "y":2},
74 {"x":2.25, "y":2},
75 {"x":3.25, "y":2},
76 {"x":4.25, "y":2},
77 {"x":5.25, "y":2},
78 {"x":6.25, "y":2},
79 {"x":7.25, "y":2},
80 {"x":8.25, "y":2},
81 {"x":9.25, "y":2},
82 {"x":10.25, "y":2, "w":1.75},
83 {"x":0, "y":3, "w":1.75},
84 {"x":1.75, "y":3},
85 {"x":2.75, "y":3},
86 {"x":3.75, "y":3},
87 {"x":4.75, "y":3},
88 {"x":5.75, "y":3},
89 {"x":6.75, "y":3},
90 {"x":7.75, "y":3},
91 {"x":8.75, "y":3},
92 {"x":9.75, "y":3},
93 {"x":10.75, "y":3, "w":1.25},
94 {"x":0, "y":4, "w":1.25},
95 {"x":1.25, "y":4},
96 {"x":2.25, "y":4},
97 {"x":3.25, "y":4, "w":6.25},
98 {"x":9.5, "y":4, "w":1.25},
99 {"x":10.75, "y":4, "w":1.25}
100 ]
101 }
102 }
103}
diff --git a/keyboards/0xcb/static/keymaps/bongocat/keymap.c b/keyboards/0xcb/static/keymaps/bongocat/keymap.c
new file mode 100644
index 000000000..12cc75217
--- /dev/null
+++ b/keyboards/0xcb/static/keymaps/bongocat/keymap.c
@@ -0,0 +1,298 @@
1/*
2Copyright 2021 0xCB - Conor Burns
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#include QMK_KEYBOARD_H
18// clang-format off
19enum my_keycodes {
20 WPM = SAFE_RANGE,
21};
22enum layer_names {
23 _HOME,
24 _FN2,
25 _FN3,
26 _FN4
27};
28const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
29[_HOME] = LAYOUT_all(
30 KC_MPLY,
31 KC_GESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
32 KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_ENT,
33 KC_LSPO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_RSPC,
34 KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_SPC, KC_RALT, MO(1), MO(2)
35),
36[_FN2] = LAYOUT_all(
37 RESET,
38 KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL,
39 KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, _______,
40 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
41 _______, _______, _______, _______, _______, _______, _______, _______, _______
42),
43[_FN3] = LAYOUT_all(
44 EEP_RST,
45 _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_LBRC, KC_RBRC, KC_BSLS,
46 _______, _______, _______, _______, _______, _______, _______, _______, KC_SCLN, KC_QUOT, _______,
47 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_SLSH,
48 _______, _______, _______, _______, _______, _______, _______, _______, _______
49),
50[_FN4] = LAYOUT_all(
51 _______,
52 WPM, KC_MUTE, KC_VOLD, KC_VOLU, KC_MPRV, KC_MNXT, KC_MSTP, KC_INS, KC_HOME, KC_DEL, KC_END, _______,
53 _______, _______, KC_BRID, KC_BRIU, _______, _______, _______, KC_PGUP, KC_UP, KC_PGDN, _______,
54 _______, _______, _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_RGHT, _______,
55 _______, _______, _______, _______, _______, _______, _______, _______, _______
56),
57};
58// clang-format on
59/* WPM toggle key bongocat hehe */
60bool wpm = false;
61bool process_record_user(uint16_t keycode, keyrecord_t *record) {
62 switch (keycode) {
63 case WPM:
64 if (record->event.pressed) {
65 wpm = !wpm;
66 }
67 return false;
68 default:
69 return true;
70 }
71}
72/*layer switcher */
73layer_state_t layer_state_set_user(layer_state_t state) {
74 state = update_tri_layer_state(state, _FN2, _FN3, _FN4);
75 return state;
76}
77/* rotary encoder (MX12) - add different functions for layers here */
78#ifdef ENCODER_ENABLE
79bool encoder_update_user(uint8_t index, bool clockwise) {
80 if (IS_LAYER_ON(_FN4)) {
81 if (clockwise) {
82 tap_code(KC_VOLU);
83 } else {
84 tap_code(KC_VOLD);
85 }
86 } else if (IS_LAYER_ON(_FN3)) {
87 if (clockwise) {
88 tap_code(KC_VOLU);
89 } else {
90 tap_code(KC_VOLD);
91 }
92 } else if (IS_LAYER_ON(_FN2)) {
93 if (clockwise) {
94 tap_code(KC_VOLU);
95 } else {
96 tap_code(KC_VOLD);
97 }
98 } else {
99 if (clockwise) {
100 tap_code(KC_VOLU);
101 } else {
102 tap_code(KC_VOLD);
103 }
104 }
105 return true;
106}
107#endif
108
109/* oled stuff :) */
110#ifdef OLED_ENABLE
111#define IDLE_FRAMES 5
112#define IDLE_SPEED 20 // below this wpm value your animation will idle
113#define TAP_FRAMES 2
114#define TAP_SPEED 40 // above this wpm value typing animation to trigger
115#define ANIM_FRAME_DURATION 200 // how long each frame lasts in ms
116#define ANIM_SIZE 636 // number of bytes in array
117
118uint32_t anim_timer = 0;
119uint32_t anim_sleep = 0;
120uint8_t current_idle_frame = 0;
121uint8_t current_tap_frame = 0;
122
123uint16_t startup_timer = 0;
124
125oled_rotation_t oled_init_user(oled_rotation_t rotation) {
126 startup_timer = timer_read();
127 return rotation;
128}
129static void render_logo(void) {
130 static const char PROGMEM raw_logo[] = {
131 0, 8, 0,192,194,192,192, 60, 60, 44, 60,188, 60, 60, 60, 60, 44, 61, 60,192,192,192,208, 1, 0,252,252,180,252, 60, 60, 44, 60,252,253,252,252, 60, 60, 44, 60,244,220,252,252, 0, 0, 16, 0, 0, 0,192,192, 65,192, 60, 60, 52, 60,192,193,192,192, 16, 0, 0,144, 4, 0,252,125,244, 60, 60, 60, 60, 61,252,252,244,252, 60, 60, 60, 61,248,108,252, 0, 0, 61, 60,188, 60, 52,252,252,220,252, 61, 60, 60, 52, 0, 0,192,210, 64,192, 60, 60, 44, 61, 60, 60, 60, 61, 52, 60, 60, 60,192,192, 64,196, 0, 4, 0,
132 0, 16, 0, 61, 63, 55, 63,192, 64,192,196,192,192,192,200,192,196,192,192, 3, 3, 2, 11, 0, 0, 35, 3, 3, 3, 0, 64, 2, 0,255,255,253,247, 0, 0, 0, 32, 1, 0, 1, 65, 8, 0,189,244,252,236, 3,130, 3, 1, 0, 68, 0, 0, 3, 34,131, 3,252,252,236,252, 0, 32, 17, 1, 1, 0, 0, 32, 0, 2,255,255,127,247, 0, 1, 0, 8, 1, 1, 1, 0, 0, 0, 16, 0, 64, 0,255,191,255,251, 0,129, 0, 2, 32, 0,255,255,239,255, 0, 0, 2, 0, 0, 0, 8, 64, 0, 1, 0, 0, 3, 35, 3, 3, 0, 8, 0,
133 1, 16, 0,192, 64,194,192, 3, 67, 3, 3, 9, 3, 3, 3, 3, 2, 83, 3,252,252,188,244, 0, 2, 32, 0, 0, 2, 0,144, 0, 0,255,255,237,255, 0, 16, 0, 0, 0, 64, 2, 0,128, 0,255,123,255,255, 60, 52, 60, 60, 60, 60, 60, 60, 44, 60, 56, 60,239,255,126,255, 0, 2, 32, 0, 0, 34, 0, 0, 16, 0,255,255,255,223, 0, 0, 4, 0, 0, 0, 33, 0, 0, 17, 0, 0, 0, 0,255,255,239,255, 0,128, 0, 0, 72, 0,255,253,247,255, 0, 0, 1, 0,144, 0, 4, 0, 32, 0, 0, 2,192,192,192,200, 0, 16, 0,
134 64, 4, 0, 3, 7, 3, 3, 60, 60, 52,188, 60, 61, 60, 60, 60, 60, 44, 60, 67, 3, 3, 3, 0, 0, 64, 0, 0, 4, 0, 0, 16, 0, 47, 63, 62, 63, 0, 0,132, 0, 0, 0, 0,128, 8, 0,255,255,111,127, 0, 0, 0, 2,128, 0, 0, 0, 64, 4, 0,128,127,127,107,127, 0, 32, 0, 0, 0, 66, 0, 0, 0,136, 55, 63, 61, 63, 0, 0, 0, 2, 0, 64, 0,136, 0, 0, 60, 44,189, 60, 63, 63, 63, 59, 60, 60,172, 60, 0, 64, 3, 2, 3,131, 60, 44, 60, 60, 60, 60,188, 60, 56, 44, 60, 60, 3, 3,131, 2, 0, 32, 2,
135 };
136 oled_write_raw_P(raw_logo, sizeof(raw_logo));
137}
138/* Shows the name of the current layer and locks for the host (CAPS etc.) */
139static void render_layer(void) {
140 led_t led_state = host_keyboard_led_state();
141 // clang-format off
142 static const char PROGMEM logo[][3][7] = {
143 {{0x97, 0x98, 0x99, 0x9A, 0}, {0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0}, {0x9B, 0x9C, 0x9D, 0x9E, 0x9F, 0}}, /* l num CB */
144 {{0xB7, 0xB8, 0xB9, 0xBA, 0}, {0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0}, {0xBB, 0xBC, 0xBD, 0xBE, 0xBF, 0}}, /* 1 num CB */
145 {{0xD7, 0xD8, 0xD9, 0xDA, 0}, {0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0}, {0xDB, 0xDC, 0xDD, 0xDE, 0xDF, 0}}, /* 1 cap CB */
146 {{0xF7, 0xF8, 0xF9, 0xFA, 0}, {0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0}, {0xFB, 0xFC, 0xFD, 0xFE, 0xFF, 0}}, /* l cap CB */
147 {{0xB7, 0xC0, 0xC1, 0xBA, 0}, {0xB7, 0xC2, 0xC3, 0xBA, 0}, {0xB7, 0xC4, 0xC5, 0xBA, 0}}, /* 2 3 4 */
148 {{0xD7, 0xE0, 0xE1, 0xDA, 0}, {0xD7, 0xE2, 0xE3, 0xDA, 0}, {0xD7, 0xE4, 0xE5, 0xDA, 0}}, /* 2 3 4 */
149 };
150 // clang-format on
151 oled_set_cursor(0, 0);
152 oled_write_P(logo[0][0], false);
153 oled_set_cursor(0, 3);
154 oled_write_P(logo[3][0], false);
155 switch (get_highest_layer(layer_state)) {
156 case _HOME:
157 oled_set_cursor(0, 1);
158 oled_write_P(logo[1][0], false);
159 oled_set_cursor(0, 2);
160 oled_write_P(logo[2][0], false);
161 break;
162 case _FN2:
163 oled_set_cursor(0, 1);
164 oled_write_P(logo[4][0], false);
165 oled_set_cursor(0, 2);
166 oled_write_P(logo[5][0], false);
167 break;
168 case _FN3:
169 oled_set_cursor(0, 1);
170 oled_write_P(logo[4][1], false);
171 oled_set_cursor(0, 2);
172 oled_write_P(logo[5][1], false);
173 break;
174 case _FN4:
175 oled_set_cursor(0, 1);
176 oled_write_P(logo[4][2], false);
177 oled_set_cursor(0, 2);
178 oled_write_P(logo[5][2], false);
179 break;
180 default:
181 oled_set_cursor(0, 1);
182 oled_write_P(PSTR(" "), false);
183 oled_set_cursor(0, 2);
184 oled_write_P(PSTR(" "), false);
185 }
186 oled_set_cursor(8, 0);
187 oled_write_P(led_state.num_lock ? logo[0][1] : PSTR(" "), false);
188 oled_set_cursor(8, 1);
189 oled_write_P(led_state.num_lock ? logo[1][1] : PSTR(" "), false);
190 oled_set_cursor(8, 2);
191 oled_write_P(led_state.caps_lock ? logo[2][1] : PSTR(" "), false);
192 oled_set_cursor(8, 3);
193 oled_write_P(led_state.caps_lock ? logo[3][1] : PSTR(" "), false);
194
195 oled_set_cursor(16, 0);
196 oled_write_P(logo[0][2], false);
197 oled_set_cursor(16, 1);
198 oled_write_P(logo[1][2], false);
199 oled_set_cursor(16, 2);
200 oled_write_P(logo[2][2], false);
201 oled_set_cursor(16, 3);
202 oled_write_P(logo[3][2], false);
203
204 /* Fill empty space to clear animation */
205 oled_set_cursor(4, 0);
206 oled_write_P(PSTR(" "), false);
207 oled_set_cursor(4, 1);
208 oled_write_P(PSTR(" "), false);
209 oled_set_cursor(4, 2);
210 oled_write_P(PSTR(" "), false);
211 oled_set_cursor(4, 3);
212 oled_write_P(PSTR(" "), false);
213
214 oled_set_cursor(14, 0);
215 oled_write_P(PSTR(" "), false);
216 oled_set_cursor(14, 1);
217 oled_write_P(PSTR(" "), false);
218 oled_set_cursor(14, 2);
219 oled_write_P(PSTR(" "), false);
220 oled_set_cursor(14, 3);
221 oled_write_P(PSTR(" "), false);
222}
223
224static void render_cat(void) {
225 static const char PROGMEM idle[IDLE_FRAMES][ANIM_SIZE] = {
226 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x20, 0x18, 0x04, 0x02, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x20, 0x40, 0x40, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xc1, 0x01, 0x01, 0x02, 0x02, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x40, 0x80, 0x80, 0x40, 0x00, 0x00, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x04, 0x08, 0x08, 0x10, 0x20, 0x40, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x18, 0x06, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x83, 0x83, 0x40, 0x40, 0x40, 0x40, 0x20, 0x21, 0x21, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x04, 0x08, 0x30, 0x40, 0x80, 0x80, 0x00, 0x00, 0x01, 0x86, 0x98, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x0f, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x04, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40, 0x41, 0x42, 0x24, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
227 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x40, 0x40, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xc1, 0x01, 0x01, 0x02, 0x02, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x80, 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, 0x01, 0x02, 0x04, 0x04, 0x08, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x30, 0x0c, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x86, 0x86, 0x40, 0x40, 0x40, 0x40, 0x21, 0x22, 0x22, 0x20, 0x11, 0x11, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x04, 0x08, 0x30, 0x40, 0x80, 0x80, 0x00, 0x00, 0x01, 0x86, 0x98, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x0f, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x04, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40, 0x41, 0x42, 0x24, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
228 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x82, 0x02, 0x02, 0x04, 0x04, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x02, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x80, 0x00, 0x00, 0x60, 0x60, 0x00, 0x01, 0x01, 0x02, 0x04, 0x04, 0x08, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x30, 0x0c, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x86, 0x86, 0x40, 0x40, 0x40, 0x40, 0x21, 0x22, 0x22, 0x20, 0x11, 0x11, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x04, 0x08, 0x30, 0x40, 0x80, 0x80, 0x00, 0x00, 0x01, 0x86, 0x98, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x0f, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x04, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40, 0x41, 0x42, 0x24, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
229 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x34, 0xc4, 0x04, 0x04, 0x04, 0x08, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x02, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x40, 0x80, 0x80, 0x40, 0x00, 0x00, 0x30, 0x30, 0x00, 0x01, 0x01, 0x02, 0x02, 0x04, 0x04, 0x04, 0x08, 0x08, 0x10, 0x20, 0x40, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x18, 0x06, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x83, 0x83, 0x40, 0x40, 0x40, 0x40, 0x20, 0x21, 0x21, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x04, 0x08, 0x30, 0x40, 0x80, 0x80, 0x00, 0x00, 0x01, 0x86, 0x98, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x0f, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x04, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40, 0x41, 0x42, 0x24, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
230 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x20, 0x18, 0x04, 0x02, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x20, 0x40, 0x40, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x0d, 0x31, 0xc1, 0x01, 0x01, 0x01, 0x02, 0x02, 0x02, 0x04, 0x04, 0x02, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x40, 0x80, 0x80, 0x40, 0x00, 0x00, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x04, 0x08, 0x08, 0x10, 0x20, 0x40, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x18, 0x06, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x83, 0x83, 0x40, 0x40, 0x40, 0x40, 0x20, 0x21, 0x21, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x04, 0x08, 0x30, 0x40, 0x80, 0x80, 0x00, 0x00, 0x01, 0x86, 0x98, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x0f, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x04, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40, 0x41, 0x42, 0x24, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}};
231 static const char PROGMEM prep[][ANIM_SIZE] = {
232 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x40, 0x40, 0x20, 0x20, 0x10, 0x08, 0x04, 0x02, 0x04, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xc1, 0x01, 0x01, 0x02, 0x02, 0x04, 0x84, 0x44, 0x44, 0x42, 0x82, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x40, 0x80, 0x80, 0x40, 0x00, 0x00, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x64, 0x18, 0x04, 0x12, 0xc2, 0xca, 0x24, 0x88, 0xf0, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x18, 0x06, 0x01, 0x00, 0x00, 0x0c, 0x03, 0x00, 0x02, 0x18, 0x19, 0x00, 0x05, 0xfe, 0x80, 0x83, 0x83, 0x40, 0x40, 0x40, 0x40, 0x20, 0x21, 0x21, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x0f, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}};
233 static const char PROGMEM tap[TAP_FRAMES][ANIM_SIZE] = {
234 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x40, 0x40, 0x20, 0x20, 0x10, 0x08, 0x04, 0x02, 0x04, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xc1, 0x01, 0x01, 0x02, 0x02, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x40, 0x80, 0x80, 0x40, 0x00, 0x00, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x64, 0x18, 0x04, 0x12, 0xc2, 0xca, 0x24, 0x88, 0xf0, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x18, 0x06, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x83, 0x83, 0x40, 0x40, 0x40, 0x40, 0x20, 0x21, 0x21, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x0f, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x04, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40, 0x41, 0x42, 0x24, 0x98, 0xc0, 0x88, 0x88, 0x8c, 0x9c, 0x1c, 0x1e, 0x0e, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
235 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x40, 0x40, 0x20, 0x20, 0x10, 0x08, 0x04, 0x02, 0x04, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xc1, 0x01, 0x01, 0x02, 0x02, 0x04, 0x84, 0x44, 0x44, 0x42, 0x82, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x40, 0x80, 0x80, 0x40, 0x00, 0x00, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x04, 0x08, 0x08, 0x10, 0x20, 0x40, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x18, 0x06, 0x01, 0x00, 0x00, 0x0c, 0x03, 0x00, 0x02, 0x18, 0x19, 0x00, 0x05, 0xfe, 0x80, 0x83, 0x83, 0x40, 0x40, 0x40, 0x40, 0x20, 0x21, 0x21, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x04, 0x08, 0x30, 0x40, 0x80, 0x80, 0x00, 0x00, 0x01, 0x86, 0x98, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x0f, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x0f, 0x0f, 0x07, 0x03, 0x03, 0x61, 0xf0, 0xf8, 0xfc, 0x60, 0x01, 0x01, 0x01, 0x3c, 0x78, 0xf8, 0xf0, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
236 };
237
238 void animation_phase(void) {
239 if (get_current_wpm() <= IDLE_SPEED) {
240 current_idle_frame = (current_idle_frame + 1) % IDLE_FRAMES;
241 oled_write_raw_P(idle[abs((IDLE_FRAMES - 1) - current_idle_frame)], ANIM_SIZE);
242 }
243 if (get_current_wpm() > IDLE_SPEED && get_current_wpm() < TAP_SPEED) {
244 oled_write_raw_P(prep[0], ANIM_SIZE);
245 }
246 if (get_current_wpm() >= TAP_SPEED) {
247 current_tap_frame = (current_tap_frame + 1) % TAP_FRAMES;
248 oled_write_raw_P(tap[abs((TAP_FRAMES - 1) - current_tap_frame)], ANIM_SIZE);
249 }
250 }
251 if (get_current_wpm() != 000) {
252 if (timer_elapsed32(anim_timer) > ANIM_FRAME_DURATION) {
253 anim_timer = timer_read32();
254 animation_phase();
255 }
256 anim_sleep = timer_read32();
257 } else {
258 if (timer_elapsed32(anim_timer) > ANIM_FRAME_DURATION) {
259 anim_timer = timer_read32();
260 animation_phase();
261 }
262 }
263}
264
265bool oled_task_user(void) {
266 static bool finished_timer = false;
267 if (!finished_timer && (timer_elapsed(startup_timer) < 3000)) {
268 render_logo();
269 } else {
270 if (!finished_timer) {
271 oled_clear();
272 finished_timer = true;
273 }
274 if (wpm) {
275 render_cat();
276 oled_set_cursor(0, 0);
277 char string[10];
278 uint16_t m = get_current_wpm();
279 string[3] = '\0';
280 string[2] = '0' + m % 10;
281 string[1] = ( m /= 10) % 10 ? '0' + (m) % 10 : (m / 10) % 10 ? '0' : ' ';
282 string[0] = m / 10 ? '0' + m / 10 : ' ';
283 oled_write_P(PSTR("WPM:"), false);
284 oled_write(string, false);
285 } else {
286 render_layer();
287 }
288 }
289 return false;
290}
291#endif
292
293/* Resets via on eep reset - thank you drashna! */
294void eeconfig_init_kb(void) {
295 via_eeprom_set_valid(false);
296 via_init();
297 eeconfig_init_user();
298}
diff --git a/keyboards/0xcb/static/keymaps/bongocat/rules.mk b/keyboards/0xcb/static/keymaps/bongocat/rules.mk
new file mode 100644
index 000000000..d03b5f1ca
--- /dev/null
+++ b/keyboards/0xcb/static/keymaps/bongocat/rules.mk
@@ -0,0 +1,2 @@
1VIA_ENABLE = yes
2WPM_ENABLE = yes \ No newline at end of file
diff --git a/keyboards/0xcb/static/keymaps/default/keymap.c b/keyboards/0xcb/static/keymaps/default/keymap.c
new file mode 100644
index 000000000..4d0d14ff7
--- /dev/null
+++ b/keyboards/0xcb/static/keymaps/default/keymap.c
@@ -0,0 +1,191 @@
1/*
2Copyright 2021 0xCB - Conor Burns
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#include QMK_KEYBOARD_H
18// clang-format off
19enum layer_names {
20 _HOME,
21 _FN2,
22 _FN3,
23 _FN4
24};
25const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
26[_HOME] = LAYOUT_all(
27 KC_MPLY,
28 KC_GESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
29 KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_ENT,
30 KC_LSPO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_RSPC,
31 KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_SPC, KC_RALT, MO(1), MO(2)
32),
33[_FN2] = LAYOUT_all(
34 RESET,
35 KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL,
36 KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, _______,
37 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
38 _______, _______, _______, _______, _______, _______, _______, _______, _______
39),
40[_FN3] = LAYOUT_all(
41 EEP_RST,
42 _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_LBRC, KC_RBRC, KC_BSLS,
43 _______, _______, _______, _______, _______, _______, _______, _______, KC_SCLN, KC_QUOT, _______,
44 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_SLSH,
45 _______, _______, _______, _______, _______, _______, _______, _______, _______
46),
47[_FN4] = LAYOUT_all(
48 _______,
49 _______, KC_MUTE, KC_VOLD, KC_VOLU, KC_MPRV, KC_MNXT, KC_MSTP, KC_INS, KC_HOME, KC_DEL, KC_END, _______,
50 _______, _______, KC_BRID, KC_BRIU, _______, _______, _______, KC_PGUP, KC_UP, KC_PGDN, _______,
51 _______, _______, _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_RGHT, _______,
52 _______, _______, _______, _______, _______, _______, _______, _______, _______
53),
54};
55// clang-format on
56
57/*layer switcher */
58layer_state_t layer_state_set_user(layer_state_t state) {
59state = update_tri_layer_state(state, _FN2, _FN3, _FN4);
60return state;
61}
62/* rotary encoder (MX12) - add different functions for layers here */
63#ifdef ENCODER_ENABLE
64bool encoder_update_user(uint8_t index, bool clockwise) {
65 if (IS_LAYER_ON(_FN4)) {
66 if (clockwise) {
67 tap_code(KC_VOLU);
68 } else {
69 tap_code(KC_VOLD);
70 }
71 } else if (IS_LAYER_ON(_FN3)) {
72 if (clockwise) {
73 tap_code(KC_VOLU);
74 } else {
75 tap_code(KC_VOLD);
76 }
77 } else if (IS_LAYER_ON(_FN2)) {
78 if (clockwise) {
79 tap_code(KC_VOLU);
80 } else {
81 tap_code(KC_VOLD);
82 }
83 } else {
84 if (clockwise) {
85 tap_code(KC_VOLU);
86 } else {
87 tap_code(KC_VOLD);
88 }
89 }
90 return true;
91}
92#endif
93
94/* oled stuff :) */
95#ifdef OLED_ENABLE
96uint16_t startup_timer = 0;
97
98oled_rotation_t oled_init_user(oled_rotation_t rotation) {
99 startup_timer = timer_read();
100 return rotation;
101}
102static void render_logo(void) {
103 static const char PROGMEM raw_logo[] = {
104 0, 8, 0,192,194,192,192, 60, 60, 44, 60,188, 60, 60, 60, 60, 44, 61, 60,192,192,192,208, 1, 0,252,252,180,252, 60, 60, 44, 60,252,253,252,252, 60, 60, 44, 60,244,220,252,252, 0, 0, 16, 0, 0, 0,192,192, 65,192, 60, 60, 52, 60,192,193,192,192, 16, 0, 0,144, 4, 0,252,125,244, 60, 60, 60, 60, 61,252,252,244,252, 60, 60, 60, 61,248,108,252, 0, 0, 61, 60,188, 60, 52,252,252,220,252, 61, 60, 60, 52, 0, 0,192,210, 64,192, 60, 60, 44, 61, 60, 60, 60, 61, 52, 60, 60, 60,192,192, 64,196, 0, 4, 0,
105 0, 16, 0, 61, 63, 55, 63,192, 64,192,196,192,192,192,200,192,196,192,192, 3, 3, 2, 11, 0, 0, 35, 3, 3, 3, 0, 64, 2, 0,255,255,253,247, 0, 0, 0, 32, 1, 0, 1, 65, 8, 0,189,244,252,236, 3,130, 3, 1, 0, 68, 0, 0, 3, 34,131, 3,252,252,236,252, 0, 32, 17, 1, 1, 0, 0, 32, 0, 2,255,255,127,247, 0, 1, 0, 8, 1, 1, 1, 0, 0, 0, 16, 0, 64, 0,255,191,255,251, 0,129, 0, 2, 32, 0,255,255,239,255, 0, 0, 2, 0, 0, 0, 8, 64, 0, 1, 0, 0, 3, 35, 3, 3, 0, 8, 0,
106 1, 16, 0,192, 64,194,192, 3, 67, 3, 3, 9, 3, 3, 3, 3, 2, 83, 3,252,252,188,244, 0, 2, 32, 0, 0, 2, 0,144, 0, 0,255,255,237,255, 0, 16, 0, 0, 0, 64, 2, 0,128, 0,255,123,255,255, 60, 52, 60, 60, 60, 60, 60, 60, 44, 60, 56, 60,239,255,126,255, 0, 2, 32, 0, 0, 34, 0, 0, 16, 0,255,255,255,223, 0, 0, 4, 0, 0, 0, 33, 0, 0, 17, 0, 0, 0, 0,255,255,239,255, 0,128, 0, 0, 72, 0,255,253,247,255, 0, 0, 1, 0,144, 0, 4, 0, 32, 0, 0, 2,192,192,192,200, 0, 16, 0,
107 64, 4, 0, 3, 7, 3, 3, 60, 60, 52,188, 60, 61, 60, 60, 60, 60, 44, 60, 67, 3, 3, 3, 0, 0, 64, 0, 0, 4, 0, 0, 16, 0, 47, 63, 62, 63, 0, 0,132, 0, 0, 0, 0,128, 8, 0,255,255,111,127, 0, 0, 0, 2,128, 0, 0, 0, 64, 4, 0,128,127,127,107,127, 0, 32, 0, 0, 0, 66, 0, 0, 0,136, 55, 63, 61, 63, 0, 0, 0, 2, 0, 64, 0,136, 0, 0, 60, 44,189, 60, 63, 63, 63, 59, 60, 60,172, 60, 0, 64, 3, 2, 3,131, 60, 44, 60, 60, 60, 60,188, 60, 56, 44, 60, 60, 3, 3,131, 2, 0, 32, 2,
108 };
109 oled_write_raw_P(raw_logo, sizeof(raw_logo));
110}
111/* Shows the name of the current layer and locks for the host (CAPS etc.) */
112static void render_layer(void) {
113 led_t led_state = host_keyboard_led_state();
114 // clang-format off
115 static const char PROGMEM logo[][3][7] = {
116 {{0x97, 0x98, 0x99, 0x9A, 0}, {0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0}, {0x9B, 0x9C, 0x9D, 0x9E, 0x9F, 0}}, /* l num CB */
117 {{0xB7, 0xB8, 0xB9, 0xBA, 0}, {0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0}, {0xBB, 0xBC, 0xBD, 0xBE, 0xBF, 0}}, /* 1 num CB */
118 {{0xD7, 0xD8, 0xD9, 0xDA, 0}, {0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0}, {0xDB, 0xDC, 0xDD, 0xDE, 0xDF, 0}}, /* 1 cap CB */
119 {{0xF7, 0xF8, 0xF9, 0xFA, 0}, {0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0}, {0xFB, 0xFC, 0xFD, 0xFE, 0xFF, 0}}, /* l cap CB */
120 {{0xB7, 0xC0, 0xC1, 0xBA, 0}, {0xB7, 0xC2, 0xC3, 0xBA, 0}, {0xB7, 0xC4, 0xC5, 0xBA, 0}}, /* 2 3 4 */
121 {{0xD7, 0xE0, 0xE1, 0xDA, 0}, {0xD7, 0xE2, 0xE3, 0xDA, 0}, {0xD7, 0xE4, 0xE5, 0xDA, 0}}, /* 2 3 4 */
122 };
123 // clang-format on
124 oled_set_cursor(0, 0);
125 oled_write_P(logo[0][0], false);
126 oled_set_cursor(0, 3);
127 oled_write_P(logo[3][0], false);
128 switch (get_highest_layer(layer_state)) {
129 case _HOME:
130 oled_set_cursor(0, 1);
131 oled_write_P(logo[1][0], false);
132 oled_set_cursor(0, 2);
133 oled_write_P(logo[2][0], false);
134 break;
135 case _FN2:
136 oled_set_cursor(0, 1);
137 oled_write_P(logo[4][0], false);
138 oled_set_cursor(0, 2);
139 oled_write_P(logo[5][0], false);
140 break;
141 case _FN3:
142 oled_set_cursor(0, 1);
143 oled_write_P(logo[4][1], false);
144 oled_set_cursor(0, 2);
145 oled_write_P(logo[5][1], false);
146 break;
147 case _FN4:
148 oled_set_cursor(0, 1);
149 oled_write_P(logo[4][2], false);
150 oled_set_cursor(0, 2);
151 oled_write_P(logo[5][2], false);
152 break;
153 default:
154 oled_set_cursor(0, 1);
155 oled_write_P(PSTR(" "), false);
156 oled_set_cursor(0, 2);
157 oled_write_P(PSTR(" "), false);
158 }
159 oled_set_cursor(8, 0);
160 oled_write_P(led_state.num_lock ? logo[0][1] : PSTR(" "), false);
161 oled_set_cursor(8, 1);
162 oled_write_P(led_state.num_lock ? logo[1][1] : PSTR(" "), false);
163 oled_set_cursor(8, 2);
164 oled_write_P(led_state.caps_lock ? logo[2][1] : PSTR(" "), false);
165 oled_set_cursor(8, 3);
166 oled_write_P(led_state.caps_lock ? logo[3][1] : PSTR(" "), false);
167
168 oled_set_cursor(16, 0);
169 oled_write_P(logo[0][2], false);
170 oled_set_cursor(16, 1);
171 oled_write_P(logo[1][2], false);
172 oled_set_cursor(16, 2);
173 oled_write_P(logo[2][2], false);
174 oled_set_cursor(16, 3);
175 oled_write_P(logo[3][2], false);
176}
177
178bool oled_task_user(void) {
179 static bool finished_timer = false;
180 if (!finished_timer && (timer_elapsed(startup_timer) < 3000)) {
181 render_logo();
182 } else {
183 if (!finished_timer) {
184 oled_clear();
185 finished_timer = true;
186 }
187 render_layer();
188 }
189 return false;
190}
191#endif
diff --git a/keyboards/0xcb/static/keymaps/via/keymap.c b/keyboards/0xcb/static/keymaps/via/keymap.c
new file mode 100644
index 000000000..62fcca1f3
--- /dev/null
+++ b/keyboards/0xcb/static/keymaps/via/keymap.c
@@ -0,0 +1,198 @@
1/*
2Copyright 2021 0xCB - Conor Burns
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#include QMK_KEYBOARD_H
18// clang-format off
19enum layer_names {
20 _HOME,
21 _FN2,
22 _FN3,
23 _FN4
24};
25const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
26[_HOME] = LAYOUT_all(
27 KC_MPLY,
28 KC_GESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
29 KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_ENT,
30 KC_LSPO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_RSPC,
31 KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_SPC, KC_RALT, MO(1), MO(2)
32),
33[_FN2] = LAYOUT_all(
34 RESET,
35 KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL,
36 KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, _______,
37 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
38 _______, _______, _______, _______, _______, _______, _______, _______, _______
39),
40[_FN3] = LAYOUT_all(
41 EEP_RST,
42 _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_LBRC, KC_RBRC, KC_BSLS,
43 _______, _______, _______, _______, _______, _______, _______, _______, KC_SCLN, KC_QUOT, _______,
44 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_SLSH,
45 _______, _______, _______, _______, _______, _______, _______, _______, _______
46),
47[_FN4] = LAYOUT_all(
48 _______,
49 _______, KC_MUTE, KC_VOLD, KC_VOLU, KC_MPRV, KC_MNXT, KC_MSTP, KC_INS, KC_HOME, KC_DEL, KC_END, _______,
50 _______, _______, KC_BRID, KC_BRIU, _______, _______, _______, KC_PGUP, KC_UP, KC_PGDN, _______,
51 _______, _______, _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_RGHT, _______,
52 _______, _______, _______, _______, _______, _______, _______, _______, _______
53),
54};
55// clang-format on
56
57/*layer switcher */
58layer_state_t layer_state_set_user(layer_state_t state) {
59state = update_tri_layer_state(state, _FN2, _FN3, _FN4);
60return state;
61}
62/* rotary encoder (MX12) - add different functions for layers here */
63#ifdef ENCODER_ENABLE
64bool encoder_update_user(uint8_t index, bool clockwise) {
65 if (IS_LAYER_ON(_FN4)) {
66 if (clockwise) {
67 tap_code(KC_VOLU);
68 } else {
69 tap_code(KC_VOLD);
70 }
71 } else if (IS_LAYER_ON(_FN3)) {
72 if (clockwise) {
73 tap_code(KC_VOLU);
74 } else {
75 tap_code(KC_VOLD);
76 }
77 } else if (IS_LAYER_ON(_FN2)) {
78 if (clockwise) {
79 tap_code(KC_VOLU);
80 } else {
81 tap_code(KC_VOLD);
82 }
83 } else {
84 if (clockwise) {
85 tap_code(KC_VOLU);
86 } else {
87 tap_code(KC_VOLD);
88 }
89 }
90 return true;
91}
92#endif
93
94/* oled stuff :) */
95#ifdef OLED_ENABLE
96uint16_t startup_timer = 0;
97
98oled_rotation_t oled_init_user(oled_rotation_t rotation) {
99 startup_timer = timer_read();
100 return rotation;
101}
102static void render_logo(void) {
103 static const char PROGMEM raw_logo[] = {
104 0, 8, 0,192,194,192,192, 60, 60, 44, 60,188, 60, 60, 60, 60, 44, 61, 60,192,192,192,208, 1, 0,252,252,180,252, 60, 60, 44, 60,252,253,252,252, 60, 60, 44, 60,244,220,252,252, 0, 0, 16, 0, 0, 0,192,192, 65,192, 60, 60, 52, 60,192,193,192,192, 16, 0, 0,144, 4, 0,252,125,244, 60, 60, 60, 60, 61,252,252,244,252, 60, 60, 60, 61,248,108,252, 0, 0, 61, 60,188, 60, 52,252,252,220,252, 61, 60, 60, 52, 0, 0,192,210, 64,192, 60, 60, 44, 61, 60, 60, 60, 61, 52, 60, 60, 60,192,192, 64,196, 0, 4, 0,
105 0, 16, 0, 61, 63, 55, 63,192, 64,192,196,192,192,192,200,192,196,192,192, 3, 3, 2, 11, 0, 0, 35, 3, 3, 3, 0, 64, 2, 0,255,255,253,247, 0, 0, 0, 32, 1, 0, 1, 65, 8, 0,189,244,252,236, 3,130, 3, 1, 0, 68, 0, 0, 3, 34,131, 3,252,252,236,252, 0, 32, 17, 1, 1, 0, 0, 32, 0, 2,255,255,127,247, 0, 1, 0, 8, 1, 1, 1, 0, 0, 0, 16, 0, 64, 0,255,191,255,251, 0,129, 0, 2, 32, 0,255,255,239,255, 0, 0, 2, 0, 0, 0, 8, 64, 0, 1, 0, 0, 3, 35, 3, 3, 0, 8, 0,
106 1, 16, 0,192, 64,194,192, 3, 67, 3, 3, 9, 3, 3, 3, 3, 2, 83, 3,252,252,188,244, 0, 2, 32, 0, 0, 2, 0,144, 0, 0,255,255,237,255, 0, 16, 0, 0, 0, 64, 2, 0,128, 0,255,123,255,255, 60, 52, 60, 60, 60, 60, 60, 60, 44, 60, 56, 60,239,255,126,255, 0, 2, 32, 0, 0, 34, 0, 0, 16, 0,255,255,255,223, 0, 0, 4, 0, 0, 0, 33, 0, 0, 17, 0, 0, 0, 0,255,255,239,255, 0,128, 0, 0, 72, 0,255,253,247,255, 0, 0, 1, 0,144, 0, 4, 0, 32, 0, 0, 2,192,192,192,200, 0, 16, 0,
107 64, 4, 0, 3, 7, 3, 3, 60, 60, 52,188, 60, 61, 60, 60, 60, 60, 44, 60, 67, 3, 3, 3, 0, 0, 64, 0, 0, 4, 0, 0, 16, 0, 47, 63, 62, 63, 0, 0,132, 0, 0, 0, 0,128, 8, 0,255,255,111,127, 0, 0, 0, 2,128, 0, 0, 0, 64, 4, 0,128,127,127,107,127, 0, 32, 0, 0, 0, 66, 0, 0, 0,136, 55, 63, 61, 63, 0, 0, 0, 2, 0, 64, 0,136, 0, 0, 60, 44,189, 60, 63, 63, 63, 59, 60, 60,172, 60, 0, 64, 3, 2, 3,131, 60, 44, 60, 60, 60, 60,188, 60, 56, 44, 60, 60, 3, 3,131, 2, 0, 32, 2,
108 };
109 oled_write_raw_P(raw_logo, sizeof(raw_logo));
110}
111/* Shows the name of the current layer and locks for the host (CAPS etc.) */
112static void render_layer(void) {
113 led_t led_state = host_keyboard_led_state();
114 // clang-format off
115 static const char PROGMEM logo[][3][7] = {
116 {{0x97, 0x98, 0x99, 0x9A, 0}, {0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0}, {0x9B, 0x9C, 0x9D, 0x9E, 0x9F, 0}}, /* l num CB */
117 {{0xB7, 0xB8, 0xB9, 0xBA, 0}, {0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0}, {0xBB, 0xBC, 0xBD, 0xBE, 0xBF, 0}}, /* 1 num CB */
118 {{0xD7, 0xD8, 0xD9, 0xDA, 0}, {0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0}, {0xDB, 0xDC, 0xDD, 0xDE, 0xDF, 0}}, /* 1 cap CB */
119 {{0xF7, 0xF8, 0xF9, 0xFA, 0}, {0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0}, {0xFB, 0xFC, 0xFD, 0xFE, 0xFF, 0}}, /* l cap CB */
120 {{0xB7, 0xC0, 0xC1, 0xBA, 0}, {0xB7, 0xC2, 0xC3, 0xBA, 0}, {0xB7, 0xC4, 0xC5, 0xBA, 0}}, /* 2 3 4 */
121 {{0xD7, 0xE0, 0xE1, 0xDA, 0}, {0xD7, 0xE2, 0xE3, 0xDA, 0}, {0xD7, 0xE4, 0xE5, 0xDA, 0}}, /* 2 3 4 */
122 };
123 // clang-format on
124 oled_set_cursor(0, 0);
125 oled_write_P(logo[0][0], false);
126 oled_set_cursor(0, 3);
127 oled_write_P(logo[3][0], false);
128 switch (get_highest_layer(layer_state)) {
129 case _HOME:
130 oled_set_cursor(0, 1);
131 oled_write_P(logo[1][0], false);
132 oled_set_cursor(0, 2);
133 oled_write_P(logo[2][0], false);
134 break;
135 case _FN2:
136 oled_set_cursor(0, 1);
137 oled_write_P(logo[4][0], false);
138 oled_set_cursor(0, 2);
139 oled_write_P(logo[5][0], false);
140 break;
141 case _FN3:
142 oled_set_cursor(0, 1);
143 oled_write_P(logo[4][1], false);
144 oled_set_cursor(0, 2);
145 oled_write_P(logo[5][1], false);
146 break;
147 case _FN4:
148 oled_set_cursor(0, 1);
149 oled_write_P(logo[4][2], false);
150 oled_set_cursor(0, 2);
151 oled_write_P(logo[5][2], false);
152 break;
153 default:
154 oled_set_cursor(0, 1);
155 oled_write_P(PSTR(" "), false);
156 oled_set_cursor(0, 2);
157 oled_write_P(PSTR(" "), false);
158 }
159 oled_set_cursor(8, 0);
160 oled_write_P(led_state.num_lock ? logo[0][1] : PSTR(" "), false);
161 oled_set_cursor(8, 1);
162 oled_write_P(led_state.num_lock ? logo[1][1] : PSTR(" "), false);
163 oled_set_cursor(8, 2);
164 oled_write_P(led_state.caps_lock ? logo[2][1] : PSTR(" "), false);
165 oled_set_cursor(8, 3);
166 oled_write_P(led_state.caps_lock ? logo[3][1] : PSTR(" "), false);
167
168 oled_set_cursor(16, 0);
169 oled_write_P(logo[0][2], false);
170 oled_set_cursor(16, 1);
171 oled_write_P(logo[1][2], false);
172 oled_set_cursor(16, 2);
173 oled_write_P(logo[2][2], false);
174 oled_set_cursor(16, 3);
175 oled_write_P(logo[3][2], false);
176}
177
178bool oled_task_user(void) {
179 static bool finished_timer = false;
180 if (!finished_timer && (timer_elapsed(startup_timer) < 3000)) {
181 render_logo();
182 } else {
183 if (!finished_timer) {
184 oled_clear();
185 finished_timer = true;
186 }
187 render_layer();
188 }
189 return false;
190}
191#endif
192
193/* Resets via on eep reset - thank you drashna! */
194void eeconfig_init_kb(void) {
195 via_eeprom_set_valid(false);
196 via_init();
197 eeconfig_init_user();
198}
diff --git a/keyboards/0xcb/static/keymaps/via/rules.mk b/keyboards/0xcb/static/keymaps/via/rules.mk
new file mode 100644
index 000000000..1e5b99807
--- /dev/null
+++ b/keyboards/0xcb/static/keymaps/via/rules.mk
@@ -0,0 +1 @@
VIA_ENABLE = yes
diff --git a/keyboards/0xcb/static/readme.md b/keyboards/0xcb/static/readme.md
new file mode 100644
index 000000000..57e87b71a
--- /dev/null
+++ b/keyboards/0xcb/static/readme.md
@@ -0,0 +1,27 @@
1# 0xCB Static
2
3Macro keypad
4
5* Keyboard Maintainer: [Conor Burns](https://github.com/conor-burns)
6* Hardware Supported: https://github.com/0xCB-dev/0xcb-static
7* Hardware Availability: On CandyKeys or order your own parts - the hardware in the repo is Open Source :D
8* PCB renders :)
9
10![](https://github.com/0xCB-dev/0xcb-static/blob/main/PCB/rev1.0/top.png)
11
12![](https://github.com/0xCB-dev/0xcb-static/blob/main/PCB/rev1.0/bottom.png)
13
14More Pictures [here](https://0xcb.dev/static/)
15
16To go to bootloader press ESC while plugging in or hold the RESET switch, then hold the BOOT switch, release RESET, release BOOT.
17The board should now appear in lsusb (or device manager).
18
19Make example for this keyboard (after setting up your build environment):
20
21 make 0xcb/static:default
22
23Flashing example for this keyboard:
24
25 make 0xcb/static:flash
26
27See 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).
diff --git a/keyboards/0xcb/static/rules.mk b/keyboards/0xcb/static/rules.mk
new file mode 100644
index 000000000..a06dda50b
--- /dev/null
+++ b/keyboards/0xcb/static/rules.mk
@@ -0,0 +1,23 @@
1# MCU name
2MCU = atmega328p
3
4# Bootloader selection
5BOOTLOADER = usbasploader
6
7# Build Options
8# change yes to no to disable
9#
10BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite
11MOUSEKEY_ENABLE = yes # Mouse keys
12EXTRAKEY_ENABLE = yes # Audio control and System control
13CONSOLE_ENABLE = no # Console for debug
14COMMAND_ENABLE = no # Commands for debug and configuration
15NKRO_ENABLE = no # Enable N-Key Rollover
16BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
17RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
18AUDIO_ENABLE = no # Audio output
19
20ENCODER_ENABLE = yes
21LTO_ENABLE = yes
22OLED_ENABLE = yes
23OLED_DRIVER = SSD1306
diff --git a/keyboards/0xcb/static/static.c b/keyboards/0xcb/static/static.c
new file mode 100644
index 000000000..c6f5601f2
--- /dev/null
+++ b/keyboards/0xcb/static/static.c
@@ -0,0 +1,17 @@
1/*
2Copyright 2021 0xCB - Conor Burns
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#include "static.h"
diff --git a/keyboards/0xcb/static/static.h b/keyboards/0xcb/static/static.h
new file mode 100644
index 000000000..19b698ef3
--- /dev/null
+++ b/keyboards/0xcb/static/static.h
@@ -0,0 +1,66 @@
1/*
2Copyright 2021 0xCB - Conor Burns
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#pragma once
18
19#include "quantum.h"
20
21/* This a shortcut to help you visually see your layout.
22 *
23 * The first section contains all of the arguments representing the physical
24 * layout of the board and position of the keys.
25 *
26 * The second converts the arguments into a two-dimensional array which
27 * represents the switch matrix.
28 */
29
30// clang-format off
31#define LAYOUT_all( \
32 K15, \
33 K00, K10, K01, K11, K02, K12, K03, K13, K04, K14, K05, K35, \
34 K20, K30, K21, K31, K22, K32, K23, K33, K24, K34, K25, \
35 K40, K41, K51, K42, K52, K43, K53, K44, K54, K45, K55, \
36 K60, K70, K61, K71, K72, K64, K74, K65, K75 \
37) \
38{ \
39 { K00, K01, K02, K03, K04, K05 }, \
40 { K10, K11, K12, K13, K14, K15 }, \
41 { K20, K21, K22, K23, K24, K25 }, \
42 { K30, K31, K32, K33, K34, K35 }, \
43 { K40, K41, K42, K43, K44, K45 }, \
44 { KC_NO, K51, K52, K53, K54, K55 }, \
45 { K60, K61, KC_NO, KC_NO, K64, K65 }, \
46 { K70, K71, K72, KC_NO, K74, K75 }, \
47}
48
49#define LAYOUT_bigbar( \
50 K15, \
51 K00, K10, K01, K11, K02, K12, K03, K13, K04, K14, K05, K35, \
52 K20, K30, K21, K31, K22, K32, K23, K33, K24, K34, K25, \
53 K40, K41, K51, K42, K52, K43, K53, K44, K54, K45, K55, \
54 K60, K70, K61, K72, K65, K75 \
55) \
56{ \
57 { K00, K01, K02, K03, K04, K05 }, \
58 { K10, K11, K12, K13, K14, K15 }, \
59 { K20, K21, K22, K23, K24, K25 }, \
60 { K30, K31, K32, K33, K34, K35 }, \
61 { K40, K41, K42, K43, K44, K45 }, \
62 { KC_NO, K51, K52, K53, K54, K55 }, \
63 { K60, K61, KC_NO, KC_NO, KC_NO, K65 }, \
64 { K70, KC_NO, K72, KC_NO, KC_NO, K75 }, \
65}
66// clang-format on