Compare commits

...
27 Commits
Author SHA1 Message Date
Ian O'Dea 21bc230dfd Vertical animation support for arm_atsam led_matrix (#4538)
* Add initial support for vertically-oriented animations

* DRY up vertical animation support

* Fix animation code for arm_atsam led_matrix to work in all directions

* Adjust py calculation to base off bottom rather than top
2018-12-06 08:58:58 -08:00
fauxpark 42c9fd2625 Delete docs/keycode.txt (#4505) 2018-12-06 08:31:17 -08:00
Drashna Jaelre 4e5f921496 Allow HS60 to use Community Layouts (#3862)
* Add layout support to HS60

* Update Readme for HS60

* Remove defective code

* Clean up readme

* Fix typo
2018-12-06 07:40:19 -08:00
noroadsleft dee2faf387 handwired/frenchdev Refactor, Configurator support and readme cleanup (#4561)
* handwired/frenchdev: refactor

- layout macro KEYMAP renamed to LAYOUT
- default keymap
  - now uses #include QMK_KEYBOARD_H
  - updated layout macro names

* handwired/frenchdev: Configurator support

* handwired/frenchdev: readme cleanup

Capitalization and markdown formatting fixes.
2018-12-06 07:29:42 -08:00
noroadsleft a5b43b35fe Sol rev1 Configurator support (#4562)
Adds Configurator support for the Sol rev. 1 by RGBKB.

Notes:

The Sol keyboard supports split thumb keys like the Ergodox - any of the 2u thumb keys can be split into two 1u keys. The matrix here is configured for fully 1u keys on the thumbs.

The Sol also supports installing a rotary encoder on each half. The key matrix given includes the encoders' functions, which are shown in the Configurator as two 1u keys side by side below each half's main key block. The left key of the two (for each side) represents that half's rotary encoder's counter-clockwise function, and the right key is that encoder's clockwise function.
2018-12-06 07:27:04 -08:00
Snipeye 57678238a9 Keyboard: Fixing spelling, updating code, finalizing keymap for Dichotomy (#4539)
* Fixing spelling, updating code, finalizing keymap for Dichotomy

* Fixing requested changes in PR

* Further PR-requested changes for convention

* Making macros functionable, removing unecessary defs

* Fixing keymap to properly use previously-changed macros
2018-12-05 18:31:21 -08:00
noroadsleft 8ad561c8f0 Keyboard: handwired/fivethirteen Refactor, Configurator support, and readme cleanup (#4559)
* handwired/fivethirteen: refactor

- Layout macro KEYMAP renamed to LAYOUT
- Default keymap
  - now uses #include QMK_KEYBOARD_H
  - Removed redundant KC_TRNS definition
  - Removed deprecated fn_actions and action_get_macro functions.

* handwired/fivethirteen: Configurator support

* handwired/fivethirteen: readme cleanup

Restructured readme file to be closer to current QMK template.

Couldn't find a photo of an assembled fivethirteen, so deleted the
reference to the photograph.

Renamed to readme.md
2018-12-05 16:55:35 -08:00
noroadsleft 58670ef4b7 Keyboard: Configurator support for handwired/dactyl_manuform (#4558)
* handwired/dactyl_manuform/4x5: Configurator support

* handwired/dactyl_manuform/4x6: Configurator support

* handwired/dactyl_manuform/5x6: Configurator support

* handwired/dactyl_manuform/5x7: Configurator support

* handwired/dactyl_manuform/6x6: Configurator support
2018-12-05 15:27:55 -08:00
Ivan Choi fd0f78254d Keymap: Updated files to work with Planck Rev. 6 (#4552)
* Update to work with Planck Rev. 6

Still something that needs to be worked with under keymap.c

Qwerty layer tap-toggle function seems to be a little laggy? Not instantaneous

* Changes

Deleted some unneeded lines

* deleting unneeded lines
2018-12-05 15:20:39 -08:00
jtcarrasco 04de0533b8 Keymap: Jtcarrasco (#4513)
* my XD75 builds for idobo and XD75

these are my xd75 layouts for the 2 versions of the board

* clearing of free space

spring cleaning

* additional cleaning

more spring cleaning

* removed lighting commands

don't need lighting on the idobo board so removal of such commands to keep the sizing down

* update for readme.md

* Update config.h

* commiting with keymap erros on idobo for review

* syntax fix for idobo and xd75 revok75, addition of del key switch on fn layer

* config edit to config user and keymap QMK_KEYBOARD_H

* update to vol controls for both idobo and xd75 for revok75 keymap

* filename changes
2018-12-05 15:13:31 -08:00
zvecr 368de26996 Keyboard: Initial i75 port (#4553)
* Initial i75 port - currently supporting promicro and teensy2

* Initial i75 port - review fixes
2018-12-05 13:56:43 -08:00
zvecr 161afe2e54 Keyboard: Fixes for superseded audio and default layer functionality (#4557) 2018-12-05 13:12:07 -08:00
Vyolle ff3369ac5d Changed location of mouse 3, and arrow keys (#4556) 2018-12-05 12:13:52 -08:00
Drashna Jaelre 59b2be6200 Re-order feature list in sidebar (#4555)
Specifically, moved the shifted keycodes to the top of the 'Feature' list, so it's more visible.  This way, all of the keycodes are at the top of the list, rather than having the shifted keys at the bottom, so they should be easier to find since they're all in one place.
2018-12-05 10:28:06 -08:00
zvecr b3d6426aa9 Keyboard: Refactor lets split to use split common code (#4536)
* Refactor lets split to use split common code

* Refactor lets split to use split common code

* Build fixes for OLED_sample keymap

* Build fixes for OLED_sample keymap - attempt to reduce firmware size
2018-12-05 09:51:35 -08:00
Nicholas Shaff d0da43fbdc Keyboard: Updated sixshooter keyboard to move LED macros into the default keymap. (#4428) 2018-12-05 09:35:26 -08:00
Jarrett Drouillard 7d4955b2c4 Keymap: Preonic kuatsure updates 2018-Nov (#4500)
* preonic-kuatsure: ctrl / esc in one key + hello ` again

* preonic-kuatsure: remove esc on lower

* preonic-kuatsure: programmy macros

* user-kuatsure: turn off console all the time

* preonic-kuatsure: auto shift, but only for numbers

* preonic-kuatsure: remove programmery macros

* preonic-kuatsure: move braces, parens, etc over to raise

backwards compat

move &*() on lower

* preonic-kuatsure: stop with the full rep of game layer
2018-12-05 09:08:05 -08:00
Jason Thigpen d115abfd8d Keyboard: Add dz60 tsangan hhkb (#4529)
* Add tsangan bottom row hhkb layout for dz60

* Add crd's tsangan hhkb layout for dz60

* Resort to native key aliases when they exist

* Update crd's dz60 ansi keymap to match updates for hhkb fn layer

* Add tsangan hhkb layout to dz60 info.json for KLE

* Fix JSON nesting in dz60 layouts block

* Minor adjustments to crd layouts to make them more consistent

* Update layout naming to 60_tsangan_hhkb
2018-12-05 09:02:26 -08:00
fauxpark d6b7ca04f2 Only try to read the report ID from SetReport when the keyboard is part of the shared EP
Fixes #4471
Fixes #4517
2018-12-05 08:50:29 -08:00
wanleg 0677e64655 Keymap: Wanleg layout updates (#4550)
* config fixes (including for issue #3678)

* put back audio

* jj40 backlighting setup

* jj40 backlighting setup

* rules.mk fix

* jj40 backlighting settings

* iris setup

* iris setup

* iris setup

* iris setup

* iris setup - onehand

* remove commented-out section

* edits due to #4403

* xd75 testing

* fix 5x15 layout issues with 5x5 bluetooth & xd75

* commenting out unused placeholders

* change iris to more wanleg-like 4x12 layout

* formatting changes

* onehand layout cleanup/fix

* revert temp change
2018-12-05 08:42:50 -08:00
zvecr 20130e010b Keyboard: Initial nori port (#4542)
* Initial nori port

* ortho_4x4 layout and RGB fixes

* Review fixes for superseded audio and default layer functionality
2018-12-05 08:36:31 -08:00
Vyolle 86a7687a87 Major revisions, focused on streamlining and useability (#4554) 2018-12-05 08:19:14 -08:00
Ismael Venegas Castelló 538874f90f Keymap: Hacker Dvorak (#4514)
* Hacker Dvorak

Programmer Dvorak based layout for the Ergodox EZ.

* Address drashna comments.

* Fix RGB and drop OSL for MO.

* Add gulp file to automate development.

* Fix gulpfile.

* Caps, num and scroll lock indicators.

* Fix scroll lock.
2018-12-05 08:12:35 -08:00
Legonut 8a330b33ff Keyboard: Add new keyboard "Sol" from RGBKB (#4497)
* Add final RGBKB Sol firmware

* Apply suggestions from code review

Apply most of the changes noroadsleft has suggested

Co-Authored-By: Legonut <[email protected]>

* Cleanup readme

* Cleanup keymaps per @noroadslefts suggestions

* Remove eeproms, use set_single_persistent_default_layer

* Suggestions from @noroadsleft and @drashna

some small cleanup

* Change RGB_SMOD to RGB_RMOD

* fix RGB_SMOD

* Apply suggestions from code review

Remove redundant lines

Co-Authored-By: Legonut <[email protected]>
2018-12-04 18:15:52 -08:00
Drashna Jaelre 6d0dc910d9 Rework drashna userspace to be more modular (#4544)
* Break up files to make more readable

* Add comments to ortho 4x12 layout rules.mk

* Small tweaks

* Update GitLab CI scripts

* Make ortho boards smaller
2018-12-04 13:27:41 -08:00
Yan-Fa Li 106de349fb Invalid JSON (#4547) 2018-12-04 10:09:39 -08:00
Alex Mayer 59dc31a737 Keymap: Ergodox EZ: Clean Up Keymap Array Alignment (#4545)
Remove layer name comments, they are above the visual layout
Remove comments explaining things that are documented in qmk docs
2018-12-04 09:25:27 -08:00
182 changed files with 8724 additions and 2539 deletions

No files matched your search

+1 -1
View File
@@ -43,6 +43,7 @@
* [Features](features.md) * [Features](features.md)
* [Basic Keycodes](keycodes_basic.md) * [Basic Keycodes](keycodes_basic.md)
* [US ANSI Shifted Keys](keycodes_us_ansi_shifted.md)
* [Quantum Keycodes](quantum_keycodes.md) * [Quantum Keycodes](quantum_keycodes.md)
* [Advanced Keycodes](feature_advanced_keycodes.md) * [Advanced Keycodes](feature_advanced_keycodes.md)
* [Audio](feature_audio.md) * [Audio](feature_audio.md)
@@ -74,7 +75,6 @@
* [Thermal Printer](feature_thermal_printer.md) * [Thermal Printer](feature_thermal_printer.md)
* [Unicode](feature_unicode.md) * [Unicode](feature_unicode.md)
* [Userspace](feature_userspace.md) * [Userspace](feature_userspace.md)
* [US ANSI Shifted Keys](keycodes_us_ansi_shifted.md)
* For Makers and Modders * For Makers and Modders
* [Hand Wiring Guide](hand_wire.md) * [Hand Wiring Guide](hand_wire.md)
+1 -1
View File
@@ -43,6 +43,7 @@
* [Features](features.md) * [Features](features.md)
* [Basic Keycodes](keycodes_basic.md) * [Basic Keycodes](keycodes_basic.md)
* [US ANSI Shifted Keys](keycodes_us_ansi_shifted.md)
* [Quantum Keycodes](quantum_keycodes.md) * [Quantum Keycodes](quantum_keycodes.md)
* [Advanced Keycodes](feature_advanced_keycodes.md) * [Advanced Keycodes](feature_advanced_keycodes.md)
* [Audio](feature_audio.md) * [Audio](feature_audio.md)
@@ -74,7 +75,6 @@
* [Thermal Printer](feature_thermal_printer.md) * [Thermal Printer](feature_thermal_printer.md)
* [Unicode](feature_unicode.md) * [Unicode](feature_unicode.md)
* [Userspace](feature_userspace.md) * [Userspace](feature_userspace.md)
* [US ANSI Shifted Keys](keycodes_us_ansi_shifted.md)
* For Makers and Modders * For Makers and Modders
* [Hand Wiring Guide](hand_wire.md) * [Hand Wiring Guide](hand_wire.md)
-263
View File
@@ -1,263 +0,0 @@
Keycode Symbol Table
====================
Keycodes are defined in `common/keycode.h`.
Range of 00-A4 and E0-E7 are identical with HID Usage:
<http://www.usb.org/developers/hidpage/Hut1_12v2.pdf>
Virtual keycodes are defined out of above range to support special actions.
Keycode Symbol Short name Description
--------------------------------------------------------------------------------
KC_NO 00 Reserved (no event indicated)
KC_ROLL_OVER 01 Keyboard ErrorRollOver
KC_POST_FAIL 02 Keyboard POSTFail
KC_UNDEFINED 03 Keyboard ErrorUndefined
KC_A 04 Keyboard a and A
KC_B 05 Keyboard b and B
KC_C 06 Keyboard c and C
KC_D 07 Keyboard d and D
KC_E 08 Keyboard e and E
KC_F 09 Keyboard f and F
KC_G 0A Keyboard g and G
KC_H 0B Keyboard h and H
KC_I 0C Keyboard i and I
KC_J 0D Keyboard j and J
KC_K 0E Keyboard k and K
KC_L 0F Keyboard l and L
KC_M 10 Keyboard m and M
KC_N 11 Keyboard n and N
KC_O 12 Keyboard o and O
KC_P 13 Keyboard p and P
KC_Q 14 Keyboard q and Q
KC_R 15 Keyboard r and R
KC_S 16 Keyboard s and S
KC_T 17 Keyboard t and T
KC_U 18 Keyboard u and U
KC_V 19 Keyboard v and V
KC_W 1A Keyboard w and W
KC_X 1B Keyboard x and X
KC_Y 1C Keyboard y and Y
KC_Z 1D Keyboard z and Z
KC_1 1E Keyboard 1 and !
KC_2 1F Keyboard 2 and @
KC_3 20 Keyboard 3 and #
KC_4 21 Keyboard 4 and $
KC_5 22 Keyboard 5 and %
KC_6 23 Keyboard 6 and ^
KC_7 24 Keyboard 7 and &
KC_8 25 Keyboard 8 and *
KC_9 26 Keyboard 9 and (
KC_0 27 Keyboard 0 and )
KC_ENTER KC_ENT 28 Keyboard Return (ENTER)
KC_ESCAPE KC_ESC 29 Keyboard ESCAPE
KC_BSPACE KC_BSPC 2A Keyboard DELETE (Backspace)
KC_TAB 2B Keyboard Tab
KC_SPACE KC_SPC 2C Keyboard Spacebar
KC_MINUS KC_MINS 2D Keyboard - and (underscore)
KC_EQUAL KC_EQL 2E Keyboard = and +
KC_LBRACKET KC_LBRC 2F Keyboard [ and {
KC_RBRACKET KC_RBRC 30 Keyboard ] and }
KC_BSLASH KC_BSLS 31 Keyboard \ and |
KC_NONUS_HASH KC_NUHS 32 Keyboard Non-US # and ~
KC_SCOLON KC_SCLN 33 Keyboard ; and :
KC_QUOTE KC_QUOT 34 Keyboard ‘ and “
KC_GRAVE KC_GRV 35 Keyboard Grave Accent and Tilde
KC_COMMA KC_COMM 36 Keyboard , and <
KC_DOT 37 Keyboard . and >
KC_SLASH KC_SLSH 38 Keyboard / and ?
KC_CAPSLOCK KC_CAPS 39 Keyboard Caps Lock
KC_F1 3A Keyboard F1
KC_F2 3B Keyboard F2
KC_F3 3C Keyboard F3
KC_F4 3D Keyboard F4
KC_F5 3E Keyboard F5
KC_F6 3F Keyboard F6
KC_F7 40 Keyboard F7
KC_F8 41 Keyboard F8
KC_F9 42 Keyboard F9
KC_F10 43 Keyboard F10
KC_F11 44 Keyboard F11
KC_F12 45 Keyboard F12
KC_PSCREEN KC_PSCR 46 Keyboard PrintScreen
KC_SCROLLLOCK KC_SLCK 47 Keyboard Scroll Lock
KC_PAUSE KC_PAUS 48 Keyboard Pause
KC_INSERT KC_INS 49 Keyboard Insert
KC_HOME 4A Keyboard Home
KC_PGUP 4B Keyboard PageUp
KC_DELETE KC_DEL 4C Keyboard Delete Forward
KC_END 4D Keyboard End
KC_PGDOWN KC_PGDN 4E Keyboard PageDown
KC_RIGHT KC_RGHT 4F Keyboard RightArrow
KC_LEFT 50 Keyboard LeftArrow
KC_DOWN 51 Keyboard DownArrow
KC_UP 52 Keyboard UpArrow
KC_NUMLOCK KC_NLCK 53 Keypad Num Lock and Clear
KC_KP_SLASH KC_PSLS 54 Keypad /
KC_KP_ASTERISK KC_PAST 55 Keypad *
KC_KP_MINUS KC_PMNS 56 Keypad -
KC_KP_PLUS KC_PPLS 57 Keypad +
KC_KP_ENTER KC_PENT 58 Keypad ENTER
KC_KP_1 KC_P1 59 Keypad 1 and End
KC_KP_2 KC_P2 5A Keypad 2 and Down Arrow
KC_KP_3 KC_P3 5B Keypad 3 and PageDn
KC_KP_4 KC_P4 5C Keypad 4 and Left Arrow
KC_KP_5 KC_P5 5D Keypad 5
KC_KP_6 KC_P6 5E Keypad 6 and Right Arrow
KC_KP_7 KC_P7 5F Keypad 7 and Home
KC_KP_8 KC_P8 60 Keypad 8 and Up Arrow
KC_KP_9 KC_P9 61 Keypad 9 and PageUp
KC_KP_0 KC_P0 62 Keypad 0 and Insert
KC_KP_DOT KC_PDOT 63 Keypad . and Delete
KC_NONUS_BSLASH KC_NUBS 64 Keyboard Non-US \ and |
KC_APPLICATION KC_APP 65 Keyboard Application
KC_POWER 66 Keyboard Power
KC_KP_EQUAL KC_PEQL 67 Keypad =
KC_F13 68 Keyboard F13
KC_F14 69 Keyboard F14
KC_F15 6A Keyboard F15
KC_F16 6B Keyboard F16
KC_F17 6C Keyboard F17
KC_F18 6D Keyboard F18
KC_F19 6E Keyboard F19
KC_F20 6F Keyboard F20
KC_F21 70 Keyboard F21
KC_F22 71 Keyboard F22
KC_F23 72 Keyboard F23
KC_F24 73 Keyboard F24
KC_EXECUTE 74 Keyboard Execute
KC_HELP 75 Keyboard Help
KC_MENU 76 Keyboard Menu
KC_SELECT 77 Keyboard Select
KC_STOP 78 Keyboard Stop
KC_AGAIN 79 Keyboard Again
KC_UNDO 7A Keyboard Undo
KC_CUT 7B Keyboard Cut
KC_COPY 7C Keyboard Copy
KC_PASTE 7D Keyboard Paste
KC_FIND 7E Keyboard Find
KC__MUTE 7F Keyboard Mute
KC__VOLUP 80 Keyboard Volume Up
KC__VOLDOWN 81 Keyboard Volume Down
KC_LOCKING_CAPS 82 Keyboard Locking Caps Lock
KC_LOCKING_NUM 83 Keyboard Locking Num Lock
KC_LOCKING_SCROLL 84 Keyboard Locking Scroll Lock
KC_KP_COMMA KC_PCMM 85 Keypad Comma
KC_KP_EQUAL_AS400 86 Keypad Equal Sign
KC_INT1 KC_RO 87 Keyboard International115
KC_INT2 KC_KANA 88 Keyboard International216
KC_INT3 KC_JYEN 89 Keyboard International317
KC_INT4 KC_HENK 8A Keyboard International418
KC_INT5 KC_MHEN 8B Keyboard International519
KC_INT6 8C Keyboard International620
KC_INT7 8D Keyboard International721
KC_INT8 8E Keyboard International822
KC_INT9 8F Keyboard International922
KC_LANG1 90 Keyboard LANG125
KC_LANG2 91 Keyboard LANG226
KC_LANG3 92 Keyboard LANG330
KC_LANG4 93 Keyboard LANG431
KC_LANG5 94 Keyboard LANG532
KC_LANG6 95 Keyboard LANG68
KC_LANG7 96 Keyboard LANG78
KC_LANG8 97 Keyboard LANG88
KC_LANG9 98 Keyboard LANG98
KC_ALT_ERASE 99 Keyboard Alternate Erase
KC_SYSREQ 9A Keyboard SysReq/Attention
KC_CANCEL 9B Keyboard Cancel
KC_CLEAR 9C Keyboard Clear
KC_PRIOR 9D Keyboard Prior
KC_RETURN 9E Keyboard Return
KC_SEPARATOR 9F Keyboard Separator
KC_OUT A0 Keyboard Out
KC_OPER A1 Keyboard Oper
KC_CLEAR_AGAIN A2 Keyboard Clear/Again
KC_CRSEL A3 Keyboard CrSel/Props
KC_EXSEL A4 Keyboard ExSel
/* Modifiers */
KC_LCTRL KC_LCTL E0 Keyboard LeftControl
KC_LSHIFT KC_LSFT E1 Keyboard LeftShift
KC_LALT E2 Keyboard LeftAlt
KC_LGUI E3 Keyboard Left GUI(Windows/Apple/Meta key)
KC_RCTRL KC_RCTL E4 Keyboard RightControl
KC_RSHIFT KC_RSFT E5 Keyboard RightShift
KC_RALT E6 Keyboard RightAlt
KC_RGUI E7 Keyboard Right GUI(Windows/Apple/Meta key)
/*
* Virtual keycodes
*/
/* System Control */
KC_SYSTEM_POWER KC_PWR System Power Down
KC_SYSTEM_SLEEP KC_SLEP System Sleep
KC_SYSTEM_WAKE KC_WAKE System Wake
/* Consumer Page */
KC_AUDIO_MUTE KC_MUTE
KC_AUDIO_VOL_UP KC_VOLU
KC_AUDIO_VOL_DOWN KC_VOLD
KC_MEDIA_NEXT_TRACK KC_MNXT
KC_MEDIA_PREV_TRACK KC_MPRV
KC_MEDIA_STOP KC_MSTP
KC_MEDIA_PLAY_PAUSE KC_MPLY
KC_MEDIA_SELECT KC_MSEL
KC_MAIL KC_MAIL
KC_CALCULATOR KC_CALC
KC_MY_COMPUTER KC_MYCM
KC_WWW_SEARCH KC_WSCH
KC_WWW_HOME KC_WHOM
KC_WWW_BACK KC_WBAK
KC_WWW_FORWARD KC_WFWD
KC_WWW_STOP KC_WSTP
KC_WWW_REFRESH KC_WREF
KC_WWW_FAVORITES KC_WFAV
KC_BRIGHTNESS_UP KC_BRIU
KC_BRIGHTNESS_DOWN KC_BRID
/* Mousekey */
KC_MS_UP KC_MS_U Mouse Cursor Up
KC_MS_DOWN KC_MS_D Mouse Cursor Down
KC_MS_LEFT KC_MS_L Mouse Cursor Left
KC_MS_RIGHT KC_MS_R Mouse Cursor Right
KC_MS_BTN1 KC_BTN1 Mouse Button 1
KC_MS_BTN2 KC_BTN2 Mouse Button 2
KC_MS_BTN3 KC_BTN3 Mouse Button 3
KC_MS_BTN4 KC_BTN4 Mouse Button 4
KC_MS_BTN5 KC_BTN5 Mouse Button 5
KC_MS_WH_UP KC_WH_U Mouse Wheel Up
KC_MS_WH_DOWN KC_WH_D Mouse Wheel Down
KC_MS_WH_LEFT KC_WH_L Mouse Wheel Left
KC_MS_WH_RIGHT KC_WH_R Mouse Wheel Right
KC_MS_ACCEL0 KC_ACL0 Mouse Acceleration 0
KC_MS_ACCEL1 KC_ACL1 Mouse Acceleration 1
KC_MS_ACCEL2 KC_ACL2 Mouse Acceleration 2
/* Fn key */
KC_FN0
KC_FN1
KC_FN2
KC_FN3
KC_FN4
KC_FN5
KC_FN6
KC_FN7
KC_FN8
KC_FN9
KC_FN10
KC_FN11
KC_FN12
KC_FN13
KC_FN14
KC_FN15
KC_FN16
KC_FN17
KC_FN18
KC_FN19
KC_FN20
KC_FN21
KC_FN22
KC_FN23
KC_FN24
KC_FN25
KC_FN26
KC_FN27
KC_FN28
KC_FN29
KC_FN30
KC_FN31
+192
View File
@@ -0,0 +1,192 @@
/* Copyright 2018
*
* 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 0xFEED
#define PRODUCT_ID 0x0A0C
#define DEVICE_VER 0x0175
#define MANUFACTURER di0ib
#define PRODUCT i75
#define DESCRIPTION i75 15x5 ortholinear keyboard
/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
#define DEBOUNCING_DELAY 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
/*
* Magic Key Options
*
* Magic keys are hotkey commands that allow control over firmware functions of
* the keyboard. They are best used in combination with the HID Listen program,
* found here: https://www.pjrc.com/teensy/hid_listen.html
*
* The options below allow the magic key functionality to be changed. This is
* useful if your keyboard/keypad is missing keys and you want magic key support.
*
*/
/* key combination for magic key command */
#define IS_COMMAND() ( \
keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
)
/* control how magic key switches layers */
//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true
//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true
//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false
/* override magic key keymap */
//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS
//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS
//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM
//#define MAGIC_KEY_HELP1 H
//#define MAGIC_KEY_HELP2 SLASH
//#define MAGIC_KEY_DEBUG D
//#define MAGIC_KEY_DEBUG_MATRIX X
//#define MAGIC_KEY_DEBUG_KBD K
//#define MAGIC_KEY_DEBUG_MOUSE M
//#define MAGIC_KEY_VERSION V
//#define MAGIC_KEY_STATUS S
//#define MAGIC_KEY_CONSOLE C
//#define MAGIC_KEY_LAYER0_ALT1 ESC
//#define MAGIC_KEY_LAYER0_ALT2 GRAVE
//#define MAGIC_KEY_LAYER0 0
//#define MAGIC_KEY_LAYER1 1
//#define MAGIC_KEY_LAYER2 2
//#define MAGIC_KEY_LAYER3 3
//#define MAGIC_KEY_LAYER4 4
//#define MAGIC_KEY_LAYER5 5
//#define MAGIC_KEY_LAYER6 6
//#define MAGIC_KEY_LAYER7 7
//#define MAGIC_KEY_LAYER8 8
//#define MAGIC_KEY_LAYER9 9
//#define MAGIC_KEY_BOOTLOADER PAUSE
//#define MAGIC_KEY_LOCK CAPS
//#define MAGIC_KEY_EEPROM E
//#define MAGIC_KEY_NKRO N
//#define MAGIC_KEY_SLEEP_LED Z
/*
* 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
/*
* MIDI options
*/
/* Prevent use of disabled MIDI features in the keymap */
//#define MIDI_ENABLE_STRICT 1
/* enable basic MIDI features:
- MIDI notes can be sent when in Music mode is on
*/
//#define MIDI_BASIC
/* enable advanced MIDI features:
- MIDI notes can be added to the keymap
- Octave shift and transpose
- Virtual sustain, portamento, and modulation wheel
- etc.
*/
//#define MIDI_ADVANCED
/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */
//#define MIDI_TONE_KEYCODE_OCTAVES 1
/*
* HD44780 LCD Display Configuration
*/
/*
#define LCD_LINES 2 //< number of visible lines of the display
#define LCD_DISP_LENGTH 16 //< visibles characters per line of the display
#define LCD_IO_MODE 1 //< 0: memory mapped mode, 1: IO port mode
#if LCD_IO_MODE
#define LCD_PORT PORTB //< port for the LCD lines
#define LCD_DATA0_PORT LCD_PORT //< port for 4bit data bit 0
#define LCD_DATA1_PORT LCD_PORT //< port for 4bit data bit 1
#define LCD_DATA2_PORT LCD_PORT //< port for 4bit data bit 2
#define LCD_DATA3_PORT LCD_PORT //< port for 4bit data bit 3
#define LCD_DATA0_PIN 4 //< pin for 4bit data bit 0
#define LCD_DATA1_PIN 5 //< pin for 4bit data bit 1
#define LCD_DATA2_PIN 6 //< pin for 4bit data bit 2
#define LCD_DATA3_PIN 7 //< pin for 4bit data bit 3
#define LCD_RS_PORT LCD_PORT //< port for RS line
#define LCD_RS_PIN 3 //< pin for RS line
#define LCD_RW_PORT LCD_PORT //< port for RW line
#define LCD_RW_PIN 2 //< pin for RW line
#define LCD_E_PORT LCD_PORT //< port for Enable line
#define LCD_E_PIN 1 //< pin for Enable line
#endif
*/
/* Bootmagic Lite key configuration */
// #define BOOTMAGIC_LITE_ROW 0
// #define BOOTMAGIC_LITE_COLUMN 0
+43
View File
@@ -0,0 +1,43 @@
/* Copyright 2018
*
* 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 "i75.h"
void matrix_init_kb(void) {
// put your keyboard start-up code here
// runs once when the firmware starts up
matrix_init_user();
}
void matrix_scan_kb(void) {
// put your looping keyboard code here
// runs every cycle (a lot)
matrix_scan_user();
}
bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
// put your per-action keyboard code here
// runs for every action, just before processing by the firmware
return process_record_user(keycode, record);
}
void led_set_kb(uint8_t usb_led) {
// put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
led_set_user(usb_led);
}
+24
View File
@@ -0,0 +1,24 @@
/* Copyright 2018
*
* 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"
#ifdef KEYBOARD_40percentclub_i75_promicro
#include "promicro.h"
#elif KEYBOARD_40percentclub_i75_teensy2
#include "teensy2.h"
#endif
+12
View File
@@ -0,0 +1,12 @@
{
"keyboard_name": "i75",
"url": "",
"maintainer": "qmk",
"width": 15,
"height": 5,
"layouts": {
"LAYOUT_ortho_5x15": {
"layout": [{"x":0, "y":0}, {"x":1, "y":0}, {"x":2, "y":0}, {"x":3, "y":0}, {"x":4, "y":0}, {"x":5, "y":0}, {"x":6, "y":0}, {"x":7, "y":0}, {"x":8, "y":0}, {"x":9, "y":0}, {"x":10, "y":0}, {"x":11, "y":0}, {"x":12, "y":0}, {"x":13, "y":0}, {"x":14, "y":0}, {"x":0, "y":1}, {"x":1, "y":1}, {"x":2, "y":1}, {"x":3, "y":1}, {"x":4, "y":1}, {"x":5, "y":1}, {"x":6, "y":1}, {"x":7, "y":1}, {"x":8, "y":1}, {"x":9, "y":1}, {"x":10, "y":1}, {"x":11, "y":1}, {"x":12, "y":1}, {"x":13, "y":1}, {"x":14, "y":1}, {"x":0, "y":2}, {"x":1, "y":2}, {"x":2, "y":2}, {"x":3, "y":2}, {"x":4, "y":2}, {"x":5, "y":2}, {"x":6, "y":2}, {"x":7, "y":2}, {"x":8, "y":2}, {"x":9, "y":2}, {"x":10, "y":2}, {"x":11, "y":2}, {"x":12, "y":2}, {"x":13, "y":2}, {"x":14, "y":2}, {"x":0, "y":3}, {"x":1, "y":3}, {"x":2, "y":3}, {"x":3, "y":3}, {"x":4, "y":3}, {"x":5, "y":3}, {"x":6, "y":3}, {"x":7, "y":3}, {"x":8, "y":3}, {"x":9, "y":3}, {"x":10, "y":3}, {"x":11, "y":3}, {"x":12, "y":3}, {"x":13, "y":3}, {"x":14, "y":3}, {"x":0, "y":4}, {"x":1, "y":4}, {"x":2, "y":4}, {"x":3, "y":4}, {"x":4, "y":4}, {"x":5, "y":4}, {"x":6, "y":4}, {"x":7, "y":4}, {"x":8, "y":4}, {"x":9, "y":4}, {"x":10, "y":4}, {"x":11, "y":4}, {"x":12, "y":4}, {"x":13, "y":4}, {"x":14, "y":4}]
}
}
}
@@ -0,0 +1,19 @@
/* Copyright 2018
*
* 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
// place overrides here
@@ -0,0 +1,66 @@
/* Copyright 2018
*
* 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
// Defines the keycodes used by our macros in process_record_user
enum custom_keycodes {
QMKBEST = SAFE_RANGE,
QMKURL
};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT_ortho_5x15( \
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_BSLS, KC_GRV, \
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_DEL, \
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_ENT, KC_PGUP, \
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_RSFT, KC_UP, KC_PGDN, \
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_SPC, KC_SPC, KC_SPC, KC_SPC, KC_RALT, KC_RCTL, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT \
),
};
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
switch (keycode) {
case QMKBEST:
if (record->event.pressed) {
// when keycode QMKBEST is pressed
SEND_STRING("QMK is the best thing ever!");
} else {
// when keycode QMKBEST is released
}
break;
case QMKURL:
if (record->event.pressed) {
// when keycode QMKURL is pressed
SEND_STRING("https://qmk.fm/" SS_TAP(X_ENTER));
} else {
// when keycode QMKURL is released
}
break;
}
return true;
}
void matrix_init_user(void) {
}
void matrix_scan_user(void) {
}
void led_set_user(uint8_t usb_led) {
}
@@ -0,0 +1 @@
# The default keymap for i75
@@ -0,0 +1,40 @@
/* Copyright 2018
*
* 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"
/* key matrix size */
#define MATRIX_ROWS 9
#define MATRIX_COLS 9
/*
* Keyboard Matrix Assignments
*
* Change this to how you wired your keyboard
* COLS: AVR pins used for columns, left to right
* ROWS: AVR pins used for rows, top to bottom
* DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
* ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
*
*/
#define MATRIX_ROW_PINS { B4, E6, D7, C6, D4, D0, D1, D2, D3 }
#define MATRIX_COL_PINS { B5, B6, B2, B3, B1, F7, F6, F5, F4 }
#define UNUSED_PINS
/* COL2ROW, ROW2COL, or CUSTOM_MATRIX */
#define DIODE_DIRECTION COL2ROW
@@ -0,0 +1,16 @@
/* Copyright 2018
*
* 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 "i75.h"
@@ -0,0 +1,47 @@
/* Copyright 2018
*
* 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 "i75.h"
#include "quantum.h"
/* This a shortcut to help you visually see your layout.
*
* The first section contains all of the arguments representing the physical
* layout of the board and position of the keys.
*
* The second converts the arguments into a two-dimensional array which
* represents the switch matrix.
*/
#define LAYOUT_ortho_5x15( \
K00, K01, K02, K03, K04, K05, K06, K07, K08, K10, K11, K12, K13, K14, K15, \
K16, K17, K18, K20, K21, K22, K23, K24, K25, K26, K27, K28, K30, K31, K32, \
K33, K34, K35, K36, K37, K38, K40, K41, K42, K43, K44, K45, K46, K47, K48, \
K50, K51, K52, K53, K54, K55, K56, K57, K58, K60, K61, K62, K63, K64, K65, \
K66, K67, K68, K70, K71, K72, K73, K74, K75, K76, K77, K78, K80, K81, K82 \
) \
{ \
{ K00, K01, K02, K03, K04, K05, K06, K07, K08 }, \
{ K10, K11, K12, K13, K14, K15, K16, K17, K18 }, \
{ K20, K21, K22, K23, K24, K25, K26, K27, K28 }, \
{ K30, K31, K32, K33, K34, K35, K36, K37, K38 }, \
{ K40, K41, K42, K43, K44, K45, K46, K47, K48 }, \
{ K50, K51, K52, K53, K54, K55, K56, K57, K58 }, \
{ K60, K61, K62, K63, K64, K65, K66, K67, K68 }, \
{ K70, K71, K72, K73, K74, K75, K76, K77, K78 }, \
{ K80, K81, K82 } \
}
@@ -0,0 +1,58 @@
# MCU name
MCU = atmega32u4
# Processor frequency.
# This will define a symbol, F_CPU, in all source code files equal to the
# processor frequency in Hz. You can then use this symbol in your source code to
# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
# automatically to create a 32-bit value in your source code.
#
# This will be an integer division of F_USB below, as it is sourced by
# F_USB after it has run through any CPU prescalers. Note that this value
# does not *change* the processor frequency - it should merely be updated to
# reflect the processor speed set externally so that the code can use accurate
# software delays.
F_CPU = 16000000
#
# LUFA specific
#
# Target architecture (see library "Board Types" documentation).
ARCH = AVR8
# Input clock frequency.
# This will define a symbol, F_USB, in all source code files equal to the
# input clock frequency (before any prescaling is performed) in Hz. This value may
# differ from F_CPU if prescaling is used on the latter, and is required as the
# raw input clock is fed directly to the PLL sections of the AVR for high speed
# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
# at the end, this will be done automatically to create a 32-bit value in your
# source code.
#
# If no clock division is performed on the input clock inside the AVR (via the
# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
F_USB = $(F_CPU)
# Interrupt driven control endpoint task(+60)
OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
# Bootloader selection
# Teensy halfkay
# Pro Micro caterina
# Atmel DFU atmel-dfu
# LUFA DFU lufa-dfu
# QMK DFU qmk-dfu
# atmega32a bootloadHID
BOOTLOADER = caterina
# If you don't know the bootloader type, then you can specify the
# Boot Section Size in *bytes* by uncommenting out the OPT_DEFS line
# Teensy halfKay 512
# Teensy++ halfKay 1024
# Atmel DFU loader 4096
# LUFA bootloader 4096
# USBaspLoader 2048
# OPT_DEFS += -DBOOTLOADER_SIZE=4096
+28
View File
@@ -0,0 +1,28 @@
# i75
![i75](https://1.bp.blogspot.com/-eRSwPnvgliI/WCYQ-aYihoI/AAAAAAAB_Bc/a7i1Envc1FYiEHeqvyHw80VxTAnafDsPgCLcB/s320/IMG_20161003_084555.jpg)
===
5x15 grid layout, multiple controllers supported
- Pro Micro
- PJRC Teensy 2.0
- PJRC Teensy LC/3.2 (**NB: Not currently ported**)
The matrix is a 9x9 grid. This uses all of the available pins on the Pro Micro. The other controllers have pins left over. The serial pins and pins connected to LEDs were avoided if possible.
* [The original TMK firmware](https://github.com/di0ib/tmk_keyboard/tree/master/keyboard/i75_ProMicro)
Keyboard Maintainer: QMK Community
Hardware Supported: i75 PCB
Hardware Availability: [i75 project on 40% Keyboards](http://www.40percent.club/2016/11/i75.html)
Make example for this keyboard (after setting up your build environment):
make 40percentclub/i75:default
If you would like to use one of the alternative controllers:
make 40percentclub/i75/promicro:default
make 40percentclub/i75/teensy2: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).
+23
View File
@@ -0,0 +1,23 @@
# Build Options
# change yes to no to disable
#
BOOTMAGIC_ENABLE = lite # Virtual DIP switch configuration(+1000)
MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
CONSOLE_ENABLE = yes # Console for debug(+400)
COMMAND_ENABLE = yes # Commands for debug and configuration
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
NKRO_ENABLE = no # USB Nkey Rollover
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality on B7 by default
RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config)
UNICODE_ENABLE = no # Unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
AUDIO_ENABLE = no # Audio output on port C6
FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
HD44780_ENABLE = no # Enable support for HD44780 based LCDs (+400)
LAYOUTS = ortho_5x15
DEFAULT_FOLDER = 40percentclub/i75/promicro
@@ -0,0 +1,40 @@
/* Copyright 2018
*
* 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"
/* key matrix size */
#define MATRIX_ROWS 9
#define MATRIX_COLS 9
/*
* Keyboard Matrix Assignments
*
* Change this to how you wired your keyboard
* COLS: AVR pins used for columns, left to right
* ROWS: AVR pins used for rows, top to bottom
* DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
* ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
*
*/
#define MATRIX_ROW_PINS { D3, D2, D1, D0, B7, B3, B2, B1, B0 }
#define MATRIX_COL_PINS { C6, C7, D6, D7, B5, B6, F7, F6, F5 }
#define UNUSED_PINS
/* COL2ROW, ROW2COL, or CUSTOM_MATRIX */
#define DIODE_DIRECTION COL2ROW
@@ -0,0 +1,58 @@
# MCU name
MCU = atmega32u4
# Processor frequency.
# This will define a symbol, F_CPU, in all source code files equal to the
# processor frequency in Hz. You can then use this symbol in your source code to
# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
# automatically to create a 32-bit value in your source code.
#
# This will be an integer division of F_USB below, as it is sourced by
# F_USB after it has run through any CPU prescalers. Note that this value
# does not *change* the processor frequency - it should merely be updated to
# reflect the processor speed set externally so that the code can use accurate
# software delays.
F_CPU = 16000000
#
# LUFA specific
#
# Target architecture (see library "Board Types" documentation).
ARCH = AVR8
# Input clock frequency.
# This will define a symbol, F_USB, in all source code files equal to the
# input clock frequency (before any prescaling is performed) in Hz. This value may
# differ from F_CPU if prescaling is used on the latter, and is required as the
# raw input clock is fed directly to the PLL sections of the AVR for high speed
# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
# at the end, this will be done automatically to create a 32-bit value in your
# source code.
#
# If no clock division is performed on the input clock inside the AVR (via the
# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
F_USB = $(F_CPU)
# Interrupt driven control endpoint task(+60)
OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
# Bootloader selection
# Teensy halfkay
# Pro Micro caterina
# Atmel DFU atmel-dfu
# LUFA DFU lufa-dfu
# QMK DFU qmk-dfu
# atmega32a bootloadHID
BOOTLOADER = halfkay
# If you don't know the bootloader type, then you can specify the
# Boot Section Size in *bytes* by uncommenting out the OPT_DEFS line
# Teensy halfKay 512
# Teensy++ halfKay 1024
# Atmel DFU loader 4096
# LUFA bootloader 4096
# USBaspLoader 2048
# OPT_DEFS += -DBOOTLOADER_SIZE=4096
@@ -0,0 +1,16 @@
/* Copyright 2018
*
* 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 "i75.h"
@@ -0,0 +1,47 @@
/* Copyright 2018
*
* 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 "i75.h"
#include "quantum.h"
/* This a shortcut to help you visually see your layout.
*
* The first section contains all of the arguments representing the physical
* layout of the board and position of the keys.
*
* The second converts the arguments into a two-dimensional array which
* represents the switch matrix.
*/
#define LAYOUT_ortho_5x15( \
K00, K01, K02, K03, K04, K05, K06, K07, K08, K10, K11, K12, K13, K14, K15, \
K16, K17, K18, K20, K21, K22, K23, K24, K25, K26, K27, K28, K30, K31, K32, \
K33, K34, K35, K36, K37, K38, K40, K41, K42, K43, K44, K45, K46, K47, K48, \
K50, K51, K52, K53, K54, K55, K56, K57, K58, K60, K61, K62, K63, K64, K65, \
K66, K67, K68, K70, K71, K72, K73, K74, K75, K76, K77, K78, K80, K81, K82 \
) \
{ \
{ K00, K01, K02, K03, K04, K05, K06, K07, K08 }, \
{ K10, K11, K12, K13, K14, K15, K16, K17, K18 }, \
{ K20, K21, K22, K23, K24, K25, K26, K27, K28 }, \
{ K30, K31, K32, K33, K34, K35, K36, K37, K38 }, \
{ K40, K41, K42, K43, K44, K45, K46, K47, K48 }, \
{ K50, K51, K52, K53, K54, K55, K56, K57, K58 }, \
{ K60, K61, K62, K63, K64, K65, K66, K67, K68 }, \
{ K70, K71, K72, K73, K74, K75, K76, K77, K78 }, \
{ K80, K81, K82 } \
}
+221
View File
@@ -0,0 +1,221 @@
/* Copyright 2018
*
* 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 0xFEED
#define PRODUCT_ID 0x0A0C
#define DEVICE_VER 0x0444
#define MANUFACTURER di0ib
#define PRODUCT The nori Keyboard
#define DESCRIPTION A modular compact keyboard
/* key matrix size */
#define MATRIX_ROWS 4
#define MATRIX_COLS 12
/*
* 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 { D3, D2, D1, D0 }
#define MATRIX_COL_PINS { F4, F5, F6, F7, B1, B3, B2, B6, D4, C6, D7, E6 }
#define UNUSED_PINS
/* COL2ROW, ROW2COL, or CUSTOM_MATRIX */
#define DIODE_DIRECTION COL2ROW
#define BACKLIGHT_PIN B5
//#define BACKLIGHT_BREATHING
#define BACKLIGHT_LEVELS 3
// enable RGB underglow
#define RGB_DI_PIN B4
#define RGBLIGHT_ANIMATIONS
#define RGBLED_NUM 10
#define RGBLIGHT_HUE_STEP 8
#define RGBLIGHT_SAT_STEP 8
#define RGBLIGHT_VAL_STEP 8
/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
#define DEBOUNCING_DELAY 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
/*
* Magic Key Options
*
* Magic keys are hotkey commands that allow control over firmware functions of
* the keyboard. They are best used in combination with the HID Listen program,
* found here: https://www.pjrc.com/teensy/hid_listen.html
*
* The options below allow the magic key functionality to be changed. This is
* useful if your keyboard/keypad is missing keys and you want magic key support.
*
*/
/* key combination for magic key command */
#define IS_COMMAND() ( \
keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
)
/* control how magic key switches layers */
//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true
//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true
//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false
/* override magic key keymap */
//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS
//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS
//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM
//#define MAGIC_KEY_HELP1 H
//#define MAGIC_KEY_HELP2 SLASH
//#define MAGIC_KEY_DEBUG D
//#define MAGIC_KEY_DEBUG_MATRIX X
//#define MAGIC_KEY_DEBUG_KBD K
//#define MAGIC_KEY_DEBUG_MOUSE M
//#define MAGIC_KEY_VERSION V
//#define MAGIC_KEY_STATUS S
//#define MAGIC_KEY_CONSOLE C
//#define MAGIC_KEY_LAYER0_ALT1 ESC
//#define MAGIC_KEY_LAYER0_ALT2 GRAVE
//#define MAGIC_KEY_LAYER0 0
//#define MAGIC_KEY_LAYER1 1
//#define MAGIC_KEY_LAYER2 2
//#define MAGIC_KEY_LAYER3 3
//#define MAGIC_KEY_LAYER4 4
//#define MAGIC_KEY_LAYER5 5
//#define MAGIC_KEY_LAYER6 6
//#define MAGIC_KEY_LAYER7 7
//#define MAGIC_KEY_LAYER8 8
//#define MAGIC_KEY_LAYER9 9
//#define MAGIC_KEY_BOOTLOADER PAUSE
//#define MAGIC_KEY_LOCK CAPS
//#define MAGIC_KEY_EEPROM E
//#define MAGIC_KEY_NKRO N
//#define MAGIC_KEY_SLEEP_LED Z
/*
* 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
/*
* MIDI options
*/
/* Prevent use of disabled MIDI features in the keymap */
//#define MIDI_ENABLE_STRICT 1
/* enable basic MIDI features:
- MIDI notes can be sent when in Music mode is on
*/
//#define MIDI_BASIC
/* enable advanced MIDI features:
- MIDI notes can be added to the keymap
- Octave shift and transpose
- Virtual sustain, portamento, and modulation wheel
- etc.
*/
//#define MIDI_ADVANCED
/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */
//#define MIDI_TONE_KEYCODE_OCTAVES 1
/*
* HD44780 LCD Display Configuration
*/
/*
#define LCD_LINES 2 //< number of visible lines of the display
#define LCD_DISP_LENGTH 16 //< visibles characters per line of the display
#define LCD_IO_MODE 1 //< 0: memory mapped mode, 1: IO port mode
#if LCD_IO_MODE
#define LCD_PORT PORTB //< port for the LCD lines
#define LCD_DATA0_PORT LCD_PORT //< port for 4bit data bit 0
#define LCD_DATA1_PORT LCD_PORT //< port for 4bit data bit 1
#define LCD_DATA2_PORT LCD_PORT //< port for 4bit data bit 2
#define LCD_DATA3_PORT LCD_PORT //< port for 4bit data bit 3
#define LCD_DATA0_PIN 4 //< pin for 4bit data bit 0
#define LCD_DATA1_PIN 5 //< pin for 4bit data bit 1
#define LCD_DATA2_PIN 6 //< pin for 4bit data bit 2
#define LCD_DATA3_PIN 7 //< pin for 4bit data bit 3
#define LCD_RS_PORT LCD_PORT //< port for RS line
#define LCD_RS_PIN 3 //< pin for RS line
#define LCD_RW_PORT LCD_PORT //< port for RW line
#define LCD_RW_PIN 2 //< pin for RW line
#define LCD_E_PORT LCD_PORT //< port for Enable line
#define LCD_E_PIN 1 //< pin for Enable line
#endif
*/
+117
View File
@@ -0,0 +1,117 @@
{
"keyboard_name": "nori",
"url": "",
"maintainer": "qmk",
"width": 12,
"height": 4,
"layouts": {
"LAYOUT_ortho_4x4": {
"key_count": 16,
"layout": [
{ "w": 1, "x": 0, "y": 0 },
{ "w": 1, "x": 1, "y": 0 },
{ "w": 1, "x": 2, "y": 0 },
{ "w": 1, "x": 3, "y": 0 },
{ "w": 1, "x": 0, "y": 1 },
{ "w": 1, "x": 1, "y": 1 },
{ "w": 1, "x": 2, "y": 1 },
{ "w": 1, "x": 3, "y": 1 },
{ "w": 1, "x": 0, "y": 2 },
{ "w": 1, "x": 1, "y": 2 },
{ "w": 1, "x": 2, "y": 2 },
{ "w": 1, "x": 3, "y": 2 },
{ "w": 1, "x": 0, "y": 3 },
{ "w": 1, "x": 1, "y": 3 },
{ "w": 1, "x": 2, "y": 3 },
{ "w": 1, "x": 3, "y": 3 } ]
},
"LAYOUT_ortho_4x8": {
"key_count": 32,
"layout": [
{ "w": 1, "x": 0, "y": 0 },
{ "w": 1, "x": 1, "y": 0 },
{ "w": 1, "x": 2, "y": 0 },
{ "w": 1, "x": 3, "y": 0 },
{ "w": 1, "x": 4, "y": 0 },
{ "w": 1, "x": 5, "y": 0 },
{ "w": 1, "x": 6, "y": 0 },
{ "w": 1, "x": 7, "y": 0 },
{ "w": 1, "x": 0, "y": 1 },
{ "w": 1, "x": 1, "y": 1 },
{ "w": 1, "x": 2, "y": 1 },
{ "w": 1, "x": 3, "y": 1 },
{ "w": 1, "x": 4, "y": 1 },
{ "w": 1, "x": 5, "y": 1 },
{ "w": 1, "x": 6, "y": 1 },
{ "w": 1, "x": 7, "y": 1 },
{ "w": 1, "x": 0, "y": 2 },
{ "w": 1, "x": 1, "y": 2 },
{ "w": 1, "x": 2, "y": 2 },
{ "w": 1, "x": 3, "y": 2 },
{ "w": 1, "x": 4, "y": 2 },
{ "w": 1, "x": 5, "y": 2 },
{ "w": 1, "x": 6, "y": 2 },
{ "w": 1, "x": 7, "y": 2 },
{ "w": 1, "x": 0, "y": 3 },
{ "w": 1, "x": 1, "y": 3 },
{ "w": 1, "x": 2, "y": 3 },
{ "w": 1, "x": 3, "y": 3 },
{ "w": 1, "x": 4, "y": 3 },
{ "w": 1, "x": 5, "y": 3 },
{ "w": 1, "x": 6, "y": 3 },
{ "w": 1, "x": 7, "y": 3 } ]
},
"LAYOUT_ortho_4x12": {
"key_count": 48,
"layout": [
{ "w": 1, "x": 0, "y": 0 },
{ "w": 1, "x": 1, "y": 0 },
{ "w": 1, "x": 2, "y": 0 },
{ "w": 1, "x": 3, "y": 0 },
{ "w": 1, "x": 4, "y": 0 },
{ "w": 1, "x": 5, "y": 0 },
{ "w": 1, "x": 6, "y": 0 },
{ "w": 1, "x": 7, "y": 0 },
{ "w": 1, "x": 8, "y": 0 },
{ "w": 1, "x": 9, "y": 0 },
{ "w": 1, "x": 10, "y": 0 },
{ "w": 1, "x": 11, "y": 0 },
{ "w": 1, "x": 0, "y": 1 },
{ "w": 1, "x": 1, "y": 1 },
{ "w": 1, "x": 2, "y": 1 },
{ "w": 1, "x": 3, "y": 1 },
{ "w": 1, "x": 4, "y": 1 },
{ "w": 1, "x": 5, "y": 1 },
{ "w": 1, "x": 6, "y": 1 },
{ "w": 1, "x": 7, "y": 1 },
{ "w": 1, "x": 8, "y": 1 },
{ "w": 1, "x": 9, "y": 1 },
{ "w": 1, "x": 10, "y": 1 },
{ "w": 1, "x": 11, "y": 1 },
{ "w": 1, "x": 0, "y": 2 },
{ "w": 1, "x": 1, "y": 2 },
{ "w": 1, "x": 2, "y": 2 },
{ "w": 1, "x": 3, "y": 2 },
{ "w": 1, "x": 4, "y": 2 },
{ "w": 1, "x": 5, "y": 2 },
{ "w": 1, "x": 6, "y": 2 },
{ "w": 1, "x": 7, "y": 2 },
{ "w": 1, "x": 8, "y": 2 },
{ "w": 1, "x": 9, "y": 2 },
{ "w": 1, "x": 10, "y": 2 },
{ "w": 1, "x": 11, "y": 2 },
{ "w": 1, "x": 0, "y": 3 },
{ "w": 1, "x": 1, "y": 3 },
{ "w": 1, "x": 2, "y": 3 },
{ "w": 1, "x": 3, "y": 3 },
{ "w": 1, "x": 4, "y": 3 },
{ "w": 1, "x": 5, "y": 3 },
{ "w": 1, "x": 6, "y": 3 },
{ "w": 1, "x": 7, "y": 3 },
{ "w": 1, "x": 8, "y": 3 },
{ "w": 1, "x": 9, "y": 3 },
{ "w": 1, "x": 10, "y": 3 },
{ "w": 1, "x": 11, "y": 3 } ]
}
}
}
@@ -0,0 +1,23 @@
/* Copyright 2018
*
* 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
// place overrides here
#define DEFAULT_LAYER_SONGS { SONG(QWERTY_SOUND), \
SONG(COLEMAK_SOUND), \
SONG(DVORAK_SOUND) \
}
@@ -0,0 +1,159 @@
#include QMK_KEYBOARD_H
// Each layer gets a name for readability, which is then used in the keymap matrix below.
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
// Layer names don't all need to be of the same length, obviously, and you can also skip them
// entirely and just use numbers.
#define _QWERTY 0
#define _COLEMAK 1
#define _DVORAK 2
#define _LOWER 3
#define _RAISE 4
#define _ADJUST 16
enum custom_keycodes {
QWERTY = SAFE_RANGE,
COLEMAK,
DVORAK,
};
#define LOWER MO(_LOWER)
#define RAISE MO(_RAISE)
#define ADJUST MO(_ADJUST)
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Qwerty
* ,-----------------------------------------------------------------------------------.
* | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp |
* |------+------+------+------+------+-------------+------+------+------+------+------|
* | Esc | A | S | D | F | G | H | J | K | L | ; | " |
* |------+------+------+------+------+------|------+------+------+------+------+------|
* | Shift| Z | X | C | V | B | N | M | , | . | / |Enter |
* |------+------+------+------+------+------+------+------+------+------+------+------|
* |Adjust| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right |
* `-----------------------------------------------------------------------------------'
*/
[_QWERTY] = LAYOUT_ortho_4x12(
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, \
KC_ESC, 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_ENT , \
ADJUST, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \
),
/* Colemak
* ,-----------------------------------------------------------------------------------.
* | Tab | Q | W | F | P | G | J | L | U | Y | ; | Bksp |
* |------+------+------+------+------+-------------+------+------+------+------+------|
* | Esc | A | R | S | T | D | H | N | E | I | O | ' |
* |------+------+------+------+------+------|------+------+------+------+------+------|
* | Shift| Z | X | C | V | B | K | M | , | . | / |Enter |
* |------+------+------+------+------+------+------+------+------+------+------+------|
* |Adjust| Ctrl | Alt | GUI |Lower |Space |Space |Raise | Left | Down | Up |Right |
* `-----------------------------------------------------------------------------------'
*/
[_COLEMAK] = LAYOUT_ortho_4x12( \
KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC, \
KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, \
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT , \
ADJUST, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \
),
/* Dvorak
* ,-----------------------------------------------------------------------------------.
* | Tab | ' | , | . | P | Y | F | G | C | R | L | Bksp |
* |------+------+------+------+------+-------------+------+------+------+------+------|
* | Esc | A | O | E | U | I | D | H | T | N | S | / |
* |------+------+------+------+------+------|------+------+------+------+------+------|
* | Shift| ; | Q | J | K | X | B | M | W | V | Z |Enter |
* |------+------+------+------+------+------+------+------+------+------+------+------|
* |Adjust| Ctrl | Alt | GUI |Lower |Space |Space |Raise | Left | Down | Up |Right |
* `-----------------------------------------------------------------------------------'
*/
[_DVORAK] = LAYOUT_ortho_4x12( \
KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC, \
KC_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_SLSH, \
KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_ENT , \
ADJUST, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \
),
/* Lower
* ,-----------------------------------------------------------------------------------.
* | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Del |
* |------+------+------+------+------+-------------+------+------+------+------+------|
* | Del | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | |
* |------+------+------+------+------+------|------+------+------+------+------+------|
* | | F7 | F8 | F9 | F10 | F11 | F12 |ISO ~ |ISO | | | | |
* |------+------+------+------+------+------+------+------+------+------+------+------|
* | | | | | | | | Next | Vol- | Vol+ | Play |
* `-----------------------------------------------------------------------------------'
*/
[_LOWER] = LAYOUT_ortho_4x12( \
KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL, \
KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, \
_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,S(KC_NUHS),S(KC_NUBS),_______, _______, _______, \
_______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \
),
/* Raise
* ,-----------------------------------------------------------------------------------.
* | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Del |
* |------+------+------+------+------+-------------+------+------+------+------+------|
* | Del | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ |
* |------+------+------+------+------+------|------+------+------+------+------+------|
* | | F7 | F8 | F9 | F10 | F11 | F12 |ISO # |ISO / | | | |
* |------+------+------+------+------+------+------+------+------+------+------+------|
* | | | | | | | | Next | Vol- | Vol+ | Play |
* `-----------------------------------------------------------------------------------'
*/
[_RAISE] = LAYOUT_ortho_4x12( \
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL, \
KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, \
_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NUHS, KC_NUBS, _______, _______, _______, \
_______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \
),
/* Adjust (Lower + Raise)
* ,-----------------------------------------------------------------------------------.
* | | Reset| | | | | | | | | | Del |
* |------+------+------+------+------+-------------+------+------+------+------+------|
* | | | |Aud on|Audoff|AGnorm|AGswap|Qwerty|Colemk|Dvorak| | |
* |------+------+------+------+------+------|------+------+------+------+------+------|
* | | | | | | | | | | | | |
* |------+------+------+------+------+------+------+------+------+------+------+------|
* | | | | | | | | | | | |
* `-----------------------------------------------------------------------------------'
*/
[_ADJUST] = LAYOUT_ortho_4x12( \
_______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL, \
_______, _______, _______, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, _______, _______, \
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
)
};
uint32_t layer_state_set_user(uint32_t state) {
return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST);
}
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
switch (keycode) {
case QWERTY:
if (record->event.pressed) {
set_single_persistent_default_layer(_QWERTY);
}
return false;
case COLEMAK:
if (record->event.pressed) {
set_single_persistent_default_layer(_COLEMAK);
}
return false;
case DVORAK:
if (record->event.pressed) {
set_single_persistent_default_layer(_DVORAK);
}
return false;
}
return true;
}
@@ -0,0 +1 @@
# The default keymap
@@ -0,0 +1,21 @@
/* Copyright 2018
*
* 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
// place overrides here
#undef RGBLED_NUM
#define RGBLED_NUM 4
@@ -0,0 +1,41 @@
/* Copyright 2018
*
* 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_ortho_4x4( /* Base */
KC_INT1, KC_INT2, KC_INT3, KC_INT5, \
KC_F13, KC_F14, KC_F15, KC_F16, \
KC_F17, KC_F18, KC_F19, KC_F20, \
KC_F21, KC_F22, KC_F23, KC_F24 \
),
};
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
return true;
}
void matrix_init_user(void) {
}
void matrix_scan_user(void) {
}
void led_set_user(uint8_t usb_led) {
}
@@ -0,0 +1 @@
# The default single board macro keymap for nori
+43
View File
@@ -0,0 +1,43 @@
/* Copyright 2018
*
* 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 "nori.h"
void matrix_init_kb(void) {
// put your keyboard start-up code here
// runs once when the firmware starts up
matrix_init_user();
}
void matrix_scan_kb(void) {
// put your looping keyboard code here
// runs every cycle (a lot)
matrix_scan_user();
}
bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
// put your per-action keyboard code here
// runs for every action, just before processing by the firmware
return process_record_user(keycode, record);
}
void led_set_kb(uint8_t usb_led) {
// put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
led_set_user(usb_led);
}
+69
View File
@@ -0,0 +1,69 @@
/* Copyright 2018
*
* 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"
#define ___ KC_NO
#define LAYOUT_ortho_4x4( \
K00, K01, K02, K03, \
K10, K11, K12, K13, \
K20, K21, K22, K23, \
K30, K31, K32, K33 \
) \
{ \
{ K00, K01, K02, K03, ___, ___, ___, ___, ___, ___, ___, ___ }, \
{ K10, K11, K12, K13, ___, ___, ___, ___, ___, ___, ___, ___ }, \
{ K20, K21, K22, K23, ___, ___, ___, ___, ___, ___, ___, ___ }, \
{ K30, K31, K32, K33, ___, ___, ___, ___, ___, ___, ___, ___ } \
}
#define LAYOUT_ortho_4x8( \
K00, K01, K02, K03, K04, K05, K06, K07, \
K10, K11, K12, K13, K14, K15, K16, K17, \
K20, K21, K22, K23, K24, K25, K26, K27, \
K30, K31, K32, K33, K34, K35, K36, K37\
) \
{ \
{ K00, K01, K02, K03, K04, K05, K06, K07, ___, ___, ___, ___ }, \
{ K10, K11, K12, K13, K14, K15, K16, K17, ___, ___, ___, ___ }, \
{ K20, K21, K22, K23, K24, K25, K26, K27, ___, ___, ___, ___ }, \
{ K30, K31, K32, K33, K34, K35, K35, K37, ___, ___, ___, ___ } \
}
#define LAYOUT_ortho_4x12( \
K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0a, K0b, \
K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1a, K1b, \
K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2a, K2b, \
K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3a, K3b \
) \
{ \
{ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0a, K0b }, \
{ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1a, K1b }, \
{ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2a, K2b }, \
{ K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3a, K3b } \
}
#define LAYOUT_kc_ortho_4x12( \
K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0a, K0b, \
K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1a, K1b, \
K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2a, K2b, \
K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3a, K3b \
) \
{ \
{ KC_##K00, KC_##K01, KC_##K02, KC_##K03, KC_##K04, KC_##K05, KC_##K06, KC_##K07, KC_##K08, KC_##K09, KC_##K0a, KC_##K0b }, \
{ KC_##K10, KC_##K11, KC_##K12, KC_##K13, KC_##K14, KC_##K15, KC_##K16, KC_##K17, KC_##K18, KC_##K19, KC_##K1a, KC_##K1b }, \
{ KC_##K20, KC_##K21, KC_##K22, KC_##K23, KC_##K24, KC_##K25, KC_##K26, KC_##K27, KC_##K28, KC_##K29, KC_##K2a, KC_##K2b }, \
{ KC_##K30, KC_##K31, KC_##K32, KC_##K33, KC_##K34, KC_##K35, KC_##K36, KC_##K37, KC_##K38, KC_##K39, KC_##K3a, KC_##K3b } \
}
+18
View File
@@ -0,0 +1,18 @@
# nori
![nori](https://2.bp.blogspot.com/-UBFz3c1-8hM/W48N0ynt6TI/AAAAAAACSQg/MHLY-DchBBMiiHUeIPVt_4T6x-ntmdjgwCEwYBhgL/s640/a.jpg)
===
A 4x12 matrix using 3 modular 4x4 matrix boards and powered by a Pro Micro.
this one is using a Pro Micro. The Pro Micro has less data pins available so only 3 boards can be connected instead of 4. There are 2 pins left over, I used one (B5) for a backlight circuit like on a Gherkin. The other data pin (B4) is left for possible use with a WS2812B strip.
Keyboard Maintainer: QMK Community
Hardware Supported: nori PCB
Hardware Availability: [nori project on 40% Keyboards](https://www.40percent.club/2018/10/nori.html)
Make example for this keyboard (after setting up your build environment):
make 40percentclub/nori: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).
+82
View File
@@ -0,0 +1,82 @@
# MCU name
MCU = atmega32u4
# Processor frequency.
# This will define a symbol, F_CPU, in all source code files equal to the
# processor frequency in Hz. You can then use this symbol in your source code to
# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
# automatically to create a 32-bit value in your source code.
#
# This will be an integer division of F_USB below, as it is sourced by
# F_USB after it has run through any CPU prescalers. Note that this value
# does not *change* the processor frequency - it should merely be updated to
# reflect the processor speed set externally so that the code can use accurate
# software delays.
F_CPU = 16000000
#
# LUFA specific
#
# Target architecture (see library "Board Types" documentation).
ARCH = AVR8
# Input clock frequency.
# This will define a symbol, F_USB, in all source code files equal to the
# input clock frequency (before any prescaling is performed) in Hz. This value may
# differ from F_CPU if prescaling is used on the latter, and is required as the
# raw input clock is fed directly to the PLL sections of the AVR for high speed
# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
# at the end, this will be done automatically to create a 32-bit value in your
# source code.
#
# If no clock division is performed on the input clock inside the AVR (via the
# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
F_USB = $(F_CPU)
# Interrupt driven control endpoint task(+60)
OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
# Bootloader selection
# Teensy halfkay
# Pro Micro caterina
# Atmel DFU atmel-dfu
# LUFA DFU lufa-dfu
# QMK DFU qmk-dfu
# atmega32a bootloadHID
BOOTLOADER = caterina
# If you don't know the bootloader type, then you can specify the
# Boot Section Size in *bytes* by uncommenting out the OPT_DEFS line
# Teensy halfKay 512
# Teensy++ halfKay 1024
# Atmel DFU loader 4096
# LUFA bootloader 4096
# USBaspLoader 2048
# OPT_DEFS += -DBOOTLOADER_SIZE=4096
# Build Options
# change yes to no to disable
#
BOOTMAGIC_ENABLE = lite # Virtual DIP switch configuration(+1000)
MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
CONSOLE_ENABLE = no # Console for debug(+400)
COMMAND_ENABLE = yes # Commands for debug and configuration
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
NKRO_ENABLE = yes # USB Nkey Rollover
BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality on B7 by default
RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config)
UNICODE_ENABLE = no # Unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
AUDIO_ENABLE = no # Audio output on port C6
FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
HD44780_ENABLE = no # Enable support for HD44780 based LCDs (+400)
LAYOUTS = ortho_4x4 ortho_4x8 ortho_4x12
+1 -1
View File
@@ -2,5 +2,5 @@
"keyboard_name": "IBM 5291", "keyboard_name": "IBM 5291",
"keyboard_folder": "converter/5291", "keyboard_folder": "converter/5291",
"url": "https://deskthority.net/wiki/IBM_Model_F#IBM_5291_Keyboard", "url": "https://deskthority.net/wiki/IBM_Model_F#IBM_5291_Keyboard",
"maintainer": "listofoptions", "maintainer": "listofoptions"
} }
-67
View File
@@ -1,67 +0,0 @@
#ifndef DICHOTEMY_H
#define DICHOTEMY_H
#include "quantum.h"
#include "matrix.h"
#include "backlight.h"
#include <stddef.h>
#define red_led_off PORTF |= (1<<5)
#define red_led_on PORTF &= ~(1<<5)
#define blu_led_off PORTF |= (1<<4)
#define blu_led_on PORTF &= ~(1<<4)
#define grn_led_off PORTD |= (1<<1)
#define grn_led_on PORTD &= ~(1<<1)
#define set_led_off red_led_off; grn_led_off; blu_led_off
#define set_led_red red_led_on; grn_led_off; blu_led_off
#define set_led_blue red_led_off; grn_led_off; blu_led_on
#define set_led_green red_led_off; grn_led_on; blu_led_off
#define set_led_yellow red_led_on; grn_led_on; blu_led_off
#define set_led_magenta red_led_on; grn_led_off; blu_led_on
#define set_led_cyan red_led_off; grn_led_on; blu_led_on
#define set_led_white red_led_on; grn_led_on; blu_led_on
/*
#define LED_B 5
#define LED_R 6
#define LED_G 7
#define all_leds_off PORTF &= ~(1<<LED_B) & ~(1<<LED_R) & ~(1<<LED_G)
#define red_led_on PORTF |= (1<<LED_R)
#define red_led_off PORTF &= ~(1<<LED_R)
#define grn_led_on PORTF |= (1<<LED_G)
#define grn_led_off PORTF &= ~(1<<LED_G)
#define blu_led_on PORTF |= (1<<LED_B)
#define blu_led_off PORTF &= ~(1<<LED_B)
#define set_led_off PORTF &= ~(1<<LED_B) & ~(1<<LED_R) & ~(1<<LED_G)
#define set_led_red PORTF = PORTF & ~(1<<LED_B) & ~(1<<LED_G) | (1<<LED_R)
#define set_led_blue PORTF = PORTF & ~(1<<LED_G) & ~(1<<LED_R) | (1<<LED_B)
#define set_led_green PORTF = PORTF & ~(1<<LED_B) & ~(1<<LED_R) | (1<<LED_G)
#define set_led_yellow PORTF = PORTF & ~(1<<LED_B) | (1<<LED_R) | (1<<LED_G)
#define set_led_magenta PORTF = PORTF & ~(1<<LED_G) | (1<<LED_R) | (1<<LED_B)
#define set_led_cyan PORTF = PORTF & ~(1<<LED_R) | (1<<LED_B) | (1<<LED_G)
#define set_led_white PORTF |= (1<<LED_B) | (1<<LED_R) | (1<<LED_G)
*/
// This a shortcut to help you visually see your layout.
// The first section contains all of the arguements
// The second converts the arguments into a two-dimensional array
#define LAYOUT( \
k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, \
k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B, \
k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, \
k33, k34, k35, k36, k37, k38, \
k43, k44, k45, k46, k47, k48 \
) \
{ \
{ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B }, \
{ k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B }, \
{ k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B }, \
{ KC_NO, KC_NO, KC_NO, k33, k34, k35, k36, k37, k38, KC_NO, KC_NO, KC_NO }, \
{ KC_NO, KC_NO, KC_NO, k43, k44, k45, k46, k47, k48, KC_NO, KC_NO, KC_NO } \
}
#endif
@@ -1,394 +0,0 @@
// this is the style you want to emulate.
// This is the canonical layout file for the Quantum project. If you want to add another keyboard,
#include QMK_KEYBOARD_H
#include "pointing_device.h"
// Each layer gets a name for readability, which is then used in the keymap matrix below.
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
// Layer names don't all need to be of the same length, obviously, and you can also skip them
// entirely and just use numbers.
enum dichotemy_layers
{
_BS,
_SF,
_NM,
_NS,
_MS
};
#define LONGPRESS_COUNT 4
enum dichotemy_keycodes
{
CK_1G = SAFE_RANGE,
CK_BSPE,
CK_QE,
CK_TE, //these 4 CK_XXXX keys are special "alternate long-press" keys controlled with unique timers. Make sure you understand them before you mess with them.
NS_HYPH,
NS_EQU,
NUMKEY,
SFTKEY,
MOUSE,
MS_BTN1,
MS_BTN2
//MS_BTN3
};
// Macro definitions for readability
enum dichotemy_macros
{
VOLU,
VOLD,
ESCM
};
#define LONGPRESS_DELAY 150
#define MAX_TOGGLE_LENGTH 300
#define TAPPING_TOGGLE 1
// Fillers to make layering more clear
#define _______ KC_TRNS
#define XXXXXXX KC_NO
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_BS] = LAYOUT( /* Base layout, nearly qwerty but with modifications because it's not a full keyboard. Obviously. */
CK_TE, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
NUMKEY, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, CK_QE,
SFTKEY, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, MOUSE,
KC_LCTL, KC_LALT, KC_LGUI, KC_RGUI, KC_RALT, KC_RCTL,
KC_LBRC, KC_LPRN, KC_QUOT, KC_SPC, KC_RPRN, KC_RBRC
),
[_SF] = LAYOUT( /* Shifted layout, small changes (because angle brackets have been moved to thumb cluster buttons) */
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, NS_HYPH, KC_UNDS, _______, _______,
_______, _______, _______, _______, _______, _______,
_______, KC_LABK, _______, _______, KC_RABK, _______
),
[_NM] = LAYOUT( /* Number layout, basically the main function layer */
_______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, _______,
_______, CK_1G, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, CK_BSPE,
_______, KC_F11, KC_F12, KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, _______,
_______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______
),
[_NS] = LAYOUT( /* Shifted number/function layout, for per-key control. Only active when shift is held, and number is toggled or held */
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PLUS, NS_EQU, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______
),
[_MS] = LAYOUT( /* Mouse layer, including buttons for clicking. */
_______, _______, _______, _______, _______, _______, KC_VOLU, KC_HOME, KC_PGUP, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, MS_BTN1, MS_BTN2, _______, _______, _______,
_______, _______, _______, _______, _______, _______, KC_VOLD, KC_END, KC_PGDN, _______, _______, _______,
_______, _______, _______, _______, KC_UP, _______,
_______, _______, _______, KC_LEFT, KC_DOWN, KC_RGHT
)
};
const uint16_t PROGMEM fn_actions[] = {
};
static uint16_t special_timers[LONGPRESS_COUNT] = {0xFFFF,0xFFFF,0xFFFF,0xFFFF};
static bool special_key_states[LONGPRESS_COUNT] = {0,0,0,0};
static uint16_t shift_timer;
static uint16_t num_timer;
static uint16_t mouse_timer;
static bool shift_singular_key = false;
static bool number_singular_key = false;
static bool mouse_singular_key = false;
static bool shift_held = false;
static bool shift_suspended = false;
report_mouse_t currentReport = {};
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
//uint8_t layer;
//layer = biton32(layer_state); // get the current layer //Or don't, I didn't use it.
//custom layer handling for tri_layer,
switch (keycode) {
case NUMKEY:
if (record->event.pressed) {
num_timer = timer_read();
number_singular_key = true;
layer_invert(_NM);
} else {
if (timer_elapsed(num_timer) < MAX_TOGGLE_LENGTH && number_singular_key) {
//do nothing, the layer has already been inverted
} else {
layer_invert(_NM);
}
}
update_tri_layer(_NM, _SF, _NS);
return false;
break;
//SHIFT is handled as LSHIFT in the general case - 'toggle' shoudl activate caps, while the layer is only active when shift is held.
case SFTKEY:
if (record->event.pressed) {
shift_held = true;
shift_suspended = false;
shift_timer = timer_read();
shift_singular_key = true;
layer_on(_SF);
register_code(KC_LSFT);
} else {
shift_held = false;
if (timer_elapsed(shift_timer) < MAX_TOGGLE_LENGTH && shift_singular_key) {
//this was basically a toggle, so activate/deactivate caps lock.
SEND_STRING(SS_TAP(X_CAPSLOCK));
}
layer_off(_SF);
unregister_code(KC_LSFT);
}
update_tri_layer(_NM, _SF, _NS);
return false;
break;
//MOUSE layer needs to be handled the same way as NUMKEY, but differently from shift
case MOUSE:
if (record->event.pressed) {
mouse_timer = timer_read();
mouse_singular_key = true;
layer_invert(_MS);
} else {
if (timer_elapsed(mouse_timer) < MAX_TOGGLE_LENGTH && number_singular_key){
//do nothing, it was a toggle (and it's already been toggled)
} else {
layer_invert(_MS);
}
}
return false;
break;
//Custom macros for strange keys with different long-tap behavior
case CK_1G:
if (shift_held && shift_suspended){
register_code(KC_LSFT);
shift_suspended = false;
}
shift_singular_key = false;
number_singular_key = false;
mouse_singular_key = false;
if (record->event.pressed) {
special_timers[CK_1G-SAFE_RANGE] = timer_read();
} else {
if (special_key_states[CK_1G-SAFE_RANGE]){
//key was activated after longpress_delay, need to close those keycodes
special_key_states[CK_1G-SAFE_RANGE] = 0;
unregister_code(KC_GRAVE);
} else {
//key was not activated, return macro activating proper, pre-long-tap key
SEND_STRING(SS_TAP(X_1));
}
special_timers[CK_1G-SAFE_RANGE] = 0xFFFF;
}
break;
case CK_BSPE:
if (shift_held && shift_suspended){
register_code(KC_LSFT);
shift_suspended = false;
}
shift_singular_key = false;
number_singular_key = false;
mouse_singular_key = false;
if (record->event.pressed) {
special_timers[CK_BSPE-SAFE_RANGE] = timer_read();
} else {
if (special_key_states[CK_BSPE-SAFE_RANGE]){
//key was activated after longpress_delay, need to close those keycodes
special_key_states[CK_BSPE-SAFE_RANGE] = 0;
unregister_code(KC_ENTER);
} else {
//key was not activated, return macro activating proper, pre-long-tap key
SEND_STRING(SS_TAP(X_BSLASH));
}
special_timers[CK_BSPE-SAFE_RANGE] = 0xFFFF;
}
break;
case CK_QE:
if (shift_held && shift_suspended){
register_code(KC_LSFT);
shift_suspended = false;
}
shift_singular_key = false;
number_singular_key = false;
mouse_singular_key = false;
if (record->event.pressed) {
special_timers[CK_QE-SAFE_RANGE] = timer_read();
} else {
if (special_key_states[CK_QE-SAFE_RANGE]){
//key was activated after longpress_delay, need to close those keycodes
special_key_states[CK_QE-SAFE_RANGE] = 0;
unregister_code(KC_ENTER);
} else {
//key was not activated, return macro activating proper, pre-long-tap key
SEND_STRING(SS_TAP(X_QUOTE));
}
special_timers[CK_QE-SAFE_RANGE] = 0xFFFF;
}
break;
case CK_TE:
if (shift_held && shift_suspended){
register_code(KC_LSFT);
shift_suspended = false;
}
if (record->event.pressed) {
special_timers[CK_TE-SAFE_RANGE] = timer_read();
} else {
if (special_key_states[CK_TE-SAFE_RANGE]){
//key was activated after longpress_delay, need to close those keycodes
special_key_states[CK_TE-SAFE_RANGE] = 0;
unregister_code(KC_ENTER);
} else {
//key was not activated, return macro activating proper, pre-long-tap key
SEND_STRING(SS_TAP(X_TAB));
}
special_timers[CK_TE-SAFE_RANGE] = 0xFFFF;
}
break;
//No-shift keys, they unregister the KC_LSFT code so they can send
//unshifted values - but they don't change the bool. if any other
//key is pressed and the bool is set, KC_LSFT is registered again.
case NS_HYPH:
if (record->event.pressed) {
shift_suspended = true;
unregister_code(KC_LSFT);
register_code(KC_MINS);
} else {
unregister_code(KC_MINS);
if (shift_held && shift_suspended){
register_code(KC_LSFT);
shift_suspended = false;
}
}
break;
case NS_EQU:
if (record->event.pressed) {
shift_suspended = true;
unregister_code(KC_LSFT);
register_code(KC_EQUAL);
} else {
unregister_code(KC_EQUAL);
if (shift_held && shift_suspended){
register_code(KC_LSFT);
shift_suspended = false;
}
}
break;
//mouse buttons, for 1-3, to update the mouse report:
case MS_BTN1:
currentReport = pointing_device_get_report();
if (record->event.pressed) {
if (shift_held && shift_suspended){
register_code(KC_LSFT);
shift_suspended = false;
}
//update mouse report here
currentReport.buttons |= MOUSE_BTN1; //MOUSE_BTN1 is a const defined in report.h
} else {
//update mouse report here
currentReport.buttons &= ~MOUSE_BTN1;
}
pointing_device_set_report(currentReport);
break;
case MS_BTN2:
currentReport = pointing_device_get_report();
if (record->event.pressed) {
if (shift_held && shift_suspended){
register_code(KC_LSFT);
shift_suspended = false;
}
//update mouse report here
currentReport.buttons |= MOUSE_BTN2; //MOUSE_BTN2 is a const defined in report.h
} else {
//update mouse report here
}
pointing_device_set_report(currentReport);
break;
//there is a case for button 3, but that's handled in dichotemy.c, and this is being
//disabled to avoid any conflict.
/*case MS_BTN3:
currentReport = pointing_device_get_report();
if (record->event.pressed) {
if (shift_held && shift_suspended){
register_code(KC_LSFT);
shift_suspended = false;
}
//update mouse report here
currentReport.buttons |= MOUSE_BTN3; //MOUSE_BTN2 is a const defined in report.h
} else {
//update mouse report here
}
pointing_device_set_report(currentReport);
break;*/
//If any other key was pressed during the layer mod hold period,
//then the layer mod was used momentarily, and should block latching
//Additionally, if NS_ keys are in use, then shift may be held (but is
//disabled for the unshifted keycodes to be send. Check the bool and
//register shift as necessary.
default:
if (shift_held){
register_code(KC_LSFT);
}
shift_singular_key = false;
number_singular_key = false;
mouse_singular_key = false;
break;
}
return true;
};
void matrix_scan_user(void) {
uint8_t layer = biton32(layer_state);
for (uint8_t i = 0; i<LONGPRESS_COUNT; i++){
if (timer_elapsed(special_timers[i]) >= LONGPRESS_DELAY && !special_key_states[i]){
switch (i + SAFE_RANGE){
case CK_1G:
register_code(KC_GRAVE);
break;
case CK_BSPE:
register_code(KC_ENTER);
break;
case CK_QE:
register_code(KC_ENTER);
break;
case CK_TE:
register_code(KC_ESCAPE);
break;
}
special_key_states[i] = 1;
}
}
switch (layer) {
case _BS:
set_led_off;
break;
case _NM:
set_led_blue;
break;
case _SF:
set_led_red;
break;
case _NS:
set_led_green;
break;
default:
break;
}
};
+4 -4
View File
@@ -24,10 +24,10 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define VENDOR_ID 0xFEED #define VENDOR_ID 0xFEED
#define PRODUCT_ID 0xACC7 #define PRODUCT_ID 0xACC7
#define DEVICE_VER 0x0001 #define DEVICE_VER 0x0002
#define MANUFACTURER unknown #define MANUFACTURER Broekhuijsen
#define PRODUCT Dichotemy #define PRODUCT Dichotomy
#define DESCRIPTION q.m.k. keyboard firmware for Dichotemy #define DESCRIPTION q.m.k. keyboard firmware for Dichotomy
/* key matrix size */ /* key matrix size */
#define MATRIX_ROWS 5 #define MATRIX_ROWS 5
+15 -12
View File
@@ -1,13 +1,11 @@
#include "dichotemy.h" #include "dichotomy.h"
#include "pointing_device.h"
#include "report.h"
void uart_init(void) { void uart_init(void) {
SERIAL_UART_INIT(); SERIAL_UART_INIT();
} }
void pointing_device_task(void){ void pointing_device_task(void){
report_mouse_t currentReport = {}; /*report_mouse_t currentReport = {};
SERIAL_UART_INIT(); SERIAL_UART_INIT();
uint32_t timeout = 0; uint32_t timeout = 0;
@@ -25,28 +23,31 @@ void pointing_device_task(void){
while(!SERIAL_UART_RXD_PRESENT){ while(!SERIAL_UART_RXD_PRESENT){
timeout++; timeout++;
if (timeout > 10000){ if (timeout > 10000){
xprintf("\r\nTIMED OUT");
break; break;
} }
} }
xprintf("\r\nGOT DATA for %d",i);
uart_data[i] = SERIAL_UART_DATA; uart_data[i] = SERIAL_UART_DATA;
} }
//check for the end packet, bits 1-4 are movement and scroll //check for the end packet, bytes 1-4 are movement and scroll
//but bit 5 has bits 0-3 for the scroll button state //but byte 5 has bits 0-3 for the scroll button state
//(1000 if pressed, 0000 if not) and bits 4-7 are always 1 //(1000 if pressed, 0000 if not) and bits 4-7 are always 1
//We can use this to verify the report sent properly. //We can use this to verify the report sent properly.
if (uart_data[4] == 0x0F || uart_data[4] == 0x8F) if (uart_data[4] == 0x0F || uart_data[4] == 0x8F)
{ {
xprintf("\r\nREQUESTED MOUSE, RECEIVED %i, %i, %i, %i, %i",uart_data[0],uart_data[1],uart_data[2],uart_data[3],uart_data[4]);
currentReport = pointing_device_get_report(); currentReport = pointing_device_get_report();
//shifting and transferring the info to the mouse report varaible //shifting and transferring the info to the mouse report varaible
//mouseReport.x = 127 max -127 min //mouseReport.x = 127 max -127 min
currentReport.x = uart_data[0]; currentReport.x = (int8_t) uart_data[0];
//mouseReport.y = 127 max -127 min //mouseReport.y = 127 max -127 min
currentReport.y = uart_data[1]; currentReport.y = (int8_t) uart_data[1];
//mouseReport.v = 127 max -127 min (scroll vertical) //mouseReport.v = 127 max -127 min (scroll vertical)
currentReport.v = uart_data[2]; currentReport.v = (int8_t) uart_data[2];
//mouseReport.h = 127 max -127 min (scroll horizontal) //mouseReport.h = 127 max -127 min (scroll horizontal)
currentReport.h = uart_data[3]; currentReport.h = (int8_t) uart_data[3];
//mouseReport.buttons = 0x31 max (bitmask for mouse buttons 1-5) 0x00 min //mouseReport.buttons = 0x31 max (bitmask for mouse buttons 1-5) 0x00 min
//mouse buttons 1 and 2 are handled by the keymap, but not 3 //mouse buttons 1 and 2 are handled by the keymap, but not 3
if (uart_data[4] == 0x0F) { //then 3 is not pressed if (uart_data[4] == 0x0F) { //then 3 is not pressed
@@ -55,7 +56,9 @@ void pointing_device_task(void){
currentReport.buttons |= MOUSE_BTN3; currentReport.buttons |= MOUSE_BTN3;
} }
pointing_device_set_report(currentReport); pointing_device_set_report(currentReport);
} } else {
xprintf("\r\nRequested packet, data 4 was %d",uart_data[4]);
}*/
pointing_device_send(); pointing_device_send();
} }
+46
View File
@@ -0,0 +1,46 @@
#ifndef DICHOTOMY_H
#define DICHOTOMY_H
#include QMK_KEYBOARD_H
#include "report.h"
#include "pointing_device.h"
#include "quantum.h"
#include "matrix.h"
#include "backlight.h"
#include <stddef.h>
#define red_led_off() PORTF |= (1<<6)
#define red_led_on() PORTF &= ~(1<<6)
#define blu_led_off() PORTF |= (1<<5)
#define blu_led_on() PORTF &= ~(1<<5)
#define grn_led_off() PORTD |= (1<<1)
#define grn_led_on() PORTD &= ~(1<<1)
#define set_led_off() red_led_off(); grn_led_off(); blu_led_off()
#define set_led_red() red_led_on(); grn_led_off(); blu_led_off()
#define set_led_blue() red_led_off(); grn_led_off(); blu_led_on()
#define set_led_green() red_led_off(); grn_led_on(); blu_led_off()
#define set_led_yellow() red_led_on(); grn_led_on(); blu_led_off()
#define set_led_magenta() red_led_on(); grn_led_off(); blu_led_on()
#define set_led_cyan() red_led_off(); grn_led_on(); blu_led_on()
#define set_led_white() red_led_on(); grn_led_on(); blu_led_on()
// This a shortcut to help you visually see your layout.
// The first section contains all of the arguements
// The second converts the arguments into a two-dimensional array
#define LAYOUT( \
k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, \
k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B, \
k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, \
k33, k34, k35, k36, k37, k38, \
k42, k43, k44, k45, k46, k47, k48, k49 \
) \
{ \
{ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B }, \
{ k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B }, \
{ k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B }, \
{ KC_NO, KC_NO, KC_NO, k33, k34, k35, k36, k37, k38, KC_NO, KC_NO, KC_NO }, \
{ KC_NO, KC_NO, k42, k43, k44, k45, k46, k47, k48, k49, KC_NO, KC_NO } \
}
#endif
@@ -1,5 +1,5 @@
{ {
"keyboard_name": "Dichotemy", "keyboard_name": "Dichotomy",
"url": "", "url": "",
"maintainer": "qmk", "maintainer": "qmk",
"width": 13, "width": 13,
+506
View File
@@ -0,0 +1,506 @@
// this is the style you want to emulate.
// This is the canonical layout file for the Quantum project. If you want to add another keyboard,
#include "dichotomy.h"
// Each layer gets a name for readability, which is then used in the keymap matrix below.
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
// Layer names don't all need to be of the same length, obviously, and you can also skip them
// entirely and just use numbers.
enum dichotomy_layers {
_BS,
_SF,
_NM,
_NS,
_MS
};
#define LONGPRESS_COUNT 4
enum dichotomy_keycodes
{
CK_1G = SAFE_RANGE,
CK_BSPE,
CK_QE,
CK_TE, //these 4 CK_XXXX keys are special "alternate long-press" keys controlled with unique timers. Make sure you understand them before you mess with them.
NS_HYPH,
NS_EQU,
NUMKEY,
SFTKEY,
MOUKEY,
MS_BTN1,
MS_BTN2,
MS_BTN3
};
#define CUSTOM_LONGPRESS 150
#define CUSTOM_TOGGLE_TIME 300
#define RED_BRIGHTNESS 3
#define GREEN_BRIGHTNESS 2
#define BLUE_BRIGHTNESS 2
// Fillers to make layering more clear
#define _______ KC_TRNS
#define XXXXXXX KC_NO
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_BS] = LAYOUT( /* Base layout, nearly qwerty but with modifications because it's not a full keyboard. Obviously. */
CK_TE, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
NUMKEY, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, CK_QE,
SFTKEY, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, MOUKEY,
KC_LCTL, KC_LALT, KC_LGUI, KC_RGUI, KC_RALT, KC_RCTL,
MS_BTN3, KC_LBRC, KC_LPRN, KC_SPC, KC_SPC, KC_RPRN, KC_RBRC, MS_BTN3
),
[_SF] = LAYOUT( /* Shifted layout, small changes (because angle brackets have been moved to thumb cluster buttons) */
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, NS_HYPH, KC_UNDS, _______, _______,
_______, _______, _______, _______, _______, _______,
_______, _______, KC_LABK, _______, _______, KC_RABK, _______, _______
),
[_NM] = LAYOUT( /* Number layout, basically the main function layer */
_______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, _______,
_______, CK_1G, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, CK_BSPE,
_______, KC_F11, KC_F12, KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, _______,
_______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______
),
[_NS] = LAYOUT( /* Shifted number/function layout, for per-key control. Only active when shift is held, and number is toggled or held */
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PLUS, NS_EQU, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______
),
[_MS] = LAYOUT( /* Mouse layer, including buttons for clicking. */
_______, _______, _______, _______, _______, _______, KC_VOLU, KC_HOME, KC_PGUP, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, MS_BTN1, MS_BTN2, _______, _______, _______,
_______, _______, _______, _______, _______, _______, KC_VOLD, KC_END, KC_PGDN, _______, _______, _______,
_______, _______, _______, _______, KC_UP, _______,
_______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_RGHT, _______
)
};
const uint16_t PROGMEM fn_actions[] = {
};
static uint16_t special_timers[LONGPRESS_COUNT] = {0xFFFF,0xFFFF,0xFFFF,0xFFFF};
static bool special_key_states[LONGPRESS_COUNT] = {0,0,0,0};
static bool special_key_pressed[LONGPRESS_COUNT] = {0,0,0,0};
static uint16_t shift_timer;
static uint16_t num_timer;
static uint16_t mouse_timer;
static uint8_t red_timer;
static uint8_t green_timer;
static uint8_t blue_timer;
static bool shift_singular_key = false;
static bool number_singular_key = false;
static bool mouse_singular_key = false;
static bool capsLED = false;
static bool shiftLED = false;
static bool numLED = false;
static bool mouseLED = false;
static bool shift_held = false;
static bool shift_suspended = false;
report_mouse_t currentReport = {};
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
//uint8_t layer;
//layer = biton32(layer_state); // get the current layer //Or don't, I didn't use it.
bool returnVal = true; //this is to determine if more key processing is needed.
//custom layer handling for tri_layer,
switch (keycode) {
case NUMKEY:
if (record->event.pressed) {
num_timer = timer_read();
number_singular_key = true;
layer_invert(_NM);
numLED = !numLED;
} else {
if (timer_elapsed(num_timer) < CUSTOM_TOGGLE_TIME && number_singular_key) {
//do nothing, the layer has already been inverted
} else {
layer_invert(_NM);
numLED = !numLED;
}
}
update_tri_layer(_NM, _SF, _NS);
returnVal = false;
break;
//SHIFT is handled as LSHIFT in the general case - 'toggle' shoudl activate caps, while the layer is only active when shift is held.
case SFTKEY:
if (record->event.pressed) {
shift_held = true;
shiftLED = true;
shift_suspended = false;
shift_timer = timer_read();
shift_singular_key = true;
layer_on(_SF);
register_code(KC_LSFT);
} else {
shift_held = false;
shiftLED = false;
if (timer_elapsed(shift_timer) < CUSTOM_TOGGLE_TIME && shift_singular_key) {
//this was basically a toggle, so activate/deactivate caps lock.
SEND_STRING(SS_TAP(X_CAPSLOCK));
capsLED = !capsLED;
}
layer_off(_SF);
unregister_code(KC_LSFT);
}
update_tri_layer(_NM, _SF, _NS);
returnVal = false;
break;
//MOUSE layer needs to be handled the same way as NUMKEY, but differently from shift
case MOUKEY:
if (record->event.pressed) {
mouse_timer = timer_read();
mouse_singular_key = true;
layer_invert(_MS);
mouseLED = !mouseLED;
} else {
if (timer_elapsed(mouse_timer) < CUSTOM_TOGGLE_TIME && mouse_singular_key){
//do nothing, it was a toggle (and it's already been toggled)
} else {
layer_invert(_MS);
mouseLED = !mouseLED;
}
}
returnVal = false;
break;
//Custom macros for strange keys with different long-tap behavior
case CK_1G:
if (shift_held && shift_suspended){
register_code(KC_LSFT);
shift_suspended = false;
}
if (record->event.pressed) {
special_timers[CK_1G-SAFE_RANGE] = timer_read();
special_key_pressed[CK_1G-SAFE_RANGE] = 1;
} else {
if (special_key_states[CK_1G-SAFE_RANGE]){
//key was activated after custom_longpress, need to close those keycodes
special_key_states[CK_1G-SAFE_RANGE] = 0;
unregister_code(KC_GRAVE);
} else {
if (special_key_pressed[CK_1G-SAFE_RANGE]){
//key was not activated, return macro activating proper, pre-long-tap key
SEND_STRING(SS_TAP(X_1));
special_key_pressed[CK_1G-SAFE_RANGE] = 0;
} else {
//the short key was already sent, because another key was pressed.
//Do nothing.
}
}
}
returnVal = false;
break;
case CK_BSPE:
if (shift_held && shift_suspended){
register_code(KC_LSFT);
shift_suspended = false;
}
if (record->event.pressed) {
special_timers[CK_BSPE-SAFE_RANGE] = timer_read();
special_key_pressed[CK_BSPE-SAFE_RANGE] = 1;
} else {
if (special_key_states[CK_BSPE-SAFE_RANGE]){
//key was activated after custom_longpress, need to close those keycodes
special_key_states[CK_BSPE-SAFE_RANGE] = 0;
unregister_code(KC_ENTER);
} else {
if (special_key_pressed[CK_BSPE-SAFE_RANGE]){
//key was not activated, return macro activating proper, pre-long-tap key
SEND_STRING(SS_TAP(X_BSLASH));
special_key_pressed[CK_BSPE-SAFE_RANGE] = 0;
} else {
//the short key was already sent, because another key was pressed.
//Do nothing.
}
}
}
returnVal = false;
break;
case CK_QE:
if (shift_held && shift_suspended){
register_code(KC_LSFT);
shift_suspended = false;
}
if (record->event.pressed) {
special_timers[CK_QE-SAFE_RANGE] = timer_read();
special_key_pressed[CK_QE-SAFE_RANGE] = 1;
} else {
if (special_key_states[CK_QE-SAFE_RANGE]){
//key was activated after custom_longpress, need to close those keycodes
special_key_states[CK_QE-SAFE_RANGE] = 0;
unregister_code(KC_ENTER);
} else {
if (special_key_pressed[CK_QE-SAFE_RANGE]){
//the long-press key was not activated, return macro activating proper, pre-long-tap key
SEND_STRING(SS_TAP(X_QUOTE));
special_key_pressed[CK_QE-SAFE_RANGE] = 0;
} else {
//the short key was already sent, because another key was pressed.
//Do nothing.
}
}
}
returnVal = false;
break;
case CK_TE:
if (shift_held && shift_suspended){
register_code(KC_LSFT);
shift_suspended = false;
}
if (record->event.pressed) {
special_timers[CK_TE-SAFE_RANGE] = timer_read();
special_key_pressed[CK_TE-SAFE_RANGE] = 1;
} else {
if (special_key_states[CK_TE-SAFE_RANGE]){
//key was activated after custom_longpress, need to close those keycodes
special_key_states[CK_TE-SAFE_RANGE] = 0;
unregister_code(KC_ESCAPE);
} else {
if (special_key_pressed[CK_TE-SAFE_RANGE]){
//the long-press key was not activated, return macro activating proper, pre-long-tap key
SEND_STRING(SS_TAP(X_TAB));
special_key_pressed[CK_TE-SAFE_RANGE] = 0;
} else {
//the short key was already sent, because another key was pressed.
//Do nothing.
}
}
}
returnVal = false;
break;
//No-shift keys, they unregister the KC_LSFT code so they can send
//unshifted values - but they don't change the bool. if any other
//key is pressed and the bool is set, KC_LSFT is registered again.
case NS_HYPH:
if (record->event.pressed) {
shift_suspended = true;
unregister_code(KC_LSFT);
register_code(KC_MINS);
} else {
unregister_code(KC_MINS);
if (shift_held && shift_suspended){
register_code(KC_LSFT);
shift_suspended = false;
}
}
returnVal = false;
break;
case NS_EQU:
if (record->event.pressed) {
shift_suspended = true;
unregister_code(KC_LSFT);
register_code(KC_EQUAL);
} else {
unregister_code(KC_EQUAL);
if (shift_held && shift_suspended){
register_code(KC_LSFT);
shift_suspended = false;
}
}
returnVal = false;
break;
//mouse buttons, for 1-3, to update the mouse report:
case MS_BTN1:
currentReport = pointing_device_get_report();
if (record->event.pressed) {
if (shift_held && shift_suspended){
register_code(KC_LSFT);
shift_suspended = false;
}
//update mouse report here
currentReport.buttons |= MOUSE_BTN1; //MOUSE_BTN1 is a const defined in report.h
} else {
//update mouse report here
currentReport.buttons &= ~MOUSE_BTN1;
}
pointing_device_set_report(currentReport);
returnVal = false;
break;
case MS_BTN2:
currentReport = pointing_device_get_report();
if (record->event.pressed) {
if (shift_held && shift_suspended){
register_code(KC_LSFT);
shift_suspended = false;
}
//update mouse report here
currentReport.buttons |= MOUSE_BTN2; //MOUSE_BTN2 is a const defined in report.h
} else {
//update mouse report here
currentReport.buttons &= ~MOUSE_BTN2;
}
pointing_device_set_report(currentReport);
returnVal = false;
break;
case MS_BTN3:
currentReport = pointing_device_get_report();
if (record->event.pressed) {
if (shift_held && shift_suspended){
register_code(KC_LSFT);
shift_suspended = false;
}
//update mouse report here
currentReport.buttons |= MOUSE_BTN3; //MOUSE_BTN3 is a const defined in report.h
} else {
//update mouse report here
currentReport.buttons &= ~MOUSE_BTN3;
}
pointing_device_set_report(currentReport);
returnVal = false;
break;
//Additionally, if NS_ keys are in use, then shift may be held (but is
//disabled for the unshifted keycodes to be send. Check the bool and
//register shift as necessary.
default:
if (shift_held){
register_code(KC_LSFT);
}
break;
}
switch (keycode){
case KC_BSPC:
case KC_NO:
case NUMKEY:
case SFTKEY:
case MOUKEY:
//don't want to reset single key variables
break;
default:
//If any other key was pressed during the layer mod hold period,
//then the layer mod was used momentarily, and should block latching
shift_singular_key = false;
number_singular_key = false;
mouse_singular_key = false;
break;
}
switch (keycode){
case KC_BSPC:
case KC_NO:
case NUMKEY:
case SFTKEY:
case MOUKEY:
case MOUSE_BTN1:
case MOUSE_BTN2:
case MOUSE_BTN3:
case KC_LCTL:
case KC_LALT:
case KC_LGUI:
case KC_RCTL:
case KC_RALT:
case KC_RGUI:
case CK_1G:
case CK_BSPE:
case CK_QE:
case CK_TE:
//Do nothing, don't want to trigger the timer key rollover
break;
default:
//Now we're checking to see if any of the special timer keys are pressed
//if so, we need to activate their short-press features
if (record->event.pressed) {
for (uint8_t i = 0; i<LONGPRESS_COUNT; i++){
if ((!special_key_states[i]) && special_key_pressed[i]){
switch (i + SAFE_RANGE){
case CK_1G:
SEND_STRING(SS_TAP(X_1));
break;
case CK_BSPE:
SEND_STRING(SS_TAP(X_BSLASH));
break;
case CK_QE:
SEND_STRING(SS_TAP(X_QUOTE));
break;
case CK_TE:
SEND_STRING(SS_TAP(X_TAB));
break;
}
special_key_pressed[i] = 0;
}
}
} else {
//do nothing, we don't want to trigger short presses on key releases.
}
break;
}
return returnVal;
};
void matrix_scan_user(void) {
//uint8_t layer = biton32(layer_state);
for (uint8_t i = 0; i<LONGPRESS_COUNT; i++){
if ((timer_elapsed(special_timers[i]) >= CUSTOM_LONGPRESS) && (!special_key_states[i]) && special_key_pressed[i]){
switch (i + SAFE_RANGE){
case CK_1G:
register_code(KC_GRAVE);
break;
case CK_BSPE:
register_code(KC_ENTER);
break;
case CK_QE:
register_code(KC_ENTER);
break;
case CK_TE:
register_code(KC_ESCAPE);
break;
}
special_key_pressed[i] = 0;
special_key_states[i] = 1;
}
}
if (shiftLED || capsLED){
red_timer++;
if (red_timer < RED_BRIGHTNESS){
red_led_on();
} else {
red_timer = 0;
red_led_off();
}
} else {
red_timer = 0;
red_led_off();
}
if (numLED){
green_timer++;
if (green_timer < GREEN_BRIGHTNESS){
grn_led_on();
} else {
green_timer = 0;
grn_led_off();
}
} else {
green_timer = 0;
grn_led_off();
}
if (mouseLED){
blue_timer++;
if (blue_timer < BLUE_BRIGHTNESS){
blu_led_on();
} else {
blue_timer = 0;
blu_led_off();
}
} else {
blue_timer = 0;
blu_led_off();
}
};
+69 -9
View File
@@ -26,6 +26,9 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include "util.h" #include "util.h"
#include "matrix.h" #include "matrix.h"
#include "timer.h" #include "timer.h"
#include "dichotomy.h"
#include "pointing_device.h"
#include "report.h"
#if (MATRIX_COLS <= 8) #if (MATRIX_COLS <= 8)
# define print_matrix_header() print("\nr/c 01234567\n") # define print_matrix_header() print("\nr/c 01234567\n")
@@ -45,11 +48,21 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#endif #endif
#define MAIN_ROWMASK 0xFFF0; #define MAIN_ROWMASK 0xFFF0;
#define LOWER_ROWMASK 0x1F80; #define LOWER_ROWMASK 0x3FC0;
/* matrix state(1:on, 0:off) */ /* matrix state(1:on, 0:off) */
static matrix_row_t matrix[MATRIX_ROWS]; static matrix_row_t matrix[MATRIX_ROWS];
__attribute__ ((weak))
void matrix_init_quantum(void) {
matrix_init_kb();
}
__attribute__ ((weak))
void matrix_scan_quantum(void) {
matrix_scan_kb();
}
__attribute__ ((weak)) __attribute__ ((weak))
void matrix_init_kb(void) { void matrix_init_kb(void) {
matrix_init_user(); matrix_init_user();
@@ -79,13 +92,16 @@ uint8_t matrix_cols(void) {
} }
void matrix_init(void) { void matrix_init(void) {
DDRF |= (1<<6);
DDRF |= (1<<5);
DDRD |= (1<<1);
matrix_init_quantum(); matrix_init_quantum();
} }
uint8_t matrix_scan(void) uint8_t matrix_scan(void)
{ {
SERIAL_UART_INIT(); SERIAL_UART_INIT();
//xprintf("\r\nTRYING TO SCAN");
uint32_t timeout = 0; uint32_t timeout = 0;
@@ -93,25 +109,35 @@ uint8_t matrix_scan(void)
SERIAL_UART_DATA = 's'; SERIAL_UART_DATA = 's';
//trust the external keystates entirely, erase the last data //trust the external keystates entirely, erase the last data
uint8_t uart_data[7] = {0}; uint8_t uart_data[11] = {0};
//there are 10 bytes corresponding to 10 columns, and an end byte //there are 10 bytes corresponding to 10 columns, and an end byte
for (uint8_t i = 0; i < 7; i++) { for (uint8_t i = 0; i < 11; i++) {
//wait for the serial data, timeout if it's been too long //wait for the serial data, timeout if it's been too long
//this only happened in testing with a loose wire, but does no //this only happened in testing with a loose wire, but does no
//harm to leave it in here //harm to leave it in here
while(!SERIAL_UART_RXD_PRESENT){ while(!SERIAL_UART_RXD_PRESENT){
timeout++; timeout++;
if (timeout > 10000){ if (timeout > 10000){
xprintf("\r\nTime out in keyboard.");
break; break;
} }
} }
uart_data[i] = SERIAL_UART_DATA; uart_data[i] = SERIAL_UART_DATA;
} }
//check for the end packet, the key state bytes use the LSBs, so 0xE0 //check for the end packet, the key state bytes use the LSBs, so 0xE0
//will only show up here if the correct bytes were recieved //will only show up here if the correct bytes were recieved
if (uart_data[6] == 0x96) { //this is an arbitrary binary checksum (10010110) uint8_t checksum = 0x00;
for (uint8_t z=0; z<10; z++){
checksum = checksum^uart_data[z];
}
checksum = checksum ^ (uart_data[10] & 0xF0);
// Smash the checksum from 1 byte into 4 bits
checksum = (checksum ^ ((checksum & 0xF0)>>4)) & 0x0F;
//xprintf("\r\nGOT RAW PACKET: \r\n%d\r\n%d\r\n%d\r\n%d\r\n%d\r\n%d\r\n%d\r\n%d\r\n%d\r\n%d\r\n%d\r\n%d",uart_data[0],uart_data[1],uart_data[2],uart_data[3],uart_data[4],uart_data[5],uart_data[6],uart_data[7],uart_data[8],uart_data[9],uart_data[10],checksum);
if ((uart_data[10] & 0x0F) == checksum) { //this is an arbitrary binary checksum (1001) (that would be 0x9.)
//xprintf("\r\nGOT PACKET: \r\n%d\r\n%d\r\n%d\r\n%d\r\n%d\r\n%d",uart_data[0],uart_data[1],uart_data[2],uart_data[3],uart_data[4],uart_data[5]);
//shifting and transferring the keystates to the QMK matrix variable //shifting and transferring the keystates to the QMK matrix variable
//bits 1-12 are row 1, 13-24 are row 2, 25-36 are row 3, //bits 1-12 are row 1, 13-24 are row 2, 25-36 are row 3,
//bits 37-42 are row 4 (only 6 wide, 1-3 are 0, and 10-12 are 0) //bits 37-42 are row 4 (only 6 wide, 1-3 are 0, and 10-12 are 0)
@@ -121,15 +147,49 @@ uint8_t matrix_scan(void)
matrix[1] = ((uint16_t) uart_data[1] << 12) | ((uint16_t) uart_data[2] << 4); matrix[1] = ((uint16_t) uart_data[1] << 12) | ((uint16_t) uart_data[2] << 4);
matrix[2] = (((uint16_t) uart_data[3] << 8) | ((uint16_t) uart_data[4])) & MAIN_ROWMASK; matrix[2] = (((uint16_t) uart_data[3] << 8) | ((uint16_t) uart_data[4])) & MAIN_ROWMASK;
matrix[3] = (((uint16_t) uart_data[4] << 9) | ((uint16_t) uart_data[5] << 1)) & LOWER_ROWMASK; matrix[3] = (((uint16_t) uart_data[4] << 9) | ((uint16_t) uart_data[5] << 1)) & LOWER_ROWMASK;
matrix[4] = ((uint16_t) uart_data[5] << 7) & LOWER_ROWMASK; matrix[4] = (((uint16_t) uart_data[5] << 7) | ((uart_data[10] & 1<<7) ? 1:0) << 13 | ((uart_data[10] & 1<<6) ? 1:0) << 6) & LOWER_ROWMASK;
/* OK, TURNS OUT THAT WAS A BAD ASSUMPTION */ /* OK, TURNS OUT THAT WAS A BAD ASSUMPTION */
for (uint8_t i = 0; i < MATRIX_ROWS; i++) { for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
//I've unpacked these into the mirror image of what QMK expects them to be, so... //I've unpacked these into the mirror image of what QMK expects them to be, so...
matrix[i] = ((matrix[i] * 0x0802LU & 0x22110LU) | (matrix[i] * 0x8020LU & 0x88440LU)) * 0x10101LU >> 16; /*uint8_t halfOne = (matrix[i]>>8);
uint8_t halfTwo = (matrix[i] & 0xFF);
halfOne = ((halfOne * 0x0802LU & 0x22110LU) | (halfOne * 0x8020LU & 0x88440LU)) * 0x10101LU >> 16;
halfTwo = ((halfTwo * 0x0802LU & 0x22110LU) | (halfTwo * 0x8020LU & 0x88440LU)) * 0x10101LU >> 16;
matrix[i] = ((halfTwo<<8) & halfOne);*/
//matrix[i] = ((matrix[i] * 0x0802LU & 0x22110LU) | (matrix[i] * 0x8020LU & 0x88440LU)) * 0x10101LU >> 16;
matrix[i] = bitrev16(matrix[i]);
//bithack mirror! Doesn't make any sense, but works - and efficiently. //bithack mirror! Doesn't make any sense, but works - and efficiently.
} }
} //if (uart_data[6]!=0 || uart_data[7]!=0){
//if (maxCount<101){
// xprintf("\r\nMouse data: x=%d, y=%d",(int8_t)uart_data[6],(int8_t)uart_data[7]);
//}
report_mouse_t currentReport = {};
//check for the end packet, bytes 1-4 are movement and scroll
//but byte 5 has bits 0-3 for the scroll button state
//(1000 if pressed, 0000 if not) and bits 4-7 are always 1
//We can use this to verify the report sent properly.
currentReport = pointing_device_get_report();
//shifting and transferring the info to the mouse report varaible
//mouseReport.x = 127 max -127 min
currentReport.x = (int8_t) uart_data[6];
//mouseReport.y = 127 max -127 min
currentReport.y = (int8_t) uart_data[7];
//mouseReport.v = 127 max -127 min (scroll vertical)
currentReport.v = (int8_t) uart_data[8];
//mouseReport.h = 127 max -127 min (scroll horizontal)
currentReport.h = (int8_t) uart_data[9];
/*
currentReport.x = 0;
currentReport.y = 0;
currentReport.v = 0;
currentReport.h = 0;*/
pointing_device_set_report(currentReport);
} else {
//xprintf("\r\nRequested packet, data 10 was %d but checksum was %d",(uart_data[10] & 0x0F), (checksum & 0x0F));
}
//matrix_print();
matrix_scan_quantum(); matrix_scan_quantum();
return 1; return 1;
+1 -1
View File
@@ -1,4 +1,4 @@
Dichotemy Keyboard Firmware Dichotomy Keyboard Firmware
====================== ======================
These configuration files were based off the Mitosis keyboard. This keyboard uses a completely different 'matrix scan' system to other keyboards, it relies on an external nRF51822 microcontroller maintaining a matrix of keystates received from the keyboard halves - it also receives mouse pointer information from the keyboard halves, which is implemented through a new feature, "Pointing Device". The matrix.c file contains the code to poll the external microcontroller for the key matrix, and the keymap.c file contains similar code to obtain the mouse report. As long as the relavant functions in these files are not changed, all other QMK features are supported. These configuration files were based off the Mitosis keyboard. This keyboard uses a completely different 'matrix scan' system to other keyboards, it relies on an external nRF51822 microcontroller maintaining a matrix of keystates received from the keyboard halves - it also receives mouse pointer information from the keyboard halves, which is implemented through a new feature, "Pointing Device". The matrix.c file contains the code to poll the external microcontroller for the key matrix, and the keymap.c file contains similar code to obtain the mouse report. As long as the relavant functions in these files are not changed, all other QMK features are supported.
+9 -7
View File
@@ -1,6 +1,6 @@
OPT_DEFS += -DDICHOTEMY_PROMICRO OPT_DEFS += -DDICHOTOMY_PROMICRO
DICHOTEMY_UPLOAD_COMMAND = while [ ! -r $(USB) ]; do sleep 1; done; \ DICHOTOMY_UPLOAD_COMMAND = while [ ! -r $(USB) ]; do sleep 1; done; \
avrdude -p $(MCU) -c avr109 -U flash:w:$(TARGET).hex -P $(USB) avrdude -p $(MCU) -c avr109 -U flash:w:$(TARGET).hex -P $(USB)
# # project specific files # # project specific files
@@ -24,6 +24,8 @@ MCU = atmega32u4
# software delays. # software delays.
F_CPU = 16000000 F_CPU = 16000000
#
# LUFA specific # LUFA specific
# #
# Target architecture (see library "Board Types" documentation). # Target architecture (see library "Board Types" documentation).
@@ -43,10 +45,10 @@ ARCH = AVR8
F_USB = $(F_CPU) F_USB = $(F_CPU)
# Bootloader # Bootloader
# This definition is optional, and if your keyboard supports multiple bootloaders of # This definition is optional, and if your keyboard supports multiple bootloaders of
# different sizes, comment this out, and the correct address will be loaded # different sizes, comment this out, and the correct address will be loaded
# automatically (+60). See bootloader.mk for all options. # automatically (+60). See bootloader.mk for all options.
BOOTLOADER = caterina BOOTLOADER = caterina
# Interrupt driven control endpoint task(+60) # Interrupt driven control endpoint task(+60)
OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
@@ -72,4 +74,4 @@ UNICODE_ENABLE = YES # Unicode
USB = /dev/ttyACM0 USB = /dev/ttyACM0
#upload: build #upload: build
# $(DICHOTEMY_UPLOAD_COMMAND) # $(DICHOTOMY_UPLOAD_COMMAND)
+26
View File
@@ -332,5 +332,31 @@
{ k40, k41, KC_NO, k43, k44, KC_NO, k46, KC_NO, k48, KC_NO, k4a, k4b, k4c, k4d, k4e } \ { k40, k41, KC_NO, k43, k44, KC_NO, k46, KC_NO, k48, KC_NO, k4a, k4b, k4c, k4d, k4e } \
} }
/* LAYOUT_60_tsangan_hhkb
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
* │00 │01 │02 │03 │04 │05 │06 │07 │08 │09 │0a │0b │0c │0d │0e │
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤
* │10 │12 │13 │14 │15 │16 │17 │18 │19 │1a │1b │1c │1d │1e │
* ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤
* │20 │22 │23 │24 │25 │26 │27 │28 │29 │2a │2b │2c │2d │
* ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┤
* │30 │32 │33 │34 │35 │36 │37 │38 │39 │3a │3b │3d │3e │
* ├─────┬──┴┬──┴──┬┴───┴───┴───┴───┴───┴───┴──┬┴───┴┬───┬─┴───┤
* │40 │41 │43 │46 (7u) │4b │4d │4e │
* └─────┴───┴─────┴───────────────────────────┴─────┴───┴─────┘
*/
#define LAYOUT_60_tsangan_hhkb( \
k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, k0e, \
k10, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, k1e, \
k20, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d, \
k30, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3d, k3e, \
k40, k41, k43, k46, k4b, k4d, k4e \
) { \
{ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, k0e }, \
{ k10, KC_NO, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, k1e }, \
{ k20, KC_NO, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d, KC_NO }, \
{ k30, KC_NO, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, KC_NO, k3d, k3e }, \
{ k40, k41, KC_NO, k43, KC_NO, KC_NO, k46, KC_NO, KC_NO, KC_NO, KC_NO, k4b, KC_NO, k4d, k4e } \
}
#endif #endif
+4
View File
@@ -52,6 +52,10 @@
"LAYOUT_60_b_iso": { "LAYOUT_60_b_iso": {
"key_count": 67, "key_count": 67,
"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}, {"x":13, "y":0}, {"label":"Back Space", "x":14, "y":0}, {"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":"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":"#", "x":12.75, "y":2}, {"label":"Enter", "x":13.75, "y":1, "w":1.25, "h":2}, {"label":"Shift", "x":0, "y":3, "w":1.25}, {"label":"\\", "x":1.25, "y":3}, {"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":"Shift", "x":11.25, "y":3, "w":1.75}, {"label":"Up", "x":13, "y":3}, {"label":"Del", "x":14, "y":3}, {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"GUI", "x":1.25, "y":4, "w":1.25}, {"label":"Alt", "x":2.5, "y":4, "w":1.25}, {"label":"Space", "x":3.75, "y":4, "w":2.25}, {"label":"Space", "x":6, "y":4, "w":1.25}, {"label":"Space", "x":7.25, "y":4, "w":2.75}, {"label":"AltGr", "x":10, "y":4}, {"label":"Fn", "x":11, "y":4}, {"label":"Left", "x":12, "y":4}, {"label":"Down", "x":13, "y":4}, {"label":"Right", "x":14, "y":4}] "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}, {"x":13, "y":0}, {"label":"Back Space", "x":14, "y":0}, {"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":"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":"#", "x":12.75, "y":2}, {"label":"Enter", "x":13.75, "y":1, "w":1.25, "h":2}, {"label":"Shift", "x":0, "y":3, "w":1.25}, {"label":"\\", "x":1.25, "y":3}, {"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":"Shift", "x":11.25, "y":3, "w":1.75}, {"label":"Up", "x":13, "y":3}, {"label":"Del", "x":14, "y":3}, {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"GUI", "x":1.25, "y":4, "w":1.25}, {"label":"Alt", "x":2.5, "y":4, "w":1.25}, {"label":"Space", "x":3.75, "y":4, "w":2.25}, {"label":"Space", "x":6, "y":4, "w":1.25}, {"label":"Space", "x":7.25, "y":4, "w":2.75}, {"label":"AltGr", "x":10, "y":4}, {"label":"Fn", "x":11, "y":4}, {"label":"Left", "x":12, "y":4}, {"label":"Down", "x":13, "y":4}, {"label":"Right", "x":14, "y":4}]
},
"LAYOUT_60_tsangan_hhkb": {
"key_count": 62,
"layout": [{"label":"Esc", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"|", "x":13, "y":0}, {"label":"~", "x":14, "y":0}, {"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":"Backspace", "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":"Shift", "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":"Shift", "x":12.25, "y":3, "w":1.75}, {"label":"Fn", "x":14, "y":3}, {"label":"Ctrl", "x":0, "y":4, "w":1.5}, {"label":"Win", "x":1.5, "y":4}, {"label":"Alt", "x":2.5, "y":4, "w":1.5}, {"x":4, "y":4, "w":7}, {"label":"Win", "x":11, "y":4, "w":1.5}, {"label":"Menu", "x":12.5, "y":4}, {"label":"Ctrl", "x":13.5, "y":4, "w":1.5}]
} }
} }
} }
+24 -19
View File
@@ -1,25 +1,30 @@
#include QMK_KEYBOARD_H #include QMK_KEYBOARD_H
enum keyboard_layers {
_BL = 0, // Base Layer
_FL // Function Layer
};
// Custom #defined keycodes (shorter macros for readability)
#define KC_CTES CTL_T(KC_ESC)
#define KC_RSUP RSFT_T(KC_UP)
#define KC_FNLT LT(_FL, KC_LEFT)
#define KC_RADN RALT_T(KC_DOWN)
#define KC_RCRT RCTL_T(KC_RIGHT)
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
LAYOUT_60_ansi( [_BL] = LAYOUT_60_ansi(
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_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_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_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,
CTL_T(KC_ESC), 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_CTES, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, RSFT_T(KC_UP), KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSUP,
MO(1), KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, RGUI_T(KC_LEFT), RALT_T(KC_DOWN), LT(2, KC_RIGHT) KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, KC_FNLT, KC_RADN, KC_RCRT
), ),
LAYOUT_60_ansi( [_FL] =LAYOUT_60_ansi(
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_DEL, 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_DEL,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGUP, _______, _______, KC_HOME, KC_UP, KC_END, _______, _______, _______, _______, KC_MUTE, _______, _______, KC_PGDN, KC_PGUP, RESET,
_______, _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, KC_END, KC_PGDN, _______, _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, KC_SLCK, KC_VOLD, KC_VOLU, KC_PAUS, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______ _______, _______, _______, _______, _______, _______, _______, _______
),
LAYOUT_60_ansi(
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET,
_______, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, KC_MUTE, KC_VOLD, KC_VOLU, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_SCROLLLOCK, KC_PAUSE, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______
) )
}; };
@@ -0,0 +1,30 @@
#include QMK_KEYBOARD_H
enum keyboard_layers {
_BL = 0, // Base Layer
_FL // Function Layer
};
// Custom #defined keycodes (shorter macros for readability)
#define KC_CTES CTL_T(KC_ESC)
#define KC_RSUP RSFT_T(KC_UP)
#define KC_RGLT RGUI_T(KC_LEFT)
#define KC_RADN RALT_T(KC_DOWN)
#define KC_RCRT RCTL_T(KC_RIGHT)
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_BL] = LAYOUT_60_tsangan_hhkb(
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_BSLS, KC_ESC,
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_CTES, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSUP, MO(_FL),
KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RGLT, KC_RADN, KC_RCRT
),
[_FL] = LAYOUT_60_tsangan_hhkb(
_______, 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_HOME, KC_UP, KC_END, _______, _______, _______, _______, KC_MUTE, _______, _______, KC_PGDN, KC_PGUP, KC_DEL,
_______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, KC_SLCK, KC_VOLD, KC_VOLU, KC_PAUS, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______
)
};
+56 -59
View File
@@ -33,28 +33,26 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | |ace | End | | PgDn | | | * | |ace | End | | PgDn | | |
* `--------------------' `----------------------' * `--------------------' `----------------------'
*/ */
// If it accepts an argument (i.e, is a function), it doesn't need KC_. [BASE] = LAYOUT_ergodox(
// Otherwise, it needs KC_* // left hand
[BASE] = LAYOUT_ergodox( // layer 0 : default KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, KC_LEFT,
// left hand KC_DELT, KC_Q, KC_W, KC_E, KC_R, KC_T, TG(SYMB),
KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, KC_LEFT, KC_BSPC, KC_A, KC_S, KC_D, KC_F, KC_G,
KC_DELT, KC_Q, KC_W, KC_E, KC_R, KC_T, TG(SYMB), KC_LSFT, CTL_T(KC_Z), KC_X, KC_C, KC_V, KC_B, ALL_T(KC_NO),
KC_BSPC, KC_A, KC_S, KC_D, KC_F, KC_G, LT(SYMB,KC_GRV), KC_QUOT, LALT(KC_LSFT), KC_LEFT, KC_RGHT,
KC_LSFT, CTL_T(KC_Z), KC_X, KC_C, KC_V, KC_B, ALL_T(KC_NO), ALT_T(KC_APP), KC_LGUI,
LT(SYMB,KC_GRV),KC_QUOT, LALT(KC_LSFT), KC_LEFT,KC_RGHT, KC_HOME,
ALT_T(KC_APP), KC_LGUI, KC_SPC, KC_BSPC, KC_END,
KC_HOME, // right hand
KC_SPC,KC_BSPC,KC_END, KC_RGHT, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,
// right hand TG(SYMB), KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS,
KC_RGHT, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_H, KC_J, KC_K, KC_L, LT(MDIA, KC_SCLN), GUI_T(KC_QUOT),
TG(SYMB), KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, MEH_T(KC_NO), KC_N, KC_M, KC_COMM, KC_DOT, CTL_T(KC_SLSH), KC_RSFT,
KC_H, KC_J, KC_K, KC_L, LT(MDIA, KC_SCLN),GUI_T(KC_QUOT), KC_UP, KC_DOWN, KC_LBRC, KC_RBRC, KC_FN1,
MEH_T(KC_NO),KC_N, KC_M, KC_COMM,KC_DOT, CTL_T(KC_SLSH), KC_RSFT, KC_LALT, CTL_T(KC_ESC),
KC_UP, KC_DOWN,KC_LBRC,KC_RBRC, KC_FN1, KC_PGUP,
KC_LALT, CTL_T(KC_ESC), KC_PGDN, KC_TAB, KC_ENT
KC_PGUP, ),
KC_PGDN,KC_TAB, KC_ENT
),
/* Keymap 1: Symbol Layer /* Keymap 1: Symbol Layer
* *
* ,---------------------------------------------------. ,--------------------------------------------------. * ,---------------------------------------------------. ,--------------------------------------------------.
@@ -76,26 +74,25 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | | | | | | * | | | | | | | |
* `--------------------' `--------------------' * `--------------------' `--------------------'
*/ */
// SYMBOLS
[SYMB] = LAYOUT_ergodox( [SYMB] = LAYOUT_ergodox(
// left hand // left hand
VRSN, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS, VRSN, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS,
KC_TRNS,KC_EXLM,KC_AT, KC_LCBR,KC_RCBR,KC_PIPE,KC_TRNS, KC_TRNS, KC_EXLM, KC_AT, KC_LCBR, KC_RCBR, KC_PIPE, KC_TRNS,
KC_TRNS,KC_HASH,KC_DLR, KC_LPRN,KC_RPRN,KC_GRV, KC_TRNS, KC_HASH, KC_DLR, KC_LPRN, KC_RPRN, KC_GRV,
KC_TRNS,KC_PERC,KC_CIRC,KC_LBRC,KC_RBRC,KC_TILD,KC_TRNS, KC_TRNS, KC_PERC, KC_CIRC, KC_LBRC, KC_RBRC, KC_TILD, KC_TRNS,
EPRM,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, EPRM, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
RGB_MOD,KC_TRNS, RGB_MOD, KC_TRNS,
KC_TRNS, KC_TRNS,
RGB_VAD,RGB_VAI,KC_TRNS, RGB_VAD, RGB_VAI, KC_TRNS,
// right hand // right hand
KC_TRNS, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_TRNS, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
KC_TRNS, KC_UP, KC_7, KC_8, KC_9, KC_ASTR, KC_F12, KC_TRNS, KC_UP, KC_7, KC_8, KC_9, KC_ASTR, KC_F12,
KC_DOWN, KC_4, KC_5, KC_6, KC_PLUS, KC_TRNS, KC_DOWN, KC_4, KC_5, KC_6, KC_PLUS, KC_TRNS,
KC_TRNS, KC_AMPR, KC_1, KC_2, KC_3, KC_BSLS, KC_TRNS, KC_TRNS, KC_AMPR, KC_1, KC_2, KC_3, KC_BSLS, KC_TRNS,
KC_TRNS,KC_DOT, KC_0, KC_EQL, KC_TRNS, KC_TRNS, KC_DOT, KC_0, KC_EQL, KC_TRNS,
RGB_TOG, RGB_SLD, RGB_TOG, RGB_SLD,
KC_TRNS, KC_TRNS,
KC_TRNS, RGB_HUD, RGB_HUI KC_TRNS, RGB_HUD, RGB_HUI
), ),
/* Keymap 2: Media and mouse keys /* Keymap 2: Media and mouse keys
* *
@@ -118,25 +115,25 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | | | | | | * | | | | | | | |
* `--------------------' `--------------------' * `--------------------' `--------------------'
*/ */
// MEDIA AND MOUSE
[MDIA] = LAYOUT_ergodox( [MDIA] = LAYOUT_ergodox(
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, // left hand
KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_U, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_U, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_BTN1, KC_BTN2, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_BTN1, KC_BTN2,
KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
// right hand KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, // right hand
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY,
KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_WBAK KC_TRNS,
KC_TRNS, KC_TRNS, KC_WBAK
), ),
}; };
@@ -0,0 +1,2 @@
node_modules/
package-lock.json
@@ -0,0 +1,82 @@
/*
Set any config.h overrides for your specific keymap here.
See config.h options at https://docs.qmk.fm/#/config_options?id=the-configh-file
*/
#pragma once
/* Keyboard Settings */
#undef TAPPING_TERM
#define TAPPING_TERM 150
#undef DEBOUNCE
#define DEBOUNCE 10
#undef IGNORE_MOD_TAP_INTERRUPT
#define IGNORE_MOD_TAP_INTERRUPT
#undef FORCE_NKRO
#define FORCE_NKRO
/* This isn't defined by default, so there is no need to undefine it first. */
#define LEADER_TIMEOUT 500
#define PERMISSIVE_HOLD
#define QMK_KEYS_PER_SCAN 4
// RGB Lights
#undef RGBLIGHT_HUE_STEP
#define RGBLIGHT_HUE_STEP 24
#undef RGBLIGHT_SAT_STEP
#define RGBLIGHT_SAT_STEP 24
#undef RGBLIGHT_VAL_STEP
#define RGBLIGHT_VAL_STEP 24
#undef RGBLIGHT_BRI_STEP
#define RGBLIGHT_BRI_STEP 24
#undef RGBLIGHT_LIMIT_VAL
#define RGBLIGHT_LIMIT_VAL 255
/* This isn't defined by default, so there is no need to undefine it first. */
#define RGBLIGHT_SLEEP
// Mouse
#undef MOUSEKEY_INTERVAL
#define MOUSEKEY_INTERVAL 10
#undef MOUSEKEY_DELAY
#define MOUSEKEY_DELAY 15
#undef MOUSEKEY_MAX_SPEED
#define MOUSEKEY_MAX_SPEED 15
#undef MOUSEKEY_TIME_TO_MAX
#define MOUSEKEY_TIME_TO_MAX 150
#undef MOUSEKEY_WHEEL_MAX_SPEED
#define MOUSEKEY_WHEEL_MAX_SPEED 15
#undef MOUSEKEY_WHEEL_TIME_TO_MAX
#define MOUSEKEY_WHEEL_TIME_TO_MAX 150
/* This is defined only if CONSOLE_ENABLE is set to "yes" */
// #undef NO_DEBUG
// #define NO_DEBUG
// #undef NO_PRINT
// #define NO_PRINT
/* For COMBO only*/
// #define COMBO_COUNT 1
// #define COMBO_TERM 200
/* For tap toggle */
// #define TAPPING_TOGGLE 2
// #define ONESHOT_TAP_TOGGLE 2
// #define ONESHOT_TIMEOUT 300
@@ -0,0 +1 @@
https://i.imgur.com/fKX0Zbs.png
@@ -0,0 +1 @@
https://i.imgur.com/giAc3M9.jpg
@@ -0,0 +1,13 @@
let gulp = require('gulp');
let run = require('gulp-run-command').default;
gulp.task('clean', run('rm -rf ../../../../.build'));
gulp.task('build', ['clean'], run('make -C ../../../../ ergodox_ez:hacker_dvorak', {
ignoreErrors: true
}));
gulp.task('watch', ['build'], () => {
gulp.watch(['keymap.c', 'config.h', 'rules.mk'], ['build']);
});
@@ -0,0 +1,781 @@
#include QMK_KEYBOARD_H
#include "keymap_dvorak.h"
#include "sendstring_dvorak.h"
#include "keymap_plover.h"
#include "keymap_plover_dvorak.h"
#define SCTL(kc) LSFT(LCTL(kc))
// Layers
enum layers {
DVORAK_US = 0,
PLOVER_US,
GAMING_US,
ARROWS_US,
MOUSE_US,
NUMPAD_US,
LAYERS_US,
DVORAK_DV,
PLOVER_DV,
GAMING_DV,
ARROWS_DV,
MOUSE_DV,
NUMPAD_DV,
LAYERS_DV,
MEDIA_FN,
HYPER_FN,
MEH_FN,
MEH_FN_PLUS,
FIRMWARE
};
int CAPS_LOCK = 0;
int NUM_LOCK = 0;
int SCROLL_LOCK = 0;
enum tap_dances {
TD_ESC_CAPS = 0
};
qk_tap_dance_action_t tap_dance_actions[] = {
[TD_ESC_CAPS] = ACTION_TAP_DANCE_DOUBLE(KC_ESC, KC_CLCK)
};
enum custom_keycodes {
PLACEHOLDER = SAFE_RANGE, // can always be here
RGB_GREEN // to set default RGB layer as green once
};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/*
* ,--------------------------------------------------. ,--------------------------------------------------.
* | 0 | 1 | 2 | 3 | 4 | 5 | 6 | | 38 | 39 | 40 | 41 | 42 | 43 | 44 |
* |--------+------+------+------+------+------+------| |------+------+------+------+------+------+--------|
* | 7 | 8 | 9 | 10 | 11 | 12 | 13 | | 45 | 46 | 47 | 48 | 49 | 50 | 51 |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* | 14 | 15 | 16 | 17 | 18 | 19 |------| |------| 52 | 53 | 54 | 55 | 56 | 57 |
* |--------+------+------+------+------+------| 26 | | 58 |------+------+------+------+------+--------|
* | 20 | 21 | 22 | 23 | 24 | 25 | | | | 59 | 60 | 61 | 62 | 63 | 64 |
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
* | 27 | 28 | 29 | 30 | 31 | | 65 | 66 | 67 | 68 | 69 |
* `----------------------------------' `----------------------------------'
* ,-------------. ,-------------.
* | 32 | 33 | | 70 | 71 |
* ,------+------+------| |------+------+------.
* | | | 34 | | 72 | | |
* | 35 | 36 |------| |------| 74 | 75 |
* | | | 37 | | 73 | | |
* `--------------------' `--------------------'
*/
[DVORAK_US] = LAYOUT_ergodox(
// left hand
KC_ESC, KC_LABK, KC_LCBR, KC_LBRC, KC_LPRN, KC_EXLM, KC_AMPR,
KC_TAB, KC_QUOT, SCMD_T(KC_COMM), MEH_T(KC_DOT), ALL_T(KC_P), KC_Y, KC_AT,
KC_EQL, CTL_T(KC_A), SFT_T(KC_O), LT(NUMPAD_US, KC_E), LT(ARROWS_US, KC_U), KC_I,
KC_BSLS, ALGR_T(KC_SCLN), ALT_T(KC_Q), LT(MEDIA_FN, KC_J), GUI_T(KC_K), KC_X, KC_PERC,
MO(MEH_FN), TG(LAYERS_US), KC_CIRC, KC_PLUS, KC_COLN,
// left thumb
KC_LEFT, KC_RGHT,
KC_HOME,
KC_SPC, KC_BSPC, KC_END,
// right hand
KC_PIPE, KC_QUES, KC_RPRN, KC_RBRC, KC_RCBR, KC_RABK, KC_ASTR,
KC_HASH, KC_F, ALL_T(KC_G), MEH_T(KC_C), SCMD_T(KC_R), KC_L, KC_SLSH,
KC_D, LT(MOUSE_US, KC_H), LT(HYPER_FN, KC_T), SFT_T(KC_N), CTL_T(KC_S), KC_MINS,
KC_DLR, KC_B, GUI_T(KC_M), LT(MEDIA_FN, KC_W), ALT_T(KC_V), ALGR_T(KC_Z), KC_GRV,
KC_DQUO, KC_UNDS, KC_TILD, TG(DVORAK_DV), MO(MEH_FN_PLUS),
// right thumb
KC_UP, KC_DOWN,
KC_PGUP,
KC_PGDN, KC_DEL, KC_ENT
),
[PLOVER_US] = LAYOUT_ergodox(
// left hand
XXXXXXX, XXXXXXX, KC_MS_BTN2, KC_MS_UP, KC_MS_BTN1, KC_MS_BTN3, GUI_T(KC_NO),
KC_ESC, KC_MS_BTN4, KC_MS_LEFT, KC_MS_DOWN, KC_MS_RIGHT, KC_MS_BTN5, PV_NUM,
KC_TAB, PV_LS, PV_LT, PV_LP, PV_LH, PV_STAR,
KC_CLCK, PV_LS, PV_LK, PV_LW, PV_LR, PV_STAR, PV_STAR,
MO(MEH_FN), TG(LAYERS_US), PV_NUM, PV_NUM, PV_NUM,
// left thumb
KC_SPACE, KC_BSPACE,
KC_HOME,
PV_A, PV_O, KC_END,
// right hand
KC_MS_ACCEL2, KC_MS_ACCEL1, KC_MS_ACCEL0, KC_UP, KC_APPLICATION, XXXXXXX, KC_MS_WH_UP,
PV_NUM, KC_MS_WH_LEFT, KC_LEFT, KC_DOWN, KC_RIGHT, KC_MS_WH_RIGHT, KC_MS_WH_DOWN,
PV_STAR, PV_RF, PV_RP, PV_RL, PV_RT, PV_RD,
PV_STAR, PV_STAR, PV_RR, PV_RB, PV_RG, PV_RS, PV_RZ,
PV_NUM, PV_NUM, PV_NUM, PV_NUM, MO(MEH_FN_PLUS),
// right thumb
KC_DELETE, KC_ENTER,
KC_PGUP,
KC_PGDOWN, PV_E, PV_U
),
[GAMING_US] = LAYOUT_ergodox(
// left hand
KC_ESCAPE, GUI_T(KC_MINS), KC_I, KC_O, KC_P, ALGR_T(KC_EQL), KC_T,
KC_TAB, KC_LALT, KC_Q, KC_W, KC_E, ALL_T(KC_R), KC_G,
LT(MOUSE_US, KC_GRV), KC_LCTRL, KC_A, KC_S, KC_D, MEH_T(KC_F),
KC_BSLS, KC_LSHIFT, KC_Z, KC_X, KC_C, SCMD_T(KC_V), KC_M,
MO(MEH_FN), TG(LAYERS_US), KC_COMM, KC_DOT, KC_LBRC,
// left thumb
MO(MEDIA_FN), KC_NLCK,
KC_SCLN,
KC_SPACE, KC_ENTER, KC_BSPACE,
// right hand
KC_QUOT, KC_Y, KC_K, KC_U, KC_KP_7, KC_KP_8, KC_KP_9,
KC_MS_WH_UP, KC_H, KC_J, KC_L, KC_KP_4, KC_KP_2, KC_KP_6,
KC_B, KC_MS_UP, KC_N, KC_KP_1, KC_KP_5, KC_KP_3,
KC_MS_WH_DOWN, KC_MS_LEFT, KC_MS_DOWN, KC_MS_RIGHT, KC_UP, KC_KP_0, KC_SLASH,
KC_RBRC, KC_LEFT, KC_DOWN, KC_RIGHT, MO(MEH_FN_PLUS),
// right thumb
KC_MS_BTN5, MO(HYPER_FN),
KC_MS_BTN4,
KC_MS_BTN3, KC_MS_BTN2, KC_MS_BTN1
),
[ARROWS_US] = LAYOUT_ergodox(
// left hand
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
XXXXXXX, SCMD_T(KC_NO), MEH_T(KC_NO), ALL_T(KC_NO), XXXXXXX, XXXXXXX, XXXXXXX,
XXXXXXX, KC_LCTRL, KC_LSHIFT, XXXXXXX, _______, XXXXXXX,
XXXXXXX, KC_RALT, KC_LALT, GUI_T(KC_NO), XXXXXXX, XXXXXXX, XXXXXXX,
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
// left thumb
XXXXXXX, XXXXXXX,
KC_HOME,
KC_SPACE, KC_BSPACE, KC_END,
// right hand
LGUI(KC_X), XXXXXXX, LCTL(KC_X), KC_MS_WH_UP, XXXXXXX, XXXXXXX, XXXXXXX,
LGUI(KC_C), XXXXXXX, LCTL(KC_C), KC_UP, SCTL(KC_C), LCTL(KC_Z), LGUI(KC_Z),
KC_MS_WH_LEFT, KC_LEFT, KC_DOWN, KC_RIGHT, KC_MS_WH_RIGHT, KC_APPLICATION,
LGUI(KC_V), XXXXXXX, LCTL(KC_V), KC_MS_WH_DOWN, SCTL(KC_V), LCTL(KC_Y), SGUI(KC_Z),
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_SLCK,
// right thumb
XXXXXXX, XXXXXXX,
KC_PGUP,
KC_PGDOWN, KC_DELETE, KC_ENTER
),
[MOUSE_US] = LAYOUT_ergodox(
// left hand
XXXXXXX, XXXXXXX, XXXXXXX, KC_MS_WH_UP, LCTL(KC_X), XXXXXXX, LGUI(KC_X),
LGUI(KC_Z), LCTL(KC_Z), SCTL(KC_C), KC_MS_UP, LCTL(KC_C), KC_MS_BTN4, LGUI(KC_C),
KC_MS_BTN3, KC_MS_WH_LEFT, KC_MS_LEFT, KC_MS_DOWN, KC_MS_RIGHT, KC_MS_WH_RIGHT,
LGUI(KC_Z), LCTL(KC_Y), SCTL(KC_V), KC_MS_WH_DOWN, LCTL(KC_V), KC_MS_BTN5, LGUI(KC_V),
KC_SLCK, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
// left thumb
XXXXXXX, XXXXXXX,
XXXXXXX,
KC_MS_BTN1, KC_MS_BTN2, XXXXXXX,
// right hand
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
XXXXXXX, XXXXXXX, XXXXXXX, ALL_T(KC_NO), MEH_T(KC_NO), SCMD_T(KC_NO), XXXXXXX,
XXXXXXX, _______, KC_MS_ACCEL1, KC_LSHIFT, KC_LCTRL, KC_MS_ACCEL2,
XXXXXXX, XXXXXXX, XXXXXXX, GUI_T(KC_NO), KC_LALT, KC_RALT, XXXXXXX,
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
// right thumb
XXXXXXX, XXXXXXX,
XXXXXXX,
XXXXXXX, XXXXXXX, KC_MS_ACCEL0
),
[NUMPAD_US] = LAYOUT_ergodox(
// left hand
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
XXXXXXX, XXXXXXX, GUI_T(KC_NO), XXXXXXX, ALL_T(KC_NO), XXXXXXX, XXXXXXX,
_______, KC_LCTRL, KC_LSHIFT, _______, MEH_T(KC_NO), XXXXXXX,
XXXXXXX, KC_RALT, KC_LALT, XXXXXXX, SCMD_T(KC_NO), XXXXXXX, XXXXXXX,
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
// left thumb
XXXXXXX, XXXXXXX,
KC_HOME,
KC_SPACE, KC_BSPACE, KC_END,
// right hand
KC_X, KC_A, KC_B, KC_C, KC_D, KC_E, KC_F,
KC_O, KC_I, KC_1, KC_2, KC_3, KC_SLSH, KC_PERC,
KC_M, KC_4, KC_5, KC_6, KC_PLUS, KC_MINS,
KC_L, KC_J, KC_7, KC_8, KC_9, KC_ASTR, KC_CIRC,
KC_DOT, KC_0, KC_COMM, KC_UNDS, KC_BSLS,
// right thumb
XXXXXXX, XXXXXXX,
KC_PGUP,
KC_PGDOWN, KC_DELETE, KC_ENTER
),
[LAYERS_US] = LAYOUT_ergodox(
// left hand
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
XXXXXXX, _______, XXXXXXX, XXXXXXX, XXXXXXX,
// left thumb
XXXXXXX, XXXXXXX,
XXXXXXX,
XXXXXXX, XXXXXXX, XXXXXXX,
// right hand
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
XXXXXXX, TO(DVORAK_US), TO(PLOVER_US), TO(GAMING_US), XXXXXXX, XXXXXXX,
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
// right thumb
XXXXXXX, XXXXXXX,
XXXXXXX,
XXXXXXX, XXXXXXX, XXXXXXX
),
[DVORAK_DV] = LAYOUT_ergodox(
// left hand
KC_ESC, DV_LABK, DV_LCBR, DV_LBRC, DV_LPRN, DV_EXLM, DV_AMPR,
KC_TAB, DV_QUOT, SCMD_T(DV_COMM), MEH_T(DV_DOT), ALL_T(DV_P), DV_Y, DV_AT,
DV_EQL, CTL_T(DV_A), SFT_T(DV_O), LT(NUMPAD_DV, DV_E), LT(ARROWS_DV, DV_U), DV_I,
DV_BSLS, ALGR_T(DV_SCLN), ALT_T(DV_Q), LT(MEDIA_FN, DV_J), GUI_T(DV_K), DV_X, DV_PERC,
MO(MEH_FN), TG(LAYERS_DV), DV_CIRC, DV_PLUS, DV_COLN,
// left thumb
KC_LEFT, KC_RGHT,
KC_HOME,
KC_SPC, KC_BSPC, KC_END,
// right hand
DV_PIPE, DV_QUES, DV_RPRN, DV_RBRC, DV_RCBR, DV_RABK, DV_ASTR,
DV_HASH, DV_F, ALL_T(DV_G), MEH_T(DV_C), SCMD_T(DV_R), DV_L, DV_SLSH,
DV_D, LT(MOUSE_DV, DV_H), LT(HYPER_FN, DV_T), SFT_T(DV_N), CTL_T(DV_S), DV_MINS,
DV_DLR, DV_B, GUI_T(DV_M), LT(MEDIA_FN, DV_W), ALT_T(DV_V), ALGR_T(DV_Z), DV_GRV,
DV_DQUO, DV_UNDS, DV_TILD, _______, MO(MEH_FN_PLUS),
// right thumb
KC_UP, KC_DOWN,
KC_PGUP,
KC_PGDN, KC_DEL, KC_ENT
),
[PLOVER_DV] = LAYOUT_ergodox(
// left hand
XXXXXXX, XXXXXXX, KC_MS_BTN2, KC_MS_UP, KC_MS_BTN1, KC_MS_BTN3, GUI_T(KC_NO),
KC_ESC, KC_MS_BTN4, KC_MS_LEFT, KC_MS_DOWN, KC_MS_RIGHT, KC_MS_BTN5, PD_NUM,
KC_TAB, PD_LS, PD_LT, PD_LP, PD_LH, PD_STAR,
KC_CLCK, PD_LS, PD_LK, PD_LW, PD_LR, PD_STAR, PD_STAR,
MO(MEH_FN), TG(LAYERS_DV), PD_NUM, PD_NUM, PD_NUM,
// left thumb
KC_SPACE, KC_BSPACE,
KC_HOME,
PD_A, PD_O, KC_END,
// right hand
KC_MS_ACCEL2, KC_MS_ACCEL1, KC_MS_ACCEL0, KC_UP, KC_APPLICATION, XXXXXXX, KC_MS_WH_UP,
PD_NUM, KC_MS_WH_LEFT, KC_LEFT, KC_DOWN, KC_RIGHT, KC_MS_WH_RIGHT, KC_MS_WH_DOWN,
PD_STAR, PD_RF, PD_RP, PD_RL, PD_RT, PD_RD,
PD_STAR, PD_STAR, PD_RR, PD_RB, PD_RG, PD_RS, PD_RZ,
PD_NUM, PD_NUM, PD_NUM, PD_NUM, MO(MEH_FN_PLUS),
// right thumb
KC_DELETE, KC_ENTER,
KC_PGUP,
KC_PGDOWN, PD_E, PD_U
),
[GAMING_DV] = LAYOUT_ergodox(
// left hand
KC_ESCAPE, GUI_T(DV_MINS), DV_I, DV_O, DV_P, ALGR_T(DV_EQL), DV_T,
KC_TAB, KC_LALT, DV_Q, DV_W, DV_E, ALL_T(DV_R), DV_G,
LT(MOUSE_DV, DV_GRV), KC_LCTRL, DV_A, DV_S, DV_D, MEH_T(DV_F),
DV_BSLS, KC_LSHIFT, DV_Z, DV_X, DV_C, SCMD_T(DV_V), DV_M,
MO(MEH_FN), TG(LAYERS_DV), DV_COMM, DV_DOT, DV_LBRC,
// left thumb
MO(MEDIA_FN), KC_NLCK,
DV_SCLN,
KC_SPACE, KC_ENTER, KC_BSPACE,
// right hand
DV_QUOT, DV_Y, DV_K, DV_U, KC_KP_7, KC_KP_8, KC_KP_9,
KC_MS_WH_UP, DV_H, DV_J, DV_L, KC_KP_4, KC_KP_2, KC_KP_6,
DV_B, KC_MS_UP, DV_N, KC_KP_1, KC_KP_5, KC_KP_3,
KC_MS_WH_DOWN, KC_MS_LEFT, KC_MS_DOWN, KC_MS_RIGHT, KC_UP, KC_KP_0, DV_SLSH,
DV_RBRC, KC_LEFT, KC_DOWN, KC_RIGHT, MO(MEH_FN_PLUS),
// right thumb
KC_MS_BTN5, MO(HYPER_FN),
KC_MS_BTN4,
KC_MS_BTN3, KC_MS_BTN2, KC_MS_BTN1
),
[ARROWS_DV] = LAYOUT_ergodox(
// left hand
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
XXXXXXX, SCMD_T(KC_NO), MEH_T(KC_NO), ALL_T(KC_NO), XXXXXXX, XXXXXXX, XXXXXXX,
XXXXXXX, KC_LCTRL, KC_LSHIFT, XXXXXXX, _______, XXXXXXX,
XXXXXXX, KC_RALT, KC_LALT, GUI_T(KC_NO), XXXXXXX, XXXXXXX, XXXXXXX,
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
// left thumb
XXXXXXX, XXXXXXX,
KC_HOME,
KC_SPACE, KC_BSPACE, KC_END,
// right hand
LGUI(DV_X), XXXXXXX, LCTL(DV_X), KC_MS_WH_UP, XXXXXXX, XXXXXXX, XXXXXXX,
LGUI(DV_C), XXXXXXX, LCTL(DV_C), KC_UP, SCTL(DV_C), LCTL(DV_Z), LGUI(DV_Z),
KC_MS_WH_LEFT, KC_LEFT, KC_DOWN, KC_RIGHT, KC_MS_WH_RIGHT, KC_APPLICATION,
LGUI(DV_V), XXXXXXX, LCTL(DV_V), KC_MS_WH_DOWN, SCTL(DV_V), LCTL(DV_Y), SGUI(DV_Z),
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_SLCK,
// right thumb
XXXXXXX, XXXXXXX,
KC_PGUP,
KC_PGDOWN, KC_DELETE, KC_ENTER
),
[MOUSE_DV] = LAYOUT_ergodox(
// left hand
XXXXXXX, XXXXXXX, XXXXXXX, KC_MS_WH_UP, LCTL(DV_X), XXXXXXX, LGUI(DV_X),
LGUI(DV_Z), LCTL(DV_Z), SCTL(DV_C), KC_MS_UP, LCTL(DV_C), KC_MS_BTN4, LGUI(DV_C),
KC_MS_BTN3, KC_MS_WH_LEFT, KC_MS_LEFT, KC_MS_DOWN, KC_MS_RIGHT, KC_MS_WH_RIGHT,
LGUI(DV_Z), LCTL(DV_Y), SCTL(DV_V), KC_MS_WH_DOWN, LCTL(DV_V), KC_MS_BTN5, LGUI(DV_V),
KC_SLCK, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
// left thumb
XXXXXXX, XXXXXXX,
XXXXXXX,
KC_MS_BTN1, KC_MS_BTN2, XXXXXXX,
// right hand
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
XXXXXXX, XXXXXXX, XXXXXXX, ALL_T(KC_NO), MEH_T(KC_NO), SCMD_T(KC_NO), XXXXXXX,
XXXXXXX, _______, KC_MS_ACCEL1, KC_LSHIFT, KC_LCTRL, KC_MS_ACCEL2,
XXXXXXX, XXXXXXX, XXXXXXX, GUI_T(KC_NO), KC_LALT, KC_RALT, XXXXXXX,
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
// right thumb
XXXXXXX, XXXXXXX,
XXXXXXX,
XXXXXXX, XXXXXXX, KC_MS_ACCEL0
),
[NUMPAD_DV] = LAYOUT_ergodox(
// left hand
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
XXXXXXX, XXXXXXX, GUI_T(KC_NO), XXXXXXX, ALL_T(KC_NO), XXXXXXX, XXXXXXX,
_______, KC_LCTRL, KC_LSHIFT, _______, MEH_T(KC_NO), XXXXXXX,
XXXXXXX, KC_RALT, KC_LALT, XXXXXXX, SCMD_T(KC_NO), XXXXXXX, XXXXXXX,
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
// left thumb
XXXXXXX, XXXXXXX,
KC_HOME,
KC_SPACE, KC_BSPACE, KC_END,
// right hand
DV_X, DV_A, DV_B, DV_C, DV_D, DV_E, DV_F,
DV_O, DV_I, DV_1, DV_2, DV_3, DV_SLSH, DV_PERC,
DV_M, DV_4, DV_5, DV_6, DV_PLUS, DV_MINS,
DV_L, DV_J, DV_7, DV_8, DV_9, DV_ASTR, DV_CIRC,
DV_DOT, DV_0, DV_COMM, DV_UNDS, DV_BSLS,
// right thumb
XXXXXXX, XXXXXXX,
KC_PGUP,
KC_PGDOWN, KC_DELETE, KC_ENTER
),
[LAYERS_DV] = LAYOUT_ergodox(
// left hand
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
XXXXXXX, _______, XXXXXXX, XXXXXXX, XXXXXXX,
// left thumb
XXXXXXX, XXXXXXX,
XXXXXXX,
XXXXXXX, XXXXXXX, XXXXXXX,
// right hand
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
XXXXXXX, TO(DVORAK_DV), TO(PLOVER_DV), TO(GAMING_DV), XXXXXXX, XXXXXXX,
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
// right thumb
XXXXXXX, XXXXXXX,
XXXXXXX,
XXXXXXX, XXXXXXX, XXXXXXX
),
[MEDIA_FN] = LAYOUT_ergodox(
// left hand
KC_AUDIO_VOL_DOWN, KC_AUDIO_MUTE, RGB_TOG, XXXXXXX, KC_MAIL, KC_FIND, KC_WWW_REFRESH,
KC_MEDIA_PREV_TRACK, KC_F9, KC_F7, KC_F5, KC_F3, KC_F1, KC_WWW_HOME,
KC_PAUSE, KC_F19, KC_F17, KC_F15, KC_F13, KC_F11,
RGB_HUD, XXXXXXX, XXXXXXX, _______, KC_F23, KC_F21, KC_WWW_BACK,
RGB_VAD, KC_CLCK, KC_PSCREEN, XXXXXXX, MO(FIRMWARE),
// left thumb
_______, XXXXXXX,
XXXXXXX,
XXXXXXX, XXXXXXX, KC_MEDIA_EJECT,
// right hand
KC_WWW_FAVORITES, KC_MY_COMPUTER, KC_CALCULATOR, XXXXXXX, RGB_MOD, RGB_M_P, KC_AUDIO_VOL_UP,
KC_WWW_SEARCH, KC_F2, KC_F4, KC_F6, KC_F8, KC_F10, KC_MEDIA_NEXT_TRACK,
KC_F12, KC_F14, KC_F16, KC_F18, KC_F20, KC_MEDIA_PLAY_PAUSE,
KC_WWW_FORWARD, KC_F22, KC_F24, _______, XXXXXXX, XXXXXXX, RGB_HUI,
KC_SYSTEM_POWER, XXXXXXX, KC_SYSTEM_SLEEP, KC_SYSTEM_WAKE, RGB_VAI,
// right thumb
XXXXXXX, XXXXXXX,
XXXXXXX,
RGB_GREEN, XXXXXXX, XXXXXXX
),
[HYPER_FN] = LAYOUT_ergodox(
// left hand
XXXXXXX, HYPR(KC_F1), HYPR(KC_F2), HYPR(KC_F3), HYPR(KC_F4), HYPR(KC_F5), XXXXXXX,
XXXXXXX, HYPR(KC_F6), HYPR(KC_F7), HYPR(KC_F8), HYPR(KC_F9), HYPR(KC_F10), XXXXXXX,
XXXXXXX, HYPR(KC_F11), HYPR(KC_F12), HYPR(KC_F13), HYPR(KC_F14), HYPR(KC_F15),
XXXXXXX, HYPR(KC_F16), HYPR(KC_F17), HYPR(KC_F18), HYPR(KC_F19), HYPR(KC_F20), XXXXXXX,
XXXXXXX, HYPR(KC_F21), HYPR(KC_F22), HYPR(KC_F23), HYPR(KC_F24),
// left thumb
XXXXXXX, XXXXXXX,
XXXXXXX,
XXXXXXX, XXXXXXX, XXXXXXX,
// right hand
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
XXXXXXX, XXXXXXX, _______, XXXXXXX, XXXXXXX, XXXXXXX,
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
// right thumb
XXXXXXX, _______,
XXXXXXX,
XXXXXXX, XXXXXXX, XXXXXXX
),
[MEH_FN] = LAYOUT_ergodox(
// left hand
LCA(KC_F11), LCA(KC_F9), LCA(KC_F7), LCA(KC_F5), LCA(KC_F3), LCA(KC_F1), XXXXXXX,
LCAG(KC_F11), LCAG(KC_F9), LCAG(KC_F7), LCAG(KC_F5), LCAG(KC_F3), LCAG(KC_F1), XXXXXXX,
MEH(KC_F11), MEH(KC_F9), MEH(KC_F7), MEH(KC_F5), MEH(KC_F3), MEH(KC_F1),
SGUI(KC_F11), SGUI(KC_F9), SGUI(KC_F7), SGUI(KC_F5), SGUI(KC_F3), SGUI(KC_F1), XXXXXXX,
_______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
// left thumb
XXXXXXX, XXXXXXX,
XXXXXXX,
XXXXXXX, XXXXXXX, XXXXXXX,
// right hand
XXXXXXX, LCA(KC_F2), LCA(KC_F4), LCA(KC_F6), LCA(KC_F8), LCA(KC_F10), LCA(KC_F12),
XXXXXXX, LCAG(KC_F2), LCAG(KC_F4), LCAG(KC_F6), LCAG(KC_F8), LCAG(KC_F10), LCAG(KC_F12),
MEH(KC_F2), MEH(KC_F4), MEH(KC_F6), MEH(KC_F8), MEH(KC_F10), MEH(KC_F12),
XXXXXXX, SGUI(KC_F2), SGUI(KC_F4), SGUI(KC_F6), SGUI(KC_F8), SGUI(KC_F10), SGUI(KC_F12),
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
// right thumb
XXXXXXX, XXXXXXX,
XXXXXXX,
XXXXXXX, XXXXXXX, XXXXXXX
),
[MEH_FN_PLUS] = LAYOUT_ergodox(
// left hand
LCA(KC_F23), LCA(KC_F21), LCA(KC_F19), LCA(KC_F17), LCA(KC_F15), LCA(KC_F13), XXXXXXX,
LCAG(KC_F23), LCAG(KC_F21), LCAG(KC_F19), LCAG(KC_F17), LCAG(KC_F15), LCAG(KC_F13), XXXXXXX,
MEH(KC_F23), MEH(KC_F21), MEH(KC_F19), MEH(KC_F17), MEH(KC_F15), MEH(KC_F13),
SGUI(KC_F23), SGUI(KC_F21), SGUI(KC_F19), SGUI(KC_F17), SGUI(KC_F15), SGUI(KC_F13), XXXXXXX,
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
// left thumb
XXXXXXX, XXXXXXX,
XXXXXXX,
XXXXXXX, XXXXXXX, XXXXXXX,
// right hand
XXXXXXX, LCA(KC_F14), LCA(KC_F16), LCA(KC_F18), LCA(KC_F20), LCA(KC_F22), LCA(KC_F24),
XXXXXXX, LCAG(KC_F14), LCAG(KC_F16), LCAG(KC_F18), LCAG(KC_F20), LCAG(KC_F22), LCAG(KC_F24),
MEH(KC_F14), MEH(KC_F16), MEH(KC_F18), MEH(KC_F20), MEH(KC_F22), MEH(KC_F24),
XXXXXXX, SGUI(KC_F14), SGUI(KC_F16), SGUI(KC_F18), SGUI(KC_F20), SGUI(KC_F22), SGUI(KC_F24),
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______,
// right thumb
XXXXXXX, XXXXXXX,
XXXXXXX,
XXXXXXX, XXXXXXX, XXXXXXX
),
[FIRMWARE] = LAYOUT_ergodox(
// left hand
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______,
// left thumb
XXXXXXX, XXXXXXX,
XXXXXXX,
RESET, XXXXXXX, XXXXXXX,
// right hand
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
// right thumb
XXXXXXX, XXXXXXX,
XXXXXXX,
XXXXXXX, XXXXXXX, EEP_RST
)
};
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
switch (keycode) {
case RGB_GREEN:
if (record->event.pressed) {
#ifdef RGBLIGHT_ENABLE
rgblight_enable();
rgblight_mode(1);
rgblight_sethsv_red();
#endif
}
return false;
case KC_CLCK:
if (record->event.pressed) {
if (!(CAPS_LOCK)) {
ergodox_right_led_1_on();
CAPS_LOCK = 1;
} else {
ergodox_right_led_1_off();
CAPS_LOCK = 0;
}
}
return true;
case KC_NLCK:
if (record->event.pressed) {
if (!(NUM_LOCK)) {
ergodox_right_led_2_on();
NUM_LOCK = 1;
} else {
ergodox_right_led_2_off();
NUM_LOCK = 0;
}
}
return true;
case KC_SLCK:
if (record->event.pressed) {
if (!(SCROLL_LOCK)) {
ergodox_right_led_3_on();
SCROLL_LOCK = 1;
} else {
ergodox_right_led_3_off();
SCROLL_LOCK = 0;
}
}
case KC_MS_WH_LEFT:
if (record->event.pressed) {
if (SCROLL_LOCK) {
return false;
} else {
return true;
}
}
case KC_MS_WH_UP:
if (record->event.pressed) {
if (SCROLL_LOCK) {
return false;
} else {
return true;
}
}
case KC_MS_WH_DOWN:
if (record->event.pressed) {
if (SCROLL_LOCK) {
return false;
} else {
return true;
}
}
case KC_MS_WH_RIGHT:
if (record->event.pressed) {
if (SCROLL_LOCK) {
return false;
} else {
return true;
}
}
default:
return true;
}
}
uint32_t layer_state_set_user(uint32_t state) {
uint8_t layer = biton32(state);
switch (layer) {
case DVORAK_US:
rgblight_sethsv_noeeprom_red();
rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_LIGHT);
break;
case PLOVER_US:
rgblight_sethsv_noeeprom_red();
rgblight_mode_noeeprom(RGBLIGHT_MODE_BREATHING + 3);
break;
case GAMING_US:
rgblight_sethsv_noeeprom_red();
rgblight_mode_noeeprom(RGBLIGHT_MODE_BREATHING + 3);
break;
case ARROWS_US:
rgblight_sethsv_noeeprom_blue();
rgblight_mode_noeeprom(RGBLIGHT_MODE_KNIGHT + 2);
break;
case MOUSE_US:
rgblight_sethsv_noeeprom_blue();
rgblight_mode_noeeprom(RGBLIGHT_MODE_KNIGHT + 2);
break;
case NUMPAD_US:
rgblight_sethsv_noeeprom_blue();
rgblight_mode_noeeprom(RGBLIGHT_MODE_KNIGHT + 2);
break;
case LAYERS_US:
rgblight_sethsv_noeeprom_cyan();
rgblight_mode_noeeprom(RGBLIGHT_MODE_KNIGHT + 2);
break;
case DVORAK_DV:
rgblight_sethsv_noeeprom_green();
rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_LIGHT);
break;
case PLOVER_DV:
rgblight_sethsv_noeeprom_green();
rgblight_mode_noeeprom(RGBLIGHT_MODE_BREATHING + 3);
break;
case GAMING_DV:
rgblight_sethsv_noeeprom_green();
rgblight_mode_noeeprom(RGBLIGHT_MODE_BREATHING + 3);
break;
case ARROWS_DV:
rgblight_sethsv_noeeprom_blue();
rgblight_mode_noeeprom(RGBLIGHT_MODE_KNIGHT + 2);
break;
case MOUSE_DV:
rgblight_sethsv_noeeprom_blue();
rgblight_mode_noeeprom(RGBLIGHT_MODE_KNIGHT + 2);
break;
case NUMPAD_DV:
rgblight_sethsv_noeeprom_blue();
rgblight_mode_noeeprom(RGBLIGHT_MODE_KNIGHT + 2);
break;
case LAYERS_DV:
rgblight_sethsv_noeeprom_cyan();
rgblight_mode_noeeprom(RGBLIGHT_MODE_KNIGHT + 2);
break;
case MEDIA_FN:
rgblight_sethsv_noeeprom_yellow();
rgblight_mode_noeeprom(RGBLIGHT_MODE_KNIGHT + 2);
break;
case HYPER_FN:
rgblight_sethsv_noeeprom_magenta();
rgblight_mode_noeeprom(RGBLIGHT_MODE_KNIGHT + 2);
break;
case MEH_FN:
rgblight_sethsv_noeeprom_magenta();
rgblight_mode_noeeprom(RGBLIGHT_MODE_SNAKE + 4);
break;
case MEH_FN_PLUS:
rgblight_sethsv_noeeprom_magenta();
rgblight_mode_noeeprom(RGBLIGHT_MODE_SNAKE + 5);
break;
case FIRMWARE:
rgblight_sethsv_noeeprom_pink();
rgblight_mode_noeeprom(RGBLIGHT_MODE_KNIGHT + 2);
break;
default:
break;
}
return state;
};
@@ -0,0 +1,15 @@
{
"name": "hacker_dvorak",
"version": "1.0.0",
"description": "Inspired by the [*Programmer Dvorak*](https://www.kaufmann.no/roland/dvorak) keyboard layout, cherry picked ideas from other layouts in the [EZ Repository](https://configure.ergodox-ez.com/search?q=dvorak&legacy=true), a character distribution [heatmap vizualizer](https://run.plnkr.co/plunks/5EEO8nJ2wRzYAfT3), my own subjective use cases and lots of trial and error.",
"main": "gulpfile.js",
"scripts": {
"test": "test"
},
"author": "SalchiPapa",
"license": "GPL-2.0",
"dependencies": {
"gulp": "^3.9.1",
"gulp-run-command": "0.0.9"
}
}
@@ -0,0 +1,62 @@
# [Ergodox EZ Hacker Dvorak Layout](https://configure.ergodox-ez.com/layouts/Wadz/latest/0)
Inspired by the [*Programmer Dvorak*](https://www.kaufmann.no/roland/dvorak) keyboard layout, cherry picked ideas from other layouts in the [EZ Repository](https://configure.ergodox-ez.com/search?q=dvorak&legacy=true), a character distribution [heatmap vizualizer](https://run.plnkr.co/plunks/5EEO8nJ2wRzYAfT3), my own subjective use cases and lots of trial and error.
## Setup
Configure your OS keyboard layout to US, or the keymap will be incorrect.
## Limitations
I plan to use [QMK](https://docs.qmk.fm) in the future, in order to overcome some limitations of the Ergodox EZ [graphical configurator](https://configure.ergodox-ez.com/layouts/default/latest/0)), however I will defer that, until more progress is made to the new [configurator](https://medium.com/the-ergo/the-configurator-is-out-of-beta-e107aec80cae).
## Layers
1. Dvorak
* US Dvorak layout.
* All symbols (including shifted symbols).
* All modifier are dual keys positioned near the home row.
2. Querty
* Used to overcome the limitation pointed above, when your OS layout is set to Dvorak instead of US, this way you can use
Standard Dvorak (available by default on all the main operating systems) on other normal keybdoards and Hacker Dvorak on
the Ergodox EZ Shine at the same time, without changing back and forth tho OS layout.
3. Gaming
* Still in development.
* Left side is mainly "normal" Qwerty.
* Right side is mainly for movement, either using the mouse, the arrow keys, the number pad or the `H`, `J`, `K`, `L` as direction keys.
4. Arrows
* Arrow keys navigation.
* All modifier keys.
* Common text edititng shortcuts (doesn't work for MacOS).
5. Mouse
* Mouse navigation.
* All modifier keys.
* Common text edititng shortcuts (doesn't work for MacOS).
6. Numpad
* ATM style numpad.
* All modifier keys.
* Letters from `A` to `F` for hexadecimal numbers (`B` is also used for binary numeric literals in most programming
languages, ie. `0b11001`).
* `X` for hexadecimal numeric literals in most programming languages, ie. `0xbeef`.
* `O` for octal numeric literals in most programming languages, ie `0o123`.
* `J` for complex numeric literals in Python, ie. `3j`.
* `I` and `M` for complex Julia numeric literals, ie. `3im`.
* Common symbols for mathematical operations.
7. Hyper Fn
* Useful for custom global shortcuts.
8. Media Fn
* Media keys.
* Function keys.
* EZ Shine keys.
9. Meh Fn
* Useful for custom application shortcuts.
10. Meh Fn +
* Useful for custom standard shortcuts.
## To Do
Add images.
***
Please comment below if you have any ideas or suggestions. If you have used this layout or used it as a base, I'd love to hear about your experience!
@@ -0,0 +1,35 @@
# Set any rules.mk overrides for your specific keymap here.
# See rules at https://docs.qmk.fm/#/config_options?id=the-rulesmk-file
NKRO_ENABLE = yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
TAP_DANCE_ENABLE = yes
MOUSEKEY_ENABLE = yes # Mouse keys(+4700b).
EXTRAKEY_ENABLE = yes # Audio control and System control(+450b).
SLEEP_LED_ENABLE = yes # Turn off leds when computer is sleeping.
KEY_LOCK_ENABLE = yes # (+1730b)
RGBLIGHT_ENABLE = yes
LEADER_ENABLE = yes
UNICODE_ENABLE = no # For Unicode.
COMMAND_ENABLE = no # Commands for debug and configuration
SWAP_HANDS_ENABLE = no # Allow swapping hands of keyboard.
# This are by default off:
# CONSOLE_ENABLE = no # Console for debug(+400)
# BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
# API_SYSEX_ENABLE = no
# MIDI_ENABLE = no
# UNICODEMAP_ENABLE = no
# BLUETOOTH_ENABLE = no
# AUDIO_ENABLE = no
# FAUXCLICKY_ENABLE = no
# VARIABLE_TRACE = no
# BACKLIGHT_ENABLE = no
# RGB_MATRIX_ENABLE = no
# COMBO_ENABLE = no
# This don't need argument:
# CUSTOM_MATRIX # Custom matrix file for the ErgoDox EZ
# SPLIT_KEYBOARD
@@ -0,0 +1,59 @@
{
"keyboard_name": "Dactyl Manuform 4x5",
"url": "",
"maintainer": "qmk",
"width": 15,
"height": 7,
"layouts": {
"LAYOUT": {
"layout": [
{"label":"L00", "x":0, "y":0},
{"label":"L01", "x":1, "y":0},
{"label":"L02", "x":2, "y":0},
{"label":"L03", "x":3, "y":0},
{"label":"L04", "x":4, "y":0},
{"label":"R00", "x":10, "y":0},
{"label":"R01", "x":11, "y":0},
{"label":"R02", "x":12, "y":0},
{"label":"R03", "x":13, "y":0},
{"label":"R04", "x":14, "y":0},
{"label":"L10", "x":0, "y":1},
{"label":"L11", "x":1, "y":1},
{"label":"L12", "x":2, "y":1},
{"label":"L13", "x":3, "y":1},
{"label":"L14", "x":4, "y":1},
{"label":"R10", "x":10, "y":1},
{"label":"R11", "x":11, "y":1},
{"label":"R12", "x":12, "y":1},
{"label":"R13", "x":13, "y":1},
{"label":"R14", "x":14, "y":1},
{"label":"L20", "x":0, "y":2},
{"label":"L21", "x":1, "y":2},
{"label":"L22", "x":2, "y":2},
{"label":"L23", "x":3, "y":2},
{"label":"L24", "x":4, "y":2},
{"label":"R20", "x":10, "y":2},
{"label":"R21", "x":11, "y":2},
{"label":"R22", "x":12, "y":2},
{"label":"R23", "x":13, "y":2},
{"label":"R24", "x":14, "y":2},
{"label":"L31", "x":1, "y":3},
{"label":"L32", "x":2, "y":3},
{"label":"R32", "x":12, "y":3},
{"label":"R33", "x":13, "y":3},
{"label":"L33", "x":3, "y":4},
{"label":"L34", "x":4, "y":4},
{"label":"R30", "x":10, "y":4},
{"label":"R31", "x":11, "y":4},
{"label":"L44", "x":5, "y":5},
{"label":"L43", "x":6, "y":5},
{"label":"R41", "x":8, "y":5},
{"label":"R40", "x":9, "y":5},
{"label":"L42", "x":5, "y":6},
{"label":"L41", "x":6, "y":6},
{"label":"R43", "x":8, "y":6},
{"label":"R42", "x":9, "y":6}
]
}
}
}
@@ -0,0 +1,65 @@
{
"keyboard_name": "Dactyl Manuform 4x6",
"url": "",
"maintainer": "qmk",
"width": 17,
"height": 7,
"layouts": {
"LAYOUT": {
"layout": [
{"label":"L00", "x":0, "y":0},
{"label":"L01", "x":1, "y":0},
{"label":"L02", "x":2, "y":0},
{"label":"L03", "x":3, "y":0},
{"label":"L04", "x":4, "y":0},
{"label":"L05", "x":5, "y":0},
{"label":"R00", "x":11, "y":0},
{"label":"R01", "x":12, "y":0},
{"label":"R02", "x":13, "y":0},
{"label":"R03", "x":14, "y":0},
{"label":"R04", "x":15, "y":0},
{"label":"R05", "x":16, "y":0},
{"label":"L10", "x":0, "y":1},
{"label":"L11", "x":1, "y":1},
{"label":"L12", "x":2, "y":1},
{"label":"L13", "x":3, "y":1},
{"label":"L14", "x":4, "y":1},
{"label":"L15", "x":5, "y":1},
{"label":"R10", "x":11, "y":1},
{"label":"R11", "x":12, "y":1},
{"label":"R12", "x":13, "y":1},
{"label":"R13", "x":14, "y":1},
{"label":"R14", "x":15, "y":1},
{"label":"R15", "x":16, "y":1},
{"label":"L20", "x":0, "y":2},
{"label":"L21", "x":1, "y":2},
{"label":"L22", "x":2, "y":2},
{"label":"L23", "x":3, "y":2},
{"label":"L24", "x":4, "y":2},
{"label":"L25", "x":5, "y":2},
{"label":"R20", "x":11, "y":2},
{"label":"R21", "x":12, "y":2},
{"label":"R22", "x":13, "y":2},
{"label":"R23", "x":14, "y":2},
{"label":"R24", "x":15, "y":2},
{"label":"R25", "x":16, "y":2},
{"label":"L32", "x":2, "y":3},
{"label":"L33", "x":3, "y":3},
{"label":"R32", "x":13, "y":3},
{"label":"R33", "x":14, "y":3},
{"label":"L34", "x":4, "y":4},
{"label":"L35", "x":5, "y":4},
{"label":"R30", "x":11, "y":4},
{"label":"R31", "x":12, "y":4},
{"label":"L44", "x":6, "y":5},
{"label":"L45", "x":7, "y":5},
{"label":"R40", "x":9, "y":5},
{"label":"R41", "x":10, "y":5},
{"label":"L42", "x":6, "y":6},
{"label":"L43", "x":7, "y":6},
{"label":"R42", "x":9, "y":6},
{"label":"R43", "x":10, "y":6}
]
}
}
}
@@ -0,0 +1,77 @@
{
"keyboard_name": "Dactyl Manuform 5x6",
"url": "",
"maintainer": "qmk",
"width": 17,
"height": 8,
"layouts": {
"LAYOUT": {
"layout": [
{"label":"L00", "x":0, "y":0},
{"label":"L01", "x":1, "y":0},
{"label":"L02", "x":2, "y":0},
{"label":"L03", "x":3, "y":0},
{"label":"L04", "x":4, "y":0},
{"label":"L05", "x":5, "y":0},
{"label":"R00", "x":11, "y":0},
{"label":"R01", "x":12, "y":0},
{"label":"R02", "x":13, "y":0},
{"label":"R03", "x":14, "y":0},
{"label":"R04", "x":15, "y":0},
{"label":"R05", "x":16, "y":0},
{"label":"L10", "x":0, "y":1},
{"label":"L11", "x":1, "y":1},
{"label":"L12", "x":2, "y":1},
{"label":"L13", "x":3, "y":1},
{"label":"L14", "x":4, "y":1},
{"label":"L15", "x":5, "y":1},
{"label":"R10", "x":11, "y":1},
{"label":"R11", "x":12, "y":1},
{"label":"R12", "x":13, "y":1},
{"label":"R13", "x":14, "y":1},
{"label":"R14", "x":15, "y":1},
{"label":"R15", "x":16, "y":1},
{"label":"L20", "x":0, "y":2},
{"label":"L21", "x":1, "y":2},
{"label":"L22", "x":2, "y":2},
{"label":"L23", "x":3, "y":2},
{"label":"L24", "x":4, "y":2},
{"label":"L25", "x":5, "y":2},
{"label":"R20", "x":11, "y":2},
{"label":"R21", "x":12, "y":2},
{"label":"R22", "x":13, "y":2},
{"label":"R23", "x":14, "y":2},
{"label":"R24", "x":15, "y":2},
{"label":"R25", "x":16, "y":2},
{"label":"L30", "x":0, "y":3},
{"label":"L31", "x":1, "y":3},
{"label":"L32", "x":2, "y":3},
{"label":"L33", "x":3, "y":3},
{"label":"L34", "x":4, "y":3},
{"label":"L35", "x":5, "y":3},
{"label":"R30", "x":11, "y":3},
{"label":"R31", "x":12, "y":3},
{"label":"R32", "x":13, "y":3},
{"label":"R33", "x":14, "y":3},
{"label":"R34", "x":15, "y":3},
{"label":"R35", "x":16, "y":3},
{"label":"L42", "x":2, "y":4},
{"label":"L43", "x":3, "y":4},
{"label":"R42", "x":13, "y":4},
{"label":"R43", "x":14, "y":4},
{"label":"L44", "x":4, "y":5},
{"label":"L45", "x":5, "y":5},
{"label":"R40", "x":11, "y":5},
{"label":"R41", "x":12, "y":5},
{"label":"L54", "x":6, "y":6},
{"label":"L55", "x":7, "y":6},
{"label":"R50", "x":9, "y":6},
{"label":"R51", "x":10, "y":6},
{"label":"L52", "x":6, "y":7},
{"label":"L53", "x":7, "y":7},
{"label":"R52", "x":9, "y":7},
{"label":"R53", "x":10, "y":7}
]
}
}
}
@@ -0,0 +1,87 @@
{
"keyboard_name": "Dactyl Manuform 5x7",
"url": "",
"maintainer": "qmk",
"width": 17,
"height": 16,
"layouts": {
"LAYOUT": {
"layout": [
{"label":"L11", "x":0, "y":0},
{"label":"L12", "x":1, "y":0},
{"label":"L13", "x":2, "y":0},
{"label":"L14", "x":3, "y":0},
{"label":"L15", "x":4, "y":0},
{"label":"L16", "x":5, "y":0},
{"label":"L17", "x":6, "y":0},
{"label":"L21", "x":0, "y":1},
{"label":"L22", "x":1, "y":1},
{"label":"L23", "x":2, "y":1},
{"label":"L24", "x":3, "y":1},
{"label":"L25", "x":4, "y":1},
{"label":"L26", "x":5, "y":1},
{"label":"L27", "x":6, "y":1},
{"label":"L31", "x":0, "y":2},
{"label":"L32", "x":1, "y":2},
{"label":"L33", "x":2, "y":2},
{"label":"L34", "x":3, "y":2},
{"label":"L35", "x":4, "y":2},
{"label":"L36", "x":5, "y":2},
{"label":"L37", "x":6, "y":2},
{"label":"L41", "x":0, "y":3},
{"label":"L42", "x":1, "y":3},
{"label":"L43", "x":2, "y":3},
{"label":"L44", "x":3, "y":3},
{"label":"L45", "x":4, "y":3},
{"label":"L46", "x":5, "y":3},
{"label":"L51", "x":0, "y":4},
{"label":"L52", "x":1, "y":4},
{"label":"L53", "x":2, "y":4},
{"label":"L54", "x":3, "y":4},
{"label":"L55", "x":4, "y":5},
{"label":"L56", "x":5, "y":5},
{"label":"L65", "x":6, "y":6},
{"label":"L66", "x":7, "y":6},
{"label":"L63", "x":6, "y":7},
{"label":"L64", "x":7, "y":7},
{"label":"R11", "x":10, "y":0},
{"label":"R12", "x":11, "y":0},
{"label":"R13", "x":12, "y":0},
{"label":"R14", "x":13, "y":0},
{"label":"R15", "x":14, "y":0},
{"label":"R16", "x":15, "y":0},
{"label":"R17", "x":16, "y":0},
{"label":"R21", "x":10, "y":1},
{"label":"R22", "x":11, "y":1},
{"label":"R23", "x":12, "y":1},
{"label":"R24", "x":13, "y":1},
{"label":"R25", "x":14, "y":1},
{"label":"R26", "x":15, "y":1},
{"label":"R27", "x":16, "y":1},
{"label":"R31", "x":10, "y":2},
{"label":"R32", "x":11, "y":2},
{"label":"R33", "x":12, "y":2},
{"label":"R34", "x":13, "y":2},
{"label":"R35", "x":14, "y":2},
{"label":"R36", "x":15, "y":2},
{"label":"R37", "x":16, "y":2},
{"label":"R42", "x":11, "y":3},
{"label":"R43", "x":12, "y":3},
{"label":"R44", "x":13, "y":3},
{"label":"R45", "x":14, "y":3},
{"label":"R46", "x":15, "y":3},
{"label":"R47", "x":16, "y":3},
{"label":"R54", "x":13, "y":4},
{"label":"R55", "x":14, "y":4},
{"label":"R56", "x":15, "y":4},
{"label":"R57", "x":16, "y":4},
{"label":"R52", "x":11, "y":5},
{"label":"R53", "x":12, "y":5},
{"label":"R62", "x":9, "y":6},
{"label":"R63", "x":10, "y":6},
{"label":"R64", "x":9, "y":7},
{"label":"R65", "x":10, "y":7}
]
}
}
}
@@ -0,0 +1,89 @@
{
"keyboard_name": "Dactyl Manuform 6x6",
"url": "",
"maintainer": "qmk",
"width": 17,
"height": 9,
"layouts": {
"LAYOUT": {
"layout": [
{"label":"L00", "x":0, "y":0},
{"label":"L01", "x":1, "y":0},
{"label":"L02", "x":2, "y":0},
{"label":"L03", "x":3, "y":0},
{"label":"L04", "x":4, "y":0},
{"label":"L05", "x":5, "y":0},
{"label":"R00", "x":11, "y":0},
{"label":"R01", "x":12, "y":0},
{"label":"R02", "x":13, "y":0},
{"label":"R03", "x":14, "y":0},
{"label":"R04", "x":15, "y":0},
{"label":"R05", "x":16, "y":0},
{"label":"L10", "x":0, "y":1},
{"label":"L11", "x":1, "y":1},
{"label":"L12", "x":2, "y":1},
{"label":"L13", "x":3, "y":1},
{"label":"L14", "x":4, "y":1},
{"label":"L15", "x":5, "y":1},
{"label":"R10", "x":11, "y":1},
{"label":"R11", "x":12, "y":1},
{"label":"R12", "x":13, "y":1},
{"label":"R13", "x":14, "y":1},
{"label":"R14", "x":15, "y":1},
{"label":"R15", "x":16, "y":1},
{"label":"L20", "x":0, "y":2},
{"label":"L21", "x":1, "y":2},
{"label":"L22", "x":2, "y":2},
{"label":"L23", "x":3, "y":2},
{"label":"L24", "x":4, "y":2},
{"label":"L25", "x":5, "y":2},
{"label":"R20", "x":11, "y":2},
{"label":"R21", "x":12, "y":2},
{"label":"R22", "x":13, "y":2},
{"label":"R23", "x":14, "y":2},
{"label":"R24", "x":15, "y":2},
{"label":"R25", "x":16, "y":2},
{"label":"L30", "x":0, "y":3},
{"label":"L31", "x":1, "y":3},
{"label":"L32", "x":2, "y":3},
{"label":"L33", "x":3, "y":3},
{"label":"L34", "x":4, "y":3},
{"label":"L35", "x":5, "y":3},
{"label":"R30", "x":11, "y":3},
{"label":"R31", "x":12, "y":3},
{"label":"R32", "x":13, "y":3},
{"label":"R33", "x":14, "y":3},
{"label":"R34", "x":15, "y":3},
{"label":"R35", "x":16, "y":3},
{"label":"L40", "x":0, "y":4},
{"label":"L41", "x":1, "y":4},
{"label":"L42", "x":2, "y":4},
{"label":"L43", "x":3, "y":4},
{"label":"L44", "x":4, "y":4},
{"label":"L45", "x":5, "y":4},
{"label":"R40", "x":11, "y":4},
{"label":"R41", "x":12, "y":4},
{"label":"R42", "x":13, "y":4},
{"label":"R43", "x":14, "y":4},
{"label":"R44", "x":15, "y":4},
{"label":"R45", "x":16, "y":4},
{"label":"L52", "x":2, "y":5},
{"label":"L53", "x":3, "y":5},
{"label":"R52", "x":13, "y":5},
{"label":"R53", "x":14, "y":5},
{"label":"L54", "x":4, "y":6},
{"label":"L55", "x":5, "y":6},
{"label":"R50", "x":11, "y":6},
{"label":"R51", "x":12, "y":6},
{"label":"L64", "x":6, "y":7},
{"label":"L65", "x":7, "y":7},
{"label":"R60", "x":9, "y":7},
{"label":"R61", "x":10, "y":7},
{"label":"L62", "x":6, "y":8},
{"label":"L63", "x":7, "y":8},
{"label":"R62", "x":9, "y":8},
{"label":"R63", "x":10, "y":8}
]
}
}
}
@@ -1,28 +0,0 @@
fivethirteen keyboard firmware
======================
## Quantum MK Firmware
For the full Quantum feature list, see [the parent readme.md](/doc/README.md).
## Building
Download or clone the whole firmware and navigate to the keyboards/handwired/fivethirteen folder.
Once your dev env is setup, you'll be able to type `make` to generate your .hex - you can then use
the Teensy Loader to program your .hex file.
Depending on which keymap you would like to use, you will have to compile slightly differently.
### Default
To build with the default keymap, simply run `make`.
### Other Keymaps
To build the firmware binary hex file with a keymap just do `make` with `keymap` option like:
```
$ make keymap=[default|jack|<name>]
```
Keymaps follow the format **__keymap.c__** and are stored in folders in the `keymaps` folder, eg `keymaps/my_keymap/`
+11 -11
View File
@@ -3,19 +3,19 @@
#include "quantum.h" #include "quantum.h"
#define KEYMAP( \ #define LAYOUT( \
k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k010, k011, k012, \ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k010, k011, k012, \
k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k110, k111, k112, \ k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k110, k111, k112, \
k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k210, k211, k212, \ k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k210, k211, k212, \
k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k310, k311, k312, \ k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k310, k311, k312, \
k40, k41, k42, k43, k44, k46, k47, k48, k49, k410, k411, k412 \ k40, k41, k42, k43, k44, k46, k47, k48, k49, k410, k411, k412 \
) \ ) \
{ \ { \
{ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k010, k011, k012 }, \ { k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k010, k011, k012 }, \
{ k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k110, k111, k112 }, \ { k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k110, k111, k112 }, \
{ k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k210, k211, k212 }, \ { k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k210, k211, k212 }, \
{ k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k310, k311, k312 }, \ { k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k310, k311, k312 }, \
{ k40, k41, k42, k43, k44, KC_NO, k46, k47, k48, k49, k410, k411, k412 } \ { k40, k41, k42, k43, k44, KC_NO, k46, k47, k48, k49, k410, k411, k412 } \
} }
#endif #endif
@@ -0,0 +1,77 @@
{
"keyboard_name": "fivethirteen",
"url": "",
"maintainer": "qmk",
"width": 13,
"height": 5,
"layouts": {
"LAYOUT": {
"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":"Tab", "x":0, "y":1},
{"label":"Q", "x":1, "y":1},
{"label":"W", "x":2, "y":1},
{"label":"E", "x":3, "y":1},
{"label":"R", "x":4, "y":1},
{"label":"T", "x":5, "y":1},
{"label":"Y", "x":6, "y":1},
{"label":"U", "x":7, "y":1},
{"label":"I", "x":8, "y":1},
{"label":"O", "x":9, "y":1},
{"label":"P", "x":10, "y":1},
{"label":"[", "x":11, "y":1},
{"label":"]", "x":12, "y":1},
{"label":"Ctrl/Esc", "x":0, "y":2},
{"label":"A", "x":1, "y":2},
{"label":"S", "x":2, "y":2},
{"label":"D", "x":3, "y":2},
{"label":"F", "x":4, "y":2},
{"label":"G", "x":5, "y":2},
{"label":"H", "x":6, "y":2},
{"label":"J", "x":7, "y":2},
{"label":"K", "x":8, "y":2},
{"label":"L", "x":9, "y":2},
{"label":";", "x":10, "y":2},
{"label":"'", "x":11, "y":2},
{"label":"Enter", "x":12, "y":2},
{"label":"Shift", "x":0, "y":3},
{"label":"Z", "x":1, "y":3},
{"label":"X", "x":2, "y":3},
{"label":"C", "x":3, "y":3},
{"label":"V", "x":4, "y":3},
{"label":"B", "x":5, "y":3},
{"label":"N", "x":6, "y":3},
{"label":"M", "x":7, "y":3},
{"label":",", "x":8, "y":3},
{"label":".", "x":9, "y":3},
{"label":"/", "x":10, "y":3},
{"label":"Up", "x":11, "y":3},
{"label":"\\", "x":12, "y":3},
{"label":"MO(MOS)", "x":0, "y":4},
{"label":"Ctrl", "x":1, "y":4},
{"label":"Alt", "x":2, "y":4},
{"label":"GUI", "x":3, "y":4},
{"label":"MO(HDN)", "x":4, "y":4},
{"label":"Space", "x":5, "y":4, "w":2},
{"label":"Shift/Backspace", "x":7, "y":4},
{"label":"MO(OSY)", "x":8, "y":4},
{"label":"MO(HDN)", "x":9, "y":4},
{"label":"Left", "x":10, "y":4},
{"label":"Down", "x":11, "y":4},
{"label":"Right", "x":12, "y":4}
]
}
}
}
@@ -1,6 +1,4 @@
#include "fivethirteen.h" #include QMK_KEYBOARD_H
#define _______ KC_TRNS
#define HDN 1 #define HDN 1
#define OSY 2 #define OSY 2
@@ -9,28 +7,28 @@
#define SFT_BSP SFT_T(KC_BSPC) #define SFT_BSP SFT_T(KC_BSPC)
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = KEYMAP( [0] = LAYOUT(
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_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_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_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, \
CTL_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, \ CTL_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, \
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_UP, KC_BSLS, \ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_UP, KC_BSLS, \
MO(MOS), KC_LCTL, KC_LALT, KC_LGUI, MO(HDN), KC_SPC , SFT_BSP, MO(OSY), MO(HDN), KC_LEFT, KC_DOWN, KC_RGHT \ MO(MOS), KC_LCTL, KC_LALT, KC_LGUI, MO(HDN), KC_SPC , SFT_BSP, MO(OSY), MO(HDN), KC_LEFT, KC_DOWN, KC_RGHT \
), ),
[HDN] = KEYMAP( [HDN] = 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, \ _______, 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_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, _______, _______, \ _______, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, _______, _______, \
_______, KC_TILD, KC_GRV, KC_BSLS, KC_PIPE, KC_MINS, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_TILD, KC_GRV, _______, \ _______, KC_TILD, KC_GRV, KC_BSLS, KC_PIPE, KC_MINS, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_TILD, KC_GRV, _______, \
_______, _______, _______, _______, _______, _______, _______, KC_ENT, _______, _______, _______, KC_PGUP, _______, \ _______, _______, _______, _______, _______, _______, _______, KC_ENT, _______, _______, _______, KC_PGUP, _______, \
_______, _______, _______, _______, _______, KC_UNDS , KC_DEL, _______, _______, KC_HOME, KC_PGDN, KC_END \ _______, _______, _______, _______, _______, KC_UNDS , KC_DEL, _______, _______, KC_HOME, KC_PGDN, KC_END \
), ),
[OSY] = KEYMAP( [OSY] = LAYOUT(
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
_______, KC_VOLD, KC_VOLU, KC_MUTE, KC_PWR, _______, _______, _______, _______, _______, _______, _______, _______, \ _______, KC_VOLD, KC_VOLU, KC_MUTE, KC_PWR, _______, _______, _______, _______, _______, _______, _______, _______, \
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
), ),
[MOS] = KEYMAP( [MOS] = LAYOUT(
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
_______, _______, _______, _______, _______, _______, _______, KC_BTN1, KC_BTN2, _______, _______, _______, _______, \ _______, _______, _______, _______, _______, _______, _______, KC_BTN1, KC_BTN2, _______, _______, _______, _______, \
_______, _______, _______, _______, _______, _______, KC_MS_L, KC_MS_D, KC_MS_U, KC_MS_R, _______, _______, _______, \ _______, _______, _______, _______, _______, _______, KC_MS_L, KC_MS_D, KC_MS_U, KC_MS_R, _______, _______, _______, \
@@ -38,12 +36,3 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
) )
}; };
const uint16_t PROGMEM fn_actions[] = {
};
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
return MACRO_NONE;
};
@@ -0,0 +1,12 @@
# fivethirteen
A handwired 5x13 ortholinear keyboard with a 2U space bar.
Keyboard Maintainer: [The QMK Community](https://github.com/qmk)
Hardware Supported: fivethirteen handwired
Make example for this keyboard (after setting up your build environment):
make handwired/fivethirteen: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).
+1 -1
View File
@@ -77,7 +77,7 @@ inline void frenchdev_led_all_set(uint8_t n)
frenchdev_led_3_set(n); frenchdev_led_3_set(n);
} }
#define KEYMAP( \ #define LAYOUT( \
\ \
k01, k02, k03, k04, k05, k06, k09, k0a, k0b, k0c, k0d, k0e, \ k01, k02, k03, k04, k05, k06, k09, k0a, k0b, k0c, k0d, k0e, \
k10, k11, k12, k13, k14, k15, k16, k19, k1a, k1b, k1c, k1d, k1e, k1f, \ k10, k11, k12, k13, k14, k15, k16, k19, k1a, k1b, k1c, k1d, k1e, k1f, \
+114
View File
@@ -0,0 +1,114 @@
{
"keyboard_name": "",
"url": "",
"maintainer": "qmk",
"bootloader": "",
"width": 20,
"height": 8,
"layouts": {
"LAYOUT": {
"layout": [
{"label":"F1", "x":1, "y":0.9},
{"label":"F2", "x":2, "y":0.3},
{"label":"F3", "x":3, "y":0},
{"label":"F4", "x":4, "y":0.4},
{"label":"F5", "x":5, "y":0.5},
{"label":"F6", "x":6, "y":0.5},
{"label":"F7", "x":13, "y":0.5},
{"label":"F8", "x":14, "y":0.5},
{"label":"F9", "x":15, "y":0.4},
{"label":"F10", "x":16, "y":0},
{"label":"F11", "x":17, "y":0.3},
{"label":"F12", "x":18, "y":0.9},
{"label":"Esc", "x":0, "y":1.9},
{"label":"\"", "x":1, "y":1.9},
{"label":"\u00ab", "x":2, "y":1.3},
{"label":"\u00bb", "x":3, "y":1},
{"label":"(", "x":4, "y":1.4},
{"label":")", "x":5, "y":1.5},
{"label":"\u00a8", "x":6, "y":1.5},
{"label":"^", "x":13, "y":1.5},
{"label":"@", "x":14, "y":1.5},
{"label":"+", "x":15, "y":1.4},
{"label":"-", "x":16, "y":1},
{"label":"/", "x":17, "y":1.3},
{"label":"*", "x":18, "y":1.9},
{"label":"Backspace", "x":19, "y":1.9},
{"label":"Tab", "x":0, "y":2.9},
{"label":"B", "x":1, "y":2.9},
{"label":"&Eacute;", "x":2, "y":2.3},
{"label":"P", "x":3, "y":2},
{"label":"O", "x":4, "y":2.4},
{"label":"&Egrave;", "x":5, "y":2.5},
{"label":"_", "x":6, "y":2.5},
{"label":"=", "x":13, "y":2.5},
{"label":"K", "x":14, "y":2.5},
{"label":"V", "x":15, "y":2.4},
{"label":"D", "x":16, "y":2},
{"label":"L", "x":17, "y":2.3},
{"label":"J", "x":18, "y":2.9},
{"label":"Enter", "x":19, "y":2.9},
{"label":"`", "x":0, "y":3.9},
{"label":"A", "x":1, "y":3.9},
{"label":"U", "x":2, "y":3.3},
{"label":"E", "x":3, "y":3},
{"label":"I", "x":4, "y":3.4},
{"label":"F", "x":5, "y":3.5},
{"label":";", "x":6, "y":3.5},
{"label":"!", "x":13, "y":3.5},
{"label":"C", "x":14, "y":3.5},
{"label":"T", "x":15, "y":3.4},
{"label":"S", "x":16, "y":3},
{"label":"R", "x":17, "y":3.3},
{"label":"N", "x":18, "y":3.9},
{"label":"'", "x":19, "y":3.9},
{"label":"Shift", "x":0, "y":4.9},
{"label":"Z", "x":1, "y":4.9},
{"label":"&Agrave;", "x":2, "y":4.3},
{"label":"Y", "x":3, "y":4},
{"label":"X", "x":4, "y":4.4},
{"label":"]", "x":5, "y":4.5},
{"label":"Shift/Space", "x":6.5, "y":5},
{"label":"Ctrl/Backspace", "x":7.5, "y":5},
{"label":"Layer 2/Insert", "x":8.5, "y":5},
{"label":"Layer 2 Lock", "x":10.5, "y":5},
{"label":"Ctrl/Delete", "x":11.5, "y":5},
{"label":"Shift/Space", "x":12.5, "y":5},
{"label":"M", "x":14, "y":4.5},
{"label":"G", "x":15, "y":4.4},
{"label":"Up", "x":16, "y":4},
{"label":"H", "x":17, "y":4.3},
{"label":"Q", "x":18, "y":4.9},
{"label":"Shift", "x":19, "y":4.9},
{"label":"Ctrl", "x":0, "y":5.9},
{"label":"GUI", "x":1, "y":5.9},
{"label":"Keypad /", "x":2, "y":5.3},
{"label":".", "x":3, "y":5},
{"label":",", "x":4, "y":5.4},
{"label":"Space", "x":5, "y":5.5},
{"label":"Layer 1/Space", "x":6.5, "y":6},
{"label":"Alt", "x":7.5, "y":6},
{"label":"Caps Lock", "x":11.5, "y":6},
{"label":"Layer 1/Space", "x":12.5, "y":6},
{"label":"Space", "x":14, "y":5.5},
{"label":"Left", "x":15, "y":5.4},
{"label":"Down", "x":16, "y":5},
{"label":"Right", "x":17, "y":5.3},
{"label":":", "x":18, "y":5.9},
{"label":"Ctrl", "x":19, "y":5.9},
{"label":"Left Pedal 1", "x":2.25, "y":7.5, "w":1.5, "h":2},
{"label":"Left Pedal 2", "x":3.75, "y":7.5, "w":1.5, "h":2},
{"label":"Left Pedal 3", "x":5.25, "y":7.5, "w":1.5, "h":2},
{"label":"Right Pedal 1", "x":13.25, "y":7.5, "w":1.5, "h":2},
{"label":"Right Pedal 2", "x":14.75, "y":7.5, "w":1.5, "h":2},
{"label":"Right Pedal 3", "x":16.25, "y":7.5, "w":1.5, "h":2}
]
}
}
}
@@ -1,8 +1,6 @@
#include "frenchdev.h" #include QMK_KEYBOARD_H
#include "mousekey.h" #include "mousekey.h"
#include "action.h" #include "keymap_bepo.h"
#include "action_layer.h"
#include "keymap_extras/keymap_bepo.h"
// Each layer gets a name for readability, which is then used in the keymap matrix below. // Each layer gets a name for readability, which is then used in the keymap matrix below.
@@ -67,7 +65,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* `-------------/ \-------------/ .. \-------------/ \-------------/ * * `-------------/ \-------------/ .. \-------------/ \-------------/ *
*M(M_LP) *M(M_LP)
*/ */
[_BASE] = KEYMAP( [_BASE] = 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, \ 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_ESC, BP_DQOT, BP_LGIL, BP_RGIL, BP_LPRN, BP_RPRN, BP_DTRM, BP_DCRC, BP_AT, BP_PLUS, BP_MINS, BP_SLSH, BP_ASTR, KC_BSPC, \ KC_ESC, BP_DQOT, BP_LGIL, BP_RGIL, BP_LPRN, BP_RPRN, BP_DTRM, BP_DCRC, BP_AT, BP_PLUS, BP_MINS, BP_SLSH, BP_ASTR, KC_BSPC, \
KC_TAB, BP_B, BP_ECUT, BP_O, BP_P, BP_EGRV, BP_UNDS, BP_EQL, BP_K, BP_V, BP_D, BP_L, BP_J, KC_ENT, \ KC_TAB, BP_B, BP_ECUT, BP_O, BP_P, BP_EGRV, BP_UNDS, BP_EQL, BP_K, BP_V, BP_D, BP_L, BP_J, KC_ENT, \
@@ -99,7 +97,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* `-------------/ \-------------/ .. \-------------/ \-------------/ * * `-------------/ \-------------/ .. \-------------/ \-------------/ *
* *
*/ */
[_SYMBOLS] = KEYMAP( [_SYMBOLS] = LAYOUT(
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
KC_TRNS, BP_DCUR, BP_PARG, BP_SECT, BP_DGRK, KC_TRNS, BP_TILD, BP_DCAR, BP_LEQL, BP_GEQL, BP_PSMS, BP_OBEL, BP_TIMS, KC_TRNS, \ KC_TRNS, BP_DCUR, BP_PARG, BP_SECT, BP_DGRK, KC_TRNS, BP_TILD, BP_DCAR, BP_LEQL, BP_GEQL, BP_PSMS, BP_OBEL, BP_TIMS, KC_TRNS, \
KC_TRNS, BP_BSLS, BP_ASTR, BP_LCBR, BP_RCBR, BP_GRV, KC_TRNS, BP_DIFF, BP_HASH, BP_LBRC, BP_RBRC, BP_PERC, BP_PMIL, KC_TRNS, \ KC_TRNS, BP_BSLS, BP_ASTR, BP_LCBR, BP_RCBR, BP_GRV, KC_TRNS, BP_DIFF, BP_HASH, BP_LBRC, BP_RBRC, BP_PERC, BP_PMIL, KC_TRNS, \
@@ -131,7 +129,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* `-------------/ \-------------/ .. \-------------/ \-------------/ * * `-------------/ \-------------/ .. \-------------/ \-------------/ *
* *
*/ */
[_MEDIA] = KEYMAP( [_MEDIA] = LAYOUT(
RESET, KC_SLCK, KC_PAUS, KC_MUTE, KC_VOLD, KC_VOLU, KC_MUTE, KC_VOLD, KC_VOLU, KC_PSCR, KC_CALC, KC_NLCK, \ RESET, KC_SLCK, KC_PAUS, KC_MUTE, KC_VOLD, KC_VOLU, KC_MUTE, KC_VOLD, KC_VOLU, KC_PSCR, KC_CALC, KC_NLCK, \
KC_TRNS, KC_TRNS, KC_TRNS, KC_MSTP, KC_MPRV, KC_MNXT, KC_MPLY, KC_MPLY, KC_MPRV, KC_MNXT, KC_MSTP, KC_TRNS, KC_PMNS, KC_TRNS, \ KC_TRNS, KC_TRNS, KC_TRNS, KC_MSTP, KC_MPRV, KC_MNXT, KC_MPLY, KC_MPLY, KC_MPRV, KC_MNXT, KC_MSTP, KC_TRNS, KC_PMNS, KC_TRNS, \
KC_TRNS, KC_TRNS, KC_TRNS, KC_WH_U, KC_TRNS, KC_BTN4, KC_BTN5, KC_BTN4, KC_BTN5, KC_KP_7, KC_KP_8, KC_KP_9, KC_PPLS, KC_TRNS, \ KC_TRNS, KC_TRNS, KC_TRNS, KC_WH_U, KC_TRNS, KC_BTN4, KC_BTN5, KC_BTN4, KC_BTN5, KC_KP_7, KC_KP_8, KC_KP_9, KC_PPLS, KC_TRNS, \
@@ -163,7 +161,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* *
*/ */
[_TRNS] = KEYMAP( [_TRNS] = LAYOUT(
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
+8 -8
View File
@@ -6,29 +6,29 @@ Concept based on
with the added possibility to connect up to 6 external switches like pedals, with the added possibility to connect up to 6 external switches like pedals,
and somewhat like the katy, not all keys are on the same level for easier reach. and somewhat like the katy, not all keys are on the same level for easier reach.
###Photos ### Photos
- [default layout](http://i.imgur.com/r2Nvr4p.png) - [default layout](http://i.imgur.com/r2Nvr4p.png)
- [editable layout on keyboard layout editor](http://www.keyboard-layout-editor.com/#/gists/4480e3ab8026eb7c710a7e22203ef4aa) (keys placement is NOT precise on this) - [editable layout on keyboard layout editor](http://www.keyboard-layout-editor.com/#/gists/4480e3ab8026eb7c710a7e22203ef4aa) (keys placement is NOT precise on this)
- [the thing when finished](http://imgur.com/a/6FY8v) - [the thing when finished](http://imgur.com/a/6FY8v)
- [concept and cardboard mockup](http://imgur.com/a/R0vvs) - [concept and cardboard mockup](http://imgur.com/a/R0vvs)
##Build instructions ## Build instructions
docker run --rm -e keymap=default -e keyboard=frenchdev --rm -v D:/Repositories/qmk:/qmk:rw edasque/qmk_firmware docker run --rm -e keymap=default -e keyboard=frenchdev --rm -v D:/Repositories/qmk:/qmk:rw edasque/qmk_firmware
##Laser-cuttable file ## Laser-cuttable file
There is intentionnaly no hole for the TRRS connector, you are supposed to use a drill for it. There is intentionnaly no hole for the TRRS connector, you are supposed to use a drill for it.
This way if you don't want to use the pedals you don't have a useless hole. Plus it's cleaner. This way if you don't want to use the pedals you don't have a useless hole. Plus it's cleaner.
http://qmk.fm/frenchdev/frenchdev_v1_lasercut_template.svg http://qmk.fm/frenchdev/frenchdev_v1_lasercut_template.svg
##Side stickers ## Side stickers
You can find my original file here : http://qmk.fm/frenchdev/example_printable_stickers.svg You can find my original file here : http://qmk.fm/frenchdev/example_printable_stickers.svg
I used it when training but now I use blanks and the layout is different. I used it when training but now I use blanks and the layout is different.
I still uploaded it because I think it can be a good jumpstart for any temporary stickers on the I still uploaded it because I think it can be a good jumpstart for any temporary stickers on the
side of keycaps. side of keycaps.
##List of parts ## List of parts
- I2C mcp23018 - I2C mcp23018
- [teensy 2](https://www.pjrc.com/store/teensy.html) - [teensy 2](https://www.pjrc.com/store/teensy.html)
- 3 LED, 5mm tall with flat head - 3 LED, 5mm tall with flat head
@@ -43,13 +43,13 @@ side of keycaps.
- 20 R2 keys - 20 R2 keys
- 22 R1 keys - 22 R1 keys
if you fancy adding pedals : If you fancy adding pedals :
[these are good enough and cheap](https://www.amazon.fr/gp/product/B00V7WITKI/ref=oh_aui_detailpage_o04_s00?ie=UTF8&psc=1). You also need a RCA connector for each of those to replace the included cable [these are good enough and cheap](https://www.amazon.fr/gp/product/B00V7WITKI/ref=oh_aui_detailpage_o04_s00?ie=UTF8&psc=1). You also need a RCA connector for each of those to replace the included cable
If you (or your coworkers) find them too loud you can replace the switch inside them. If you (or your coworkers) find them too loud you can replace the switch inside them.
For once we don't really care about what's inside :) For once we don't really care about what's inside :)
##Various indications ## Various indications
The PHYSICAL rows and columns are connected as such : The PHYSICAL rows and columns are connected as such :
@@ -96,7 +96,7 @@ and on left hand (main) :
We use pull up resistor for SCL and VDA, see https://github.com/ErgoDox-EZ/docs/blob/master/ErgoDox%20EZ%20Schematic.pdf for example We use pull up resistor for SCL and VDA, see https://github.com/ErgoDox-EZ/docs/blob/master/ErgoDox%20EZ%20Schematic.pdf for example
the connector is a standard TRRS (jack with audio + mic) The connector is a standard TRRS (jack with audio + mic)
Diode direction is row to column Diode direction is row to column
+3 -1
View File
@@ -18,4 +18,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
/* Include overwrites for specific keymap */ /* Include overwrites for specific keymap */
#define HS60_ANSI #ifdef KEYBOARD_hs60
#define HS60_ANSI
#endif
+5 -1
View File
@@ -9,7 +9,11 @@ Keyboard Maintainer: [Yiancar](http://yiancar-designs.com/) and on [github](http
Hardware Supported: HS60 ISO and ANSI PCBs with Atmega 32u4 Hardware Supported: HS60 ISO and ANSI PCBs with Atmega 32u4
Hardware Availability: https://mechboards.co.uk/shop/all/hs60-pcb/ Hardware Availability: https://mechboards.co.uk/shop/all/hs60-pcb/
Due to the RGB implementation, the HS60 is currently not compatible with community layouts. If you're using the [community layouts feature](https://docs.qmk.fm/#/feature_layouts) and using the 60_ansi layout, you need to make sure that you include this on your config.h to ensure that the RGB Matrix is properly configured:
#ifdef KEYBOARD_hs60
#define HS60_ANSI
#endif
Make example for this keyboard (after setting up your build environment): Make example for this keyboard (after setting up your build environment):
+2
View File
@@ -69,6 +69,8 @@ AUDIO_ENABLE = no # Audio output on port C6
FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
RGB_MATRIX_ENABLE = yes # Use RGB matrix RGB_MATRIX_ENABLE = yes # Use RGB matrix
LAYOUTS = 60_ansi 60_iso
# Experimental features for zealcmd please do no enable # Experimental features for zealcmd please do no enable
#RAW_ENABLE = yes #RAW_ENABLE = yes
#USE_KEYMAPS_IN_EEPROM = yes #USE_KEYMAPS_IN_EEPROM = yes
+15
View File
@@ -0,0 +1,15 @@
/* Copyright 2017 Benjamin Kesselring
*
* 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/>.
*/
+90
View File
@@ -0,0 +1,90 @@
/* Copyright 2017 Wunder
*
* 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
// Layer shorthand
#define _QW_M 0
#define _QW_W 1
#define _FN 2
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* QWERTY-Mac
* .--------------------------------------------------------------------------------------------------------------------------------------.
* | ESC | 1 | 2 | 3 | 4 | % | 6 | 7 | 8 | 9 | 0 | - | = | Cut | BACKSP |
* |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------|
* | TAB | Q | W | E | R | T | Y | U | I | O | P | { | } | Copy | Paste |
* |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------+--------|
* | CAP LK | A | S | D | F | G | H | J | K | L | ; | ' | ENTER | ENTER | REF |
* |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------------------------+--------|
* | LSHIFT | Z | X | C | V | B | N | M | , | . | / | \ | RSHIFT| UP | SAVE |
* |--------+--------+--------+--------+--------+-----------------+--------+--------+--------+--------+-----------------+--------+--------|
* | LALT | LGUI | LALT | FIND | CMD T | SPACE | SPACE | ALFRED | FN-MO | RALT | RGUI | RCTRL | LEFT | DOWN | RIGHT |
* '--------------------------------------------------------------------------------------------------------------------------------------'
*/
[_QW_M] = LAYOUT_ortho_5x15( /* QWERTY MAC*/
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, LGUI(KC_X), 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_LCBR, KC_RCBR, LGUI(KC_C), LGUI(KC_V), \
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, LGUI(KC_R), KC_NO, KC_ENT, \
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_RSFT, KC_UP, LGUI(KC_S), \
KC_LCTL, KC_LALT, KC_LGUI, LGUI(KC_F), LGUI(KC_T), KC_SPC, KC_NO, LALT(KC_SPACE), MO(_FN), KC_RGUI, KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT \
),
/* QWERTY-Win
* .--------------------------------------------------------------------------------------------------------------------------------------.
* | ESC | 1 | 2 | 3 | 4 | % | 6 | 7 | 8 | 9 | 0 | - | = | Cut | BACKSP |
* |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------|
* | TAB | Q | W | E | R | T | Y | U | I | O | P | { | } | Copy | Paste |
* |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------+--------|
* | CAP LK | A | S | D | F | G | H | J | K | L | ; | ' | ENTER | ENTER | REF |
* |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------------------------+--------|
* | LSHIFT | Z | X | C | V | B | N | M | , | . | / | \ | RSHIFT | UP | SAVE |
* |--------+--------+--------+--------+--------+-----------------+--------+--------+--------+--------+-----------------+--------+--------|
* | LALT | LGUI | LALT | FIND | CMD T | SPACE | SPACE | START | FN-MO | RALT | RGUI | RCTRL | LEFT | DOWN | RIGHT |
* '--------------------------------------------------------------------------------------------------------------------------------------'
*/
[_QW_W] = LAYOUT_ortho_5x15( /* QWERTY WIN*/
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, LCTL(KC_X), 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_LCBR, KC_RCBR, LCTL(KC_C), LCTL(KC_V), \
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, LCTL(KC_R), KC_NO, KC_ENT, \
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_RSFT, KC_UP, LCTL(KC_S), \
KC_LCTL, KC_LALT, KC_LGUI, LCTL(KC_F), LCTL(KC_T), KC_SPC, KC_NO, LCTL(KC_GESC), MO(_FN), KC_RGUI, KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT \
),
/* FUNCTION
* .--------------------------------------------------------------------------------------------------------------------------------------.
* | ESC | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | VOLDN | VOLUP | MUTE | DEL |
* |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------|
* | TAB | - | WIN | - | - | RGB_TOG| - | - | OPTION | RESET | - | [ | ] | - | - |
* |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------+--------|
* | CAP LK | MAC | RAINBOW| PLAIN | - | - | - | - | - | - | ; | ' | ENTER | ENTER | REF |
* |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------------------------+--------|
* | LSHIFT | INC | DEC | HUE I | HUE D | SAT I | SAT D | - | - | . | / | \ | RSHIFT| HOME | SAVE |
* |--------+--------+--------+--------+--------+-----------------+--------+--------+--------+--------+-----------------+--------+--------|
* | LALT | LGUI | LALT | FIND | CMD T | SPACE | SPACE | ALFRED | FN-MO | RALT | RGUI | RCTRL | PGUP | END | PGDN |
* '--------------------------------------------------------------------------------------------------------------------------------------'
*/
[_FN] = LAYOUT_ortho_5x15( /* OSLAYOUT + NUMPAD + MEDIA + LIGHTING */
KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_VOLD, KC_VOLU, KC_MUTE, KC_DEL, \
KC_TRNS, KC_NO, DF(_QW_W), KC_NO, KC_NO, RGB_TOG, KC_NO, KC_NO, KC_RALT, RESET, KC_NO, KC_LBRC, KC_RBRC, KC_TRNS, KC_TRNS, \
KC_TRNS, DF(_QW_M), RGB_MODE_RAINBOW, RGB_MODE_PLAIN, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
KC_TRNS, RGB_VAI, RGB_VAD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, KC_NO, KC_NO, KC_DOT, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_TRNS, \
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PGUP, KC_END, KC_PGDN \
),
};
@@ -0,0 +1 @@
# The default keymap for Revok 75 --idobo version
+14
View File
@@ -0,0 +1,14 @@
# Copyright 2013 Jun Wako <[email protected]>
#
# 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/>.
@@ -23,7 +23,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
// #define USE_SERIAL // #define USE_SERIAL
#define FORCE_NKRO //For Steno. #define FORCE_NKRO //Cause it's suprisingly handy.
/* Select hand configuration */ /* Select hand configuration */
@@ -32,3 +32,13 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
// #define EE_HANDS // #define EE_HANDS
#define MOUSEKEY_INTERVAL 16
#define MOUSEKEY_DELAY 0
#define MOUSEKEY_TIME_TO_MAX 60
#define MOUSEKEY_MAX_SPEED 7
#define MOUSEKEY_WHEEL_DELAY 0
@@ -1,12 +1,10 @@
#include QMK_KEYBOARD_H #include QMK_KEYBOARD_H
#include "keymap_steno.h"
extern keymap_config_t keymap_config; extern keymap_config_t keymap_config;
#define _QWERTY 0 #define _QWERTY 0
#define _LOWER 1 #define _LOWER 1
#define _RAISE 2 #define _RAISE 2
#define _PLOVER 3
#define _ADJUST 4 #define _ADJUST 4
enum custom_keycodes { enum custom_keycodes {
@@ -14,88 +12,68 @@ enum custom_keycodes {
LOWER, LOWER,
RAISE, RAISE,
ADJUST, ADJUST,
PLOVER,
EXT_PLV,
}; };
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_QWERTY] = LAYOUT( [_QWERTY] = LAYOUT(
//┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐ //┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, PLOVER, KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
//├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤ //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_QUOT,
//├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤ //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
RAISE, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_QUOT, KC_RBRC, KC_LSFT, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_RSFT,
//├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_BSPC, KC_RSFT, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_LGUI, KC_LGUI, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_LALT, KC_RALT, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RGUI,
//└────────┴────────┴────────┴───┬────┴───┬────┴───┬────┴───┬────┘ └───┬────┴───┬────┴───┬────┴───┬────┴────────┴────────┴────────┘ //└────────┴────────┴────────┴───┬────┴───┬────┴───┬────┴───┬────┘ └───┬────┴───┬────┴───┬────┴───┬────┴────────┴────────┴────────┘
KC_LCTL, LOWER, KC_SPC, KC_BSPC, KC_ENT, KC_LALT KC_LCTL, LOWER, KC_SPC, KC_ENT, RAISE, KC_RCTL
// └────────┴────────┴────────┘ └────────┴────────┴────────┘ // └────────┴────────┴────────┘ └────────┴────────┴────────┘
), ),
[_LOWER] = LAYOUT( [_LOWER] = LAYOUT(
//┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐ //┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐
KC_DEL, KC_0, KC_9, KC_8, KC_7, KC_6, _______, _______, _______, _______, _______, _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, XXXXXXX, KC_ACL0, KC_ACL1, KC_ACL2, XXXXXXX, XXXXXXX,
//├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤ //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
KC_SCLN, KC_P, KC_O, KC_I, KC_U, KC_Y, _______, _______, _______, _______, _______, _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
//├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤ //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
_______, KC_QUOT, KC_L, KC_K, KC_J, KC_H, _______, KC_LEFT, KC_UP, KC_RGHT, KC_SCLN, _______, KC_VOLU, KC_HOME, KC_LEFT, KC_UP, KC_RGHT, KC_PGUP, KC_WH_U, KC_MS_L, KC_MS_U, KC_MS_R, XXXXXXX, KC_BTN4,
//├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
KC_ENT, KC_SLSH, KC_DOT, KC_COMM, KC_M, KC_N, KC_LALT, _______, _______, _______, KC_DOWN, _______, _______, _______, KC_VOLD, KC_END, KC_INS, KC_DOWN, KC_DEL, KC_PGDN, KC_MUTE, XXXXXXX, KC_WH_D, KC_WH_L, KC_MS_D, KC_WH_R, KC_BTN3, KC_BTN5,
//└────────┴────────┴────────┴───┬────┴───┬────┴───┬────┴───┬────┘ └───┬────┴───┬────┴───┬────┴───┬────┴────────┴────────┴────────┘ //└────────┴────────┴────────┴───┬────┴───┬────┴───┬────┴───┬────┘ └───┬────┴───┬────┴───┬────┴───┬────┴────────┴────────┴────────┘
_______, _______, KC_LGUI, _______, _______, _______ _______, _______, _______, KC_BTN1, KC_BTN2, _______
// └────────┴────────┴────────┘ └────────┴────────┴────────┘ // └────────┴────────┴────────┘ └────────┴────────┴────────┘
), ),
[_RAISE] = LAYOUT( [_RAISE] = LAYOUT(
//┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐ //┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐
KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, _______, _______, _______, _______, _______, _______, KC_GRAVE,_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
//├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤ //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, _______, _______, _______, _______, KC_TILD, KC_PIPE, KC_LT, KC_GT, _______, _______, _______, _______, _______, _______, _______, _______,
//├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤ //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
_______, KC_VOLU, KC_LEFT, KC_UP, KC_RGHT, KC_INS, _______, _______, _______, _______, _______, _______, KC_BSLASH,KC_LCBR, KC_RCBR, KC_MINUS, KC_LBRC, KC_RBRC, _______, KC_LEFT, KC_UP, KC_RGHT, _______, _______,
//├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
KC_MUTE, KC_VOLD, KC_PGUP, KC_DOWN, KC_PGDN, KC_DEL, _______, _______, _______, _______, _______, _______, _______, _______, KC_COLN, KC_UNDS, KC_LPRN, KC_PLUS, KC_RPRN, KC_EQL, KC_UNDO, _______, _______, _______, KC_DOWN, _______, _______, _______,
//└────────┴────────┴────────┴───┬────┴───┬────┴───┬────┴───┬────┘ └───┬────┴───┬────┴───┬────┴───┬────┴────────┴────────┴────────┘ //└────────┴────────┴────────┴───┬────┴───┬────┴───┬────┴───┬────┘ └───┬────┴───┬────┴───┬────┴───┬────┴────────┴────────┴────────┘
_______, _______, KC_LALT, _______, _______, _______ KC_CUT, KC_COPY, KC_PSTE, _______, _______, _______
// └────────┴────────┴────────┘ └────────┴────────┴────────┘ // └────────┴────────┴────────┘ └────────┴────────┴────────┘
), ),
[_ADJUST] = LAYOUT( [_ADJUST] = LAYOUT(
//┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐ //┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐
KC_GRV, KC_HOME, KC_LBRC, KC_RBRC, KC_PIPE, KC_APP, KC_SLCK, _______, _______, _______, _______, _______, _______, _______, KC_CAPS, KC_MENU, KC_APP, KC_PSCR, _______, _______, _______, _______, _______, _______,
//├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤ //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
KC_PSCR, KC_END, KC_LCBR, KC_RCBR, KC_PLUS, KC_EQL, KC_PAUS, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PAUS, _______, _______, _______, _______, _______, _______,
//├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤ //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
_______, _______, _______, KC_BSLS, KC_MINS, KC_UNDS, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_SLCK, _______, _______, _______, _______, _______, _______,
//├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
//└────────┴────────┴────────┴───┬────┴───┬────┴───┬────┴───┬────┘ └───┬────┴───┬────┴───┬────┴───┬────┴────────┴────────┴────────┘ //└────────┴────────┴────────┴───┬────┴───┬────┴───┬────┴───┬────┘ └───┬────┴───┬────┴───┬────┴───┬────┴────────┴────────┴────────┘
_______, _______, _______, _______, _______, _______ _______, _______, _______, _______, _______, _______
// └────────┴────────┴────────┘ └────────┴────────┴────────┘ // └────────┴────────┴────────┘ └────────┴────────┴────────┘
), ),
[_PLOVER] = LAYOUT(
//┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐
STN_PWR, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, EXT_PLV,
//├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
STN_N1, STN_N2, STN_N3, STN_N4, STN_N5, STN_N6, STN_N7, STN_N8, STN_N9, STN_NA, STN_NB, STN_NC,
//├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
STN_FN, STN_S1, STN_TL, STN_PL, STN_HL, STN_ST1, STN_ST3, STN_FR, STN_PR, STN_LR, STN_TR, STN_DR,
//├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
XXXXXXX, STN_S2, STN_KL, STN_WL, STN_RL, STN_ST2, STN_RE1, STN_RE2, STN_ST4, STN_RR, STN_BR, STN_GR, STN_SR, STN_ZR,
//└────────┴────────┴────────┴───┬────┴───┬────┴───┬────┴───┬────┘ └───┬────┴───┬────┴───┬────┴───┬────┴────────┴────────┴────────┘
XXXXXXX, STN_A, STN_O, STN_E, STN_U, XXXXXXX
// └────────┴────────┴────────┘ └────────┴────────┴────────┘
)
}; };
void matrix_init_user() {
steno_set_mode(STENO_MODE_GEMINI); // or STENO_MODE_BOLT
}
bool process_record_user(uint16_t keycode, keyrecord_t *record) { bool process_record_user(uint16_t keycode, keyrecord_t *record) {
switch (keycode) { switch (keycode) {
case QWERTY: case QWERTY:
@@ -132,18 +110,6 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
} }
return false; return false;
break; break;
case PLOVER:
if (!record->event.pressed) {
layer_on(_PLOVER);
}
return false;
break;
case EXT_PLV:
if (record->event.pressed) {
layer_off(_PLOVER);
}
return false;
break;
} }
return true; return true;
} }
@@ -1,6 +1,6 @@
EXTRAKEY_ENABLE = yes # Disable if you run out of usb endpoints. Media keys need this to work. EXTRAKEY_ENABLE = yes # Disable if you run out of usb endpoints. Media keys need this to work.
MOUSEKEY_ENABLE = no # Mouse keys(+4700) Uses extra usb endpoints. MOUSEKEY_ENABLE = yes # Mouse keys(+4700) Uses extra usb endpoints.
STENO_ENABLE = yes # Additional protocols for Stenography(+1700), requires VIRTSER. STENO_ENABLE = no # Additional protocols for Stenography(+1700), requires VIRTSER.
AUDIO_ENABLE = no # Audio output on port C6 AUDIO_ENABLE = no # Audio output on port C6
MIDI_ENABLE = no # MIDI controls MIDI_ENABLE = no # MIDI controls
NKRO_ENABLE = yes NKRO_ENABLE = yes
+33
View File
@@ -0,0 +1,33 @@
/*
Copyright 2017 Danny Nguyen <danny@keeb.io>
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
/* Use I2C or Serial, not both */
#define USE_SERIAL
#undef USE_I2C
/* Select hand configuration */
// #define MASTER_LEFT
// #define MASTER_RIGHT
#define EE_HANDS
#define QMK_ESC_OUTPUT F6 // usually COL
#define QMK_ESC_INPUT D7 // usually ROW
#define QMK_LED B0
+76
View File
@@ -0,0 +1,76 @@
#include QMK_KEYBOARD_H
#include "wanleg.h"
#define LAYOUT_iris_base( \
K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, \
K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, \
K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, \
K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C \
) \
LAYOUT_wrapper( \
K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, \
K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, \
K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, \
K31, K32, K33, K34, K35, K36, _______, _______, K37, K38, K39, K3A, K3B, K3C, \
_______, _______, _______, _______, _______, _______ \
)
#define LAYOUT_iris_base_wrapper(...) LAYOUT_iris_base(__VA_ARGS__)
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_GK] = LAYOUT_iris_base_wrapper(
_______________GherkinLike_0_______________,
_______________GherkinLike_1_______________,
_______________GherkinLike_2_______________,
_______________GherkinLike_3_OneHand_______
),
[ONE] = LAYOUT_wrapper(
_______________Qwerty_Row__0_______________,
_______________Qwerty_Row__1_______________,
_______________Qwerty_Row__2_______________,
KC_LCTL, KC_LGUI, KC_LALT, GHERKIN, SUBTER, SH_T(KC_SPC), _______, _______, SH_T(KC_SPC), SUPRA, KC_RGUI, KC_RALT, GHERKIN, KC_RCTL,
_______, _______, _______, _______, _______, _______
),
[SUP] = LAYOUT_iris_base_wrapper(
________________SUPRA_Row_0________________,
________________SUPRA_Row_1________________,
________________SUPRA_Row_2________________,
________________SUPRA_Row_3________________
),
[SUB] = LAYOUT_iris_base_wrapper(
_______________SUBTER_Row__0_______________,
_______________SUBTER_Row__1_______________,
_______________SUBTER_Row__2_______________,
_______________SUBTER_Row__3_______________
),
[NUM] = LAYOUT_iris_base_wrapper(
_______________NUMBERS_Row_0_______________,
_______________NUMBERS_Row_1_______________,
_______________NUMBERS_Row_2_______________,
_______________NUMBERS_Row_3_______________
),
[DIR] = LAYOUT_iris_base_wrapper(
_____________DIRECTIONS_Row__0_____________,
_____________DIRECTIONS_Row__1_____________,
_____________DIRECTIONS_Row__2_____________,
_______, _______, ONEHAND, _______, _______, _______, _______, _______, _______, _______, _______, _______
),
[ETC] = LAYOUT_iris_base_wrapper(
______________ETCETERA_Row__0______________,
______________ETCETERA_Row__1______________,
______________ETCETERA_Row__2______________,
______________ETCETERA_Row__3______________
)
};
void matrix_init_keymap(void) {
DDRD &= ~(1<<5);
PORTD &= ~(1<<5);
DDRB &= ~(1<<0);
PORTB &= ~(1<<0);
}
+5
View File
@@ -0,0 +1,5 @@
RGBLIGHT_ENABLE = no
BACKLIGHT_ENABLE = no
SWAP_HANDS_ENABLE = yes
BOOTLOADER = qmk-dfu
+1 -4
View File
@@ -16,9 +16,6 @@ You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>. along with this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
#ifndef CONFIG_H #pragma once
#define CONFIG_H
#include "config_common.h" #include "config_common.h"
#endif
-2
View File
@@ -1,2 +0,0 @@
:0F000000000000000000000000000000000001F0
:00000001FF
@@ -1,2 +0,0 @@
:0F000000000000000000000000000000000000F1
:00000001FF
@@ -1,25 +1,22 @@
SRC += ssd1306.c
# Build Options # Build Options
# change to "no" to disable the options, or define them in the Makefile in # change to "no" to disable the options, or define them in the Makefile in
# the appropriate keymap folder that will get included automatically # the appropriate keymap folder that will get included automatically
# #
BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
MOUSEKEY_ENABLE = yes # Mouse keys(+4700) MOUSEKEY_ENABLE = no # Mouse keys(+4700)
EXTRAKEY_ENABLE = yes # Audio control and System control(+450) EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
CONSOLE_ENABLE = no # Console for debug(+400) CONSOLE_ENABLE = no # Console for debug(+400)
COMMAND_ENABLE = no # Commands for debug and configuration COMMAND_ENABLE = no # Commands for debug and configuration
NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
MIDI_ENABLE = no # MIDI controls MIDI_ENABLE = no # MIDI controls
AUDIO_ENABLE = no # Audio output on port C6 AUDIO_ENABLE = no # Audio output on port C6
UNICODE_ENABLE = no # Unicode UNICODE_ENABLE = no # Unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
SWAP_HANDS_ENABLE = no # Enable one-hand typing SWAP_HANDS_ENABLE = no # Enable one-hand typing
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
ifndef QUANTUM_DIR
include ../../../../Makefile
endif
@@ -18,20 +18,19 @@ You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>. along with this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
#ifndef CONFIG_USER_H #pragma once
#define CONFIG_USER_H
#include "../../config.h" // place overrides here
#define DEFAULT_LAYER_SONGS { SONG(QWERTY_SOUND), \
SONG(COLEMAK_SOUND), \
SONG(DVORAK_SOUND) \
}
/* Use I2C or Serial, not both */ /* Use I2C or Serial, not both */
#define USE_SERIAL #define USE_SERIAL
// #define USE_I2C // #define USE_I2C
/* Select hand configuration */ /* Select hand configuration */
#define MASTER_LEFT #define MASTER_LEFT
// #define MASTER_RIGHT // #define MASTER_RIGHT
// #define EE_HANDS // #define EE_HANDS
#endif
+9 -61
View File
@@ -1,7 +1,5 @@
#include QMK_KEYBOARD_H #include QMK_KEYBOARD_H
extern keymap_config_t keymap_config;
// Each layer gets a name for readability, which is then used in the keymap matrix below. // Each layer gets a name for readability, which is then used in the keymap matrix below.
// The underscores don't mean anything - you can have a layer called STUFF or any other name. // The underscores don't mean anything - you can have a layer called STUFF or any other name.
// Layer names don't all need to be of the same length, obviously, and you can also skip them // Layer names don't all need to be of the same length, obviously, and you can also skip them
@@ -16,15 +14,12 @@ extern keymap_config_t keymap_config;
enum custom_keycodes { enum custom_keycodes {
QWERTY = SAFE_RANGE, QWERTY = SAFE_RANGE,
COLEMAK, COLEMAK,
DVORAK, DVORAK
LOWER,
RAISE,
ADJUST,
}; };
// Fillers to make layering more clear #define LOWER MO(_LOWER)
#define _______ KC_TRNS #define RAISE MO(_RAISE)
#define XXXXXXX KC_NO #define ADJUST MO(_ADJUST)
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Qwerty /* Qwerty
@@ -138,74 +133,27 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
}; };
#ifdef AUDIO_ENABLE uint32_t layer_state_set_user(uint32_t state) {
float tone_qwerty[][2] = SONG(QWERTY_SOUND); return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST);
float tone_dvorak[][2] = SONG(DVORAK_SOUND);
float tone_colemak[][2] = SONG(COLEMAK_SOUND);
#endif
void persistent_default_layer_set(uint16_t default_layer) {
eeconfig_update_default_layer(default_layer);
default_layer_set(default_layer);
} }
bool process_record_user(uint16_t keycode, keyrecord_t *record) { bool process_record_user(uint16_t keycode, keyrecord_t *record) {
switch (keycode) { switch (keycode) {
case QWERTY: case QWERTY:
if (record->event.pressed) { if (record->event.pressed) {
#ifdef AUDIO_ENABLE set_single_persistent_default_layer(_QWERTY);
PLAY_SONG(tone_qwerty);
#endif
persistent_default_layer_set(1UL<<_QWERTY);
} }
return false; return false;
break;
case COLEMAK: case COLEMAK:
if (record->event.pressed) { if (record->event.pressed) {
#ifdef AUDIO_ENABLE set_single_persistent_default_layer(_COLEMAK);
PLAY_SONG(tone_colemak);
#endif
persistent_default_layer_set(1UL<<_COLEMAK);
} }
return false; return false;
break;
case DVORAK: case DVORAK:
if (record->event.pressed) { if (record->event.pressed) {
#ifdef AUDIO_ENABLE set_single_persistent_default_layer(_DVORAK);
PLAY_SONG(tone_dvorak);
#endif
persistent_default_layer_set(1UL<<_DVORAK);
} }
return false; return false;
break;
case LOWER:
if (record->event.pressed) {
layer_on(_LOWER);
update_tri_layer(_LOWER, _RAISE, _ADJUST);
} else {
layer_off(_LOWER);
update_tri_layer(_LOWER, _RAISE, _ADJUST);
}
return false;
break;
case RAISE:
if (record->event.pressed) {
layer_on(_RAISE);
update_tri_layer(_LOWER, _RAISE, _ADJUST);
} else {
layer_off(_RAISE);
update_tri_layer(_LOWER, _RAISE, _ADJUST);
}
return false;
break;
case ADJUST:
if (record->event.pressed) {
layer_on(_ADJUST);
} else {
layer_off(_ADJUST);
}
return false;
break;
} }
return true; return true;
} }
@@ -1,3 +0,0 @@
ifndef QUANTUM_DIR
include ../../../../Makefile
endif
+1 -4
View File
@@ -1,5 +1,4 @@
#ifndef LETS_SPLIT_H #pragma once
#define LETS_SPLIT_H
#include "quantum.h" #include "quantum.h"
@@ -27,5 +26,3 @@
) )
#define LAYOUT_kc_ortho_4x12 LAYOUT_kc #define LAYOUT_kc_ortho_4x12 LAYOUT_kc
#endif
-470
View File
@@ -1,470 +0,0 @@
/*
Copyright 2012 Jun Wako <wakojun@gmail.com>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/*
* scan matrix
*/
#include <stdint.h>
#include <stdbool.h>
#include <avr/io.h>
#include "wait.h"
#include "print.h"
#include "debug.h"
#include "util.h"
#include "matrix.h"
#include "split_util.h"
#include "pro_micro.h"
#include "config.h"
#include "timer.h"
#ifdef USE_I2C
# include "i2c.h"
#else // USE_SERIAL
# include "serial.h"
#endif
#ifndef DEBOUNCING_DELAY
# define DEBOUNCING_DELAY 5
#endif
#if (DEBOUNCING_DELAY > 0)
static uint16_t debouncing_time;
static bool debouncing = false;
#endif
#if (MATRIX_COLS <= 8)
# define print_matrix_header() print("\nr/c 01234567\n")
# define print_matrix_row(row) print_bin_reverse8(matrix_get_row(row))
# define matrix_bitpop(i) bitpop(matrix[i])
# define ROW_SHIFTER ((uint8_t)1)
#else
# error "Currently only supports 8 COLS"
#endif
static matrix_row_t matrix_debouncing[MATRIX_ROWS];
#define ERROR_DISCONNECT_COUNT 5
#define ROWS_PER_HAND (MATRIX_ROWS/2)
static uint8_t error_count = 0;
static const uint8_t row_pins[MATRIX_ROWS] = MATRIX_ROW_PINS;
static const uint8_t col_pins[MATRIX_COLS] = MATRIX_COL_PINS;
/* matrix state(1:on, 0:off) */
static matrix_row_t matrix[MATRIX_ROWS];
static matrix_row_t matrix_debouncing[MATRIX_ROWS];
#if (DIODE_DIRECTION == COL2ROW)
static void init_cols(void);
static bool read_cols_on_row(matrix_row_t current_matrix[], uint8_t current_row);
static void unselect_rows(void);
static void select_row(uint8_t row);
static void unselect_row(uint8_t row);
#elif (DIODE_DIRECTION == ROW2COL)
static void init_rows(void);
static bool read_rows_on_col(matrix_row_t current_matrix[], uint8_t current_col);
static void unselect_cols(void);
static void unselect_col(uint8_t col);
static void select_col(uint8_t col);
#endif
__attribute__ ((weak))
void matrix_init_kb(void) {
matrix_init_user();
}
__attribute__ ((weak))
void matrix_scan_kb(void) {
matrix_scan_user();
}
__attribute__ ((weak))
void matrix_init_user(void) {
}
__attribute__ ((weak))
void matrix_scan_user(void) {
}
__attribute__ ((weak))
void matrix_slave_scan_user(void) {
}
inline
uint8_t matrix_rows(void)
{
return MATRIX_ROWS;
}
inline
uint8_t matrix_cols(void)
{
return MATRIX_COLS;
}
void matrix_init(void)
{
#ifdef DISABLE_JTAG
// JTAG disable for PORT F. write JTD bit twice within four cycles.
MCUCR |= (1<<JTD);
MCUCR |= (1<<JTD);
#endif
debug_enable = true;
debug_matrix = true;
debug_mouse = true;
// initialize row and col
#if (DIODE_DIRECTION == COL2ROW)
unselect_rows();
init_cols();
#elif (DIODE_DIRECTION == ROW2COL)
unselect_cols();
init_rows();
#endif
TX_RX_LED_INIT;
// initialize matrix state: all keys off
for (uint8_t i=0; i < MATRIX_ROWS; i++) {
matrix[i] = 0;
matrix_debouncing[i] = 0;
}
matrix_init_quantum();
}
uint8_t _matrix_scan(void)
{
int offset = isLeftHand ? 0 : (ROWS_PER_HAND);
#if (DIODE_DIRECTION == COL2ROW)
// Set row, read cols
for (uint8_t current_row = 0; current_row < ROWS_PER_HAND; current_row++) {
# if (DEBOUNCING_DELAY > 0)
bool matrix_changed = read_cols_on_row(matrix_debouncing+offset, current_row);
if (matrix_changed) {
debouncing = true;
debouncing_time = timer_read();
}
# else
read_cols_on_row(matrix+offset, current_row);
# endif
}
#elif (DIODE_DIRECTION == ROW2COL)
// Set col, read rows
for (uint8_t current_col = 0; current_col < MATRIX_COLS; current_col++) {
# if (DEBOUNCING_DELAY > 0)
bool matrix_changed = read_rows_on_col(matrix_debouncing+offset, current_col);
if (matrix_changed) {
debouncing = true;
debouncing_time = timer_read();
}
# else
read_rows_on_col(matrix+offset, current_col);
# endif
}
#endif
# if (DEBOUNCING_DELAY > 0)
if (debouncing && (timer_elapsed(debouncing_time) > DEBOUNCING_DELAY)) {
for (uint8_t i = 0; i < ROWS_PER_HAND; i++) {
matrix[i+offset] = matrix_debouncing[i+offset];
}
debouncing = false;
}
# endif
return 1;
}
#ifdef USE_I2C
// Get rows from other half over i2c
int i2c_transaction(void) {
int slaveOffset = (isLeftHand) ? (ROWS_PER_HAND) : 0;
int err = i2c_master_start(SLAVE_I2C_ADDRESS + I2C_WRITE);
if (err) goto i2c_error;
// start of matrix stored at 0x00
err = i2c_master_write(0x00);
if (err) goto i2c_error;
// Start read
err = i2c_master_start(SLAVE_I2C_ADDRESS + I2C_READ);
if (err) goto i2c_error;
if (!err) {
int i;
for (i = 0; i < ROWS_PER_HAND-1; ++i) {
matrix[slaveOffset+i] = i2c_master_read(I2C_ACK);
}
matrix[slaveOffset+i] = i2c_master_read(I2C_NACK);
i2c_master_stop();
} else {
i2c_error: // the cable is disconnceted, or something else went wrong
i2c_reset_state();
return err;
}
return 0;
}
#else // USE_SERIAL
int serial_transaction(void) {
int slaveOffset = (isLeftHand) ? (ROWS_PER_HAND) : 0;
if (serial_update_buffers()) {
return 1;
}
for (int i = 0; i < ROWS_PER_HAND; ++i) {
matrix[slaveOffset+i] = serial_slave_buffer[i];
}
return 0;
}
#endif
uint8_t matrix_scan(void)
{
uint8_t ret = _matrix_scan();
#ifdef USE_I2C
if( i2c_transaction() ) {
#else // USE_SERIAL
if( serial_transaction() ) {
#endif
// turn on the indicator led when halves are disconnected
TXLED1;
error_count++;
if (error_count > ERROR_DISCONNECT_COUNT) {
// reset other half if disconnected
int slaveOffset = (isLeftHand) ? (ROWS_PER_HAND) : 0;
for (int i = 0; i < ROWS_PER_HAND; ++i) {
matrix[slaveOffset+i] = 0;
}
}
} else {
// turn off the indicator led on no error
TXLED0;
error_count = 0;
}
matrix_scan_quantum();
return ret;
}
void matrix_slave_scan(void) {
_matrix_scan();
int offset = (isLeftHand) ? 0 : ROWS_PER_HAND;
#ifdef USE_I2C
for (int i = 0; i < ROWS_PER_HAND; ++i) {
i2c_slave_buffer[i] = matrix[offset+i];
}
#else // USE_SERIAL
for (int i = 0; i < ROWS_PER_HAND; ++i) {
serial_slave_buffer[i] = matrix[offset+i];
}
#endif
matrix_slave_scan_user();
}
bool matrix_is_modified(void)
{
if (debouncing) return false;
return true;
}
inline
bool matrix_is_on(uint8_t row, uint8_t col)
{
return (matrix[row] & ((matrix_row_t)1<<col));
}
inline
matrix_row_t matrix_get_row(uint8_t row)
{
return matrix[row];
}
void matrix_print(void)
{
print("\nr/c 0123456789ABCDEF\n");
for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
phex(row); print(": ");
pbin_reverse16(matrix_get_row(row));
print("\n");
}
}
uint8_t matrix_key_count(void)
{
uint8_t count = 0;
for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
count += bitpop16(matrix[i]);
}
return count;
}
#if (DIODE_DIRECTION == COL2ROW)
static void init_cols(void)
{
for(uint8_t x = 0; x < MATRIX_COLS; x++) {
uint8_t pin = col_pins[x];
_SFR_IO8((pin >> 4) + 1) &= ~_BV(pin & 0xF); // IN
_SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); // HI
}
}
static bool read_cols_on_row(matrix_row_t current_matrix[], uint8_t current_row)
{
// Store last value of row prior to reading
matrix_row_t last_row_value = current_matrix[current_row];
// Clear data in matrix row
current_matrix[current_row] = 0;
// Select row and wait for row selecton to stabilize
select_row(current_row);
wait_us(30);
// For each col...
for(uint8_t col_index = 0; col_index < MATRIX_COLS; col_index++) {
// Select the col pin to read (active low)
uint8_t pin = col_pins[col_index];
uint8_t pin_state = (_SFR_IO8(pin >> 4) & _BV(pin & 0xF));
// Populate the matrix row with the state of the col pin
current_matrix[current_row] |= pin_state ? 0 : (ROW_SHIFTER << col_index);
}
// Unselect row
unselect_row(current_row);
return (last_row_value != current_matrix[current_row]);
}
static void select_row(uint8_t row)
{
uint8_t pin = row_pins[row];
_SFR_IO8((pin >> 4) + 1) |= _BV(pin & 0xF); // OUT
_SFR_IO8((pin >> 4) + 2) &= ~_BV(pin & 0xF); // LOW
}
static void unselect_row(uint8_t row)
{
uint8_t pin = row_pins[row];
_SFR_IO8((pin >> 4) + 1) &= ~_BV(pin & 0xF); // IN
_SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); // HI
}
static void unselect_rows(void)
{
for(uint8_t x = 0; x < ROWS_PER_HAND; x++) {
uint8_t pin = row_pins[x];
_SFR_IO8((pin >> 4) + 1) &= ~_BV(pin & 0xF); // IN
_SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); // HI
}
}
#elif (DIODE_DIRECTION == ROW2COL)
static void init_rows(void)
{
for(uint8_t x = 0; x < ROWS_PER_HAND; x++) {
uint8_t pin = row_pins[x];
_SFR_IO8((pin >> 4) + 1) &= ~_BV(pin & 0xF); // IN
_SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); // HI
}
}
static bool read_rows_on_col(matrix_row_t current_matrix[], uint8_t current_col)
{
bool matrix_changed = false;
// Select col and wait for col selecton to stabilize
select_col(current_col);
wait_us(30);
// For each row...
for(uint8_t row_index = 0; row_index < ROWS_PER_HAND; row_index++)
{
// Store last value of row prior to reading
matrix_row_t last_row_value = current_matrix[row_index];
// Check row pin state
if ((_SFR_IO8(row_pins[row_index] >> 4) & _BV(row_pins[row_index] & 0xF)) == 0)
{
// Pin LO, set col bit
current_matrix[row_index] |= (ROW_SHIFTER << current_col);
}
else
{
// Pin HI, clear col bit
current_matrix[row_index] &= ~(ROW_SHIFTER << current_col);
}
// Determine if the matrix changed state
if ((last_row_value != current_matrix[row_index]) && !(matrix_changed))
{
matrix_changed = true;
}
}
// Unselect col
unselect_col(current_col);
return matrix_changed;
}
static void select_col(uint8_t col)
{
uint8_t pin = col_pins[col];
_SFR_IO8((pin >> 4) + 1) |= _BV(pin & 0xF); // OUT
_SFR_IO8((pin >> 4) + 2) &= ~_BV(pin & 0xF); // LOW
}
static void unselect_col(uint8_t col)
{
uint8_t pin = col_pins[col];
_SFR_IO8((pin >> 4) + 1) &= ~_BV(pin & 0xF); // IN
_SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); // HI
}
static void unselect_cols(void)
{
for(uint8_t x = 0; x < MATRIX_COLS; x++) {
uint8_t pin = col_pins[x];
_SFR_IO8((pin >> 4) + 1) &= ~_BV(pin & 0xF); // IN
_SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); // HI
}
}
#endif
+1 -6
View File
@@ -16,10 +16,7 @@ You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>. along with this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
#ifndef REV1_CONFIG_H #pragma once
#define REV1_CONFIG_H
#include "config_common.h"
/* USB Device descriptor parameter */ /* USB Device descriptor parameter */
#define VENDOR_ID 0xFEED #define VENDOR_ID 0xFEED
@@ -80,5 +77,3 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
//#define NO_ACTION_ONESHOT //#define NO_ACTION_ONESHOT
//#define NO_ACTION_MACRO //#define NO_ACTION_MACRO
//#define NO_ACTION_FUNCTION //#define NO_ACTION_FUNCTION
#endif
+1 -4
View File
@@ -1,5 +1,4 @@
#ifndef REV1_H #pragma once
#define REV1_H
#include "lets_split.h" #include "lets_split.h"
@@ -26,5 +25,3 @@
} }
#define LAYOUT_ortho_4x12 LAYOUT #define LAYOUT_ortho_4x12 LAYOUT
#endif
+1 -7
View File
@@ -16,10 +16,7 @@ You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>. along with this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
#ifndef REV2_CONFIG_H #pragma once
#define REV2_CONFIG_H
#include "config_common.h"
/* USB Device descriptor parameter */ /* USB Device descriptor parameter */
#define VENDOR_ID 0xFEED #define VENDOR_ID 0xFEED
@@ -80,6 +77,3 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
//#define NO_ACTION_ONESHOT //#define NO_ACTION_ONESHOT
//#define NO_ACTION_MACRO //#define NO_ACTION_MACRO
//#define NO_ACTION_FUNCTION //#define NO_ACTION_FUNCTION
#endif
+1 -4
View File
@@ -1,5 +1,4 @@
#ifndef REV2_H #pragma once
#define REV2_H
#include "lets_split.h" #include "lets_split.h"
@@ -58,5 +57,3 @@
#endif #endif
#define LAYOUT_ortho_4x12 LAYOUT #define LAYOUT_ortho_4x12 LAYOUT
#endif
+4 -12
View File
@@ -1,11 +1,4 @@
SRC += matrix.c \
i2c.c \
split_util.c \
serial.c \
ssd1306.c
# MCU name # MCU name
#MCU = at90usb1287
MCU = atmega32u4 MCU = atmega32u4
# Processor frequency. # Processor frequency.
@@ -42,7 +35,7 @@ F_USB = $(F_CPU)
# Bootloader # Bootloader
# This definition is optional, and if your keyboard supports multiple bootloaders of # This definition is optional, and if your keyboard supports multiple bootloaders of
# different sizes, comment this out, and the correct address will be loaded # different sizes, comment this out, and the correct address will be loaded
# automatically (+60). See bootloader.mk for all options. # automatically (+60). See bootloader.mk for all options.
BOOTLOADER = caterina BOOTLOADER = caterina
@@ -64,13 +57,12 @@ MIDI_ENABLE = no # MIDI controls
AUDIO_ENABLE = no # Audio output on port C6 AUDIO_ENABLE = no # Audio output on port C6
UNICODE_ENABLE = no # Unicode UNICODE_ENABLE = no # Unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
SUBPROJECT_rev1 = yes
USE_I2C = yes
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
CUSTOM_MATRIX = yes SPLIT_KEYBOARD = yes
LAYOUTS = ortho_4x12 LAYOUTS = ortho_4x12
+1 -7
View File
@@ -16,10 +16,7 @@ You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>. along with this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
#ifndef SOCKETS_CONFIG_H #pragma once
#define SOCKETS_CONFIG_H
#include "config_common.h"
/* USB Device descriptor parameter */ /* USB Device descriptor parameter */
#define VENDOR_ID 0xBEE5 #define VENDOR_ID 0xBEE5
@@ -85,6 +82,3 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
//#define NO_ACTION_ONESHOT //#define NO_ACTION_ONESHOT
//#define NO_ACTION_MACRO //#define NO_ACTION_MACRO
//#define NO_ACTION_FUNCTION //#define NO_ACTION_FUNCTION
#endif
+1 -4
View File
@@ -1,5 +1,4 @@
#ifndef SOCKETS_H #pragma once
#define SOCKETS_H
#define DISABLE_JTAG // The keyboard uses PF4 and PF7, which are used by JTAG. #define DISABLE_JTAG // The keyboard uses PF4 and PF7, which are used by JTAG.
#include "lets_split.h" #include "lets_split.h"
@@ -59,5 +58,3 @@
#endif #endif
#define LAYOUT_ortho_4x12 LAYOUT #define LAYOUT_ortho_4x12 LAYOUT
#endif
Loaded 100 of 182 files, more files were not shown because too many files have changed in this diff. Show more