aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristoph Rehmann <1273098+crehmann@users.noreply.github.com>2022-01-10 11:33:48 +0100
committerGitHub <noreply@github.com>2022-01-10 02:33:48 -0800
commit2e19d0d7d14fef69d583886c244d3c67b3c0cc3d (patch)
treee21ec0e671f1264e5a2c30ce650894cadc8374d8
parentd7eb09949d426af891dd9cf85ad789285422490e (diff)
downloadqmk_firmware-2e19d0d7d14fef69d583886c244d3c67b3c0cc3d.tar.gz
qmk_firmware-2e19d0d7d14fef69d583886c244d3c67b3c0cc3d.zip
[Keyboard] Add Buzzard support (#15493)
* add buzzerd (untested, WIP) * configured linear actuator and fixed keymap * configuration tweaks and added custom keymap * add custom tapping term for home row mod * added readme * remove ionide folder * added scroll function to trackpoint * keymap reworked * using one shot shift and removed dynamic macros * reworked default keymap * adapted to latest qmk changes * remove caps word from default keymap * use provided coding guidelines * use get_highest_layer in favour of biton32 * fixed formatting * remove unnecessary define statement
-rw-r--r--keyboards/buzzard/buzzard.c3
-rw-r--r--keyboards/buzzard/buzzard.h9
-rw-r--r--keyboards/buzzard/config.h6
-rw-r--r--keyboards/buzzard/info.json10
-rw-r--r--keyboards/buzzard/keymaps/crehmann/config.h38
-rw-r--r--keyboards/buzzard/keymaps/crehmann/features/haptic_utils.c42
-rw-r--r--keyboards/buzzard/keymaps/crehmann/features/haptic_utils.h10
-rw-r--r--keyboards/buzzard/keymaps/crehmann/keymap.c256
-rw-r--r--keyboards/buzzard/keymaps/crehmann/rules.mk9
-rw-r--r--keyboards/buzzard/keymaps/default/config.h39
-rw-r--r--keyboards/buzzard/keymaps/default/keymap.c274
-rw-r--r--keyboards/buzzard/keymaps/default/rules.mk7
-rw-r--r--keyboards/buzzard/readme.md29
-rw-r--r--keyboards/buzzard/rev1/config.h62
-rw-r--r--keyboards/buzzard/rev1/rev1.c128
-rw-r--r--keyboards/buzzard/rev1/rev1.h52
-rw-r--r--keyboards/buzzard/rev1/rules.mk3
-rw-r--r--keyboards/buzzard/rules.mk22
18 files changed, 999 insertions, 0 deletions
diff --git a/keyboards/buzzard/buzzard.c b/keyboards/buzzard/buzzard.c
new file mode 100644
index 000000000..00ad12a23
--- /dev/null
+++ b/keyboards/buzzard/buzzard.c
@@ -0,0 +1,3 @@
1// Copyright 2021 Christoph Rehmann (crehmann)
2// SPDX-License-Identifier: GPL-2.0-or-later
3#include "buzzard.h"
diff --git a/keyboards/buzzard/buzzard.h b/keyboards/buzzard/buzzard.h
new file mode 100644
index 000000000..f094e4af3
--- /dev/null
+++ b/keyboards/buzzard/buzzard.h
@@ -0,0 +1,9 @@
1// Copyright 2021 Christoph Rehmann (crehmann)
2// SPDX-License-Identifier: GPL-2.0-or-later
3#pragma once
4
5#include "quantum.h"
6
7#if defined(KEYBOARD_buzzard_rev1)
8# include "rev1.h"
9#endif \ No newline at end of file
diff --git a/keyboards/buzzard/config.h b/keyboards/buzzard/config.h
new file mode 100644
index 000000000..7dbbedfaf
--- /dev/null
+++ b/keyboards/buzzard/config.h
@@ -0,0 +1,6 @@
1// Copyright 2021 Christoph Rehmann (crehmann)
2// SPDX-License-Identifier: GPL-2.0-or-later
3
4#pragma once
5
6#include "config_common.h" \ No newline at end of file
diff --git a/keyboards/buzzard/info.json b/keyboards/buzzard/info.json
new file mode 100644
index 000000000..a958ffdc9
--- /dev/null
+++ b/keyboards/buzzard/info.json
@@ -0,0 +1,10 @@
1{
2 "keyboard_name": "Buzzard",
3 "url": "https://github.com/crehmann/buzzard",
4 "maintainer": "crehmann",
5 "layouts": {
6 "LAYOUT": {
7 "layout": [{"x":1, "y":0}, {"x":2, "y":0}, {"x":3, "y":0}, {"x":4, "y":0}, {"x":5, "y":0}, {"x":11, "y":0}, {"x":12, "y":0}, {"x":13, "y":0}, {"x":14, "y":0}, {"x":15, "y":0}, {"x":0, "y":1}, {"x":1, "y":1}, {"x":2, "y":1}, {"x":3, "y":1}, {"x":4, "y":1}, {"x":5, "y":1}, {"x":11, "y":1}, {"x":12, "y":1}, {"x":13, "y":1}, {"x":14, "y":1}, {"x":15, "y":1}, {"x":16, "y":1}, {"x":0, "y":2}, {"x":1, "y":2}, {"x":2, "y":2}, {"x":3, "y":2}, {"x":4, "y":2}, {"x":5, "y":2}, {"x":11, "y":2}, {"x":12, "y":2}, {"x":13, "y":2}, {"x":14, "y":2}, {"x":15, "y":2}, {"x":16, "y":2}, {"x":5, "y":3}, {"x":6, "y":3}, {"x":7, "y":3}, {"x":9, "y":3}, {"x":10, "y":3}, {"x":11, "y":3}]
8 }
9 }
10} \ No newline at end of file
diff --git a/keyboards/buzzard/keymaps/crehmann/config.h b/keyboards/buzzard/keymaps/crehmann/config.h
new file mode 100644
index 000000000..d5d9a9bb8
--- /dev/null
+++ b/keyboards/buzzard/keymaps/crehmann/config.h
@@ -0,0 +1,38 @@
1// Copyright 2021 Christoph Rehmann (crehmann)
2// SPDX-License-Identifier: GPL-2.0-or-later
3
4#pragma once
5
6// Configure the global tapping term (default: 200ms)
7#define TAPPING_TERM 200
8
9// Prevent normal rollover on alphas from accidentally triggering mods.
10#define IGNORE_MOD_TAP_INTERRUPT
11
12// Enable rapid switch from tap to hold, disables double tap hold auto-repeat.
13#define TAPPING_FORCE_HOLD
14
15// Apply the modifier on keys that are tapped during a short hold of a modtap
16#define PERMISSIVE_HOLD
17
18// Using the right side as master
19#define MASTER_RIGHT
20
21#ifdef HAPTIC_ENABLE
22// this configuration has no effect because the haptic exclusion is implemented with
23// __attribute__((weak)) bool get_haptic_enabled_key(uint16_t keycode, keyrecord_t *record)
24// in the default keymap and reacts only to mouse clicks.
25//#define NO_HAPTIC_MOD
26#define NO_HAPTIC_FN
27#define NO_HAPTIC_ALPHA
28#define NO_HAPTIC_PUNCTUATION
29#define NO_HAPTIC_NAV
30#define NO_HAPTIC_NUMERIC
31#define DRV_GREETING alert_750ms
32#define DRV_MODE_DEFAULT sharp_tick1
33#endif
34
35#ifdef PS2_MOUSE_ENABLE
36#define PS2_MOUSE_SCROLL_BTN_MASK (1<<PS2_MOUSE_BTN_RIGHT)
37#define PS2_MOUSE_SCROLL_BTN_SEND 500
38#endif \ No newline at end of file
diff --git a/keyboards/buzzard/keymaps/crehmann/features/haptic_utils.c b/keyboards/buzzard/keymaps/crehmann/features/haptic_utils.c
new file mode 100644
index 000000000..37fa2902c
--- /dev/null
+++ b/keyboards/buzzard/keymaps/crehmann/features/haptic_utils.c
@@ -0,0 +1,42 @@
1// Copyright 2021 Christoph Rehmann (crehmann)
2// SPDX-License-Identifier: GPL-2.0-or-later
3
4#include "haptic_utils.h"
5
6#ifdef HAPTIC_ENABLE
7#include "drivers/haptic/DRV2605L.h"
8#endif
9
10#ifdef HAPTIC_ENABLE
11bool get_haptic_enabled_key(uint16_t keycode, keyrecord_t *record) {
12 switch (keycode) {
13 case KC_BTN1 ... KC_BTN5:
14 return true;
15 break;
16 }
17
18 return false;
19}
20#endif
21
22void process_layer_pulse(layer_state_t state) {
23#ifdef HAPTIC_ENABLE
24 switch (get_highest_layer(state)) {
25 case 1:
26 DRV_pulse(soft_bump);
27 break;
28 case 2:
29 DRV_pulse(sh_dblsharp_tick);
30 break;
31 case 3:
32 DRV_pulse(lg_dblclick_str);
33 break;
34 case 4:
35 DRV_pulse(soft_bump);
36 break;
37 case 5:
38 DRV_pulse(pulsing_sharp);
39 break;
40 }
41#endif
42}
diff --git a/keyboards/buzzard/keymaps/crehmann/features/haptic_utils.h b/keyboards/buzzard/keymaps/crehmann/features/haptic_utils.h
new file mode 100644
index 000000000..ccfbb7e14
--- /dev/null
+++ b/keyboards/buzzard/keymaps/crehmann/features/haptic_utils.h
@@ -0,0 +1,10 @@
1// Copyright 2021 Christoph Rehmann (crehmann)
2// SPDX-License-Identifier: GPL-2.0-or-later
3
4#pragma once
5
6#include QMK_KEYBOARD_H
7
8bool get_haptic_enabled_key(uint16_t keycode, keyrecord_t *record);
9
10void process_layer_pulse(layer_state_t state); \ No newline at end of file
diff --git a/keyboards/buzzard/keymaps/crehmann/keymap.c b/keyboards/buzzard/keymaps/crehmann/keymap.c
new file mode 100644
index 000000000..842494c60
--- /dev/null
+++ b/keyboards/buzzard/keymaps/crehmann/keymap.c
@@ -0,0 +1,256 @@
1// Copyright 2021 Christoph Rehmann (crehmann)
2// SPDX-License-Identifier: GPL-2.0-or-later
3
4#include QMK_KEYBOARD_H
5#include "keymap_german_ch.h"
6#include "features/haptic_utils.h"
7
8#ifdef PS2_MOUSE_ENABLE
9 #include "ps2_mouse.h"
10#endif
11
12enum layers {
13 _BASE = 0,
14 _NAVR,
15 _SYMB,
16 _NUMR,
17 _FUNL,
18 _MOAJ
19};
20
21
22// Aliases for readability
23#define BASE DF(_BASE)
24#define NAVR MO(_NAVR)
25#define SYMB MO(_SYMB)
26#define NUMR MO(_NUMR)
27#define FUNL MO(_FUNL)
28#define MOAD MO(_MOAJ)
29
30// Left-hand home row mods
31#define RALT_X RALT_T(KC_X)
32#define GUI_A LGUI_T(KC_A)
33#define ALT_S LALT_T(KC_S)
34#define CTL_D LCTL_T(KC_D)
35#define SFT_F LSFT_T(KC_F)
36
37// Right-hand home row mods
38#define SFT_J RSFT_T(KC_J)
39#define CTL_K RCTL_T(KC_K)
40#define ALT_L LALT_T(KC_L)
41#define GUI_SCL RGUI_T(KC_SCLN)
42#define RALT_DT RALT_T(KC_DOT)
43
44// Left-hand outer column
45#define CTL_ESC MT(MOD_LCTL, KC_ESC)
46
47// Thumbcluster
48#define UC_TL1 CTL_ESC
49#define UC_TL2 LT(NAVR, KC_SPC)
50#define UC_TL3 LT(NUMR, KC_TAB)
51
52#define UC_TR3 LT(FUNL, KC_BSPC)
53#define UC_TR2 LT(SYMB, KC_ENT)
54#define UC_TR1 KC_DEL
55
56// Shortcuts
57#define UC_COPY LCTL(KC_C)
58#define UC_PSTE LCTL(KC_V)
59#define UC_CUT LCTL(KC_X)
60#define UC_MUTE SGUI(KC_M)
61#define UC_OSFT OSM(MOD_LSFT)
62
63// clang-format off
64const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
65
66// /*
67// * Base Layer
68// *
69// * ,----------------------------------. ,----------------------------------.
70// * | Q | W | E | R | T | | Z | U | I | O | P |
71// * | | | | | | | | | | | |
72// * ,------+------+------+------+------+------| |------+------+------+------+------+------.
73// * | OSM | A | S | D | F | G | | H | J | K | L | ; : | Bksp |
74// * | Shift| GUI | LALT | LCTL | LSFT | | | | LSFT | LCTL | LALT | GUI | |
75// * |------+------+------+------+------+------| |------+------+------+------+------+------|
76// * | ESC | Y | X | C | F | B | | N | M | , < | . > | / ? | Mute |
77// * | CTL | | RALT | | | | | | | | RALT | | Mic |
78// * `----------------------------------+------+-------------. ,-------------+------+----------------------------------'
79// * | ESC | Space| TAB | | Bksp| Enter| Del |
80// * | CTL | NAVR | NUMR | | FUNL| SYML | |
81// * `--------------------' `--------------------'
82// */
83 [_BASE] = LAYOUT(
84 KC_Q , KC_W , KC_E , KC_R , KC_T , CH_Z , KC_U , KC_I , KC_O , KC_P ,
85 UC_OSFT, GUI_A , ALT_S , CTL_D , SFT_F , KC_G , KC_H , SFT_J , CTL_K , ALT_L , GUI_SCL, KC_BSPC,
86 CTL_ESC, CH_Y , RALT_X , KC_C , KC_V , KC_B , KC_N , KC_M , KC_COMM, RALT_DT, KC_SLSH, UC_MUTE,
87 UC_TL1 , UC_TL2 , UC_TL3 , UC_TR3 , UC_TR2 , UC_TR1
88 ),
89
90// /*
91// * Symbol Layer
92// *
93// * ,----------------------------------. ,----------------------------------.
94// * | ` | @ | { | } | $ | | ¨ | ü | / | \ | ^ |
95// * | | | | | | | | | | | |
96// * ,------+------+------+------+------+------| |------+------+------+------+------+------.
97// * | | ä | & | ( | ) | | | | ' | " | ? | ! | + | |
98// * | | | | | | | | | | | | | |
99// * |------+------+------+------+------+------| |------+------+------+------+------+------|
100// * | | % | # | [ | ] | ~ | | € | = | * | < | > | |
101// * | | | | | | | | | | | | | |
102// * `----------------------------------+------+-------------. ,-------------+------+----------------------------------'
103// * | | | TAB | | | | |
104// * | | | | | | | |
105// * `--------------------' `--------------------'
106// */
107 [_SYMB] = LAYOUT(
108 CH_GRV , CH_AT , CH_LCBR, CH_RCBR, CH_DLR , CH_DIAE, CH_UDIA, CH_SLSH, CH_BSLS, KC_CIRC,
109 _______, CH_ADIA, CH_AMPR, CH_LPRN, CH_RPRN, CH_PIPE, CH_QUOT, CH_DQUO, CH_QUES, CH_EXLM, CH_PLUS, _______,
110 _______, CH_PERC, CH_HASH, CH_LBRC, CH_RBRC, CH_TILD, CH_EURO, CH_EQL , CH_ASTR, CH_LABK, CH_RABK, _______,
111 _______, _______, KC_TAB, _______, _______ , _______
112 ),
113
114// /*
115// * Navigation Layer (Right)
116// *
117// * ,----------------------------------. ,----------------------------------.
118// * | | | | | | |Insert| Cut | PgUp | PgDn | |
119// * | | | | | | | | | | | |
120// * ,------+------+------+------+------+------| |------+------+------+------+------+------.
121// * | | | | | | | | Copy | ← | ↑ | ↓ | → | |
122// * | | | | | | | | | | | | | |
123// * |------+------+------+------+------+------| |------+------+------+------+------+------|
124// * | | | | | | | | Paste| Home | WH_U | WH_D | End | |
125// * | | | | | | | | | | | | | |
126// * `----------------------------------+------+-------------. ,-------------+------+----------------------------------'
127// * | | | | | Bksp | | Del |
128// * | | | | | | | |
129// * `--------------------' `--------------------'
130// */
131 [_NAVR] = LAYOUT(
132 _______, _______, _______, _______, _______, KC_INS , UC_CUT , KC_PGUP, KC_PGDN, _______,
133 _______, _______, _______, _______, _______, _______, UC_COPY, KC_LEFT, KC_UP , KC_DOWN, KC_RGHT, _______,
134 _______, _______, _______, _______, _______, _______, UC_PSTE, KC_HOME, KC_WH_U, KC_WH_D, KC_END , _______,
135 _______, _______, _______, KC_BSPC, _______, _______
136 ),
137// --------------------------------------------------------------------------------------------------------------------------------------------------------
138
139// /*
140// * Number Layer (Right)
141// *
142// * ,----------------------------------. ,----------------------------------.
143// * | | | | | | | / | 7 | 8 | 9 | - |
144// * | | | | | | | | | | | |
145// * ,------+------+------+------+------+------| |------+------+------+------+------+------.
146// * | | | | | | | | * | 4 | 5 | 6 | + | |
147// * | | | | | | | | | | | | | |
148// * |------+------+------+------+------+------| |------+------+------+------+------+------|
149// * | | | | | | | | 0 | 1 | 2 | 3 | . | |
150// * | | | | | | | | | | | | | |
151// * `----------------------------------+------+-------------. ,-------------+------+----------------------------------'
152// * | | | | | Bksp | Enter| |
153// * | | | | | | | |
154// * `--------------------' `--------------------'
155// */
156 [_NUMR] = LAYOUT(
157 _______, _______, _______, _______, _______, KC_SLSH, KC_7 , KC_8 , KC_9 , KC_MINS,
158 _______, _______, _______, _______, _______, _______, KC_ASTR, KC_4 , KC_5 , KC_6 , KC_PLUS, _______,
159 _______, _______, _______, _______, _______, _______, KC_0 , KC_1 , KC_2 , KC_3 , KC_DOT , _______,
160 _______, _______, _______, KC_BSPC, KC_ENT , _______
161 ),
162
163// /*
164// * Function Layer (Left)
165// *
166// * ,----------------------------------. ,----------------------------------.
167// * | F12 | F7 | F8 | F9 | Pause| | | | | | |
168// * | | | | | | | | | | | |
169// * ,------+------+------+------+------+------| |------+------+------+------+------+------.
170// * | | F11 | F4 | F5 | F6 | PrScr| | | | | | | |
171// * | | | | | | | | | | | | | |
172// * |------+------+------+------+------+------| |------+------+------+------+------+------|
173// * | | F10 | F1 | F2 | F3 | CapsL| | | | | | | |
174// * | | | | | | | | | | | | | |
175// * `----------------------------------+------+-------------. ,-------------+------+----------------------------------'
176// * | | Space| TAB | | | | |
177// * | | | | | | | |
178// * `--------------------' `--------------------'
179// */
180 [_FUNL] = LAYOUT(
181 KC_F12 , KC_F7 , KC_F8 , KC_F9 , KC_PAUS, _______, _______, _______, _______, _______,
182 _______, KC_F11 , KC_F4 , KC_F5 , KC_F6 , KC_PSCR, _______, _______, _______, _______, _______, _______,
183 _______, KC_F10 , KC_F1 , KC_F2 , KC_F3 , KC_CAPS, _______, _______, _______, _______, _______, _______,
184 _______, KC_SPC , KC_TAB , _______, _______, _______
185 ),
186
187// /*
188// * Mouse & Adjustment Layer
189// *
190// * ,----------------------------------. ,----------------------------------.
191// * | | | | | | | | | | | |
192// * | | | | | | | | | | | |
193// * ,------+------+------+------+------+------| |------+------+------+------+------+------.
194// * | | | BTN3 | BTN2 | BTN1 | | | | | | | | |
195// * | | | | | | | | | | | | | |
196// * |------+------+------+------+------+------| |------+------+------+------+------+------|
197// * | | | Cut | Copy | Paste| | | Play |M Prev| VolDn| VolUp|M Next| |
198// * | | | | | | | | | | | | | |
199// * `----------------------------------+------+-------------. ,-------------+------+----------------------------------'
200// * | | | | | | | |
201// * | | | | | | | |
202// * `--------------------' `--------------------'
203// */
204 [_MOAJ] = LAYOUT(
205 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
206 _______, _______, KC_BTN3, KC_BTN2, KC_BTN1, _______, _______, _______, _______, _______, _______, _______,
207 _______, _______, UC_CUT , UC_COPY, UC_PSTE, _______, KC_MPLY, KC_MPRV, KC_VOLD, KC_VOLU, KC_MNXT, _______,
208 _______, _______, _______, _______, _______, _______
209 ),
210
211// -------------------------------------------------------- TEMPLATE -------------------------------------------------------------------------------------
212// /*
213// * Layer
214// *
215// * ,----------------------------------. ,----------------------------------.
216// * | | | | | | | | | | | |
217// * | | | | | | | | | | | |
218// * ,------+------+------+------+------+------| |------+------+------+------+------+------.
219// * | | | | | | | | | | | | | |
220// * | | | | | | | | | | | | | |
221// * |------+------+------+------+------+------| |------+------+------+------+------+------|
222// * | | | | | | | | | | | | | |
223// * | | | | | | | | | | | | | |
224// * `----------------------------------+------+-------------. ,-------------+------+----------------------------------'
225// * | | | | | | | |
226// * | | | | | | | |
227// * `--------------------' `--------------------'
228// */
229// [_LAYERINDEX] = LAYOUT(
230// _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
231// _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
232// _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
233// _______, _______, _______, _______, _______, _______
234// ),
235// --------------------------------------------------------------------------------------------------------------------------------------------------------
236};
237
238layer_state_t layer_state_set_user(layer_state_t state) {
239 process_layer_pulse(state);
240 return update_tri_layer_state(state, _NAVR, _SYMB, _MOAJ);
241}
242
243uint16_t get_tapping_term(uint16_t keycode, keyrecord_t *record) {
244 switch (keycode) {
245 case GUI_A:
246 return TAPPING_TERM + 150;
247 case ALT_S:
248 return TAPPING_TERM + 50;
249 case ALT_L:
250 return TAPPING_TERM + 50;
251 case GUI_SCL:
252 return TAPPING_TERM + 150;
253 default:
254 return TAPPING_TERM;
255 }
256}
diff --git a/keyboards/buzzard/keymaps/crehmann/rules.mk b/keyboards/buzzard/keymaps/crehmann/rules.mk
new file mode 100644
index 000000000..484e7d84a
--- /dev/null
+++ b/keyboards/buzzard/keymaps/crehmann/rules.mk
@@ -0,0 +1,9 @@
1SRC += features/haptic_utils.c
2
3OLED_ENABLE = yes
4
5HAPTIC_ENABLE = yes
6HAPTIC_DRIVER = DRV2605L
7
8PS2_MOUSE_ENABLE = yes
9MOUSEKEY_ENABLE = yes
diff --git a/keyboards/buzzard/keymaps/default/config.h b/keyboards/buzzard/keymaps/default/config.h
new file mode 100644
index 000000000..76294cf78
--- /dev/null
+++ b/keyboards/buzzard/keymaps/default/config.h
@@ -0,0 +1,39 @@
1// Copyright 2021 Christoph Rehmann (crehmann)
2// SPDX-License-Identifier: GPL-2.0-or-later
3
4#pragma once
5
6// Configure the global tapping term (default: 200ms)
7#define TAPPING_TERM 200
8
9// Prevent normal rollover on alphas from accidentally triggering mods.
10#define IGNORE_MOD_TAP_INTERRUPT
11
12// Enable rapid switch from tap to hold, disables double tap hold auto-repeat.
13#define TAPPING_FORCE_HOLD
14
15// Apply the modifier on keys that are tapped during a short hold of a modtap
16#define PERMISSIVE_HOLD
17
18// Using the right side as master
19#define MASTER_RIGHT
20
21#ifdef HAPTIC_ENABLE
22// this configuration has no effect because the haptic exclusion is implemented with
23// __attribute__((weak)) bool get_haptic_enabled_key(uint16_t keycode, keyrecord_t *record)
24// in the default keymap and reacts only to mouse clicks.
25//#define NO_HAPTIC_MOD
26#define NO_HAPTIC_FN
27#define NO_HAPTIC_ALPHA
28#define NO_HAPTIC_PUNCTUATION
29#define NO_HAPTIC_NAV
30#define NO_HAPTIC_NUMERIC
31#define DRV_GREETING alert_750ms
32#define DRV_MODE_DEFAULT sharp_tick1
33#endif
34
35
36#ifdef PS2_MOUSE_ENABLE
37#define PS2_MOUSE_SCROLL_BTN_MASK (1<<PS2_MOUSE_BTN_RIGHT) // using the right mouse button for scrolling (other buttons can be configured)
38#define PS2_MOUSE_SCROLL_BTN_SEND 500
39#endif \ No newline at end of file
diff --git a/keyboards/buzzard/keymaps/default/keymap.c b/keyboards/buzzard/keymaps/default/keymap.c
new file mode 100644
index 000000000..7ca3ddc7d
--- /dev/null
+++ b/keyboards/buzzard/keymaps/default/keymap.c
@@ -0,0 +1,274 @@
1/* Copyright 2021 Christoph Rehmann (crehmann)
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 layers {
19 _BASE = 0,
20 _NAVR,
21 _SYMB,
22 _NUMR,
23 _FUNL,
24 _ADJL
25};
26
27
28// Aliases for readability
29#define BASE DF(_BASE)
30#define NAVR MO(_NAVR)
31#define SYMB MO(_SYMB)
32#define NUMR MO(_NUMR)
33#define FUNL MO(_FUNL)
34#define ADJL MO(_ADJL)
35
36// Left-hand home row mods
37#define RALT_X RALT_T(KC_X)
38#define GUI_A LGUI_T(KC_A)
39#define ALT_S LALT_T(KC_S)
40#define CTL_D LCTL_T(KC_D)
41#define SFT_F LSFT_T(KC_F)
42
43// Right-hand home row mods
44#define SFT_J RSFT_T(KC_J)
45#define CTL_K RCTL_T(KC_K)
46#define ALT_L LALT_T(KC_L)
47#define GUI_SCL RGUI_T(KC_SCLN)
48#define RALT_DT RALT_T(KC_DOT)
49
50// Left-hand outer column
51#define CTL_ESC MT(MOD_LCTL, KC_ESC)
52#define SFT_TAB MT(MOD_LSFT, KC_TAB)
53
54// Thumbcluster
55#define UC_TL1 KC_BTN1
56#define UC_TL2 LT(NAVR, KC_SPC)
57#define UC_TL3 LT(NUMR, KC_TAB)
58
59#define UC_TR3 LT(FUNL, KC_BSPC)
60#define UC_TR2 LT(SYMB, KC_ENT)
61#define UC_TR1 KC_BTN2
62
63// Shortcuts
64#define UC_COPY LCTL(KC_C)
65#define UC_PSTE LCTL(KC_V)
66#define UC_CUT LCTL(KC_X)
67#define UC_OSFT OSM(MOD_LSFT)
68
69// clang-format off
70const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
71
72// /*
73// * Base Layer
74// *
75// * ,----------------------------------. ,----------------------------------.
76// * | Q | W | E | R | T | | Y | U | I | O | P |
77// * | | | | | | | | | | | |
78// * ,------+------+------+------+------+------| |------+------+------+------+------+------.
79// * | OSM | A | S | D | F | G | | H | J | K | L | ; : | Bksp |
80// * | Shift| GUI | LALT | LCTL | LSFT | | | | LSFT | LCTL | ALT | GUI | |
81// * |------+------+------+------+------+------| |------+------+------+------+------+------|
82// * | ESC | Z | X | C | F | B | | N | M | , < | . > | / ? | ADJL |
83// * | CTL | | RALT | | | | | | | | RALT | | |
84// * `----------------------------------+------+-------------. ,-------------+------+----------------------------------'
85// * | BTN1 | Space| TAB | | Bksp| Enter| BTN2 |
86// * | | NAVR | NUMR | | FUNL| SYML | |
87// * `--------------------' `--------------------'
88// */
89 [_BASE] = LAYOUT(
90 KC_Q , KC_W , KC_E , KC_R , KC_T , KC_Y , KC_U , KC_I , KC_O , KC_P ,
91 UC_OSFT, GUI_A , ALT_S , CTL_D , SFT_F , KC_G , KC_H , SFT_J , CTL_K , ALT_L , GUI_SCL, KC_DEL,
92 CTL_ESC, KC_Z , RALT_X , KC_C , KC_V , KC_B , KC_N , KC_M , KC_COMM, RALT_DT, KC_SLSH, ADJL ,
93 KC_BTN1, UC_TL2 , UC_TL3 , UC_TR3 , UC_TR2 , UC_TR1
94 ),
95
96// /*
97// * Navigation Layer (Right)
98// *
99// * ,----------------------------------. ,----------------------------------.
100// * | | | | | | |Insert| Cut | PgUp | PgDn | |
101// * | | | | | | | | | | | |
102// * ,------+------+------+------+------+------| |------+------+------+------+------+------.
103// * | | | | | | | | Copy | ← | ↑ | ↓ | → | |
104// * | | | | | | | | | | | | | |
105// * |------+------+------+------+------+------| |------+------+------+------+------+------|
106// * | | | | | | | | Paste| Home | WH_U | WH_D | End | |
107// * | | | | | | | | | | | | | |
108// * `----------------------------------+------+-------------. ,-------------+------+----------------------------------'
109// * | | | | | Bksp | Enter| |
110// * | | | | | | | |
111// * `--------------------' `--------------------'
112// */
113 [_NAVR] = LAYOUT(
114 _______, _______, _______, _______, _______, KC_INS , UC_CUT , KC_PGUP, KC_PGDN, _______,
115 _______, _______, _______, _______, _______, _______, UC_COPY, KC_LEFT, KC_UP , KC_DOWN, KC_RGHT, _______,
116 _______, _______, _______, _______, _______, _______, UC_PSTE, KC_HOME, KC_WH_U, KC_WH_D, KC_END , _______,
117 _______, _______, _______, KC_BSPC, KC_ENT , _______
118 ),
119// --------------------------------------------------------------------------------------------------------------------------------------------------------
120
121
122// /*
123// * Symbol Layer (Right)
124//
125// * ,----------------------------------. ,----------------------------------.
126// * | ` | ~ | | | \ | | | | / | + | = | ? |
127// * | | | | | | | | | | | |
128// * ,------+------+------+------+------+------| |------+------+------+------+------+------.
129// * | | ! | @ | # | $ | % | | ^ | & | * | ( | ) | |
130// * | | | | | | | | | | | | | |
131// * |------+------+------+------+------+------| |------+------+------+------+------+------|
132// * | | : | ; | - | [ | { | | } | ] | _ | , | . | |
133// * | | | | | | | | | | | | | |
134// * `----------------------------------+------+-------------. ,-------------+------+----------------------------------'
135// * | | Space| TAB | | Bksp | Enter| |
136// * | | | | | | | |
137// * `--------------------' `--------------------'
138// *
139 [_SYMB] = LAYOUT(
140 KC_GRV , KC_TILD, KC_PIPE, KC_BSLS, _______, _______, KC_SLSH, KC_PLUS, KC_EQL , KC_QUES,
141 _______, KC_EXLM, KC_AT , KC_HASH, KC_DLR , KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, _______,
142 _______, KC_COLN, KC_SCLN, KC_MINS, KC_LBRC, KC_LCBR, KC_RCBR, KC_RBRC, KC_UNDS, KC_COMM, KC_DOT , _______,
143 _______, KC_SPC , KC_TAB , KC_BSPC, KC_ENT , _______
144 ),
145
146// /*
147// * Number Layer (Right)
148// *
149// * ,----------------------------------. ,----------------------------------.
150// * | | | | | | | / | 7 | 8 | 9 | - |
151// * | | | | | | | | | | | |
152// * ,------+------+------+------+------+------| |------+------+------+------+------+------.
153// * | | | | | | | | * | 4 | 5 | 6 | + | |
154// * | | | | | | | | | | | | | |
155// * |------+------+------+------+------+------| |------+------+------+------+------+------|
156// * | | | | | | | | 0 | 1 | 2 | 3 | . | |
157// * | | | | | | | | | | | | | |
158// * `----------------------------------+------+-------------. ,-------------+------+----------------------------------'
159// * | | | | | Bksp | Enter| |
160// * | | | | | | | |
161// * `--------------------' `--------------------'
162// */
163 [_NUMR] = LAYOUT(
164 _______, _______, _______, _______, _______, KC_SLSH, KC_7 , KC_8 , KC_9 , KC_MINS,
165 _______, _______, _______, _______, _______, _______, KC_ASTR, KC_4 , KC_5 , KC_6 , KC_PLUS, _______,
166 _______, _______, _______, _______, _______, _______, KC_0 , KC_1 , KC_2 , KC_3 , KC_DOT , _______,
167 _______, _______, _______, KC_BSPC, KC_ENT , _______
168 ),
169
170// /*
171// * Function Layer (Left)
172// *
173// * ,----------------------------------. ,----------------------------------.
174// * | F12 | F7 | F8 | F9 | Pause| | | | | | |
175// * | | | | | | | | | | | |
176// * ,------+------+------+------+------+------| |------+------+------+------+------+------.
177// * | | F11 | F4 | F5 | F6 | PrScr| | | | | | | |
178// * | | | | | | | | | | | | | |
179// * |------+------+------+------+------+------| |------+------+------+------+------+------|
180// * | | F10 | F1 | F2 | F3 | CapsL| | | | | | | |
181// * | | | | | | | | | | | | | |
182// * `----------------------------------+------+-------------. ,-------------+------+----------------------------------'
183// * | | Space| TAB | | | | |
184// * | | | | | | | |
185// * `--------------------' `--------------------'
186// */
187 [_FUNL] = LAYOUT(
188 KC_F12 , KC_F7 , KC_F8 , KC_F9 , KC_PAUS, _______, _______, _______, _______, _______,
189 _______, KC_F11 , KC_F4 , KC_F5 , KC_F6 , KC_PSCR, _______, _______, _______, _______, _______, _______,
190 _______, KC_F10 , KC_F1 , KC_F2 , KC_F3 , KC_CAPS, _______, _______, _______, _______, _______, _______,
191 _______, KC_SPC , KC_TAB , _______, _______, _______
192 ),
193
194// /*
195// * Adjustment Layer (Left)
196// *
197// * ,----------------------------------. ,----------------------------------.
198// * | | | | | | | | | | | |
199// * | | | | | | | | | | | |
200// * ,------+------+------+------+------+------| |------+------+------+------+------+------.
201// * | |M Prev| VolDn| VolDn|M Next| | | | | | | | |
202// * | | | | | | | | | | | | | |
203// * |------+------+------+------+------+------| |------+------+------+------+------+------|
204// * | | | | Mute | Play | | | | | | | | |
205// * | | | | | | | | | | | | | |
206// * `----------------------------------+------+-------------. ,-------------+------+----------------------------------'
207// * | | Space| TAB | | | | |
208// * | | | | | | | |
209// * `--------------------' `--------------------'
210// */
211 [_ADJL] = LAYOUT(
212 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
213 _______, KC_MPRV, KC_VOLD, KC_VOLU, KC_MNXT, _______, _______, _______, _______, _______, _______, _______,
214 _______, _______, _______, KC_MUTE, KC_MPLY, _______, _______, _______, _______, _______, _______, _______,
215 _______, KC_SPC , KC_TAB , _______, _______, _______
216 ),
217
218// -------------------------------------------------------- TEMPLATE -------------------------------------------------------------------------------------
219// /*
220// * Layer
221// *
222// * ,----------------------------------. ,----------------------------------.
223// * | | | | | | | | | | | |
224// * | | | | | | | | | | | |
225// * ,------+------+------+------+------+------| |------+------+------+------+------+------.
226// * | | | | | | | | | | | | | |
227// * | | | | | | | | | | | | | |
228// * |------+------+------+------+------+------| |------+------+------+------+------+------|
229// * | | | | | | | | | | | | | |
230// * | | | | | | | | | | | | | |
231// * `----------------------------------+------+-------------. ,-------------+------+----------------------------------'
232// * | | | | | | | |
233// * | | | | | | | |
234// * `--------------------' `--------------------'
235// */
236// [_LAYERINDEX] = LAYOUT(
237// _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
238// _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
239// _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
240// _______, _______, _______, _______, _______, _______
241// ),
242// --------------------------------------------------------------------------------------------------------------------------------------------------------
243};
244
245// uncommint this and modify the timings if the home row mods are not working for you
246/*
247uint16_t get_tapping_term(uint16_t keycode, keyrecord_t *record) {
248 switch (keycode) {
249 case GUI_A:
250 return TAPPING_TERM + 150;
251 case ALT_S:
252 return TAPPING_TERM + 50;
253 case ALT_L:
254 return TAPPING_TERM + 50;
255 case GUI_SCL:
256 return TAPPING_TERM + 150;
257 default:
258 return TAPPING_TERM;
259 }
260}
261*/
262
263#ifdef HAPTIC_ENABLE
264
265bool get_haptic_enabled_key(uint16_t keycode, keyrecord_t *record) {
266 switch (keycode) {
267 case KC_BTN1 ... KC_BTN5:
268 return true;
269 break;
270 }
271
272 return false;
273}
274#endif \ No newline at end of file
diff --git a/keyboards/buzzard/keymaps/default/rules.mk b/keyboards/buzzard/keymaps/default/rules.mk
new file mode 100644
index 000000000..e8124aebb
--- /dev/null
+++ b/keyboards/buzzard/keymaps/default/rules.mk
@@ -0,0 +1,7 @@
1OLED_ENABLE = yes # uncomment if you are using an OLED display
2
3#HAPTIC_ENABLE = yes # uncomment only on the master side if you are using a Pimoroni haptic buzz
4#HAPTIC_DRIVER = DRV2605L # uncomment only on the master side if you are using a Pimoroni haptic buzz
5
6#PS2_MOUSE_ENABLE = yes # uncomment only on the master side if you are usin a TrackPoint
7MOUSEKEY_ENABLE = yes \ No newline at end of file
diff --git a/keyboards/buzzard/readme.md b/keyboards/buzzard/readme.md
new file mode 100644
index 000000000..d86c2feb3
--- /dev/null
+++ b/keyboards/buzzard/readme.md
@@ -0,0 +1,29 @@
1# Buzzard
2
3![Buzzard Keyboard](https://raw.githubusercontent.com/crehmann/Buzzard/main/Pictures/build_guide_final.jpg)
4
5Buzzard is a 40 keys ergonomic split keyboard. The layout is inspired by the [Architeuthis dux](https://github.com/tapioki/cephalopoda/tree/main/Architeuthis%20dux) with pinky, ring, index, and inner columns splayed at 15, 5, 0, -5, -5 degrees. However, it as two additional pinky keys and a modified thumb cluster.
6
7* Keyboard Maintainer: [crehmann](https://github.com/crehmann)
8* Hardware Supported: Pro Micro 5V/16MHz and compatible.
9* Hardware Availability: https://github.com/crehmann/Buzzard
10
11## Some Features:
12
13- Integrated TrackPoint reset circuit and two possible positions to mount a TrackPoint to the bottom of the PCB. Either between the two inner columns or between the index and middle finger columns
14- Mounting option for a linear actuator ([HapticBuzz from pimoroni](https://shop.pimoroni.com/products/drv2605l-linear-actuator-haptic-breakout))
15- I2C interface for an OLED display
16- Wireless Ready (however, without TrackPoint / linear actuator support):
17 - Battery switch / connector
18 - Option to use a battery friendly Sharp memory display instead of an OLED display
19- Choc-spaced
20
21## Building the Firmware
22
23Make example for this keyboard (after setting up your build environment):
24
25 qmk compile -kb buzzard -km default
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).
28
29A build guide for the Buzzard keyboard can be found at [https://github.com/crehmann/Buzzard](https://github.com/crehmann/Buzzard) \ No newline at end of file
diff --git a/keyboards/buzzard/rev1/config.h b/keyboards/buzzard/rev1/config.h
new file mode 100644
index 000000000..2a7ea22ec
--- /dev/null
+++ b/keyboards/buzzard/rev1/config.h
@@ -0,0 +1,62 @@
1// Copyright 2021 Christoph Rehmann (crehmann)
2// SPDX-License-Identifier: GPL-2.0-or-later
3
4#pragma once
5
6/* USB Device descriptor parameter */
7#define VENDOR_ID 0xFEED
8#define PRODUCT_ID 0xB077
9#define DEVICE_VER 0x0001
10#define MANUFACTURER crehmann
11#define PRODUCT Buzzard
12
13/* key matrix size */
14/* Rows are doubled up */
15#define MATRIX_ROWS 8
16#define MATRIX_COLS 6
17
18// wiring
19#define MATRIX_ROW_PINS \
20 { F4, F5, F6, F7 }
21#define MATRIX_COL_PINS \
22 { B1, B3, B2, B6, B5, B4}
23#define UNUSED_PINS
24
25/* COL2ROW, ROW2COL*/
26#define DIODE_DIRECTION COL2ROW
27
28/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
29#define DEBOUNCE 5
30
31/*
32 * Split Keyboard specific options, make sure you have 'SPLIT_KEYBOARD = yes' in your rules.mk, and define SOFT_SERIAL_PIN.
33 */
34#define SOFT_SERIAL_PIN D2
35
36/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
37#define LOCKING_SUPPORT_ENABLE
38/* Locking resynchronize hack */
39#define LOCKING_RESYNC_ENABLE
40
41#ifdef OLED_ENABLE
42#define OLED_DISPLAY_128X32
43#define SPLIT_OLED_ENABLE
44#endif
45
46#ifdef PS2_USE_INT
47#define PS2_CLOCK_PIN E6
48#define PS2_DATA_PIN D7
49
50#define PS2_INT_INIT() do { \
51 EICRB |= ((1<<ISC61) | \
52 (0<<ISC60)); \
53 } while (0)
54#define PS2_INT_ON() do { \
55 EIMSK |= (1<<INT6); \
56} while (0)
57#define PS2_INT_OFF() do { \
58 EIMSK &= ~(1<<INT6); \
59} while (0)
60#define PS2_INT_VECT INT6_vect
61#define PS2_MOUSE_ROTATE 270 /* Compensate for East-facing device orientation. */
62#endif
diff --git a/keyboards/buzzard/rev1/rev1.c b/keyboards/buzzard/rev1/rev1.c
new file mode 100644
index 000000000..0124a92c3
--- /dev/null
+++ b/keyboards/buzzard/rev1/rev1.c
@@ -0,0 +1,128 @@
1// Copyright 2021 Christoph Rehmann (crehmann)
2// SPDX-License-Identifier: GPL-2.0-or-later
3#include "rev1.h"
4
5#ifdef HAPTIC_ENABLE
6#include "drivers/haptic/DRV2605L.h"
7#endif
8
9#ifdef SWAP_HANDS_ENABLE
10// clang-format off
11__attribute__ ((weak)) const keypos_t PROGMEM hand_swap_config[MATRIX_ROWS][MATRIX_COLS] = {
12 {{0, 4}, {1, 4}, {2, 4}, {3, 4}, {4, 4}, {5, 4},
13 {{0, 5}, {1, 5}, {2, 5}, {3, 5}, {4, 5}, {5, 5},
14 {{0, 6}, {1, 6}, {2, 6}, {3, 6}, {4, 6}, {5, 6},
15 {{0, 7}, {1, 7}, {2, 7}, {3, 7}, {4, 7}, {5, 7},
16 {{0, 0}, {1, 0}, {2, 0}, {3, 0}, {4, 0}, {5, 0},
17 {{0, 1}, {1, 1}, {2, 1}, {3, 1}, {4, 1}, {5, 1},
18 {{0, 2}, {1, 2}, {2, 2}, {3, 2}, {4, 2}, {5, 2},
19 {{0, 3}, {1, 3}, {2, 3}, {3, 3}, {4, 3}, {5, 3}
20};
21// clang-format on
22#endif
23
24#ifdef OLED_ENABLE
25oled_rotation_t oled_init_kb(oled_rotation_t rotation) { return OLED_ROTATION_270; }
26
27bool oled_task_kb(void) {
28 if (!oled_task_user()) {
29 return false;
30 }
31
32 if (is_keyboard_master()) {
33 static const char PROGMEM base_logo[] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xfe, 0xfe, 0xc6, 0xc6, 0xee, 0xfe, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x3f, 0x3f, 0x30, 0x30, 0x39, 0x3f, 0x1f, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xf8, 0xff, 0x9f, 0x8f, 0xff, 0xfc, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
34 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x0f, 0x0f, 0x03, 0x01, 0x01, 0x01, 0x0f, 0x0f, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xc0, 0xe0, 0x60, 0x60, 0xe0, 0xc0, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc7, 0xcf, 0x8f, 0x1c, 0x1c, 0x98, 0xf9, 0xf1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x03, 0x03, 0x03, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
35 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xf8, 0xf8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xc3, 0xc3, 0xc3, 0xc3, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
36 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
37 static const char PROGMEM nav_logo[] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xfe, 0x3e, 0xf8, 0xc0, 0x00, 0xfe, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x3f, 0x00, 0x01, 0x0f, 0x3e, 0x3f, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xf8, 0xff, 0x9f, 0x8f, 0xff, 0xfc, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
38 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x0f, 0x0f, 0x03, 0x01, 0x01, 0x01, 0x0f, 0x0f, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0xe0, 0xe0, 0x80, 0x00, 0x00, 0x00, 0xe0, 0xe0, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x3f, 0xff, 0xf0, 0xe0, 0xff, 0x7f, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
39 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
40 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
41 static const char PROGMEM sym_logo[] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0xfc, 0xfe, 0xc6, 0xc6, 0x8e, 0x9c, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x1c, 0x38, 0x31, 0x31, 0x39, 0x1f, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x0f, 0x7f, 0xf8, 0xf0, 0x7e, 0x1f, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
42 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xe0, 0xe0, 0x00, 0x00, 0xe0, 0x60, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x03, 0x0f, 0x0e, 0x07, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
43 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
44 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
45 static const char PROGMEM num_logo[] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xfe, 0x3e, 0xf8, 0xc0, 0x00, 0xfe, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x3f, 0x00, 0x01, 0x0f, 0x3e, 0x3f, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
46 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x07, 0x0f, 0x0c, 0x0c, 0x0e, 0x07, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xe0, 0xe0, 0x00, 0x00, 0xe0, 0x60, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x03, 0x0f, 0x0e, 0x07, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
47 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
48 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
49 static const char PROGMEM fun_logo[] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xfe, 0xfe, 0x86, 0x86, 0x86, 0x86, 0x86, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x3f, 0x3f, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
50 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x07, 0x0f, 0x0c, 0x0c, 0x0e, 0x07, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xe0, 0xe0, 0x80, 0x00, 0x00, 0xe0, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x03, 0x1f, 0xfc, 0xe0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
51 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
52 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
53 static const char PROGMEM adj_logo[] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xfe, 0x7e, 0x3e, 0xfe, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x3e, 0x3f, 0x0f, 0x06, 0x06, 0x07, 0x3f, 0x3e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x01, 0x01, 0x03, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
54 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x0f, 0x0f, 0x0c, 0x0c, 0x0e, 0x07, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x60, 0x60, 0xe0, 0xe0, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0xc0, 0xc0, 0x80, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x03, 0x03, 0x03, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
55 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
56 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
57
58 // Host Keyboard LED Status
59 led_t led_usb_state = host_keyboard_led_state();
60 oled_write_P(led_usb_state.num_lock ? PSTR(" NUM ") : PSTR(" "), false);
61 oled_write_P(led_usb_state.caps_lock ? PSTR(" CAP ") : PSTR(" "), false);
62 oled_write_P(led_usb_state.scroll_lock ? PSTR(" SCR \n\n") : PSTR(" \n\n"), false);
63
64 // Host Keyboard Layer Status
65 switch (get_highest_layer(layer_state | default_layer_state)) {
66 case 0:
67 oled_write_raw_P(base_logo, sizeof(base_logo));
68 break;
69 case 1:
70 oled_write_raw_P(nav_logo, sizeof(nav_logo));
71 break;
72 case 2:
73 oled_write_raw_P(sym_logo, sizeof(sym_logo));
74 break;
75 case 3:
76 oled_write_raw_P(num_logo, sizeof(num_logo));
77 break;
78 case 4:
79 oled_write_raw_P(fun_logo, sizeof(fun_logo));
80 break;
81 case 5:
82 oled_write_raw_P(adj_logo, sizeof(adj_logo));
83 break;
84 default:
85 oled_write_P(PSTR("---\n"), false);
86 }
87
88 } else {
89 static const char PROGMEM buzzard_log[] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x38, 0xf0, 0xf0, 0xe0, 0xc0, 0xc0, 0x80, 0x30, 0xe0, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
90 0x00, 0x00, 0x00, 0x03, 0x0f, 0x7f, 0xff, 0xff, 0xfc, 0xe3, 0x1f, 0xff, 0xff, 0xfe, 0xfc, 0x80, 0x3f, 0xfe, 0xfc, 0xf0, 0x00, 0x00, 0x80, 0xc0, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x07, 0x1f, 0x7f, 0xfe, 0xf8, 0xc7, 0x3f, 0x7f, 0x7f, 0x00, 0x7f, 0x7f, 0x0f, 0xd8, 0xdd, 0xed, 0xee, 0xe6, 0x66, 0x63, 0x30, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x60, 0x30, 0x18, 0x88, 0x84, 0x04, 0x62, 0x02, 0x12, 0x11, 0xc1, 0x01, 0x21, 0x81, 0x81, 0x1a, 0x62, 0x02, 0x04, 0x04, 0xc8, 0x10, 0x20, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x07, 0x00, 0x10, 0x50, 0x40, 0x0c, 0x30, 0x82, 0x98, 0x41, 0x41, 0x04, 0x10, 0x83, 0xc8, 0x08, 0x20, 0x86, 0x18, 0x41, 0x45, 0x04, 0x30, 0x82, 0x88, 0x08, 0x01, 0x0e, 0xf0,
91 0x00, 0x00, 0x0f, 0x30, 0xc0, 0x84, 0x14, 0x10, 0x43, 0x0c, 0x20, 0x22, 0x82, 0x18, 0x61, 0x04, 0x30, 0x30, 0xc3, 0x08, 0x20, 0x24, 0x84, 0x11, 0x41, 0x0c, 0x00, 0x02, 0x82, 0x60, 0x18, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x0c, 0x88, 0xd0, 0xd0, 0xd0, 0x26, 0xa0, 0xa1, 0x21, 0xa0, 0xa0, 0x22, 0xe0, 0xd0, 0xd1, 0xc8, 0xc8, 0x84, 0x86, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe0, 0xf8, 0xfe, 0xff, 0x3f, 0xc7, 0xf8, 0xff, 0xff, 0x7f, 0x00, 0xff, 0xff, 0xfc, 0x06, 0x2f, 0x6d, 0xdd, 0x99, 0x19, 0x21, 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xf0, 0xfc, 0xff, 0xff, 0x7f, 0x0f, 0xf1, 0xfe, 0x7f, 0x3f, 0x1f, 0x0f, 0x00, 0x3f, 0x1f, 0x0f, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
92 0x08, 0x07, 0x07, 0x03, 0x01, 0x01, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
93 oled_write_raw_P(buzzard_log, sizeof(buzzard_log));
94 }
95 return false;
96}
97#endif
98
99__attribute__((weak)) layer_state_t layer_state_set_user(layer_state_t state) {
100 switch (get_highest_layer(state)) {
101 case 1:
102#ifdef HAPTIC_ENABLE
103 DRV_pulse(soft_bump);
104#endif
105 break;
106 case 2:
107#ifdef HAPTIC_ENABLE
108 DRV_pulse(sh_dblsharp_tick);
109#endif
110 break;
111 case 3:
112#ifdef HAPTIC_ENABLE
113 DRV_pulse(lg_dblclick_str);
114#endif
115 break;
116 case 4:
117#ifdef HAPTIC_ENABLE
118 DRV_pulse(soft_bump);
119#endif
120 break;
121 case 5:
122#ifdef HAPTIC_ENABLE
123 DRV_pulse(pulsing_sharp);
124#endif
125 break;
126 }
127 return state;
128} \ No newline at end of file
diff --git a/keyboards/buzzard/rev1/rev1.h b/keyboards/buzzard/rev1/rev1.h
new file mode 100644
index 000000000..c73e9164f
--- /dev/null
+++ b/keyboards/buzzard/rev1/rev1.h
@@ -0,0 +1,52 @@
1// Copyright 2021 Christoph Rehmann (crehmann)
2// SPDX-License-Identifier: GPL-2.0-or-later
3#pragma once
4
5#include "buzzard.h"
6
7/* This a shortcut to help you visually see your layout.
8 *
9 * The first section contains all of the arguments representing the physical
10 * layout of the board and position of the keys.
11 *
12 * The second converts the arguments into a two-dimensional array which
13 * represents the switch matrix.
14 */
15#define LAYOUT( \
16 L00, L01, L02, L03, L04, R05, R06, R07, R08, R09, \
17 L10, L11, L12, L13, L14, L15, R16, R17, R18, R19, R20, R21, \
18 L22, L23, L24, L25, L26, L27, R28, R29, R30, R31, R32, R33, \
19 L34, L35, L36, R37, R38, R39 \
20) \
21{ \
22 { L04, L03, L02, L01, L00, KC_NO }, \
23 { L15, L14, L13, L12, L11, L10 }, \
24 { L27, L26, L25, L24, L23, L22 }, \
25 { L36, L35, L34, KC_NO, KC_NO, KC_NO }, \
26 { R05, R06, R07, R08, R09, KC_NO }, \
27 { R16, R17, R18, R19, R20, R21 }, \
28 { R28, R29, R30, R31, R32, R33 }, \
29 { R37, R38, R39, KC_NO, KC_NO, KC_NO }, \
30}
31
32#define LAYOUT_stack( \
33 L00, L01, L02, L03, L04, \
34 L10, L11, L12, L13, L14, L15, \
35 L22, L23, L24, L25, L26, L27, \
36 L34, L35, L36, \
37 \
38 R05, R06, R07, R08, R09, \
39 R16, R17, R18, R19, R20, R21, \
40 R28, R29, R30, R31, R32, R33, \
41 R37, R38, R39 \
42) \
43{ \
44 { L04, L03, L02, L01, L00, KC_NO }, \
45 { L15, L14, L13, L12, L11, L10 }, \
46 { L27, L26, L25, L24, L23, L22 }, \
47 { L36, L35, L34, KC_NO, KC_NO, KC_NO }, \
48 { R05, R06, R07, R08, R09, KC_NO }, \
49 { R16, R17, R18, R19, R20, R21 }, \
50 { R28, R29, R30, R31, R32, R33 }, \
51 { R37, R38, R39, KC_NO, KC_NO, KC_NO }, \
52}
diff --git a/keyboards/buzzard/rev1/rules.mk b/keyboards/buzzard/rev1/rules.mk
new file mode 100644
index 000000000..9a479c64e
--- /dev/null
+++ b/keyboards/buzzard/rev1/rules.mk
@@ -0,0 +1,3 @@
1OLED_DRIVER = SSD1306
2
3PS2_USE_INT = yes
diff --git a/keyboards/buzzard/rules.mk b/keyboards/buzzard/rules.mk
new file mode 100644
index 000000000..645081307
--- /dev/null
+++ b/keyboards/buzzard/rules.mk
@@ -0,0 +1,22 @@
1# MCU name
2MCU = atmega32u4
3
4# Bootloader selection
5BOOTLOADER = atmel-dfu
6
7# Build Options
8# change yes to no to disable
9#
10BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite
11MOUSEKEY_ENABLE = yes # Mouse keys
12EXTRAKEY_ENABLE = yes # Audio control and System control
13CONSOLE_ENABLE = no # Console for debug
14COMMAND_ENABLE = no # Commands for debug and configuration
15NKRO_ENABLE = no # Enable N-Key Rollover
16BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
17RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
18AUDIO_ENABLE = no # Audio output
19SPLIT_KEYBOARD = yes
20LTO_ENABLE = yes
21
22DEFAULT_FOLDER = buzzard/rev1