summaryrefslogtreecommitdiff
path: root/keyboards
diff options
context:
space:
mode:
Diffstat (limited to 'keyboards')
-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 0000000000..00ad12a23e
--- /dev/null
+++ b/keyboards/buzzard/buzzard.c
@@ -0,0 +1,3 @@
+// Copyright 2021 Christoph Rehmann (crehmann)
+// SPDX-License-Identifier: GPL-2.0-or-later
+#include "buzzard.h"
diff --git a/keyboards/buzzard/buzzard.h b/keyboards/buzzard/buzzard.h
new file mode 100644
index 0000000000..f094e4af39
--- /dev/null
+++ b/keyboards/buzzard/buzzard.h
@@ -0,0 +1,9 @@
+// Copyright 2021 Christoph Rehmann (crehmann)
+// SPDX-License-Identifier: GPL-2.0-or-later
+#pragma once
+
+#include "quantum.h"
+
+#if defined(KEYBOARD_buzzard_rev1)
+# include "rev1.h"
+#endif \ No newline at end of file
diff --git a/keyboards/buzzard/config.h b/keyboards/buzzard/config.h
new file mode 100644
index 0000000000..7dbbedfaf0
--- /dev/null
+++ b/keyboards/buzzard/config.h
@@ -0,0 +1,6 @@
+// Copyright 2021 Christoph Rehmann (crehmann)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#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 0000000000..a958ffdc94
--- /dev/null
+++ b/keyboards/buzzard/info.json
@@ -0,0 +1,10 @@
+{
+ "keyboard_name": "Buzzard",
+ "url": "https://github.com/crehmann/buzzard",
+ "maintainer": "crehmann",
+ "layouts": {
+ "LAYOUT": {
+ "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}]
+ }
+ }
+} \ 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 0000000000..d5d9a9bb83
--- /dev/null
+++ b/keyboards/buzzard/keymaps/crehmann/config.h
@@ -0,0 +1,38 @@
+// Copyright 2021 Christoph Rehmann (crehmann)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+// Configure the global tapping term (default: 200ms)
+#define TAPPING_TERM 200
+
+// Prevent normal rollover on alphas from accidentally triggering mods.
+#define IGNORE_MOD_TAP_INTERRUPT
+
+// Enable rapid switch from tap to hold, disables double tap hold auto-repeat.
+#define TAPPING_FORCE_HOLD
+
+// Apply the modifier on keys that are tapped during a short hold of a modtap
+#define PERMISSIVE_HOLD
+
+// Using the right side as master
+#define MASTER_RIGHT
+
+#ifdef HAPTIC_ENABLE
+// this configuration has no effect because the haptic exclusion is implemented with
+// __attribute__((weak)) bool get_haptic_enabled_key(uint16_t keycode, keyrecord_t *record)
+// in the default keymap and reacts only to mouse clicks.
+//#define NO_HAPTIC_MOD
+#define NO_HAPTIC_FN
+#define NO_HAPTIC_ALPHA
+#define NO_HAPTIC_PUNCTUATION
+#define NO_HAPTIC_NAV
+#define NO_HAPTIC_NUMERIC
+#define DRV_GREETING alert_750ms
+#define DRV_MODE_DEFAULT sharp_tick1
+#endif
+
+#ifdef PS2_MOUSE_ENABLE
+#define PS2_MOUSE_SCROLL_BTN_MASK (1<<PS2_MOUSE_BTN_RIGHT)
+#define PS2_MOUSE_SCROLL_BTN_SEND 500
+#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 0000000000..37fa2902c5
--- /dev/null
+++ b/keyboards/buzzard/keymaps/crehmann/features/haptic_utils.c
@@ -0,0 +1,42 @@
+// Copyright 2021 Christoph Rehmann (crehmann)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include "haptic_utils.h"
+
+#ifdef HAPTIC_ENABLE
+#include "drivers/haptic/DRV2605L.h"
+#endif
+
+#ifdef HAPTIC_ENABLE
+bool get_haptic_enabled_key(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case KC_BTN1 ... KC_BTN5:
+ return true;
+ break;
+ }
+
+ return false;
+}
+#endif
+
+void process_layer_pulse(layer_state_t state) {
+#ifdef HAPTIC_ENABLE
+ switch (get_highest_layer(state)) {
+ case 1:
+ DRV_pulse(soft_bump);
+ break;
+ case 2:
+ DRV_pulse(sh_dblsharp_tick);
+ break;
+ case 3:
+ DRV_pulse(lg_dblclick_str);
+ break;
+ case 4:
+ DRV_pulse(soft_bump);
+ break;
+ case 5:
+ DRV_pulse(pulsing_sharp);
+ break;
+ }
+#endif
+}
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 0000000000..ccfbb7e14b
--- /dev/null
+++ b/keyboards/buzzard/keymaps/crehmann/features/haptic_utils.h
@@ -0,0 +1,10 @@
+// Copyright 2021 Christoph Rehmann (crehmann)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#include QMK_KEYBOARD_H
+
+bool get_haptic_enabled_key(uint16_t keycode, keyrecord_t *record);
+
+void 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 0000000000..842494c60a
--- /dev/null
+++ b/keyboards/buzzard/keymaps/crehmann/keymap.c
@@ -0,0 +1,256 @@
+// Copyright 2021 Christoph Rehmann (crehmann)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+#include "keymap_german_ch.h"
+#include "features/haptic_utils.h"
+
+#ifdef PS2_MOUSE_ENABLE
+ #include "ps2_mouse.h"
+#endif
+
+enum layers {
+ _BASE = 0,
+ _NAVR,
+ _SYMB,
+ _NUMR,
+ _FUNL,
+ _MOAJ
+};
+
+
+// Aliases for readability
+#define BASE DF(_BASE)
+#define NAVR MO(_NAVR)
+#define SYMB MO(_SYMB)
+#define NUMR MO(_NUMR)
+#define FUNL MO(_FUNL)
+#define MOAD MO(_MOAJ)
+
+// Left-hand home row mods
+#define RALT_X RALT_T(KC_X)
+#define GUI_A LGUI_T(KC_A)
+#define ALT_S LALT_T(KC_S)
+#define CTL_D LCTL_T(KC_D)
+#define SFT_F LSFT_T(KC_F)
+
+// Right-hand home row mods
+#define SFT_J RSFT_T(KC_J)
+#define CTL_K RCTL_T(KC_K)
+#define ALT_L LALT_T(KC_L)
+#define GUI_SCL RGUI_T(KC_SCLN)
+#define RALT_DT RALT_T(KC_DOT)
+
+// Left-hand outer column
+#define CTL_ESC MT(MOD_LCTL, KC_ESC)
+
+// Thumbcluster
+#define UC_TL1 CTL_ESC
+#define UC_TL2 LT(NAVR, KC_SPC)
+#define UC_TL3 LT(NUMR, KC_TAB)
+
+#define UC_TR3 LT(FUNL, KC_BSPC)
+#define UC_TR2 LT(SYMB, KC_ENT)
+#define UC_TR1 KC_DEL
+
+// Shortcuts
+#define UC_COPY LCTL(KC_C)
+#define UC_PSTE LCTL(KC_V)
+#define UC_CUT LCTL(KC_X)
+#define UC_MUTE SGUI(KC_M)
+#define UC_OSFT OSM(MOD_LSFT)
+
+// clang-format off
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+// /*
+// * Base Layer
+// *
+// * ,----------------------------------. ,----------------------------------.
+// * | Q | W | E | R | T | | Z | U | I | O | P |
+// * | | | | | | | | | | | |
+// * ,------+------+------+------+------+------| |------+------+------+------+------+------.
+// * | OSM | A | S | D | F | G | | H | J | K | L | ; : | Bksp |
+// * | Shift| GUI | LALT | LCTL | LSFT | | | | LSFT | LCTL | LALT | GUI | |
+// * |------+------+------+------+------+------| |------+------+------+------+------+------|
+// * | ESC | Y | X | C | F | B | | N | M | , < | . > | / ? | Mute |
+// * | CTL | | RALT | | | | | | | | RALT | | Mic |
+// * `----------------------------------+------+-------------. ,-------------+------+----------------------------------'
+// * | ESC | Space| TAB | | Bksp| Enter| Del |
+// * | CTL | NAVR | NUMR | | FUNL| SYML | |
+// * `--------------------' `--------------------'
+// */
+ [_BASE] = LAYOUT(
+ KC_Q , KC_W , KC_E , KC_R , KC_T , CH_Z , KC_U , KC_I , KC_O , KC_P ,
+ UC_OSFT, GUI_A , ALT_S , CTL_D , SFT_F , KC_G , KC_H , SFT_J , CTL_K , ALT_L , GUI_SCL, KC_BSPC,
+ CTL_ESC, CH_Y , RALT_X , KC_C , KC_V , KC_B , KC_N , KC_M , KC_COMM, RALT_DT, KC_SLSH, UC_MUTE,
+ UC_TL1 , UC_TL2 , UC_TL3 , UC_TR3 , UC_TR2 , UC_TR1
+ ),
+
+// /*
+// * Symbol Layer
+// *
+// * ,----------------------------------. ,----------------------------------.
+// * | ` | @ | { | } | $ | | ¨ | ü | / | \ | ^ |
+// * | | | | | | | | | | | |
+// * ,------+------+------+------+------+------| |------+------+------+------+------+------.
+// * | | ä | & | ( | ) | | | | ' | " | ? | ! | + | |
+// * | | | | | | | | | | | | | |
+// * |------+------+------+------+------+------| |------+------+------+------+------+------|
+// * | | % | # | [ | ] | ~ | | € | = | * | < | > | |
+// * | | | | | | | | | | | | | |
+// * `----------------------------------+------+-------------. ,-------------+------+----------------------------------'
+// * | | | TAB | | | | |
+// * | | | | | | | |
+// * `--------------------' `--------------------'
+// */
+ [_SYMB] = LAYOUT(
+ CH_GRV , CH_AT , CH_LCBR, CH_RCBR, CH_DLR , CH_DIAE, CH_UDIA, CH_SLSH, CH_BSLS, KC_CIRC,
+ _______, CH_ADIA, CH_AMPR, CH_LPRN, CH_RPRN, CH_PIPE, CH_QUOT, CH_DQUO, CH_QUES, CH_EXLM, CH_PLUS, _______,
+ _______, CH_PERC, CH_HASH, CH_LBRC, CH_RBRC, CH_TILD, CH_EURO, CH_EQL , CH_ASTR, CH_LABK, CH_RABK, _______,
+ _______, _______, KC_TAB, _______, _______ , _______
+ ),
+
+// /*
+// * Navigation Layer (Right)
+// *
+// * ,----------------------------------. ,----------------------------------.
+// * | | | | | | |Insert| Cut | PgUp | PgDn | |
+// * | | | | | | | | | | | |
+// * ,------+------+------+------+------+------| |------+------+------+------+------+------.
+// * | | | | | | | | Copy | ← | ↑ | ↓ | → | |
+// * | | | | | | | | | | | | | |
+// * |------+------+------+------+------+------| |------+------+------+------+------+------|
+// * | | | | | | | | Paste| Home | WH_U | WH_D | End | |
+// * | | | | | | | | | | | | | |
+// * `----------------------------------+------+-------------. ,-------------+------+----------------------------------'
+// * | | | | | Bksp | | Del |
+// * | | | | | | | |
+// * `--------------------' `--------------------'
+// */
+ [_NAVR] = LAYOUT(
+ _______, _______, _______, _______, _______, KC_INS , UC_CUT , KC_PGUP, KC_PGDN, _______,
+ _______, _______, _______, _______, _______, _______, UC_COPY, KC_LEFT, KC_UP , KC_DOWN, KC_RGHT, _______,
+ _______, _______, _______, _______, _______, _______, UC_PSTE, KC_HOME, KC_WH_U, KC_WH_D, KC_END , _______,
+ _______, _______, _______, KC_BSPC, _______, _______
+ ),
+// --------------------------------------------------------------------------------------------------------------------------------------------------------
+
+// /*
+// * Number Layer (Right)
+// *
+// * ,----------------------------------. ,----------------------------------.
+// * | | | | | | | / | 7 | 8 | 9 | - |
+// * | | | | | | | | | | | |
+// * ,------+------+------+------+------+------| |------+------+------+------+------+------.
+// * | | | | | | | | * | 4 | 5 | 6 | + | |
+// * | | | | | | | | | | | | | |
+// * |------+------+------+------+------+------| |------+------+------+------+------+------|
+// * | | | | | | | | 0 | 1 | 2 | 3 | . | |
+// * | | | | | | | | | | | | | |
+// * `----------------------------------+------+-------------. ,-------------+------+----------------------------------'
+// * | | | | | Bksp | Enter| |
+// * | | | | | | | |
+// * `--------------------' `--------------------'
+// */
+ [_NUMR] = LAYOUT(
+ _______, _______, _______, _______, _______, KC_SLSH, KC_7 , KC_8 , KC_9 , KC_MINS,
+ _______, _______, _______, _______, _______, _______, KC_ASTR, KC_4 , KC_5 , KC_6 , KC_PLUS, _______,
+ _______, _______, _______, _______, _______, _______, KC_0 , KC_1 , KC_2 , KC_3 , KC_DOT , _______,
+ _______, _______, _______, KC_BSPC, KC_ENT , _______
+ ),
+
+// /*
+// * Function Layer (Left)
+// *
+// * ,----------------------------------. ,----------------------------------.
+// * | F12 | F7 | F8 | F9 | Pause| | | | | | |
+// * | | | | | | | | | | | |
+// * ,------+------+------+------+------+------| |------+------+------+------+------+------.
+// * | | F11 | F4 | F5 | F6 | PrScr| | | | | | | |
+// * | | | | | | | | | | | | | |
+// * |------+------+------+------+------+------| |------+------+------+------+------+------|
+// * | | F10 | F1 | F2 | F3 | CapsL| | | | | | | |
+// * | | | | | | | | | | | | | |
+// * `----------------------------------+------+-------------. ,-------------+------+----------------------------------'
+// * | | Space| TAB | | | | |
+// * | | | | | | | |
+// * `--------------------' `--------------------'
+// */
+ [_FUNL] = LAYOUT(
+ KC_F12 , KC_F7 , KC_F8 , KC_F9 , KC_PAUS, _______, _______, _______, _______, _______,
+ _______, KC_F11 , KC_F4 , KC_F5 , KC_F6 , KC_PSCR, _______, _______, _______, _______, _______, _______,
+ _______, KC_F10 , KC_F1 , KC_F2 , KC_F3 , KC_CAPS, _______, _______, _______, _______, _______, _______,
+ _______, KC_SPC , KC_TAB , _______, _______, _______
+ ),
+
+// /*
+// * Mouse & Adjustment Layer
+// *
+// * ,----------------------------------. ,----------------------------------.
+// * | | | | | | | | | | | |
+// * | | | | | | | | | | | |
+// * ,------+------+------+------+------+------| |------+------+------+------+------+------.
+// * | | | BTN3 | BTN2 | BTN1 | | | | | | | | |
+// * | | | | | | | | | | | | | |
+// * |------+------+------+------+------+------| |------+------+------+------+------+------|
+// * | | | Cut | Copy | Paste| | | Play |M Prev| VolDn| VolUp|M Next| |
+// * | | | | | | | | | | | | | |
+// * `----------------------------------+------+-------------. ,-------------+------+----------------------------------'
+// * | | | | | | | |
+// * | | | | | | | |
+// * `--------------------' `--------------------'
+// */
+ [_MOAJ] = LAYOUT(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, KC_BTN3, KC_BTN2, KC_BTN1, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, UC_CUT , UC_COPY, UC_PSTE, _______, KC_MPLY, KC_MPRV, KC_VOLD, KC_VOLU, KC_MNXT, _______,
+ _______, _______, _______, _______, _______, _______
+ ),
+
+// -------------------------------------------------------- TEMPLATE -------------------------------------------------------------------------------------
+// /*
+// * Layer
+// *
+// * ,----------------------------------. ,----------------------------------.
+// * | | | | | | | | | | | |
+// * | | | | | | | | | | | |
+// * ,------+------+------+------+------+------| |------+------+------+------+------+------.
+// * | | | | | | | | | | | | | |
+// * | | | | | | | | | | | | | |
+// * |------+------+------+------+------+------| |------+------+------+------+------+------|
+// * | | | | | | | | | | | | | |
+// * | | | | | | | | | | | | | |
+// * `----------------------------------+------+-------------. ,-------------+------+----------------------------------'
+// * | | | | | | | |
+// * | | | | | | | |
+// * `--------------------' `--------------------'
+// */
+// [_LAYERINDEX] = LAYOUT(
+// _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+// _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+// _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+// _______, _______, _______, _______, _______, _______
+// ),
+// --------------------------------------------------------------------------------------------------------------------------------------------------------
+};
+
+layer_state_t layer_state_set_user(layer_state_t state) {
+ process_layer_pulse(state);
+ return update_tri_layer_state(state, _NAVR, _SYMB, _MOAJ);
+}
+
+uint16_t get_tapping_term(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case GUI_A:
+ return TAPPING_TERM + 150;
+ case ALT_S:
+ return TAPPING_TERM + 50;
+ case ALT_L:
+ return TAPPING_TERM + 50;
+ case GUI_SCL:
+ return TAPPING_TERM + 150;
+ default:
+ return TAPPING_TERM;
+ }
+}
diff --git a/keyboards/buzzard/keymaps/crehmann/rules.mk b/keyboards/buzzard/keymaps/crehmann/rules.mk
new file mode 100644
index 0000000000..484e7d84a6
--- /dev/null
+++ b/keyboards/buzzard/keymaps/crehmann/rules.mk
@@ -0,0 +1,9 @@
+SRC += features/haptic_utils.c
+
+OLED_ENABLE = yes
+
+HAPTIC_ENABLE = yes
+HAPTIC_DRIVER = DRV2605L
+
+PS2_MOUSE_ENABLE = yes
+MOUSEKEY_ENABLE = yes
diff --git a/keyboards/buzzard/keymaps/default/config.h b/keyboards/buzzard/keymaps/default/config.h
new file mode 100644
index 0000000000..76294cf78a
--- /dev/null
+++ b/keyboards/buzzard/keymaps/default/config.h
@@ -0,0 +1,39 @@
+// Copyright 2021 Christoph Rehmann (crehmann)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+// Configure the global tapping term (default: 200ms)
+#define TAPPING_TERM 200
+
+// Prevent normal rollover on alphas from accidentally triggering mods.
+#define IGNORE_MOD_TAP_INTERRUPT
+
+// Enable rapid switch from tap to hold, disables double tap hold auto-repeat.
+#define TAPPING_FORCE_HOLD
+
+// Apply the modifier on keys that are tapped during a short hold of a modtap
+#define PERMISSIVE_HOLD
+
+// Using the right side as master
+#define MASTER_RIGHT
+
+#ifdef HAPTIC_ENABLE
+// this configuration has no effect because the haptic exclusion is implemented with
+// __attribute__((weak)) bool get_haptic_enabled_key(uint16_t keycode, keyrecord_t *record)
+// in the default keymap and reacts only to mouse clicks.
+//#define NO_HAPTIC_MOD
+#define NO_HAPTIC_FN
+#define NO_HAPTIC_ALPHA
+#define NO_HAPTIC_PUNCTUATION
+#define NO_HAPTIC_NAV
+#define NO_HAPTIC_NUMERIC
+#define DRV_GREETING alert_750ms
+#define DRV_MODE_DEFAULT sharp_tick1
+#endif
+
+
+#ifdef PS2_MOUSE_ENABLE
+#define PS2_MOUSE_SCROLL_BTN_MASK (1<<PS2_MOUSE_BTN_RIGHT) // using the right mouse button for scrolling (other buttons can be configured)
+#define PS2_MOUSE_SCROLL_BTN_SEND 500
+#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 0000000000..7ca3ddc7de
--- /dev/null
+++ b/keyboards/buzzard/keymaps/default/keymap.c
@@ -0,0 +1,274 @@
+/* Copyright 2021 Christoph Rehmann (crehmann)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#include QMK_KEYBOARD_H
+
+enum layers {
+ _BASE = 0,
+ _NAVR,
+ _SYMB,
+ _NUMR,
+ _FUNL,
+ _ADJL
+};
+
+
+// Aliases for readability
+#define BASE DF(_BASE)
+#define NAVR MO(_NAVR)
+#define SYMB MO(_SYMB)
+#define NUMR MO(_NUMR)
+#define FUNL MO(_FUNL)
+#define ADJL MO(_ADJL)
+
+// Left-hand home row mods
+#define RALT_X RALT_T(KC_X)
+#define GUI_A LGUI_T(KC_A)
+#define ALT_S LALT_T(KC_S)
+#define CTL_D LCTL_T(KC_D)
+#define SFT_F LSFT_T(KC_F)
+
+// Right-hand home row mods
+#define SFT_J RSFT_T(KC_J)
+#define CTL_K RCTL_T(KC_K)
+#define ALT_L LALT_T(KC_L)
+#define GUI_SCL RGUI_T(KC_SCLN)
+#define RALT_DT RALT_T(KC_DOT)
+
+// Left-hand outer column
+#define CTL_ESC MT(MOD_LCTL, KC_ESC)
+#define SFT_TAB MT(MOD_LSFT, KC_TAB)
+
+// Thumbcluster
+#define UC_TL1 KC_BTN1
+#define UC_TL2 LT(NAVR, KC_SPC)
+#define UC_TL3 LT(NUMR, KC_TAB)
+
+#define UC_TR3 LT(FUNL, KC_BSPC)
+#define UC_TR2 LT(SYMB, KC_ENT)
+#define UC_TR1 KC_BTN2
+
+// Shortcuts
+#define UC_COPY LCTL(KC_C)
+#define UC_PSTE LCTL(KC_V)
+#define UC_CUT LCTL(KC_X)
+#define UC_OSFT OSM(MOD_LSFT)
+
+// clang-format off
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+// /*
+// * Base Layer
+// *
+// * ,----------------------------------. ,----------------------------------.
+// * | Q | W | E | R | T | | Y | U | I | O | P |
+// * | | | | | | | | | | | |
+// * ,------+------+------+------+------+------| |------+------+------+------+------+------.
+// * | OSM | A | S | D | F | G | | H | J | K | L | ; : | Bksp |
+// * | Shift| GUI | LALT | LCTL | LSFT | | | | LSFT | LCTL | ALT | GUI | |
+// * |------+------+------+------+------+------| |------+------+------+------+------+------|
+// * | ESC | Z | X | C | F | B | | N | M | , < | . > | / ? | ADJL |
+// * | CTL | | RALT | | | | | | | | RALT | | |
+// * `----------------------------------+------+-------------. ,-------------+------+----------------------------------'
+// * | BTN1 | Space| TAB | | Bksp| Enter| BTN2 |
+// * | | NAVR | NUMR | | FUNL| SYML | |
+// * `--------------------' `--------------------'
+// */
+ [_BASE] = LAYOUT(
+ KC_Q , KC_W , KC_E , KC_R , KC_T , KC_Y , KC_U , KC_I , KC_O , KC_P ,
+ UC_OSFT, GUI_A , ALT_S , CTL_D , SFT_F , KC_G , KC_H , SFT_J , CTL_K , ALT_L , GUI_SCL, KC_DEL,
+ CTL_ESC, KC_Z , RALT_X , KC_C , KC_V , KC_B , KC_N , KC_M , KC_COMM, RALT_DT, KC_SLSH, ADJL ,
+ KC_BTN1, UC_TL2 , UC_TL3 , UC_TR3 , UC_TR2 , UC_TR1
+ ),
+
+// /*
+// * Navigation Layer (Right)
+// *
+// * ,----------------------------------. ,----------------------------------.
+// * | | | | | | |Insert| Cut | PgUp | PgDn | |
+// * | | | | | | | | | | | |
+// * ,------+------+------+------+------+------| |------+------+------+------+------+------.
+// * | | | | | | | | Copy | ← | ↑ | ↓ | → | |
+// * | | | | | | | | | | | | | |
+// * |------+------+------+------+------+------| |------+------+------+------+------+------|
+// * | | | | | | | | Paste| Home | WH_U | WH_D | End | |
+// * | | | | | | | | | | | | | |
+// * `----------------------------------+------+-------------. ,-------------+------+----------------------------------'
+// * | | | | | Bksp | Enter| |
+// * | | | | | | | |
+// * `--------------------' `--------------------'
+// */
+ [_NAVR] = LAYOUT(
+ _______, _______, _______, _______, _______, KC_INS , UC_CUT , KC_PGUP, KC_PGDN, _______,
+ _______, _______, _______, _______, _______, _______, UC_COPY, KC_LEFT, KC_UP , KC_DOWN, KC_RGHT, _______,
+ _______, _______, _______, _______, _______, _______, UC_PSTE, KC_HOME, KC_WH_U, KC_WH_D, KC_END , _______,
+ _______, _______, _______, KC_BSPC, KC_ENT , _______
+ ),
+// --------------------------------------------------------------------------------------------------------------------------------------------------------
+
+
+// /*
+// * Symbol Layer (Right)
+//
+// * ,----------------------------------. ,----------------------------------.
+// * | ` | ~ | | | \ | | | | / | + | = | ? |
+// * | | | | | | | | | | | |
+// * ,------+------+------+------+------+------| |------+------+------+------+------+------.
+// * | | ! | @ | # | $ | % | | ^ | & | * | ( | ) | |
+// * | | | | | | | | | | | | | |
+// * |------+------+------+------+------+------| |------+------+------+------+------+------|
+// * | | : | ; | - | [ | { | | } | ] | _ | , | . | |
+// * | | | | | | | | | | | | | |
+// * `----------------------------------+------+-------------. ,-------------+------+----------------------------------'
+// * | | Space| TAB | | Bksp | Enter| |
+// * | | | | | | | |
+// * `--------------------' `--------------------'
+// *
+ [_SYMB] = LAYOUT(
+ KC_GRV , KC_TILD, KC_PIPE, KC_BSLS, _______, _______, KC_SLSH, KC_PLUS, KC_EQL , KC_QUES,
+ _______, KC_EXLM, KC_AT , KC_HASH, KC_DLR , KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, _______,
+ _______, KC_COLN, KC_SCLN, KC_MINS, KC_LBRC, KC_LCBR, KC_RCBR, KC_RBRC, KC_UNDS, KC_COMM, KC_DOT , _______,
+ _______, KC_SPC , KC_TAB , KC_BSPC, KC_ENT , _______
+ ),
+
+// /*
+// * Number Layer (Right)
+// *
+// * ,----------------------------------. ,----------------------------------.
+// * | | | | | | | / | 7 | 8 | 9 | - |
+// * | | | | | | | | | | | |
+// * ,------+------+------+------+------+------| |------+------+------+------+------+------.
+// * | | | | | | | | * | 4 | 5 | 6 | + | |
+// * | | | | | | | | | | | | | |
+// * |------+------+------+------+------+------| |------+------+------+------+------+------|
+// * | | | | | | | | 0 | 1 | 2 | 3 | . | |
+// * | | | | | | | | | | | | | |
+// * `----------------------------------+------+-------------. ,-------------+------+----------------------------------'
+// * | | | | | Bksp | Enter| |
+// * | | | | | | | |
+// * `--------------------' `--------------------'
+// */
+ [_NUMR] = LAYOUT(
+ _______, _______, _______, _______, _______, KC_SLSH, KC_7 , KC_8 , KC_9 , KC_MINS,
+ _______, _______, _______, _______, _______, _______, KC_ASTR, KC_4 , KC_5 , KC_6 , KC_PLUS, _______,
+ _______, _______, _______, _______, _______, _______, KC_0 , KC_1 , KC_2 , KC_3 , KC_DOT , _______,
+ _______, _______, _______, KC_BSPC, KC_ENT , _______
+ ),
+
+// /*
+// * Function Layer (Left)
+// *
+// * ,----------------------------------. ,----------------------------------.
+// * | F12 | F7 | F8 | F9 | Pause| | | | | | |
+// * | | | | | | | | | | | |
+// * ,------+------+------+------+------+------| |------+------+------+------+------+------.
+// * | | F11 | F4 | F5 | F6 | PrScr| | | | | | | |
+// * | | | | | | | | | | | | | |
+// * |------+------+------+------+------+------| |------+------+------+------+------+------|
+// * | | F10 | F1 | F2 | F3 | CapsL| | | | | | | |
+// * | | | | | | | | | | | | | |
+// * `----------------------------------+------+-------------. ,-------------+------+----------------------------------'
+// * | | Space| TAB | | | | |
+// * | | | | | | | |
+// * `--------------------' `--------------------'
+// */
+ [_FUNL] = LAYOUT(
+ KC_F12 , KC_F7 , KC_F8 , KC_F9 , KC_PAUS, _______, _______, _______, _______, _______,
+ _______, KC_F11 , KC_F4 , KC_F5 , KC_F6 , KC_PSCR, _______, _______, _______, _______, _______, _______,
+ _______, KC_F10 , KC_F1 , KC_F2 , KC_F3 , KC_CAPS, _______, _______, _______, _______, _______, _______,
+ _______, KC_SPC , KC_TAB , _______, _______, _______
+ ),
+
+// /*
+// * Adjustment Layer (Left)
+// *
+// * ,----------------------------------. ,----------------------------------.
+// * | | | | | | | | | | | |
+// * | | | | | | | | | | | |
+// * ,------+------+------+------+------+------| |------+------+------+------+------+------.
+// * | |M Prev| VolDn| VolDn|M Next| | | | | | | | |
+// * | | | | | | | | | | | | | |
+// * |------+------+------+------+------+------| |------+------+------+------+------+------|
+// * | | | | Mute | Play | | | | | | | | |
+// * | | | | | | | | | | | | | |
+// * `----------------------------------+------+-------------. ,-------------+------+----------------------------------'
+// * | | Space| TAB | | | | |
+// * | | | | | | | |
+// * `--------------------' `--------------------'
+// */
+ [_ADJL] = LAYOUT(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, KC_MPRV, KC_VOLD, KC_VOLU, KC_MNXT, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, KC_MUTE, KC_MPLY, _______, _______, _______, _______, _______, _______, _______,
+ _______, KC_SPC , KC_TAB , _______, _______, _______
+ ),
+
+// -------------------------------------------------------- TEMPLATE -------------------------------------------------------------------------------------
+// /*
+// * Layer
+// *
+// * ,----------------------------------. ,----------------------------------.
+// * | | | | | | | | | | | |
+// * | | | | | | | | | | | |
+// * ,------+------+------+------+------+------| |------+------+------+------+------+------.
+// * | | | | | | | | | | | | | |
+// * | | | | | | | | | | | | | |
+// * |------+------+------+------+------+------| |------+------+------+------+------+------|
+// * | | | | | | | | | | | | | |
+// * | | | | | | | | | | | | | |
+// * `----------------------------------+------+-------------. ,-------------+------+----------------------------------'
+// * | | | | | | | |
+// * | | | | | | | |
+// * `--------------------' `--------------------'
+// */
+// [_LAYERINDEX] = LAYOUT(
+// _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+// _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+// _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+// _______, _______, _______, _______, _______, _______
+// ),
+// --------------------------------------------------------------------------------------------------------------------------------------------------------
+};
+
+// uncommint this and modify the timings if the home row mods are not working for you
+/*
+uint16_t get_tapping_term(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case GUI_A:
+ return TAPPING_TERM + 150;
+ case ALT_S:
+ return TAPPING_TERM + 50;
+ case ALT_L:
+ return TAPPING_TERM + 50;
+ case GUI_SCL:
+ return TAPPING_TERM + 150;
+ default:
+ return TAPPING_TERM;
+ }
+}
+*/
+
+#ifdef HAPTIC_ENABLE
+
+bool get_haptic_enabled_key(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case KC_BTN1 ... KC_BTN5:
+ return true;
+ break;
+ }
+
+ return false;
+}
+#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 0000000000..e8124aebb9
--- /dev/null
+++ b/keyboards/buzzard/keymaps/default/rules.mk
@@ -0,0 +1,7 @@
+OLED_ENABLE = yes # uncomment if you are using an OLED display
+
+#HAPTIC_ENABLE = yes # uncomment only on the master side if you are using a Pimoroni haptic buzz
+#HAPTIC_DRIVER = DRV2605L # uncomment only on the master side if you are using a Pimoroni haptic buzz
+
+#PS2_MOUSE_ENABLE = yes # uncomment only on the master side if you are usin a TrackPoint
+MOUSEKEY_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 0000000000..d86c2feb31
--- /dev/null
+++ b/keyboards/buzzard/readme.md
@@ -0,0 +1,29 @@
+# Buzzard
+
+![Buzzard Keyboard](https://raw.githubusercontent.com/crehmann/Buzzard/main/Pictures/build_guide_final.jpg)
+
+Buzzard 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.
+
+* Keyboard Maintainer: [crehmann](https://github.com/crehmann)
+* Hardware Supported: Pro Micro 5V/16MHz and compatible.
+* Hardware Availability: https://github.com/crehmann/Buzzard
+
+## Some Features:
+
+- 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
+- Mounting option for a linear actuator ([HapticBuzz from pimoroni](https://shop.pimoroni.com/products/drv2605l-linear-actuator-haptic-breakout))
+- I2C interface for an OLED display
+- Wireless Ready (however, without TrackPoint / linear actuator support):
+ - Battery switch / connector
+ - Option to use a battery friendly Sharp memory display instead of an OLED display
+- Choc-spaced
+
+## Building the Firmware
+
+Make example for this keyboard (after setting up your build environment):
+
+ qmk compile -kb buzzard -km default
+
+See 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).
+
+A 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 0000000000..2a7ea22ec1
--- /dev/null
+++ b/keyboards/buzzard/rev1/config.h
@@ -0,0 +1,62 @@
+// Copyright 2021 Christoph Rehmann (crehmann)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0xB077
+#define DEVICE_VER 0x0001
+#define MANUFACTURER crehmann
+#define PRODUCT Buzzard
+
+/* key matrix size */
+/* Rows are doubled up */
+#define MATRIX_ROWS 8
+#define MATRIX_COLS 6
+
+// wiring
+#define MATRIX_ROW_PINS \
+ { F4, F5, F6, F7 }
+#define MATRIX_COL_PINS \
+ { B1, B3, B2, B6, B5, B4}
+#define UNUSED_PINS
+
+/* COL2ROW, ROW2COL*/
+#define DIODE_DIRECTION COL2ROW
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCE 5
+
+/*
+ * Split Keyboard specific options, make sure you have 'SPLIT_KEYBOARD = yes' in your rules.mk, and define SOFT_SERIAL_PIN.
+ */
+#define SOFT_SERIAL_PIN D2
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+#ifdef OLED_ENABLE
+#define OLED_DISPLAY_128X32
+#define SPLIT_OLED_ENABLE
+#endif
+
+#ifdef PS2_USE_INT
+#define PS2_CLOCK_PIN E6
+#define PS2_DATA_PIN D7
+
+#define PS2_INT_INIT() do { \
+ EICRB |= ((1<<ISC61) | \
+ (0<<ISC60)); \
+ } while (0)
+#define PS2_INT_ON() do { \
+ EIMSK |= (1<<INT6); \
+} while (0)
+#define PS2_INT_OFF() do { \
+ EIMSK &= ~(1<<INT6); \
+} while (0)
+#define PS2_INT_VECT INT6_vect
+#define PS2_MOUSE_ROTATE 270 /* Compensate for East-facing device orientation. */
+#endif
diff --git a/keyboards/buzzard/rev1/rev1.c b/keyboards/buzzard/rev1/rev1.c
new file mode 100644
index 0000000000..0124a92c32
--- /dev/null
+++ b/keyboards/buzzard/rev1/rev1.c
@@ -0,0 +1,128 @@
+// Copyright 2021 Christoph Rehmann (crehmann)
+// SPDX-License-Identifier: GPL-2.0-or-later
+#include "rev1.h"
+
+#ifdef HAPTIC_ENABLE
+#include "drivers/haptic/DRV2605L.h"
+#endif
+
+#ifdef SWAP_HANDS_ENABLE
+// clang-format off
+__attribute__ ((weak)) const keypos_t PROGMEM hand_swap_config[MATRIX_ROWS][MATRIX_COLS] = {
+ {{0, 4}, {1, 4}, {2, 4}, {3, 4}, {4, 4}, {5, 4},
+ {{0, 5}, {1, 5}, {2, 5}, {3, 5}, {4, 5}, {5, 5},
+ {{0, 6}, {1, 6}, {2, 6}, {3, 6}, {4, 6}, {5, 6},
+ {{0, 7}, {1, 7}, {2, 7}, {3, 7}, {4, 7}, {5, 7},
+ {{0, 0}, {1, 0}, {2, 0}, {3, 0}, {4, 0}, {5, 0},
+ {{0, 1}, {1, 1}, {2, 1}, {3, 1}, {4, 1}, {5, 1},
+ {{0, 2}, {1, 2}, {2, 2}, {3, 2}, {4, 2}, {5, 2},
+ {{0, 3}, {1, 3}, {2, 3}, {3, 3}, {4, 3}, {5, 3}
+};
+// clang-format on
+#endif
+
+#ifdef OLED_ENABLE
+oled_rotation_t oled_init_kb(oled_rotation_t rotation) { return OLED_ROTATION_270; }
+
+bool oled_task_kb(void) {
+ if (!oled_task_user()) {
+ return false;
+ }
+
+ if (is_keyboard_master()) {
+ 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,
+ 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,
+ 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,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
+ 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,
+ 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,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
+ 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,
+ 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,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
+ 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,
+ 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,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
+ 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,
+ 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,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
+ 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,
+ 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,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
+
+ // Host Keyboard LED Status
+ led_t led_usb_state = host_keyboard_led_state();
+ oled_write_P(led_usb_state.num_lock ? PSTR(" NUM ") : PSTR(" "), false);
+ oled_write_P(led_usb_state.caps_lock ? PSTR(" CAP ") : PSTR(" "), false);
+ oled_write_P(led_usb_state.scroll_lock ? PSTR(" SCR \n\n") : PSTR(" \n\n"), false);
+
+ // Host Keyboard Layer Status
+ switch (get_highest_layer(layer_state | default_layer_state)) {
+ case 0:
+ oled_write_raw_P(base_logo, sizeof(base_logo));
+ break;
+ case 1:
+ oled_write_raw_P(nav_logo, sizeof(nav_logo));
+ break;
+ case 2:
+ oled_write_raw_P(sym_logo, sizeof(sym_logo));
+ break;
+ case 3:
+ oled_write_raw_P(num_logo, sizeof(num_logo));
+ break;
+ case 4:
+ oled_write_raw_P(fun_logo, sizeof(fun_logo));
+ break;
+ case 5:
+ oled_write_raw_P(adj_logo, sizeof(adj_logo));
+ break;
+ default:
+ oled_write_P(PSTR("---\n"), false);
+ }
+
+ } else {
+ 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,
+ 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,
+ 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,
+ 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};
+ oled_write_raw_P(buzzard_log, sizeof(buzzard_log));
+ }
+ return false;
+}
+#endif
+
+__attribute__((weak)) layer_state_t layer_state_set_user(layer_state_t state) {
+ switch (get_highest_layer(state)) {
+ case 1:
+#ifdef HAPTIC_ENABLE
+ DRV_pulse(soft_bump);
+#endif
+ break;
+ case 2:
+#ifdef HAPTIC_ENABLE
+ DRV_pulse(sh_dblsharp_tick);
+#endif
+ break;
+ case 3:
+#ifdef HAPTIC_ENABLE
+ DRV_pulse(lg_dblclick_str);
+#endif
+ break;
+ case 4:
+#ifdef HAPTIC_ENABLE
+ DRV_pulse(soft_bump);
+#endif
+ break;
+ case 5:
+#ifdef HAPTIC_ENABLE
+ DRV_pulse(pulsing_sharp);
+#endif
+ break;
+ }
+ return state;
+} \ 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 0000000000..c73e9164f0
--- /dev/null
+++ b/keyboards/buzzard/rev1/rev1.h
@@ -0,0 +1,52 @@
+// Copyright 2021 Christoph Rehmann (crehmann)
+// SPDX-License-Identifier: GPL-2.0-or-later
+#pragma once
+
+#include "buzzard.h"
+
+/* This a shortcut to help you visually see your layout.
+ *
+ * The first section contains all of the arguments representing the physical
+ * layout of the board and position of the keys.
+ *
+ * The second converts the arguments into a two-dimensional array which
+ * represents the switch matrix.
+ */
+#define LAYOUT( \
+ L00, L01, L02, L03, L04, R05, R06, R07, R08, R09, \
+ L10, L11, L12, L13, L14, L15, R16, R17, R18, R19, R20, R21, \
+ L22, L23, L24, L25, L26, L27, R28, R29, R30, R31, R32, R33, \
+ L34, L35, L36, R37, R38, R39 \
+) \
+{ \
+ { L04, L03, L02, L01, L00, KC_NO }, \
+ { L15, L14, L13, L12, L11, L10 }, \
+ { L27, L26, L25, L24, L23, L22 }, \
+ { L36, L35, L34, KC_NO, KC_NO, KC_NO }, \
+ { R05, R06, R07, R08, R09, KC_NO }, \
+ { R16, R17, R18, R19, R20, R21 }, \
+ { R28, R29, R30, R31, R32, R33 }, \
+ { R37, R38, R39, KC_NO, KC_NO, KC_NO }, \
+}
+
+#define LAYOUT_stack( \
+ L00, L01, L02, L03, L04, \
+ L10, L11, L12, L13, L14, L15, \
+ L22, L23, L24, L25, L26, L27, \
+ L34, L35, L36, \
+ \
+ R05, R06, R07, R08, R09, \
+ R16, R17, R18, R19, R20, R21, \
+ R28, R29, R30, R31, R32, R33, \
+ R37, R38, R39 \
+) \
+{ \
+ { L04, L03, L02, L01, L00, KC_NO }, \
+ { L15, L14, L13, L12, L11, L10 }, \
+ { L27, L26, L25, L24, L23, L22 }, \
+ { L36, L35, L34, KC_NO, KC_NO, KC_NO }, \
+ { R05, R06, R07, R08, R09, KC_NO }, \
+ { R16, R17, R18, R19, R20, R21 }, \
+ { R28, R29, R30, R31, R32, R33 }, \
+ { R37, R38, R39, KC_NO, KC_NO, KC_NO }, \
+}
diff --git a/keyboards/buzzard/rev1/rules.mk b/keyboards/buzzard/rev1/rules.mk
new file mode 100644
index 0000000000..9a479c64e6
--- /dev/null
+++ b/keyboards/buzzard/rev1/rules.mk
@@ -0,0 +1,3 @@
+OLED_DRIVER = SSD1306
+
+PS2_USE_INT = yes
diff --git a/keyboards/buzzard/rules.mk b/keyboards/buzzard/rules.mk
new file mode 100644
index 0000000000..6450813074
--- /dev/null
+++ b/keyboards/buzzard/rules.mk
@@ -0,0 +1,22 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+BOOTLOADER = atmel-dfu
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite
+MOUSEKEY_ENABLE = yes # Mouse keys
+EXTRAKEY_ENABLE = yes # Audio control and System control
+CONSOLE_ENABLE = no # Console for debug
+COMMAND_ENABLE = no # Commands for debug and configuration
+NKRO_ENABLE = no # Enable N-Key Rollover
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
+AUDIO_ENABLE = no # Audio output
+SPLIT_KEYBOARD = yes
+LTO_ENABLE = yes
+
+DEFAULT_FOLDER = buzzard/rev1