commit
145dca0e49
@ -0,0 +1,126 @@ |
||||
// Copyright 2022 peepeetee (@peepeetee)
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
#pragma once |
||||
|
||||
#include "config_common.h" |
||||
|
||||
/* USB Device descriptor parameter */ |
||||
#define VENDOR_ID 0xADA0 |
||||
#define PRODUCT_ID 0x0081 |
||||
#define DEVICE_VER 0x0001 |
||||
#define MANUFACTURER Ada |
||||
#define PRODUCT infinity81 |
||||
|
||||
/* key matrix size */ |
||||
#define MATRIX_ROWS 6 |
||||
#define MATRIX_COLS 15 |
||||
|
||||
/*
|
||||
* Keyboard Matrix Assignments |
||||
* |
||||
* Change this to how you wired your keyboard |
||||
* COLS: AVR pins used for columns, left to right |
||||
* ROWS: AVR pins used for rows, top to bottom |
||||
* DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode) |
||||
* ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode) |
||||
* |
||||
*/ |
||||
#define MATRIX_ROW_PINS { B3, B2, B1, B0, F6, B7 } |
||||
#define MATRIX_COL_PINS { D1, D2, D3, D5, D4, D6, D7, B4, B5, B6, C6, C7, F5, F1, F4 } |
||||
#define UNUSED_PINS |
||||
|
||||
/* COL2ROW, ROW2COL */ |
||||
#define DIODE_DIRECTION COL2ROW |
||||
|
||||
|
||||
//#define LED_NUM_LOCK_PIN B0
|
||||
//#define LED_CAPS_LOCK_PIN B1
|
||||
//#define LED_SCROLL_LOCK_PIN B2
|
||||
//#define LED_COMPOSE_PIN B3
|
||||
//#define LED_KANA_PIN B4
|
||||
|
||||
//#define BACKLIGHT_PIN B7
|
||||
//#define BACKLIGHT_LEVELS 3
|
||||
//#define BACKLIGHT_BREATHING
|
||||
|
||||
#define RGB_DI_PIN D0 |
||||
#ifdef RGB_DI_PIN |
||||
# define RGBLED_NUM 107 |
||||
# define RGBLIGHT_HUE_STEP 8 |
||||
# define RGBLIGHT_SAT_STEP 8 |
||||
# define RGBLIGHT_VAL_STEP 8 |
||||
# define RGBLIGHT_LIMIT_VAL 255 /* The maximum brightness level */ |
||||
# define RGBLIGHT_SLEEP /* If defined, the RGB lighting will be switched off when the host goes to sleep */ |
||||
#define RGBLIGHT_EFFECT_BREATHING |
||||
#define RGBLIGHT_EFFECT_RAINBOW_MOOD |
||||
#define RGBLIGHT_EFFECT_RAINBOW_SWIRL |
||||
#define RGBLIGHT_EFFECT_SNAKE |
||||
#define RGBLIGHT_EFFECT_KNIGHT |
||||
#define RGBLIGHT_EFFECT_CHRISTMAS |
||||
#define RGBLIGHT_EFFECT_STATIC_GRADIENT |
||||
#define RGBLIGHT_EFFECT_RGB_TEST |
||||
#define RGBLIGHT_EFFECT_ALTERNATING |
||||
#define RGBLIGHT_EFFECT_TWINKLE |
||||
#endif |
||||
|
||||
/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */ |
||||
#define DEBOUNCE 5 |
||||
|
||||
/* define if matrix has ghost (lacks anti-ghosting diodes) */ |
||||
//#define MATRIX_HAS_GHOST
|
||||
|
||||
/* 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 |
||||
|
||||
/* If defined, GRAVE_ESC will always act as ESC when CTRL is held.
|
||||
* This is useful for the Windows task manager shortcut (ctrl+shift+esc). |
||||
*/ |
||||
//#define GRAVE_ESC_CTRL_OVERRIDE
|
||||
|
||||
/*
|
||||
* Force NKRO |
||||
* |
||||
* Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved |
||||
* state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the |
||||
* makefile for this to work.) |
||||
* |
||||
* If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N) |
||||
* until the next keyboard reset. |
||||
* |
||||
* NKRO may prevent your keystrokes from being detected in the BIOS, but it is |
||||
* fully operational during normal computer usage. |
||||
* |
||||
* For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N) |
||||
* or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by |
||||
* bootmagic, NKRO mode will always be enabled until it is toggled again during a |
||||
* power-up. |
||||
* |
||||
*/ |
||||
//#define FORCE_NKRO
|
||||
|
||||
/*
|
||||
* Feature disable options |
||||
* These options are also useful to firmware size reduction. |
||||
*/ |
||||
|
||||
/* disable debug print */ |
||||
//#define NO_DEBUG
|
||||
|
||||
/* disable print */ |
||||
//#define NO_PRINT
|
||||
|
||||
/* disable action features */ |
||||
//#define NO_ACTION_LAYER
|
||||
//#define NO_ACTION_TAPPING
|
||||
//#define NO_ACTION_ONESHOT
|
||||
|
||||
/* disable these deprecated features by default */ |
||||
#define NO_ACTION_MACRO |
||||
#define NO_ACTION_FUNCTION |
||||
|
||||
/* Bootmagic Lite key configuration */ |
||||
//#define BOOTMAGIC_LITE_ROW 0
|
||||
//#define BOOTMAGIC_LITE_COLUMN 0
|
@ -0,0 +1,4 @@ |
||||
// Copyright 2022 peepeetee (@peepeetee)
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
#include "infinity81.h" |
@ -0,0 +1,30 @@ |
||||
// Copyright 2022 peepeetee (@peepeetee)
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
#pragma once |
||||
|
||||
#include "quantum.h" |
||||
|
||||
/* This is 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( \ |
||||
K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, \
|
||||
K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, \
|
||||
K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K214, \
|
||||
K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K313, K314, \
|
||||
K400, K401, K402, K403, K404, K405, K406, K407, K408, K409, K410, K411, K413, K414, \
|
||||
K500, K501, K502, K505, K510, K511, K512, K513, K514 \
|
||||
) { \
|
||||
{ K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, KC_NO, KC_NO }, \
|
||||
{ K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114 }, \
|
||||
{ K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K214 }, \
|
||||
{ K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, KC_NO, K313, K314 }, \
|
||||
{ K400, K401, K402, K403, K404, K405, K406, K407, K408, K409, K410, K411, KC_NO, K413, K414 }, \
|
||||
{ K500, K501, K502, KC_NO, KC_NO, K505, KC_NO, KC_NO, KC_NO, KC_NO, K510, K511, K512, K513, K514 } \
|
||||
} |
@ -0,0 +1,92 @@ |
||||
{ |
||||
"keyboard_name": "infinity81", |
||||
"url": "", |
||||
"maintainer": "qmk", |
||||
"layouts": { |
||||
"LAYOUT": { |
||||
"layout": [ |
||||
{ "label": "K00 (B3,D1)", "x": 0, "y": 0 }, |
||||
{ "label": "K01 (B3,D2)", "x": 1.25, "y": 0 }, |
||||
{ "label": "K02 (B3,D3)", "x": 2.25, "y": 0 }, |
||||
{ "label": "K03 (B3,D5)", "x": 3.25, "y": 0 }, |
||||
{ "label": "K04 (B3,D4)", "x": 4.25, "y": 0 }, |
||||
{ "label": "K05 (B3,D6)", "x": 5.5, "y": 0 }, |
||||
{ "label": "K06 (B3,D7)", "x": 6.5, "y": 0 }, |
||||
{ "label": "K07 (B3,B4)", "x": 7.5, "y": 0 }, |
||||
{ "label": "K08 (B3,B5)", "x": 8.5, "y": 0 }, |
||||
{ "label": "K09 (B3,B6)", "x": 9.75, "y": 0 }, |
||||
{ "label": "K0A (B3,C6)", "x": 10.75, "y": 0 }, |
||||
{ "label": "K0B (B3,C7)", "x": 11.75, "y": 0 }, |
||||
{ "label": "K0C (B3,F5)", "x": 12.75, "y": 0 }, |
||||
{ "label": "K10 (B2,D1)", "x": 0, "y": 1.25 }, |
||||
{ "label": "K11 (B2,D2)", "x": 1, "y": 1.25 }, |
||||
{ "label": "K12 (B2,D3)", "x": 2, "y": 1.25 }, |
||||
{ "label": "K13 (B2,D5)", "x": 3, "y": 1.25 }, |
||||
{ "label": "K14 (B2,D4)", "x": 4, "y": 1.25 }, |
||||
{ "label": "K15 (B2,D6)", "x": 5, "y": 1.25 }, |
||||
{ "label": "K16 (B2,D7)", "x": 6, "y": 1.25 }, |
||||
{ "label": "K17 (B2,B4)", "x": 7, "y": 1.25 }, |
||||
{ "label": "K18 (B2,B5)", "x": 8, "y": 1.25 }, |
||||
{ "label": "K19 (B2,B6)", "x": 9, "y": 1.25 }, |
||||
{ "label": "K1A (B2,C6)", "x": 10, "y": 1.25 }, |
||||
{ "label": "K1B (B2,C7)", "x": 11, "y": 1.25 }, |
||||
{ "label": "K1C (B2,F5)", "x": 12, "y": 1.25 }, |
||||
{ "label": "K1D (B2,F1)", "x": 13, "y": 1.25, "w": 2 }, |
||||
{ "label": "K1E (B2,F4)", "x": 15, "y": 1.25 }, |
||||
{ "label": "K20 (B1,D1)", "x": 0, "y": 2.25, "w": 1.5 }, |
||||
{ "label": "K21 (B1,D2)", "x": 1.5, "y": 2.25 }, |
||||
{ "label": "K22 (B1,D3)", "x": 2.5, "y": 2.25 }, |
||||
{ "label": "K23 (B1,D5)", "x": 3.5, "y": 2.25 }, |
||||
{ "label": "K24 (B1,D4)", "x": 4.5, "y": 2.25 }, |
||||
{ "label": "K25 (B1,D6)", "x": 5.5, "y": 2.25 }, |
||||
{ "label": "K26 (B1,D7)", "x": 6.5, "y": 2.25 }, |
||||
{ "label": "K27 (B1,B4)", "x": 7.5, "y": 2.25 }, |
||||
{ "label": "K28 (B1,B5)", "x": 8.5, "y": 2.25 }, |
||||
{ "label": "K29 (B1,B6)", "x": 9.5, "y": 2.25 }, |
||||
{ "label": "K2A (B1,C6)", "x": 10.5, "y": 2.25 }, |
||||
{ "label": "K2B (B1,C7)", "x": 11.5, "y": 2.25 }, |
||||
{ "label": "K2C (B1,F5)", "x": 12.5, "y": 2.25 }, |
||||
{ "label": "K2D (B1,F1)", "x": 13.5, "y": 2.25, "w": 1.5 }, |
||||
{ "label": "K2E (B1,F4)", "x": 15, "y": 2.25 }, |
||||
{ "label": "K30 (B0,D1)", "x": 0, "y": 3.25, "w": 1.75 }, |
||||
{ "label": "K31 (B0,D2)", "x": 1.75, "y": 3.25 }, |
||||
{ "label": "K32 (B0,D3)", "x": 2.75, "y": 3.25 }, |
||||
{ "label": "K33 (B0,D5)", "x": 3.75, "y": 3.25 }, |
||||
{ "label": "K34 (B0,D4)", "x": 4.75, "y": 3.25 }, |
||||
{ "label": "K35 (B0,D6)", "x": 5.75, "y": 3.25 }, |
||||
{ "label": "K36 (B0,D7)", "x": 6.75, "y": 3.25 }, |
||||
{ "label": "K37 (B0,B4)", "x": 7.75, "y": 3.25 }, |
||||
{ "label": "K38 (B0,B5)", "x": 8.75, "y": 3.25 }, |
||||
{ "label": "K39 (B0,B6)", "x": 9.75, "y": 3.25 }, |
||||
{ "label": "K3A (B0,C6)", "x": 10.75, "y": 3.25 }, |
||||
{ "label": "K3B (B0,C7)", "x": 11.75, "y": 3.25 }, |
||||
{ "label": "K3D (B0,F1)", "x": 12.75, "y": 3.25, "w": 2.25 }, |
||||
{ "label": "K3E (B0,F4)", "x": 15, "y": 3.25 }, |
||||
{ "label": "K40 (F6,D1)", "x": 0, "y": 4.25, "w": 2.25 }, |
||||
{ "label": "K41 (F6,D2)", "x": 2.25, "y": 4.25 }, |
||||
{ "label": "K42 (F6,D3)", "x": 3.25, "y": 4.25 }, |
||||
{ "label": "K43 (F6,D5)", "x": 4.25, "y": 4.25 }, |
||||
{ "label": "K44 (F6,D4)", "x": 5.25, "y": 4.25 }, |
||||
{ "label": "K45 (F6,D6)", "x": 6.25, "y": 4.25 }, |
||||
{ "label": "K46 (F6,D7)", "x": 7.25, "y": 4.25 }, |
||||
{ "label": "K47 (F6,B4)", "x": 8.25, "y": 4.25 }, |
||||
{ "label": "K48 (F6,B5)", "x": 9.25, "y": 4.25 }, |
||||
{ "label": "K49 (F6,B6)", "x": 10.25, "y": 4.25 }, |
||||
{ "label": "K4A (F6,C6)", "x": 11.25, "y": 4.25 }, |
||||
{ "label": "K4B (F6,C7)", "x": 12.25, "y": 4.25, "w": 1.75 }, |
||||
{ "label": "K4D (F6,F1)", "x": 14, "y": 4.25 }, |
||||
{ "label": "K4E (F6,F4)", "x": 15, "y": 4.25 }, |
||||
{ "label": "K50 (B7,D1)", "x": 0, "y": 5.25, "w": 1.25 }, |
||||
{ "label": "K51 (B7,D2)", "x": 1.25, "y": 5.25, "w": 1.25 }, |
||||
{ "label": "K52 (B7,D3)", "x": 2.5, "y": 5.25, "w": 1.25 }, |
||||
{ "label": "K55 (B7,D6)", "x": 3.75, "y": 5.25, "w": 6.25 }, |
||||
{ "label": "K5A (B7,C6)", "x": 10, "y": 5.25, "w": 1.25 }, |
||||
{ "label": "K5B (B7,C7)", "x": 11.25, "y": 5.25, "w": 1.25 }, |
||||
{ "label": "K5C (B7,F5)", "x": 13, "y": 5.25 }, |
||||
{ "label": "K5D (B7,F1)", "x": 14, "y": 5.25 }, |
||||
{ "label": "K5E (B7,F4)", "x": 15, "y": 5.25 } |
||||
] |
||||
} |
||||
} |
||||
,"meta": "https://noroadsleft.github.io/kbf_qmk_converter/" |
||||
} |
@ -0,0 +1,23 @@ |
||||
// Copyright 2022 peepeetee (@peepeetee)
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
#include QMK_KEYBOARD_H |
||||
|
||||
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { |
||||
[0] = LAYOUT( |
||||
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, |
||||
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_DEL, |
||||
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP, |
||||
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGDN, |
||||
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_LSFT, KC_UP, MO(1), |
||||
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_LALT, KC_LCTL, KC_LEFT, KC_DOWN, KC_RGHT), |
||||
[1] = LAYOUT( |
||||
RESET, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, |
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, |
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, |
||||
KC_TRNS, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, |
||||
KC_TRNS, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, |
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS) |
||||
}; |
@ -0,0 +1 @@ |
||||
# The default keymap for infinity81 |
@ -0,0 +1,27 @@ |
||||
# infinity81 |
||||
|
||||
 |
||||
|
||||
A per key RGB 75% with blocker keyboard |
||||
|
||||
* Keyboard Maintainer: [peepeetee](https://github.com/peepeetee) |
||||
* Hardware Supported: infinity81 |
||||
* Hardware Availability: no longer avaliable - future groupbuy possible |
||||
|
||||
Make example for this keyboard (after setting up your build environment): |
||||
|
||||
make ada/infinity81:default |
||||
|
||||
Flashing example for this keyboard: |
||||
|
||||
make ada/infinity81:default:flash |
||||
|
||||
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). |
||||
|
||||
## Bootloader |
||||
|
||||
Enter the bootloader in 3 ways: |
||||
|
||||
* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard |
||||
* **Physical reset button**: Briefly press the button on the back of the PCB |
||||
* **Keycode in layout**: Press the key mapped to `RESET` if it is available |
@ -0,0 +1,18 @@ |
||||
# MCU name
|
||||
MCU = atmega32u4
|
||||
|
||||
# Bootloader selection
|
||||
BOOTLOADER = atmel-dfu
|
||||
|
||||
# Build Options
|
||||
# change yes to no to disable
|
||||
#
|
||||
BOOTMAGIC_ENABLE = yes # 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 = yes # Enable keyboard RGB underglow
|
||||
AUDIO_ENABLE = no # Audio output
|
@ -0,0 +1,44 @@ |
||||
/* Copyright 2022 evan cook <evan@evancook.audio>
|
||||
* |
||||
* 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/>.
|
||||
*/ |
||||
|
||||
#pragma once |
||||
|
||||
#include "config_common.h" |
||||
|
||||
/* USB Device descriptor parameter */ |
||||
#define VENDOR_ID 0x636F |
||||
#define PRODUCT_ID 0x0002 |
||||
#define DEVICE_VER 0x0000 |
||||
#define MANUFACTURER evancook.audio |
||||
#define PRODUCT sleepingdinosaur |
||||
|
||||
/* COL2ROW or ROW2COL */ |
||||
#define DIODE_DIRECTION COL2ROW |
||||
|
||||
/* Set 0 if debouncing isn't needed */ |
||||
#define DEBOUNCE 5 |
||||
|
||||
/* key matrix size */ |
||||
#define MATRIX_ROWS 5 |
||||
#define MATRIX_COLS 6 |
||||
|
||||
/* key matrix pins */ |
||||
|
||||
#define MATRIX_ROW_PINS {D0, D1, D4, C6, D7} |
||||
#define MATRIX_COL_PINS {F4, F5, F6, F7, B1, B3} |
||||
|
||||
#define UNUSED_PINS {B2, B6, B7, D5, C7, F1, F0, B4, E6} |
||||
|
@ -0,0 +1,44 @@ |
||||
{ |
||||
"keyboard_name": "evancook.audio sleepingdinosaur", |
||||
"url": "https://evancook.audio/", |
||||
"maintainer": "evanmcook", |
||||
"layouts": { |
||||
"LAYOUT": { |
||||
"layout": [ |
||||
{"label":"1", "x":0, "y":0}, |
||||
{"label":"2", "x":1, "y":0}, |
||||
{"label":"3", "x":2, "y":0}, |
||||
{"label":"4", "x":3, "y":0}, |
||||
{"label":"5", "x":4, "y":0}, |
||||
{"label":"-", "x":5, "y":0}, |
||||
|
||||
{"label":"6", "x":0, "y":1}, |
||||
{"label":"7", "x":1, "y":1}, |
||||
{"label":"8", "x":2, "y":1}, |
||||
{"label":"9", "x":3, "y":1}, |
||||
{"label":"0", "x":4, "y":1}, |
||||
{"label":"R", "x":5, "y":1}, |
||||
|
||||
{"label":"/", "x":0, "y":2}, |
||||
{"label":"Q", "x":1, "y":2}, |
||||
{"label":"W", "x":2, "y":2}, |
||||
{"label":"E", "x":3, "y":2}, |
||||
{"label":"U", "x":4, "y":2}, |
||||
{"label":"V", "x":5, "y":2}, |
||||
|
||||
{"label":"Enter", "x":0, "y":3, "h":2}, |
||||
{"label":"A", "x":1, "y":3}, |
||||
{"label":"S", "x":2, "y":3}, |
||||
{"label":"D", "x":3, "y":3}, |
||||
{"label":"Space", "x":4, "y":3, "h":2}, |
||||
{"label":"O", "x":5, "y":3}, |
||||
|
||||
{"label":"Z", "x":1, "y":4}, |
||||
{"label":"X", "x":2, "y":4}, |
||||
{"label":"C", "x":3, "y":4}, |
||||
{"label":"N", "x":5, "y":4} |
||||
|
||||
] |
||||
} |
||||
} |
||||
} |
@ -0,0 +1,40 @@ |
||||
/* Copyright 2022 evan cook <evan@evancook.audio>
|
||||
* |
||||
* 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 |
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { |
||||
|
||||
/* LAYER 0
|
||||
* ,-----------------------------------------------. |
||||
* | 1 | 2 | 3 | 4 | 5 | - | |
||||
* |-------+-------+-------|-------|-------|-------| |
||||
* | 6 | 7 | 8 | 9 | 0 | R | |
||||
* |-------+-------+-------|-------|-------|-------| |
||||
* | / | Q | W | E | U | V | |
||||
* -------+-------+-------|-------|-------|-------| |
||||
* | ENTER | A | S | D | SPACE | O | |
||||
* | |-------+-------+-------| |-------| |
||||
* | | Z | X | C | | N | |
||||
* ,-----------------------------------------------. |
||||
*/ |
||||
[0] = LAYOUT( |
||||
KC_1, KC_2, KC_3, KC_4, KC_5, KC_MINS, |
||||
KC_6, KC_7, KC_8, KC_9, KC_0, KC_R, |
||||
KC_SLSH, KC_Q, KC_W, KC_E, KC_U, KC_V, |
||||
KC_ENT, KC_A, KC_S, KC_D, KC_SPC, KC_O, |
||||
KC_Z, KC_X, KC_C, KC_N
|
||||
) |
||||
}; |
@ -0,0 +1,17 @@ |
||||
# tenpad macropad |
||||
|
||||
A 28 button macropad, in a format that is closest to a 5x6 grid, designed by evan cook |
||||
[Default Layout](https://raw.githubusercontent.com/evanmcook/sleepingdinosaur/main/images/layouts/sleepingdinosaurdefault.jpg) |
||||
|
||||
* Keyboard Maintainer: [evan cook](https://github.com/evanmcook/) |
||||
* Hardware Supported: sleepingdinosaur Macropad PCB |
||||
* Hardware Availability: [tenpad Github](https://github.com/evanmcook/sleepingdinosaur) |
||||
|
||||
Make example for this keyboard (after setting up your build environment): |
||||
|
||||
make evancookaudio/sleepingdinosaur: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). |
||||
|
||||
## Enter the bootloader: |
||||
* **Physical reset button**: On the underside of the board, near the USB connector and microcontroller, press and hold the small button labeled reset for more than one second to enter the bootloader. |
@ -0,0 +1,18 @@ |
||||
# MCU name
|
||||
MCU = atmega32u4
|
||||
|
||||
# Bootloader selection
|
||||
BOOTLOADER = caterina
|
||||
|
||||
# Build Options
|
||||
# change yes to no to disable
|
||||
#
|
||||
BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite
|
||||
MOUSEKEY_ENABLE = no # Mouse keys
|
||||
EXTRAKEY_ENABLE = no # Audio control and System control
|
||||
CONSOLE_ENABLE = yes # Console for debug
|
||||
COMMAND_ENABLE = yes # 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
|
@ -0,0 +1,17 @@ |
||||
/* Copyright 2022 evan cook <evan@evancook.audio>
|
||||
* |
||||
* 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 "sleepingdinosaur.h" |
@ -0,0 +1,41 @@ |
||||
/* Copyright 2022 evan cook <evan@evancook.audio>
|
||||
* |
||||
* 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/>.
|
||||
*/ |
||||
#pragma once |
||||
|
||||
#include "quantum.h" |
||||
|
||||
/* This is 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(\ |
||||
k00, k01, k02, k03, k04, k05, \
|
||||
k06, k07, k08, k09, k10, k11, \
|
||||
k12, k13, k14, k15, k16, k17, \
|
||||
k18, k19, k20, k21, k22, k23, \
|
||||
k24, k25, k26, k27 \
|
||||
) \
|
||||
{ \
|
||||
{k00, k01, k02, k03, k04, k05},\
|
||||
{k06, k07, k08, k09, k10, k11},\
|
||||
{k12, k13, k14, k15, k16, k17},\
|
||||
{k18, k19, k20, k21, k22, k23},\
|
||||
{KC_NO, k24, k25, k26, KC_NO, k27},\
|
||||
} |
@ -1,336 +0,0 @@ |
||||
/*
|
||||
Copyright 2012 Jun Wako <wakojun@gmail.com> |
||||
|
||||
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/>.
|
||||
*/ |
||||
|
||||
/*
|
||||
* scan matrix |
||||
*/ |
||||
#include <stdint.h> |
||||
#include <stdbool.h> |
||||
#include <avr/io.h> |
||||
#include <avr/wdt.h> |
||||
#include <avr/interrupt.h> |
||||
#include <util/delay.h> |
||||
#include "print.h" |
||||
#include "debug.h" |
||||
#include "util.h" |
||||
#include "matrix.h" |
||||
#include "split_util.h" |
||||
#include "quantum.h" |
||||
|
||||
#ifdef USE_MATRIX_I2C |
||||
# include "i2c.h" |
||||
#else // USE_SERIAL
|
||||
# include "serial.h" |
||||
#endif |
||||
|
||||
#ifndef DEBOUNCE |
||||
# define DEBOUNCE 5 |
||||
#endif |
||||
|
||||
#define ERROR_DISCONNECT_COUNT 5 |
||||
|
||||
static uint8_t debouncing = DEBOUNCE; |
||||
static const int ROWS_PER_HAND = MATRIX_ROWS/2; |
||||
static uint8_t error_count = 0; |
||||
|
||||
static const uint8_t row_pins[MATRIX_ROWS] = MATRIX_ROW_PINS; |
||||
static const uint8_t col_pins[MATRIX_COLS] = MATRIX_COL_PINS; |
||||
|
||||
/* matrix state(1:on, 0:off) */ |
||||
static matrix_row_t matrix[MATRIX_ROWS]; |
||||
static matrix_row_t matrix_debouncing[MATRIX_ROWS]; |
||||
|
||||
static matrix_row_t read_cols(void); |
||||
static void init_cols(void); |
||||
static void unselect_rows(void); |
||||
static void select_row(uint8_t row); |
||||
static uint8_t matrix_master_scan(void); |
||||
|
||||
|
||||
__attribute__ ((weak)) |
||||
void matrix_init_kb(void) { |
||||
matrix_init_user(); |
||||
} |
||||
|
||||
__attribute__ ((weak)) |
||||
void matrix_scan_kb(void) { |
||||
matrix_scan_user(); |
||||
} |
||||
|
||||
__attribute__ ((weak)) |
||||
void matrix_init_user(void) { |
||||
} |
||||
|
||||
__attribute__ ((weak)) |
||||
void matrix_scan_user(void) { |
||||
} |
||||
|
||||
inline |
||||
uint8_t matrix_rows(void) |
||||
{ |
||||
return MATRIX_ROWS; |
||||
} |
||||
|
||||
inline |
||||
uint8_t matrix_cols(void) |
||||
{ |
||||
return MATRIX_COLS; |
||||
} |
||||
|
||||
void matrix_init(void) |
||||
{ |
||||
split_keyboard_setup(); |
||||
|
||||
// initialize row and col
|
||||
unselect_rows(); |
||||
init_cols(); |
||||
|
||||
setPinOutput(B0); |
||||
setPinOutput(D5); |
||||
writePinHigh(B0); |
||||
writePinHigh(D5); |
||||
|
||||
// initialize matrix state: all keys off
|
||||
for (uint8_t i=0; i < MATRIX_ROWS; i++) { |
||||
matrix[i] = 0; |
||||
matrix_debouncing[i] = 0; |
||||
} |
||||
|
||||
matrix_init_quantum(); |
||||
} |
||||
|
||||
uint8_t _matrix_scan(void) |
||||
{ |
||||
// Right hand is stored after the left in the matirx so, we need to offset it
|
||||
int offset = isLeftHand ? 0 : (ROWS_PER_HAND); |
||||
|
||||
for (uint8_t i = 0; i < ROWS_PER_HAND; i++) { |
||||
select_row(i); |
||||
_delay_us(30); // without this wait read unstable value.
|
||||
matrix_row_t cols = read_cols(); |
||||
if (matrix_debouncing[i+offset] != cols) { |
||||
matrix_debouncing[i+offset] = cols; |
||||
debouncing = DEBOUNCE; |
||||
} |
||||
unselect_rows(); |
||||
} |
||||
|
||||
if (debouncing) { |
||||
if (--debouncing) { |
||||
_delay_ms(1); |
||||
} else { |
||||
for (uint8_t i = 0; i < ROWS_PER_HAND; i++) { |
||||
matrix[i+offset] = matrix_debouncing[i+offset]; |
||||
} |
||||
} |
||||
} |
||||
|
||||
return 1; |
||||
} |
||||
|
||||
#ifdef USE_MATRIX_I2C |
||||
|
||||
// Get rows from other half over i2c
|
||||
int i2c_transaction(void) { |
||||
int slaveOffset = (isLeftHand) ? (ROWS_PER_HAND) : 0; |
||||
|
||||
int err = i2c_master_start(SLAVE_I2C_ADDRESS + I2C_WRITE); |
||||
if (err) goto i2c_error; |
||||
|
||||
// start of matrix stored at 0x00
|
||||
err = i2c_master_write(0x00); |
||||
if (err) goto i2c_error; |
||||
|
||||
// Start read
|
||||
err = i2c_master_start(SLAVE_I2C_ADDRESS + I2C_READ); |
||||
if (err) goto i2c_error; |
||||
|
||||
if (!err) { |
||||
int i; |
||||
for (i = 0; i < ROWS_PER_HAND-1; ++i) { |
||||
matrix[slaveOffset+i] = i2c_master_read(I2C_ACK); |
||||
} |
||||
matrix[slaveOffset+i] = i2c_master_read(I2C_NACK); |
||||
i2c_master_stop(); |
||||
} else { |
||||
i2c_error: // the cable is disconnceted, or something else went wrong
|
||||
i2c_reset_state(); |
||||
return err; |
||||
} |
||||
|
||||
return 0; |
||||
} |
||||
|
||||
#else // USE_SERIAL
|
||||
|
||||
int serial_transaction(void) { |
||||
int slaveOffset = (isLeftHand) ? (ROWS_PER_HAND) : 0; |
||||
int ret=serial_update_buffers(); |
||||
if (ret ) { |
||||
if(ret==2) writePinLow(B0); |
||||
return 1; |
||||
} |
||||
writePinHigh(B0); |
||||
for (int i = 0; i < ROWS_PER_HAND; ++i) { |
||||
matrix[slaveOffset+i] = serial_slave_buffer[i]; |
||||
} |
||||
return 0; |
||||
} |
||||
#endif |
||||
|
||||
uint8_t matrix_scan(void) |
||||
{ |
||||
if (is_helix_master()) { |
||||
matrix_master_scan(); |
||||
}else{ |
||||
matrix_slave_scan(); |
||||
|
||||
int offset = (isLeftHand) ? ROWS_PER_HAND : 0; |
||||
|
||||
for (int i = 0; i < ROWS_PER_HAND; ++i) { |
||||
matrix[offset+i] = serial_master_buffer[i]; |
||||
} |
||||
|
||||
matrix_scan_quantum(); |
||||
} |
||||
return 1; |
||||
} |
||||
|
||||
|
||||
uint8_t matrix_master_scan(void) { |
||||
|
||||
int ret = _matrix_scan(); |
||||
|
||||
#ifndef KEYBOARD_helix_rev1 |
||||
int offset = (isLeftHand) ? 0 : ROWS_PER_HAND; |
||||
|
||||
#ifdef USE_MATRIX_I2C |
||||
// for (int i = 0; i < ROWS_PER_HAND; ++i) {
|
||||
/* i2c_slave_buffer[i] = matrix[offset+i]; */ |
||||
// i2c_slave_buffer[i] = matrix[offset+i];
|
||||
// }
|
||||
#else // USE_SERIAL
|
||||
for (int i = 0; i < ROWS_PER_HAND; ++i) { |
||||
serial_master_buffer[i] = matrix[offset+i]; |
||||
} |
||||
#endif |
||||
#endif |
||||
|
||||
#ifdef USE_MATRIX_I2C |
||||
if( i2c_transaction() ) { |
||||
#else // USE_SERIAL
|
||||
if( serial_transaction() ) { |
||||
#endif |
||||
// turn on the indicator led when halves are disconnected
|
||||
writePinLow(D5); |
||||
|
||||
error_count++; |
||||
|
||||
if (error_count > ERROR_DISCONNECT_COUNT) { |
||||
// reset other half if disconnected
|
||||
int slaveOffset = (isLeftHand) ? (ROWS_PER_HAND) : 0; |
||||
for (int i = 0; i < ROWS_PER_HAND; ++i) { |
||||
matrix[slaveOffset+i] = 0; |
||||
} |
||||
} |
||||
} else { |
||||
// turn off the indicator led on no error
|
||||
writePinHigh(D5); |
||||
error_count = 0; |
||||
} |
||||
matrix_scan_quantum(); |
||||
return ret; |
||||
} |
||||
|
||||
void matrix_slave_scan(void) { |
||||
_matrix_scan(); |
||||
|
||||
int offset = (isLeftHand) ? 0 : ROWS_PER_HAND; |
||||
|
||||
#ifdef USE_MATRIX_I2C |
||||
for (int i = 0; i < ROWS_PER_HAND; ++i) { |
||||
/* i2c_slave_buffer[i] = matrix[offset+i]; */ |
||||
i2c_slave_buffer[i] = matrix[offset+i]; |
||||
} |
||||
#else // USE_SERIAL
|
||||
for (int i = 0; i < ROWS_PER_HAND; ++i) { |
||||
serial_slave_buffer[i] = matrix[offset+i]; |
||||
} |
||||
#endif |
||||
} |
||||
|
||||
inline |
||||
bool matrix_is_on(uint8_t row, uint8_t col) |
||||
{ |
||||
return (matrix[row] & ((matrix_row_t)1<<col)); |
||||
} |
||||
|
||||
inline |
||||
matrix_row_t matrix_get_row(uint8_t row) |
||||
{ |
||||
return matrix[row]; |
||||
} |
||||
|
||||
void matrix_print(void) |
||||
{ |
||||
print("\nr/c 0123456789ABCDEF\n"); |
||||
for (uint8_t row = 0; row < MATRIX_ROWS; row++) { |
||||
print_hex8(row); print(": "); |
||||
print_bin_reverse16(matrix_get_row(row)); |
||||
print("\n"); |
||||
} |
||||
} |
||||
|
||||
uint8_t matrix_key_count(void) |
||||
{ |
||||
uint8_t count = 0; |
||||
for (uint8_t i = 0; i < MATRIX_ROWS; i++) { |
||||
count += bitpop16(matrix[i]); |
||||
} |
||||
return count; |
||||
} |
||||
|
||||
static void init_cols(void) |
||||
{ |
||||
for(int x = 0; x < MATRIX_COLS; x++) { |
||||
_SFR_IO8((col_pins[x] >> 4) + 1) &= ~_BV(col_pins[x] & 0xF); |
||||
_SFR_IO8((col_pins[x] >> 4) + 2) |= _BV(col_pins[x] & 0xF); |
||||
} |
||||
} |
||||
|
||||
static matrix_row_t read_cols(void) |
||||
{ |
||||
matrix_row_t result = 0; |
||||
for(int x = 0; x < MATRIX_COLS; x++) { |
||||
result |= (_SFR_IO8(col_pins[x] >> 4) & _BV(col_pins[x] & 0xF)) ? 0 : (1 << x); |
||||
} |
||||
return result; |
||||
} |
||||
|
||||
static void unselect_rows(void) |
||||
{ |
||||
for(int x = 0; x < ROWS_PER_HAND; x++) { |
||||
_SFR_IO8((row_pins[x] >> 4) + 1) &= ~_BV(row_pins[x] & 0xF); |
||||
_SFR_IO8((row_pins[x] >> 4) + 2) |= _BV(row_pins[x] & 0xF); |
||||
} |
||||
} |
||||
|
||||
static void select_row(uint8_t row) |
||||
{ |
||||
_SFR_IO8((row_pins[row] >> 4) + 1) |= _BV(row_pins[row] & 0xF); |
||||
_SFR_IO8((row_pins[row] >> 4) + 2) &= ~_BV(row_pins[row] & 0xF); |
||||
} |
@ -0,0 +1,42 @@ |
||||
# |
||||
# This file is not normally used. It is used for maintenance testing purposes. |
||||
# To use it, do the following: |
||||
# |
||||
# $ cp override_helix_options.mk-maintenance override_helix_options.mk |
||||
# |
||||
$(info -------------------------) |
||||
$(info override_helix_options.mk) |
||||
$(info -------------------------) |
||||
|
||||
define HELIX_OVERRIDE_PARSE |
||||
ifeq ($(strip $1),back) |
||||
LED_BACK_ENABLE = yes |
||||
LED_UNDERGLOW_ENABLE = no |
||||
endif |
||||
ifeq ($(strip $1),under) |
||||
LED_BACK_ENABLE = no |
||||
LED_UNDERGLOW_ENABLE = yes |
||||
endif |
||||
ifneq ($(filter noled led-off led_off,$(strip $1)),) |
||||
LED_BACK_ENABLE = no |
||||
LED_UNDERGLOW_ENABLE = no |
||||
endif |
||||
ifneq ($(filter noaudio audio-off audio_off,$(strip $1)),) |
||||
AUDIO_ENABLE = no |
||||
endif |
||||
ifneq ($(filter audio audio-on audio_on,$(strip $1)),) |
||||
AUDIO_ENABLE = yes |
||||
endif |
||||
ifneq ($(filter sc split-common split_common,$(strip $1)),) |
||||
SPLIT_KEYBOARD = yes |
||||
endif |
||||
ifneq ($(filter nosc no-sc no-split-common no-split_common,$(strip $1)),) |
||||
SPLIT_KEYBOARD = no |
||||
endif |
||||
ifeq ($(strip $1),scan) |
||||
DEBUG_MATRIX_SCAN_RATE_ENABLE = yes |
||||
endif |
||||
ifeq ($(strip $1),scan-api) |
||||
DEBUG_MATRIX_SCAN_RATE_ENABLE = api |
||||
endif |
||||
endef # end of HELIX_OVERRIDE_PARSE |
@ -1,104 +0,0 @@ |
||||
#include <avr/io.h> |
||||
#include <avr/wdt.h> |
||||
#include <avr/power.h> |
||||
#include <avr/interrupt.h> |
||||
#include <util/delay.h> |
||||
#include <avr/eeprom.h> |
||||
#include "split_util.h" |
||||
#include "matrix.h" |
||||
#include "keyboard.h" |
||||
#include "wait.h" |
||||
|
||||
#ifdef USE_MATRIX_I2C |
||||
# include "i2c.h" |
||||
#else |
||||
# include "serial.h" |
||||
#endif |
||||
|
||||
#ifdef EE_HANDS |
||||
# include "eeconfig.h" |
||||
#endif |
||||
|
||||
#ifndef SPLIT_USB_TIMEOUT |
||||
#define SPLIT_USB_TIMEOUT 2500 |
||||
#endif |
||||
|
||||
volatile bool isLeftHand = true; |
||||
|
||||
bool waitForUsb(void) { |
||||
for (uint8_t i = 0; i < (SPLIT_USB_TIMEOUT / 100); i++) { |
||||
// This will return true of a USB connection has been established
|
||||
if (UDADDR & _BV(ADDEN)) { |
||||
return true; |
||||
} |
||||
wait_ms(100); |
||||
} |
||||
|
||||
// Avoid NO_USB_STARTUP_CHECK - Disable USB as the previous checks seem to enable it somehow
|
||||
(USBCON &= ~(_BV(USBE) | _BV(OTGPADE))); |
||||
|
||||
return false; |
||||
} |
||||
|
||||
bool is_keyboard_left(void) { |
||||
#if defined(SPLIT_HAND_PIN) |
||||
// Test pin SPLIT_HAND_PIN for High/Low, if low it's right hand
|
||||
setPinInput(SPLIT_HAND_PIN); |
||||
return readPin(SPLIT_HAND_PIN); |
||||
#elif defined(EE_HANDS) |
||||
return eeconfig_read_handedness(); |
||||
#elif defined(MASTER_RIGHT) |
||||
return !is_helix_master(); |
||||
#endif |
||||
|
||||
return is_helix_master(); |
||||
} |
||||
|
||||
bool is_helix_master(void) { |
||||
static enum { UNKNOWN, MASTER, SLAVE } usbstate = UNKNOWN; |
||||
|
||||
// only check once, as this is called often
|
||||
if (usbstate == UNKNOWN) { |
||||
#if defined(SPLIT_USB_DETECT) |
||||
usbstate = waitForUsb() ? MASTER : SLAVE; |
||||
#elif defined(__AVR__) |
||||
USBCON |= (1 << OTGPADE); // enables VBUS pad
|
||||
wait_us(5); |
||||
|
||||
usbstate = (USBSTA & (1 << VBUS)) ? MASTER : SLAVE; // checks state of VBUS
|
||||
#else |
||||
usbstate = MASTER; |
||||
#endif |
||||
} |
||||
|
||||
return (usbstate == MASTER); |
||||
} |
||||
|
||||
static void keyboard_master_setup(void) { |
||||
|
||||
#ifdef USE_MATRIX_I2C |
||||
i2c_master_init(); |
||||
#else |
||||
serial_master_init(); |
||||
#endif |
||||
} |
||||
|
||||
static void keyboard_slave_setup(void) { |
||||
|
||||
#ifdef USE_MATRIX_I2C |
||||
i2c_slave_init(SLAVE_I2C_ADDRESS); |
||||
#else |
||||
serial_slave_init(); |
||||
#endif |
||||
} |
||||
|
||||
void split_keyboard_setup(void) { |
||||
isLeftHand = is_keyboard_left(); |
||||
|
||||
if (is_helix_master()) { |
||||
keyboard_master_setup(); |
||||
} else { |
||||
keyboard_slave_setup(); |
||||
} |
||||
sei(); |
||||
} |
@ -1,20 +0,0 @@ |
||||
#pragma once |
||||
|
||||
#include <stdbool.h> |
||||
#include "eeconfig.h" |
||||
|
||||
#define SLAVE_I2C_ADDRESS 0x32 |
||||
|
||||
extern volatile bool isLeftHand; |
||||
|
||||
// slave version of matix scan, defined in matrix.c
|
||||
void matrix_slave_scan(void); |
||||
|
||||
void split_keyboard_setup(void); |
||||
bool is_helix_master(void); |
||||
|
||||
void matrix_master_OLED_init (void); |
||||
|
||||
// stubs as this is handled by legacy code
|
||||
static inline void split_pre_init(void){} |
||||
static inline void split_post_init(void){} |
@ -0,0 +1,152 @@ |
||||
/* Copyright 2022 peepeetee
|
||||
* |
||||
* 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/>.
|
||||
*/ |
||||
|
||||
#pragma once |
||||
|
||||
#include "config_common.h" |
||||
|
||||
/* USB Device descriptor parameter */ |
||||
#define VENDOR_ID 0x6964 // ID
|
||||
#define PRODUCT_ID 0x0075 |
||||
#define DEVICE_VER 0x0002 |
||||
#define MANUFACTURER IDOBAO |
||||
#define PRODUCT ID75 |
||||
|
||||
/* key matrix size */ |
||||
#define MATRIX_ROWS 5 |
||||
#define MATRIX_COLS 15 |
||||
|
||||
/*
|
||||
* Keyboard Matrix Assignments |
||||
* |
||||
* Change this to how you wired your keyboard |
||||
* COLS: AVR pins used for columns, left to right |
||||
* ROWS: AVR pins used for rows, top to bottom |
||||
* DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode) |
||||
* ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode) |
||||
* |
||||
*/ |
||||
#define MATRIX_ROW_PINS { B0, B3, C7, B6, C6 } |
||||
#define MATRIX_COL_PINS { F6, F5, F4, F1, E6, D5, D3, D2, D1, D0, D4, D6, D7, B4, B5 } |
||||
#define UNUSED_PINS |
||||
|
||||
/* COL2ROW, ROW2COL*/ |
||||
#define DIODE_DIRECTION COL2ROW |
||||
|
||||
#undef RGB_DI_PIN |
||||
#define RGB_DI_PIN F0 |
||||
#ifdef RGB_MATRIX_ENABLE |
||||
# define DRIVER_LED_TOTAL 85 /* 10 Bottom 75 top*/ |
||||
// RGB Matrix Animation modes. Explicitly enabled
|
||||
// For full list of effects, see:
|
||||
// https://docs.qmk.fm/#/feature_rgb_matrix?id=rgb-matrix-effects
|
||||
# define RGB_MATRIX_FRAMEBUFFER_EFFECTS |
||||
# define RGB_MATRIX_KEYPRESSES |
||||
# define ENABLE_RGB_MATRIX_ALPHAS_MODS |
||||
# define ENABLE_RGB_MATRIX_GRADIENT_UP_DOWN |
||||
# define ENABLE_RGB_MATRIX_GRADIENT_LEFT_RIGHT |
||||
# define ENABLE_RGB_MATRIX_BREATHING |
||||
# define ENABLE_RGB_MATRIX_BAND_SAT |
||||
# define ENABLE_RGB_MATRIX_BAND_VAL |
||||
# define ENABLE_RGB_MATRIX_BAND_PINWHEEL_SAT |
||||
# define ENABLE_RGB_MATRIX_BAND_PINWHEEL_VAL |
||||
# define ENABLE_RGB_MATRIX_BAND_SPIRAL_SAT |
||||
# define ENABLE_RGB_MATRIX_BAND_SPIRAL_VAL |
||||
# define ENABLE_RGB_MATRIX_CYCLE_ALL |
||||
# define ENABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT |
||||
# define ENABLE_RGB_MATRIX_CYCLE_UP_DOWN |
||||
# define ENABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON |
||||
# define ENABLE_RGB_MATRIX_CYCLE_OUT_IN |
||||
# define ENABLE_RGB_MATRIX_CYCLE_OUT_IN_DUAL |
||||
# define ENABLE_RGB_MATRIX_CYCLE_PINWHEEL |
||||
// enabled only if RGB_MATRIX_FRAMEBUFFER_EFFECTS is defined
|
||||
# define ENABLE_RGB_MATRIX_TYPING_HEATMAP |
||||
# define ENABLE_RGB_MATRIX_DIGITAL_RAIN |
||||
// enabled only if RGB_MATRIX_KEYPRESSES or RGB_MATRIX_KEYRELEASES is defined
|
||||
# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE |
||||
# define ENABLE_RGB_MATRIX_SOLID_REACTIVE |
||||
# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE |
||||
# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE |
||||
# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS |
||||
# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTICROSS |
||||
# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS |
||||
# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS |
||||
# define ENABLE_RGB_MATRIX_SPLASH |
||||
# define ENABLE_RGB_MATRIX_MULTISPLASH |
||||
# define ENABLE_RGB_MATRIX_SOLID_SPLASH |
||||
# define ENABLE_RGB_MATRIX_SOLID_MULTISPLASH |
||||
#endif |
||||
|
||||
/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */ |
||||
#define DEBOUNCE 5 |
||||
|
||||
/* define if matrix has ghost (lacks anti-ghosting diodes) */ |
||||
//#define MATRIX_HAS_GHOST
|
||||
|
||||
/* number of backlight levels */ |
||||
|
||||
/* 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 |
||||
|
||||
/* If defined, GRAVE_ESC will always act as ESC when CTRL is held.
|
||||
* This is userful for the Windows task manager shortcut (ctrl+shift+esc). |
||||
*/ |
||||
// #define GRAVE_ESC_CTRL_OVERRIDE
|
||||
|
||||
/*
|
||||
* Force NKRO |
||||
* |
||||
* Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved |
||||
* state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the |
||||
* makefile for this to work.) |
||||
* |
||||
* If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N) |
||||
* until the next keyboard reset. |
||||
* |
||||
* NKRO may prevent your keystrokes from being detected in the BIOS, but it is |
||||
* fully operational during normal computer usage. |
||||
* |
||||
* For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N) |
||||
* or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by |
||||
* bootmagic, NKRO mode will always be enabled until it is toggled again during a |
||||
* power-up. |
||||
* |
||||
*/ |
||||
//#define FORCE_NKRO
|
||||
|
||||
/*
|
||||
* Feature disable options |
||||
* These options are also useful to firmware size reduction. |
||||
*/ |
||||
|
||||
/* disable debug print */ |
||||
//#define NO_DEBUG
|
||||
|
||||
/* disable print */ |
||||
//#define NO_PRINT
|
||||
|
||||
/* disable action features */ |
||||
//#define NO_ACTION_LAYER
|
||||
//#define NO_ACTION_TAPPING
|
||||
//#define NO_ACTION_ONESHOT
|
||||
//#define NO_ACTION_MACRO
|
||||
//#define NO_ACTION_FUNCTION
|
||||
|
||||
/* Bootmagic Lite key configuration */ |
||||
#define BOOTMAGIC_LITE_ROW 0 |
||||
#define BOOTMAGIC_LITE_COLUMN 0 |
@ -0,0 +1,10 @@ |
||||
{ |
||||
"keyboard_name": "idobao/id75/v2", |
||||
"url": "", |
||||
"maintainer": "qmk", |
||||
"layouts": { |
||||
"LAYOUT_ortho_5x15": { |
||||
"layout": [{"x":0, "y":0}, {"x":1, "y":0}, {"x":2, "y":0}, {"x":3, "y":0}, {"x":4, "y":0}, {"x":5, "y":0}, {"x":6, "y":0}, {"x":7, "y":0}, {"x":8, "y":0}, {"x":9, "y":0}, {"x":10, "y":0}, {"x":11, "y":0}, {"x":12, "y":0}, {"x":13, "y":0}, {"x":14, "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":6, "y":1}, {"x":7, "y":1}, {"x":8, "y":1}, {"x":9, "y":1}, {"x":10, "y":1}, {"x":11, "y":1}, {"x":12, "y":1}, {"x":13, "y":1}, {"x":14, "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":6, "y":2}, {"x":7, "y":2}, {"x":8, "y":2}, {"x":9, "y":2}, {"x":10, "y":2}, {"x":11, "y":2}, {"x":12, "y":2}, {"x":13, "y":2}, {"x":14, "y":2}, {"x":0, "y":3}, {"x":1, "y":3}, {"x":2, "y":3}, {"x":3, "y":3}, {"x":4, "y":3}, {"x":5, "y":3}, {"x":6, "y":3}, {"x":7, "y":3}, {"x":8, "y":3}, {"x":9, "y":3}, {"x":10, "y":3}, {"x":11, "y":3}, {"x":12, "y":3}, {"x":13, "y":3}, {"x":14, "y":3}, {"x":0, "y":4}, {"x":1, "y":4}, {"x":2, "y":4}, {"x":3, "y":4}, {"x":4, "y":4}, {"x":5, "y":4}, {"x":6, "y":4}, {"x":7, "y":4}, {"x":8, "y":4}, {"x":9, "y":4}, {"x":10, "y":4}, {"x":11, "y":4}, {"x":12, "y":4}, {"x":13, "y":4}, {"x":14, "y":4}] |
||||
} |
||||
} |
||||
} |
@ -0,0 +1,27 @@ |
||||
# ID75 v2 |
||||
|
||||
 |
||||
|
||||
A 5x15 ortholinear keyboard with hotswap sockets and north facing in switch RGB LEDs and RGB underglow |
||||
|
||||
* Keyboard Maintainer: [peepeetee](https://github.com/peepeetee) |
||||
* Hardware Supported: ID75 v2 |
||||
* Hardware Availability: https://idobao.net/products/idobao-id75-crystal-hot-swap-keyboard-kit?_pos=1&_sid=8758d3561&_ss=r |
||||
|
||||
Make example for this keyboard (after setting up your build environment): |
||||
|
||||
make idobao/id75/v2:default |
||||
|
||||
Flashing example for this keyboard: |
||||
|
||||
make idobao/id75/v2:default:flash |
||||
|
||||
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). |
||||
|
||||
## Bootloader |
||||
|
||||
Enter the bootloader in 3 ways: |
||||
|
||||
* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard |
||||
* **Physical reset button**: Briefly press the button on the back of the PCB |
||||
* **Keycode in layout**: Press the key mapped to `RESET` if it is available |
@ -0,0 +1,24 @@ |
||||
# MCU name
|
||||
MCU = atmega32u4
|
||||
|
||||
# Bootloader selection
|
||||
BOOTLOADER = atmel-dfu
|
||||
|
||||
# Build Options
|
||||
# change yes to no to disable
|
||||
#
|
||||
BOOTMAGIC_ENABLE = yes # 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
|
||||
LTO_ENABLE = yes # Use link time optimization
|
||||
|
||||
RGB_MATRIX_ENABLE = yes
|
||||
RGB_MATRIX_DRIVER = WS2812
|
||||
|
||||
LAYOUTS = ortho_5x15
|
@ -0,0 +1,49 @@ |
||||
/* Copyright 2022 peepeetee
|
||||
* |
||||
* 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 "v2.h" |
||||
|
||||
#ifdef RGB_MATRIX_ENABLE |
||||
led_config_t g_led_config = { { |
||||
// Key Matrix to LED Index
|
||||
{ 84, 83, 82, 81, 80, 79, 78, 77, 76, 75, 74, 73, 72, 71, 70 }, |
||||
{ 69, 68, 67, 66, 65, 64, 63, 62, 61, 60, 59, 58, 57, 56, 55 }, |
||||
{ 54, 53, 52, 51, 50, 49, 48, 47, 46, 45, 44, 43, 42, 41, 40 }, |
||||
{ 39, 38, 37, 36, 35, 34, 33, 32, 31, 30, 29, 28, 27, 26, 25 }, |
||||
{ 24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10 } |
||||
}, { |
||||
// LED Index to Physical Position
|
||||
{8, 12},{60, 12},{112, 12},{164, 12},{216, 12}, |
||||
{216, 60},{164, 60},{112, 60},{60, 60},{8, 60}, |
||||
|
||||
|
||||
{224, 64}, {208, 64}, {192, 64}, {176, 64}, {160, 64}, {144, 64}, {128, 64}, {112, 64}, {96, 64}, {80, 64}, {64, 64}, {48, 64}, {32, 64}, {16, 64}, {0, 64}, |
||||
{224, 48}, {208, 48}, {192, 48}, {176, 48}, {160, 48}, {144, 48}, {128, 48}, {112, 48}, {96, 48}, {80, 48}, {64, 48}, {48, 48}, {32, 48}, {16, 48}, {0, 48}, |
||||
{224, 32}, {208, 32}, {192, 32}, {176, 32}, {160, 32}, {144, 32}, {128, 32}, {112, 32}, {96, 32}, {80, 32}, {64, 32}, {48, 32}, {32, 32}, {16, 32}, {0, 32}, |
||||
{224, 16}, {208, 16}, {192, 16}, {176, 16}, {160, 16}, {144, 16}, {128, 16}, {112, 16}, {96, 16}, {80, 16}, {64, 16}, {48, 16}, {32, 16}, {16, 16}, {0, 16}, |
||||
{224, 0}, {208, 0}, {192, 0}, {176, 0}, {160, 0}, {144, 0}, {128, 0}, {112, 0}, {96, 0}, {80, 0}, {64, 0}, {48, 0}, {32, 0}, {16, 0}, {0, 0}, |
||||
|
||||
}, { |
||||
// LED Index to Flag
|
||||
2,2,2,2,2,2,2,2,2,2, |
||||
4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, |
||||
4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, |
||||
4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, |
||||
4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, |
||||
4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, |
||||
|
||||
} }; |
||||
|
||||
#endif |
@ -0,0 +1,41 @@ |
||||
/* Copyright 2018 MechMerlin
|
||||
* |
||||
* 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/>.
|
||||
*/ |
||||
|
||||
#pragma once |
||||
|
||||
#include "quantum.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_ortho_5x15( \ |
||||
k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C, k0D, k0E, \
|
||||
k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C, k1D, k1E, \
|
||||
k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, k2D, k2E, \
|
||||
k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3A, k3B, k3C, k3D, k3E, \
|
||||
k40, k41, k42, k43, k44, k45, k46, k47, k48, k49, k4A, k4B, k4C, k4D, k4E \
|
||||
) { \
|
||||
{ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C, k0D, k0E }, \
|
||||
{ k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C, k1D, k1E }, \
|
||||
{ k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, k2D, k2E }, \
|
||||
{ k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3A, k3B, k3C, k3D, k3E }, \
|
||||
{ k40, k41, k42, k43, k44, k45, k46, k47, k48, k49, k4A, k4B, k4C, k4D, k4E } \
|
||||
} |
@ -0,0 +1,128 @@ |
||||
/* Copyright 2021 66f94eae(66f94eae@gmail.com)
|
||||
* |
||||
* 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 |
||||
|
||||
// Each layer gets a name for readability, which is then used in the keymap matrix below.
|
||||
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
|
||||
// Layer names don't all need to be of the same length, obviously, and you can also skip them
|
||||
// entirely and just use numbers.
|
||||
enum layers { |
||||
_DVORAK, |
||||
_SYMB, |
||||
_QWERTY, |
||||
_ADJUST, |
||||
}; |
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { |
||||
|
||||
[_DVORAK] = LAYOUT( |
||||
//┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐
|
||||
KC_GESC ,KC_1 ,KC_2 ,KC_3 ,KC_4 ,KC_5 , KC_6 ,KC_7 ,KC_8 ,KC_9 ,KC_0 ,KC_BSPC , |
||||
//├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
|
||||
KC_TAB ,KC_QUOT ,KC_COMM ,KC_DOT ,KC_P ,KC_Y ,KC_LBRC, KC_RBRC ,KC_F ,KC_G ,KC_C ,KC_R ,KC_L ,KC_SLSH , |
||||
//├────────┼────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤
|
||||
KC_LCTL ,KC_A ,KC_O ,KC_E ,KC_U ,KC_I ,KC_MINS, KC_EQL ,KC_D ,KC_H ,KC_T ,KC_N ,KC_S ,KC_BSLS , |
||||
//├────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┤
|
||||
KC_LSFT ,KC_SCLN ,KC_Q ,KC_J ,KC_K ,KC_X ,KC_PGUP ,KC_HOME , KC_END ,KC_PGDN ,KC_B ,KC_M ,KC_W ,KC_V ,KC_Z ,KC_RSFT , |
||||
//├────────┼────────┼────────┼────────┼────┬───┴────┬───┼────────┼────────┤ ├────────┼────────┼───┬────┴───┬────┼────────┼────────┼────────┼────────┤
|
||||
KC_CAPS ,KC_APP ,KC_LALT ,KC_LGUI , LT(3,KC_MUTE), KC_SPC ,KC_INS , KC_DEL ,KC_ENT , KC_RALT , KC_LEFT ,KC_DOWN ,KC_UP ,KC_RGHT |
||||
//└────────┴────────┴────────┴────────┘ └────────┘ └────────┴────────┘ └────────┴────────┘ └────────┘ └────────┴────────┴────────┴────────┘
|
||||
), |
||||
|
||||
[_SYMB] = LAYOUT( |
||||
//┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐
|
||||
KC_GESC ,KC_F1 ,KC_F2 ,KC_F3 ,KC_F4 ,KC_F5 , KC_F8 ,KC_F9 ,KC_F10 ,KC_F11 ,KC_F12 ,KC_BSPC , |
||||
//├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
|
||||
KC_TAB , KC_BTN1 ,KC_MS_U ,KC_BTN2 ,KC_WH_U ,KC_COPY ,KC_F6 , KC_F7 ,KC_COPY ,KC_P7 ,KC_P8 ,KC_P9 ,KC_MPRV ,KC_PPLS , |
||||
//├────────┼────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤
|
||||
KC_LCTL ,KC_MS_L ,KC_MS_D ,KC_MS_R ,KC_WH_D ,KC_CUT ,KC_VOLD , KC_VOLU ,KC_CUT ,KC_P4 ,KC_P5 ,KC_P6 ,KC_MNXT ,KC_PMNS , |
||||
//├────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┤
|
||||
KC_LSFT ,KC_WH_L ,KC_UP ,KC_WH_R ,KC_LGUI ,KC_PSTE ,KC_WH_U ,KC_SLCK , KC_NLCK ,KC_WH_D ,KC_PSTE ,KC_P1 ,KC_P2 ,KC_P3 ,KC_PEQL ,KC_PAST , |
||||
//├────────┼────────┼────────┼────────┼────┬───┴────┬───┼────────┼────────┤ ├────────┼────────┼───┬────┴───┬────┼────────┼────────┼────────┼────────┤
|
||||
KC_CAPS ,KC_LEFT ,KC_DOWN ,KC_RGHT, LT(3,KC_MUTE) ,KC_SPC ,KC_ESC , KC_DEL ,KC_ENT , KC_APP , KC_P0 ,KC_PDOT ,KC_PENT ,KC_PSLS
|
||||
//└────────┴────────┴────────┴────────┘ └────────┘ └────────┴────────┘ └────────┴────────┘ └────────┘ └────────┴────────┴────────┴────────┘
|
||||
), |
||||
|
||||
[_QWERTY] = LAYOUT( |
||||
//┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐
|
||||
KC_GESC ,KC_1 ,KC_2 ,KC_3 ,KC_4 ,KC_5 , KC_6 ,KC_7 ,KC_8 ,KC_9 ,KC_0 ,KC_BSPC, |
||||
//├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
|
||||
KC_TAB ,KC_Q ,KC_W ,KC_E ,KC_R ,KC_T ,KC_MINS , KC_EQL ,KC_Y ,KC_U ,KC_I ,KC_O ,KC_P ,KC_BSLS , |
||||
//├────────┼────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤
|
||||
KC_LCTL ,KC_A ,KC_S ,KC_D ,KC_F ,KC_G ,KC_LBRC , KC_RBRC ,KC_H ,KC_J ,KC_K ,KC_L ,KC_SCLN ,KC_QUOT , |
||||
//├────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┤
|
||||
KC_LSFT ,KC_Z ,KC_X ,KC_C ,KC_V ,KC_B ,KC_HOME ,KC_PGUP , KC_PGDN ,KC_END ,KC_N ,KC_M ,KC_COMM ,KC_DOT ,KC_SLSH ,KC_RSFT , |
||||
//├────────┼────────┼────────┼────────┼────┬───┴────┬───┼────────┼────────┤ ├────────┼────────┼───┬────┴───┬────┼────────┼────────┼────────┼────────┤
|
||||
KC_CAPS ,KC_LGUI ,KC_LALT , KC_APP ,LT(3,KC_MUTE) , KC_SPC ,KC_INS , KC_DEL ,KC_ENT , KC_APP , KC_LEFT ,KC_UP ,KC_DOWN ,KC_RGHT |
||||
//└────────┴────────┴────────┴────────┘ └────────┘ └────────┴────────┘ └────────┴────────┘ └────────┘ └────────┴────────┴────────┴────────┘
|
||||
), |
||||
|
||||
[_ADJUST] = LAYOUT( |
||||
//┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐
|
||||
KC_GESC ,TO(0) ,TO(1) ,TO(2) ,KC_NO ,KC_NO , KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO , |
||||
//├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
|
||||
KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO , KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO , |
||||
//├────────┼────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤
|
||||
KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO , KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO , |
||||
//├────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┤
|
||||
KC_LSFT ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_RSFT , |
||||
//├────────┼────────┼────────┼────────┼────┬───┴────┬───┼────────┼────────┤ ├────────┼────────┼───┬────┴───┬────┼────────┼────────┼────────┼────────┤
|
||||
KC_NO ,KC_NO ,KC_NO ,KC_LGUI ,LT(3,KC_MUTE), KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_APP ,KC_NO ,KC_NO ,KC_NO ,KC_NO |
||||
//└────────┴────────┴────────┴────────┘ └────────┘ └────────┴────────┘ └────────┴────────┘ └────────┘ └────────┴────────┴────────┴────────┘
|
||||
) |
||||
|
||||
}; |
||||
|
||||
layer_state_t layer_state_set_user(layer_state_t state) |
||||
{ |
||||
switch (get_highest_layer(state)) { |
||||
case _DVORAK: |
||||
blu_led_off; |
||||
grn_led_off; |
||||
break; |
||||
case _SYMB: |
||||
blu_led_on; |
||||
grn_led_off; |
||||
break; |
||||
case _QWERTY: |
||||
blu_led_off; |
||||
grn_led_on; |
||||
break; |
||||
case _ADJUST: |
||||
blu_led_on; |
||||
grn_led_on; |
||||
break; |
||||
default: |
||||
break; |
||||
} |
||||
return state; |
||||
} |
||||
|
||||
bool led_update_user(led_t led_state) |
||||
{ |
||||
if (led_state.caps_lock) { |
||||
red_led_on; |
||||
} else { |
||||
red_led_off; |
||||
} |
||||
if (led_state.num_lock) { |
||||
wht_led_on; |
||||
} else { |
||||
wht_led_off; |
||||
} |
||||
return false; |
||||
} |
@ -0,0 +1,69 @@ |
||||
/* Copyright 2021 takashicompany
|
||||
* |
||||
* 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 |
||||
#include "keymap_jp.h" |
||||
|
||||
// Defines the keycodes used by our macros in process_record_user
|
||||
enum custom_keycodes { |
||||
KC_00 = USER00, |
||||
}; |
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { |
||||
|
||||
LAYOUT( |
||||
KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS, KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_JYEN, KC_BSPC, KC_DEL, |
||||
KC_P7, KC_P8, KC_P9, KC_PPLS, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_ENT, KC_HOME, |
||||
KC_P4, KC_P5, KC_P6, KC_PCMM,KC_LCTL, KC_A, KC_S, LT(2, KC_D), KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_END, |
||||
KC_P1, KC_P2, KC_P3, KC_PEQL, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, JP_BSLS, KC_UP, KC_RSFT, KC_PGUP, |
||||
KC_P0, KC_00, KC_PDOT, KC_PENT, KC_LCTL, KC_LGUI, KC_LALT, LALT_T(KC_LANG2), LALT_T(KC_LANG2), LSFT_T(KC_TAB), KC_SPC, LT(1, KC_LANG1), KC_RALT, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, MO(3) |
||||
), |
||||
|
||||
LAYOUT( |
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_EQL, KC_LBRC, KC_SLSH, KC_MINS, KC_RO, KC_SCLN, KC_QUOT, KC_RBRC, KC_NUHS, KC_JYEN, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS |
||||
), |
||||
|
||||
LAYOUT( |
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS |
||||
), |
||||
|
||||
LAYOUT( |
||||
KC_NLCK, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_TRNS, KC_TRNS, KC_TRNS, |
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_TOG, RGB_MOD, RGB_HUI, RGB_SAI, RGB_VAI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, |
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_M_P, RGB_M_B, RGB_M_R, RGB_M_SW, RGB_M_SN, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, |
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_M_K, RGB_M_X, RGB_M_G, RGB_M_T, RGB_M_T, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_CAPS, |
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS |
||||
) |
||||
|
||||
}; |
||||
|
||||
bool process_record_user(uint16_t keycode, keyrecord_t *record) { |
||||
switch (keycode) { |
||||
case KC_00: |
||||
if (record->event.pressed) { |
||||
SEND_STRING("00"); |
||||
} |
||||
return false; |
||||
} |
||||
return true; |
||||
} |
@ -0,0 +1 @@ |
||||
VIA_ENABLE = yes
|
@ -0,0 +1,61 @@ |
||||
/*
|
||||
Copyright 2020 <contact@vwolf.be> |
||||
|
||||
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/>.
|
||||
*/ |
||||
|
||||
#pragma once |
||||
|
||||
#include "config_common.h" |
||||
|
||||
/* USB Device descriptor parameter */ |
||||
#define VENDOR_ID 0x5453 // TS - ToastyStoemp
|
||||
#define PRODUCT_ID 0x0055 // Sabre
|
||||
#define DEVICE_VER 0x0001 // Version 1
|
||||
#define MANUFACTURER ToastyStoemp |
||||
#define PRODUCT Sabre |
||||
|
||||
/* key matrix size */ |
||||
#define MATRIX_ROWS 12 |
||||
#define MATRIX_COLS 9 |
||||
|
||||
/*
|
||||
* Keyboard Matrix Assignments |
||||
* |
||||
* Change this to how you wired your keyboard |
||||
* COLS: AVR pins used for columns, left to right |
||||
* ROWS: AVR pins used for rows, top to bottom |
||||
* DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode) |
||||
* ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode) |
||||
* |
||||
*/ |
||||
|
||||
// Checked with Eagle Schematic
|
||||
#define MATRIX_ROW_PINS { D0, D1, F1, F0, B5, B6, C7, C6, F6, F7, F4, F5 } |
||||
#define MATRIX_COL_PINS { D2, D3, D5, D4, D6, D7, B4, B2, B1 } |
||||
#define UNUSED_PINS |
||||
|
||||
/* COL2ROW or ROW2COL */ |
||||
#define DIODE_DIRECTION COL2ROW |
||||
|
||||
/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */ |
||||
#define DEBOUNCE 5 |
||||
|
||||
#define BACKLIGHT_PIN B7 |
||||
|
||||
#define LED_CAPS_LOCK_PIN B3 |
||||
#define LED_SCROLL_LOCK_PIN B0 |
||||
|
||||
#define NO_ACTION_MACRO |
||||
#define NO_ACTION_FUNCTION |
@ -0,0 +1,10 @@ |
||||
{ |
||||
"keyboard_name": "Sabre", |
||||
"url": "", |
||||
"maintainer": "ToastyStoemp", |
||||
"layouts": { |
||||
"LAYOUT": { |
||||
"layout": [{"label":"Esc", "x":0, "y":0}, {"label":"F1", "x":2, "y":0}, {"label":"F2", "x":3, "y":0}, {"label":"F3", "x":4, "y":0}, {"label":"F4", "x":5, "y":0}, {"label":"F5", "x":8.25, "y":0}, {"label":"PrtSc", "x":17.25, "y":0}, {"label":"Scroll Lock", "x":18.25, "y":0}, {"label":"Pause", "x":19.25, "y":0}, {"label":"\u00ac", "x":0, "y":1.25}, {"label":"!", "x":1, "y":1.25}, {"label":"\"", "x":2, "y":1.25}, {"label":"\u00a3", "x":3, "y":1.25}, {"label":"$", "x":4, "y":1.25}, {"label":"%", "x":5, "y":1.25}, {"label":"^", "x":6, "y":1.25}, {"label":"Insert", "x":17.25, "y":1.25}, {"label":"Home", "x":18.25, "y":1.25}, {"label":"PgUp", "x":19.25, "y":1.25}, {"label":"Tab", "x":0, "y":2.25, "w":1.5}, {"label":"Q", "x":1.5, "y":2.25}, {"label":"W", "x":2.5, "y":2.25}, {"label":"E", "x":3.5, "y":2.25}, {"label":"R", "x":4.5, "y":2.25}, {"label":"T", "x":5.5, "y":2.25}, {"label":"Delete", "x":17.25, "y":2.25}, {"label":"End", "x":18.25, "y":2.25}, {"label":"PgDn", "x":19.25, "y":2.25}, {"label":"Caps Lock", "x":0, "y":3.25, "w":1.75}, {"label":"A", "x":1.75, "y":3.25}, {"label":"S", "x":2.75, "y":3.25}, {"label":"D", "x":3.75, "y":3.25}, {"label":"F", "x":4.75, "y":3.25}, {"label":"G", "x":5.75, "y":3.25}, {"label":"Shift", "x":0, "y":4.25, "w":2.25}, {"label":"Z", "x":2.25, "y":4.25}, {"label":"X", "x":3.25, "y":4.25}, {"label":"C", "x":4.25, "y":4.25}, {"label":"V", "x":5.25, "y":4.25}, {"label":"B", "x":6.25, "y":4.25}, {"label":"\u2191", "x":18.25, "y":4.25}, {"label":"Ctrl", "x":0, "y":5.25, "w":1.5}, {"label":"Win", "x":2.5, "y":5.25, "w":1.5}, {"label":"Alt", "x":4, "y":5.25}, {"x":5, "y":5.25, "w":2.25}, {"label":"\u2190", "x":17.25, "y":5.25}, {"label":"\u2193", "x":18.25, "y":5.25}, {"label":"\u2192", "x":19.25, "y":5.25}, {"label":"F6", "x":-7.75, "y":6.25}, {"label":"F7", "x":-6.75, "y":6.25}, {"label":"F8", "x":-5.75, "y":6.25}, {"label":"F9", "x":-4.5, "y":6.25}, {"label":"F10", "x":-3.5, "y":6.25}, {"label":"F11", "x":-2.5, "y":6.25}, {"label":"F12", "x":-1.5, "y":6.25}, {"label":"&", "x":-8.5, "y":7.5}, {"label":"*", "x":-7.5, "y":7.5}, {"label":"(", "x":-6.5, "y":7.5}, {"label":")", "x":-5.5, "y":7.5}, {"label":"_", "x":-4.5, "y":7.5}, {"label":"+", "x":-3.5, "y":7.5}, {"label":"BackSpace", "x":-2.5, "y":7.5, "w":2}, {"label":"Y", "x":-9.0, "y":8.5}, {"label":"U", "x":-8, "y":8.5}, {"label":"I", "x":-7.0, "y":8.5}, {"label":"O", "x":-6, "y":8.5}, {"label":"P", "x":-5.0, "y":8.5}, {"label":"{", "x":-4, "y":8.5}, {"label":"}", "x":-3.0, "y":8.5}, {"label":"|", "x":-2, "y":8.5, "w":1.5}, {"label":"H", "x":-8.75, "y":9.5}, {"label":"J", "x":-7.75, "y":9.5}, {"label":"K", "x":-6.75, "y":9.5}, {"label":"L", "x":-5.75, "y":9.5}, {"label":":", "x":-4.75, "y":9.5}, {"label":"@", "x":-3.75, "y":9.5}, {"label":"Enter", "x":-2.75, "y":9.5, "w":2.25}, {"label":"B", "x":-9.25, "y":10.5}, {"label":"N", "x":-8.25, "y":10.5}, {"label":"M", "x":-7.25, "y":10.5}, {"label":"<", "x":-6.25, "y":10.5}, {"label":">", "x":-5.25, "y":10.5}, {"label":"?", "x":-4.25, "y":10.5}, {"label":"Shift", "x":-3.25, "y":10.5, "w":1.75}, {"x":-1.5, "y":10.5}, {"x":-9.25, "y":11.5, "w":2.75}, {"label":"<", "x":-6.5, "y":11.5}, {"label":"Alt", "x":-5.5, "y":11.5, "w":1.5}, {"label":"Ctrl", "x":-3.0, "y":11.5, "w":1.5}] |
||||
} |
||||
} |
||||
} |
@ -0,0 +1,41 @@ |
||||
/*
|
||||
Copyright 2020 <contact@vwolf.be> |
||||
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 { |
||||
_LAYER0, |
||||
_LAYER1 |
||||
}; |
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { |
||||
|
||||
[_LAYER0] = LAYOUT( |
||||
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_PAUS, |
||||
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, |
||||
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN, |
||||
KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, |
||||
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1), KC_UP, |
||||
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_RALT, KC_RGUI, KC_RCTRL, KC_LEFT, KC_DOWN, KC_RGHT |
||||
), |
||||
|
||||
[_LAYER1] = LAYOUT( |
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, |
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, |
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, |
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, |
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RESET, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, BL_INC, |
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, BL_TOGG, BL_DEC, BL_BRTG |
||||
) |
||||
}; |
@ -0,0 +1,61 @@ |
||||
/*
|
||||
Copyright 2020 <contact@vwolf.be> |
||||
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 { |
||||
_LAYER0, |
||||
_LAYER1, |
||||
_LAYER2, |
||||
_LAYER3 |
||||
}; |
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { |
||||
|
||||
[_LAYER0] = LAYOUT( |
||||
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_PAUS, |
||||
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, |
||||
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN, |
||||
KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, |
||||
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1), KC_UP, |
||||
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_RALT, KC_RGUI, KC_RCTRL, KC_LEFT, KC_DOWN, KC_RGHT |
||||
), |
||||
|
||||
[_LAYER1] = LAYOUT( |
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, |
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, |
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, |
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, |
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RESET, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, BL_INC, |
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, BL_TOGG, BL_DEC, BL_BRTG |
||||
), |
||||
|
||||
[_LAYER2] = LAYOUT( |
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, |
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, |
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, |
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, |
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, |
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS |
||||
), |
||||
|
||||
[_LAYER3] = LAYOUT( |
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, |
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, |
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, |
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, |
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, |
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS |
||||
) |
||||
}; |
@ -0,0 +1 @@ |
||||
VIA_ENABLE = yes
|
@ -0,0 +1,21 @@ |
||||
# Sabre |
||||
|
||||
The following is the QMK Firmware for the Sabre PCB. |
||||
|
||||
The PCB features: |
||||
* QMK & VIA compatibility |
||||
|
||||
--- |
||||
|
||||
* Keyboard Maintainer: [ToastyStoemp](https://github.com/ToastyStoemp) |
||||
|
||||
Make example for this keyboard (after setting up your build environment): |
||||
|
||||
make wolf/sabre: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). |
||||
|
||||
## Bootloader Enter the bootloader in 3 ways: |
||||
* **Bootmagic reset**: Hold down the key ESC key and plug in the keyboard (Top Left most switch) |
||||
* **Physical reset button**: Briefly press the button on the back of the PCB |
||||
* **Keycode in layout**: Press the B key on layer 1 which is mapped to `RESET` |
@ -0,0 +1,23 @@ |
||||
# MCU name
|
||||
MCU = atmega32u4
|
||||
|
||||
# Processor frequency
|
||||
F_CPU = 8000000
|
||||
|
||||
# Bootloader selection
|
||||
BOOTLOADER = atmel-dfu
|
||||
|
||||
# Build Options
|
||||
# change yes to no to disable
|
||||
#
|
||||
BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite
|
||||
MOUSEKEY_ENABLE = no # 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 = yes # USB Nkey Rollover
|
||||
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
|
||||
RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
|
||||
AUDIO_ENABLE = no # Audio output
|
||||
BACKLIGHT_ENABLE = yes
|
||||
BACKLIGHT_DRIVER = pwm
|
@ -0,0 +1,14 @@ |
||||
/*
|
||||
Copyright 2020 <contact@vwolf.be> |
||||
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 "sabre.h" |
@ -0,0 +1,40 @@ |
||||
/*
|
||||
Copyright 2020 <contact@vwolf.be> |
||||
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/>.
|
||||
*/ |
||||
|
||||
#pragma once |
||||
|
||||
#include "quantum.h" |
||||
|
||||
/* sabre Keymap Definitions */ |
||||
#define LAYOUT( \ |
||||
K00, K01, K11, K02, K12, K13, K04, K14, K05, K15, K06, K16, K07, K17, K08, K18, \
|
||||
K20, K30, K21, K31, K22, K32, K23, K33, K24, K34, K25, K35, K26, K36, K37, K28, K38, \
|
||||
K40, K50, K41, K51, K42, K52, K43, K53, K44, K54, K45, K55, K46, K56, K57, K48, K58, \
|
||||
K60, K70, K61, K71, K62, K72, K63, K73, K64, K74, K65, K75, K76, \
|
||||
K80, K90, K81, K91, K82, K92, K83, K93, K84, K94, K85, K95, K86, K96, K88, \
|
||||
KA0, KB0, KA1, KA2, KB3, KB4, KA5, KA6, KB7, KA8, KB8 \
|
||||
) { \
|
||||
{ K00, K01, K02, KC_NO, K04, K05, K06, K07, K08 }, \
|
||||
{ KC_NO, K11, K12, K13, K14, K15, K16, K17, K18 }, \
|
||||
{ K20, K21, K22, K23, K24, K25, K26, KC_NO, K28 }, \
|
||||
{ K30, K31, K32, K33, K34, K35, K36, K37, K38 }, \
|
||||
{ K40, K41, K42, K43, K44, K45, K46, KC_NO, K48 }, \
|
||||
{ K50, K51, K52, K53, K54, K55, K56, K57, K58 }, \
|
||||
{ K60, K61, K62, K63, K64, K65, KC_NO, KC_NO, KC_NO }, \
|
||||
{ K70, K71, K72, K73, K74, K75, K76, KC_NO, KC_NO }, \
|
||||
{ K80, K81, K82, K83, K84, K85, K86, KC_NO, K88 }, \
|
||||
{ K90, K91, K92, K93, K94, K95, K96, KC_NO, KC_NO }, \
|
||||
{ KA0, KA1, KA2, KC_NO, KC_NO, KA5, KA6, KC_NO, KA8 }, \
|
||||
{ KB0, KC_NO, KC_NO, KB3, KB4, KC_NO, KC_NO, KB7, KB8 } \
|
||||
} |
Loading…
Reference in new issue