aboutsummaryrefslogtreecommitdiff
path: root/keyboards/0xcb
diff options
context:
space:
mode:
Diffstat (limited to 'keyboards/0xcb')
-rw-r--r--keyboards/0xcb/static/config.h70
-rw-r--r--keyboards/0xcb/static/gfxfont.c277
-rw-r--r--keyboards/0xcb/static/info.json102
-rw-r--r--keyboards/0xcb/static/keymaps/default/keymap.c190
-rw-r--r--keyboards/0xcb/static/keymaps/via/keymap.c197
-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.mk26
-rw-r--r--keyboards/0xcb/static/static.c17
-rw-r--r--keyboards/0xcb/static/static.h48
10 files changed, 955 insertions, 0 deletions
diff --git a/keyboards/0xcb/static/config.h b/keyboards/0xcb/static/config.h
new file mode 100644
index 000000000..0d36b931e
--- /dev/null
+++ b/keyboards/0xcb/static/config.h
@@ -0,0 +1,70 @@
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_DIRECTION_FLIP
52#define ENCODER_RESOLUTION 4
53#define ENCODERS_PAD_A { D0 }
54#define ENCODERS_PAD_B { D1 }
55// clang-format on
56/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
57#define DEBOUNCE 5
58
59/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
60#define LOCKING_SUPPORT_ENABLE
61/* Locking resynchronize hack */
62#define LOCKING_RESYNC_ENABLE
63
64/* oled custom font */
65#define OLED_FONT_END 255
66#define OLED_FONT_H "gfxfont.c"
67
68/* bootmagic */
69#define BOOTMAGIC_LITE_ROW 0
70#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..d646471be
--- /dev/null
+++ b/keyboards/0xcb/static/info.json
@@ -0,0 +1,102 @@
1{
2 "keyboard_name": "0xCB Static",
3 "url": "https://0xCB.dev",
4 "maintainer": "Conor-Burns",
5 "width": 12,
6 "height": 5,
7 "layouts": {
8 "LAYOUT": {
9 "layout": [
10 {"x":11, "y":0},
11 {"x":0, "y":1},
12 {"x":1, "y":1},
13 {"x":2, "y":1},
14 {"x":3, "y":1},
15 {"x":4, "y":1},
16 {"x":5, "y":1},
17 {"x":6, "y":1},
18 {"x":7, "y":1},
19 {"x":8, "y":1},
20 {"x":9, "y":1},
21 {"x":10, "y":1},
22 {"x":11, "y":1},
23 {"x":0, "y":2, "w":1.25},
24 {"x":1.25, "y":2},
25 {"x":2.25, "y":2},
26 {"x":3.25, "y":2},
27 {"x":4.25, "y":2},
28 {"x":5.25, "y":2},
29 {"x":6.25, "y":2},
30 {"x":7.25, "y":2},
31 {"x":8.25, "y":2},
32 {"x":9.25, "y":2},
33 {"x":10.25, "y":2, "w":1.75},
34 {"x":0, "y":3, "w":1.75},
35 {"x":1.75, "y":3},
36 {"x":2.75, "y":3},
37 {"x":3.75, "y":3},
38 {"x":4.75, "y":3},
39 {"x":5.75, "y":3},
40 {"x":6.75, "y":3},
41 {"x":7.75, "y":3},
42 {"x":8.75, "y":3},
43 {"x":9.75, "y":3},
44 {"x":10.75, "y":3, "w":1.25},
45 {"x":0, "y":4},
46 {"x":1, "y":4},
47 {"x":2, "y":4},
48 {"x":3, "y":4, "w":2.75},
49 {"x":5.75, "y":4},
50 {"x":6.75, "y":4, "w":2.25},
51 {"x":9, "y":4},
52 {"x":10, "y":4},
53 {"x":11, "y":4}
54 ]
55 },
56 "LAYOUT_bigbar": {
57 "layout": [
58 {"x":11, "y":0},
59 {"x":0, "y":1},
60 {"x":1, "y":1},
61 {"x":2, "y":1},
62 {"x":3, "y":1},
63 {"x":4, "y":1},
64 {"x":5, "y":1},
65 {"x":6, "y":1},
66 {"x":7, "y":1},
67 {"x":8, "y":1},
68 {"x":9, "y":1},
69 {"x":10, "y":1},
70 {"x":11, "y":1},
71 {"x":0, "y":2, "w":1.25},
72 {"x":1.25, "y":2},
73 {"x":2.25, "y":2},
74 {"x":3.25, "y":2},
75 {"x":4.25, "y":2},
76 {"x":5.25, "y":2},
77 {"x":6.25, "y":2},
78 {"x":7.25, "y":2},
79 {"x":8.25, "y":2},
80 {"x":9.25, "y":2},
81 {"x":10.25, "y":2, "w":1.75},
82 {"x":0, "y":3, "w":1.75},
83 {"x":1.75, "y":3},
84 {"x":2.75, "y":3},
85 {"x":3.75, "y":3},
86 {"x":4.75, "y":3},
87 {"x":5.75, "y":3},
88 {"x":6.75, "y":3},
89 {"x":7.75, "y":3},
90 {"x":8.75, "y":3},
91 {"x":9.75, "y":3},
92 {"x":10.75, "y":3, "w":1.25},
93 {"x":0, "y":4, "w":1.25},
94 {"x":1.25, "y":4},
95 {"x":2.25, "y":4},
96 {"x":3.25, "y":4, "w":6.25},
97 {"x":9.5, "y":4, "w":1.25},
98 {"x":10.75, "y":4, "w":1.25}
99 ]
100 }
101 }
102}
diff --git a/keyboards/0xcb/static/keymaps/default/keymap.c b/keyboards/0xcb/static/keymaps/default/keymap.c
new file mode 100644
index 000000000..2e051d270
--- /dev/null
+++ b/keyboards/0xcb/static/keymaps/default/keymap.c
@@ -0,0 +1,190 @@
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(
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(
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(
41 EEP_RST,
42 _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_LBRC, KC_RBRC, KC_BSLS,
43 _______, _______, _______, _______, _______, _______, _______, _______, KC_SCLN, KC_QUOT, _______,
44 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_SLSH,
45 _______, _______, _______, _______, _______, _______, _______, _______, _______
46),
47[_FN4] = LAYOUT(
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_DRIVER_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
178void 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}
190#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..c860c941d
--- /dev/null
+++ b/keyboards/0xcb/static/keymaps/via/keymap.c
@@ -0,0 +1,197 @@
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(
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(
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(
41 EEP_RST,
42 _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_LBRC, KC_RBRC, KC_BSLS,
43 _______, _______, _______, _______, _______, _______, _______, _______, KC_SCLN, KC_QUOT, _______,
44 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_SLSH,
45 _______, _______, _______, _______, _______, _______, _______, _______, _______
46),
47[_FN4] = LAYOUT(
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_DRIVER_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
178void 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}
190#endif
191
192/* Resets via on eep reset - thank you drashna! */
193void eeconfig_init_kb(void) {
194 via_eeprom_set_valid(false);
195 via_init();
196 eeconfig_init_user();
197}
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..8403b4450
--- /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: Soon on tindie 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..b7158f888
--- /dev/null
+++ b/keyboards/0xcb/static/rules.mk
@@ -0,0 +1,26 @@
1# MCU name
2MCU = atmega328p
3
4# Bootloader selection
5BOOTLOADER = USBasp
6
7# Build Options
8# change yes to no to disable
9#
10BOOTMAGIC_ENABLE = lite # Virtual DIP switch configuration
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
15# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
16SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
17# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
18NKRO_ENABLE = no # USB Nkey Rollover
19BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
20RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
21BLUETOOTH_ENABLE = no # Enable Bluetooth
22AUDIO_ENABLE = no # Audio output
23
24ENCODER_ENABLE = yes
25LTO_ENABLE = yes
26OLED_DRIVER_ENABLE = yes
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..81be5a263
--- /dev/null
+++ b/keyboards/0xcb/static/static.h
@@ -0,0 +1,48 @@
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( \
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// clang-format on