* 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 statementpull/15819/head
@ -0,0 +1,3 @@ | |||
// Copyright 2021 Christoph Rehmann (crehmann) | |||
// SPDX-License-Identifier: GPL-2.0-or-later | |||
#include "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 |
@ -0,0 +1,6 @@ | |||
// Copyright 2021 Christoph Rehmann (crehmann) | |||
// SPDX-License-Identifier: GPL-2.0-or-later | |||
#pragma once | |||
#include "config_common.h" |
@ -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}] | |||
} | |||
} | |||
} |
@ -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 |
@ -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 | |||
} |
@ -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); |
@ -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; | |||
} | |||
} |
@ -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 |
@ -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 |
@ -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 |
@ -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 |
@ -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) |
@ -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 |
@ -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; | |||
} |
@ -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 }, \ | |||
} |
@ -0,0 +1,3 @@ | |||
OLED_DRIVER = SSD1306 | |||
PS2_USE_INT = yes |
@ -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 |