aboutsummaryrefslogtreecommitdiff
path: root/keyboards/arch_36
diff options
context:
space:
mode:
authorobosob <obosob@users.noreply.github.com>2020-08-06 20:08:20 +0100
committerGitHub <noreply@github.com>2020-08-06 12:08:20 -0700
commitd9fe755f7e1f6c0635780071691af0c0a20c4076 (patch)
tree407c0f9f4a7f3b29458abfa5de3ef55392c8bc00 /keyboards/arch_36
parentc8b721d7c6cf683473bcf3d0af6ec561471b1dcc (diff)
downloadqmk_firmware-d9fe755f7e1f6c0635780071691af0c0a20c4076.tar.gz
qmk_firmware-d9fe755f7e1f6c0635780071691af0c0a20c4076.zip
[Keyboard] Add Arch-36 keyboard (#9688)
* Add Arch-36 keyboard * Apply suggestions from code review Update based on PR Review comments * Apply suggestions from code review Update to PR comments * Fix Build * Use full rules.mk template for Arch-36 keyboard * Reduce default firmware size * Update based on PR comments * Fix Copyright statement on arch_36:obosob keymap * Apply suggestions from code review
Diffstat (limited to 'keyboards/arch_36')
-rw-r--r--keyboards/arch_36/arch_36.c16
-rw-r--r--keyboards/arch_36/arch_36.h43
-rw-r--r--keyboards/arch_36/config.h58
-rw-r--r--keyboards/arch_36/keymaps/default/keymap.c309
-rw-r--r--keyboards/arch_36/keymaps/obosob/config.h31
-rw-r--r--keyboards/arch_36/keymaps/obosob/keymap.c818
-rw-r--r--keyboards/arch_36/keymaps/obosob/readme.md1
-rw-r--r--keyboards/arch_36/keymaps/obosob/rules.mk3
-rw-r--r--keyboards/arch_36/readme.md16
-rw-r--r--keyboards/arch_36/rules.mk26
10 files changed, 1321 insertions, 0 deletions
diff --git a/keyboards/arch_36/arch_36.c b/keyboards/arch_36/arch_36.c
new file mode 100644
index 000000000..d707e6419
--- /dev/null
+++ b/keyboards/arch_36/arch_36.c
@@ -0,0 +1,16 @@
1/* Copyright 2020 Obosob <obosob@riseup.net>
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16#include "arch_36.h"
diff --git a/keyboards/arch_36/arch_36.h b/keyboards/arch_36/arch_36.h
new file mode 100644
index 000000000..11c5e2de2
--- /dev/null
+++ b/keyboards/arch_36/arch_36.h
@@ -0,0 +1,43 @@
1/* Copyright 2020 Obosob <obosob@riseup.net>
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16#pragma once
17
18#include "quantum.h"
19
20/* This a shortcut to help you visually see your layout.
21 *
22 * The first section contains all of the arguments representing the physical
23 * layout of the board and position of the keys.
24 *
25 * The second converts the arguments into a two-dimensional array which
26 * represents the switch matrix.
27 */
28#define LAYOUT_split_3x5_3( \
29 L00, L01, L02, L03, L04, R05, R06, R07, R08, R09, \
30 L10, L11, L12, L13, L14, R15, R16, R17, R18, R19, \
31 L20, L21, L22, L23, L24, R25, R26, R27, R28, R29, \
32 L32, L33, L34, R35, R36, R37 \
33) \
34{ \
35 { L00, L01, L02, L03, L04 }, \
36 { L10, L11, L12, L13, L14 }, \
37 { L20, L21, L22, L23, L24 }, \
38 { KC_NO, KC_NO, L32, L33, L34 }, \
39 { R09, R08, R07, R06, R05 }, \
40 { R19, R18, R17, R16, R15 }, \
41 { R29, R28, R27, R26, R25 }, \
42 { KC_NO, KC_NO, R37, R36, R35 }, \
43}
diff --git a/keyboards/arch_36/config.h b/keyboards/arch_36/config.h
new file mode 100644
index 000000000..3950c4b9a
--- /dev/null
+++ b/keyboards/arch_36/config.h
@@ -0,0 +1,58 @@
1/*
2Copyright 2020 Obosob <obosob@riseup.net>
3
4This program is free software: you can redistribute it and/or modify
5it under the terms of the GNU General Public License as published by
6the Free Software Foundation, either version 2 of the License, or
7(at your option) any later version.
8
9This program is distributed in the hope that it will be useful,
10but WITHOUT ANY WARRANTY; without even the implied warranty of
11MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12GNU General Public License for more details.
13
14You should have received a copy of the GNU General Public License
15along with this program. If not, see <http://www.gnu.org/licenses/>.
16*/
17
18#pragma once
19#include "config_common.h"
20
21
22/* USB Device descriptor parameter */
23#define VENDOR_ID 0xFEED
24#define PRODUCT_ID 0x9CE3
25#define DEVICE_VER 0x0001
26#define MANUFACTURER obosob
27#define PRODUCT Arch-36
28
29/* key matrix size */
30/* Rows are doubled up */
31#define MATRIX_ROWS 8
32#define MATRIX_COLS 5
33
34// wiring
35#define MATRIX_ROW_PINS { D7, E6, B4, B5 }
36#define MATRIX_COL_PINS { F7, B1, B3, B2, B6 }
37#define UNUSED_PINS
38
39/* COL2ROW, ROW2COL*/
40#define DIODE_DIRECTION COL2ROW
41
42/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
43#define DEBOUNCE 5
44
45/*
46 * Split Keyboard specific options, make sure you have 'SPLIT_KEYBOARD = yes' in your rules.mk, and define SOFT_SERIAL_PIN.
47 */
48#define SOFT_SERIAL_PIN D2
49
50#ifdef RGBLIGHT_ENABLE
51#define RGB_DI_PIN D3
52#define RGBLED_SPLIT { 6, 6 }
53#define RGBLED_NUM 12
54#define RGBLIGHT_LED_MAP { 0, 1, 2, 3, 4, 5, \
55 11, 10, 9, 8, 7, 6 }
56#endif
57
58#define EE_HANDS
diff --git a/keyboards/arch_36/keymaps/default/keymap.c b/keyboards/arch_36/keymaps/default/keymap.c
new file mode 100644
index 000000000..48412f812
--- /dev/null
+++ b/keyboards/arch_36/keymaps/default/keymap.c
@@ -0,0 +1,309 @@
1#include QMK_KEYBOARD_H
2
3// Defines names for use in layer keycodes and the keymap
4enum layer_names {
5 _QWERTY,
6 _LOWER,
7 _RAISE,
8 _ADJUST
9};
10
11#define LOWER MO(_LOWER)
12#define RAISE MO(_RAISE)
13
14// Defines for task manager and such
15#define CALTDEL LCTL(LALT(KC_DEL))
16#define TSKMGR LCTL(LSFT(KC_ESC))
17
18const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
19
20/* Qwerty
21 *
22 * ,----------------------------------. ,----------------------------------.
23 * | Q | W | E | R | T | | Y | U | I | O | P |
24 * |------+------+------+------+------| |------+------+------+------+------|
25 * | A | S | D | F | G | | H | J | K | L | ; |
26 * |------+------+------+------+------| |------+------+------+------+------|
27 * | Z | X | C | V | B | | N | M | , | . | / |
28 * `----------------------------------' `----------------------------------'
29 * ,--------------------. ,--------------------.
30 * | Ctrl | LOWER| Space| |BckSpc| RAISE| Shift|
31 * `--------------------' `--------------------.
32 */
33[_QWERTY] = LAYOUT_split_3x5_3(
34 KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,
35 KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,
36 KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH,
37 KC_LCTL, LOWER, KC_SPC, KC_BSPC, RAISE, OSM(MOD_LSFT)
38),
39
40/* Raise
41 *
42 * ,----------------------------------. ,----------------------------------.
43 * | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 |
44 * |------+------+------+------+------| |------+------+------+------+------|
45 * | Tab | Left | Down | Up | Right| | | - | = | [ | ] |
46 * |------+------+------+------+------| |------+------+------+------+------|
47 * | Ctrl| ` | GUI | Alt | | | | | | \ | ' |
48 * `----------------------------------' `----------------------------------'
49 * ,--------------------. ,--------------------.
50 * | | LOWER| | | | RAISE| |
51 * `--------------------' `--------------------.
52 */
53[_RAISE] = LAYOUT_split_3x5_3(
54 KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0,
55 KC_TAB, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, _______, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC,
56 KC_LCTL, KC_GRV, KC_LGUI, KC_LALT, _______, _______, _______, _______, KC_BSLS, KC_QUOT,
57 _______, _______, _______, _______, _______, _______
58),
59
60/* Lower
61 *
62 * ,----------------------------------. ,----------------------------------.
63 * | ! | @ | # | $ | % | | ^ | & | * | ( | ) |
64 * |------+------+------+------+------| |------+------+------+------+------|
65 * | Esc | | | | | | | _ | + | { | } |
66 * |------+------+------+------+------| |------+------+------+------+------|
67 * | Caps| ~ | | | | | | | | | | " |
68 * `----------------------------------' `----------------------------------'
69 * ,--------------------. ,--------------------.
70 * | | LOWER| | | | RAISE| Del |
71 * `--------------------' `--------------------.
72 */
73[_LOWER] = LAYOUT_split_3x5_3(
74 KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN,
75 KC_ESC, _______, _______, _______, _______, _______, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR,
76 KC_CAPS, KC_TILD, _______, _______, _______, _______, _______, _______, KC_PIPE, KC_DQT,
77 _______, _______, _______, KC_ENT, _______, KC_DEL
78),
79
80/* Adjust (Lower + Raise)
81 *
82 * ,----------------------------------. ,----------------------------------.
83 * | F1 | F2 | F3 | F4 | F5 | | F6 | F7 | F8 | F9 | F10 |
84 * |------+------+------+------+------| |------+------+------+------+------|
85 * | F11 | F12 | | | | | | | |Taskmg|caltde|
86 * |------+------+------+------+------| |------+------+------+------+------|
87 * | Reset| | | | | | | | | | |
88 * `----------------------------------' `----------------------------------'
89 * ,--------------------. ,--------------------.
90 * | | LOWER| | | | RAISE| |
91 * `--------------------' `--------------------.
92 */
93[_ADJUST] = LAYOUT_split_3x5_3(
94 KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10,
95 KC_F11, KC_F12, _______, _______, _______, _______, _______, _______, TSKMGR, CALTDEL,
96 RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______,
97 _______, _______, _______, _______, _______, _______
98)
99};
100
101layer_state_t layer_state_set_user(layer_state_t state) {
102 return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST);
103}
104
105uint16_t rgb_edit_timer = 0;
106uint16_t last_rgb_char = 0;
107
108bool process_record_user(uint16_t keycode, keyrecord_t *record) {
109 switch(keycode) {
110 case RGB_TOG:
111 case RGB_MOD:
112 case RGB_HUD:
113 case RGB_HUI:
114 case RGB_SAD:
115 case RGB_SAI:
116 case RGB_VAI:
117 case RGB_VAD:
118 rgb_edit_timer = timer_read();
119 last_rgb_char = keycode;
120 return true;
121 }
122 return true;
123}
124
125#ifdef OLED_DRIVER_ENABLE
126
127oled_rotation_t oled_init_user(oled_rotation_t rotation) {
128 return OLED_ROTATION_180;
129}
130
131void render_default_layer_state(void) {
132 oled_write_P(PSTR("Layout: "), false);
133 switch (get_highest_layer(default_layer_state)) {
134 case _QWERTY:
135 oled_write_ln_P(PSTR("Qwerty"), false);
136 break;
137 }
138}
139
140#ifdef RGBLIGHT_ENABLE
141bool cleared = false;
142void render_rgb_state(void) {
143 if(!rgblight_get_mode()) {
144 if(!cleared) {
145 oled_clear();
146 cleared = true;
147 }
148 return;
149 }
150 cleared = false;
151 uint8_t width = (OLED_DISPLAY_WIDTH/OLED_FONT_WIDTH)-10;
152 uint8_t hue = (rgblight_get_hue()*width/255),
153 sat = (rgblight_get_sat()*width/255),
154 val = (rgblight_get_val()*width/255);
155 bool changing_hue = timer_elapsed(rgb_edit_timer) < 1000 && (last_rgb_char == RGB_HUI || last_rgb_char == RGB_HUD);
156 bool changing_sat = timer_elapsed(rgb_edit_timer) < 1000 && (last_rgb_char == RGB_SAI || last_rgb_char == RGB_SAD);
157 bool changing_val = timer_elapsed(rgb_edit_timer) < 1000 && (last_rgb_char == RGB_VAI || last_rgb_char == RGB_VAD);
158
159 uint8_t i;
160
161 oled_write_ln_P(PSTR(""), false);
162
163 oled_write_P(PSTR("Hue: ["), changing_hue);
164 for(i = 0; i < width; ++i) {
165 oled_write_P(i<hue?PSTR("-"):i==hue?PSTR("|"):PSTR(" "), changing_hue);
166 }
167 oled_write_P(PSTR("]"), changing_hue);
168 oled_write_P(PSTR("Sat: ["), changing_sat);
169 for(i = 0; i < width; ++i) {
170 oled_write_P(i<sat?PSTR("-"):i==sat?PSTR("|"):PSTR(" "), changing_sat);
171 }
172 oled_write_P(PSTR("]"), changing_sat);
173 oled_write_P(PSTR("Bri: ["), changing_val);
174 for(i = 0; i < width; ++i) {
175 oled_write_P(i<val?PSTR("-"):i==val?PSTR("|"):PSTR(" "), changing_val);
176 }
177 oled_write_P(PSTR("]"), changing_val);
178}
179#endif // RGBLIGHT_ENABLE
180
181void render_layer_state(void) {
182 oled_write_P(PSTR("Layer: "), false);
183 switch (get_highest_layer(layer_state)) {
184 case _QWERTY:
185 oled_write_ln_P(PSTR("Base"), false);
186 break;
187 case _LOWER:
188 oled_write_ln_P(PSTR("Lower"), false);
189 break;
190 case _RAISE:
191 oled_write_ln_P(PSTR("Raise"), false);
192 break;
193 case _ADJUST:
194 oled_write_ln_P(PSTR("Adjust"), false);
195 break;
196 default:
197 oled_write_ln_P(PSTR("Unknown"), false);
198 }
199}
200
201void render_keylock_status(led_t led_state) {
202 oled_write_P(PSTR("Lock: "), false);
203 oled_write_P(PSTR("123"), led_state.num_lock);
204 oled_write_P(PSTR(" "), false);
205 oled_write_ln_P(led_state.caps_lock?PSTR("ABC"):PSTR("abc"), led_state.caps_lock);
206}
207
208void render_mod_status(uint8_t modifiers) {
209 oled_write_P(PSTR("Mods: "), false);
210 oled_write_P(PSTR("S"), (modifiers & MOD_MASK_SHIFT));
211 oled_write_P(PSTR(" "), false);
212 oled_write_P(PSTR("C"), (modifiers & MOD_MASK_CTRL));
213 oled_write_P(PSTR(" "), false);
214 oled_write_P(PSTR("A"), (modifiers & MOD_MASK_ALT));
215 oled_write_P(PSTR(" "), false);
216 oled_write_ln_P(PSTR("W"), (modifiers & MOD_MASK_GUI));
217}
218
219static void render_status(void) {
220 // Host Keyboard Layer Status
221 render_default_layer_state();
222 render_layer_state();
223 render_keylock_status(host_keyboard_led_state());
224 render_mod_status(get_mods() | get_oneshot_mods());
225#ifdef RGBLIGHT_ENABLE
226 render_rgb_state();
227#endif // RGBLIGHT_ENABLE
228}
229
230static void render_logo(void) {
231 static const char PROGMEM logo[] = {
232 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
233 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
234 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, 0xfc, 0xfc, 0x1c, 0x1c, 0x38, 0xf8,
236 0xf0, 0xe0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
237 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
238 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
239 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
240 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
241 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
242 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
243 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00,
244 0x03, 0x1f, 0x7f, 0xfe, 0xf0, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
245 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
246 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
247 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
248 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
249 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
250 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
251 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x87, 0x9f, 0x3f, 0xfc, 0xf0,
252 0xe0, 0xc0, 0x00, 0x01, 0x07, 0x0f, 0x3f, 0x3f, 0x7f, 0xfe, 0xfe, 0xee, 0xce, 0xfe, 0x8e, 0x0e,
253 0xfe, 0x8e, 0x0e, 0xfe, 0x8e, 0x0e, 0xfe, 0xfe, 0x7e, 0xee, 0xdc, 0x9c, 0x38, 0x78, 0xf0, 0xe0,
254 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
255 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
256 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
257 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
258 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
259 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xf7, 0xe3, 0xc3, 0xc7, 0x8f, 0x0e, 0x1f,
260 0x1f, 0x3f, 0x7f, 0x7f, 0xfe, 0xfc, 0xf8, 0xf8, 0xf8, 0xf0, 0xf0, 0xf0, 0xe0, 0xe0, 0xe0, 0xe0,
261 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe1, 0xe1, 0xe7, 0xff, 0xdb, 0xff, 0xff, 0x00, 0x00, 0x00, 0x03,
262 0x1f, 0xff, 0xfe, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
263 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
264 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
265 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
266 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
267 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0xfc, 0xff, 0xff, 0x8f, 0x8f, 0x0f, 0x0f, 0x0f, 0x0f,
268 0x0e, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0f, 0x0f, 0x0c, 0x08, 0x0f, 0x0c, 0x08,
269 0x0f, 0x0c, 0x08, 0x0f, 0x0c, 0x08, 0x0f, 0x0f, 0x0e, 0x07, 0x03, 0x01, 0x80, 0xc0, 0xe0, 0x40,
270 0x01, 0x03, 0x07, 0x1f, 0xfe, 0xfc, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
271 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
272 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0,
273 0xe0, 0xe0, 0xe0, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
274 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
275 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xf3, 0xf3, 0xf3, 0x03, 0x03, 0x03, 0x03,
276 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0xf3, 0xff, 0xff, 0x9f, 0x8f, 0x80, 0x80, 0xc0, 0xf0, 0xfc,
277 0x7e, 0x1e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0xce, 0xce, 0xef, 0x67, 0x67, 0x6f, 0x6f, 0xef, 0xee,
278 0xce, 0x8e, 0x0e, 0x0e, 0x0f, 0x0f, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x80, 0xc0, 0xe0, 0xe0, 0x60,
279 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
280 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xfc, 0xff,
281 0xbf, 0x83, 0x8f, 0xff, 0xff, 0xf0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xfe, 0xfe,
282 0x1c, 0x0c, 0x06, 0x06, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xf8, 0xfc, 0x1c, 0x0e, 0x06,
283 0x06, 0x06, 0x06, 0x06, 0x04, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x0c, 0x06, 0x06, 0x06,
284 0x0e, 0xfe, 0xfc, 0xf8, 0x00, 0x00, 0x03, 0x03, 0x03, 0x03, 0x33, 0x33, 0x33, 0x33, 0x33, 0x31,
285 0x30, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x30, 0x30, 0x30, 0x30, 0x78, 0xff,
286 0xef, 0xc7, 0x80, 0x00, 0x00, 0x00, 0xe0, 0xf8, 0xfc, 0x7e, 0x3f, 0x1f, 0x1b, 0x39, 0x70, 0xf0,
287 0xe0, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
288 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x3f, 0x3f, 0x1f, 0x01,
289 0x01, 0x01, 0x01, 0x01, 0x07, 0x3f, 0x3f, 0x3c, 0x20, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x3f, 0x3f,
290 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x0f, 0x1f, 0x1c, 0x38, 0x30,
291 0x30, 0x30, 0x30, 0x38, 0x18, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x3f, 0x3f, 0x00, 0x00, 0x00, 0x00,
292 0x00, 0x3f, 0x3f, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
293 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x38, 0x30, 0x30, 0x30, 0x30, 0x30, 0x38, 0x3f,
294 0x1f, 0x1f, 0x0f, 0x00, 0x00, 0x00, 0x07, 0x1f, 0x1f, 0x3c, 0x30, 0x30, 0x30, 0x30, 0x3c, 0x1f,
295 0x0f, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
296 };
297
298 oled_write_raw_P(logo, 1024);
299}
300
301void oled_task_user(void) {
302 if (is_keyboard_master()) {
303 render_status(); // Renders the current keyboard state (layer, lock, caps, scroll, etc)
304 }
305 else {
306 render_logo();
307 }
308}
309#endif
diff --git a/keyboards/arch_36/keymaps/obosob/config.h b/keyboards/arch_36/keymaps/obosob/config.h
new file mode 100644
index 000000000..02be7b511
--- /dev/null
+++ b/keyboards/arch_36/keymaps/obosob/config.h
@@ -0,0 +1,31 @@
1/* Copyright 2020 Obosob <obosob@riseup.net>
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16
17#pragma once
18
19#ifdef OLED_DRIVER_ENABLE
20 #define OLED_DISPLAY_128X64
21#endif
22
23#ifdef RGBLIGHT_ENABLE
24// #define RGBLIGHT_ANIMATIONS
25 #define RGBLIGHT_EFFECT_RAINBOW_SWIRL
26 #define RGBLIGHT_HUE_STEP 8
27 #define RGBLIGHT_SAT_STEP 8
28 #define RGBLIGHT_VAL_STEP 8
29#endif
30
31#define PERMISSIVE_HOLD
diff --git a/keyboards/arch_36/keymaps/obosob/keymap.c b/keyboards/arch_36/keymaps/obosob/keymap.c
new file mode 100644
index 000000000..a938314ac
--- /dev/null
+++ b/keyboards/arch_36/keymaps/obosob/keymap.c
@@ -0,0 +1,818 @@
1/* Copyright 2020 Obosob <obosob@riseup.net>
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16#include QMK_KEYBOARD_H
17
18enum layer_names {
19 _QWERTY,
20 _COLMAK,
21 _NUM,
22 _NAV,
23 _SYM,
24 _MISC,
25 _ADJUST
26};
27
28#define MY_SPC LT(_NAV, KC_SPC)
29#define MY_ENT LT(_NUM, KC_ENT)
30#define MY_BSPC SFT_T(KC_BSPC)
31#define MY_DEL SFT_T(KC_DEL)
32#define MY_ESC CTL_T(KC_ESC)
33#define MY_TAB RALT_T(KC_TAB)
34
35#define KC_NUPI S(KC_NUBS)
36
37#define OS_SFT OSM(MOD_LSFT)
38#define OS_CTL OSM(MOD_LCTL)
39#define OS_GUI OSM(MOD_LGUI)
40#define OS_ALT OSM(MOD_LALT)
41
42enum keycodes {
43 QWERTY = SAFE_RANGE,
44 COLEMAK,
45// layers
46 SYM,
47 MISC,
48// special keys
49 ENC_PRS,
50 DOTSPC,
51 COMMSPC,
52 EXLMSPC,
53 QUESSPC,
54 DQUOT,
55 QUOT,
56 PRN,
57 BRC,
58 CBR,
59 LTGT,
60 LTGTC,
61 GRV,
62 A_TAB,
63 AS_TAB,
64 WOKE,
65};
66
67const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
68
69// Qwerty ________ ________
70// ________| E |________ ________| I |________
71// | W | | R |________ ________| U | | O |
72// ________| |________| | T | | Y | |________| |________
73// | Q |________| D |________| | | |________| K |________| P |
74// | | S | | F |________| |________| J | | L | |
75// |________| |________| | G | | H | |________| |________|
76// | A |________| C |________| | | |________| SYM |________| : |
77// | | X | | V |________| |________| M | | MISC | ; |
78// |________| |________| | B | | N | |________| |________|
79// | Z |________| |________| | | |________| |________| ? |
80// | | | Esc |________| |________| Tab | | / |
81// |________| | Ctrl | Enter |________ ________| Space | Alt | |________|
82// |________| NUM | Del | | BkSp | NAV |________|
83// ________| Shift | | Shift |________
84// |________| |________|
85
86 [_QWERTY] = LAYOUT_split_3x5_3(
87 KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,
88 KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,
89 KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, SYM, MISC, KC_SLSH,
90 MY_ESC, MY_ENT, MY_DEL, MY_BSPC, MY_SPC, MY_TAB
91 ),
92// Colemak (Mod-DH) ________ ________
93// ________| F |________ ________| U |________
94// | W | | P |________ ________| L | | Y |
95// ________| |________| | B | | J | |________| |________
96// | Q |________| S |________| | | |________| E |________| : |
97// | | R | | T |________| |________| N | | I | ; |
98// |________| |________| | G | | K | |________| |________|
99// | A |________| C |________| | | |________| SYM |________| O |
100// | | X | | D |________| |________| H | | MISC | |
101// |________| |________| | V | | M | |________| |________|
102// | Z |________| |________| | | |________| |________| ? |
103// | | | Esc |________| |________| Tab | | / |
104// |________| | Ctrl | Enter |________ ________| Space | Alt | |________|
105// |________| NUM | Del | | BkSp | NAV |________|
106// ________| Shift | | Shift |________
107// |________| |________|
108
109 [_COLMAK] = LAYOUT_split_3x5_3(
110 KC_Q, KC_W, KC_F, KC_P, KC_B, KC_J, KC_L, KC_U, KC_Y, KC_SCLN,
111 KC_A, KC_R, KC_S, KC_T, KC_G, KC_K, KC_N, KC_E, KC_I, KC_O,
112 KC_Z, KC_X, KC_C, KC_D, KC_V, KC_M, KC_H, SYM, MISC, KC_SLSH,
113 MY_ESC, MY_ENT, MY_DEL, MY_BSPC, MY_SPC, MY_TAB
114 ),
115// Number ________ ________
116// ________| F3 |________ ________| 8 |________
117// | F2 | | F4 |________ ________| 7 | | 9 |
118// ________| |________| | | | + | |________| |________
119// | F1 |________| F7 |________| | | |________| 5 |________| / |
120// | | F6 | | F8 |________| |________| 4 | | 6 | |
121// |________| |________| | | | 0 | |________| |________|
122// | F5 |________| F11 |________| | | |________| 2 |________| . |
123// | | F10 | | F12 |________| |________| 1 | | 3 | |
124// |________| |________| | | | - | |________| |________|
125// | F9 |________| |________| | | |________| |________| * |
126// | | | |________| |________| | | |
127// |________| | | |________ ________| ADJUST | | |________|
128// |________| **** | | | | |________|
129// |________| | | |________|
130// |________| |________|
131 [_NUM] = LAYOUT_split_3x5_3(
132 KC_F1, KC_F2, KC_F3, KC_F4, XXXXXXX, KC_PLUS, KC_7, KC_8, KC_9, KC_SLSH,
133 KC_F5, KC_F6, KC_F7, KC_F8, XXXXXXX, KC_COMM, KC_4, KC_5, KC_6, KC_DOT,
134 KC_F9, KC_F10, KC_F11, KC_F12, XXXXXXX, KC_MINS, KC_1, KC_2, KC_3, KC_ASTR,
135 XXXXXXX, _______, XXXXXXX, _______, _______, KC_0
136 ),
137// Navigation ________ ________
138// ________| OS |________ ________| PgUp |________
139// | OS | Ctrl | OS |________ ________| PgDn | | End |
140// ________| Alt |________| Shift | AltTab | | Home | |________| |________
141// | OS |________| Ctrl |________| | | |________| Up |________| PrtScr |
142// | Super | Alt | | Shift |________| |________| Down | | Right | |
143// |________| |________| | | | Left | |________| |________|
144// | Super |________| |________| | | |________| |________| Insert |
145// | | | | |________| |________| | | | |
146// |________| |________| | | | | |________| |________|
147// | |________| |________| | | |________| |________| |
148// | | | |________| |________| | | |
149// |________| | | ADJUST |________ ________| | | |________|
150// |________| | | | | **** |________|
151// |________| | | |________|
152// |________| |________|
153 [_NAV] = LAYOUT_split_3x5_3(
154 OS_GUI, OS_ALT, OS_CTL, OS_SFT, XXXXXXX, KC_HOME, KC_PGDN, KC_PGUP, KC_END, KC_PSCR,
155 KC_LGUI, KC_LALT, KC_LCTL, KC_LSFT, XXXXXXX, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_INS,
156 XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, AS_TAB, A_TAB, XXXXXXX, XXXXXXX,
157 _______, _______, _______, XXXXXXX, _______, XXXXXXX
158 ),
159// Symbol ________ ________
160// ________| { |________ ________| |________
161// | > | | } |________ ________| | | |
162// ________| |________| | ` | | | |________| |________
163// | < |________| ( |________| | | |________| |________| | |
164// | | £ | | ) |________| |________| - | | & | |
165// |________| |________| | ^ | | _ | |________| |________|
166// | * |________| [ |________| | | |________| |________| ~ |
167// | | $ | | ] |________| |________| + | **** | % | |
168// |________| |________| | @ | | = | |________| |________|
169// | \ |________| |________| | | |________| |________| # |
170// | | | ? |________| |________| ! | | |
171// |________| | | ' |________ ________| . | | |________|
172// |________| | " | | , | |________|
173// |________| | | |________|
174// |________| |________|
175//
176 [_SYM] = LAYOUT_split_3x5_3(
177 KC_LT, KC_GT, KC_LCBR, KC_RCBR, KC_GRV, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_NUPI,
178 KC_ASTR, KC_HASH, KC_LPRN, KC_RPRN, KC_CIRC, KC_UNDS, KC_MINS, XXXXXXX, KC_AMPR, KC_PIPE,
179 KC_NUBS, KC_DLR, KC_LBRC, KC_RBRC, KC_DQUO, KC_EQL, KC_PLUS, _______, KC_PERC, KC_NUHS,
180 KC_QUES, KC_QUOT, KC_AT, KC_COMM, KC_DOT, KC_EXLM
181 ),
182// Miscellaneous ________ ________
183// ________| {|} |________ ________| |________
184// | </|> | | {|} |________ ________| | | |
185// ________| |________| | | | | |________| |________
186// | <|> |________| (|) |________| | | |________| |________| |
187// | | | | (|) |________| |________| | | | |
188// |________| |________| | | | | |________| |________|
189// | |________| [|] |________| | | |________| |________| |
190// | | | | [|] |________| |________| | | | |
191// |________| |________| | | | | |________| **** |________|
192// | |________| |________| | | |________| |________| |
193// | | | ?_^ |________| |________| !_^ | | |
194// |________| | | '|' |________ ________| ._^ | | |________|
195// |________| | "|" | | ,_ | |________|
196// |________| | | |________|
197// |________| |________|
198//
199 [_MISC] = LAYOUT_split_3x5_3(
200 LTGT, LTGTC, CBR, CBR, GRV, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
201 XXXXXXX, XXXXXXX, PRN, PRN, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
202 XXXXXXX, XXXXXXX, BRC, BRC, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, XXXXXXX,
203 QUESSPC, QUOT, DQUOT, COMMSPC, DOTSPC, EXLMSPC
204 ),
205// Adjust ________ ________
206// ________| RESET |________ ________| |________
207// | | EEPROM | RESET |________ ________| | | |
208// ________| |________| | | | | |________| |________
209// | |________| RGB |________| | | |________| |________| |
210// | | RGB | Hue+ | RGB |________| |________| | | | |
211// |________| Toggle |________| Sat+ | RGB | | | |________| |________|
212// | |________| RGB |________| Bri+ | | |________| |________| |
213// | | RGB | Hue- | RGB |________| |________| | | | |
214// |________| Mode |________| Sat- | RGB | | | |________| |________|
215// | |________| |________| Bri- | | |________| |________| |
216// | | | |________| |________| | | |
217// |________| | | |________ ________| | | |________|
218// |________| **** | | | | **** |________|
219// |________| | | |________|
220// |________| |________|
221 [_ADJUST] = LAYOUT_split_3x5_3(
222 XXXXXXX, WOKE, EEP_RST, RESET, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
223 XXXXXXX, RGB_TOG, RGB_HUI, RGB_SAI, RGB_VAI, XXXXXXX, QWERTY, COLEMAK, XXXXXXX, XXXXXXX,
224 XXXXXXX, RGB_MOD, RGB_HUD, RGB_SAD, RGB_VAD, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
225 XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX
226 ),
227};
228
229bool alt_tabbing = false;
230bool woke_mode = false;
231uint16_t rgb_edit_timer = 0;
232uint16_t last_rgb_char = 0;
233
234bool process_record_user(uint16_t keycode, keyrecord_t *record) {
235 switch (keycode) {
236 case QWERTY:
237 if (record->event.pressed) {
238 set_single_persistent_default_layer(_QWERTY);
239 }
240 return false;
241 case COLEMAK:
242 if (record->event.pressed) {
243 set_single_persistent_default_layer(_COLMAK);
244 }
245 return false;
246 case SYM:
247 if (record->event.pressed) {
248 layer_on(_SYM);
249 } else {
250 layer_off(_SYM);
251 }
252 return false;
253 case MY_SPC:
254 if (!record->event.pressed) {
255 if(alt_tabbing) {
256 unregister_code(KC_LALT);
257 alt_tabbing = false;
258 }
259 }
260 return true;
261 case MISC:
262 if (record->event.pressed) {
263 layer_on(_MISC);
264 } else {
265 layer_off(_MISC);
266 }
267 return false;
268 case DOTSPC:
269 if (record->event.pressed) {
270 tap_code(KC_DOT);
271 tap_code(KC_SPC);
272 set_oneshot_mods(MOD_LSFT);
273 }
274 return false;
275 case COMMSPC:
276 if (record->event.pressed) {
277 tap_code(KC_COMM);
278 tap_code(KC_SPC);
279 }
280 return false;
281 case EXLMSPC:
282 if (record->event.pressed) {
283 tap_code16(KC_EXLM);
284 tap_code(KC_SPC);
285 set_oneshot_mods(MOD_LSFT);
286 }
287 return false;
288 case QUESSPC:
289 if (record->event.pressed) {
290 tap_code16(KC_QUES);
291 tap_code(KC_SPC);
292 set_oneshot_mods(MOD_LSFT);
293 }
294 return false;
295 case QUOT:
296 if (record->event.pressed) {
297 tap_code(KC_QUOT);
298 tap_code(KC_QUOT);
299 tap_code(KC_LEFT);
300 }
301 return false;
302 case DQUOT:
303 if (record->event.pressed) {
304 tap_code16(KC_DQUO);
305 tap_code16(KC_DQUO);
306 tap_code(KC_LEFT);
307 }
308 return false;
309 case PRN:
310 if (record->event.pressed) {
311 tap_code16(KC_LPRN);
312 tap_code16(KC_RPRN);
313 tap_code(KC_LEFT);
314 }
315 return false;
316 case BRC:
317 if (record->event.pressed) {
318 tap_code(KC_LBRC);
319 tap_code(KC_RBRC);
320 tap_code(KC_LEFT);
321 }
322 return false;
323 case CBR:
324 if (record->event.pressed) {
325 tap_code16(KC_LCBR);
326 tap_code16(KC_RCBR);
327 tap_code(KC_LEFT);
328 }
329 return false;
330 case LTGT:
331 if (record->event.pressed) {
332 tap_code16(KC_LT);
333 tap_code16(KC_GT);
334 tap_code(KC_LEFT);
335 }
336 return false;
337 case LTGTC:
338 if (record->event.pressed) {
339 tap_code16(KC_LT);
340 tap_code(KC_SLSH);
341 tap_code16(KC_GT);
342 tap_code(KC_LEFT);
343 }
344 return false;
345 case GRV:
346 if (record->event.pressed) {
347 tap_code(KC_GRV);
348 tap_code(KC_GRV);
349 tap_code(KC_LEFT);
350 }
351 return false;
352 case AS_TAB:
353 if (record->event.pressed) {
354 register_code(KC_LSFT);
355 } else {
356 unregister_code(KC_LSFT);
357 }
358 case A_TAB:
359 if (record->event.pressed) {
360 register_code(KC_LALT);
361 register_code(KC_TAB);
362 alt_tabbing = true;
363 } else {
364 unregister_code(KC_TAB);
365 }
366 return false;
367 case WOKE:
368 if (!record->event.pressed) {
369 woke_mode = !woke_mode;
370 }
371 return false;
372 case RGB_TOG:
373 case RGB_MOD:
374 case RGB_HUD:
375 case RGB_HUI:
376 case RGB_SAD:
377 case RGB_SAI:
378 case RGB_VAI:
379 case RGB_VAD:
380 rgb_edit_timer = timer_read();
381 last_rgb_char = keycode;
382 return true;
383 }
384
385 if (woke_mode && ((keycode >= KC_A && keycode <= KC_Z) || keycode == MY_BSPC)) {
386 if (record->event.pressed) {
387 tap_code(KC_CAPS);
388 }
389 }
390
391 return true;
392}
393
394layer_state_t layer_state_set_user(layer_state_t state) {
395 state = update_tri_layer_state(state, _NAV, _NUM, _ADJUST);
396 return state;
397}
398
399#ifdef OLED_DRIVER_ENABLE
400
401#define ANIM_NUM_FRAMES 4
402#define ANIM_FRAME_DURATION 100
403
404#ifdef ANIM_REVERSE
405#define ANIM_TOTAL_FRAMES (2*((ANIM_NUM_FRAMES)-1))
406#else
407#define ANIM_TOTAL_FRAMES ANIM_NUM_FRAMES
408#endif
409
410uint16_t anim_timer = 0;
411uint8_t current_anim_frame = 0;
412
413oled_rotation_t oled_init_user(oled_rotation_t rotation) {
414 return OLED_ROTATION_180;
415}
416
417void render_default_layer_state(void) {
418 oled_write_P(PSTR("Layout: "), false);
419 switch (get_highest_layer(default_layer_state)) {
420 case _QWERTY:
421 if(woke_mode) {
422 oled_write_ln_P(PSTR("QwErTy"), false);
423 } else {
424 oled_write_ln_P(PSTR("Qwerty"), false);
425 }
426 break;
427 case _COLMAK:
428 oled_write_ln_P(PSTR("Colemak"), false);
429 break;
430 }
431}
432
433#ifdef RGBLIGHT_ENABLE
434bool cleared = false;
435void render_rgb_state(void) {
436 if(!rgblight_get_mode()) {
437 if(!cleared) {
438 oled_clear();
439 cleared = true;
440 }
441 return;
442 }
443 cleared = false;
444 uint8_t width = (OLED_DISPLAY_WIDTH/OLED_FONT_WIDTH)-10;
445 uint8_t hue = (rgblight_get_hue()*width/255),
446 sat = (rgblight_get_sat()*width/255),
447 val = (rgblight_get_val()*width/255);
448 bool changing_hue = timer_elapsed(rgb_edit_timer) < 1000 && (last_rgb_char == RGB_HUI || last_rgb_char == RGB_HUD);
449 bool changing_sat = timer_elapsed(rgb_edit_timer) < 1000 && (last_rgb_char == RGB_SAI || last_rgb_char == RGB_SAD);
450 bool changing_val = timer_elapsed(rgb_edit_timer) < 1000 && (last_rgb_char == RGB_VAI || last_rgb_char == RGB_VAD);
451
452 uint8_t i;
453
454 oled_write_ln_P(PSTR(""), false);
455
456 oled_write_P(PSTR("Hue: ["), changing_hue);
457 for(i = 0; i < width; ++i) {
458 oled_write_P(i<hue?PSTR("-"):i==hue?PSTR("|"):PSTR(" "), changing_hue);
459 }
460 oled_write_P(PSTR("]"), changing_hue);
461 oled_write_P(PSTR("Sat: ["), changing_sat);
462 for(i = 0; i < width; ++i) {
463 oled_write_P(i<sat?PSTR("-"):i==sat?PSTR("|"):PSTR(" "), changing_sat);
464 }
465 oled_write_P(PSTR("]"), changing_sat);
466 oled_write_P(PSTR("Bri: ["), changing_val);
467 for(i = 0; i < width; ++i) {
468 oled_write_P(i<val?PSTR("-"):i==val?PSTR("|"):PSTR(" "), changing_val);
469 }
470 oled_write_P(PSTR("]"), changing_val);
471}
472#endif // RGBLIGHT_ENABLE
473
474void render_layer_state(void) {
475 oled_write_P(PSTR("Layer: "), false);
476 switch (get_highest_layer(layer_state)) {
477 case _QWERTY:
478 oled_write_ln_P(PSTR("Base"), false);
479 break;
480 case _NAV:
481 oled_write_ln_P(PSTR("Navigation"), false);
482 break;
483 case _NUM:
484 oled_write_ln_P(PSTR("Number"), false);
485 break;
486 case _SYM:
487 oled_write_ln_P(PSTR("Symbol"), false);
488 break;
489 case _MISC:
490 oled_write_ln_P(PSTR("Misc"), false);
491 break;
492 case _ADJUST:
493 oled_write_ln_P(PSTR("Adjust"), false);
494 break;
495 default:
496 oled_write_ln_P(PSTR("Unknown"), false);
497 }
498}
499
500void render_keylock_status(led_t led_state) {
501 oled_write_P(PSTR("Lock: "), false);
502 oled_write_P(PSTR("123"), led_state.num_lock);
503 oled_write_P(PSTR(" "), false);
504 oled_write_ln_P(led_state.caps_lock?PSTR("ABC"):PSTR("abc"), led_state.caps_lock);
505}
506
507void render_mod_status(uint8_t modifiers) {
508 oled_write_P(PSTR("Mods: "), false);
509 oled_write_P(PSTR("S"), (modifiers & MOD_MASK_SHIFT));
510 oled_write_P(PSTR(" "), false);
511 oled_write_P(PSTR("C"), (modifiers & MOD_MASK_CTRL));
512 oled_write_P(PSTR(" "), false);
513 oled_write_P(PSTR("A"), (modifiers & MOD_MASK_ALT));
514 oled_write_P(PSTR(" "), false);
515 oled_write_ln_P(PSTR("W"), (modifiers & MOD_MASK_GUI));
516}
517
518static void render_status(void) {
519 // Host Keyboard Layer Status
520 render_default_layer_state();
521 render_layer_state();
522 render_keylock_status(host_keyboard_led_state());
523 render_mod_status(get_mods() | get_oneshot_mods());
524#ifdef RGBLIGHT_ENABLE
525 render_rgb_state();
526#endif // RGBLIGHT_ENABLE
527}
528
529static void render_logo(void) {
530 static const char PROGMEM frame[ANIM_NUM_FRAMES][1024] = {
531 {
532 // leekspin: frame 0
533 0xff, 0xbf, 0xfb, 0x6f, 0xff, 0xdb, 0x7f, 0xf7, 0xde, 0x7c, 0xf1, 0xc6, 0x98, 0x21, 0x66, 0x9a,
534 0xc9, 0x24, 0x33, 0xcf, 0x2f, 0xfd, 0xff, 0x6b, 0x7f, 0x9d, 0x81, 0x76, 0x14, 0x81, 0x67, 0x0f,
535 0xfb, 0xff, 0xef, 0xbb, 0xff, 0xef, 0xbb, 0xff, 0xef, 0xbb, 0xff, 0xef, 0xbb, 0xff, 0xef, 0xbb,
536 0xff, 0x6f, 0xfb, 0xdf, 0x77, 0xff, 0x0d, 0xe0, 0x3f, 0xc0, 0x0d, 0x37, 0xd0, 0x26, 0xa9, 0xd8,
537 0xc7, 0x1d, 0xf0, 0xff, 0xff, 0xf0, 0xc7, 0xb1, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xf1, 0xc6,
538 0xff, 0xf7, 0xf8, 0xf3, 0xcf, 0x90, 0xf7, 0xfc, 0xe3, 0x9b, 0x2e, 0xe2, 0xfc, 0x03, 0xfc, 0x7c,
539 0x83, 0x1b, 0x6c, 0xa5, 0xb3, 0x4e, 0x59, 0x64, 0x13, 0xdb, 0xae, 0x20, 0xdf, 0xff, 0xbb, 0xef,
540 0xff, 0xbb, 0xef, 0xdf, 0x7b, 0xef, 0xbf, 0xfb, 0x6f, 0xff, 0xdb, 0x7f, 0xf7, 0xdf, 0x7b, 0xef,
541 0xff, 0xff, 0xdd, 0x77, 0xff, 0xdd, 0x77, 0xff, 0xdd, 0x77, 0xff, 0xdd, 0x77, 0xfe, 0xdc, 0xf1,
542 0xcc, 0x23, 0x99, 0x64, 0x26, 0x98, 0x63, 0x0f, 0x30, 0xcc, 0x33, 0x24, 0xcd, 0x19, 0xe0, 0xff,
543 0xff, 0xde, 0x7b, 0xef, 0xbe, 0xfb, 0xef, 0xbe, 0xfb, 0x6f, 0xfe, 0xdb, 0x7f, 0xf6, 0xdf, 0xfd,
544 0xb7, 0xff, 0x6d, 0xff, 0xdb, 0xff, 0x00, 0xbd, 0x67, 0x48, 0x13, 0xfc, 0x85, 0xff, 0x5f, 0x3f,
545 0xb7, 0x97, 0xcf, 0xcb, 0xeb, 0xcf, 0x97, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
546 0xef, 0x9f, 0xd7, 0xcf, 0xcb, 0xdf, 0xd7, 0xcf, 0x8f, 0x3f, 0x1f, 0x7f, 0xff, 0xfe, 0xff, 0xf2,
547 0x07, 0xe9, 0x3e, 0x00, 0x35, 0xef, 0xc9, 0x1b, 0xc2, 0xbc, 0x37, 0xc0, 0xff, 0xbf, 0xfb, 0x6e,
548 0xef, 0xfb, 0xde, 0xf7, 0xb7, 0xfd, 0xef, 0xbd, 0xf7, 0x77, 0xdd, 0xff, 0xb7, 0xfd, 0xef, 0xbb,
549 0xff, 0xff, 0xdd, 0xf7, 0x7f, 0xdd, 0xf7, 0x7f, 0xdd, 0xf7, 0x7f, 0xdd, 0xf7, 0xbf, 0xed, 0xff,
550 0xdf, 0xf7, 0xf6, 0x7c, 0xf9, 0xb1, 0xe6, 0xcb, 0x18, 0xa4, 0xb3, 0x09, 0xfc, 0xff, 0xfb, 0x6f,
551 0xfe, 0xdf, 0xfb, 0xbf, 0xf7, 0x7e, 0xef, 0xfd, 0xb7, 0xff, 0x6d, 0xff, 0xdb, 0xff, 0xb6, 0xff,
552 0x6d, 0xff, 0xdb, 0x7f, 0xf6, 0xdf, 0xf9, 0x21, 0x8e, 0xfb, 0x00, 0x7e, 0xc0, 0xff, 0xfe, 0xff,
553 0xf7, 0xff, 0xff, 0xff, 0x3f, 0x3f, 0x7f, 0x7f, 0x3f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f,
554 0x3f, 0x7f, 0x7f, 0x3f, 0x3f, 0x7f, 0x37, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xff, 0xef, 0x3f, 0xc0,
555 0x6e, 0x3b, 0x09, 0xe0, 0x6f, 0x1a, 0x92, 0x64, 0x6d, 0x99, 0xf2, 0x7f, 0xef, 0xfd, 0xb7, 0xff,
556 0x7b, 0xde, 0xf7, 0xbf, 0xfb, 0x7e, 0xef, 0xbf, 0xff, 0xfb, 0xef, 0xbe, 0xfb, 0x6f, 0xfe, 0xdb,
557 0xff, 0xff, 0xfe, 0xf7, 0xbf, 0xfb, 0xff, 0xbf, 0xef, 0xfd, 0xdf, 0xf7, 0x7d, 0xff, 0xee, 0x7f,
558 0xf7, 0xbd, 0xff, 0xef, 0xfb, 0xbf, 0xfd, 0x77, 0xfe, 0xa0, 0xf9, 0xfe, 0xf0, 0xef, 0xbf, 0xf7,
559 0x7f, 0xfb, 0xde, 0xff, 0xbb, 0xff, 0xf7, 0xbe, 0xfb, 0xdf, 0xff, 0xfd, 0xb7, 0xfe, 0xef, 0x7f,
560 0xfb, 0xbf, 0xed, 0xff, 0xf7, 0xbe, 0xfb, 0xdf, 0xf0, 0x06, 0x98, 0xe7, 0x3c, 0x03, 0xcf, 0x2f,
561 0x1f, 0x9f, 0x7f, 0x7f, 0x7e, 0xf8, 0xf1, 0xe6, 0xf8, 0xc9, 0xca, 0xfa, 0xc8, 0xda, 0xf2, 0xcc,
562 0xd9, 0xf2, 0xe0, 0xed, 0xf1, 0xfa, 0xfc, 0x7f, 0x7f, 0x3f, 0xbf, 0x9f, 0x0f, 0xe3, 0x34, 0x8d,
563 0xe3, 0x18, 0x17, 0x85, 0xa0, 0x38, 0xcf, 0x13, 0xf8, 0xef, 0xdd, 0x7f, 0xff, 0xf7, 0xfd, 0xef,
564 0xbb, 0xff, 0x7f, 0xf7, 0xfd, 0xef, 0xbf, 0xfb, 0xee, 0xff, 0xff, 0xbb, 0xef, 0x7f, 0xfb, 0xee,
565 0xff, 0xff, 0xde, 0xf7, 0xff, 0xef, 0xbd, 0xff, 0xdb, 0xff, 0xfe, 0x77, 0x7f, 0xf7, 0xfd, 0x7f,
566 0xf7, 0xff, 0xdb, 0x7e, 0xff, 0xef, 0xfb, 0xff, 0xb7, 0xff, 0xc8, 0xff, 0xff, 0xff, 0xfc, 0x27,
567 0xff, 0xff, 0xff, 0xed, 0xbf, 0xfe, 0xf7, 0x7f, 0xfb, 0xdf, 0xfe, 0xf7, 0xdf, 0xff, 0xfd, 0x6f,
568 0xff, 0xbf, 0xfb, 0xff, 0xde, 0xff, 0xf7, 0xfd, 0xbf, 0x00, 0x77, 0x6c, 0x89, 0x11, 0x04, 0xa2,
569 0x08, 0x69, 0x46, 0x90, 0x02, 0x64, 0x94, 0x24, 0x09, 0x91, 0x85, 0x21, 0x09, 0xff, 0xf7, 0xdd,
570 0x3d, 0x37, 0x1d, 0x1d, 0x06, 0xc6, 0x07, 0x10, 0x20, 0x83, 0x84, 0x30, 0x66, 0x19, 0x92, 0x06,
571 0x40, 0x31, 0x0c, 0xc0, 0x14, 0xb7, 0x09, 0xfa, 0xff, 0xdf, 0xfb, 0xbf, 0xfd, 0xf7, 0xef, 0xef,
572 0xff, 0xdf, 0xf7, 0xff, 0x6e, 0xff, 0xff, 0xde, 0xf7, 0xff, 0x7e, 0xdb, 0xff, 0xb7, 0xff, 0xee,
573 0xff, 0xff, 0x7f, 0xf6, 0xdf, 0xfd, 0xff, 0xff, 0xef, 0xbb, 0xfe, 0x7f, 0xf7, 0xdf, 0xff, 0xf7,
574 0xdd, 0xff, 0xff, 0xbf, 0xed, 0xff, 0xfe, 0xef, 0x3f, 0xde, 0xee, 0xc9, 0xff, 0xff, 0xdf, 0xff,
575 0xc9, 0xff, 0x9e, 0xdf, 0xdf, 0xb7, 0xfd, 0xff, 0xef, 0xff, 0xfb, 0xef, 0xfd, 0xbf, 0xf7, 0xff,
576 0xbb, 0xef, 0xff, 0xfd, 0xff, 0xef, 0x7e, 0xff, 0xb1, 0x06, 0x7b, 0xc9, 0x00, 0x42, 0x98, 0x31,
577 0x46, 0x44, 0x38, 0x89, 0xc4, 0x30, 0x00, 0x42, 0x10, 0x84, 0x20, 0x08, 0x81, 0x03, 0x10, 0x80,
578 0x24, 0x00, 0x88, 0x21, 0x04, 0xc0, 0x08, 0xa1, 0x34, 0x4c, 0x03, 0x90, 0x46, 0x00, 0x30, 0xd1,
579 0x04, 0x69, 0x88, 0x30, 0x22, 0xcb, 0x04, 0x3f, 0xfb, 0xff, 0xfd, 0x6f, 0xfe, 0xf7, 0xbf, 0xfe,
580 0xdb, 0xff, 0xee, 0x7f, 0xf7, 0xbf, 0xfd, 0xef, 0x7e, 0xf7, 0xff, 0xdb, 0xff, 0xb7, 0xfe, 0x7b,
581 0xff, 0xff, 0xff, 0xbb, 0xef, 0xff, 0xf6, 0xff, 0xbf, 0xef, 0xff, 0xdf, 0xfd, 0x7f, 0xfe, 0xbf,
582 0xef, 0xfe, 0xff, 0xdf, 0xff, 0xfe, 0xff, 0xe4, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
583 0xff, 0xff, 0xfe, 0xfb, 0x37, 0xfd, 0xfe, 0xff, 0xff, 0x6f, 0xff, 0xf6, 0xff, 0xbf, 0xfb, 0xdf,
584 0xff, 0xff, 0x77, 0x7f, 0x9d, 0x9f, 0x27, 0x21, 0xcc, 0x18, 0x63, 0x84, 0x80, 0x2a, 0x29, 0x44,
585 0x59, 0x43, 0x94, 0x34, 0x42, 0x49, 0x2c, 0x92, 0x92, 0x64, 0x0c, 0x80, 0xb8, 0x22, 0x86, 0x34,
586 0x48, 0x23, 0x34, 0x44, 0xc9, 0x18, 0x46, 0x09, 0x80, 0x72, 0x08, 0x61, 0x80, 0x9b, 0x12, 0x64,
587 0x8d, 0x90, 0x23, 0xa8, 0x26, 0x44, 0x59, 0x89, 0x24, 0xd3, 0x1f, 0xff, 0xfd, 0xef, 0xff, 0x7d,
588 0xef, 0xfe, 0xf7, 0xbf, 0xfb, 0xdf, 0x7d, 0xff, 0xf7, 0xbf, 0xfe, 0xdb, 0x7f, 0xfd, 0xff, 0xcf,
589 0xff, 0xff, 0xfb, 0xff, 0x7f, 0xff, 0xb6, 0xff, 0xff, 0xff, 0xfd, 0xb7, 0xff, 0xfb, 0xbf, 0xff,
590 0xef, 0xfb, 0x7e, 0xdf, 0xff, 0xf6, 0xff, 0xdf, 0xff, 0xed, 0xfb, 0xff, 0xef, 0x2f, 0xef, 0xef,
591 0xf7, 0xf7, 0x9f, 0xfb, 0xfc, 0xff, 0xf7, 0xdf, 0xbb, 0x7f, 0xff, 0xef, 0xfe, 0xf7, 0x1f, 0x07,
592 0xd1, 0x19, 0x22, 0x66, 0x44, 0x98, 0x8b, 0x21, 0x64, 0x1a, 0x42, 0xd4, 0x14, 0x23, 0xa8, 0x4d,
593 0x91, 0x92, 0x64, 0x25, 0x99, 0x44, 0x23, 0x88, 0x50, 0x96, 0xa3, 0x18, 0x44, 0x65, 0x99, 0x22,
594 0x8a, 0x69, 0x25, 0x86, 0xd8, 0x1d, 0xb7, 0x9a, 0x9e, 0x30, 0x8b, 0xe2, 0xcc, 0xd9, 0xe1, 0xfc,
595 0xee, 0xf8, 0xfe, 0xe1, 0xc9, 0x06, 0x98, 0x69, 0x22, 0x92, 0x4c, 0x23, 0xa7, 0x1f, 0x7d, 0xff,
596 0xff, 0xbf, 0xef, 0xfb, 0xbe, 0xef, 0x7f, 0xfb, 0xfe, 0x77, 0xff, 0xbf, 0xef, 0xfd, 0xf7, 0xff,
597
598 },
599 {
600 // leekspin: frame 1
601 0xff, 0xbf, 0xfb, 0xcf, 0xff, 0xbb, 0xef, 0xff, 0xbb, 0xef, 0xff, 0xbb, 0xef, 0xff, 0xff, 0xdf,
602 0x77, 0xff, 0xdb, 0xff, 0xb7, 0xff, 0xfb, 0x6f, 0xff, 0xff, 0xdd, 0xf7, 0xff, 0xff, 0xff, 0xbb,
603 0xef, 0xff, 0xbb, 0xef, 0xff, 0xbb, 0xef, 0xff, 0xbb, 0xef, 0xff, 0xbb, 0x6f, 0xff, 0xbb, 0xef,
604 0xff, 0xbb, 0xef, 0x7f, 0xdb, 0xff, 0x27, 0xd0, 0x5f, 0x60, 0x8d, 0x37, 0xe0, 0x8d, 0x31, 0xd8,
605 0xc7, 0x1d, 0xf0, 0xff, 0xff, 0xf0, 0xcf, 0xe0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xf9, 0xc1,
606 0xff, 0xfe, 0xf9, 0xe7, 0xcc, 0x91, 0xf7, 0xfc, 0xe3, 0x99, 0x2e, 0xe2, 0xfc, 0x03, 0xfc, 0x7c,
607 0x03, 0x3b, 0xec, 0x85, 0x33, 0x76, 0xcd, 0xa8, 0x23, 0x5b, 0xee, 0x20, 0x9f, 0xff, 0x7b, 0xef,
608 0xbf, 0xfb, 0xef, 0xbf, 0xfb, 0xef, 0xbf, 0xfb, 0xef, 0xbf, 0xfb, 0x6f, 0xff, 0xdb, 0xff, 0xb7,
609 0xff, 0xff, 0x76, 0xdf, 0xfd, 0x77, 0xde, 0xfb, 0xbf, 0xf6, 0xdf, 0xfd, 0xb7, 0xff, 0x6d, 0xff,
610 0xfe, 0xfb, 0xdf, 0xf6, 0xbf, 0xed, 0xff, 0xef, 0xbf, 0xf6, 0xff, 0xef, 0xfb, 0xbf, 0xee, 0xfb,
611 0xbf, 0xee, 0xfb, 0xbf, 0xee, 0xfb, 0xbf, 0xee, 0xfb, 0xbf, 0xee, 0x7b, 0xdf, 0xfd, 0xb7, 0xfe,
612 0xef, 0xbd, 0xf7, 0x7f, 0xed, 0xff, 0x00, 0x6e, 0xdb, 0x91, 0x24, 0xee, 0x09, 0xff, 0x5f, 0x3f,
613 0xa7, 0x9f, 0xcb, 0xcb, 0xef, 0xcb, 0x9f, 0xb7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
614 0xff, 0x8f, 0xd7, 0xdf, 0xcb, 0xcf, 0xd7, 0xdf, 0x8f, 0x3f, 0x1f, 0x7f, 0xff, 0xff, 0xff, 0xf0,
615 0x07, 0xb3, 0xec, 0x08, 0x33, 0xf7, 0x8c, 0x66, 0x11, 0xdb, 0x2e, 0xa0, 0xff, 0xdf, 0xf7, 0xbd,
616 0xef, 0xfe, 0xbb, 0xef, 0x7e, 0xdb, 0xff, 0xb6, 0xff, 0x6d, 0xff, 0xdb, 0xff, 0xb6, 0xff, 0x6d,
617 0xff, 0xff, 0xb7, 0xfd, 0xef, 0xbb, 0xff, 0x6e, 0xfb, 0xdf, 0x76, 0xff, 0xdd, 0x77, 0xff, 0xef,
618 0xbf, 0xfb, 0xf6, 0x7f, 0xef, 0xff, 0x7f, 0xed, 0xfd, 0xf7, 0xbf, 0xff, 0xde, 0xf7, 0xfd, 0xbf,
619 0xf7, 0xde, 0xfb, 0xbf, 0xee, 0xfb, 0xdf, 0x76, 0xff, 0xed, 0xbf, 0xfb, 0x6f, 0xfe, 0xdb, 0xff,
620 0xb6, 0xff, 0xed, 0xbf, 0xfb, 0x6f, 0xfc, 0x83, 0x32, 0xde, 0x00, 0xbf, 0xc0, 0xff, 0xfe, 0xff,
621 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
622 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xff, 0xef, 0x3f, 0xc0,
623 0xde, 0x33, 0x0c, 0xe0, 0xb7, 0x1c, 0x85, 0x70, 0x6f, 0x8d, 0xf0, 0x7f, 0xdf, 0xf7, 0xfe, 0xbb,
624 0xef, 0x7f, 0xd9, 0xff, 0xbf, 0xf7, 0xff, 0x6f, 0xff, 0xfb, 0xff, 0xb6, 0xff, 0x6d, 0xff, 0xdb,
625 0xff, 0xff, 0xff, 0xed, 0xbf, 0xfb, 0xff, 0xdf, 0xf7, 0xfd, 0x7f, 0xef, 0xbb, 0xff, 0xdd, 0xff,
626 0x77, 0xfe, 0xef, 0xbb, 0xff, 0x7d, 0xef, 0xff, 0xb6, 0xff, 0xdd, 0xff, 0x7b, 0xde, 0xff, 0xed,
627 0x7f, 0xfb, 0xde, 0xff, 0xb7, 0xfd, 0xff, 0xdb, 0x7f, 0xfe, 0xbb, 0xef, 0x7f, 0xdb, 0xfe, 0xef,
628 0x7b, 0xfe, 0xef, 0x7d, 0xf7, 0xbf, 0xed, 0x7f, 0xf8, 0x02, 0xc6, 0xbd, 0x34, 0x47, 0x47, 0x9f,
629 0x1f, 0x3f, 0x3f, 0x7f, 0x7e, 0xff, 0xff, 0xfe, 0xff, 0xfd, 0xfd, 0xff, 0xfe, 0xff, 0xfd, 0xff,
630 0xfe, 0xff, 0xfe, 0xff, 0xff, 0xff, 0x7f, 0xff, 0x3f, 0x7f, 0x9f, 0x9f, 0x0d, 0xe3, 0x3a, 0x8c,
631 0x63, 0x58, 0x17, 0x84, 0x21, 0xb8, 0xcf, 0x63, 0xd8, 0xff, 0xef, 0xbb, 0xff, 0xff, 0xfd, 0xf7,
632 0xdd, 0xff, 0xbf, 0x7b, 0xff, 0xf6, 0xdf, 0xff, 0xb7, 0xfd, 0xff, 0xef, 0x7d, 0xdf, 0xfb, 0xee,
633 0xff, 0xff, 0xbe, 0xef, 0xfb, 0x7f, 0xef, 0xbe, 0xfb, 0xff, 0x77, 0xff, 0xef, 0x7d, 0xff, 0xfb,
634 0xff, 0xed, 0xff, 0xdf, 0x7d, 0xef, 0xff, 0xf6, 0x7f, 0xdf, 0xfd, 0xb7, 0xff, 0xfb, 0xdf, 0xfd,
635 0xff, 0xb7, 0xff, 0xed, 0x7f, 0xfe, 0xb7, 0xff, 0xfb, 0xdf, 0xff, 0xf7, 0xff, 0xef, 0xff, 0x7d,
636 0xef, 0xff, 0xb7, 0xff, 0xfd, 0xff, 0xdf, 0x77, 0xff, 0x80, 0x36, 0xed, 0x09, 0x12, 0x44, 0x21,
637 0x0c, 0x51, 0x51, 0x86, 0x00, 0x58, 0x46, 0x30, 0x24, 0x85, 0x09, 0x21, 0x85, 0xff, 0x7b, 0xed,
638 0x3d, 0x1d, 0x1d, 0x47, 0x0e, 0x8e, 0x23, 0x00, 0x22, 0x02, 0xc4, 0xb0, 0x26, 0x19, 0x4c, 0x03,
639 0xc0, 0x18, 0x06, 0x60, 0x89, 0xbd, 0x02, 0xfa, 0xff, 0xff, 0xb6, 0xff, 0xfb, 0xbe, 0xf7, 0xf7,
640 0xdf, 0x7f, 0xf7, 0xff, 0x6f, 0xfe, 0xff, 0xdf, 0xfb, 0x6f, 0xfe, 0xdf, 0x7b, 0xff, 0xf7, 0xde,
641 0x23, 0xcf, 0x9f, 0x37, 0x7d, 0xff, 0xff, 0xf7, 0xff, 0xfb, 0x6f, 0xff, 0xdb, 0xff, 0xbf, 0xfe,
642 0xdb, 0xef, 0xff, 0xff, 0xb7, 0xfd, 0x7f, 0xff, 0xef, 0xfb, 0x7f, 0xf7, 0xbd, 0xff, 0xde, 0xdf,
643 0xfb, 0xdf, 0xde, 0xd7, 0xbf, 0xef, 0xfb, 0xf7, 0xfe, 0xfb, 0xfb, 0xfd, 0x7c, 0x7f, 0xfd, 0xfe,
644 0x7d, 0xfd, 0x9e, 0x62, 0x6f, 0xff, 0xff, 0x7f, 0xd2, 0x08, 0xef, 0x31, 0x00, 0x42, 0x48, 0x39,
645 0x86, 0x60, 0x0c, 0xd9, 0x90, 0x20, 0x02, 0x10, 0x44, 0x08, 0x02, 0x10, 0x40, 0x03, 0x11, 0x80,
646 0x20, 0x24, 0x81, 0x08, 0x42, 0x90, 0x04, 0xc1, 0x78, 0x06, 0x24, 0x09, 0x42, 0x40, 0x98, 0x22,
647 0x30, 0xc9, 0x88, 0x32, 0x44, 0x4d, 0x80, 0x3f, 0xff, 0xfe, 0xf7, 0x7f, 0xed, 0xbf, 0xfe, 0xf7,
648 0xbf, 0xfb, 0xdf, 0xfd, 0xef, 0x7f, 0xfb, 0xde, 0xff, 0xef, 0xfb, 0xbf, 0xff, 0x6d, 0xff, 0xf6,
649 0x92, 0x24, 0x65, 0x99, 0xc6, 0x30, 0x8b, 0x67, 0x37, 0x87, 0x6f, 0xff, 0xf5, 0x77, 0x7f, 0xfe,
650 0xff, 0xef, 0xfe, 0x7f, 0xf7, 0xed, 0x0f, 0xfe, 0xfe, 0xfb, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff,
651 0xff, 0xff, 0xff, 0xff, 0x7f, 0xb6, 0xec, 0xfe, 0xff, 0x7e, 0xef, 0xff, 0x7f, 0xf7, 0xff, 0xbf,
652 0xef, 0xff, 0xf7, 0x7f, 0x1f, 0x9f, 0x63, 0x03, 0xdc, 0x90, 0x23, 0x8a, 0x20, 0x05, 0xc9, 0x5a,
653 0x11, 0xa4, 0x8b, 0x30, 0x24, 0x4b, 0x48, 0x26, 0x34, 0xc1, 0x8c, 0x22, 0x98, 0x91, 0x66, 0x08,
654 0x32, 0xc4, 0x99, 0x12, 0x62, 0xcc, 0x00, 0x33, 0x04, 0xc0, 0x38, 0x83, 0x40, 0x96, 0x19, 0x61,
655 0x86, 0x18, 0x60, 0x93, 0x4c, 0x24, 0x93, 0x48, 0x6c, 0x83, 0x3f, 0xff, 0xfb, 0xff, 0xdd, 0xff,
656 0xf7, 0xfd, 0xff, 0xde, 0xf7, 0x7f, 0xfb, 0xbf, 0xee, 0xff, 0xbd, 0xf7, 0x7f, 0xfb, 0xff, 0xde,
657 0xfe, 0xff, 0xde, 0xfe, 0xfe, 0xfe, 0x6f, 0xfe, 0xff, 0xff, 0xff, 0xb7, 0xff, 0xdf, 0x7f, 0xff,
658 0xd7, 0xfd, 0xef, 0xff, 0x7d, 0xff, 0xdf, 0xff, 0xf5, 0x7f, 0xf7, 0xff, 0xef, 0xef, 0xe7, 0x7f,
659 0xfb, 0xfb, 0xfe, 0xfd, 0xff, 0xfb, 0xef, 0xfd, 0xdf, 0x7f, 0xff, 0xfb, 0xdf, 0xff, 0x0b, 0x07,
660 0x35, 0xc9, 0x48, 0x92, 0x93, 0x6c, 0x08, 0x93, 0xc4, 0x30, 0x46, 0x99, 0xa1, 0x26, 0x48, 0x8c,
661 0x33, 0xc4, 0x28, 0x0b, 0xd1, 0x34, 0x01, 0xc3, 0x18, 0x64, 0x86, 0x30, 0x4d, 0x90, 0xa6, 0x29,
662 0x49, 0x44, 0xb4, 0x83, 0x5a, 0x9c, 0x37, 0x56, 0x9e, 0x21, 0xcc, 0xd1, 0xd6, 0xe4, 0xc9, 0xfc,
663 0xec, 0xef, 0xf8, 0xe4, 0xc3, 0x19, 0xa4, 0x26, 0xd0, 0x0d, 0x24, 0xd3, 0x47, 0x1f, 0x7e, 0xff,
664 0xff, 0x6f, 0xff, 0xd9, 0xff, 0xbf, 0xe7, 0xff, 0xf9, 0x7f, 0xff, 0xdf, 0xdf, 0xf5, 0xff, 0xfb,
665
666 },
667 {
668 // leekspin: frame 2
669 0xff, 0xbf, 0xfb, 0xef, 0xbf, 0xfb, 0xef, 0xbf, 0xfb, 0xef, 0xbf, 0xfb, 0x6f, 0xff, 0xff, 0xef,
670 0xbf, 0xfb, 0xdf, 0xf7, 0xbf, 0xfb, 0x7f, 0x7f, 0xdb, 0xff, 0xbf, 0xfb, 0xef, 0xff, 0x7f, 0xdf,
671 0xff, 0xf3, 0xbf, 0xef, 0xfb, 0xbf, 0xef, 0xfb, 0xbf, 0xef, 0xfb, 0xbf, 0xef, 0xfb, 0xbf, 0xef,
672 0xfb, 0xbf, 0xef, 0x7b, 0xdf, 0xf7, 0x2f, 0x60, 0xdf, 0x80, 0x2d, 0x57, 0xd0, 0x93, 0x24, 0xfc,
673 0xc3, 0x1b, 0xf4, 0xf7, 0xff, 0xf0, 0xcf, 0xb0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xf9, 0xc1,
674 0xff, 0xfe, 0xf9, 0xe7, 0xcc, 0x91, 0xf7, 0xfc, 0xe3, 0x99, 0x2e, 0xe2, 0xfc, 0x03, 0xec, 0x7c,
675 0x93, 0x2b, 0x6c, 0x95, 0x53, 0xce, 0x39, 0xc4, 0x33, 0x6b, 0xce, 0x90, 0xbf, 0xef, 0xfb, 0xbf,
676 0xef, 0xfb, 0xbf, 0xef, 0xfb, 0xbf, 0xef, 0xfb, 0xbf, 0xef, 0xfb, 0xbf, 0xef, 0xfb, 0xbf, 0xed,
677 0xff, 0xff, 0xee, 0xbb, 0xff, 0x6e, 0xfb, 0xdf, 0x76, 0xff, 0xdd, 0xf7, 0xbf, 0xed, 0xff, 0xff,
678 0xee, 0xff, 0x75, 0xdf, 0xff, 0xf6, 0xdf, 0xff, 0xb7, 0xff, 0xfb, 0xef, 0xfd, 0xb7, 0xff, 0xdb,
679 0xfe, 0x6f, 0xfb, 0xbe, 0xef, 0xfb, 0xbe, 0xef, 0xfb, 0xbe, 0xef, 0xfb, 0xbe, 0xef, 0x7b, 0xde,
680 0xf7, 0x7d, 0xdf, 0xf7, 0xbd, 0xff, 0x00, 0xf7, 0x9c, 0x21, 0x27, 0xd8, 0x46, 0xff, 0x5f, 0x3f,
681 0xa7, 0x9f, 0xcb, 0xcb, 0xef, 0xcb, 0xdf, 0x9f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
682 0xef, 0x9f, 0xd7, 0xcf, 0xcb, 0xdf, 0xd7, 0xcf, 0x8f, 0x3f, 0x1f, 0x7f, 0xff, 0xff, 0xff, 0xf0,
683 0x07, 0x73, 0xdc, 0x01, 0x6e, 0x99, 0x73, 0x4e, 0x88, 0xf3, 0x1e, 0xc0, 0xff, 0x7f, 0xde, 0xf3,
684 0xbf, 0xee, 0xfb, 0xbf, 0xee, 0xfb, 0xbf, 0xee, 0xfb, 0xbf, 0xee, 0x7b, 0xdf, 0xf6, 0xbf, 0xed,
685 0xff, 0xff, 0x76, 0xdf, 0xfd, 0xb7, 0xff, 0xed, 0xbf, 0xfb, 0x6e, 0xff, 0xbd, 0xef, 0xfe, 0xf7,
686 0xbf, 0xfd, 0xf7, 0xdf, 0x7f, 0xff, 0xb7, 0xfc, 0xef, 0xff, 0xf7, 0xbf, 0xfa, 0xdf, 0xfd, 0xef,
687 0x7b, 0xff, 0xed, 0x7f, 0xde, 0xfb, 0xef, 0xbe, 0xfb, 0xdf, 0xf6, 0x7f, 0xdd, 0xf7, 0xbf, 0xed,
688 0xff, 0xbb, 0xef, 0x7e, 0xdb, 0xff, 0x76, 0xc0, 0x1d, 0x77, 0x00, 0x7f, 0xc0, 0xff, 0xfe, 0xff,
689 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
690 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xff, 0xef, 0x3f, 0xc0,
691 0xbb, 0x37, 0x04, 0xf0, 0xce, 0x39, 0x07, 0x70, 0xdd, 0x86, 0xf2, 0x7f, 0xdf, 0xf7, 0xfd, 0xbf,
692 0xef, 0x79, 0xff, 0xef, 0xfd, 0xdf, 0x7b, 0xef, 0xbf, 0xfd, 0xff, 0xfb, 0xdf, 0xf6, 0xbf, 0xed,
693 0xff, 0xff, 0xef, 0x7d, 0xff, 0xfb, 0xdf, 0xfd, 0xff, 0x6f, 0xfb, 0xbf, 0xfd, 0xef, 0x7e, 0xf7,
694 0xbf, 0xee, 0xfb, 0x7f, 0xdf, 0xfb, 0xbf, 0xfd, 0xef, 0xfe, 0xdf, 0xfb, 0xef, 0xfe, 0xbf, 0xed,
695 0xff, 0xf7, 0xbd, 0xff, 0x6f, 0xfb, 0xfe, 0xdf, 0xf7, 0xfd, 0xbf, 0xfb, 0x6f, 0xfe, 0xf7, 0xff,
696 0xdd, 0x7f, 0xfb, 0xef, 0xfd, 0xdf, 0x7b, 0xff, 0xe4, 0x09, 0xc9, 0xb6, 0x36, 0x4b, 0x47, 0x9f,
697 0x1f, 0x3f, 0x3f, 0x7f, 0x7f, 0xff, 0xfe, 0xfe, 0xff, 0xfd, 0xff, 0xfe, 0xfd, 0xff, 0xfd, 0xff,
698 0xfe, 0xff, 0xfe, 0xff, 0xff, 0xff, 0x7f, 0xff, 0x3f, 0x3f, 0x9f, 0xdf, 0x0d, 0xa3, 0x3a, 0x4c,
699 0xe3, 0x18, 0x17, 0x06, 0x60, 0xd8, 0xcf, 0x33, 0xd8, 0xfe, 0xef, 0x7b, 0xdf, 0xff, 0x7f, 0xfd,
700 0xfd, 0xf7, 0xdf, 0xff, 0xbe, 0xfb, 0xff, 0xb7, 0xdf, 0xfd, 0xff, 0x6e, 0xff, 0xdd, 0xf7, 0xbe,
701 0xff, 0xff, 0xdd, 0xff, 0xef, 0x7b, 0xfe, 0xbf, 0xef, 0x7b, 0xff, 0xbd, 0x37, 0xff, 0xfb, 0x7f,
702 0xf7, 0xfd, 0xef, 0xff, 0xbb, 0xff, 0xf7, 0xfe, 0xdb, 0xff, 0xee, 0xff, 0xfb, 0xbe, 0xff, 0xef,
703 0xfb, 0x7e, 0xdf, 0xf7, 0xff, 0xbd, 0xff, 0xee, 0xff, 0xdb, 0xff, 0xf7, 0x7f, 0xff, 0xf7, 0xbe,
704 0xff, 0x77, 0xff, 0xbb, 0xfe, 0xff, 0xff, 0xb7, 0xff, 0x00, 0xb6, 0xed, 0x09, 0x02, 0x64, 0x81,
705 0x0c, 0x31, 0xc5, 0x48, 0x02, 0x24, 0x98, 0x62, 0x24, 0x05, 0x89, 0x21, 0x05, 0xff, 0xfb, 0x6d,
706 0x3d, 0x9d, 0x17, 0x1c, 0x4d, 0x07, 0x26, 0x80, 0x11, 0x41, 0x84, 0xb0, 0x66, 0x19, 0x0b, 0x82,
707 0x10, 0x64, 0x09, 0x90, 0xc6, 0x3b, 0x08, 0xf6, 0xff, 0xbf, 0xfb, 0xef, 0xff, 0xdd, 0xff, 0xbb,
708 0xff, 0x77, 0xf7, 0xbf, 0xfb, 0xfe, 0xb7, 0xff, 0xdf, 0xfd, 0xef, 0x7f, 0xdd, 0xf7, 0xff, 0x6d,
709 0xff, 0xff, 0x7b, 0xfe, 0xdf, 0xf7, 0xf7, 0x7d, 0xe9, 0xbe, 0xfe, 0xff, 0xff, 0xfd, 0xff, 0xf7,
710 0xfd, 0xcf, 0xff, 0x7f, 0xef, 0xbe, 0xfb, 0xdf, 0xbd, 0xbf, 0xbb, 0xbe, 0xff, 0xbf, 0xef, 0x7d,
711 0x77, 0xff, 0xff, 0xdb, 0xfe, 0xff, 0xef, 0x7b, 0xfe, 0xff, 0xbf, 0xfd, 0xef, 0xff, 0xfb, 0xef,
712 0xff, 0x7b, 0xff, 0xff, 0xfe, 0xbf, 0xef, 0xff, 0xd8, 0x03, 0xbd, 0x64, 0x00, 0x89, 0xa8, 0x22,
713 0x1c, 0xe1, 0x08, 0x56, 0x90, 0x20, 0x04, 0x90, 0x02, 0x20, 0x04, 0x10, 0x41, 0x03, 0x88, 0x20,
714 0x04, 0x40, 0x08, 0x81, 0x30, 0x02, 0x10, 0xc4, 0x30, 0x8e, 0x21, 0x08, 0x22, 0xc1, 0x18, 0xc0,
715 0x31, 0x0c, 0x60, 0x98, 0xc2, 0x23, 0x0c, 0x5f, 0xff, 0xfb, 0xef, 0xfe, 0x77, 0xfd, 0xff, 0xdb,
716 0xff, 0x6f, 0xfb, 0xbf, 0xfd, 0xef, 0xff, 0xdb, 0xfe, 0x7f, 0xf7, 0xdf, 0xfd, 0xef, 0xfb, 0xbf,
717 0xff, 0xff, 0xff, 0xf7, 0xff, 0xdd, 0xff, 0xef, 0xff, 0x7b, 0xff, 0xde, 0xff, 0xff, 0x7b, 0xff,
718 0xf7, 0xff, 0xef, 0xef, 0xde, 0x73, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
719 0xff, 0xfe, 0xfe, 0xff, 0x89, 0xbf, 0xff, 0xbf, 0xf7, 0x7f, 0x7d, 0xff, 0xef, 0x7e, 0xff, 0xfb,
720 0xdf, 0xff, 0xef, 0x7d, 0x1f, 0x97, 0xa7, 0x21, 0x1c, 0xd0, 0x23, 0x0a, 0x40, 0x14, 0xa4, 0x93,
721 0x99, 0x24, 0x62, 0x8a, 0x19, 0x51, 0x46, 0xb0, 0x8c, 0x43, 0x18, 0xc4, 0x30, 0x26, 0xc4, 0x18,
722 0xc9, 0x26, 0x98, 0x41, 0x4c, 0xb3, 0x80, 0x0d, 0x02, 0x70, 0x88, 0x23, 0xc4, 0x10, 0x96, 0x64,
723 0x09, 0x93, 0x24, 0x68, 0x44, 0x95, 0x89, 0x6a, 0x10, 0xc7, 0x3f, 0xfb, 0xff, 0xff, 0x6e, 0xfb,
724 0xbf, 0xff, 0xfb, 0xef, 0xff, 0x76, 0xff, 0x9f, 0xfd, 0xdf, 0xff, 0xbb, 0xee, 0xff, 0x3d, 0xff,
725 0xff, 0xff, 0xde, 0xfb, 0xff, 0xff, 0xef, 0xbe, 0xff, 0xff, 0xff, 0x77, 0xfd, 0xff, 0xdf, 0xff,
726 0xfb, 0x7e, 0xdf, 0xf7, 0xff, 0xff, 0xfe, 0xdf, 0xfd, 0xfb, 0xfb, 0xf7, 0xdf, 0xd9, 0xbf, 0xbf,
727 0xd7, 0xf7, 0xfb, 0xfc, 0xff, 0xfb, 0xfb, 0xef, 0xb7, 0x7f, 0xff, 0xf7, 0xff, 0xee, 0x0f, 0x0e,
728 0xae, 0x6f, 0x8c, 0x90, 0x53, 0x8c, 0x28, 0x23, 0x99, 0x48, 0x66, 0x91, 0x19, 0x66, 0x48, 0x92,
729 0x94, 0x65, 0x24, 0x89, 0x69, 0x46, 0x12, 0xc4, 0x88, 0x32, 0x93, 0x4c, 0x48, 0x33, 0x84, 0x32,
730 0xca, 0x0c, 0xb1, 0x22, 0xce, 0x9c, 0x33, 0x96, 0xdf, 0x18, 0xa1, 0xe6, 0xd8, 0xc6, 0xf1, 0xf8,
731 0xee, 0xfd, 0xf9, 0xf2, 0xc2, 0x0c, 0x66, 0x90, 0x93, 0x4c, 0x48, 0x33, 0x87, 0x9f, 0x7f, 0xff,
732 0xff, 0xff, 0xd7, 0x7d, 0xfd, 0xf7, 0xdf, 0xfb, 0xbf, 0xfe, 0x7b, 0xdf, 0xff, 0xf7, 0xf7, 0xfd,
733 },
734 {
735 // leekspin: frame 3
736 0xff, 0xef, 0xbf, 0xfb, 0xef, 0xbf, 0xfb, 0xef, 0xbf, 0xfb, 0x6f, 0xff, 0xdb, 0x7f, 0xff, 0xff,
737 0xbb, 0xef, 0x7f, 0xdb, 0xff, 0xb7, 0xfd, 0x5d, 0x02, 0xb8, 0xc6, 0x12, 0x30, 0xc4, 0x32, 0x4a,
738 0x0c, 0xf1, 0xfd, 0xbf, 0xfb, 0x6d, 0xfb, 0xbb, 0x77, 0x77, 0xbb, 0xef, 0x6f, 0xfb, 0xcf, 0xdf,
739 0xbb, 0x6f, 0x7f, 0xdb, 0xff, 0xf7, 0x0f, 0xe0, 0x3f, 0xc0, 0x0d, 0xb7, 0xe0, 0x0d, 0xa9, 0xf8,
740 0xc7, 0x1d, 0xf0, 0xff, 0xff, 0xf0, 0xc7, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xf1, 0xc6,
741 0xff, 0xf7, 0xf8, 0xf3, 0xcf, 0x90, 0xf7, 0xfc, 0xe3, 0x99, 0x2e, 0xe2, 0xfc, 0x03, 0xfc, 0x78,
742 0x13, 0x27, 0xec, 0x19, 0x53, 0xe6, 0x2d, 0xd8, 0x83, 0x3b, 0xee, 0x00, 0x7f, 0xff, 0xbb, 0xef,
743 0xff, 0xbb, 0xef, 0xff, 0xbb, 0xef, 0xff, 0xbb, 0xef, 0xff, 0xbb, 0xef, 0x7f, 0xdb, 0xff, 0xb7,
744 0xff, 0xfb, 0x6f, 0xfe, 0xdb, 0x7f, 0xf6, 0xdf, 0xfd, 0xb7, 0xff, 0x6d, 0xff, 0xdb, 0xff, 0xf7,
745 0xff, 0xfd, 0x9f, 0xfb, 0xf7, 0xff, 0xbb, 0x00, 0x66, 0x99, 0x4c, 0x63, 0x99, 0x8c, 0x63, 0x7c,
746 0x1f, 0xce, 0x26, 0x35, 0xc9, 0x0b, 0x30, 0x4c, 0x83, 0xb0, 0xfc, 0x6f, 0xef, 0xdb, 0xbf, 0x6e,
747 0x7b, 0xdf, 0xf7, 0xbe, 0xee, 0xfd, 0x00, 0xd9, 0x7b, 0x02, 0x86, 0x7c, 0x09, 0xff, 0x5f, 0x3f,
748 0xa7, 0x9f, 0xcb, 0xcb, 0xef, 0xcb, 0xdb, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
749 0xef, 0x9f, 0xd7, 0xcf, 0xcb, 0xdf, 0xd7, 0xcf, 0x8f, 0x3f, 0x1f, 0x7f, 0xff, 0xff, 0xfb, 0x72,
750 0x87, 0xb9, 0x6c, 0x03, 0x3b, 0xcc, 0xd3, 0x36, 0x88, 0xdb, 0x75, 0x84, 0xff, 0xfb, 0xef, 0xbe,
751 0xfb, 0xef, 0xfe, 0x7b, 0xef, 0xfe, 0xdb, 0xff, 0xb6, 0xff, 0xed, 0xbf, 0xfb, 0x6f, 0xfe, 0xdb,
752 0xff, 0xff, 0x77, 0xfd, 0xef, 0x7b, 0xff, 0xb6, 0xff, 0xed, 0x7f, 0xfb, 0xdf, 0xfe, 0xb7, 0xff,
753 0xee, 0xfe, 0xb7, 0xff, 0x7f, 0xef, 0xf9, 0x02, 0x66, 0x99, 0x92, 0x66, 0x49, 0x98, 0xa6, 0xb1,
754 0xcd, 0xe4, 0xf3, 0xf9, 0xbc, 0xef, 0xfd, 0xde, 0x77, 0xff, 0xed, 0xbb, 0xfb, 0xf6, 0x6f, 0x1f,
755 0x37, 0x4e, 0xce, 0x31, 0x93, 0x63, 0x4c, 0x84, 0x32, 0x59, 0x45, 0x22, 0xaa, 0xc8, 0xfe, 0xff,
756 0xf7, 0xf7, 0xdf, 0x7f, 0x3f, 0x3f, 0x7f, 0x7f, 0x3f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f,
757 0x7f, 0x3f, 0x7f, 0x7f, 0x3f, 0x3f, 0x77, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xff, 0xef, 0x3f, 0xc4,
758 0xdd, 0x33, 0x82, 0xc8, 0x3f, 0x32, 0x82, 0xec, 0x33, 0x86, 0xf8, 0x7f, 0xf7, 0xdd, 0xff, 0xbb,
759 0xee, 0x7f, 0xdd, 0xf7, 0xff, 0xee, 0xbb, 0xff, 0xf7, 0xbf, 0xfe, 0xff, 0xed, 0xbf, 0xfb, 0x6e,
760 0xff, 0xff, 0xbf, 0xed, 0xff, 0xff, 0xb7, 0xff, 0xfd, 0xdf, 0xf7, 0xff, 0x6e, 0xfb, 0xff, 0xb7,
761 0xfe, 0xef, 0x7d, 0xf7, 0xbf, 0xfd, 0xdf, 0xf0, 0x06, 0x99, 0xe4, 0x26, 0xff, 0xfd, 0xdf, 0xff,
762 0xf6, 0xbf, 0xff, 0xee, 0xfb, 0x7f, 0xdd, 0xff, 0x37, 0x9f, 0xce, 0x27, 0x31, 0xcc, 0x62, 0x9b,
763 0x89, 0x26, 0xb2, 0x98, 0x71, 0x46, 0x9e, 0x1d, 0x70, 0x86, 0x89, 0x33, 0x94, 0x87, 0x2f, 0x4f,
764 0x1f, 0xbf, 0x3f, 0x7f, 0x7e, 0xf9, 0xe4, 0x60, 0xdb, 0xd8, 0xc6, 0xf8, 0xc9, 0xda, 0xf2, 0xcc,
765 0xc8, 0xf3, 0xf4, 0xe0, 0xfb, 0xf8, 0xfe, 0x7f, 0x7f, 0x3f, 0x9f, 0x5f, 0x0f, 0xc9, 0x72, 0x0e,
766 0xe1, 0x3c, 0x06, 0x09, 0x61, 0xb4, 0xd7, 0x4c, 0xf1, 0xbf, 0xff, 0xfd, 0xe7, 0xbf, 0xff, 0x7d,
767 0xf7, 0xff, 0xed, 0xff, 0xfe, 0xcf, 0xff, 0xbe, 0xf7, 0xdd, 0xff, 0xef, 0xfe, 0x7b, 0xdf, 0xf7,
768 0xff, 0xff, 0x7b, 0xdf, 0xfe, 0xfb, 0xdf, 0xfd, 0xef, 0xfe, 0xf7, 0xdf, 0xfb, 0xff, 0x76, 0xff,
769 0xef, 0xfd, 0xff, 0xf7, 0xdf, 0x7d, 0xff, 0xff, 0xb0, 0xbf, 0xff, 0xff, 0xf6, 0x9f, 0xff, 0xfb,
770 0xfe, 0xdf, 0xf7, 0xfd, 0x9f, 0xef, 0xf1, 0xf4, 0x66, 0xc9, 0xfc, 0xf3, 0xf9, 0xfc, 0xb6, 0xf8,
771 0xf1, 0xf6, 0xdc, 0xf1, 0xf2, 0xee, 0xf1, 0xf4, 0x64, 0x01, 0xb4, 0x26, 0x49, 0x10, 0x24, 0x81,
772 0x12, 0x94, 0x65, 0x08, 0x02, 0x64, 0x18, 0x42, 0x24, 0x19, 0x01, 0x85, 0x21, 0xbf, 0xff, 0x6d,
773 0x5d, 0x37, 0x1d, 0x1d, 0x86, 0x26, 0x07, 0x10, 0x40, 0x09, 0x21, 0xd2, 0x4c, 0x19, 0x42, 0x13,
774 0x40, 0x4c, 0x11, 0xc0, 0x0e, 0xbb, 0x80, 0xfe, 0xff, 0x6f, 0xfb, 0xbe, 0xf7, 0xdf, 0xfb, 0xff,
775 0xbd, 0xef, 0xfb, 0xff, 0xbd, 0xef, 0xfb, 0xff, 0xdf, 0xfb, 0xef, 0x7e, 0xf7, 0xbf, 0xff, 0x6d,
776 0xff, 0xff, 0xef, 0xfb, 0xbf, 0xfe, 0xef, 0x7b, 0xfe, 0xdf, 0xff, 0xf6, 0xdf, 0x7f, 0xf7, 0xdf,
777 0xfe, 0xfb, 0xdf, 0x77, 0xff, 0xef, 0xfd, 0xff, 0x6f, 0xfc, 0xa7, 0xbf, 0xff, 0xff, 0xd9, 0xdf,
778 0xbe, 0xbf, 0x77, 0x7e, 0xff, 0xdf, 0xfb, 0xfc, 0x7f, 0xdf, 0xff, 0xff, 0xbe, 0xfb, 0xff, 0xfd,
779 0xdf, 0xfe, 0xff, 0x7b, 0xfe, 0xbf, 0xff, 0xef, 0xd9, 0x11, 0xef, 0x28, 0x00, 0x41, 0x4c, 0x31,
780 0xc4, 0x0c, 0x68, 0x93, 0x10, 0x64, 0x01, 0x10, 0x04, 0x41, 0x10, 0x04, 0x00, 0x43, 0x11, 0x00,
781 0x88, 0x22, 0x00, 0x48, 0x82, 0x90, 0x11, 0xc4, 0x30, 0x0d, 0x43, 0x10, 0x24, 0xc1, 0x10, 0xb4,
782 0x81, 0x68, 0x24, 0x90, 0x4a, 0x2b, 0x80, 0x3f, 0xff, 0xdb, 0xff, 0xf7, 0xfd, 0xbf, 0xee, 0xff,
783 0x7b, 0xef, 0xbe, 0xff, 0xed, 0x7f, 0xf6, 0xbf, 0xfb, 0xfe, 0x6f, 0xff, 0xdb, 0xff, 0xfd, 0x6f,
784 0xff, 0xff, 0xfb, 0xfe, 0xef, 0xff, 0xbd, 0xff, 0xf7, 0xff, 0xbd, 0xff, 0xef, 0xff, 0xdf, 0xfe,
785 0xff, 0xbd, 0xff, 0xdf, 0xff, 0xff, 0xf7, 0x9c, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
786 0xff, 0xf9, 0xdf, 0x5f, 0xe6, 0xfd, 0xff, 0xff, 0xf7, 0xbf, 0xfb, 0xff, 0xfd, 0xdf, 0xfe, 0xff,
787 0xf7, 0xbd, 0xff, 0x5f, 0x37, 0x9f, 0x47, 0x61, 0x9c, 0x10, 0x63, 0x06, 0xc0, 0x09, 0x64, 0x93,
788 0x18, 0x66, 0x82, 0x59, 0x11, 0xa6, 0xa4, 0x19, 0x42, 0x32, 0x8c, 0x44, 0x20, 0x98, 0x47, 0x68,
789 0x08, 0xd2, 0x93, 0x24, 0x8c, 0x70, 0x02, 0x0d, 0xc0, 0x32, 0x08, 0xe1, 0x82, 0x0a, 0x3a, 0xc0,
790 0x16, 0x44, 0x61, 0x19, 0x46, 0xc8, 0x31, 0x06, 0xd8, 0x43, 0x3f, 0xfe, 0xff, 0xf7, 0xbd, 0xff,
791 0xdb, 0xff, 0xf7, 0xff, 0xfd, 0xbf, 0xef, 0xef, 0xff, 0x6d, 0xff, 0xf7, 0xfe, 0xfb, 0xaf, 0xff,
792 0xff, 0xff, 0xbe, 0xef, 0xfd, 0xff, 0xff, 0xdf, 0xfd, 0xff, 0x7f, 0xfb, 0xdf, 0xfe, 0xef, 0xfd,
793 0x7f, 0xff, 0xdb, 0xff, 0xfd, 0xdf, 0xfe, 0x7e, 0xfb, 0xef, 0xef, 0xdf, 0x9f, 0xff, 0xdf, 0xdf,
794 0x6f, 0xef, 0xf3, 0xfc, 0xfd, 0xff, 0xf7, 0xef, 0xbf, 0x7d, 0xff, 0xfe, 0xef, 0xdf, 0x1b, 0x26,
795 0x27, 0xc9, 0x98, 0x12, 0x63, 0x2c, 0x82, 0x5a, 0x41, 0x94, 0x93, 0x2c, 0x20, 0xd3, 0x8c, 0x24,
796 0x53, 0x48, 0x25, 0xb4, 0x83, 0x28, 0x24, 0xc5, 0x11, 0x52, 0x8c, 0x20, 0x9b, 0xa0, 0x26, 0x59,
797 0x82, 0x2a, 0x68, 0x86, 0x99, 0x5c, 0x37, 0x96, 0x5e, 0xb1, 0x84, 0xcc, 0xf1, 0xc6, 0xc9, 0xf8,
798 0xfe, 0xed, 0xf8, 0xeb, 0xc2, 0x14, 0x51, 0x4d, 0xa4, 0x92, 0x18, 0x63, 0x47, 0x9f, 0x3f, 0xff,
799 0xff, 0xff, 0xf7, 0xdc, 0xff, 0xbb, 0xff, 0xf6, 0xdf, 0x7f, 0xff, 0xde, 0xf7, 0xff, 0xfb, 0xfe
800 }
801 };
802
803 if(timer_elapsed(anim_timer) > ANIM_FRAME_DURATION) {
804 anim_timer = timer_read();
805 current_anim_frame = (current_anim_frame + 1) % ANIM_TOTAL_FRAMES;
806 oled_write_raw_P(frame[abs((ANIM_NUM_FRAMES-1)-current_anim_frame)], 1024);
807 }
808}
809
810void oled_task_user(void) {
811 if (is_keyboard_master()) {
812 render_status(); // Renders the current keyboard state (layer, lock, caps, scroll, etc)
813 }
814 else {
815 render_logo();
816 }
817}
818#endif
diff --git a/keyboards/arch_36/keymaps/obosob/readme.md b/keyboards/arch_36/keymaps/obosob/readme.md
new file mode 100644
index 000000000..e7dc6952d
--- /dev/null
+++ b/keyboards/arch_36/keymaps/obosob/readme.md
@@ -0,0 +1 @@
# Obosob's keymap for Arch-36
diff --git a/keyboards/arch_36/keymaps/obosob/rules.mk b/keyboards/arch_36/keymaps/obosob/rules.mk
new file mode 100644
index 000000000..2b16ebb7b
--- /dev/null
+++ b/keyboards/arch_36/keymaps/obosob/rules.mk
@@ -0,0 +1,3 @@
1EXTRAKEY_ENABLE = no # Audio control and System control
2UNICODE_ENABLE = no # Unicode
3LTO_ENABLE = yes
diff --git a/keyboards/arch_36/readme.md b/keyboards/arch_36/readme.md
new file mode 100644
index 000000000..d0e16434e
--- /dev/null
+++ b/keyboards/arch_36/readme.md
@@ -0,0 +1,16 @@
1# Arch-36
2
3An ergonomic 30% split keyboard
4
5* Keyboard Maintainer: [obosob](https://github.com/obosob)
6* Hardware Supported: Pro Micro 5V/16MHz and compatible.
7
8Make example for this keyboard (after setting up your build environment):
9
10 make arch_36:default
11
12Example of flashing this keyboard:
13
14 make arch_36:default:flash
15
16See 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/arch_36/rules.mk b/keyboards/arch_36/rules.mk
new file mode 100644
index 000000000..588ef01e3
--- /dev/null
+++ b/keyboards/arch_36/rules.mk
@@ -0,0 +1,26 @@
1# MCU name
2MCU = atmega32u4
3
4# Bootloader selection
5BOOTLOADER = caterina
6
7# Build Options
8# change yes to no to disable
9#
10BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration
11MOUSEKEY_ENABLE = no # 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 = yes # Enable keyboard RGB underglow
21OLED_DRIVER_ENABLE = yes # Enables the use of OLED displays
22BLUETOOTH_ENABLE = no # Enable Bluetooth
23AUDIO_ENABLE = no # Audio output
24SPLIT_KEYBOARD = yes # Split common
25
26LAYOUTS = split_3x5_3