Compare commits

..

40 Commits

Author SHA1 Message Date
Erik Berthold
2c8d46f408 fix RGB_DISABLE_TIMEOUT flicker on split keyboards (#14954) 2021-12-27 13:50:44 +11:00
Álvaro A. Volpato
4eb6d19530 Add Gondolindrim's keymap for Evolv: addition of "encoder modes" (#14943)
* Update encoder callback

* Move encoder callback

- Encoder callback function was moved from ``encoder_update_user`` in ``keymap.c`` to ``encoder_update_kb`` in ``keyboard.c``

* Update keyboards/evolv/rules.mk

Co-authored-by: Ryan <fauxpark@gmail.com>

* Use tap_code() on encoder callback

Co-authored-by: Ryan <fauxpark@gmail.com>

* Use tap_code_delay

* Minor readability changes

Co-authored-by: Ryan <fauxpark@gmail.com>
Co-authored-by: Nick Brassel <nick@tzarc.org>
2021-12-27 13:46:53 +11:00
Jakub Horák
743f780221 [Keymap] Add keymap for the Keychron Q1 ISO layout (#14853)
* Add keymap for the Keychron Q1 ISO layout

- The rightest key column is: Ins, Home, PgUp, PgDn, which differs from the default.
- RGB lighting turns off when the computer sleeps
- Caps Lock and alpha keys turn red to indicate when Caps Lock is on
- When the Fn layer is active, RGB lighting turns off for keys that are not assigned

* Update keyboards/keychron/q1/rev_0102/keymaps/kubahorak/rgb_matrix_user.c

Suggestion from review

Co-authored-by: Drashna Jaelre <drashna@live.com>

Co-authored-by: Drashna Jaelre <drashna@live.com>
2021-12-27 13:42:01 +11:00
Derek Hsu
093d5c9991 [Keyboard] Add Runner3680 with 5x6+5x8 layout (#14617)
* [Keyboard] Add Runner3680 keyboard with 5x6 + 5x8 layout

* [Keymap] Use general audio key codes instead of MacOS specific ones

* [Keymap] Add via support

* [Keyboard] Add config for RGB Matrix feature for runner3680 5x6+5x8 layout

* Add license to .c and .h files

* Remove unused code

* [Keymap] Rename 'JIS' directory to be lower cased

* [Keyboard] Explicitly define enabled RGB lighting effects for Runner3680

* [Keyboard] Remove unused code of Runner3680

* [Keyboard] Move RGB Matrix related config to keyboard's rules.mk file

* [Keymap] Clean up default keymaps of Runner3680
2021-12-27 13:39:57 +11:00
cdc-mkb
51be57c287 [Keyboard] Add MNT Reform USB Keyboard (Standalone) (#15561)
Co-authored-by: Drashna Jaelre <drashna@live.com>

Co-authored-by: Drashna Jaelre <drashna@live.com>
2021-12-27 12:00:06 +11:00
mechlovin
94fe31609e [Keyboard] Add LZ erGhost (#15451)
Co-authored-by: Drashna Jaelre <drashna@live.com>
Co-authored-by: Ryan <fauxpark@gmail.com>
2021-12-24 17:47:35 -08:00
peepeetee
e1303a30d2 [Keyboard] Add KPrepublic bm980hsrgb support (#14724)
Co-authored-by: Joel Challis <git@zvecr.com>
Co-authored-by: Drashna Jaelre <drashna@live.com>
Co-authored-by: Ryan <fauxpark@gmail.com>
2021-12-24 17:47:21 -08:00
Arturo Avila
36db7457b2 [Keyboard] Add Kintsugi keyboard (#15439) 2021-12-24 17:33:47 -08:00
minibois
17c8771000 [Keyboard] Add mini_ten_key_plus (#15568)
Co-authored-by: Drashna Jaelre <drashna@live.com>
Co-authored-by: Ryan <fauxpark@gmail.com>
2021-12-24 17:27:16 -08:00
jonavin
57a1d04d38 [Keymap] Jonavin kbd 67 keymap with advance RGB functions (#15527)
Co-authored-by: Jonavin <=>
2021-12-24 17:23:24 -08:00
Ibnu Daru Aji
95d08b4636 [Keyboard] Add Gurindam (#15540)
Co-authored-by: Drashna Jaelre <drashna@live.com>
2021-12-24 17:22:46 -08:00
peepeetee
34a7b435cd [Keyboard] Add KPrepublic BM60hsrgb_iso/rev2, acting in lieu of @bdtc123 (#15095)
Co-authored-by: Ryan <fauxpark@gmail.com>
2021-12-24 17:18:27 -08:00
peepeetee
53996a78b5 [Keyboard] Add bm60hsrgb_poker/rev2, a continuation of #15001 (#15103)
Co-authored-by: Ryan <fauxpark@gmail.com>
2021-12-24 17:17:48 -08:00
Scott Chow
1e28667ef8 [Docs] Fixed keycode reference for swirl effect (#15564) 2021-12-24 17:12:33 -08:00
Chris Broekema
c4b03509da Save a single byte of memory for joystick buttons (#15555)
Co-authored-by: Joel Challis <git@zvecr.com>
2021-12-24 14:31:15 -08:00
Ian C
435fa2c391 fix typo (#15569) 2021-12-24 20:10:12 +00:00
Drashna Jaelre
db149052c3 [Keyboard] Fix compilation issues for Pearlboards (#15562) 2021-12-23 16:38:53 -08:00
Andrzej Kotulski
d563ab052e [Keyboard] Add dactyl manuform 4x6 with a 5 key thumb cluster (#15516)
Co-authored-by: Drashna Jaelre <drashna@live.com>
2021-12-23 16:37:03 -08:00
Koobaczech
e804e28e8e [Keyboard] Add Pearlboards boards to directory (#15005)
Co-authored-by: Ryan <fauxpark@gmail.com>
2021-12-23 13:43:10 -08:00
-pacer-
e9d1a711b4 [Keyboard] Fixed caps lock led pin for crazy_keyboard_68 (#15539) 2021-12-22 09:45:34 -08:00
ExtReMLapin
021eda3790 [Keymap][CRKBD/SOUNDMONSTER] Fixed compilation (forgot return) (#15554) 2021-12-22 09:08:18 -08:00
Thomas Lorblanchès
3f1f60cbf9 doc/faq_debug: qmk cli can also be used to print debug messages (#15528) 2021-12-22 06:27:25 -08:00
Wyatt Neal
b8cd899dfb [Keyboard] support for Stack Overflow The Key from Drop - adapted from @frap129 (#15520)
* support for Stack Overflow The Key from Drop - adapted from @frap129

* addressing code review comments

there's still some issues related to LEDs so i think for now the best
course of action is to remove those items until we can get better
details on the assembly of the board.

* removing this on the correct branch

* cleaning up more code review comments, moving to simpler/common formats for maps

* it is a C not a G fool

* well, looks like you can do it this way too for booting/dfu

* fixing missing newline for gcc to be quiet

* removing busted links

* formatting to match current template

* Update keyboards/massdrop/thekey/rules.mk

Co-authored-by: Ryan <fauxpark@gmail.com>

Co-authored-by: Andy Piper <andypiper@users.noreply.github.com>
Co-authored-by: Ryan <fauxpark@gmail.com>
2021-12-22 18:36:48 +11:00
devilzmods
83b21deafc [Keyboard] Add 4x4 and 5x5 40percentclub boards + Unique VIDs (#15465)
Co-authored-by: Ryan <fauxpark@gmail.com>
2021-12-21 10:47:18 -08:00
Sergi Meseguer
bcca5ec5fa zigotica userspace rows tweak: TAB in default STENAI layer, ESC in sym/fn layers (#15525) 2021-12-21 09:20:05 -08:00
stanrc85
d4ae858e0a [Keyboard] Add LAYOUT_alice support for Nasu (#15513) 2021-12-20 11:31:46 -08:00
Domanic Calleja
0e18f03b79 Add Superlyra keyboard + group with Lyra under new directory (#14955)
Co-authored-by: Drashna Jaelre <drashna@live.com>
Co-authored-by: Ryan <fauxpark@gmail.com>
2021-12-19 12:58:40 -08:00
James Young
98a82225aa MechBrewery MB65S Refactor (#15515) 2021-12-19 12:07:10 -08:00
JP
f79e1ab748 [Keyboard] Add k34 keyboard (#15250)
Co-authored-by: Ryan <fauxpark@gmail.com>
Co-authored-by: jingpingw <jingpingw@twitter.com>
2021-12-18 00:48:33 -08:00
GG
d8a98aeaf2 [Keyboard] update new keyboard zoom65_lite (#15218) 2021-12-17 18:59:37 -08:00
KiwiKey
4b9ba0dcc5 [Keyboard] Add Borderland (#15501)
Co-authored-by: Drashna Jaelre <drashna@live.com>
2021-12-17 18:29:48 -08:00
yiancar
69527be90b [Keyboard] Nasu (#15468)
Co-authored-by: Joel Challis <git@zvecr.com>
Co-authored-by: Drashna Jaelre <drashna@live.com>
Co-authored-by: Ryan <fauxpark@gmail.com>
Co-authored-by: yiancar <yiancar@gmail.com>
2021-12-17 08:11:01 -08:00
Albert Y
23d4803988 [Keyboard] Remove locking support for Sweep (#15494)
Co-authored-by: filterpaper <filterpaper@localhost>
2021-12-16 23:52:26 -08:00
Albert Y
0703e5398c [Keyboard] Remove locking support from Cradio (#15495)
Co-authored-by: filterpaper <filterpaper@localhost>
2021-12-16 23:52:08 -08:00
Albert Y
08fc873376 [Keyboard] Remove locking support for Macro3 (#15496)
Co-authored-by: filterpaper <filterpaper@localhost>
2021-12-16 23:51:36 -08:00
WestM
d7bbd52e19 [Keyboard] Add WestM (#15459)
Co-authored-by: Drashna Jaelre <drashna@live.com>
Co-authored-by: Ryan <fauxpark@gmail.com>
2021-12-16 10:07:06 -08:00
billybraga
f383d3d8be Fix inverted gt and lt send_string mapping in canadian multilingual (#15487)
Co-authored-by: Ryan <fauxpark@gmail.com>
Co-authored-by: Billy Braga <bbraga@progi.com>
2021-12-16 10:05:06 -08:00
joric
ce8c1ba418 [Keyboard] removed extra layout from jorne.h (#15491) 2021-12-16 08:45:21 -08:00
joric
42555157b8 [Keyboard] Add Jorne (#15461)
* added jorne-dev (kyria-based)

* updated files

* raw logo

* removed font

* Fix after rebase on master: #undef SH_TG

* Fix LTO parameter name.

* Fix OLED.

* Add VIA Jorne layout.

* readme.md

* updated jorne readme

* Add info.json

* Update keyboards/jorne/keymaps/default/config.h

Co-authored-by: Drashna Jaelre <drashna@live.com>

* Update keyboards/jorne/keymaps/default/config.h

Co-authored-by: Drashna Jaelre <drashna@live.com>

* Update keyboards/jorne/keymaps/default/keymap.c

Co-authored-by: Drashna Jaelre <drashna@live.com>

* Update keyboards/jorne/rules.mk

Co-authored-by: Drashna Jaelre <drashna@live.com>

* Update keyboards/jorne/rules.mk

Co-authored-by: Drashna Jaelre <drashna@live.com>

* PR changes (added GPL headers, moved oled_task_user)

* info.jsoon: fix thumbs poositions, reorder keys.

* fix info.json maintainer

* fixed layouts

* Sync config.h for VIA with default keymap.

* added post_config (sets brightness to 120 or it hangs)

* added SPLIT_LAYER_STATE_ENABLE/SPLIT_LED_STATE_ENABLE

* Update keyboards/jorne/rules.mk

Co-authored-by: Ryan <fauxpark@gmail.com>

* Update keyboards/jorne/rev1/config.h

Co-authored-by: Ryan <fauxpark@gmail.com>

* Update keyboards/jorne/keymaps/via/keymap.c

Co-authored-by: Ryan <fauxpark@gmail.com>

* Update keyboards/jorne/keymaps/default/keymap.c

Co-authored-by: Ryan <fauxpark@gmail.com>

* Update keyboards/jorne/jorne.c

Co-authored-by: Ryan <fauxpark@gmail.com>

* Update keyboards/jorne/jorne.c

Co-authored-by: Ryan <fauxpark@gmail.com>

* fixed layout, removed unnecessary defines

* vendor_id set to 0x4753

Co-authored-by: beta-tank <beta-tank@outlook.com>
Co-authored-by: Drashna Jaelre <drashna@live.com>
Co-authored-by: Ryan <fauxpark@gmail.com>
2021-12-16 19:28:29 +11:00
Yoichiro Tanaka
231cd7a39f Fix some wrong keycode macros in locale mapping files (#15488) 2021-12-16 16:59:04 +11:00
364 changed files with 13291 additions and 400 deletions

View File

@@ -18,15 +18,19 @@ void keyboard_post_init_user(void) {
## Debugging Tools
There are two different tools you can use to debug your keyboard.
Various tools are available to debug your keyboard.
### Debugging With QMK Toolbox
For compatible platforms, [QMK Toolbox](https://github.com/qmk/qmk_toolbox) can be used to display debug messages from your keyboard.
### Debugging with QMK CLI
Prefer a terminal based solution? The [QMK CLI console command](cli_commands.md#qmk-console) can be used to display debug messages from your keyboard.
### Debugging With hid_listen
Prefer a terminal based solution? [hid_listen](https://www.pjrc.com/teensy/hid_listen.html), provided by PJRC, can also be used to display debug messages. Prebuilt binaries for Windows,Linux,and MacOS are available.
Something stand-alone? [hid_listen](https://www.pjrc.com/teensy/hid_listen.html), provided by PJRC, can also be used to display debug messages. Prebuilt binaries for Windows,Linux,and MacOS are available.
## Sending Your Own Debug Messages :id=debug-api

View File

@@ -415,7 +415,7 @@ All RGB keycodes are currently shared with the RGBLIGHT system:
* `RGB_MODE_*` keycodes will generally work, but not all of the modes are currently mapped to the correct effects for the RGB Matrix system.
`RGB_MODE_PLAIN`, `RGB_MODE_BREATHE`, `RGB_MODE_RAINBOW`, and `RGB_MATRIX_SWIRL` are the only ones that are mapped properly. The rest don't have a direct equivalent, and are not mapped.
`RGB_MODE_PLAIN`, `RGB_MODE_BREATHE`, `RGB_MODE_RAINBOW`, and `RGB_MODE_SWIRL` are the only ones that are mapped properly. The rest don't have a direct equivalent, and are not mapped.
!> By default, if you have both the [RGB Light](feature_rgblight.md) and the RGB Matrix feature enabled, these keycodes will work for both features, at the same time. You can disable the keycode functionality by defining the `*_DISABLE_KEYCODES` option for the specific feature.

View File

@@ -85,7 +85,7 @@ To configure the default layer sounds, you would want to define this in your `co
?> There are a large number of predefined songs in [quantum/audio/song_list.h](https://github.com/qmk/qmk_firmware/blob/master/quantum/audio/song_list.h) that you can use.
## Reseting the keyboard
## Resetting the keyboard
There is the `RESET` quantum keycode that you can use. But if you want to reset the board as part of a macro, rather than hitting a key separately, you can do that.

View File

@@ -19,7 +19,7 @@
#include "config_common.h"
/* USB Device descriptor parameter */
#define VENDOR_ID 0xFEED
#define VENDOR_ID 0x4025
#define PRODUCT_ID 0x0A0C
#define DEVICE_VER 0x0F25
#define MANUFACTURER di0ib

View File

@@ -20,7 +20,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include "config_common.h"
/* USB Device descriptor parameter */
#define VENDOR_ID 0xFEED
#define VENDOR_ID 0x4025
#define PRODUCT_ID 0x0000
#define DEVICE_VER 0x0001
#define MANUFACTURER 40percentclub

View File

@@ -5,7 +5,7 @@
#include "config_common.h"
/* USB Device descriptor parameter */
#define VENDOR_ID 0xFEED
#define VENDOR_ID 0x4025 //"40 %", since 0x3430 is already registered.
#define PRODUCT_ID 0x0A0C
#define DEVICE_VER 0x4444
#define MANUFACTURER di0ib

View File

@@ -0,0 +1,105 @@
/* Copyright 2021 Milan Düwel
*
* 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 custom_layers {
PAD,
_QW,
NUM,
DIR
};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Single 4x4 board only
* .-----------------------------------.
* | 7 | 8 | 9 | / |
* |--------+--------+--------+--------|
* | 4 | 5 | 6 | * |
* |--------+--------+--------+--------|
* | 1 | 2 | 3 | - |
* |--------+--------+--------+--------|
* | 0 | QWERTY | . | + |
* '-----------------------------------'
*/
[PAD] = LAYOUT_ortho_4x4(
KC_KP_7, KC_KP_8, KC_KP_9, KC_PSLS,
KC_KP_4, KC_KP_5, KC_KP_6, KC_PAST,
KC_KP_1, KC_KP_2, KC_KP_3, KC_PMNS,
KC_KP_0, DF(_QW), KC_KP_DOT, KC_PPLS
),
/* QWERTY
* .-----------------------------------------------------------------------------------------------------------------------------------------------.
* | ESC | Q | W | E | R | T | Y | U | I | O | P | BACKSP | 7 | 8 | 9 | / |
* |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
* | TAB | A | S | D | F | G | H | J | K | L | ; | ' | 4 | 5 | 6 | * |
* |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
* | SHIFT | Z | X | C | V | B | N | M | , | . | / | ENT/SFT| 1 | 2 | 3 | - |
* |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
* | LCTRL | LGUI | ALT | ALT | NUM | SHIFT | SPACE | DIR | RGUI | RALT | DEL | CTRL | 0 | 0 | . | + |
* '-----------------------------------------------------------------------------------------------------------------------------------------------'
*/
[_QW] = LAYOUT_ortho_4x16(
KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, KC_KP_7, KC_KP_8, KC_KP_9, KC_PSLS,
KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_KP_4, KC_KP_5, KC_KP_6, KC_PAST,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SFT_T(KC_ENT), KC_KP_1, KC_KP_2, KC_KP_3, KC_PMNS,
KC_LCTL, KC_LGUI, KC_LALT, KC_LALT, MO(NUM), KC_LSFT, KC_SPC, MO(DIR), KC_RGUI, KC_RALT, KC_DEL, KC_RCTL, KC_KP_0, KC_KP_0, KC_KP_DOT, KC_PPLS
),
/* NUMBERS
* .-----------------------------------------------------------------------------------------------------------------------------------------------.
* | | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | NUMLOCK| / | * | - | |
* |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
* | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | | | | + | |
* |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
* | | F11 | F12 | | | | ENTER | SHIFT | RGUI | ./ALT | BKSC | | | | ENTER | |
* | | | | | | | | | | |CTRLhold| | | | | |
* |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
* | | | | | | | ENTER | SHIFT | | | | | | | | |
* '-----------------------------------------------------------------------------------------------------------------------------------------------'
*/
[NUM] = LAYOUT_ortho_4x16(
_______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS, _______,
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, _______, _______, _______, KC_PPLS, _______,
_______, KC_F11, KC_F12, _______, _______, _______, KC_ENT, KC_RSFT, KC_RGUI, ALT_T(KC_DOT), CTL_T(KC_BSPC), _______, _______, _______, KC_PENT, _______,
_______, _______, _______, _______, _______, _______, KC_ENT, KC_RSFT, _______, _______, _______, _______, _______, _______, _______, _______
),
/* DIRECTIONS
* .-----------------------------------------------------------------------------------------------------------------------------------------------.
* | RESET | TAB | up | | INS | CTRL | SHIFT | PgUp | Home | - | = | DEL | | | | |
* |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
* | CAPSLK | left | down | right | PrScr | SHIFT | CTRL | PgDn | End | [ | ] | \ | | | | |
* |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
* | | P-Brk | | | | | | | RGUI | ALT | | | | | | |
* |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
* | KEYPAD | | | | | | | | | | | | | | | |
* '-----------------------------------------------------------------------------------------------------------------------------------------------'
*/
[DIR] = LAYOUT_ortho_4x16(
RESET, KC_TAB, KC_UP, _______, KC_INS, KC_LCTL, KC_LSFT, KC_PGUP, KC_HOME, KC_MINS, KC_EQL, KC_DEL, _______, _______, _______, _______,
KC_CAPS, KC_LEFT, KC_DOWN, KC_RGHT, KC_PSCR, KC_LSFT, KC_LCTL, KC_PGDN, KC_END, KC_LBRC, KC_RBRC, KC_BSLS, _______, _______, _______, _______,
_______, KC_PAUS, _______, _______, _______, _______, _______, _______, KC_RGUI, KC_RALT, _______, _______, _______, _______, _______, _______,
DF(PAD), _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
),
};

View File

@@ -0,0 +1 @@
VIA_ENABLE = yes

View File

@@ -5,7 +5,7 @@
#include "config_common.h"
/* USB Device descriptor parameter */
#define VENDOR_ID 0xFEED
#define VENDOR_ID 0x4025
#define PRODUCT_ID 0x0A0C
#define DEVICE_VER 0x05B5
#define MANUFACTURER di0ib

View File

@@ -0,0 +1,117 @@
/* Copyright 2021 Milan Düwel
*
* 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 custom_layers {
PAD,
_QW,
NUM,
DIR
};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Single 5x5 board only
* .--------------------------------------------.
* | QWERTY | / | * | - | |
* |--------+--------+--------+--------+--------|
* | 7 | 8 | 9 | + | |
* |--------+--------+--------+--------+--------|
* | 4 | 5 | 6 | + | |
* |--------+--------+--------+--------+--------|
* | 1 | 2 | 3 | ENTER | |
* |--------+--------+--------+--------+--------|
* | 0 | 0 | . | ENTER | |
* '--------------------------------------------'
*/
[PAD] = LAYOUT_ortho_5x5(
DF(_QW), KC_PSLS, KC_PAST, KC_PMNS, _______,
KC_KP_7, KC_KP_8, KC_KP_9, KC_PPLS, _______,
KC_KP_4, KC_KP_5, KC_KP_6, KC_PPLS, _______,
KC_KP_1, KC_KP_2, KC_KP_3, KC_PENT, _______,
KC_KP_0, KC_KP_0, KC_KP_DOT, KC_PENT, _______
),
/* QWERTY
* .--------------------------------------------------------------------------------------------------------------------------------------.
* | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | | | | |
* |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
* | ESC | Q | W | E | R | T | Y | U | I | O | P | BACKSP | 7 | 8 | 9 |
* |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
* | TAB | A | S | D | F | G | H | J | K | L | ; | ' | 4 | 5 | 6 |
* |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
* | SHIFT | Z | X | C | V | B | N | M | , | . | / | ENT/SFT| 1 | 2 | 3 |
* |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
* | LCTRL | LGUI | ALT | ALT | NUM | SHIFT | SPACE | DIR | RGUI | RALT | DEL | CTRL | 0 | 0 | . |
* '--------------------------------------------------------------------------------------------------------------------------------------'
*/
[_QW] = LAYOUT_ortho_5x15(
_______, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, _______, _______, _______, _______,
KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, KC_KP_7, KC_KP_8, KC_KP_9,
KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_KP_4, KC_KP_5, KC_KP_6,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SFT_T(KC_ENT), KC_KP_1, KC_KP_2, KC_KP_3,
KC_LCTL, KC_LGUI, KC_LALT, KC_LALT, MO(NUM), KC_LSFT, KC_SPC, MO(DIR), KC_RGUI, KC_RALT, KC_DEL, KC_RCTL, KC_KP_0, KC_KP_0, KC_KP_DOT
),
/* NUMBERS
* .--------------------------------------------------------------------------------------------------------------------------------------.
* | | | | | | | | | | | | | | | |
* |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
* | | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | NUMLOCK| / | * | - |
* |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
* | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | | | | + |
* |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
* | | F11 | F12 | | | | ENTER | SHIFT | RGUI | ./ALT | BKSC | | | | ENTER |
* | | | | | | | | | | |CTRLhold| | | | |
* |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
* | | | | | | | ENTER | SHIFT | | | | | | | |
* '--------------------------------------------------------------------------------------------------------------------------------------'
*/
[NUM] = LAYOUT_ortho_5x15(
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS,
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, _______, _______, _______, KC_PPLS,
_______, KC_F11, KC_F12, _______, _______, _______, KC_ENT, KC_RSFT, KC_RGUI, ALT_T(KC_DOT), CTL_T(KC_BSPC), _______, _______, _______, KC_PENT,
_______, _______, _______, _______, _______, _______, KC_ENT, KC_RSFT, _______, _______, _______, _______, _______, _______, _______
),
/* DIRECTIONS
* .--------------------------------------------------------------------------------------------------------------------------------------.
* | | | | | | | | | | | | | | | |
* |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
* | RESET | TAB | up | | INS | CTRL | SHIFT | PgUp | Home | - | = | DEL | | | |
* |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
* | CAPSLK | left | down | right | PrScr | SHIFT | CTRL | PgDn | End | [ | ] | \ | | | |
* |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
* | | P-Brk | | | | | | | RGUI | ALT | | | | | |
* |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
* | KEYPAD | | | | | | | | | | | | | | |
* '--------------------------------------------------------------------------------------------------------------------------------------'
*/
[DIR] = LAYOUT_ortho_5x15(
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
RESET, KC_TAB, KC_UP, _______, KC_INS, KC_LCTL, KC_LSFT, KC_PGUP, KC_HOME, KC_MINS, KC_EQL, KC_DEL, _______, _______, _______,
KC_CAPS, KC_LEFT, KC_DOWN, KC_RGHT, KC_PSCR, KC_LSFT, KC_LCTL, KC_PGDN, KC_END, KC_LBRC, KC_RBRC, KC_BSLS, _______, _______, _______,
_______, KC_PAUS, _______, _______, _______, _______, _______, _______, KC_RGUI, KC_RALT, _______, _______, _______, _______, _______,
DF(PAD), _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
),
};

View File

@@ -0,0 +1 @@
VIA_ENABLE = yes

View File

@@ -19,7 +19,7 @@
#include "config_common.h"
/* USB Device descriptor parameter */
#define VENDOR_ID 0xFEED
#define VENDOR_ID 0x4025
#define PRODUCT_ID 0x0A0C
#define DEVICE_VER 0x0F61
#define MANUFACTURER di0ib

View File

@@ -19,7 +19,7 @@
#include "config_common.h"
/* USB Device descriptor parameter */
#define VENDOR_ID 0xFEED
#define VENDOR_ID 0x4025
#define PRODUCT_ID 0x0A0C
#define DEVICE_VER 0x0F00
#define MANUFACTURER di0ib

View File

@@ -3,7 +3,7 @@
#include "config_common.h"
/* USB Device descriptor parameter */
#define VENDOR_ID 0xFEED
#define VENDOR_ID 0x4025 //"40 %", since 0x3430 is already registered.
#define PRODUCT_ID 0x6060
#define DEVICE_VER 0x0001
#define MANUFACTURER 40 Percent Club

View File

@@ -20,7 +20,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include "config_common.h"
/* USB Device descriptor parameter */
#define VENDOR_ID 0xFEED
#define VENDOR_ID 0x4025
#define PRODUCT_ID 0x0A0C
#define DEVICE_VER 0x4A1F
#define MANUFACTURER di0ib

View File

@@ -19,7 +19,7 @@
#include "config_common.h"
/* USB Device descriptor parameter */
#define VENDOR_ID 0xFEED
#define VENDOR_ID 0x4025
#define PRODUCT_ID 0x0A0C
#define DEVICE_VER 0x0175
#define MANUFACTURER di0ib

View File

@@ -3,7 +3,7 @@
#include "config_common.h"
/* USB Device descriptor parameter */
#define VENDOR_ID 0x3430 // "40"
#define VENDOR_ID 0x4025 // "40%", changed since 0x3430 is already officially registered
#define PRODUCT_ID 0x4C55 // "LU"
#define DEVICE_VER 0x1001
#define MANUFACTURER di0ib

View File

@@ -20,7 +20,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include "config_common.h"
/* USB Device descriptor parameter */
#define VENDOR_ID 0x3430 // "40"
#define VENDOR_ID 0x4025 // "40%", changed since 0x3430 is already officially registered
#define PRODUCT_ID 0x4D68 // "M68"
#define DEVICE_VER 0x0101
#define MANUFACTURER di0ib

View File

@@ -20,7 +20,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include "config_common.h"
/* USB Device descriptor parameter */
#define VENDOR_ID 0xCEEB
#define VENDOR_ID 0x4025 //"40 %", to make it consistent with other 40percent.club boards.
#define PRODUCT_ID 0x0007
#define DEVICE_VER 0x0001
#define MANUFACTURER di0ib

View File

@@ -19,7 +19,7 @@
#include "config_common.h"
/* USB Device descriptor parameter */
#define VENDOR_ID 0x3430 // "40"
#define VENDOR_ID 0x4025 // "40%", changed since 0x3430 is already officially registered
#define PRODUCT_ID 0x9999
#define DEVICE_VER 0x9999
#define MANUFACTURER di0ib

View File

@@ -19,7 +19,7 @@
#include "config_common.h"
/* USB Device descriptor parameter */
#define VENDOR_ID 0xFEED
#define VENDOR_ID 0x4025
#define PRODUCT_ID 0x0A0C
#define DEVICE_VER 0x0444
#define MANUFACTURER di0ib

View File

@@ -19,7 +19,7 @@
#include "config_common.h"
/* USB Device descriptor parameter */
#define VENDOR_ID 0xFEED
#define VENDOR_ID 0x4025
#define PRODUCT_ID 0x6060
#define DEVICE_VER 0x0001
#define MANUFACTURER di0ib
@@ -28,7 +28,7 @@
/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
#define DEBOUNCE 5
//more detailed config options start below:
//more detailed config options start below:
/* define if matrix has ghost (lacks anti-ghosting diodes) */

View File

@@ -20,7 +20,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include "config_common.h"
/* USB Device descriptor parameter */
#define VENDOR_ID 0x3430 // "40"
#define VENDOR_ID 0x4025 //"40 %", since 0x3430 is already registered.
#define PRODUCT_ID 0x5350 // "SP"
#define DEVICE_VER 0x1001
#define MANUFACTURER di0ib

View File

@@ -3,8 +3,8 @@
#include "config_common.h"
/* USB Device descriptor parameter */
#define VENDOR_ID 0xFEED
#define PRODUCT_ID 0x6060
#define VENDOR_ID 0x4025
#define PRODUCT_ID 0x546F //"To", was duplicate with polyandry
#define DEVICE_VER 0x0001
#define MANUFACTURER 40 Percent Club
#define PRODUCT Tomato

View File

@@ -20,8 +20,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include "config_common.h"
/* USB Device descriptor parameter */
#define VENDOR_ID 0xFEED
#define PRODUCT_ID 0x0000
#define VENDOR_ID 0x4025
#define PRODUCT_ID 0x7574 //"ut"
#define DEVICE_VER 0x0001
#define MANUFACTURER 40percent.club
#define PRODUCT ut47

View File

@@ -0,0 +1,146 @@
/*
Copyright 2021 adpenrose
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 0x4450 // "ADP"
#define PRODUCT_ID 0x0001 // 'Cause it's my first keeb
#define DEVICE_VER 0x0001
#define MANUFACTURER adpenrose
#define PRODUCT Kintsugi
/* key matrix size */
#define MATRIX_ROWS 10
#define MATRIX_COLS 7
/*
* 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, E6, D7, C6, D4, D2, F4, F5, B5, B4 }
#define MATRIX_COL_PINS { F6, F7, B1, B3, B2, B6, F0 }
#define UNUSED_PINS { D3, C7 }
/* COL2ROW, ROW2COL */
#define DIODE_DIRECTION COL2ROW
/*Rotary encoder - set the resolution fitting your encoder.
Most will need a value of 4. If 1 encoder click results in 2 keycodes sent
increase the value. If you need 2 clicks for 1 keycode, decrease*/
#define ENCODER_RESOLUTION 4
#define ENCODERS_PAD_A { B7 }
#define ENCODERS_PAD_B { D5 }
#define TAP_CODE_DELAY 10
/* Underglow options: */
#define RGB_DI_PIN F1
#ifdef RGB_DI_PIN
# define RGBLED_NUM 16
# 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 */
/*== all animations enable ==*/
// # define RGBLIGHT_ANIMATIONS
/*== or choose animations ==*/
# 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
/*== customize breathing effect ==*/
/*==== (DEFAULT) use fixed table instead of exp() and sin() ====*/
//# define RGBLIGHT_BREATHE_TABLE_SIZE 256 // 256(default) or 128 or 64
/*==== use exp() and sin() ====*/
//# define RGBLIGHT_EFFECT_BREATHE_CENTER 1.85 // 1 to 2.7
//# define RGBLIGHT_EFFECT_BREATHE_MAX 255 // 0 to 255
#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

View File

@@ -0,0 +1,80 @@
{
"keyboard_name": "Kintsugi",
"url": "https://github.com/ADPenrose/kintsugi_keeb",
"maintainer": "adpenrose",
"layouts": {
"LAYOUT_65_ansi_blocker": {
"layout": [
{"label":"Esc", "x":0, "y":0},
{"label":"1", "x":1, "y":0},
{"label":"2", "x":2, "y":0},
{"label":"3", "x":3, "y":0},
{"label":"4", "x":4, "y":0},
{"label":"5", "x":5, "y":0},
{"label":"6", "x":6, "y":0},
{"label":"7", "x":7, "y":0},
{"label":"8", "x":8, "y":0},
{"label":"9", "x":9, "y":0},
{"label":"0", "x":10, "y":0},
{"label":"-", "x":11, "y":0},
{"label":"=", "x":12, "y":0},
{"label":"Backspace", "x":13, "y":0, "w":2},
{"label":"Tab", "x":0, "y":1, "w":1.5},
{"label":"Q", "x":1.5, "y":1},
{"label":"W", "x":2.5, "y":1},
{"label":"E", "x":3.5, "y":1},
{"label":"R", "x":4.5, "y":1},
{"label":"T", "x":5.5, "y":1},
{"label":"Y", "x":6.5, "y":1},
{"label":"U", "x":7.5, "y":1},
{"label":"I", "x":8.5, "y":1},
{"label":"O", "x":9.5, "y":1},
{"label":"P", "x":10.5, "y":1},
{"label":"[", "x":11.5, "y":1},
{"label":"]", "x":12.5, "y":1},
{"label":"\\", "x":13.5, "y":1, "w":1.5},
{"label":"Caps Lock", "x":0, "y":2, "w":1.75},
{"label":"A", "x":1.75, "y":2},
{"label":"S", "x":2.75, "y":2},
{"label":"D", "x":3.75, "y":2},
{"label":"F", "x":4.75, "y":2},
{"label":"G", "x":5.75, "y":2},
{"label":"H", "x":6.75, "y":2},
{"label":"J", "x":7.75, "y":2},
{"label":"K", "x":8.75, "y":2},
{"label":"L", "x":9.75, "y":2},
{"label":";", "x":10.75, "y":2},
{"label":"'", "x":11.75, "y":2},
{"label":"Enter", "x":12.75, "y":2, "w":2.25},
{"label":"Enc", "x":15, "y":2},
{"label":"LShift", "x":0, "y":3, "w":2.25},
{"label":"Z", "x":2.25, "y":3},
{"label":"X", "x":3.25, "y":3},
{"label":"C", "x":4.25, "y":3},
{"label":"V", "x":5.25, "y":3},
{"label":"B", "x":6.25, "y":3},
{"label":"N", "x":7.25, "y":3},
{"label":"M", "x":8.25, "y":3},
{"label":",", "x":9.25, "y":3},
{"label":".", "x":10.25, "y":3},
{"label":"/", "x":11.25, "y":3},
{"label":"RShift", "x":12.25, "y":3, "w":1.75},
{"label":"Up", "x":14, "y":3},
{"label":"M1", "x":15, "y":3},
{"label":"LCtrl", "x":0, "y":4, "w":1.25},
{"label":"LSuper", "x":1.25, "y":4, "w":1.25},
{"label":"LAlt", "x":2.5, "y":4, "w":1.25},
{"label":"Space", "x":3.75, "y":4, "w":6.25},
{"label":"L1", "x":10, "y":4, "w":1.5},
{"label":"L2", "x":11.5, "y":4, "w":1.5},
{"label":"Left", "x":13, "y":4},
{"label":"Down", "x":14, "y":4},
{"label":"Right", "x":15, "y":4}
]
}
}
}

View File

@@ -0,0 +1,48 @@
/* Copyright 2021 adpenrose
*
* 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
/* Base layout:
* ,---------------------------------------------------------------------|
* |` |1 |2 |3 |4 |5 |6 |7 |8 |9 |0 |- |= |Backspace| OLED|
* |--------------------------------------------------------------- |
* |Tab |Q |W |E |R |T |Y |U |I |O |P |[ | ] | \ OLED|
* |---------------------------------------------------------------------|
* |Caps |A |S |D |F |G |H |J |K |L |; |' | Enter | ENC |
* |---------------------------------------------------------------------|
* |Shft |Z |X |C |V |B |N |M |, |. |/ |Shift |Up| M1 |
* |---------------------------------------------------------------------|
* |Ctrl|GUI |Alt | Space |Alt |MO(1)| |Lt |Dn |Rt |
* `---------------------------------------------------------------------|'
*/
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Base */
[0] = LAYOUT_65_ansi_blocker(
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_BSPC,
KC_TAB, KC_A, 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_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_MUTE,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_DEL,
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_LEFT, KC_DOWN, KC_RIGHT
),
[1] = LAYOUT_65_ansi_blocker(
_______, 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_DEL,
_______, RGB_TOG, RGB_VAI, RGB_VAD, RGB_MODE_FORWARD, _______, _______, _______, _______, _______, _______, _______, _______, _______,
RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MPLY,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, KC_SPC, _______, _______, _______, _______, _______
),
};

View File

@@ -0,0 +1 @@
# The default keymap for Kintsugi

View File

@@ -0,0 +1,164 @@
/* Copyright 2021 adpenrose
*
* 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
/* Base layout:
* ,---------------------------------------------------------------------|
* |` |1 |2 |3 |4 |5 |6 |7 |8 |9 |0 |- |= |Backspace| OLED|
* |--------------------------------------------------------------- |
* |Tab |Q |W |E |R |T |Y |U |I |O |P |[ | ] | \ OLED|
* |---------------------------------------------------------------------|
* |Caps |A |S |D |F |G |H |J |K |L |; |' | Enter | ENC |
* |---------------------------------------------------------------------|
* |Shft |Z |X |C |V |B |N |M |, |. |/ |Shift |Up| M1 |
* |---------------------------------------------------------------------|
* |Ctrl|GUI |Alt | Space |MO(2) |MO(3)| |Lt |Dn |Rt |
* `---------------------------------------------------------------------|'
*/
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Base */
[0] = LAYOUT_65_ansi_blocker(
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_BSPC,
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_LGUI, 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_MUTE,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_DEL,
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(2), MO(3), KC_LEFT, KC_DOWN, KC_RIGHT
),
[1] = LAYOUT_65_ansi_blocker(
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______
),
[2] = LAYOUT_65_ansi_blocker(
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______
),
[3] = LAYOUT_65_ansi_blocker(
_______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MPLY,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, KC_SPC, _______, _______, _______, _______, _______
),
};
/* Encoder */
#ifdef ENCODER_ENABLE
bool encoder_update_user(uint8_t index, bool clockwise) {
static uint8_t selected_layer = 0; /* Used to change the layer using the encoder. */
if (clockwise){
/* Check if left shift is pressed: */
if (selected_layer < 3 && get_mods() & MOD_BIT(KC_LSFT)){
selected_layer ++;
layer_move(selected_layer); /* Jump up one layer. */
} else {
/* If shift isn't pressed, encoder will do this stuff: */
switch (get_highest_layer(layer_state)){
case 3:
tap_code(KC_MNXT);
break;
default:
tap_code(KC_VOLU);
break;
}
}
} else {
/* Check if left shift is pressed: */
if (selected_layer > 0 && get_mods() & MOD_BIT(KC_LSFT)){
selected_layer --;
layer_move(selected_layer); /* Go down one layer. */
} else {
/* If shift isn't pressed, encoder will do this stuff: */
switch (get_highest_layer(layer_state)){
case 3:
tap_code(KC_MPRV);
break;
default:
tap_code(KC_VOLD);
break;
}
}
}
return false;
}
#endif
/* Rotation of the OLED: */
#ifdef OLED_ENABLE
/* Function that renders the kintsugi logo in the desired order. */
static void render_logo(void) {
static const char PROGMEM logo_1[] = {
0x83, 0x84, 0x85, 0x86, 0x87, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0x00
};
static const char PROGMEM logo_2[] = {
0x88, 0x89, 0x8A, 0x8B, 0x8C, 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0x00
};
static const char PROGMEM logo_3[] = {
0x8D, 0x8E, 0x8F, 0x90, 0x91, 0xAD, 0xAE, 0xAF, 0xB0, 0xB1, 0xCD, 0xCE, 0xCF, 0xD0, 0xD1, 0x00
};
oled_set_cursor(1,0);
oled_write_P(logo_1, false);
oled_set_cursor(1,4);
oled_write_P(logo_2, false);
oled_set_cursor(1,8);
oled_write_P(logo_3, false);
}
/* Function that renders the current layer to the user. */
void render_layer(void) {
oled_set_cursor(0,12);
switch (get_highest_layer(layer_state)){
case 0:
oled_write_P(PSTR("_BASE"), false);
break;
case 1:
oled_write_P(PSTR("_KCAD"), false);
break;
case 2:
oled_write_P(PSTR("_NMPD"), false);
break;
case 3:
oled_write_P(PSTR("_FNCT"), false);
break;
default:
oled_write_P(PSTR("_OhNo"), false);
break;
}
}
/* The following function displays wpm to the user. */
void render_wpm(void) {
oled_set_cursor(1,14);
oled_write(get_u8_str(get_current_wpm(), '0'), false);
oled_set_cursor(1,15);
oled_write_P(PSTR("WPM"), false);
}
/* Function that renders stuff on the oled: */
bool oled_task_user(void) {
render_logo();
render_layer();
render_wpm();
return false;
}
#endif

View File

@@ -0,0 +1 @@
# Franky keymap for Kintsugi. Here to serve as a way to test snippets of code.

View File

@@ -0,0 +1,3 @@
VIA_ENABLE = yes
LTO_ENABLE = yes
WPM_ENABLE = yes

View File

@@ -0,0 +1,62 @@
/* Copyright 2021 adpenrose
*
* 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
/* Base layout:
* ,---------------------------------------------------------------------|
* |` |1 |2 |3 |4 |5 |6 |7 |8 |9 |0 |- |= |Backspace| OLED|
* |--------------------------------------------------------------- |
* |Tab |Q |W |E |R |T |Y |U |I |O |P |[ | ] | \ OLED|
* |---------------------------------------------------------------------|
* |Caps |A |S |D |F |G |H |J |K |L |; |' | Enter | ENC |
* |---------------------------------------------------------------------|
* |Shft |Z |X |C |V |B |N |M |, |. |/ |Shift |Up| M1 |
* |---------------------------------------------------------------------|
* |Ctrl|GUI |Alt | Space |MO(2) |MO(3)| |Lt |Dn |Rt |
* `---------------------------------------------------------------------|'
*/
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Base */
[0] = LAYOUT_65_ansi_blocker(
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_BSPC,
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_LGUI, 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_MUTE,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_DEL,
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(1), MO(2), KC_LEFT, KC_DOWN, KC_RIGHT
),
[1] = LAYOUT_65_ansi_blocker(
_______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MPLY,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, KC_SPC, _______, _______, _______, _______, _______
),
[2] = LAYOUT_65_ansi_blocker(
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______
),
[3] = LAYOUT_65_ansi_blocker(
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______
),
};

View File

@@ -0,0 +1 @@
# VIA keymap for Kintsugi

View File

@@ -0,0 +1,74 @@
/* Copyright 2021 adpenrose
*
* 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 "kintsugi.h"
/* Encoder */
#ifdef ENCODER_ENABLE
bool encoder_update_kb(uint8_t index, bool clockwise) {
if (!encoder_update_user(index, clockwise)) {
return false;
}
/* The switch case allows for different encoder mappings on different layers, "default" map gets applied for all unspecified layers */
switch(get_highest_layer(layer_state)){
case 1:
if (clockwise) {
tap_code(KC_MNXT);
} else {
tap_code(KC_MPRV);
}
break;
default:
if (clockwise){
tap_code(KC_VOLU);
} else{
tap_code(KC_VOLD);
}
break;
}
return true;
}
#endif
/* Rotation of the OLED: */
#ifdef OLED_ENABLE
oled_rotation_t oled_init_user(oled_rotation_t rotation) {
return OLED_ROTATION_270;
}
bool oled_task_kb(void) {
if (!oled_task_user()) {
return false;
}
/* Kintsugi logo render: */
static const char PROGMEM logo_1[] = {
0x83, 0x84, 0x85, 0x86, 0x87, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0x00
};
static const char PROGMEM logo_2[] = {
0x88, 0x89, 0x8A, 0x8B, 0x8C, 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0x00
};
static const char PROGMEM logo_3[] = {
0x8D, 0x8E, 0x8F, 0x90, 0x91, 0xAD, 0xAE, 0xAF, 0xB0, 0xB1, 0xCD, 0xCE, 0xCF, 0xD0, 0xD1, 0x00
};
oled_set_cursor(1,3);
oled_write_P(logo_1, false);
oled_set_cursor(1,7);
oled_write_P(logo_2, false);
oled_set_cursor(1,11);
oled_write_P(logo_3, false);
return true;
}
#endif

View File

@@ -0,0 +1,46 @@
/* Copyright 2021 adpenrose
*
* 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_65_ansi_blocker( \
K00, K01, K02, K03, K04, K05, K06, K50, K51, K52, K53, K54, K55, K56, \
K10, K11, K12, K13, K14, K15, K16, K60, K61, K62, K63, K64, K65, K66, \
K20, K21, K22, K23, K24, K25, K26, K70, K71, K72, K73, K74, K75, K76, \
K30, K31, K32, K33, K34, K35, K36, K80, K81, K82, K83, K84, K85, K86, \
K40, K41, K42, K46, K92, K93, K94, K95, K96 \
) { \
{ K00, K01, K02, K03, K04, K05, K06 }, \
{ K10, K11, K12, K13, K14, K15, K16 }, \
{ K20, K21, K22, K23, K24, K25, K26 }, \
{ K30, K31, K32, K33, K34, K35, K36 }, \
{ K40, K41, K42, KC_NO, KC_NO, KC_NO, K46 }, \
{ K50, K51, K52, K53, K54, K55, K56 }, \
{ K60, K61, K62, K63, K64, K65, K66 }, \
{ K70, K71, K72, K73, K74, K75, K76 }, \
{ K80, K81, K82, K83, K84, K85, K86 }, \
{ KC_NO, KC_NO, K92, K93, K94, K95, K96 } \
}

View File

@@ -0,0 +1,244 @@
/* Copyright 2021 adpenrose
*
* 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 "progmem.h"
const unsigned char font[] PROGMEM = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x3E, 0x5B, 0x4F, 0x5B, 0x3E, 0x00,
0x3E, 0x6B, 0x4F, 0x6B, 0x3E, 0x00,
0x1C, 0x3E, 0x7C, 0x3E, 0x1C, 0x00,
0x18, 0x3C, 0x7E, 0x3C, 0x18, 0x00,
0x1C, 0x57, 0x7D, 0x57, 0x1C, 0x00,
0x1C, 0x5E, 0x7F, 0x5E, 0x1C, 0x00,
0x00, 0x18, 0x3C, 0x18, 0x00, 0x00,
0xFF, 0xE7, 0xC3, 0xE7, 0xFF, 0x00,
0x00, 0x18, 0x24, 0x18, 0x00, 0x00,
0xFF, 0xE7, 0xDB, 0xE7, 0xFF, 0x00,
0x30, 0x48, 0x3A, 0x06, 0x0E, 0x00,
0x26, 0x29, 0x79, 0x29, 0x26, 0x00,
0x40, 0x7F, 0x05, 0x05, 0x07, 0x00,
0x40, 0x7F, 0x05, 0x25, 0x3F, 0x00,
0x5A, 0x3C, 0xE7, 0x3C, 0x5A, 0x00,
0x7F, 0x3E, 0x1C, 0x1C, 0x08, 0x00,
0x08, 0x1C, 0x1C, 0x3E, 0x7F, 0x00,
0x14, 0x22, 0x7F, 0x22, 0x14, 0x00,
0x5F, 0x5F, 0x00, 0x5F, 0x5F, 0x00,
0x06, 0x09, 0x7F, 0x01, 0x7F, 0x00,
0x00, 0x66, 0x89, 0x95, 0x6A, 0x00,
0x60, 0x60, 0x60, 0x60, 0x60, 0x00,
0x94, 0xA2, 0xFF, 0xA2, 0x94, 0x00,
0x08, 0x04, 0x7E, 0x04, 0x08, 0x00,
0x10, 0x20, 0x7E, 0x20, 0x10, 0x00,
0x08, 0x08, 0x2A, 0x1C, 0x08, 0x00,
0x08, 0x1C, 0x2A, 0x08, 0x08, 0x00,
0x1E, 0x10, 0x10, 0x10, 0x10, 0x00,
0x0C, 0x1E, 0x0C, 0x1E, 0x0C, 0x00,
0x30, 0x38, 0x3E, 0x38, 0x30, 0x00,
0x06, 0x0E, 0x3E, 0x0E, 0x06, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x5F, 0x00, 0x00, 0x00,
0x00, 0x07, 0x00, 0x07, 0x00, 0x00,
0x14, 0x7F, 0x14, 0x7F, 0x14, 0x00,
0x24, 0x2A, 0x7F, 0x2A, 0x12, 0x00,
0x23, 0x13, 0x08, 0x64, 0x62, 0x00,
0x36, 0x49, 0x56, 0x20, 0x50, 0x00,
0x00, 0x08, 0x07, 0x03, 0x00, 0x00,
0x00, 0x1C, 0x22, 0x41, 0x00, 0x00,
0x00, 0x41, 0x22, 0x1C, 0x00, 0x00,
0x2A, 0x1C, 0x7F, 0x1C, 0x2A, 0x00,
0x08, 0x08, 0x3E, 0x08, 0x08, 0x00,
0x00, 0x80, 0x70, 0x30, 0x00, 0x00,
0x08, 0x08, 0x08, 0x08, 0x08, 0x00,
0x00, 0x00, 0x60, 0x60, 0x00, 0x00,
0x20, 0x10, 0x08, 0x04, 0x02, 0x00,
0x3E, 0x51, 0x49, 0x45, 0x3E, 0x00,
0x00, 0x42, 0x7F, 0x40, 0x00, 0x00,
0x72, 0x49, 0x49, 0x49, 0x46, 0x00,
0x21, 0x41, 0x49, 0x4D, 0x33, 0x00,
0x18, 0x14, 0x12, 0x7F, 0x10, 0x00,
0x27, 0x45, 0x45, 0x45, 0x39, 0x00,
0x3C, 0x4A, 0x49, 0x49, 0x31, 0x00,
0x41, 0x21, 0x11, 0x09, 0x07, 0x00,
0x36, 0x49, 0x49, 0x49, 0x36, 0x00,
0x46, 0x49, 0x49, 0x29, 0x1E, 0x00,
0x00, 0x00, 0x14, 0x00, 0x00, 0x00,
0x00, 0x40, 0x34, 0x00, 0x00, 0x00,
0x00, 0x08, 0x14, 0x22, 0x41, 0x00,
0x14, 0x14, 0x14, 0x14, 0x14, 0x00,
0x00, 0x41, 0x22, 0x14, 0x08, 0x00,
0x02, 0x01, 0x59, 0x09, 0x06, 0x00,
0x3E, 0x41, 0x5D, 0x59, 0x4E, 0x00,
0x7C, 0x12, 0x11, 0x12, 0x7C, 0x00,
0x7F, 0x49, 0x49, 0x49, 0x36, 0x00,
0x3E, 0x41, 0x41, 0x41, 0x22, 0x00,
0x7F, 0x41, 0x41, 0x41, 0x3E, 0x00,
0x7F, 0x49, 0x49, 0x49, 0x41, 0x00,
0x7F, 0x09, 0x09, 0x09, 0x01, 0x00,
0x3E, 0x41, 0x41, 0x51, 0x73, 0x00,
0x7F, 0x08, 0x08, 0x08, 0x7F, 0x00,
0x00, 0x41, 0x7F, 0x41, 0x00, 0x00,
0x20, 0x40, 0x41, 0x3F, 0x01, 0x00,
0x7F, 0x08, 0x14, 0x22, 0x41, 0x00,
0x7F, 0x40, 0x40, 0x40, 0x40, 0x00,
0x7F, 0x02, 0x1C, 0x02, 0x7F, 0x00,
0x7F, 0x04, 0x08, 0x10, 0x7F, 0x00,
0x3E, 0x41, 0x41, 0x41, 0x3E, 0x00,
0x7F, 0x09, 0x09, 0x09, 0x06, 0x00,
0x3E, 0x41, 0x51, 0x21, 0x5E, 0x00,
0x7F, 0x09, 0x19, 0x29, 0x46, 0x00,
0x26, 0x49, 0x49, 0x49, 0x32, 0x00,
0x03, 0x01, 0x7F, 0x01, 0x03, 0x00,
0x3F, 0x40, 0x40, 0x40, 0x3F, 0x00,
0x1F, 0x20, 0x40, 0x20, 0x1F, 0x00,
0x3F, 0x40, 0x38, 0x40, 0x3F, 0x00,
0x63, 0x14, 0x08, 0x14, 0x63, 0x00,
0x03, 0x04, 0x78, 0x04, 0x03, 0x00,
0x61, 0x59, 0x49, 0x4D, 0x43, 0x00,
0x00, 0x7F, 0x41, 0x41, 0x41, 0x00,
0x02, 0x04, 0x08, 0x10, 0x20, 0x00,
0x00, 0x41, 0x41, 0x41, 0x7F, 0x00,
0x04, 0x02, 0x01, 0x02, 0x04, 0x00,
0x40, 0x40, 0x40, 0x40, 0x40, 0x00,
0x00, 0x03, 0x07, 0x08, 0x00, 0x00,
0x20, 0x54, 0x54, 0x78, 0x40, 0x00,
0x7F, 0x28, 0x44, 0x44, 0x38, 0x00,
0x38, 0x44, 0x44, 0x44, 0x28, 0x00,
0x38, 0x44, 0x44, 0x28, 0x7F, 0x00,
0x38, 0x54, 0x54, 0x54, 0x18, 0x00,
0x00, 0x08, 0x7E, 0x09, 0x02, 0x00,
0x18, 0xA4, 0xA4, 0x9C, 0x78, 0x00,
0x7F, 0x08, 0x04, 0x04, 0x78, 0x00,
0x00, 0x44, 0x7D, 0x40, 0x00, 0x00,
0x20, 0x40, 0x40, 0x3D, 0x00, 0x00,
0x7F, 0x10, 0x28, 0x44, 0x00, 0x00,
0x00, 0x41, 0x7F, 0x40, 0x00, 0x00,
0x7C, 0x04, 0x78, 0x04, 0x78, 0x00,
0x7C, 0x08, 0x04, 0x04, 0x78, 0x00,
0x38, 0x44, 0x44, 0x44, 0x38, 0x00,
0x7C, 0x18, 0x24, 0x24, 0x18, 0x00,
0x18, 0x24, 0x24, 0x18, 0x7C, 0x00,
0x7C, 0x08, 0x04, 0x04, 0x08, 0x00,
0x48, 0x54, 0x54, 0x54, 0x24, 0x00,
0x04, 0x04, 0x3F, 0x44, 0x24, 0x00,
0x3C, 0x40, 0x40, 0x20, 0x7C, 0x00,
0x1C, 0x20, 0x40, 0x20, 0x1C, 0x00,
0x3C, 0x40, 0x30, 0x40, 0x3C, 0x00,
0x44, 0x28, 0x10, 0x28, 0x44, 0x00,
0x4C, 0x90, 0x90, 0x90, 0x7C, 0x00,
0x44, 0x64, 0x54, 0x4C, 0x44, 0x00,
0x00, 0x08, 0x36, 0x41, 0x00, 0x00,
0x00, 0x00, 0x77, 0x00, 0x00, 0x00,
0x00, 0x41, 0x36, 0x08, 0x00, 0x00,
0x02, 0x01, 0x02, 0x04, 0x02, 0x00,
0x3C, 0x26, 0x23, 0x26, 0x3C, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x80, 0xC0, 0xC0,
0xE0, 0xF0, 0xF0, 0xF8, 0xFC, 0xBC,
0x9E, 0x9E, 0xBC, 0xFC, 0xF8, 0xF0,
0xF0, 0xE0, 0xC0, 0xC0, 0x80, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x80, 0xC0, 0xF0, 0xFC, 0xFE, 0x8E,
0xE6, 0x70, 0x00, 0xFC, 0xFE, 0xFE,
0xFC, 0x00, 0x38, 0x78, 0xF0, 0xFE,
0xFE, 0xF0, 0x78, 0x38, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x78, 0x78, 0x78, 0x78, 0x78,
0x78, 0x78, 0x7E, 0x7E, 0xFE, 0xFC,
0xFC, 0x7C, 0x18, 0x00, 0x9E, 0xBC,
0x1C, 0x02, 0x0F, 0x1E, 0x0C, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xE0, 0xF0, 0xF0, 0xF0, 0xE0, 0xEC,
0xEE, 0xF7, 0xF3, 0x70, 0x20, 0x00,
0x7C, 0x7C, 0x7C, 0x7E, 0x00, 0x7E,
0x7E, 0x7E, 0x7F, 0x7F, 0x7F, 0x00,
0x00, 0x80, 0xC0, 0xE0, 0x7E, 0x5B,
0x4F, 0x5B, 0xFE, 0xC0, 0x00, 0x00,
0xC0, 0x00, 0xDC, 0xD7, 0xDE, 0xDE,
0xDE, 0xD7, 0xDC, 0x00, 0xC0, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x01, 0xE1, 0xE1, 0xE1,
0xE1, 0xE3, 0xE7, 0xE7, 0xE3, 0xE3,
0xFF, 0xFF, 0xE3, 0xE3, 0xE7, 0xE7,
0xE3, 0xE1, 0xE1, 0xE1, 0xE1, 0x01,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x40, 0xF1, 0xFB, 0xFF, 0xFF, 0xE7,
0xF3, 0xF8, 0x00, 0xFF, 0xFF, 0xFF,
0xFF, 0x87, 0xC7, 0xE7, 0xFF, 0xFF,
0xFF, 0xFF, 0xE7, 0xC7, 0x87, 0x07,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x8E, 0x9E, 0x9E, 0x1E, 0x1E,
0x1E, 0x1E, 0x1E, 0x1E, 0x9F, 0xDF,
0xFF, 0xFF, 0xFE, 0xCF, 0x0F, 0x0F,
0x07, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x0F, 0x1F, 0x3F, 0x7F, 0x7F, 0x7F,
0x7F, 0x7F, 0x3F, 0x1E, 0x0C, 0x00,
0x1F, 0x1F, 0x1F, 0x3F, 0x00, 0x3F,
0x3F, 0x3F, 0x7F, 0x7F, 0x7F, 0x00,
0x30, 0x7B, 0x7F, 0x78, 0x30, 0x20,
0x20, 0x30, 0x78, 0x7F, 0x3B, 0x00,
0x03, 0x00, 0x0F, 0x7F, 0x0F, 0x0F,
0x0F, 0x7F, 0x0F, 0x00, 0x03, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x70, 0x70, 0x71, 0x73,
0x73, 0x7F, 0x7E, 0x7C, 0x70, 0x70,
0x7F, 0x7F, 0x70, 0x70, 0x7C, 0x7E,
0x7F, 0x73, 0x73, 0x71, 0x70, 0x70,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x60, 0x7C, 0x3E, 0x01, 0x3E, 0x61,
0x0E, 0x1E, 0x00, 0x3F, 0x7F, 0x7F,
0x7F, 0x73, 0x73, 0x71, 0x70, 0x77,
0x77, 0x70, 0x71, 0x73, 0x73, 0x73,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x1F, 0x7F, 0x7F, 0x78, 0x78,
0x78, 0x78, 0x78, 0x78, 0x79, 0x7B,
0x7B, 0x7B, 0x03, 0x01, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
};

View File

@@ -0,0 +1,21 @@
/*
Copyright 2021 adpenrose
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/>.
*/
#ifndef OLED_FONT_H
# define OLED_FONT_H "lib/kintsugifont.c"
# define OLED_TIMEOUT 120000
#endif

View File

@@ -0,0 +1,37 @@
# Kintsugi
![kintsugi](https://i.imgur.com/HPdmzdCl.jpeg)
A 65%-ish keyboard with some extra features.
## Features
* Powered by an ATmega32u4 microcontroller (current version needs an Elite-C to work).
* Encoder.
* OLED screen.
* Underglow.
* Hotswap sockets.
## General info
* Keyboard Maintainer: [Arturo Avila](https://github.com/ADPenrose)
* Hardware Supported: Kintsugi V1 PCB
* Hardware Availability: [Arturo Avila](https://github.com/ADPenrose)
Make example for this keyboard (after setting up your build environment):
make kintsugi:default
Flashing example for this keyboard:
make kintsugi: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 front of the Elite-C microcontroller _**before soldering**_ it to the PCB- some may have pads you must short instead
* **Keycode in layout**: Press the key mapped to `RESET` if it is available

View File

@@ -0,0 +1,21 @@
# 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 = 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 = no # Enable N-Key Rollover
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
AUDIO_ENABLE = no # Audio output
ENCODER_ENABLE = yes # Encoder functionality
OLED_ENABLE = yes # OLED functionality
OLED_DRIVER = SSD1306

View File

@@ -62,11 +62,6 @@
/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
#define DEBOUNCE 5
/* 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
/* Serial settings */
#define USE_SERIAL
/* serial.c configuration for split keyboard */
@@ -76,8 +71,9 @@
#define EE_HANDS
/* Top left key on left half */
#define BOOTMAGIC_LITE_ROW 0
#define BOOTMAGIC_LITE_ROW 0
#define BOOTMAGIC_LITE_COLUMN 0
/* Top right key on right half */
#define BOOTMAGIC_LITE_ROW_RIGHT 4
#define BOOTMAGIC_LITE_ROW_RIGHT 4
#define BOOTMAGIC_LITE_COLUMN_RIGHT 4

View File

@@ -52,7 +52,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
//#define SOFT_SERIAL_PIN D0 // or D1, D2, D3, E6
#define LED_CAPS_LOCK_PIN B2
#define LED_CAPS_LOCK_PIN B0
#define LED_PIN_ON_STATE 0
//#define BACKLIGHT_PIN B7

View File

@@ -303,7 +303,7 @@ void suspend_power_down_user() {
bool oled_task_user(void) {
if (timer_elapsed32(oled_timer) > 30000) {
oled_off();
return;
return false;
}
#ifndef SPLIT_KEYBOARD
else { oled_on(); }

View File

@@ -0,0 +1,410 @@
/*
Copyright 2021 Álvaro "Gondolindrim" Volpato <alvaro.volpato@usp.br>
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/>.
*/
/* ---------------------------------------------- EVOLV75 GONDOLINDRIM LAYOUT
This is the firmware for the Evolv75 CE (pre-Alpha) PCBs as designed by Gondolindrim.
The final objective is to achieve a joystic encoder feature where the encoder can exhibit multiple behaviours, hereby called "encoder modes", which can be switched seamlessly by the user. In order to make the user know what encoder mode is active at a given instant, the keyboard has RGB underglow LEDs that shine a particular color; each mode has its own color.
Modes, their behaviours and their colors are user-customizable.
*/
/* ---------------------------------------------- BASIC DEFINITIONS
DON"T CHANGE ANY OF THESE.
*/
#include QMK_KEYBOARD_H
typedef uint8_t color[3];
#define COLOR(h,s,v) ((color){h,s,v})
// Defining custom keycodes
enum keyboard_keycodes {
ENCCLK = 0x5F80, // For "encoder click"
ENCNTH, // "Encoder north"
ENCSTH, // "Encoder south"
ENCEST, // "Encoder east"
ENCWST, // "Encoder west"
ALTTABN, // For alt-tab-switch, next
ALTTABP, // For alt-tab-switch, previous
ALTTABC, // For alt-tab-click
ENCMUP, // Encoder mode up
ENCMDN // Encoder mode down
};
// Defining the encoder mode data structure
typedef struct _encoder_mode_t {
color indicator_color;
uint16_t clockwise_key[4];
uint16_t counterclockwise_key[4];
uint16_t clicked_key[4];
uint16_t north_key[4];
uint16_t south_key[4];
uint16_t east_key[4];
uint16_t west_key[4];
} encoder_mode_t;
/* ---------------------------------------------- COLORS
Colors are defined as HSV values where the values range from 0 to 255. Template:
#define <COLOR NAME> COLOR( <HSV CODE> )
Use these to define the colors for encoder modes.
*/
#define CYAN COLOR(128,255,255)
#define PINK COLOR(191,255,255)
#define YELLOW COLOR(36,255,255)
#define WHITE COLOR(0,0,255)
#define STARTUP_COLOR WHITE
/* ---------------------------------------------- DELAYS
These delays define some important behaviours on the firmware.
MEDIA_KEY_DELAY is used throughout the code to hold certain keycodes for a time before holding them; this allows the use of media keys like volume up and down everywhere.
ALT_TAB_DELAY is the time delay the firmware holds the LALT key before letting it go; in practical use this means once you rotate the encoder in alt-tabbing mode, it will keep the alt-tab window held for this amount of time.
ENCODER_CLICK_DELAY defines a delayed behavior for the encoder click. Once you click it, a timer is triggered and monitored. If the click is held for more than this macro (defaults to 1000 or 1 second), encoder modes start cycling, each per second, and stops when you release. If you hold the click for shorter than the time defined in this macro, then the firmware registers the key contained in the .clicked_key list of that mode.
*/
#define MEDIA_KEY_DELAY 20
#define ALT_TAB_DELAY 2000
#define ENCODER_CLICK_DELAY 1000
// -------------------------------------------- ENCODER MODES
/* Encoder mode list
WARNING: DO NOT, ABSOLUTELY DO NOT use ENCNTH, ENCSTH, ENCWST or ENCEST in any of the encoder mode keys. The reason is because these keycodes are used in process_record_user and they point to these very same encoder mode keys; this could generate a loop in process_record_user and freeze the keyboard.
You can add and remove modes at will as long as you have at least one.
*/
const encoder_mode_t encoder_modes[] = {
// PINK MODE: "media mode". Encoder controls volume (and mode change on layer 1); click does media pause (mute on layer 1), directionals do arrows.
{ .indicator_color = PINK,
.clockwise_key = {KC_VOLU, ENCMUP, KC_VOLU, KC_VOLU},
.counterclockwise_key = {KC_VOLD, ENCMDN, KC_VOLD, KC_VOLD},
.clicked_key = {KC_MUTE, KC_MUTE, KC_MPLY, KC_MUTE},
.north_key = {KC_UP, KC_UP, KC_UP, KC_UP},
.south_key = {KC_DOWN, KC_DOWN, KC_DOWN, KC_DOWN},
.east_key = {KC_RGHT, KC_RGHT, KC_RGHT, KC_RGHT},
.west_key = {KC_LEFT, KC_LEFT, KC_LEFT, KC_LEFT}
},
/* CYAN MODE: "application mode". Switches back and forth between applications ("alt-tabbing"); click stops the alt-tabbing at the selected application. When on layer 1, encoder changes modes. East-west switches tabs ("ctrl-tabbing") and north-sourh maximizes/minimizes windows (GUI plus up and down). Note: these are modifier keys defined natively in QMK
- C(kc) means hold left control and press kc
- MEH(kc) means hold left control, left shift and press kc
- G(kc) means hold LGUI and press kc
*/
{ .indicator_color = CYAN,
.clockwise_key = {ALTTABN, ENCMUP, ALTTABN, ALTTABN},
.counterclockwise_key = {ALTTABP, ENCMDN, ALTTABP, ALTTABP},
.clicked_key = {ALTTABC, ALTTABC, ALTTABC, ALTTABC},
.north_key = {G(KC_UP),G(KC_UP), G(KC_UP), G(KC_UP)},
.south_key = {G(KC_DOWN), G(KC_DOWN), G(KC_DOWN), G(KC_DOWN)},
.east_key = {C(KC_TAB), C(KC_TAB), C(KC_TAB), C(KC_TAB)},
.west_key = {S(C(KC_TAB)), S(C(KC_TAB)), S(C(KC_TAB)), S(C(KC_TAB))}
},
// YELLOW MODE: "navigation mode". Encoder mimicks mousehwheel, click does mouseclick. North-wouth does page up/down, east-west do home and end.
{ .indicator_color = YELLOW,
.clockwise_key = {KC_WH_U, ENCMUP, KC_WH_U, KC_WH_U},
.counterclockwise_key = {KC_WH_D, ENCMDN, KC_WH_D, KC_WH_D},
.clicked_key = {KC_BTN1, KC_BTN2, KC_BTN1, KC_BTN1},
.north_key = {KC_PGUP, KC_PGUP, KC_PGUP, KC_PGUP},
.south_key = {KC_PGDN, KC_PGDN, KC_PGDN, KC_PGDN},
.east_key = {KC_END, KC_END, KC_END, KC_END},
.west_key = {KC_HOME, KC_HOME, KC_HOME, KC_HOME}
}
// Insert your custom encoder mode here
};
#define NUM_ENCODER_MODES (sizeof(encoder_modes)/sizeof(encoder_modes[0])) // DO NOT CHANGE THIS. NUM_ENCODER_MODES calculates how many modes there are.
// This counter is used to track what encoder mode is being used at a certain time
int encoder_mode_count = 0;
/* ---------------------------------------------- RGB STARTING COLOR
Due to the way rgblight.c stores to and re-stores RGB configurations from EEPROM, the first time the MCU boots up, the EEPROM will not have stored the default value for the RGB animation which in QMK is the static red light; however, during the first bootup, this EEPROM will be set so that, in all subsequent bootups, the RGBs will glow red instead of whatever color the first encoder mode is. What these lines do is re-define the default RGB color so that the default RGB color is defined the same as encoder mode [0] so that the RGB will glow this color once the keyboard boots. DONT CHANGE THIS.
*/
#define RGBLIGHT_DEFAULT_HUE encoder_modes[0].indicator_color[0]
#define RGBLIGHT_DEFAULT_SAT encoder_modes[0].indicator_color[1]
#define RGBLIGHT_DEFAULT_VAL encoder_modes[0].indicator_color[2]
/* ---------------------------------------------- DEFINING DEFAULT KEYMAP
Adapt this at will with the caveat that you should not have more nor less than four layers. And let's be honest, if you find yourself needing more than four layers on a 75% keyboard you are probably doing something wrong.
*/
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT_evolv_iso(
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_INS ,
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_BSPC, KC_DEL , ENCNTH,
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_PGUP, ENCWST , ENCCLK, ENCEST,
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_NUHS, KC_PGDN, ENCSTH,
KC_LSFT, KC_BSLS, KC_Z , KC_X , KC_C , KC_V , KC_B , KC_N , KC_M , KC_COMM, KC_DOT , KC_SLSH, KC_RSFT, KC_UP , MO(1) ,
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC , KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
[1] = LAYOUT_evolv_iso(
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, ENCNTH,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, ENCWST , ENCCLK, ENCEST,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, ENCSTH,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_TRNS,
_______, _______, _______, _______, _______, _______, _______, _______, _______),
[2] = LAYOUT_evolv_iso(
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, ENCNTH,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, ENCWST , ENCCLK, ENCEST,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, ENCSTH,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______),
[3] = LAYOUT_evolv_iso(
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, ENCNTH,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, ENCWST , ENCCLK, ENCEST,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, ENCSTH,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______)
};
/* ---------------------------------------------- END OF USER CUSTOMIZABLE CODE
Everything past here are functions that operate the firmware. There is nothing to be customized by the user for encoder modes or keyboard keymap.
*/
/* ---------------------------------------------- SET INDICATOR COLOR FUNCTION
This is the function used when the RGB colors need to change.
*/
void set_indicator_colors(const color target_color){
rgblight_sethsv(target_color[0],target_color[1],target_color[2]);
};
// Board init: RGB indicator is set to the first encoder mode color, also encoder mode is set to first mode.
void keyboard_pre_init_user(void){
set_indicator_colors(STARTUP_COLOR);
encoder_mode_count = 0;
};
void keyboard_post_init_user(void){
set_indicator_colors(encoder_modes[0].indicator_color);
};
/* ---------------------------------------------- SPECIAL KEYCODE PROCESSING
The heart of this firmware is the process_custom_keycode function; this allows all the customized keycodes ENCMUP, ENCMDN, ALTTABN, ALLTABP and so on to be used in any place including the encoder callback. Its main mechanic is calling the process_record_user function, where there is a function for each one of the customized keycodes.
What process_custom_keycode does is, if a "normal" keycode is passed on, then it is registered and held for a small period of time (MEDIA_KEY_DELAY to be more specific). This "holding" allows it to correctly register media keys. However, if a custom keycode is used, then the function executes process_record_user again, but now with a new argument keycode that will be whatever is mapped inside the special key requested.
Admittedly, this implementation looks redundant: process_record_user calls process_custom_keycode which calls process_record_user again. However, the ingenuity of this recursion is this allows any of the custom keycodes to be mappable both to encoder action as well as keys by having their behavior mapped to a single function in a switch-case structure. For instance, by having the encoder update function encoder_update_user use process_custom_keycode, the code for each custom keycode can be present in a single place in the code, that is, in process_record_user. On another hand, if the user wants to map a certain special keycode to a particular key, they can do so; for instance, if the user wants to map the encoder mode switch keys ENCMUP/ENCMDN to, say, left and right keys of layer 1, they can also do so.
The glaring problem with this approach is the same as with all recursions: a recursion mapped to itself is a loop, meaning that it is very easy to put the program in a loop within process_record_user by nesting the custom keycodes, for instance, using the keycode ENCNTH in a north key in any of the modes. This then requires a certain care from whoever is adapting or customizing their encoder modes to not use ENCNTH, ENCSTH, ENCWST, ENCEST in the keymap or the encoder modes. The way the firmware deals with this is by only processing keycodes inside the 0x5F85 and 0x5F89 range which exclude these keys; if the given keycode is in the 0x5F80 to 0x5F84 range, which pertains to these forbidden keycodes, nothing is done; to the user it will seem like nothing happens.
In the case of the encoder rotating action, in order to call process_record_user a placeholder record is used, the idea being to use values not obtainable phisically on the keyboard like col 20, row 20, with a timer right at the begginig of the code initialization.
keyrecord_t record {
keyevent_t event {
keypos_t key {
uint8_t col
uint8_t row
}
bool pressed
uint16_t time
}
}
Despite this long description, process_custom_kc is fairly simple. It tests the passed keycode and, if it is one of the custom-defined keys in the forbidden range, nothing is done; if it's one of the good ones, process_record_user is called and the function for that particular keycode will be executed. In other cases, if the event was a press the keycode is registered and held for MEDIA_KEY_DELAY ms. In the case the event was a release, the keycode is unregistered.
*/
keyrecord_t placeholder_record ;
//placeholder_record->event.key.col = 20;
//placeholder_record.event.key.row = 20;
//placeholder_record.event.time = timer_read32();
uint16_t mapped_code = 0;
uint32_t held_keycode_timer = 0;
void process_custom_keycode(uint16_t keycode, keyrecord_t *record){
if (keycode >= 0x05F80 && keycode < 0x5F85) ;
else if (keycode >= 0x5F85 && keycode <= 0x5F89) process_record_user(keycode, record);
else {
// Note: (un)register_keycode16 need to be the 16 bit versions in case modifier keys like C(), G() and so on are used. This is specially true for the "application control" encoder mode.
if (record->event.pressed){
register_code16(keycode);
held_keycode_timer = timer_read32();
while (timer_elapsed32(held_keycode_timer) < MEDIA_KEY_DELAY);
} else unregister_code16(keycode);
}
}
// Basically calls process_custom_keycode in a press event and then in a release event. This is basically done to tap custom keycodes.
void tap_custom_keycode(uint16_t keycode){
placeholder_record.event.pressed = true;
process_custom_keycode(keycode, &placeholder_record);
placeholder_record.event.pressed = false;
process_custom_keycode(keycode, &placeholder_record);
}
/* ---------------------------------------------- LAYER UPDATING
Keeps track of the highest active layer.
*/
int current_layer = 0 ; // Updated in layer_state_set_user each time a layer change is made
layer_state_t layer_state_set_user(layer_state_t state) {
current_layer = get_highest_layer(state);
return state;
}
/* ---------------------------------------------- ENCODER MDOE CYCLING
Pretty straightforward: cycles encoder mode forwards if passed a true value and backwards otherwise.
Some care is taken for two edge cases:
- The user is at mode 0 and the encoder mode is changed backwards
- The user is at the last mode and changes it forward.
The program deals with this last case by taking the division remainder, which will take encoder_mode_count to 0. For the first case, encoder_mode_count is just made equal to the last (highest) mode.
*/
void cycle_encoder_mode(bool forward){
forward ? encoder_mode_count++ : encoder_mode_count-- ;
if (encoder_mode_count == -1) encoder_mode_count = NUM_ENCODER_MODES - 1;
encoder_mode_count = encoder_mode_count%NUM_ENCODER_MODES ; // This makes sure encoder_mode_count keeps cycling between 0,1,...,NUM_ENCODER_MODES and doesnt eventually overflow
set_indicator_colors( encoder_modes[ encoder_mode_count ].indicator_color ); // Set indicator color to the corresponding defined color
}
/* ---------------------------------------------- PROCESSING ALT-TABBING
This function process the alt-tabbing keycode ALTTABS. The process works in a few steps:
- At first, the flag is_alt_tab_active is false. When the user first uses this keycode (rotating the encoder, for instance) then the function turns the flag and "presses" left alt (KC_LALT), also triggering a timer alt_tab_timer.
- The alt_tab_timer is supposed to keep track of how many miliseconds the alt-tab window should be kept, that is, how much time the LALT keycode should be held. The objective being, once the user cycles through the applications to the desired one, they select it either by not rotating the applications anymore or clicking the encoder.
- Finally, the function shoots out the KC_TAB keycode if the encoder was rotated clockwise or the S(KC_TAB) (shift + tab) if the encoder was rotated counterclockwise.
- If the user cycles the encoder still while alt-tab is active, then the function refreshes the timer and shoots out tab or shift+tab.
- The function that keeps track of the timer expiration is housekeeping_task_user, where if the alt_tab_timer surpasses the defined ALT_TAB_DELAY macro (defaults to 2 seconds or 2000 ms) then the release_alt_tab function is called: the LALT keycode is released and the is_alt_tab_active flag is set to false again
- The release_alt_tab function is also called when the ALTTABC keycode is hit, thus selecting the desired application.
*/
// This bool records if LALT is pressed or not. Due to the automatic disabling of the ALT-TAB of the ALTTABS custom keystroke, the automatic disabling can un-register KC_LALT even when the LALT key is phisically pressed. Hence there needs to be two bools: one that keebs track of the ALT-TAB activity and one that keeps track of LALT so that the automatic disabling will not disable LALT if it is phisically pressed.
bool is_lalt_pressed = false;
bool is_alt_tab_active = false; // Flag to check if alt tab is active
uint32_t alt_tab_timer = 0; // Time trigger for alt tab
void process_alt_tabbing(bool next){
if(!is_alt_tab_active) {
is_alt_tab_active = true;
register_code(KC_LALT);
}
alt_tab_timer = timer_read32();
tap_code16(next ? KC_TAB : S(KC_TAB));
}
void release_alt_tab(void){
is_alt_tab_active = false;
unregister_code(KC_LALT);
}
/* ---------------------------------------------- ENCODER UPDATE CALLBACK
This taps the keycode stored in the encoder mode struct, at the current encoder mode, at the current layer. Because the user can use non-QMK-native keycodes in the encoder, like the alt-tabbing keycodes like ALTTABP and ATLTTABN, the tap function is the custom tap one.
*/
bool encoder_update_user(uint8_t index, bool clockwise) {
mapped_code = clockwise ? encoder_modes[ encoder_mode_count ].clockwise_key[ current_layer ] : encoder_modes[ encoder_mode_count ].counterclockwise_key[ current_layer ] ; // mapped code is the clockwise key if a clockwise motion is sensed, otherwise it registers the counterclockwise key
tap_custom_keycode(mapped_code);
return false; // This function needs to return false in order to inhibit the action of encoder_update_user as defined in evolv.c
}
/* ---------------------------------------------- DEALING WITH THE ENCODER CLICK
The encoder used in the Evolv has a construction particularity in that not only it has rotation and clicking but also directional joystic capabilities in the four cardinal directions, as in, it can also register four directions. The way that this works is, there are A,B and a common pin for the encoder rotation , with a PUSH and a COM pin. The encoder pins work pretty much like common encoders, as does the switch click: once you click it, PUSH and COM short-circuit, so the pushing mechanic can be easily integrated into a switch matrix and treated like a switch would.
The problem, however, lies in the directionals. For each directional, say N,S,W,E, there is a corresponding pin on the encoder; once one directional is hit its pin is shorted with PUSH and COM. This means that the directionals can be treated as four short-circuit keys and integrated into the matrix, but with the added hassle that every time one of them is registered, the encoder push is also registered.
The way this firmware deals with this problem is threefold.
- First, there is a is_click_blocked flag that is set true whenever one of the directionals is sensed by the matrix; the name suggests that in this case the click keycode processing should be "blocked". This allows the firmware to differentiate between an event where a directional was hit (the encoder push is recognized but is_click_blocked is true) and an event where only the push was used (is_click_blocked is false albeit the push being sensed).
- Second, in order to prevent the encoder push key from registering before the flag is set, a 20ms delay takes place when the encoder click was sensed; this means that when a directional is hit, the encoder action is guaranteed to be processed only after the is_click_blocked flag is true.
- Finally, held_click_timer and is_click_held are used to differentiate between a click short push and a long push; when a directional key is hit, is_click_held is immediately reset, further preventing any action corresponding to the encoder push click being held down.
automatic_encoder_mode_cycle is a flag used by the housekeeping function to communicate an encoder mode change was made during an encoder push, meaning that the user has held the encoder enough to trigger an encoder mode change. What the housekeeping function does is constantly monitor the timer so that, when it extrapolates the designated ENCODER_CLICK_DELAY, a mode change takes place; the held_click_timer timer is refreshed. The problem is that, once the user reaches their desired mode and releases the encoder, the timer had been refreshed and is lower than the designated delay, which would cause the "fast click" keycode to be triggered, which is of course unwanted. Hence the algorithm filters out these situations by knowing when the automatic mode change has taken place and not registering the click key, only resetting the automatic_encoder_mode_cycle flag.
Finally, the process_encoder_click function has two parts. In a click press event, it sets the flag is_click_held and triggers a timer. When the encoder push is released, the timer is sampled and the pertinent action is taken depending on how much time the encoder was held for.
*/
uint32_t held_click_timer = 0;
bool is_click_held = false;
bool is_shift_held = false;
bool automatic_encoder_mode_cycle = false; // This flag registers if the encoder mode was automatically cycled
bool is_click_blocked = false;
void process_encoder_click(bool clickpress){
// What to do when the encoder is pressed: turn the flag to true, start (or refresh) timer
if (clickpress) {
is_click_held = true;
held_click_timer = timer_read32();
} else { // What to do when encoder is released
is_click_held = false;
// Checking if the time the encoder click was held was smaller than the delay defined and if an automatic mode change was not already performed. If it was, just register whatever it is the click does.
if (timer_elapsed32(held_click_timer) < ENCODER_CLICK_DELAY && !automatic_encoder_mode_cycle ) tap_custom_keycode(encoder_modes[ encoder_mode_count ].clicked_key[ current_layer ]);
automatic_encoder_mode_cycle = false;
}
}
bool process_directional(uint16_t keycode, keyrecord_t *record){
is_click_held = false;
is_click_blocked = record->event.pressed ;
process_custom_keycode( keycode , record );
return false;
}
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
switch (keycode) {
case KC_LSFT:
case KC_RSFT:
is_shift_held = record->event.pressed;
break;
case KC_LALT: // If this is not defined, if the encoder is activated in the alt-tab mode while the LALT key is pressed, the menu goes away.
is_lalt_pressed = record->event.pressed;
break;
// ---------------------------------------------- CUSTOM KEYCODES: they do their thing and retun false right away to prevent any further action
// --------------------- Encoder directionals (note: process_directional always returns false)
case ENCNTH: return process_directional( encoder_modes[ encoder_mode_count ].north_key[ current_layer ] , record);
case ENCSTH: return process_directional( encoder_modes[ encoder_mode_count ].south_key[ current_layer ] , record);
case ENCEST: return process_directional( encoder_modes[ encoder_mode_count ].east_key[ current_layer ] , record);
case ENCWST: return process_directional( encoder_modes[ encoder_mode_count ].west_key[ current_layer ] , record);
// --------------------- Encoder click
case ENCCLK:
held_keycode_timer = timer_read32();
while (timer_elapsed32(held_keycode_timer) < 20);
if(!is_click_blocked) process_encoder_click(record->event.pressed);
return false; // Skip all further processing of this key
// --------------------- Alt-tabbing
case ALTTABN:
case ALTTABP:
if(record->event.pressed) process_alt_tabbing(keycode == ALTTABN); // alt-tabs forward if the keycode is ALTTABN, else alt-tabs backwards if it's ALTTABP
return false;
case ALTTABC:
if(record->event.pressed) release_alt_tab();
return false;
// --------------------- Encoder mode up/down
case ENCMUP:
case ENCMDN:
if(record->event.pressed) cycle_encoder_mode(keycode == ENCMUP); // Cycles encoder mode up if keycode is ENCMUP, else cycles backwards if the keycode is ENCMDN
return false;
// ---------------------------------------------- DEFAULT
default:
return true;
}
return true;
}
/* ---------------------------------------------- HOUSEKEEPING
Housekeeping keeps track of three events:
- Keeps track of the alt-tabbing timer. If it surpasses ALT_TAB_DELAY the release_alt_tab function is called;
- Keeps track of the encoder click hold timer; if the encoder click is held for more than a certain delay, cycles encoder mode and sets the automatic_mode_change flag.
- The is_click_blocked flag marks if the encoder click has been registered with a directional key (recall that in this encoder, when a directional key is hit, both the directional key and the encoder push key are triggered in the keymap). In this case, only the directional should be registered. Hence, this housekeeping function resets the held_click_timer timer because, if this is not done, if the directional key is held for more than ENCODER_CLICK_DELAY then this will trigger an automatic mode change.
*/
void housekeeping_task_user(void) {
if (is_alt_tab_active){
if (is_lalt_pressed) alt_tab_timer = timer_read32(); // If the user is holding the LALT key, refresh the timer
else if (timer_elapsed32(alt_tab_timer) > ALT_TAB_DELAY) release_alt_tab(); // If the timer surpasses the delay, release alt tab
}
if (is_click_blocked) held_click_timer = timer_read32(); // To prevent mode changing when directionals are held
if (is_click_held && timer_elapsed32(held_click_timer) > ENCODER_CLICK_DELAY ){
automatic_encoder_mode_cycle = true;
held_click_timer = timer_read32();
if (is_shift_held) cycle_encoder_mode(false);
else cycle_encoder_mode(true);
}
}

View File

@@ -10,11 +10,11 @@ BOOTLOADER = stm32-dfu
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
CONSOLE_ENABLE = no # Console for debug
COMMAND_ENABLE = no # Commands for debug and configuration
NKRO_ENABLE = yes # Enable N-Key Rollover
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
AUDIO_ENABLE = no # Audio output
ENCODER_ENABLE = yes

View File

@@ -1,4 +1,7 @@
/* Copyright 2018-2020 ENDO Katsuhiro <ka2hiro@curlybracket.co.jp> David Philip Barr <@davidphilipbarr> Pierre Chevalier <pierrechevalier83@gmail.com>
/* Copyright 2018-2020
ENDO Katsuhiro <ka2hiro@curlybracket.co.jp>
David Philip Barr <@davidphilipbarr>
Pierre Chevalier <pierrechevalier83@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
@@ -61,11 +64,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
#define DEBOUNCE 5
/* 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
/* Serial settings */
#define USE_SERIAL
/* serial.c configuration for split keyboard */
@@ -74,8 +72,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define EE_HANDS
/* Top left key on left half */
#define BOOTMAGIC_LITE_ROW 0
#define BOOTMAGIC_LITE_ROW 0
#define BOOTMAGIC_LITE_COLUMN 0
/* Top right key on right half */
#define BOOTMAGIC_LITE_ROW_RIGHT 4
#define BOOTMAGIC_LITE_ROW_RIGHT 4
#define BOOTMAGIC_LITE_COLUMN_RIGHT 4

117
keyboards/gurindam/config.h Normal file
View File

@@ -0,0 +1,117 @@
/*
Copyright 2021 Ibnu D. Aji
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 0x1209
#define PRODUCT_ID 0x6974
#define DEVICE_VER 0x0001
#define MANUFACTURER Ibnu D. Aji
#define PRODUCT Gurindam
/* key matrix size */
#define MATRIX_ROWS 9
#define MATRIX_COLS 8
/*
* 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 { B5, B4, E6, D7, C6, D4, D0, D1, D2}
#define MATRIX_COL_PINS { F6, F5, F4, F7, B1, B3, B2, B6 }
#define UNUSED_PINS
/* COL2ROW, ROW2COL*/
#define DIODE_DIRECTION COL2ROW
#define RGB_DI_PIN D3
#define RGBLED_NUM 10
#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
/* 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

View File

@@ -0,0 +1,16 @@
/* Copyright 2021 Ibnu D. Aji
*
* 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 "gurindam.h"

View File

@@ -0,0 +1,46 @@
/* Copyright 2021 Ibnu D. Aji
*
* 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 XXX KC_NO
#define LAYOUT( \
k1, k6, k10, k15, k19, k24, k28, k33, k37, k42, k46, k51, k55, k60, k64, k65, \
k2, k7, k11, k16, k20, k25, k29, k34, k38, k43, k47, k52, k56, k61, k66, \
k3, k8, k12, k17, k21, k26, k30, k35, k39, k44, k48, k53, k57, k62, \
k4, k9, k13, k18, k22, k27, k31, k36, k40, k45, k49, k54, k58, \
k5, k14, k23, k32, k41, k50, k59, k63, k67 \
) \
{ \
{ k1, k10, k19, k28, k37, k46, k55, k64 }, \
{ k6, k15, k24, k33, k42, k51, k60, XXX }, \
{ k2, k11, k20, k29, k38, k47, k56, k65 }, \
{ k7, k16, k25, k34, k43, k52, k61, XXX }, \
{ k3, k12, k21, k30, k39, k48, k57, k66 }, \
{ k8, k17, k26, k35, k44, k53, k62, XXX }, \
{ k4, k13, k22, k31, k40, k49, k58, k67 }, \
{ k9, k18, k27, k36, k45, k54, k63, XXX }, \
{ k5, k14, k23, k32, k41, k50, k59, XXX } \
}

View File

@@ -0,0 +1,82 @@
{
"keyboard_name": "gurindam",
"url": "https://github.com/ibnuda/gurindam",
"maintainer": "Ibnu D. Aji",
"layouts": {
"LAYOUT": {
"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":9, "y":0},
{"x":10, "y":0},
{"x":11, "y":0},
{"x":12, "y":0},
{"x":13, "y":0},
{"x":14, "y":0},
{"x":15, "y":0},
{"x":16, "y":0},
{"x":17.3, "y":0},
{"x":0, "y":1, "w":1.5},
{"x":1.5, "y":1},
{"x":2.5, "y":1},
{"x":3.5, "y":1},
{"x":4.5, "y":1},
{"x":5.5, "y":1},
{"x":8.5, "y":1},
{"x":9.5, "y":1},
{"x":10.5, "y":1},
{"x":11.5, "y":1},
{"x":12.5, "y":1},
{"x":13.5, "y":1},
{"x":14.5, "y":1},
{"x":15.5, "y":1, "w":1.5},
{"x":17.3, "y":1},
{"x":0, "y":2, "w":1.75},
{"x":1.75, "y":2},
{"x":2.75, "y":2},
{"x":3.75, "y":2},
{"x":4.75, "y":2},
{"x":5.75, "y":2},
{"x":8.75, "y":2},
{"x":9.75, "y":2},
{"x":10.75, "y":2},
{"x":11.75, "y":2},
{"x":12.75, "y":2},
{"x":13.75, "y":2},
{"x":14.75, "y":2, "w":2.25},
{"x":17.3, "y":2},
{"x":0, "y":3, "w":2.25},
{"x":2.25, "y":3},
{"x":3.25, "y":3},
{"x":4.25, "y":3},
{"x":5.25, "y":3},
{"x":6.25, "y":3},
{"x":9.25, "y":3},
{"x":10.25, "y":3},
{"x":11.25, "y":3},
{"x":12.25, "y":3},
{"x":13.25, "y":3},
{"x":14.25, "y":3, "w":1.75},
{"x":16.3, "y":3.25},
{"x":0, "y":4, "w":1.5},
{"x":3.25, "y":4, "w":1.5},
{"x":4.75, "y":4, "w":2},
{"x":6.75, "y":4, "w":1.25},
{"x":8.75, "y":4, "w":2.75},
{"x":11.5, "y":4, "w":1.5},
{"x":15.3, "y":4.25},
{"x":16.3, "y":4.25},
{"x":17.3, "y":4.25}
]
}
}
}

View File

@@ -0,0 +1,34 @@
/* Copyright 2019 Fate
*
* 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] = {
[0] = LAYOUT(
KC_GESC, 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_BSLS, KC_GRV, 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_BSPC, KC_PGDN,
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, MO(1),
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
KC_LCTL, KC_LALT, KC_SPC, KC_LGUI, KC_SPC, KC_RALT, KC_LEFT, KC_DOWN, KC_RGHT
),
[1] = LAYOUT(
_______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, _______,
_______, _______, _______, _______, RESET, RGB_TOG, _______, _______, _______, _______, _______, _______, _______, KC_DEL, _______,
_______, RGB_MOD, RGB_RMOD,RGB_HUI, RGB_HUD, _______, _______, RGB_M_P, RGB_M_B, RGB_M_R, RGB_M_SW,RGB_M_SN,_______, _______,
_______, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______
)
};

View File

@@ -0,0 +1 @@
# The default keymap for gurindam

View File

@@ -0,0 +1,49 @@
/* Copyright 2019 Fate
*
* 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] = {
[0] = LAYOUT(
KC_GESC, 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_BSLS, KC_GRV, 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_BSPC, KC_PGDN,
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, MO(1),
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
KC_LCTL, KC_LALT, KC_SPC, KC_LGUI, KC_SPC, KC_RALT, KC_LEFT, KC_DOWN, KC_RGHT
),
[1] = LAYOUT(
_______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, _______,
_______, _______, _______, _______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______
),
[2] = LAYOUT(
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______
),
[3] = LAYOUT(
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______
)
};

View File

@@ -0,0 +1 @@
VIA_ENABLE = yes

View File

@@ -0,0 +1,23 @@
# gurindam
![Gurindam](https://raw.githubusercontent.com/ibnuda/Gurindam/master-of-puppets/imgs/gurindam-finished.jpg)
A keyboard inspired by Arisu which in turn by Lyn's EM7 and TGR Alice.
* Keyboard Maintainer: [Ibnu D. Aji](https://github.com/ibnuda)
* Hardware Supported: Promicro
* Hardware Availability: [PCB & Stacked Acrylic Case](https://github.com/ibnuda/gurindam) & private group-buy.
Make example for this keyboard (after setting up your build environment):
make gurindam: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 2 ways:
* **Physical reset button**: Briefly press the button on the back of the PCB - some may have pads you must short instead.
* **Keycode in layout**: Hold the mod key (lowest key on the right island) and then tap `R`.

View File

@@ -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 = 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 = yes # Enable N-Key Rollover
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
AUDIO_ENABLE = no # Audio output

View File

@@ -0,0 +1 @@
#include "4x6_5.h"

View File

@@ -0,0 +1,26 @@
#pragma once
#include "dactyl_manuform.h"
#define XXX KC_NO
#define LAYOUT( \
L00, L01, L02, L03, L04, L05, R00, R01, R02, R03, R04, R05, \
L10, L11, L12, L13, L14, L15, R10, R11, R12, R13, R14, R15, \
L20, L21, L22, L23, L24, L25, R20, R21, R22, R23, R24, R25, \
L32, L33, R32, R33, \
L34, L45, L43, R42, R40, R31, \
L44, L42, R43, R41 \
) { \
{ L00, L01, L02, L03, L04, L05 }, \
{ L10, L11, L12, L13, L14, L15 }, \
{ L20, L21, L22, L23, L24, L25 }, \
{ XXX, XXX, L32, L33, L34, XXX }, \
{ XXX, XXX, L42, L43, L44, L45 }, \
\
{ R00, R01, R02, R03, R04, R05 }, \
{ R10, R11, R12, R13, R14, R15 }, \
{ R20, R21, R22, R23, R24, R25 }, \
{ XXX, R31, R32, R33, XXX, XXX }, \
{ R40, R41, R42, R43, XXX, XXX } \
}

View File

@@ -0,0 +1,41 @@
/*
Copyright 2012 Jun Wako <wakojun@gmail.com>
Copyright 2015 Jack Humbert
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 PRODUCT_ID 0x3436
#define DEVICE_VER 0x0001
/* key matrix size */
// Rows are doubled-up
#define MATRIX_ROWS 10
#define MATRIX_COLS 6
// row-driven
#define MATRIX_ROW_PINS { F7, B1, B3, B2, B6 }
#define MATRIX_COL_PINS { D4, C6, D7, E6, B4, B5 }
/* COL2ROW or ROW2COL */
#define DIODE_DIRECTION COL2ROW
// WS2812 RGB LED strip input and number of LEDs
#define RGB_DI_PIN D3
#define RGBLED_NUM 12

View File

@@ -0,0 +1,72 @@
{
"keyboard_name": "Dactyl Manuform 4x6 5 thumb keys",
"url": "",
"maintainer": "qmk",
"layouts": {
"LAYOUT": {
"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": 11, "y": 0},
{"x": 12, "y": 0},
{"x": 13, "y": 0},
{"x": 14, "y": 0},
{"x": 15, "y": 0},
{"x": 16, "y": 0},
{"x": 0, "y": 1},
{"x": 1, "y": 1},
{"x": 2, "y": 1},
{"x": 3, "y": 1},
{"x": 4, "y": 1},
{"x": 5, "y": 1},
{"x": 11, "y": 1},
{"x": 12, "y": 1},
{"x": 13, "y": 1},
{"x": 14, "y": 1},
{"x": 15, "y": 1},
{"x": 16, "y": 1},
{"x": 0, "y": 2},
{"x": 1, "y": 2},
{"x": 2, "y": 2},
{"x": 3, "y": 2},
{"x": 4, "y": 2},
{"x": 5, "y": 2},
{"x": 11, "y": 2},
{"x": 12, "y": 2},
{"x": 13, "y": 2},
{"x": 14, "y": 2},
{"x": 15, "y": 2},
{"x": 16, "y": 2},
{"x": 2, "y": 3},
{"x": 3, "y": 3},
{"x": 13, "y": 3},
{"x": 14, "y": 3},
{"x": 4, "y": 4},
{"x": 5, "y": 4},
{"x": 6, "y": 4},
{"x": 10, "y": 4},
{"x": 11, "y": 4},
{"x": 12, "y": 4},
{"x": 5, "y": 5},
{"x": 6, "y": 5},
{"x": 10, "y": 5},
{"x": 11, "y": 5}
]
}
}
}

View File

@@ -0,0 +1,24 @@
/*
This is the c configuration file for the keymap
Copyright 2012 Jun Wako <wakojun@gmail.com>
Copyright 2015 Jack Humbert
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
#define EE_HANDS

View File

@@ -0,0 +1,63 @@
// Copyright 2021 Andrzej Kotulski (@akotulski)
// SPDX-License-Identifier: GPL-2.0-or-later
#include QMK_KEYBOARD_H
#define RAISE MO(_RAISE)
#define LOWER MO(_LOWER)
enum layer_names {
_BASE,
_RAISE,
_LOWER
};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Base (qwerty)
* +-----------------------------------------+ +-----------------------------------------+
* | ESC | q | w | e | r | t | | y | u | i | o | p | |
* |------+------+------+------+------+------| |------+------+------+------+------+------|
* | TAB | a | s | d | f | g | | h | j | k | l | ; | |
* |------+------+------+------+------+------| |------+------+------+------+------+------|
* | SHFT | z | x | c | v | b | | n | m | , | . | / | |
* +------+------+------+------+-------------+ +-------------+------+------+------+------+
* | [ | ] | | | |
* +-------------+-------------+ +-------------+-------------+
* | | | | | |
* |------+------| |------+------|
* | | | | | |
* +-------------+ +-------------+
* +-------------+ +-------------+
* | | | | | |
* |------+------| |------+------|
* | | | | | |
* +-------------+ +-------------+
*/
[_BASE] = LAYOUT(
KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_MINS,
KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, 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_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_BSLS,
KC_LBRC, KC_RBRC, KC_PLUS, KC_EQL,
KC_SPC, RAISE, KC_HOME, KC_END, LOWER, KC_ENT,
KC_BSPC, KC_LALT, KC_LGUI, KC_DEL
),
[_LOWER] = LAYOUT(
_______, _______, _______, _______, _______, KC_LBRC, KC_RBRC, KC_P7, KC_P8, KC_P9, RESET, KC_PLUS,
_______, KC_HOME, KC_PGUP, KC_PGDN, KC_END , KC_LPRN, KC_RPRN, KC_P4, KC_P5, KC_P6, KC_MINS, KC_PIPE,
_______, _______, _______, _______, _______, _______, _______, KC_P1, KC_P2, KC_P3, KC_EQL, KC_UNDS,
_______, KC_PSCR, _______, KC_P0,
_______, _______, _______, _______, _______, _______,
_______, _______, _______, _______
),
[_RAISE] = LAYOUT(
_______, RESET, _______, _______, _______, KC_LBRC, KC_RBRC, _______, KC_NLCK, KC_INS, KC_SLCK, KC_MUTE,
_______, KC_LEFT, KC_UP , KC_DOWN, KC_RGHT, KC_LPRN, KC_RPRN, KC_MPRV, KC_MPLY, KC_MNXT, _______, KC_VOLU,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_VOLD,
_______, _______, KC_EQL, _______,
_______, _______, _______, _______, _______, _______,
_______, _______, _______, _______
)
};

View File

@@ -0,0 +1,24 @@
// Copyright 2019 Manna Harbour
// https://github.com/manna-harbour/miryoku
// generated -*- buffer-read-only: t -*-
// 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
#define XXX KC_NO
#define LAYOUT_miryoku(\
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, K28, K29,\
N30, N31, K32, K33, K34, K35, K36, K37, N38, N39\
)\
LAYOUT( \
XXX, K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, XXX, \
XXX, K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, XXX, \
XXX, K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, XXX, \
XXX, XXX, XXX, XXX, \
K32, K33, K34, K35, K36, K37, \
XXX, XXX, XXX, XXX \
)

View File

@@ -0,0 +1,5 @@
// Copyright 2019 Manna Harbour
// https://github.com/manna-harbour/miryoku
// generated -*- buffer-read-only: t -*-
// 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/>.

View File

@@ -0,0 +1,19 @@
# MCU name
MCU = atmega32u4
# Bootloader selection
BOOTLOADER = caterina
# Build Options
# change yes to no to disable
#
BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite
MOUSEKEY_ENABLE = yes # Mouse keys
EXTRAKEY_ENABLE = yes # Audio control and System control
CONSOLE_ENABLE = no # Console for debug
COMMAND_ENABLE = 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
SPLIT_KEYBOARD = yes

View File

@@ -4,6 +4,8 @@
# include "4x5.h"
#elif defined(KEYBOARD_handwired_dactyl_manuform_4x6)
# include "4x6.h"
#elif defined(KEYBOARD_handwired_dactyl_manuform_4x6_5)
# include "4x6_5.h"
#elif defined(KEYBOARD_handwired_dactyl_manuform_5x6)
# include "5x6.h"
#elif defined(KEYBOARD_handwired_dactyl_manuform_5x6_5)

6
keyboards/jorne/config.h Normal file
View File

@@ -0,0 +1,6 @@
// Copyright 2021 Joric (@joric)
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
#include "config_common.h"

240
keyboards/jorne/info.json Normal file
View File

@@ -0,0 +1,240 @@
{
"keyboard_name": "Jorne",
"url": "https://github.com/joric/jorne/wiki",
"maintainer": "joric",
"layouts": {
"LAYOUT": {
"layout": [
{
"label": "GUI",
"x": 0,
"y": 2.13
},
{
"label": "~",
"x": 1,
"y": 1.38
},
{
"label": "Q",
"x": 2,
"y": 1.38
},
{
"label": "W",
"x": 3,
"y": 1.13
},
{
"label": "E",
"x": 4,
"y": 1
},
{
"label": "R",
"x": 5,
"y": 1.13
},
{
"label": "T",
"x": 6,
"y": 1.25
},
{
"label": "Y",
"x": 10.5,
"y": 1.25
},
{
"label": "U",
"x": 11.5,
"y": 1.125
},
{
"label": "I",
"x": 12.5,
"y": 1
},
{
"label": "O",
"x": 13.5,
"y": 1.125
},
{
"label": "P",
"x": 14.5,
"y": 1.375
},
{
"label": "{[",
"x": 15.5,
"y": 1.375
},
{
"label": "}]",
"x": 16.5,
"y": 2.13
},
{
"label": "Ctrl",
"x": 1,
"y": 2.38
},
{
"label": "A",
"x": 2,
"y": 2.38
},
{
"label": "S",
"x": 3,
"y": 2.13
},
{
"label": "D",
"x": 4,
"y": 2
},
{
"label": "F",
"x": 5,
"y": 2.13
},
{
"label": "G",
"x": 6,
"y": 2.25
},
{
"label": "H",
"x": 10.5,
"y": 2.25
},
{
"label": "J",
"x": 11.5,
"y": 2.13
},
{
"label": "K",
"x": 12.5,
"y": 2
},
{
"label": "L",
"x": 13.5,
"y": 2.125
},
{
"label": ":;",
"x": 14.5,
"y": 2.375
},
{
"label": "\"'",
"x": 15.5,
"y": 2.375
},
{
"label": "Alt",
"x": 1,
"y": 3.38
},
{
"label": "Z",
"x": 2,
"y": 3.38
},
{
"label": "X",
"x": 3,
"y": 3.13
},
{
"label": "C",
"x": 4,
"y": 3
},
{
"label": "V",
"x": 5,
"y": 3.13
},
{
"label": "B",
"x": 6,
"y": 3.25
},
{
"label": "N",
"x": 10.5,
"y": 3.25
},
{
"label": "M",
"x": 11.5,
"y": 3.13
},
{
"label": "<,",
"x": 12.5,
"y": 3
},
{
"label": ">.",
"x": 13.5,
"y": 3.13
},
{
"label": "?/",
"x": 14.5,
"y": 3.38
},
{
"label": "|\\",
"x": 15.5,
"y": 3.38
},
{
"label": "Rise",
"x": 5,
"y": 5
},
{
"label": "Space",
"x": 6,
"y": 5
},
{
"label": "Lower",
"x": 7,
"y": 4.5,
"h": 1.5
},
{
"label": "Lower",
"x": 9.5,
"y": 4.5,
"h": 1.5
},
{
"label": "Bcs",
"x": 10.5,
"y": 5
},
{
"label": "Rise",
"x": 11.5,
"y": 5
}
]
}
}
}

70
keyboards/jorne/jorne.c Normal file
View File

@@ -0,0 +1,70 @@
// Copyright 2021 Joric (@joric)
// SPDX-License-Identifier: GPL-2.0-or-later
#include "jorne.h"
#ifdef OLED_ENABLE
static void render_logo(void) {
static const char PROGMEM raw_logo[] = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 0, 0, 192, 224, 240, 240, 240, 240, 240, 240, 240, 224,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 112, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 192, 224, 240, 0, 0, 240, 252, 254, 255, 255, 255, 1, 240, 252, 255,
255, 255, 255, 255, 255, 255, 255, 127, 31, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 254, 254, 254, 0, 0, 240,
248, 252, 30, 14, 14, 14, 14, 14, 14, 30, 252, 248, 240, 0, 0, 254, 254, 252, 28, 14, 14, 14, 14, 0, 0, 254, 254, 252, 28, 14, 14,
14, 14, 30, 252, 248, 240, 0, 0, 240, 248, 252, 222, 206, 206, 206, 206, 206, 206, 222, 252, 248, 240, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 255, 255, 255, 254, 240, 255, 255, 255, 255, 255, 255, 248, 255, 255, 255, 255,
255, 255, 255, 255, 255, 193, 128, 128, 128, 192, 240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 255, 255, 255, 0, 0,
15, 31, 63, 120, 112, 112, 112, 112, 112, 112, 120, 63, 31, 15, 0, 0, 127, 127, 127, 0, 0, 0, 0, 0, 0, 0, 127, 127, 127, 0, 0, 0,
0, 0, 0, 127, 127, 127, 0, 0, 15, 31, 63, 121, 113, 113, 113, 113, 113, 113, 121, 61, 29, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 3, 3, 3, 1, 1, 3, 3, 7, 7, 7, 3, 3, 1, 3, 7, 7, 7, 7, 7, 7, 7, 3, 1, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0
};
oled_write_raw_P(raw_logo, sizeof(raw_logo));
}
enum layers {
_QWERTY = 0,
_LOWER,
_RAISE,
_ADJUST,
};
static void render_status(void) {
// Host Keyboard Layer Status
oled_write_P(PSTR("Layer: "), false);
switch (get_highest_layer(layer_state)) {
case _QWERTY:
oled_write_P(PSTR("Default\n"), false);
break;
case _LOWER:
oled_write_P(PSTR("Lower\n"), false);
break;
case _RAISE:
oled_write_P(PSTR("Raise\n"), false);
break;
case _ADJUST:
oled_write_P(PSTR("Adjust\n"), false);
break;
default:
oled_write_P(PSTR("Undefined\n"), false);
}
// Host Keyboard LED Status
led_t led_state = host_keyboard_led_state();
oled_write_P(led_state.num_lock ? PSTR("NUMLCK ") : PSTR(" "), false);
oled_write_P(led_state.caps_lock ? PSTR("CAPLCK ") : PSTR(" "), false);
oled_write_P(led_state.scroll_lock ? PSTR("SCRLCK ") : PSTR(" "), false);
}
bool oled_task_kb(void) {
if (!oled_task_user()) { return false; }
if (is_keyboard_left()) {
render_status(); // Renders the current keyboard state (layer, lock, caps, scroll, etc)
} else {
render_logo();
}
return true;
}
#endif

9
keyboards/jorne/jorne.h Normal file
View File

@@ -0,0 +1,9 @@
// Copyright 2021 Joric (@joric)
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
#ifdef KEYBOARD_jorne_rev1
# include "rev1.h"
#endif
#include "quantum.h"

View File

@@ -0,0 +1,25 @@
// Copyright 2021 Joric (@joric)
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
#define OLED_DISPLAY_128X32
#ifdef RGBLIGHT_ENABLE
#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
#define RGBLIGHT_HUE_STEP 8
#define RGBLIGHT_SAT_STEP 8
#define RGBLIGHT_VAL_STEP 8
#endif
// If you are using an Elite C rev3 on the slave side, uncomment the lines below:
// #define SPLIT_USB_DETECT
// #define NO_USB_STARTUP_CHECK

View File

@@ -0,0 +1,84 @@
// Copyright 2021 Joric (@joric)
// SPDX-License-Identifier: GPL-2.0-or-later
#include QMK_KEYBOARD_H
enum layers {
_QWERTY = 0,
_LOWER,
_RAISE,
_ADJUST,
};
enum custom_keycodes {
RGBRST = SAFE_RANGE
};
#define RBR_RGU MT(MOD_RGUI, KC_RBRC)
#define F12_RGU MT(MOD_RGUI, KC_F12)
#define PLS_LCT MT(MOD_LCTL, KC_PPLS)
#define EQL_LCT MT(MOD_LCTL, KC_PEQL)
#define APP_LCT MT(MOD_LCTL, KC_APP)
#define EQL_RCT MT(MOD_RCTL, KC_PEQL)
#define QUO_RCT MT(MOD_RCTL, KC_QUOT)
#define APP_RCT MT(MOD_RCTL, KC_APP)
#define MIN_RCT MT(MOD_RCTL, KC_MINS)
#define EQL_LAL MT(MOD_LALT, KC_EQL)
#define BSL_RAL MT(MOD_RALT, KC_BSLS)
#define BSP_LSH MT(MOD_LSFT, KC_BSPC)
#define SPC_RSH MT(MOD_RSFT, KC_SPC)
#define DEL_RSE LT(_RAISE, KC_DEL)
#define TAB_RSE LT(_RAISE, KC_TAB)
#define ENT_LWR LT(_LOWER, KC_ENT)
#define ESC_LWR LT(_LOWER, KC_ESC)
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_QWERTY] = LAYOUT(
KC_LGUI, KC_GRV, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, RGUI_T(KC_RBRC),
KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, RCTL_T(KC_QUOT),
KC_LALT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, BSL_RAL,
TAB_RSE, SPC_RSH, ENT_LWR, ESC_LWR, BSP_LSH, DEL_RSE
),
[_LOWER] = LAYOUT(
_______, KC_UNDS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, F12_RGU,
PLS_LCT, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, MIN_RCT,
EQL_LAL, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, _______,
_______, _______, _______, _______, _______, _______
),
[_RAISE] = LAYOUT(
_______, KC_NLCK, KC_PSLS, KC_P7, KC_P8, KC_P9, KC_PMNS, KC_VOLU, KC_HOME, KC_PSCR, KC_PGUP, KC_SLCK, KC_CAPS, _______,
EQL_LCT, KC_PAST, KC_P4, KC_P5, KC_P6, KC_PPLS, KC_MUTE, KC_LEFT, KC_UP, KC_RGHT, KC_INS, APP_RCT,
_______, KC_P0, KC_P1, KC_P2, KC_P3, KC_PCMM, KC_VOLD, KC_END, KC_DOWN, KC_PGDN, KC_PAUS, _______,
_______, _______, _______, _______, _______, _______
),
[_ADJUST] = LAYOUT(
RESET, RGBRST, KC_ASUP, KC_ASTG, KC_ASDN, _______, _______, _______, _______, KC_ASDN, KC_ASTG, KC_ASUP, RGBRST, RESET,
RGB_TOG, RGB_HUI, RGB_SAI, RGB_VAI, _______, _______, _______, _______, RGB_VAI, RGB_SAI, RGB_HUI, RGB_TOG,
RGB_MOD, RGB_HUD, RGB_SAD, RGB_VAD, _______, _______, _______, _______, RGB_VAD, RGB_SAD, RGB_HUD, RGB_MOD,
_______, SH_TG, _______, _______, SH_TG, _______
),
};
layer_state_t layer_state_set_user(layer_state_t state) {
return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST);
}
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
switch (keycode) {
case RGBRST:
#ifdef RGBLIGHT_ENABLE
if (record->event.pressed) {
eeconfig_update_rgblight_default();
rgblight_enable();
}
#endif
break;
}
return true;
}

View File

@@ -0,0 +1,24 @@
// Copyright 2021 Joric (@joric)
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
#define OLED_DISPLAY_128X32
#ifdef RGBLIGHT_ENABLE
#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_HUE_STEP 8
#define RGBLIGHT_SAT_STEP 8
#define RGBLIGHT_VAL_STEP 8
#endif
// If you are using an Elite C rev3 on the slave side, uncomment the lines below:
// #define SPLIT_USB_DETECT
// #define NO_USB_STARTUP_CHECK

View File

@@ -0,0 +1,84 @@
// Copyright 2021 Joric (@joric)
// SPDX-License-Identifier: GPL-2.0-or-later
#include QMK_KEYBOARD_H
enum layers {
_QWERTY = 0,
_LOWER,
_RAISE,
_ADJUST,
};
enum custom_keycodes {
RGBRST = SAFE_RANGE
};
#define RBR_RGU MT(MOD_RGUI, KC_RBRC)
#define F12_RGU MT(MOD_RGUI, KC_F12)
#define PLS_LCT MT(MOD_LCTL, KC_PPLS)
#define EQL_LCT MT(MOD_LCTL, KC_PEQL)
#define APP_LCT MT(MOD_LCTL, KC_APP)
#define EQL_RCT MT(MOD_RCTL, KC_PEQL)
#define QUO_RCT MT(MOD_RCTL, KC_QUOT)
#define APP_RCT MT(MOD_RCTL, KC_APP)
#define MIN_RCT MT(MOD_RCTL, KC_MINS)
#define EQL_LAL MT(MOD_LALT, KC_EQL)
#define BSL_RAL MT(MOD_RALT, KC_BSLS)
#define BSP_LSH MT(MOD_LSFT, KC_BSPC)
#define SPC_RSH MT(MOD_RSFT, KC_SPC)
#define DEL_RSE LT(_RAISE, KC_DEL)
#define TAB_RSE LT(_RAISE, KC_TAB)
#define ENT_LWR LT(_LOWER, KC_ENT)
#define ESC_LWR LT(_LOWER, KC_ESC)
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_QWERTY] = LAYOUT(
KC_LGUI, KC_GRV, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, RGUI_T(KC_RBRC),
KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, RCTL_T(KC_QUOT),
KC_LALT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, BSL_RAL,
TAB_RSE, SPC_RSH, ENT_LWR, ESC_LWR, BSP_LSH, DEL_RSE
),
[_LOWER] = LAYOUT(
_______, KC_UNDS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, F12_RGU,
PLS_LCT, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, MIN_RCT,
EQL_LAL, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, _______,
_______, _______, _______, _______, _______, _______
),
[_RAISE] = LAYOUT(
_______, KC_NLCK, KC_PSLS, KC_P7, KC_P8, KC_P9, KC_PMNS, KC_VOLU, KC_HOME, KC_PSCR, KC_PGUP, KC_SLCK, KC_CAPS, _______,
EQL_LCT, KC_PAST, KC_P4, KC_P5, KC_P6, KC_PPLS, KC_MUTE, KC_LEFT, KC_UP, KC_RGHT, KC_INS, APP_RCT,
_______, KC_P0, KC_P1, KC_P2, KC_P3, KC_PCMM, KC_VOLD, KC_END, KC_DOWN, KC_PGDN, KC_PAUS, _______,
_______, _______, _______, _______, _______, _______
),
[_ADJUST] = LAYOUT(
RESET, RGBRST, KC_ASUP, KC_ASTG, KC_ASDN, _______, _______, _______, _______, KC_ASDN, KC_ASTG, KC_ASUP, RGBRST, RESET,
RGB_TOG, RGB_HUI, RGB_SAI, RGB_VAI, _______, _______, _______, _______, RGB_VAI, RGB_SAI, RGB_HUI, RGB_TOG,
RGB_MOD, RGB_HUD, RGB_SAD, RGB_VAD, _______, _______, _______, _______, RGB_VAD, RGB_SAD, RGB_HUD, RGB_MOD,
_______, SH_TG, _______, _______, SH_TG, _______
),
};
layer_state_t layer_state_set_user(layer_state_t state) {
return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST);
}
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
switch (keycode) {
case RGBRST:
#ifdef RGBLIGHT_ENABLE
if (record->event.pressed) {
eeconfig_update_rgblight_default();
rgblight_enable();
}
#endif
break;
}
return true;
}

View File

@@ -0,0 +1 @@
VIA_ENABLE = yes

View File

@@ -0,0 +1,29 @@
// Copyright 2021 Joric (@joric)
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
#ifndef BOOTMAGIC_LITE_ROW
# define BOOTMAGIC_LITE_ROW 0
#endif
#ifndef BOOTMAGIC_LITE_COLUMN
# define BOOTMAGIC_LITE_COLUMN 1
#endif
#ifndef BOOTMAGIC_LITE_ROW_RIGHT
# define BOOTMAGIC_LITE_ROW_RIGHT 4
#endif
#ifndef BOOTMAGIC_LITE_COLUMN_RIGHT
# define BOOTMAGIC_LITE_COLUMN_RIGHT 1
#endif
#ifdef RGBLIGHT_ENABLE
# ifndef RGBLIGHT_LIMIT_VAL
# define RGBLIGHT_LIMIT_VAL 120
# endif
#endif
#ifdef RGB_MATRIX_ENABLE
# ifndef RGB_MATRIX_MAXIMUM_BRIGHTNESS
# define RGB_MATRIX_MAXIMUM_BRIGHTNESS 120
# endif
#endif

25
keyboards/jorne/readme.md Normal file
View File

@@ -0,0 +1,25 @@
# Jorne
<img src="https://i.imgur.com/ywDcw2w.jpg" data-canonical-src="Jorne" width="600"/>
Jorne is essentially [Corne](https://github.com/foostan/crkbd) but with an extra keys for brackets and international layouts (44 keys instead of 42).
* Keyboard Maintainer: [joric](https://github.com/joric)
* Hardware Supported: Jorne 2.1, 3.0
* Layout: [keyboard-layout-editor.com](http://www.keyboard-layout-editor.com/#/gists/df19fba80500d1179dfda8c41b9f221a)
* Hardware Availability: [wiki](https://github.com/joric/jorne/wiki)
## Bootloader
Enter the bootloader in 2 ways:
* **Physical reset button**: Briefly press the reset button on the PCB
* **Keycode in layout**: Press the key mapped to `RESET`
## Make
Make example for this keyboard (after setting up your build environment):
make jorne/rev1: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).

View File

@@ -0,0 +1,46 @@
// Copyright 2021 Joric (@joric)
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
/* USB Device descriptor parameter */
#define VENDOR_ID 0x4753
#define PRODUCT_ID 0x0001
#define DEVICE_VER 0x0001
#define MANUFACTURER joric
#define PRODUCT Jorne Keyboard
/* key matrix size */
/* Rows are doubled up */
#define MATRIX_ROWS 8
#define MATRIX_COLS 6
#define MATRIX_ROW_PINS { D4, C6, D7, E6 }
#define MATRIX_COL_PINS { F4, F5, F6, F7, B1, B3 }
#define UNUSED_PINS
/* COL2ROW, ROW2COL*/
#define DIODE_DIRECTION COL2ROW
/* define if matrix has ghost (lacks anti-ghosting diodes) */
//#define MATRIX_HAS_GHOST
/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
#define DEBOUNCE 5
/*
* Split Keyboard specific options, make sure you have 'SPLIT_KEYBOARD = yes' in your rules.mk, and define SOFT_SERIAL_PIN.
*/
#define SOFT_SERIAL_PIN D2
#define RGB_DI_PIN D3
#define RGBLED_SPLIT { 28, 28 }
#define RGBLED_NUM 56
/* 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
#define SPLIT_LAYER_STATE_ENABLE
#define SPLIT_LED_STATE_ENABLE

View File

@@ -0,0 +1,3 @@
// Copyright 2021 Joric (@joric)
// SPDX-License-Identifier: GPL-2.0-or-later
#include "rev1.h"

View File

@@ -0,0 +1,31 @@
// Copyright 2021 Joric (@joric)
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
#include "jorne.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( \
L33, L00, L01, L02, L03, L04, L05, R00, R01, R02, R03, R04, R05, R33, \
L10, L11, L12, L13, L14, L15, R10, R11, R12, R13, R14, R15, \
L20, L21, L22, L23, L24, L25, R20, R21, R22, R23, R24, R25, \
L30, L31, L32, R30, R31, R32 \
) \
{ \
{ L00, L01, L02, L03, L04, L05 }, \
{ L10, L11, L12, L13, L14, L15 }, \
{ L20, L21, L22, L23, L24, L25 }, \
{ L33, KC_NO, KC_NO, L30, L31, L32 }, \
{ R05, R04, R03, R02, R01, R00 }, \
{ R15, R14, R13, R12, R11, R10 }, \
{ R25, R24, R23, R22, R21, R20 }, \
{ R33, KC_NO, KC_NO, R32, R31, R30 } \
}

View File

@@ -0,0 +1,2 @@
OLED_ENABLE = yes # Enable OLED
RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow

21
keyboards/jorne/rules.mk Normal file
View File

@@ -0,0 +1,21 @@
# MCU name
MCU = atmega32u4
# Bootloader selection
BOOTLOADER = caterina
# Build Options
# change yes to no to disable
#
BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite
MOUSEKEY_ENABLE = yes # Mouse keys
EXTRAKEY_ENABLE = yes # Audio control and System control
CONSOLE_ENABLE = no # Console for debug
COMMAND_ENABLE = no # Commands for debug and configuration
NKRO_ENABLE = no # Enable N-Key Rollover
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
AUDIO_ENABLE = no # Audio output
SPLIT_KEYBOARD = yes # Split common
LTO_ENABLE = yes
DEFAULT_FOLDER = jorne/rev1

38
keyboards/k34/config.h Normal file
View File

@@ -0,0 +1,38 @@
// Copyright 2021 jp_smasher (@jp_smasher)
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
#include "config_common.h"
/* USB Device descriptor parameter */
#define VENDOR_ID 0xFEED
#define PRODUCT_ID 0x0000
#define DEVICE_VER 0x0001
#define MANUFACTURER jp_smasher
#define PRODUCT k34
/* key matrix size */
#define MATRIX_ROWS 4
#define MATRIX_COLS 10
/*
* 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 { F4, B2, E6, B4 }
#define MATRIX_COL_PINS { D1, D0, D4, C6, D7, F5, F6, F7, B1, B3 }
#define UNUSED_PINS { B5, B6, D2, D3 }
/* COL2ROW, ROW2COL */
#define DIODE_DIRECTION COL2ROW
/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
#define DEBOUNCE 5

52
keyboards/k34/info.json Normal file
View File

@@ -0,0 +1,52 @@
{
"keyboard_name": "k34",
"url": "https://github.com/wongjingping/k34",
"maintainer": "qmk",
"layouts": {
"LAYOUT": {
"layout": [
{ "label": "Q", "x": 0, "y": 0.3 },
{ "label": "W", "x": 1, "y": 0.1 },
{ "label": "E", "x": 2, "y": 0 },
{ "label": "R", "x": 3, "y": 0.1 },
{ "label": "T", "x": 4, "y": 0.2 },
{ "label": "Y", "x": 8, "y": 0.2 },
{ "label": "U", "x": 9, "y": 0.1 },
{ "label": "I", "x": 10, "y": 0 },
{ "label": "O", "x": 11, "y": 0.1 },
{ "label": "P", "x": 12, "y": 0.3 },
{ "label": "A", "x": 0, "y": 1.3 },
{ "label": "S", "x": 1, "y": 1.1 },
{ "label": "D", "x": 2, "y": 1 },
{ "label": "F", "x": 3, "y": 1.1 },
{ "label": "G", "x": 4, "y": 1.2 },
{ "label": "H", "x": 8, "y": 1.2 },
{ "label": "J", "x": 9, "y": 1.1 },
{ "label": "K", "x": 10, "y": 1 },
{ "label": "L", "x": 11, "y": 1.1 },
{ "label": ";", "x": 12, "y": 1.3 },
{ "label": "Z", "x": 0, "y": 2.3 },
{ "label": "X", "x": 1, "y": 2.1 },
{ "label": "C", "x": 2, "y": 2 },
{ "label": "V", "x": 3, "y": 2.1 },
{ "label": "B", "x": 4, "y": 2.2 },
{ "label": "N", "x": 8, "y": 2.2 },
{ "label": "M", "x": 9, "y": 2.1 },
{ "label": ",", "x": 10, "y": 2 },
{ "label": ".", "x": 11, "y": 2.1 },
{ "label": "/", "x": 12, "y": 2.3 },
{ "label": "GUI / KC_HANJ", "x": 3, "y": 3.7 },
{ "label": "Lower", "x": 4, "y": 3.7 },
{ "label": "Raise", "x": 8, "y": 3.7 },
{ "label": "Alt / KC_HAEN", "x": 9, "y": 3.7 }
]
}
}
}

4
keyboards/k34/k34.c Normal file
View File

@@ -0,0 +1,4 @@
// Copyright 2021 jp_smasher (@jp_smasher)
// SPDX-License-Identifier: GPL-2.0-or-later
#include "k34.h"

26
keyboards/k34/k34.h Normal file
View File

@@ -0,0 +1,26 @@
// Copyright 2021 jp_smasher (@jp_smasher)
// 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( \
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, k28, k29, \
k33, k34, k35, k36 \
) { \
{ 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, k28, k29 }, \
{ KC_NO, KC_NO, KC_NO, k33, k34, k35, k36, KC_NO, KC_NO, KC_NO }, \
}

View File

@@ -0,0 +1,24 @@
/* Copyright Wong Jing Ping <@wongjingping>
*
* 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.
*
*/
#pragma once
// use 1 combo
#define COMBO_COUNT 1
#define COMBO_TERM 300
// mod taps for home row mods
#define TAPPING_TERM_PER_KEY
#define IGNORE_MOD_TAP_INTERRUPT

View File

@@ -0,0 +1,61 @@
// Copyright 2021 jp_smasher (@jp_smasher)
// SPDX-License-Identifier: GPL-2.0-or-later
#include QMK_KEYBOARD_H
// Defines names for use in layer keycodes and the keymap
enum layer_names {
_BASE,
_L1,
_L2
};
// define layers
#define L1 MO(_L1)
#define L2 LT(_L2, KC_ENT)
// define home-row styled alpha-mods
#define C_C LCTL_T(KC_C)
#define C_COMM LCTL_T(KC_COMM)
#define G_A CMD_T(KC_A)
#define G_SC CMD_T(KC_SCLN)
#define A_X LOPT_T(KC_X)
#define A_DOT LOPT_T(KC_DOT)
#define S_Z SFT_T(KC_Z)
#define S_SLSH SFT_T(KC_SLSH)
// combos for application shortcuts
#define SG_LBRC SGUI(KC_LBRC)
#define SG_RBRC SGUI(KC_RBRC)
#define G_LBRC G(KC_LBRC)
#define G_RBRC G(KC_RBRC)
#define A_SLSH A(KC_SLSH)
/* combos */
const uint16_t PROGMEM jk_combo[] = {KC_J, KC_K, COMBO_END};
combo_t key_combos[COMBO_COUNT] = {COMBO(jk_combo, KC_ESC)};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Base */
[_BASE] = LAYOUT(
KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,
G_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, G_SC,
S_Z, A_X, C_C, KC_V, KC_B, KC_N, KC_M, C_COMM, A_DOT, S_SLSH,
L1, KC_SPC, KC_SPC, L2
),
[_L1] = LAYOUT(
KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_MINS, KC_EQL,
KC_LPRN, KC_RPRN, KC_LCBR, KC_RCBR, KC_GRV, KC_QUOT, KC_LBRC, KC_RBRC, KC_BSLS, KC_PIPE,
_______, _______, _______, KC_TAB, _______, KC_MUTE, KC_VOLD, KC_VOLU, KC_MPLY, KC_MNXT,
_______, _______, _______, _______
),
[_L2] = LAYOUT(
KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0,
_______, _______, _______, _______, KC_DOT, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, KC_BSPC,
_______, _______, _______, _______, _______, A_SLSH, SG_LBRC, SG_RBRC, G_LBRC, G_RBRC,
KC_LALT, KC_LGUI, _______, _______
),
};

View File

@@ -0,0 +1 @@
# The default keymap for k34

View File

@@ -0,0 +1 @@
COMBO_ENABLE = yes # enable combo

25
keyboards/k34/readme.md Normal file
View File

@@ -0,0 +1,25 @@
# k34
![k34](https://i.imgur.com/tarkFIph.jpeg)
## Keyboard Info
The K34 is a custom 34-key unibody keyboard.
* Keyboard Maintainer: [wongjingping](https://github.com/wongjingping)
All hardware supported can be found in the [k34 repository](https://github.com/wongjingping/k34)
## Flashing Instructions
To enter the bootloader, short the RST and GND pins, or press the key mapped to `RESET`.
Make example for this keyboard (after setting up your build environment):
make k34:default
Flashing example for this keyboard:
make k34: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).

18
keyboards/k34/rules.mk Normal file
View File

@@ -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 = 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 = no # Enable N-Key Rollover
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
AUDIO_ENABLE = no # Audio output

View File

@@ -0,0 +1,36 @@
/* Copyright 2021 Jonavin Eng
*
* 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
#define TAPPING_TOGGLE 2
// TT set to two taps
/* Handle GRAVESC combo keys */
#define GRAVE_ESC_ALT_OVERRIDE
//Always send Escape if Alt is pressed
#define GRAVE_ESC_CTRL_OVERRIDE
//Always send Escape if Control is pressed
#define TAPPING_TERM 180
#ifdef RGB_MATRIX_ENABLE
#ifdef RGB_MATRIX_STARTUP_MODE
#undef RGB_MATRIX_STARTUP_MODE
#endif
#define RGB_MATRIX_STARTUP_MODE RGB_MATRIX_SOLID_COLOR
#define RGB_DISABLE_WHEN_USB_SUSPENDED
#endif

View File

@@ -0,0 +1,137 @@
/* Copyright 2021 Jonavin
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 "rgb_matrix_map.h"
#include "jonavin.h"
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_BASE] = LAYOUT_65_ansi_blocker(
KC_GESC, 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_BSLASH, KC_PGUP,
TT(_LOWER), 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_LSFTCAPSWIN, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END,
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RIGHT
),
[_FN1] = LAYOUT_65_ansi_blocker(
KC_GESC, 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_DEL, KC_CALC,
_______, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, KC_PSCR, KC_SLCK, KC_PAUS, _______, _______, _______, RESET, KC_HOME,
KC_CAPS, RGB_SPI, RGB_SPD, RGB_VAD, RGB_VAI, _______, _______, _______, _______, _______, _______, _______, EEP_RST, KC_END,
KC_LSFT, RGB_NITE, _______, _______, _______, _______, KC_NLCK, _______, RGB_TOD, RGB_TOI, KC_MPLY, _______, KC_VOLU, KC_MUTE,
_______, KC_WINLCK, _______, _______, _______, _______, KC_MPRV, KC_VOLD, KC_MNXT
),
[_LOWER] = LAYOUT_65_ansi_blocker(
KC_TILD, _______, _______, _______, _______, _______, _______, KC_P7, KC_P8, KC_P9, KC_P0, KC_PMNS, KC_PPLS, _______, _______,
_______, KC_HOME, KC_UP, KC_END, KC_PGUP, _______, KC_TAB, KC_P4, KC_P5, KC_P6, KC_PDOT, _______, _______, _______, KC_HOME,
_______, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, _______, _______, KC_P1, KC_P2, KC_P3, KC_NO, KC_PAST, KC_PENT, KC_END,
_______, KC_NO, KC_DEL, KC_INS, KC_NO, KC_NO, KC_NO, KC_P0, KC_00, KC_PDOT, KC_PSLS, _______, _______, _______,
_______, _______, _______, KC_BSPC, _______, _______, _______, _______, _______
),
[_RAISE] = LAYOUT_65_ansi_blocker(
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, KC_SPC, _______, _______, _______, _______, _______
),
};
#ifdef RGB_MATRIX_ENABLE
// Capslock, Scroll lock and Numlock indicator
void rgb_matrix_indicators_advanced_user(uint8_t led_min, uint8_t led_max) {
if (get_rgb_nightmode()) rgb_matrix_set_color_all(RGB_OFF);
if (IS_HOST_LED_ON(USB_LED_SCROLL_LOCK)) {
rgb_matrix_set_color(LED_I, RGB_GREEN);
}
#ifdef INVERT_NUMLOCK_INDICATOR
if (!IS_HOST_LED_ON(USB_LED_NUM_LOCK)) { // on if NUM lock is OFF
rgb_matrix_set_color(LED_B, RGB_GREEN);
rgb_matrix_set_color(LED_N, RGB_GREEN);
rgb_matrix_set_color(LED_M, RGB_GREEN);
}
#else
if (IS_HOST_LED_ON(USB_LED_NUM_LOCK)) { // Normal, on if NUM lock is ON
rgb_matrix_set_color(LED_B, RGB_GREEN);
rgb_matrix_set_color(LED_N, RGB_GREEN);
rgb_matrix_set_color(LED_M, RGB_GREEN);
}
#endif // INVERT_NUMLOCK_INDICATOR
if (IS_HOST_LED_ON(USB_LED_CAPS_LOCK)) {
rgb_matrix_set_color(LED_CAPS, RGB_RED);
rgb_matrix_set_color(LED_Q, RGB_RED);
rgb_matrix_set_color(LED_A, RGB_RED);
}
if (keymap_config.no_gui) {
rgb_matrix_set_color(LED_LCTL, RGB_RED); //light up Win key when disabled
rgb_matrix_set_color(LED_LWIN, RGB_RED); //light up Win key when disabled
rgb_matrix_set_color(LED_LALT, RGB_RED); //light up Win key when disabled
}
switch(get_highest_layer(layer_state)){ // special handling per layer
case _FN1: // on Fn layer select what the encoder does when pressed
rgb_matrix_set_color(LED_FN, RGB_GOLD);
rgb_matrix_set_color(LED_RCTL, RGB_GOLD);
#ifdef IDLE_TIMEOUT_ENABLE
// Add RGB Timeout Indicator -- shows 0 to 139 using num row and qwerty row
uint16_t timeout_threshold = get_timeout_threshold();
if (timeout_threshold <= 10) rgb_matrix_set_color(LED_LIST_NUMROW[timeout_threshold], RGB_GOLD);
else if (timeout_threshold < 140) {
rgb_matrix_set_color(LED_LIST_NUMROW[(timeout_threshold % 10)], RGB_GOLD);
rgb_matrix_set_color(LED_LIST_QWERTYROW[(timeout_threshold / 10)], RGB_GOLD);
} else { // >= 140 minutes, just show these 3 lights
rgb_matrix_set_color(LED_LIST_NUMROW[10], RGB_GOLD);
rgb_matrix_set_color(LED_LIST_NUMROW[11], RGB_GOLD);
rgb_matrix_set_color(LED_LIST_NUMROW[12], RGB_GOLD);
}
#endif // IDLE_TIMEOUT_ENABLE
break;
case _LOWER:
for (uint8_t i=0; i<ARRAYSIZE(LED_LIST_NUMPAD); i++) {
rgb_matrix_set_color(LED_LIST_NUMPAD[i], RGB_BLUE);
}
for (uint8_t i=0; i<ARRAYSIZE(LED_LIST_WASD); i++) {
rgb_matrix_set_color(LED_LIST_WASD[i], RGB_BLUE);
}
break;
case _RAISE:
rgb_matrix_set_color(LED_SPC, RGB_GREEN);
break;
default:
break;
}
}
void suspend_power_down_user(void) {
rgb_matrix_set_suspend_state(true);
}
void suspend_wakeup_init_user(void) {
rgb_matrix_set_suspend_state(false);
}
#endif
void keyboard_post_init_keymap(void) {
// keyboard_post_init_user() moved to userspace
#ifdef RGB_MATRIX_ENABLE
rgb_matrix_mode(RGB_MATRIX_SOLID_COLOR);
activate_rgb_nightmode(false); // Set to true if you want to startup in nightmode, otherwise use Fn + Z to toggle
#endif
}

View File

@@ -0,0 +1,41 @@
# jonavin's KBD 67 Lite keymap
NOTE: This keymap uses features from qmk userspace in user/jonavin. I fyou copy this keymap you should also the user folder.
- Add PrtScr, Scroll Lock, Break, NumLock to Fn layer
- add double tap of Left Shift to toggle Caps Lock
- Implement Win key lock using Fn+Win
- Layer 2 mod on Caps Lock with double-tap to switch to this layer, double tap to switch back
- Layer 2 provides arrows on WASD and additional nav keys + right hand numpad with 00; an be used for Alt Code entry
- Layer 2 spacebar Backspace
- LED/RGB Functionality
- RGB idle timeout (default 5 minutes)
- Can be changed in FN layer with < and >
- setting to zero disables timeout
- indicators in FN layer using RGB in number and qwerty rows to show the timeout in minutes
- LED address location map as enum definition in rgb_matrix_map.h
- LED group lists for arrows, numpad, qwerty row, num row LEDs
- default startup in single colour mode
- Capslock, Scroll Lock, and Num Lock (not set) indicator
- Fn key light up GOLD when Fn layer activate
- Win Key light up red when Win Lock mode enabled
- Layer 2 activation lights up Numpad area
- Fn + Z to turn off all RGB lights except rgb indicators; press again to toggle
rules.mk OPTIONS - Active features from userspace
STARTUP_NUMLOCK_ON = yes
- turns on NUMLOCK by default
TD_LSFT_CAPSLOCK_ENABLE = yes
- This will enable double tap on Left Shift to toggle CAPSLOCK when using KC_LSFTCAPS
IDLE_TIMEOUT_ENABLE = yes
- Enables Timer functionality; for RGB idle timeouts that can be changed dynamically
INVERT_NUMLOCK_INDICATOR = yes
- inverts the Num lock indicator, LED is on when num lock is off
## All layers diagram
![image](https://user-images.githubusercontent.com/71780717/146864247-4ec05ef7-7936-45db-9db9-02fb17d3f7ed.png)

View File

@@ -0,0 +1,109 @@
/* Copyright 2021 Jonavin Eng
*
* 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/>.
*/
#ifdef RGB_MATRIX_ENABLE
// Custom RGB Colours
#define RGB_GODSPEED 0x00, 0xE4, 0xFF // colour for matching keycaps
#define RGB_NAUTILUS 0x00, 0xA4, 0xA9 // Naurilus Font colours
#define RGB_PURPLELITE 0x80, 0x00, 0x80 // Purple colours
// RGB LED locations
enum led_location_map {
LED_ESC, // 0
LED_1, // 1
LED_2, // 2
LED_3, // 3
LED_4, // 4
LED_5, // 5
LED_6, // 6
LED_7, // 7
LED_8, // 8
LED_9, // 9
LED_0, // 10
LED_MINS, // 11
LED_EQL, // 12
LED_BSPC, // 13
LED_DEL, // 14
LED_TAB, // 15
LED_Q, // 16
LED_W, // 17
LED_E, // 18
LED_R, // 19
LED_T, // 20
LED_Y, // 21
LED_U, // 22
LED_I, // 23
LED_O, // 24
LED_P, // 25
LED_LBRC, // 26 [
LED_RBRC, // 27 ]
LED_BSLS, // 28 |
LED_PGUP, // 29
LED_CAPS, // 30
LED_A, // 31
LED_S, // 32
LED_D, // 33
LED_F, // 34
LED_G, // 35
LED_H, // 36
LED_J, // 37
LED_K, // 38
LED_L, // 39
LED_SCLN, // 40 ;
LED_QUOT, // 41 "
LED_ENT, // 42
LED_PGDN, // 43
LED_LSFT, // 44
LED_Z, // 45
LED_X, // 46
LED_C, // 47
LED_V, // 48
LED_B, // 49
LED_N, // 50
LED_M, // 51
LED_COMM, // 52 ,
LED_DOT, // 53 .
LED_SLSH, // 54 /
LED_RSFT, // 55
LED_UP, // 56
LED_END, // 57
LED_LCTL, // 58
LED_LWIN, // 59
LED_LALT, // 60
LED_SPC, // 61
LED_FN, // 62
LED_RCTL, // 63
LED_LEFT, // 64
LED_DOWN, // 65
LED_RIGHT // 66
};
const uint8_t LED_LIST_WASD[] = { LED_W, LED_A, LED_S, LED_D };
const uint8_t LED_LIST_ARROWS[] = { LED_LEFT, LED_RIGHT, LED_UP, LED_DOWN };
const uint8_t LED_LIST_NUMROW[] = { LED_ESC, LED_1, LED_2, LED_3, LED_4, LED_5, LED_6, LED_7, LED_8, LED_9, LED_0, LED_MINS, LED_EQL, LED_BSPC, LED_DEL};
const uint8_t LED_LIST_QWERTYROW[] = { LED_TAB, LED_Q, LED_W, LED_E, LED_R, LED_T, LED_Y, LED_U, LED_I, LED_O, LED_P, LED_LBRC, LED_RBRC, LED_BSLS, LED_PGUP};
const uint8_t LED_LIST_NUMPAD[] = {
LED_7, LED_8, LED_9,
LED_U, LED_I, LED_O,
LED_J, LED_K, LED_L,
LED_M, LED_COMM, LED_DOT
};
#endif

View File

@@ -0,0 +1,10 @@
VIA_ENABLE = yes
LTO_ENABLE = yes
MOUSEKEY_ENABLE = no
TAP_DANCE_ENABLE = yes
BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite
TD_LSFT_CAPSLOCK_ENABLE = yes
IDLE_TIMEOUT_ENABLE = yes
STARTUP_NUMLOCK_ON = yes
INVERT_NUMLOCK_INDICATOR = yes

View File

@@ -0,0 +1,16 @@
# kubahorak's Keychron Q1 keymap
This ISO layout got heavily inspired by gtg465x's ANSI keymap (rev_0100).
Features:
- The rightest key column is: Ins, Home, PgUp, PgDn, which differs from the default.
- RGB lighting turns off when the computer sleeps
- Caps Lock and alpha keys turn red to indicate when Caps Lock is on
- When the Fn layer is active, RGB lighting turns off for keys that are not assigned
## Changelog
### 2021-10-17 - 1.0.0
- Initial release

View File

@@ -0,0 +1,25 @@
/* Copyright 2021 Jakub Horak (@kubahorak)
*
* 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
#ifdef RGB_MATRIX_ENABLE
/* from rev_0100/keymaps/gtg465x */
# define RGB_DISABLE_WHEN_USB_SUSPENDED
# define CAPS_LOCK_INDICATOR_COLOR RGB_RED
# define CAPS_LOCK_INDICATOR_LIGHT_ALPHAS
# define FN_LAYER_TRANSPARENT_KEYS_OFF
#endif

Some files were not shown because too many files have changed in this diff Show More