@ -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 | |||
![infinity81](https://i.imgur.com/9d6IcuA.jpg) | |||
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,4 +1,2 @@ | |||
EXTRAKEY_ENABLE = yes # Audio control and System control | |||
AUDIO_ENABLE = yes # Audio output | |||
include $(strip $(KEYBOARD_LOCAL_FEATURES_MK)) |
@ -1,6 +1,6 @@ | |||
SPLIT_KEYBOARD = yes | |||
# Helix Spacific Build Options default values | |||
OLED_ENABLE = no # OLED_ENABLE | |||
LOCAL_GLCDFONT = no # use each keymaps "helixfont.h" insted of "common/glcdfont.c" | |||
LED_BACK_ENABLE = no # LED backlight (Enable WS2812 RGB underlight.) | |||
LED_UNDERGLOW_ENABLE = no # LED underglow (Enable WS2812 RGB underlight.) | |||
LED_ANIMATIONS = yes # LED animations | |||
@ -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 | |||
![ID75 v2](https://i.imgur.com/KdAjS5f.jpg) | |||
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,38 @@ | |||
### fork from default layout,and support dvorak layout[defalut layer] | |||
##### only use 3 layers | |||
``` | |||
Keymap: 3 Layers | |||
----------------- | |||
stack of layers | |||
____________ precedence | |||
/ / | high | |||
31 /___________// | | |||
: _:_:_:_:_:__ | | |||
3 /___________// | --- adjust | |||
2 /___________// | --- qwerty | |||
1 /___________// | --- symb | |||
0 /___________/ | --- dvorak[default] | |||
``` | |||
defalut LED indicators | |||
RED --------- CAPS LOCK | |||
BLUE ------- SYMB layer | |||
GREEN----- QWERTY layer | |||
WHITE------ NUM LOCK *in my test case,this is inefficient on mac os* | |||
> BLUE and GREEN as a bit flag | |||
> | |||
> 0 0 | |||
| BLUE(0) | GREEN(0) | STATUS | DESCRIBE | | |||
|:-------:|:--------:|:------:|:--------------------------------------------------- | | |||
| 0 | 0 | 0 | layer 0[dvorak] is active,and blue,green led is off | | |||
| 1 | 0 | 1 | layer1[symb] is active, and blue led is on | | |||
| 0 | 1 | 2 | layer 2[qwerty] is active,and green led is on | | |||
| 1 | 1 | 3 | layer 3[adjust] is active,and blue,green led is on | |
@ -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 } \ | |||
} |