Merge branch 'master' of https://github.com/jackhumbert/qmk_firmware
1
.gitignore
vendored
|
@ -17,6 +17,7 @@ build/
|
||||||
.build/
|
.build/
|
||||||
*.bak
|
*.bak
|
||||||
.vagrant/
|
.vagrant/
|
||||||
|
quantum/version.h
|
||||||
.idea/
|
.idea/
|
||||||
CMakeLists.txt
|
CMakeLists.txt
|
||||||
.DS_STORE
|
.DS_STORE
|
||||||
|
|
|
@ -10,7 +10,7 @@ env:
|
||||||
global:
|
global:
|
||||||
- secure: vBTSL34BDPxDilKUuTXqU4CJ26Pv5hogD2nghatkxSQkI1/jbdnLj/DQdPUrMJFDIY6TK3AltsBx72MaMsLQ1JO/Ou24IeHINHXzUC1FlS9yQa48cpxnhX5kzXNyGs3oa0qaFbvnr7RgYRWtmD52n4bIZuSuW+xpBv05x2OCizdT2ZonH33nATaHGFasxROm4qYZ241VfzcUv766V6RVHgL4x9V08warugs+RENVkfzxxwhk3NmkrISabze0gSVJLHBPHxroZC6EUcf/ocobcuDrCwFqtEt90i7pNIAFUE7gZsN2uE75LmpzAWin21G7lLPcPL2k4FJVd8an1HiP2WmscJU6U89fOfMb2viObnKcCzebozBCmKGtHEuXZo9FcReOx49AnQSpmESJGs+q2dL/FApkTjQiyT4J6O5dJpoww0/r57Wx0cmmqjETKBb5rSgXM51Etk3wO09mvcPHsEwrT7qH8r9XWdyCDoEn7FCLX3/LYnf/D4SmZ633YPl5gv3v9XEwxR5+04akjgnvWDSNIaDbWBdxHNb7l4pMc+WR1bwCyMyA7KXj0RrftEGOrm9ZRLe6BkbT4cycA+j77nbPOMcyZChliV9pPQos+4TOJoTzcK2L8yWVoY409aDNVuAjdP6Yum0R2maBGl/etLmIMpJC35C5/lZ+dUNjJAM=
|
- secure: vBTSL34BDPxDilKUuTXqU4CJ26Pv5hogD2nghatkxSQkI1/jbdnLj/DQdPUrMJFDIY6TK3AltsBx72MaMsLQ1JO/Ou24IeHINHXzUC1FlS9yQa48cpxnhX5kzXNyGs3oa0qaFbvnr7RgYRWtmD52n4bIZuSuW+xpBv05x2OCizdT2ZonH33nATaHGFasxROm4qYZ241VfzcUv766V6RVHgL4x9V08warugs+RENVkfzxxwhk3NmkrISabze0gSVJLHBPHxroZC6EUcf/ocobcuDrCwFqtEt90i7pNIAFUE7gZsN2uE75LmpzAWin21G7lLPcPL2k4FJVd8an1HiP2WmscJU6U89fOfMb2viObnKcCzebozBCmKGtHEuXZo9FcReOx49AnQSpmESJGs+q2dL/FApkTjQiyT4J6O5dJpoww0/r57Wx0cmmqjETKBb5rSgXM51Etk3wO09mvcPHsEwrT7qH8r9XWdyCDoEn7FCLX3/LYnf/D4SmZ633YPl5gv3v9XEwxR5+04akjgnvWDSNIaDbWBdxHNb7l4pMc+WR1bwCyMyA7KXj0RrftEGOrm9ZRLe6BkbT4cycA+j77nbPOMcyZChliV9pPQos+4TOJoTzcK2L8yWVoY409aDNVuAjdP6Yum0R2maBGl/etLmIMpJC35C5/lZ+dUNjJAM=
|
||||||
script:
|
script:
|
||||||
- make all-keyboards-quick AUTOGEN=true
|
- make all-keyboards AUTOGEN=true
|
||||||
addons:
|
addons:
|
||||||
apt:
|
apt:
|
||||||
packages:
|
packages:
|
||||||
|
|
|
@ -20,7 +20,7 @@ RUN apt-get install --no-install-recommends -y build-essential \
|
||||||
RUN apt-get clean
|
RUN apt-get clean
|
||||||
RUN rm -rf /var/lib/apt/lists/*
|
RUN rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
ENV keyboard=ergodox_ez
|
ENV keyboard=ergodox
|
||||||
ENV keymap=default
|
ENV keymap=default
|
||||||
|
|
||||||
VOLUME /qmk
|
VOLUME /qmk
|
||||||
|
|
24
Makefile
|
@ -5,8 +5,9 @@ endif
|
||||||
.DEFAULT_GOAL := all
|
.DEFAULT_GOAL := all
|
||||||
|
|
||||||
space := $(subst ,, )
|
space := $(subst ,, )
|
||||||
starting_makefile := $(subst $(space),_SPACE_,$(abspath $(firstword $(MAKEFILE_LIST))))
|
ESCAPED_ABS_PATH = $(subst $(space),_SPACE_,$(abspath $1))
|
||||||
mkfile_path := $(subst $(space),_SPACE_,$(abspath $(lastword $(MAKEFILE_LIST))))
|
starting_makefile := $(call ESCAPED_ABS_PATH,$(firstword $(MAKEFILE_LIST)))
|
||||||
|
mkfile_path := $(call ESCAPED_ABS_PATH,$(lastword $(MAKEFILE_LIST))))
|
||||||
abs_tmk_root := $(patsubst %/,%,$(dir $(mkfile_path)))
|
abs_tmk_root := $(patsubst %/,%,$(dir $(mkfile_path)))
|
||||||
|
|
||||||
ifneq (,$(findstring /keyboards/,$(starting_makefile)))
|
ifneq (,$(findstring /keyboards/,$(starting_makefile)))
|
||||||
|
@ -83,10 +84,8 @@ endif
|
||||||
|
|
||||||
ifneq ("$(wildcard $(KEYBOARD_PATH)/$(KEYBOARD).c)","")
|
ifneq ("$(wildcard $(KEYBOARD_PATH)/$(KEYBOARD).c)","")
|
||||||
KEYBOARD_FILE = keyboards/$(KEYBOARD)/$(KEYBOARD).c
|
KEYBOARD_FILE = keyboards/$(KEYBOARD)/$(KEYBOARD).c
|
||||||
ifndef ARCH
|
ifneq ($(call ESCAPED_ABS_PATH,$(KEYBOARD_PATH)/Makefile),$(starting_makefile))
|
||||||
ifneq ("$(wildcard $(KEYBOARD_PATH)/Makefile)","")
|
-include $(KEYBOARD_PATH)/Makefile
|
||||||
include $(KEYBOARD_PATH)/Makefile
|
|
||||||
endif
|
|
||||||
endif
|
endif
|
||||||
else
|
else
|
||||||
$(error "$(KEYBOARD_PATH)/$(KEYBOARD).c" does not exist)
|
$(error "$(KEYBOARD_PATH)/$(KEYBOARD).c" does not exist)
|
||||||
|
@ -101,7 +100,9 @@ ifdef SUBPROJECT
|
||||||
ifneq ("$(wildcard $(SUBPROJECT_PATH)/$(SUBPROJECT).c)","")
|
ifneq ("$(wildcard $(SUBPROJECT_PATH)/$(SUBPROJECT).c)","")
|
||||||
OPT_DEFS += -DSUBPROJECT_$(SUBPROJECT)
|
OPT_DEFS += -DSUBPROJECT_$(SUBPROJECT)
|
||||||
SUBPROJECT_FILE = keyboards/$(KEYBOARD)/$(SUBPROJECT)/$(SUBPROJECT).c
|
SUBPROJECT_FILE = keyboards/$(KEYBOARD)/$(SUBPROJECT)/$(SUBPROJECT).c
|
||||||
|
ifneq ($(call ESCAPED_ABS_PATH,$(SUBPROJECT_PATH)/Makefile),$(starting_makefile))
|
||||||
-include $(SUBPROJECT_PATH)/Makefile
|
-include $(SUBPROJECT_PATH)/Makefile
|
||||||
|
endif
|
||||||
else
|
else
|
||||||
$(error "$(SUBPROJECT_PATH)/$(SUBPROJECT).c" does not exist)
|
$(error "$(SUBPROJECT_PATH)/$(SUBPROJECT).c" does not exist)
|
||||||
endif
|
endif
|
||||||
|
@ -119,23 +120,28 @@ endif
|
||||||
KEYMAP_PATH = $(KEYBOARD_PATH)/keymaps/$(KEYMAP)
|
KEYMAP_PATH = $(KEYBOARD_PATH)/keymaps/$(KEYMAP)
|
||||||
ifneq ("$(wildcard $(KEYMAP_PATH)/keymap.c)","")
|
ifneq ("$(wildcard $(KEYMAP_PATH)/keymap.c)","")
|
||||||
KEYMAP_FILE = keyboards/$(KEYBOARD)/keymaps/$(KEYMAP)/keymap.c
|
KEYMAP_FILE = keyboards/$(KEYBOARD)/keymaps/$(KEYMAP)/keymap.c
|
||||||
|
ifneq ($(call ESCAPED_ABS_PATH,$(KEYMAP_PATH)/Makefile),$(starting_makefile))
|
||||||
-include $(KEYMAP_PATH)/Makefile
|
-include $(KEYMAP_PATH)/Makefile
|
||||||
|
endif
|
||||||
else
|
else
|
||||||
ifeq ("$(wildcard $(SUBPROJECT_PATH)/keymaps/$(KEYMAP)/keymap.c)","")
|
ifeq ("$(wildcard $(SUBPROJECT_PATH)/keymaps/$(KEYMAP)/keymap.c)","")
|
||||||
$(error "$(KEYMAP_PATH)/keymap.c" does not exist)
|
$(error "$(KEYMAP_PATH)/keymap.c" does not exist)
|
||||||
else
|
else
|
||||||
KEYMAP_PATH = $(SUBPROJECT_PATH)/keymaps/$(KEYMAP)
|
KEYMAP_PATH = $(SUBPROJECT_PATH)/keymaps/$(KEYMAP)
|
||||||
KEYMAP_FILE = keyboards/$(KEYBOARD)/$(SUBPROJECT)/keymaps/$(KEYMAP)/keymap.c
|
KEYMAP_FILE = keyboards/$(KEYBOARD)/$(SUBPROJECT)/keymaps/$(KEYMAP)/keymap.c
|
||||||
|
ifneq ($(call ESCAPED_ABS_PATH,$(KEYMAP_PATH)/Makefile),$(starting_makefile))
|
||||||
-include $(KEYMAP_PATH)/Makefile
|
-include $(KEYMAP_PATH)/Makefile
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
ifdef SUBPROJECT
|
ifdef SUBPROJECT
|
||||||
TARGET ?= $(KEYBOARD)_$(SUBPROJECT)_$(KEYMAP)
|
TARGET ?= $(KEYBOARD)_$(SUBPROJECT)_$(KEYMAP)
|
||||||
else
|
else
|
||||||
TARGET ?= $(KEYBOARD)_$(KEYMAP)
|
TARGET ?= $(KEYBOARD)_$(KEYMAP)
|
||||||
endif
|
endif
|
||||||
BUILD_DIR = .build
|
|
||||||
|
BUILD_DIR = $(TOP_DIR)/.build
|
||||||
|
|
||||||
# Object files directory
|
# Object files directory
|
||||||
# To put object files in current directory, use a dot (.), do NOT make
|
# To put object files in current directory, use a dot (.), do NOT make
|
||||||
|
@ -265,4 +271,6 @@ include $(TMK_PATH)/rules.mk
|
||||||
GIT_VERSION := $(shell git describe --abbrev=6 --dirty --always --tags 2>/dev/null || date +"%Y-%m-%d-%H:%M:%S")
|
GIT_VERSION := $(shell git describe --abbrev=6 --dirty --always --tags 2>/dev/null || date +"%Y-%m-%d-%H:%M:%S")
|
||||||
BUILD_DATE := $(shell date +"%Y-%m-%d-%H:%M:%S")
|
BUILD_DATE := $(shell date +"%Y-%m-%d-%H:%M:%S")
|
||||||
OPT_DEFS += -DQMK_KEYBOARD=\"$(KEYBOARD)\" -DQMK_KEYMAP=\"$(KEYMAP)\"
|
OPT_DEFS += -DQMK_KEYBOARD=\"$(KEYBOARD)\" -DQMK_KEYMAP=\"$(KEYMAP)\"
|
||||||
OPT_DEFS += -DQMK_VERSION=\"$(GIT_VERSION)\" -DQMK_BUILDDATE=\"$(BUILD_DATE)\"
|
|
||||||
|
$(shell echo '#define QMK_VERSION "$(GIT_VERSION)"' > $(QUANTUM_PATH)/version.h)
|
||||||
|
$(shell echo '#define QMK_BUILDDATE "$(BUILD_DATE)"' >> $(QUANTUM_PATH)/version.h)
|
2
Vagrantfile
vendored
|
@ -91,7 +91,7 @@ Vagrant.configure(2) do |config|
|
||||||
|
|
||||||
Or you can copy and paste the example line below.
|
Or you can copy and paste the example line below.
|
||||||
|
|
||||||
cd /vagrant; cd keyboards; cd ergodox_ez; make clean; make
|
cd /vagrant; cd keyboards; cd ergodox; make clean; make
|
||||||
|
|
||||||
|
|
||||||
EOT
|
EOT
|
||||||
|
|
|
@ -34,7 +34,7 @@ You can find some keyboard specific projects under `converter` and `keyboard` di
|
||||||
* [atomic](keyboards/atomic/) - [Atomic] Ortholinear 60% keyboard
|
* [atomic](keyboards/atomic/) - [Atomic] Ortholinear 60% keyboard
|
||||||
|
|
||||||
### Ergodox EZ
|
### Ergodox EZ
|
||||||
* [ergodox_ez](keyboards/ergodox_ez) - [Ergodox_EZ] Assembled split keyboard
|
* [ergodox_ez](keyboards/ergodox/ez) - [Ergodox_EZ] Assembled split keyboard
|
||||||
|
|
||||||
## Other projects
|
## Other projects
|
||||||
|
|
||||||
|
|
|
@ -20,7 +20,7 @@ See [/doc/keymap.md](/doc/keymap.md).
|
||||||
|
|
||||||
## Flashing the firmware
|
## Flashing the firmware
|
||||||
|
|
||||||
The "easy" way to flash the firmware is using a tool from your host OS like the Teensy programming app. [ErgoDox EZ](/keyboards/ergodox_ez/readme.md) gives a great example.
|
The "easy" way to flash the firmware is using a tool from your host OS like the Teensy programming app. [ErgoDox EZ](/keyboards/ergodox/readme.md) gives a great example.
|
||||||
|
|
||||||
If you want to program via the command line you can uncomment the ['modifyvm'] lines in the Vagrantfile to enable the USB passthrough into Linux and then program using the command line tools like dfu-util/dfu-programmer or you can install the Teensy CLI version.
|
If you want to program via the command line you can uncomment the ['modifyvm'] lines in the Vagrantfile to enable the USB passthrough into Linux and then program using the command line tools like dfu-util/dfu-programmer or you can install the Teensy CLI version.
|
||||||
|
|
96
doc/basic_how_keyboards_work.md
Normal file
|
@ -0,0 +1,96 @@
|
||||||
|
# How keys are registered, and interpreted by computers
|
||||||
|
|
||||||
|
In this file, you can will learn the concepts of how keyboards work over USB,
|
||||||
|
and you'll be able to better understand what you can expect from changing your
|
||||||
|
firmware directly.
|
||||||
|
|
||||||
|
## Schematic view
|
||||||
|
|
||||||
|
Whenever you type on 1 particular key, here is the chain of actions taking
|
||||||
|
place:
|
||||||
|
|
||||||
|
``` text
|
||||||
|
+------+ +-----+ +----------+ +----------+ +----+
|
||||||
|
| User |-------->| Key |------>| Firmware |----->| USB wire |---->| OS |
|
||||||
|
+------+ +-----+ +----------+ +----------+ |----+
|
||||||
|
```
|
||||||
|
|
||||||
|
This scheme is a very simple view of what's going on, and more details follow
|
||||||
|
in the next sections.
|
||||||
|
|
||||||
|
## 1. You Press a Key
|
||||||
|
|
||||||
|
Whenever you press a key, the firmware of your keyboard can register this event.
|
||||||
|
It can register when the key is pressed, held and released.
|
||||||
|
|
||||||
|
This usually happens with a [periodic scan of key presses with a frequency around 100 hz](https://github.com/benblazak/ergodox-firmware/blob/master/references.md#typical-keyboard-information).
|
||||||
|
This speed often is limited by the mechanical key response time, the protocol
|
||||||
|
to transfer those key presses (here USB HID), and by the software it is used in.
|
||||||
|
|
||||||
|
## 2. What the Firmware Sends
|
||||||
|
|
||||||
|
The [HID specification](http://www.usb.org/developers/hidpage/Hut1_12v2.pdf)
|
||||||
|
tells what a keyboard can actually send through USB to have a chance to be
|
||||||
|
properly recognised. This includes a pre-defined list of keycodes which are
|
||||||
|
simple numbers from `0x00` to `0xE7`. The firmware assigns a keycode to each
|
||||||
|
key of the keyboard.
|
||||||
|
|
||||||
|
The firmware does not send actually letters or characters, but only keycodes.
|
||||||
|
Thus, by modifying the firmware, you only can modify what keycode is sent over
|
||||||
|
USB for a given key.
|
||||||
|
|
||||||
|
## 3. What the Operating System Does
|
||||||
|
|
||||||
|
Once the keycode reaches the operating system, a piece of software has to have
|
||||||
|
it match an actual character thanks to a keyboard layout. For example, if your
|
||||||
|
layout is set to QWERTY, a sample of the matching table is as follow:
|
||||||
|
|
||||||
|
``` text
|
||||||
|
| keycode | character |
|
||||||
|
|---------+-----------|
|
||||||
|
| 0x04 | a/A |
|
||||||
|
| 0x05 | b/B |
|
||||||
|
| 0x06 | c/C |
|
||||||
|
| ... | ... |
|
||||||
|
| 0x1C | y/Y |
|
||||||
|
| 0x1D | z/Z |
|
||||||
|
| ... | ... |
|
||||||
|
|---------+-----------|
|
||||||
|
```
|
||||||
|
|
||||||
|
## Back to the firmware
|
||||||
|
|
||||||
|
As the layout is generally fixed (unless you create your own), the firmware can
|
||||||
|
actually call a keycode by its layout name directly to ease things for you.
|
||||||
|
|
||||||
|
This is exactly what is done here with `KC_A` actually representing `0x04` in
|
||||||
|
QWERTY. The full list can be found in `keycode.txt`.
|
||||||
|
|
||||||
|
## List of Characters You Can Send
|
||||||
|
|
||||||
|
Putting aside shortcuts, having a limited set of keycodes mapped to a limited
|
||||||
|
layout means that **the list of characters you can assign to a given key only
|
||||||
|
is the ones present in the layout**.
|
||||||
|
|
||||||
|
For example, this means that if you have a QWERTY US layout, and you want to
|
||||||
|
assign 1 key to produce `€` (euro currency symbol), you are unable to do so,
|
||||||
|
because the QWERTY US layout does not have such mapping. You could fix that by
|
||||||
|
using a QWERTY UK layout, or a QWERTY US International.
|
||||||
|
|
||||||
|
You may wonder why a keyboard layout containing all of Unicode is not devised
|
||||||
|
then? The limited number of keycode available through USB simply disallow such
|
||||||
|
a thing.
|
||||||
|
|
||||||
|
## How to (Maybe) Enter Unicode Characters
|
||||||
|
|
||||||
|
You can have the firmware send *sequences of keys* to use the [software Unicode
|
||||||
|
Input
|
||||||
|
Method](https://en.wikipedia.org/wiki/Unicode_input#Hexadecimal_code_input) of
|
||||||
|
the target operating system, thus effectively entering characters independently
|
||||||
|
of the layout defined in the OS.
|
||||||
|
|
||||||
|
Yet, it does come with multiple disadvantages:
|
||||||
|
|
||||||
|
- Tied to a specific OS a a time (need recompilation when changing OS);
|
||||||
|
- Within a given OS, does not work in all software;
|
||||||
|
- Limited to a subset of Unicode on some systems.
|
34
keyboards/ergodox/Makefile
Normal file
|
@ -0,0 +1,34 @@
|
||||||
|
#----------------------------------------------------------------------------
|
||||||
|
# On command line:
|
||||||
|
#
|
||||||
|
# make = Make software.
|
||||||
|
#
|
||||||
|
# make clean = Clean out built project files.
|
||||||
|
#
|
||||||
|
# That's pretty much all you need. To compile, always go make clean,
|
||||||
|
# followed by make.
|
||||||
|
#
|
||||||
|
# For advanced users only:
|
||||||
|
# make teensy = Download the hex file to the device, using teensy_loader_cli.
|
||||||
|
# (must have teensy_loader_cli installed).
|
||||||
|
#
|
||||||
|
#----------------------------------------------------------------------------
|
||||||
|
SUBPROJECT_DEFAULT = ez
|
||||||
|
|
||||||
|
# Build Options
|
||||||
|
# comment out to disable the options.
|
||||||
|
#
|
||||||
|
BOOTMAGIC_ENABLE ?= no # 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
|
||||||
|
CUSTOM_MATRIX ?= yes # Custom matrix file for the ErgoDox EZ
|
||||||
|
SLEEP_LED_ENABLE ?= yes # Breathing sleep LED during USB suspend
|
||||||
|
NKRO_ENABLE ?= yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
|
||||||
|
MIDI_ENABLE ?= no # MIDI controls
|
||||||
|
UNICODE_ENABLE ?= yes # Unicode
|
||||||
|
|
||||||
|
ifndef QUANTUM_DIR
|
||||||
|
include ../../Makefile
|
||||||
|
endif
|
36
keyboards/ergodox/config.h
Normal file
|
@ -0,0 +1,36 @@
|
||||||
|
#ifndef KEYBOARDS_ERGODOX_CONFIG_H_
|
||||||
|
#define KEYBOARDS_ERGODOX_CONFIG_H_
|
||||||
|
|
||||||
|
#define MOUSEKEY_DELAY 100
|
||||||
|
#define MOUSEKEY_INTERVAL 20
|
||||||
|
#define MOUSEKEY_MAX_SPEED 3
|
||||||
|
#define MOUSEKEY_TIME_TO_MAX 10
|
||||||
|
|
||||||
|
#define TAPPING_TOGGLE 1
|
||||||
|
|
||||||
|
/* define if matrix has ghost */
|
||||||
|
//#define MATRIX_HAS_GHOST
|
||||||
|
|
||||||
|
#define TAPPING_TERM 200
|
||||||
|
#define IGNORE_MOD_TAP_INTERRUPT // this makes it possible to do rolling combos (zx) with keys that convert to other keys on hold (z becomes ctrl when you hold it, and when this option isn't enabled, z rapidly followed by x actually sends Ctrl-x. That's bad.)
|
||||||
|
|
||||||
|
/* 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
|
||||||
|
|
||||||
|
/* key combination for command */
|
||||||
|
#define IS_COMMAND() ( \
|
||||||
|
keyboard_report->mods == (MOD_BIT(KC_LCTL) | MOD_BIT(KC_RCTL)) || \
|
||||||
|
keyboard_report->mods == (MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT)) \
|
||||||
|
)
|
||||||
|
|
||||||
|
#ifdef SUBPROJECT_ez
|
||||||
|
#include "ez/config.h"
|
||||||
|
#endif
|
||||||
|
#ifdef SUBPROJECT_infinity
|
||||||
|
#include "infinity/config.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#endif /* KEYBOARDS_ERGODOX_CONFIG_H_ */
|
0
keyboards/ergodox/ergodox.c
Normal file
10
keyboards/ergodox/ergodox.h
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
#ifndef KEYBOARDS_ERGODOX_ERGODOX_H_
|
||||||
|
#define KEYBOARDS_ERGODOX_ERGODOX_H_
|
||||||
|
#ifdef SUBPROJECT_ez
|
||||||
|
#include "ez.h"
|
||||||
|
#endif
|
||||||
|
#ifdef SUBPROJECT_infinity
|
||||||
|
#include "infinity.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* KEYBOARDS_ERGODOX_ERGODOX_H_ */
|
|
@ -70,17 +70,7 @@ OPT_DEFS += -DBOOTLOADER_SIZE=512
|
||||||
# Build Options
|
# Build Options
|
||||||
# comment out to disable the options.
|
# comment out to disable the options.
|
||||||
#
|
#
|
||||||
BOOTMAGIC_ENABLE ?= no # 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
|
|
||||||
CUSTOM_MATRIX ?= yes # Custom matrix file for the ErgoDox EZ
|
|
||||||
SLEEP_LED_ENABLE ?= yes # Breathing sleep LED during USB suspend
|
|
||||||
NKRO_ENABLE ?= yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
|
|
||||||
MIDI_ENABLE ?= no # MIDI controls
|
|
||||||
UNICODE_ENABLE ?= yes # Unicode
|
|
||||||
|
|
||||||
ifndef QUANTUM_DIR
|
ifndef QUANTUM_DIR
|
||||||
include ../../Makefile
|
include ../../../Makefile
|
||||||
endif
|
endif
|
|
@ -16,10 +16,10 @@ 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
|
#ifndef ERGODOX_EZ_CONFIG_H
|
||||||
#define CONFIG_H
|
#define ERGODOX_EZ_CONFIG_H
|
||||||
|
|
||||||
#include "config_common.h"
|
#include "../config.h"
|
||||||
|
|
||||||
/* USB Device descriptor parameter */
|
/* USB Device descriptor parameter */
|
||||||
#define VENDOR_ID 0xFEED
|
#define VENDOR_ID 0xFEED
|
||||||
|
@ -33,34 +33,15 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
#define MATRIX_ROWS 14
|
#define MATRIX_ROWS 14
|
||||||
#define MATRIX_COLS 6
|
#define MATRIX_COLS 6
|
||||||
|
|
||||||
#define MOUSEKEY_DELAY 100
|
|
||||||
#define MOUSEKEY_INTERVAL 20
|
|
||||||
#define MOUSEKEY_MAX_SPEED 3
|
|
||||||
#define MOUSEKEY_TIME_TO_MAX 10
|
|
||||||
|
|
||||||
#define TAPPING_TOGGLE 1
|
|
||||||
|
|
||||||
/* define if matrix has ghost */
|
|
||||||
//#define MATRIX_HAS_GHOST
|
|
||||||
|
|
||||||
/* number of backlight levels */
|
/* number of backlight levels */
|
||||||
#define BACKLIGHT_LEVELS 3
|
#define BACKLIGHT_LEVELS 3
|
||||||
|
|
||||||
|
#define LED_BRIGHTNESS_LO 15
|
||||||
|
#define LED_BRIGHTNESS_HI 255
|
||||||
|
|
||||||
|
|
||||||
/* Set 0 if debouncing isn't needed */
|
/* Set 0 if debouncing isn't needed */
|
||||||
#define DEBOUNCE 5
|
#define DEBOUNCE 5
|
||||||
#define TAPPING_TERM 200
|
|
||||||
#define IGNORE_MOD_TAP_INTERRUPT // this makes it possible to do rolling combos (zx) with keys that convert to other keys on hold (z becomes ctrl when you hold it, and when this option isn't enabled, z rapidly followed by x actually sends Ctrl-x. That's bad.)
|
|
||||||
|
|
||||||
/* 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
|
|
||||||
|
|
||||||
/* key combination for command */
|
|
||||||
#define IS_COMMAND() ( \
|
|
||||||
keyboard_report->mods == (MOD_BIT(KC_LCTL) | MOD_BIT(KC_RCTL)) || \
|
|
||||||
keyboard_report->mods == (MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT)) \
|
|
||||||
)
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Feature disable options
|
* Feature disable options
|
|
@ -1,4 +1,4 @@
|
||||||
#include "ergodox_ez.h"
|
#include "ez.h"
|
||||||
#include "i2cmaster.h"
|
#include "i2cmaster.h"
|
||||||
|
|
||||||
bool i2c_initialized = 0;
|
bool i2c_initialized = 0;
|
|
@ -33,7 +33,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
#include "util.h"
|
#include "util.h"
|
||||||
#include "matrix.h"
|
#include "matrix.h"
|
||||||
#include "ergodox_ez.h"
|
#include "ez.h"
|
||||||
#include "i2cmaster.h"
|
#include "i2cmaster.h"
|
||||||
#ifdef DEBUG_MATRIX_SCAN_RATE
|
#ifdef DEBUG_MATRIX_SCAN_RATE
|
||||||
#include "timer.h"
|
#include "timer.h"
|
|
@ -52,34 +52,26 @@ ARMV = 7
|
||||||
# Vector table for application
|
# Vector table for application
|
||||||
# 0x00000000-0x00001000 area is occupied by bootlaoder.*/
|
# 0x00000000-0x00001000 area is occupied by bootlaoder.*/
|
||||||
# The CORTEX_VTOR... is needed only for MCHCK/Infinity KB
|
# The CORTEX_VTOR... is needed only for MCHCK/Infinity KB
|
||||||
OPT_DEFS = -DCORTEX_VTOR_INIT=0x00002000
|
OPT_DEFS += -DCORTEX_VTOR_INIT=0x00002000
|
||||||
|
|
||||||
# Build Options
|
# Build Options
|
||||||
# comment out to disable the options.
|
# comment out to disable the options.
|
||||||
#
|
#
|
||||||
BOOTMAGIC_ENABLE ?= yes # Virtual DIP switch configuration
|
|
||||||
## (Note that for BOOTMAGIC on Teensy LC you have to use a custom .ld script.)
|
|
||||||
MOUSEKEY_ENABLE ?= yes # Mouse keys
|
|
||||||
EXTRAKEY_ENABLE ?= yes # Audio control and System control
|
|
||||||
CONSOLE_ENABLE ?= yes # Console for debug
|
|
||||||
COMMAND_ENABLE ?= yes # Commands for debug and configuration
|
|
||||||
SLEEP_LED_ENABLE ?= yes # Breathing sleep LED during USB suspend
|
|
||||||
NKRO_ENABLE ?= yes # USB Nkey Rollover
|
|
||||||
CUSTOM_MATRIX ?= yes # Custom matrix file
|
CUSTOM_MATRIX ?= yes # Custom matrix file
|
||||||
SERIAL_LINK_ENABLE = yes
|
SERIAL_LINK_ENABLE = yes
|
||||||
VISUALIZER_ENABLE ?= yes
|
VISUALIZER_ENABLE ?= no #temporarily disabled to make everything compile
|
||||||
LCD_ENABLE ?= yes
|
LCD_ENABLE ?= yes
|
||||||
LED_ENABLE ?= yes
|
LED_ENABLE ?= yes
|
||||||
LCD_BACKLIGHT_ENABLE ?= yes
|
LCD_BACKLIGHT_ENABLE ?= yes
|
||||||
|
|
||||||
|
ifndef QUANTUM_DIR
|
||||||
|
include ../../../Makefile
|
||||||
|
endif
|
||||||
|
|
||||||
ifdef LCD_ENABLE
|
ifdef LCD_ENABLE
|
||||||
include drivers/gdisp/st7565ergodox/driver.mk
|
include $(SUBPROJECT_PATH)/drivers/gdisp/st7565ergodox/driver.mk
|
||||||
endif
|
endif
|
||||||
|
|
||||||
ifdef LED_ENABLE
|
ifdef LED_ENABLE
|
||||||
include drivers/gdisp/IS31FL3731C/driver.mk
|
include $(SUBPROJECT_PATH)/drivers/gdisp/IS31FL3731C/driver.mk
|
||||||
endif
|
|
||||||
|
|
||||||
ifndef QUANTUM_DIR
|
|
||||||
include ../../Makefile
|
|
||||||
endif
|
endif
|
|
@ -15,8 +15,10 @@ 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
|
#ifndef INFINITY_ERGODOX_CONFIG_H
|
||||||
#define CONFIG_H
|
#define INFINITY_ERGODOX_CONFIG_H
|
||||||
|
|
||||||
|
#include "../config.h"
|
||||||
|
|
||||||
|
|
||||||
/* USB Device descriptor parameter */
|
/* USB Device descriptor parameter */
|
||||||
|
@ -35,25 +37,18 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
#define MATRIX_COLS 5
|
#define MATRIX_COLS 5
|
||||||
#define LOCAL_MATRIX_ROWS 9
|
#define LOCAL_MATRIX_ROWS 9
|
||||||
|
|
||||||
|
/* number of backlight levels */
|
||||||
|
#define BACKLIGHT_LEVELS 3
|
||||||
|
|
||||||
|
#define LED_BRIGHTNESS_LO 15
|
||||||
|
#define LED_BRIGHTNESS_HI 255
|
||||||
|
|
||||||
/* define if matrix has ghost */
|
/* define if matrix has ghost */
|
||||||
//#define MATRIX_HAS_GHOST
|
//#define MATRIX_HAS_GHOST
|
||||||
|
|
||||||
/* Set 0 if debouncing isn't needed */
|
/* Set 0 if debouncing isn't needed */
|
||||||
#define DEBOUNCE 5
|
#define DEBOUNCE 5
|
||||||
|
|
||||||
/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
|
|
||||||
//#define LOCKING_SUPPORT_ENABLE
|
|
||||||
/* Locking resynchronize hack */
|
|
||||||
//#define LOCKING_RESYNC_ENABLE
|
|
||||||
|
|
||||||
/* key combination for command */
|
|
||||||
#define IS_COMMAND() ( \
|
|
||||||
keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
|
|
||||||
)
|
|
||||||
|
|
||||||
/* Keymap for Infiity prototype */
|
|
||||||
#define INFINITY_PROTOTYPE
|
|
||||||
|
|
||||||
#define SERIAL_LINK_BAUD 562500
|
#define SERIAL_LINK_BAUD 562500
|
||||||
#define SERIAL_LINK_THREAD_PRIORITY (NORMALPRIO - 1)
|
#define SERIAL_LINK_THREAD_PRIORITY (NORMALPRIO - 1)
|
||||||
// The visualizer needs gfx thread priorities
|
// The visualizer needs gfx thread priorities
|
|
@ -1,8 +1,10 @@
|
||||||
#include "infinity_ergodox.h"
|
#include "infinity.h"
|
||||||
#include "ch.h"
|
#include "ch.h"
|
||||||
#include "hal.h"
|
#include "hal.h"
|
||||||
#include "serial_link/system/serial_link.h"
|
#include "serial_link/system/serial_link.h"
|
||||||
|
#ifdef VISUALIZER_ENABLE
|
||||||
#include "lcd_backlight.h"
|
#include "lcd_backlight.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
void init_serial_link_hal(void) {
|
void init_serial_link_hal(void) {
|
||||||
PORTA->PCR[1] = PORTx_PCRn_PE | PORTx_PCRn_PS | PORTx_PCRn_PFE | PORTx_PCRn_MUX(2);
|
PORTA->PCR[1] = PORTx_PCRn_PE | PORTx_PCRn_PS | PORTx_PCRn_PFE | PORTx_PCRn_MUX(2);
|
||||||
|
@ -36,7 +38,7 @@ void init_serial_link_hal(void) {
|
||||||
// Using a higher pre-scalar without flicker is possible but FTM0_MOD will need to be reduced
|
// Using a higher pre-scalar without flicker is possible but FTM0_MOD will need to be reduced
|
||||||
// Which will reduce the brightness range
|
// Which will reduce the brightness range
|
||||||
#define PRESCALAR_DEFINE 0
|
#define PRESCALAR_DEFINE 0
|
||||||
|
#ifdef VISUALIZER_ENABLE
|
||||||
void lcd_backlight_hal_init(void) {
|
void lcd_backlight_hal_init(void) {
|
||||||
// Setup Backlight
|
// Setup Backlight
|
||||||
SIM->SCGC6 |= SIM_SCGC6_FTM0;
|
SIM->SCGC6 |= SIM_SCGC6_FTM0;
|
||||||
|
@ -74,3 +76,57 @@ void lcd_backlight_hal_color(uint16_t r, uint16_t g, uint16_t b) {
|
||||||
CHANNEL_GREEN.CnV = g;
|
CHANNEL_GREEN.CnV = g;
|
||||||
CHANNEL_BLUE.CnV = b;
|
CHANNEL_BLUE.CnV = b;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
__attribute__ ((weak))
|
||||||
|
void matrix_init_user(void) {
|
||||||
|
}
|
||||||
|
|
||||||
|
__attribute__ ((weak))
|
||||||
|
void matrix_scan_user(void) {
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
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();
|
||||||
|
}
|
||||||
|
|
||||||
|
void ergodox_board_led_on(void){
|
||||||
|
}
|
||||||
|
|
||||||
|
void ergodox_right_led_1_on(void){
|
||||||
|
}
|
||||||
|
|
||||||
|
void ergodox_right_led_2_on(void){
|
||||||
|
}
|
||||||
|
|
||||||
|
void ergodox_right_led_3_on(void){
|
||||||
|
}
|
||||||
|
|
||||||
|
void ergodox_right_led_on(uint8_t led){
|
||||||
|
}
|
||||||
|
|
||||||
|
void ergodox_board_led_off(void){
|
||||||
|
}
|
||||||
|
|
||||||
|
void ergodox_right_led_1_off(void){
|
||||||
|
}
|
||||||
|
|
||||||
|
void ergodox_right_led_2_off(void){
|
||||||
|
}
|
||||||
|
|
||||||
|
void ergodox_right_led_3_off(void){
|
||||||
|
}
|
||||||
|
|
||||||
|
void ergodox_right_led_off(uint8_t led){
|
||||||
|
}
|
110
keyboards/ergodox/infinity/infinity.h
Normal file
|
@ -0,0 +1,110 @@
|
||||||
|
#ifndef KEYBOARDS_ERGODOX_INFINITY_INFINITY_H_
|
||||||
|
#define KEYBOARDS_ERGODOX_INFINITY_INFINITY_H_
|
||||||
|
|
||||||
|
#include "quantum.h"
|
||||||
|
|
||||||
|
void ergodox_board_led_on(void);
|
||||||
|
void ergodox_right_led_1_on(void);
|
||||||
|
void ergodox_right_led_2_on(void);
|
||||||
|
void ergodox_right_led_3_on(void);
|
||||||
|
void ergodox_right_led_on(uint8_t led);
|
||||||
|
|
||||||
|
void ergodox_board_led_off(void);
|
||||||
|
void ergodox_right_led_1_off(void);
|
||||||
|
void ergodox_right_led_2_off(void);
|
||||||
|
void ergodox_right_led_3_off(void);
|
||||||
|
void ergodox_right_led_off(uint8_t led);
|
||||||
|
|
||||||
|
inline void ergodox_led_all_on(void)
|
||||||
|
{
|
||||||
|
ergodox_board_led_on();
|
||||||
|
ergodox_right_led_1_on();
|
||||||
|
ergodox_right_led_2_on();
|
||||||
|
ergodox_right_led_3_on();
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void ergodox_led_all_off(void)
|
||||||
|
{
|
||||||
|
ergodox_board_led_off();
|
||||||
|
ergodox_right_led_1_off();
|
||||||
|
ergodox_right_led_2_off();
|
||||||
|
ergodox_right_led_3_off();
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void ergodox_right_led_1_set(uint8_t n){
|
||||||
|
if (n) {
|
||||||
|
ergodox_right_led_1_on();
|
||||||
|
} else {
|
||||||
|
ergodox_right_led_1_off();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void ergodox_right_led_2_set(uint8_t n){
|
||||||
|
if (n) {
|
||||||
|
ergodox_right_led_2_on();
|
||||||
|
} else {
|
||||||
|
ergodox_right_led_2_off();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void ergodox_right_led_3_set(uint8_t n){
|
||||||
|
if (n) {
|
||||||
|
ergodox_right_led_3_on();
|
||||||
|
} else {
|
||||||
|
ergodox_right_led_3_off();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void ergodox_right_led_set(uint8_t led, uint8_t n){
|
||||||
|
if (n) {
|
||||||
|
ergodox_right_led_on(led);
|
||||||
|
} else {
|
||||||
|
ergodox_right_led_off(led);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void ergodox_led_all_set(uint8_t n) {
|
||||||
|
ergodox_right_led_1_set(n);
|
||||||
|
ergodox_right_led_2_set(n);
|
||||||
|
ergodox_right_led_3_set(n);
|
||||||
|
}
|
||||||
|
|
||||||
|
#define KEYMAP( \
|
||||||
|
A80, A70, A60, A50, A40, A30, A20, \
|
||||||
|
A81, A71, A61, A51, A41, A31, A21, \
|
||||||
|
A82, A72, A62, A52, A42, A32, \
|
||||||
|
A83, A73, A63, A53, A43, A33, A23, \
|
||||||
|
A84, A74, A64, A54, A44, \
|
||||||
|
A13, A03, \
|
||||||
|
A04, \
|
||||||
|
A34, A24, A14, \
|
||||||
|
B20, B30, B40, B50, B60, B70, B80, \
|
||||||
|
B21, B31, B41, B51, B61, B71, B81, \
|
||||||
|
B32, B42, B52, B62, B72, B82, \
|
||||||
|
B23, B33, B43, B53, B63, B73, B83, \
|
||||||
|
B44, B54, B64, B74, B84, \
|
||||||
|
B03, B13, \
|
||||||
|
B04, \
|
||||||
|
B14, B24, B34 \
|
||||||
|
) { \
|
||||||
|
{ KC_NO, KC_NO, KC_NO, A03, A04 }, \
|
||||||
|
{ KC_NO, KC_NO, KC_NO, A13, A14 }, \
|
||||||
|
{ A20, A21, KC_NO, A23, A24 }, \
|
||||||
|
{ A30, A31, A32, A33, A34 }, \
|
||||||
|
{ A40, A41, A42, A43, A44 }, \
|
||||||
|
{ A50, A51, A52, A53, A54 }, \
|
||||||
|
{ A60, A61, A62, A63, A64 }, \
|
||||||
|
{ A70, A71, A72, A73, A74 }, \
|
||||||
|
{ A80, A81, A82, A83, A84 }, \
|
||||||
|
{ KC_NO, KC_NO, KC_NO, B03, B04 }, \
|
||||||
|
{ KC_NO, KC_NO, KC_NO, B13, B14 }, \
|
||||||
|
{ B20, B21, KC_NO, B23, B24 }, \
|
||||||
|
{ B30, B31, B32, B33, B34 }, \
|
||||||
|
{ B40, B41, B42, B43, B44 }, \
|
||||||
|
{ B50, B51, B52, B53, B54 }, \
|
||||||
|
{ B60, B61, B62, B63, B64 }, \
|
||||||
|
{ B70, B71, B72, B73, B74 }, \
|
||||||
|
{ B80, B81, B82, B83, B84 } \
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /* KEYBOARDS_ERGODOX_INFINITY_INFINITY_H_ */
|
|
@ -63,6 +63,8 @@ void matrix_init(void)
|
||||||
|
|
||||||
memset(matrix, 0, MATRIX_ROWS);
|
memset(matrix, 0, MATRIX_ROWS);
|
||||||
memset(matrix_debouncing, 0, LOCAL_MATRIX_ROWS);
|
memset(matrix_debouncing, 0, LOCAL_MATRIX_ROWS);
|
||||||
|
|
||||||
|
matrix_init_quantum();
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8_t matrix_scan(void)
|
uint8_t matrix_scan(void)
|
||||||
|
@ -127,6 +129,7 @@ uint8_t matrix_scan(void)
|
||||||
}
|
}
|
||||||
debouncing = false;
|
debouncing = false;
|
||||||
}
|
}
|
||||||
|
matrix_scan_quantum();
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
Before Width: | Height: | Size: 79 KiB After Width: | Height: | Size: 79 KiB |
|
@ -1,4 +1,4 @@
|
||||||
#include "ergodox_ez.h"
|
#include "ergodox.h"
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
#include "action_layer.h"
|
#include "action_layer.h"
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
#include "ergodox_ez.h"
|
#include "ergodox.h"
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
#include "action_layer.h"
|
#include "action_layer.h"
|
||||||
#include "keymap_german.h"
|
#include "keymap_german.h"
|
|
@ -1,4 +1,4 @@
|
||||||
#include "ergodox_ez.h"
|
#include "ergodox.h"
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
#include "action_layer.h"
|
#include "action_layer.h"
|
||||||
|
|
Before Width: | Height: | Size: 814 KiB After Width: | Height: | Size: 814 KiB |
|
@ -4,13 +4,19 @@ SLEEP_LED_ENABLE=no
|
||||||
UNICODE_ENABLE=no
|
UNICODE_ENABLE=no
|
||||||
FORCE_NKRO ?= yes
|
FORCE_NKRO ?= yes
|
||||||
DEBUG_ENABLE = no
|
DEBUG_ENABLE = no
|
||||||
CONSOLE_ENABLE = yes
|
CONSOLE_ENABLE = no
|
||||||
TAP_DANCE_ENABLE = yes
|
TAP_DANCE_ENABLE = yes
|
||||||
|
KEYLOGGER_ENABLE ?= yes
|
||||||
|
|
||||||
ifeq (${FORCE_NKRO},yes)
|
ifeq (${FORCE_NKRO},yes)
|
||||||
OPT_DEFS += -DFORCE_NKRO
|
OPT_DEFS += -DFORCE_NKRO
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
ifeq (${KEYLOGGER_ENABLE},yes)
|
||||||
|
OPT_DEFS += -DKEYLOGGER_ENABLE
|
||||||
|
CONSOLE_ENABLE = yes
|
||||||
|
endif
|
||||||
|
|
||||||
KEYMAP_VERSION = $(shell \
|
KEYMAP_VERSION = $(shell \
|
||||||
if [ -d "${KEYMAP_PATH}/.git" ]; then \
|
if [ -d "${KEYMAP_PATH}/.git" ]; then \
|
||||||
cd "${KEYMAP_PATH}" && git describe --abbrev=6 --dirty --always --tags --match 'v*' 2>/dev/null; \
|
cd "${KEYMAP_PATH}" && git describe --abbrev=6 --dirty --always --tags --match 'v*' 2>/dev/null; \
|
Before Width: | Height: | Size: 93 KiB After Width: | Height: | Size: 93 KiB |
Before Width: | Height: | Size: 93 KiB After Width: | Height: | Size: 93 KiB |
Before Width: | Height: | Size: 135 KiB After Width: | Height: | Size: 135 KiB |
Before Width: | Height: | Size: 66 KiB After Width: | Height: | Size: 66 KiB |
Before Width: | Height: | Size: 93 KiB After Width: | Height: | Size: 93 KiB |
Before Width: | Height: | Size: 89 KiB After Width: | Height: | Size: 89 KiB |
Before Width: | Height: | Size: 68 KiB After Width: | Height: | Size: 68 KiB |
|
@ -2,7 +2,7 @@
|
||||||
* algernon's ErgoDox EZ layout, please see the readme.md file!
|
* algernon's ErgoDox EZ layout, please see the readme.md file!
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "ergodox_ez.h"
|
#include "ergodox.h"
|
||||||
#include "led.h"
|
#include "led.h"
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
#include "action_layer.h"
|
#include "action_layer.h"
|
||||||
|
@ -11,6 +11,8 @@
|
||||||
#include "timer.h"
|
#include "timer.h"
|
||||||
#include "keymap_plover.h"
|
#include "keymap_plover.h"
|
||||||
#include "eeconfig.h"
|
#include "eeconfig.h"
|
||||||
|
#include "wait.h"
|
||||||
|
#include "version.h"
|
||||||
|
|
||||||
/* Layers */
|
/* Layers */
|
||||||
|
|
||||||
|
@ -95,7 +97,9 @@ enum {
|
||||||
/* Custom keycodes */
|
/* Custom keycodes */
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
CT_CLN = 0
|
CT_CLN = 0,
|
||||||
|
CT_MNS,
|
||||||
|
CT_TA,
|
||||||
};
|
};
|
||||||
|
|
||||||
/* States & timers */
|
/* States & timers */
|
||||||
|
@ -115,7 +119,11 @@ uint16_t oh_left_blink_timer = 0;
|
||||||
uint8_t oh_right_blink = 0;
|
uint8_t oh_right_blink = 0;
|
||||||
uint16_t oh_right_blink_timer = 0;
|
uint16_t oh_right_blink_timer = 0;
|
||||||
|
|
||||||
|
#if KEYLOGGER_ENABLE
|
||||||
bool log_enable = false;
|
bool log_enable = false;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
bool time_travel = false;
|
||||||
|
|
||||||
/* The Keymap */
|
/* The Keymap */
|
||||||
|
|
||||||
|
@ -146,7 +154,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
// left hand
|
// left hand
|
||||||
KC_GRV ,M(KF_1) ,M(KF_2) ,M(KF_3),M(KF_4),M(KF_5),M(A_PLVR)
|
KC_GRV ,M(KF_1) ,M(KF_2) ,M(KF_3),M(KF_4),M(KF_5),M(A_PLVR)
|
||||||
,M(A_MPN) ,KC_QUOT ,KC_COMM ,KC_DOT ,KC_P ,KC_Y ,KC_LBRC
|
,M(A_MPN) ,KC_QUOT ,KC_COMM ,KC_DOT ,KC_P ,KC_Y ,KC_LBRC
|
||||||
,LT(ARRW,KC_TAB) ,KC_A ,KC_O ,KC_E ,KC_U ,KC_I
|
,TD(CT_TA) ,KC_A ,KC_O ,KC_E ,KC_U ,KC_I
|
||||||
,KC_MPLY ,KC_SLSH ,KC_Q ,KC_J ,KC_K ,KC_X ,KC_LPRN
|
,KC_MPLY ,KC_SLSH ,KC_Q ,KC_J ,KC_K ,KC_X ,KC_LPRN
|
||||||
,KC_NO ,KC_NO ,KC_NO ,KC_NO ,TD(CT_CLN)
|
,KC_NO ,KC_NO ,KC_NO ,KC_NO ,TD(CT_CLN)
|
||||||
|
|
||||||
|
@ -157,9 +165,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
// right hand
|
// right hand
|
||||||
,KC_APP ,M(KF_6),M(KF_7) ,M(KF_8),M(KF_9) ,M(KF_10) ,KC_F11
|
,KC_APP ,M(KF_6),M(KF_7) ,M(KF_8),M(KF_9) ,M(KF_10) ,KC_F11
|
||||||
,KC_RBRC ,KC_F ,KC_G ,KC_C ,KC_R ,KC_L ,KC_BSLS
|
,KC_RBRC ,KC_F ,KC_G ,KC_C ,KC_R ,KC_L ,KC_BSLS
|
||||||
,KC_D ,KC_H ,KC_T ,KC_N ,KC_S ,LT(ARRW, KC_EQL)
|
,KC_D ,KC_H ,KC_T ,KC_N ,KC_S ,KC_EQL
|
||||||
,KC_RPRN ,KC_B ,KC_M ,KC_W ,KC_V ,KC_Z ,KC_MSTP
|
,KC_RPRN ,KC_B ,KC_M ,KC_W ,KC_V ,KC_Z ,KC_MSTP
|
||||||
,KC_MINS,KC_NO ,KC_NO ,KC_NO ,KC_NO
|
,TD(CT_MNS),KC_NO ,KC_NO ,KC_NO ,KC_NO
|
||||||
|
|
||||||
,OSL(NMDIA),M(OH_LEFT)
|
,OSL(NMDIA),M(OH_LEFT)
|
||||||
,KC_LEAD
|
,KC_LEAD
|
||||||
|
@ -191,7 +199,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
// left hand
|
// left hand
|
||||||
KC_GRV ,M(KF_1) ,M(KF_2) ,M(KF_3),M(KF_4),M(KF_5),M(A_PLVR)
|
KC_GRV ,M(KF_1) ,M(KF_2) ,M(KF_3),M(KF_4),M(KF_5),M(A_PLVR)
|
||||||
,M(A_MPN) ,KC_COMM ,KC_DOT ,KC_L ,KC_W ,KC_M ,KC_LBRC
|
,M(A_MPN) ,KC_COMM ,KC_DOT ,KC_L ,KC_W ,KC_M ,KC_LBRC
|
||||||
,LT(ARRW, KC_TAB) ,KC_A ,KC_O ,KC_E ,KC_I ,KC_U
|
,TD(CT_TA) ,KC_A ,KC_O ,KC_E ,KC_I ,KC_U
|
||||||
,KC_MPLY ,KC_SLSH ,KC_Z ,KC_QUOT,KC_K ,KC_X ,KC_LPRN
|
,KC_MPLY ,KC_SLSH ,KC_Z ,KC_QUOT,KC_K ,KC_X ,KC_LPRN
|
||||||
,KC_NO ,KC_NO ,KC_NO ,KC_NO ,TD(CT_CLN)
|
,KC_NO ,KC_NO ,KC_NO ,KC_NO ,TD(CT_CLN)
|
||||||
|
|
||||||
|
@ -202,9 +210,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
// right hand
|
// right hand
|
||||||
,KC_APP ,M(KF_6),M(KF_7) ,M(KF_8),M(KF_9) ,M(KF_10) ,KC_F11
|
,KC_APP ,M(KF_6),M(KF_7) ,M(KF_8),M(KF_9) ,M(KF_10) ,KC_F11
|
||||||
,KC_RBRC ,KC_F ,KC_H ,KC_C ,KC_P ,KC_Y ,KC_BSLS
|
,KC_RBRC ,KC_F ,KC_H ,KC_C ,KC_P ,KC_Y ,KC_BSLS
|
||||||
,KC_D ,KC_R ,KC_T ,KC_N ,KC_S ,LT(ARRW, KC_EQL)
|
,KC_D ,KC_R ,KC_T ,KC_N ,KC_S ,KC_EQL
|
||||||
,KC_RPRN ,KC_B ,KC_G ,KC_V ,KC_J ,KC_Q ,KC_MSTP
|
,KC_RPRN ,KC_B ,KC_G ,KC_V ,KC_J ,KC_Q ,KC_MSTP
|
||||||
,KC_MINS,KC_NO ,KC_NO ,KC_NO ,KC_NO
|
,TD(CT_MNS),KC_NO ,KC_NO ,KC_NO ,KC_NO
|
||||||
|
|
||||||
,OSL(NMDIA),M(OH_LEFT)
|
,OSL(NMDIA),M(OH_LEFT)
|
||||||
,KC_LEAD
|
,KC_LEAD
|
||||||
|
@ -852,12 +860,12 @@ void matrix_init_user(void) {
|
||||||
ergodox_led_all_on();
|
ergodox_led_all_on();
|
||||||
for (int i = LED_BRIGHTNESS_HI; i > LED_BRIGHTNESS_LO; i--) {
|
for (int i = LED_BRIGHTNESS_HI; i > LED_BRIGHTNESS_LO; i--) {
|
||||||
ergodox_led_all_set (i);
|
ergodox_led_all_set (i);
|
||||||
_delay_ms (5);
|
wait_ms (5);
|
||||||
}
|
}
|
||||||
_delay_ms(1000);
|
wait_ms(1000);
|
||||||
for (int i = LED_BRIGHTNESS_LO; i > 0; i--) {
|
for (int i = LED_BRIGHTNESS_LO; i > 0; i--) {
|
||||||
ergodox_led_all_set (i);
|
ergodox_led_all_set (i);
|
||||||
_delay_ms (10);
|
wait_ms (10);
|
||||||
}
|
}
|
||||||
ergodox_led_all_off();
|
ergodox_led_all_off();
|
||||||
|
|
||||||
|
@ -877,14 +885,14 @@ void ang_do_unicode (void) {
|
||||||
unregister_code (KC_U);
|
unregister_code (KC_U);
|
||||||
unregister_code (KC_RSFT);
|
unregister_code (KC_RSFT);
|
||||||
unregister_code (KC_RCTL);
|
unregister_code (KC_RCTL);
|
||||||
_delay_ms (100);
|
wait_ms (100);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ang_tap (uint16_t codes[]) {
|
void ang_tap (uint16_t codes[]) {
|
||||||
for (int i = 0; codes[i] != 0; i++) {
|
for (int i = 0; codes[i] != 0; i++) {
|
||||||
register_code (codes[i]);
|
register_code (codes[i]);
|
||||||
unregister_code (codes[i]);
|
unregister_code (codes[i]);
|
||||||
_delay_ms (50);
|
wait_ms (50);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -892,24 +900,92 @@ void ang_tap (uint16_t codes[]) {
|
||||||
register_code (code); \
|
register_code (code); \
|
||||||
unregister_code (code)
|
unregister_code (code)
|
||||||
|
|
||||||
void ang_tap_dance (qk_tap_dance_state_t *state) {
|
void ang_tap_dance_cln_finished (qk_tap_dance_state_t *state, void *user_data) {
|
||||||
switch (state->keycode) {
|
|
||||||
case TD(CT_CLN):
|
|
||||||
if (state->count == 1) {
|
if (state->count == 1) {
|
||||||
register_code (KC_RSFT);
|
register_code (KC_RSFT);
|
||||||
register_code (KC_SCLN);
|
register_code (KC_SCLN);
|
||||||
unregister_code (KC_SCLN);
|
|
||||||
unregister_code (KC_RSFT);
|
|
||||||
} else if (state->count == 2) {
|
} else if (state->count == 2) {
|
||||||
register_code (KC_SCLN);
|
register_code (KC_SCLN);
|
||||||
unregister_code (KC_SCLN);
|
|
||||||
reset_tap_dance (state);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ang_tap_dance_cln_reset (qk_tap_dance_state_t *state, void *user_data) {
|
||||||
|
if (state->count == 1) {
|
||||||
|
unregister_code (KC_SCLN);
|
||||||
|
unregister_code (KC_RSFT);
|
||||||
|
} else if (state->count == 2) {
|
||||||
|
unregister_code (KC_SCLN);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void ang_tap_dance_mns_finished (qk_tap_dance_state_t *state, void *user_data) {
|
||||||
|
if (state->count == 1) {
|
||||||
|
register_code (KC_MINS);
|
||||||
|
} else if (state->count == 2) {
|
||||||
|
register_code (KC_RSFT);
|
||||||
|
register_code (KC_MINS);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void ang_tap_dance_mns_reset (qk_tap_dance_state_t *state, void *user_data) {
|
||||||
|
if (state->count == 1) {
|
||||||
|
unregister_code (KC_MINS);
|
||||||
|
} else if (state->count == 2) {
|
||||||
|
unregister_code (KC_RSFT);
|
||||||
|
unregister_code (KC_MINS);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
bool layer_toggle;
|
||||||
|
bool sticky;
|
||||||
|
bool finished_once;
|
||||||
|
} td_ta_state_t;
|
||||||
|
|
||||||
|
void ang_tap_dance_ta_finished (qk_tap_dance_state_t *state, void *user_data) {
|
||||||
|
td_ta_state_t *td_ta = (td_ta_state_t *) user_data;
|
||||||
|
|
||||||
|
if (td_ta->finished_once) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (td_ta->sticky) {
|
||||||
|
td_ta->sticky = false;
|
||||||
|
td_ta->layer_toggle = false;
|
||||||
|
layer_off (ARRW);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
td_ta->finished_once = true;
|
||||||
|
if (state->count == 1 && !state->pressed) {
|
||||||
|
register_code (KC_TAB);
|
||||||
|
td_ta->sticky = false;
|
||||||
|
td_ta->layer_toggle = false;
|
||||||
|
} else {
|
||||||
|
td_ta->layer_toggle = true;
|
||||||
|
layer_on (ARRW);
|
||||||
|
td_ta->sticky = (state->count == 2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void ang_tap_dance_ta_reset (qk_tap_dance_state_t *state, void *user_data) {
|
||||||
|
td_ta_state_t *td_ta = (td_ta_state_t *) user_data;
|
||||||
|
|
||||||
|
if (!td_ta->layer_toggle)
|
||||||
|
unregister_code (KC_TAB);
|
||||||
|
if (!td_ta->sticky)
|
||||||
|
layer_off (ARRW);
|
||||||
|
|
||||||
|
td_ta->finished_once = false;
|
||||||
|
}
|
||||||
|
|
||||||
const qk_tap_dance_action_t tap_dance_actions[] = {
|
const qk_tap_dance_action_t tap_dance_actions[] = {
|
||||||
[CT_CLN] = ACTION_TAP_DANCE_FN (ang_tap_dance)
|
[CT_CLN] = ACTION_TAP_DANCE_FN_ADVANCED (NULL, ang_tap_dance_cln_finished, ang_tap_dance_cln_reset)
|
||||||
|
,[CT_MNS] = ACTION_TAP_DANCE_FN_ADVANCED (NULL, ang_tap_dance_mns_finished, ang_tap_dance_mns_reset)
|
||||||
|
,[CT_TA] = {
|
||||||
|
.fn = { NULL, ang_tap_dance_ta_finished, ang_tap_dance_ta_reset },
|
||||||
|
.user_data = (void *)&((td_ta_state_t) { false, false, false })
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
// Runs constantly in the background, in a loop.
|
// Runs constantly in the background, in a loop.
|
||||||
|
@ -1002,9 +1078,18 @@ void matrix_scan_user(void) {
|
||||||
leading = false;
|
leading = false;
|
||||||
leader_end ();
|
leader_end ();
|
||||||
|
|
||||||
|
#if KEYLOGGER_ENABLE
|
||||||
SEQ_ONE_KEY (KC_D) {
|
SEQ_ONE_KEY (KC_D) {
|
||||||
|
ergodox_led_all_on();
|
||||||
|
wait_ms(100);
|
||||||
|
ergodox_led_all_off();
|
||||||
log_enable = !log_enable;
|
log_enable = !log_enable;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
SEQ_ONE_KEY (KC_T) {
|
||||||
|
time_travel = !time_travel;
|
||||||
|
}
|
||||||
|
|
||||||
SEQ_ONE_KEY (KC_U) {
|
SEQ_ONE_KEY (KC_U) {
|
||||||
ang_do_unicode ();
|
ang_do_unicode ();
|
||||||
|
@ -1043,7 +1128,7 @@ void matrix_scan_user(void) {
|
||||||
unregister_code (KC_F2);
|
unregister_code (KC_F2);
|
||||||
unregister_code (KC_LALT);
|
unregister_code (KC_LALT);
|
||||||
|
|
||||||
_delay_ms (1000);
|
wait_ms (1000);
|
||||||
|
|
||||||
uint16_t codes[] = {KC_M, KC_A, KC_X, KC_MINS, KC_F, KC_O, KC_C, KC_U, KC_S, KC_E, KC_D, KC_ENT, 0};
|
uint16_t codes[] = {KC_M, KC_A, KC_X, KC_MINS, KC_F, KC_O, KC_C, KC_U, KC_S, KC_E, KC_D, KC_ENT, 0};
|
||||||
ang_tap (codes);
|
ang_tap (codes);
|
||||||
|
@ -1062,14 +1147,14 @@ void matrix_scan_user(void) {
|
||||||
|
|
||||||
ergodox_led_all_off ();
|
ergodox_led_all_off ();
|
||||||
ergodox_right_led_3_on ();
|
ergodox_right_led_3_on ();
|
||||||
_delay_ms (100);
|
wait_ms (100);
|
||||||
ergodox_right_led_2_on ();
|
ergodox_right_led_2_on ();
|
||||||
_delay_ms (100);
|
wait_ms (100);
|
||||||
ergodox_right_led_3_off ();
|
ergodox_right_led_3_off ();
|
||||||
ergodox_right_led_1_on ();
|
ergodox_right_led_1_on ();
|
||||||
_delay_ms (100);
|
wait_ms (100);
|
||||||
ergodox_right_led_2_off ();
|
ergodox_right_led_2_off ();
|
||||||
_delay_ms (100);
|
wait_ms (100);
|
||||||
ergodox_right_led_1_off ();
|
ergodox_right_led_1_off ();
|
||||||
} else {
|
} else {
|
||||||
is_adore = 0;
|
is_adore = 0;
|
||||||
|
@ -1079,27 +1164,55 @@ void matrix_scan_user(void) {
|
||||||
|
|
||||||
ergodox_led_all_off ();
|
ergodox_led_all_off ();
|
||||||
ergodox_right_led_1_on ();
|
ergodox_right_led_1_on ();
|
||||||
_delay_ms (100);
|
wait_ms (100);
|
||||||
ergodox_right_led_2_on ();
|
ergodox_right_led_2_on ();
|
||||||
_delay_ms (100);
|
wait_ms (100);
|
||||||
ergodox_right_led_1_off ();
|
ergodox_right_led_1_off ();
|
||||||
ergodox_right_led_3_on ();
|
ergodox_right_led_3_on ();
|
||||||
_delay_ms (100);
|
wait_ms (100);
|
||||||
ergodox_right_led_2_off ();
|
ergodox_right_led_2_off ();
|
||||||
_delay_ms (100);
|
wait_ms (100);
|
||||||
ergodox_right_led_3_off ();
|
ergodox_right_led_3_off ();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static uint16_t last4[4];
|
||||||
|
|
||||||
bool process_record_user (uint16_t keycode, keyrecord_t *record) {
|
bool process_record_user (uint16_t keycode, keyrecord_t *record) {
|
||||||
|
#if KEYLOGGER_ENABLE
|
||||||
uint8_t layer = biton32(layer_state);
|
uint8_t layer = biton32(layer_state);
|
||||||
|
|
||||||
if (log_enable && layer == BASE) {
|
if (log_enable && layer == BASE) {
|
||||||
xprintf ("KL: col=%d, row=%d\n", record->event.key.col,
|
xprintf ("KL: col=%d, row=%d\n", record->event.key.col,
|
||||||
record->event.key.row);
|
record->event.key.row);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if (time_travel && !record->event.pressed) {
|
||||||
|
uint8_t p;
|
||||||
|
|
||||||
|
// shift cache one to the left
|
||||||
|
for (p = 0; p < 3; p++) {
|
||||||
|
last4[p] = last4[p + 1];
|
||||||
|
}
|
||||||
|
last4[3] = keycode;
|
||||||
|
|
||||||
|
if (last4[0] == KC_D && last4[1] == KC_A && last4[2] == KC_T && last4[3] == KC_E) {
|
||||||
|
uint16_t codes[] = {KC_E, KC_SPC, KC_MINS, KC_D, KC_SPC, KC_QUOT, 0};
|
||||||
|
ang_tap (codes);
|
||||||
|
register_code (KC_RSFT);
|
||||||
|
register_code (KC_EQL);
|
||||||
|
unregister_code (KC_EQL);
|
||||||
|
unregister_code (KC_RSFT);
|
||||||
|
|
||||||
|
uint16_t codes2[] = {KC_4, KC_SPC, KC_D, KC_A, KC_Y, KC_S, KC_QUOT, 0};
|
||||||
|
ang_tap (codes2);
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
|
@ -50,6 +50,7 @@ At its core, this is a Dvorak layout, with some minor changes. The more interest
|
||||||
- `LEAD a` makes the [ADORE layer](#adore-layer) the default.
|
- `LEAD a` makes the [ADORE layer](#adore-layer) the default.
|
||||||
- `LEAD v` prints the firmware version, the keyboard and the keymap.
|
- `LEAD v` prints the firmware version, the keyboard and the keymap.
|
||||||
- `LEAD d` toggles logging keypress positions to the HID console.
|
- `LEAD d` toggles logging keypress positions to the HID console.
|
||||||
|
- `LEAD t` toggles time travel. Figuring out the current `date` is left as an exercise to the reader.
|
||||||
|
|
||||||
## ADORE layer
|
## ADORE layer
|
||||||
|
|
||||||
|
@ -148,6 +149,14 @@ The keymap default to forcing NKRO, which seems to upset Windows, and except the
|
||||||
|
|
||||||
# Changelog
|
# Changelog
|
||||||
|
|
||||||
|
## v1.4 - 2016-07-29
|
||||||
|
|
||||||
|
* When toggling the key logging on or off, the LEDs will do a little dance.
|
||||||
|
* The keylogger is now optional, but enabled by default. Use `KEYLOGGER_ENABLE=no` on the `make` command line to disable it.
|
||||||
|
* The `TAB`/`ARRW` key was turned into a tap-dance key, allowing one to toggle the **ARROW** layer on by double-tapping, and as such, avoid the need to hold the key.
|
||||||
|
* The `-`/`_` key was turned into a tap-dance key too.
|
||||||
|
* There is now a way to travel time with the keyboard, toggle the feature on by hitting `LEAD t`.
|
||||||
|
|
||||||
## v1.3 - 2016-07-06
|
## v1.3 - 2016-07-06
|
||||||
|
|
||||||
* Added support for logging keys, by pressing `LEAD d`. Also included is a tool to generate a [heatmap](#heatmap) out of the logs.
|
* Added support for logging keys, by pressing `LEAD d`. Also included is a tool to generate a [heatmap](#heatmap) out of the logs.
|
|
@ -0,0 +1,533 @@
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"backcolor": "#ffffff",
|
||||||
|
"name": "ErgoDox - algernon's layout: Heatmap",
|
||||||
|
"author": "Gergely Nagy <kbd@gergo.csillger.hu>",
|
||||||
|
"notes": "See [here](https://github.com/algernon/ergodox-layout#readme) for the QMK keymap source.",
|
||||||
|
"switchMount": "cherry",
|
||||||
|
"switchBrand": "gateron",
|
||||||
|
"switchType": "KS-3-Tea",
|
||||||
|
"pcb": true,
|
||||||
|
"css": ".keyborder { -webkit-filter: blur(5px); filter: blur(5px); } .keytop { -webkit-filter: blur(10px); } .keylabels { border: 1px solid black; }"
|
||||||
|
},
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"x": 3.5,
|
||||||
|
"c": "#a7d0db",
|
||||||
|
"fa": [
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
2
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"#\n3\nF3",
|
||||||
|
{
|
||||||
|
"x": 10.5,
|
||||||
|
"c": "#a7d0db",
|
||||||
|
"t": "#000000",
|
||||||
|
"a": 4,
|
||||||
|
"fa": [
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
2
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"*\n8\nF8"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"y": -0.875,
|
||||||
|
"x": 2.5,
|
||||||
|
"c": "#bfbad1",
|
||||||
|
"t": "#0d0d0b"
|
||||||
|
},
|
||||||
|
"@\n2\nF2",
|
||||||
|
{
|
||||||
|
"x": 1,
|
||||||
|
"c": "#7adabd",
|
||||||
|
"t": "#000000"
|
||||||
|
},
|
||||||
|
"$\n4\nF4",
|
||||||
|
{
|
||||||
|
"x": 8.5
|
||||||
|
},
|
||||||
|
"&\n7\nF7",
|
||||||
|
{
|
||||||
|
"x": 1,
|
||||||
|
"c": "#bfbad1",
|
||||||
|
"t": "#0d0d0b"
|
||||||
|
},
|
||||||
|
"(\n9\nF9"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"y": -0.875,
|
||||||
|
"x": 5.5,
|
||||||
|
"c": "#7adabd",
|
||||||
|
"t": "#000000"
|
||||||
|
},
|
||||||
|
"%\n5\nF5",
|
||||||
|
{
|
||||||
|
"c": "#f9cd31",
|
||||||
|
"a": 7,
|
||||||
|
"f": 2
|
||||||
|
},
|
||||||
|
"STENO",
|
||||||
|
{
|
||||||
|
"x": 4.5,
|
||||||
|
"f": 6
|
||||||
|
},
|
||||||
|
"<i class='mss mss-Unicode-Option-3'></i>",
|
||||||
|
{
|
||||||
|
"c": "#7adabd",
|
||||||
|
"a": 4,
|
||||||
|
"f": 3,
|
||||||
|
"fa": [
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
2
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"^\n6\nF6"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"y": -0.875,
|
||||||
|
"c": "#ffb2d2",
|
||||||
|
"f": 3,
|
||||||
|
"w": 1.5
|
||||||
|
},
|
||||||
|
"\n\n~\n`",
|
||||||
|
{
|
||||||
|
"t": "#0d0d0b"
|
||||||
|
},
|
||||||
|
"!\n1\nF1",
|
||||||
|
{
|
||||||
|
"x": 14.5
|
||||||
|
},
|
||||||
|
")\n0\nF10",
|
||||||
|
{
|
||||||
|
"a": 7,
|
||||||
|
"w": 1.5
|
||||||
|
},
|
||||||
|
"F11"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"y": -0.375,
|
||||||
|
"x": 3.5,
|
||||||
|
"c": "#a7d0db",
|
||||||
|
"t": "#000000",
|
||||||
|
"a": 6
|
||||||
|
},
|
||||||
|
"L",
|
||||||
|
{
|
||||||
|
"x": 10.5
|
||||||
|
},
|
||||||
|
"C"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"y": -0.875,
|
||||||
|
"x": 2.5,
|
||||||
|
"c": "#bfbad1",
|
||||||
|
"t": "#0d0d0b",
|
||||||
|
"a": 4
|
||||||
|
},
|
||||||
|
">\n.",
|
||||||
|
{
|
||||||
|
"x": 1,
|
||||||
|
"c": "#7adabd",
|
||||||
|
"t": "#000000",
|
||||||
|
"a": 6
|
||||||
|
},
|
||||||
|
"W",
|
||||||
|
{
|
||||||
|
"x": 8.5
|
||||||
|
},
|
||||||
|
"H",
|
||||||
|
{
|
||||||
|
"x": 1,
|
||||||
|
"c": "#bfbad1",
|
||||||
|
"t": "#0d0d0b"
|
||||||
|
},
|
||||||
|
"P"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"y": -0.875,
|
||||||
|
"x": 5.5,
|
||||||
|
"c": "#7adabd",
|
||||||
|
"t": "#000000"
|
||||||
|
},
|
||||||
|
"M",
|
||||||
|
{
|
||||||
|
"c": "#93c9b7",
|
||||||
|
"a": 4,
|
||||||
|
"h": 1.5
|
||||||
|
},
|
||||||
|
"{\n[",
|
||||||
|
{
|
||||||
|
"x": 4.5,
|
||||||
|
"h": 1.5
|
||||||
|
},
|
||||||
|
"}\n]",
|
||||||
|
{
|
||||||
|
"c": "#7adabd",
|
||||||
|
"a": 6
|
||||||
|
},
|
||||||
|
"F"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"y": -0.875,
|
||||||
|
"c": "#ffb07b",
|
||||||
|
"t": "#0d0d0b",
|
||||||
|
"f": 6,
|
||||||
|
"w": 1.5
|
||||||
|
},
|
||||||
|
"<i class='fa fa-fast-backward'></i>\n\n<i class='fa fa-fast-forward'></i>",
|
||||||
|
{
|
||||||
|
"c": "#ffb2d2",
|
||||||
|
"a": 4,
|
||||||
|
"f": 3
|
||||||
|
},
|
||||||
|
"<\n,",
|
||||||
|
{
|
||||||
|
"x": 14.5,
|
||||||
|
"a": 6
|
||||||
|
},
|
||||||
|
"Y",
|
||||||
|
{
|
||||||
|
"a": 4,
|
||||||
|
"w": 1.5
|
||||||
|
},
|
||||||
|
"|\n\\"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"y": -0.375,
|
||||||
|
"x": 3.5,
|
||||||
|
"c": "#a7d0db",
|
||||||
|
"t": "#000000",
|
||||||
|
"a": 6
|
||||||
|
},
|
||||||
|
"E",
|
||||||
|
{
|
||||||
|
"x": 10.5
|
||||||
|
},
|
||||||
|
"T"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"y": -0.875,
|
||||||
|
"x": 2.5,
|
||||||
|
"c": "#bfbad1",
|
||||||
|
"t": "#0d0d0b"
|
||||||
|
},
|
||||||
|
"O",
|
||||||
|
{
|
||||||
|
"x": 1,
|
||||||
|
"c": "#7adabd",
|
||||||
|
"t": "#000000",
|
||||||
|
"n": true
|
||||||
|
},
|
||||||
|
"I",
|
||||||
|
{
|
||||||
|
"x": 8.5,
|
||||||
|
"n": true
|
||||||
|
},
|
||||||
|
"R",
|
||||||
|
{
|
||||||
|
"x": 1,
|
||||||
|
"c": "#bfbad1",
|
||||||
|
"t": "#0d0d0b"
|
||||||
|
},
|
||||||
|
"N"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"y": -0.875,
|
||||||
|
"x": 5.5,
|
||||||
|
"c": "#7adabd",
|
||||||
|
"t": "#000000"
|
||||||
|
},
|
||||||
|
"U",
|
||||||
|
{
|
||||||
|
"x": 6.5
|
||||||
|
},
|
||||||
|
"D"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"y": -0.875,
|
||||||
|
"c": "#ffb2d2",
|
||||||
|
"t": "#0d0d0b",
|
||||||
|
"fa": [
|
||||||
|
6
|
||||||
|
],
|
||||||
|
"w": 1.5
|
||||||
|
},
|
||||||
|
"<i class='fa fa-arrows'></i>\n\nTab",
|
||||||
|
{
|
||||||
|
"f": 3
|
||||||
|
},
|
||||||
|
"A",
|
||||||
|
{
|
||||||
|
"x": 14.5,
|
||||||
|
"f": 3
|
||||||
|
},
|
||||||
|
"S",
|
||||||
|
{
|
||||||
|
"a": 4,
|
||||||
|
"fa": [
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
6
|
||||||
|
],
|
||||||
|
"w": 1.5
|
||||||
|
},
|
||||||
|
"+\n="
|
||||||
|
],
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"y": -0.625,
|
||||||
|
"x": 6.5,
|
||||||
|
"c": "#93c9b7",
|
||||||
|
"t": "#000000",
|
||||||
|
"a": 7,
|
||||||
|
"h": 1.5
|
||||||
|
},
|
||||||
|
"(",
|
||||||
|
{
|
||||||
|
"x": 4.5,
|
||||||
|
"h": 1.5
|
||||||
|
},
|
||||||
|
")"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"y": -0.75,
|
||||||
|
"x": 3.5,
|
||||||
|
"c": "#a7d0db",
|
||||||
|
"a": 4,
|
||||||
|
"f": 3
|
||||||
|
},
|
||||||
|
"\"\n'",
|
||||||
|
{
|
||||||
|
"x": 10.5
|
||||||
|
},
|
||||||
|
"V"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"y": -0.875,
|
||||||
|
"x": 2.5,
|
||||||
|
"c": "#bfbad1",
|
||||||
|
"t": "#0d0d0b"
|
||||||
|
},
|
||||||
|
"Z",
|
||||||
|
{
|
||||||
|
"x": 1,
|
||||||
|
"c": "#7adabd",
|
||||||
|
"t": "#000000"
|
||||||
|
},
|
||||||
|
"K",
|
||||||
|
{
|
||||||
|
"x": 8.5
|
||||||
|
},
|
||||||
|
"G",
|
||||||
|
{
|
||||||
|
"x": 1,
|
||||||
|
"c": "#bfbad1",
|
||||||
|
"t": "#0d0d0b"
|
||||||
|
},
|
||||||
|
"J"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"y": -0.875,
|
||||||
|
"x": 5.5,
|
||||||
|
"c": "#7adabd",
|
||||||
|
"t": "#000000"
|
||||||
|
},
|
||||||
|
"X",
|
||||||
|
{
|
||||||
|
"x": 6.5
|
||||||
|
},
|
||||||
|
"B"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"y": -0.875,
|
||||||
|
"c": "#ffb07b",
|
||||||
|
"f": 9,
|
||||||
|
"w": 1.5
|
||||||
|
},
|
||||||
|
"\n\n<i class='kb kb-Multimedia-Play-Pause'></i>",
|
||||||
|
{
|
||||||
|
"c": "#ffb2d2",
|
||||||
|
"t": "#0d0d0b",
|
||||||
|
"a": 4,
|
||||||
|
"f": 3
|
||||||
|
},
|
||||||
|
"?\n/",
|
||||||
|
{
|
||||||
|
"x": 14.5,
|
||||||
|
"a": 6
|
||||||
|
},
|
||||||
|
"Q",
|
||||||
|
{
|
||||||
|
"c": "#ffb07b",
|
||||||
|
"t": "#000000",
|
||||||
|
"f": 9,
|
||||||
|
"w": 1.5
|
||||||
|
},
|
||||||
|
"<i class='kb kb-Multimedia-Stop'></i>"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"y": -0.375,
|
||||||
|
"x": 3.5,
|
||||||
|
"c": "#d9dae0",
|
||||||
|
"g": true,
|
||||||
|
"a": 7,
|
||||||
|
"f": 3
|
||||||
|
},
|
||||||
|
"",
|
||||||
|
{
|
||||||
|
"x": 10.5
|
||||||
|
},
|
||||||
|
""
|
||||||
|
],
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"y": -0.875,
|
||||||
|
"x": 2.5
|
||||||
|
},
|
||||||
|
"",
|
||||||
|
{
|
||||||
|
"x": 1,
|
||||||
|
"c": "#d4872a",
|
||||||
|
"g": false,
|
||||||
|
"a": 5
|
||||||
|
},
|
||||||
|
";\n:",
|
||||||
|
{
|
||||||
|
"x": 8.5
|
||||||
|
},
|
||||||
|
"_\n-",
|
||||||
|
{
|
||||||
|
"x": 1,
|
||||||
|
"c": "#d9dae0",
|
||||||
|
"g": true,
|
||||||
|
"a": 7
|
||||||
|
},
|
||||||
|
""
|
||||||
|
],
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"y": -0.75,
|
||||||
|
"x": 0.5
|
||||||
|
},
|
||||||
|
"",
|
||||||
|
{},
|
||||||
|
"",
|
||||||
|
{
|
||||||
|
"x": 14.5
|
||||||
|
},
|
||||||
|
"",
|
||||||
|
{},
|
||||||
|
""
|
||||||
|
],
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"r": 30,
|
||||||
|
"rx": 6.5,
|
||||||
|
"ry": 4.25,
|
||||||
|
"y": -1,
|
||||||
|
"x": 1,
|
||||||
|
"c": "#f9cd31",
|
||||||
|
"g": false
|
||||||
|
},
|
||||||
|
"Alt",
|
||||||
|
{
|
||||||
|
"a": 4,
|
||||||
|
"fa": [
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
9
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"\n\n\n<i class='kb kb-logo-linux-debian fa-large'></i>"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"c": "#d4872a",
|
||||||
|
"a": 7,
|
||||||
|
"f": 9,
|
||||||
|
"h": 2
|
||||||
|
},
|
||||||
|
"<i class='kb kb-Unicode-BackSpace-DeleteLeft-Big'></i>",
|
||||||
|
{
|
||||||
|
"h": 2
|
||||||
|
},
|
||||||
|
"<i class='fa fa-angle-double-up'></i>",
|
||||||
|
{
|
||||||
|
"c": "#f9cd31",
|
||||||
|
"f": 3
|
||||||
|
},
|
||||||
|
"Ctrl"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"x": 2,
|
||||||
|
"c": "#e26757"
|
||||||
|
},
|
||||||
|
"ESC"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"r": -30,
|
||||||
|
"rx": 13,
|
||||||
|
"y": -1,
|
||||||
|
"x": -3,
|
||||||
|
"c": "#f9cd31",
|
||||||
|
"f": 2
|
||||||
|
},
|
||||||
|
"MEDIA",
|
||||||
|
{},
|
||||||
|
"1HAND"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"x": -3
|
||||||
|
},
|
||||||
|
"LEAD",
|
||||||
|
{
|
||||||
|
"c": "#d4872a",
|
||||||
|
"f": 9,
|
||||||
|
"h": 2
|
||||||
|
},
|
||||||
|
"<i class='kb kb-Return-2'></i>",
|
||||||
|
{
|
||||||
|
"f": 3,
|
||||||
|
"h": 2
|
||||||
|
},
|
||||||
|
"SPC"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"x": -3,
|
||||||
|
"c": "#f9cd31",
|
||||||
|
"f": 2
|
||||||
|
},
|
||||||
|
"HUN"
|
||||||
|
]
|
||||||
|
]
|
|
@ -1,7 +1,7 @@
|
||||||
// Netable differences vs. the default firmware for the ErgoDox EZ:
|
// Netable differences vs. the default firmware for the ErgoDox EZ:
|
||||||
// 1. The Cmd key is now on the right side, making Cmd+Space easier.
|
// 1. The Cmd key is now on the right side, making Cmd+Space easier.
|
||||||
// 2. The media keys work on OSX (But not on Windows).
|
// 2. The media keys work on OSX (But not on Windows).
|
||||||
#include "ergodox_ez.h"
|
#include "ergodox.h"
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
#include "action_layer.h"
|
#include "action_layer.h"
|
||||||
|
|
Before Width: | Height: | Size: 78 KiB After Width: | Height: | Size: 78 KiB |
|
@ -1,4 +1,4 @@
|
||||||
#include "ergodox_ez.h"
|
#include "ergodox.h"
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
#include "action_layer.h"
|
#include "action_layer.h"
|
||||||
#include "keymap_bepo.h"
|
#include "keymap_bepo.h"
|
2
keyboards/ergodox/keymaps/coderkun_neo2/Makefile
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
SLEEP_LED_ENABLE = no
|
||||||
|
UNICODE_ENABLE = yes
|
|
@ -1,7 +1,8 @@
|
||||||
#include "ergodox_ez.h"
|
#include "ergodox.h"
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
#include "action_layer.h"
|
#include "action_layer.h"
|
||||||
#include "keymap_neo2.h"
|
#include "led.h"
|
||||||
|
#include "keymap_extras/keymap_neo2.h"
|
||||||
|
|
||||||
// Layer names
|
// Layer names
|
||||||
#define BASE 0 // default layer
|
#define BASE 0 // default layer
|
||||||
|
@ -33,7 +34,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
*/
|
*/
|
||||||
[BASE] = KEYMAP(
|
[BASE] = KEYMAP(
|
||||||
// left hand
|
// left hand
|
||||||
KC_TAB, KC_1, KC_2, KC_3, KC_4, KC_5, KC_EQL,
|
KC_TAB, KC_1, KC_2, KC_3, KC_4, KC_5, NEO_GRV,
|
||||||
NEO_Y, NEO_X, NEO_V, NEO_L, NEO_C, NEO_W, KC_HOME,
|
NEO_Y, NEO_X, NEO_V, NEO_L, NEO_C, NEO_W, KC_HOME,
|
||||||
NEO_L1_L, NEO_U, NEO_I, NEO_A, NEO_E, NEO_O,
|
NEO_L1_L, NEO_U, NEO_I, NEO_A, NEO_E, NEO_O,
|
||||||
KC_LSFT, NEO_UE, NEO_OE, NEO_AE, NEO_P, NEO_Z, TG(PMQ),
|
KC_LSFT, NEO_UE, NEO_OE, NEO_AE, NEO_P, NEO_Z, TG(PMQ),
|
||||||
|
@ -42,7 +43,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
KC_MINS,
|
KC_MINS,
|
||||||
KC_SPC, KC_ENT, ALL_T(KC_NO),
|
KC_SPC, KC_ENT, ALL_T(KC_NO),
|
||||||
// right hand
|
// right hand
|
||||||
DE_ACUT, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
|
NEO_ACUT, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
|
||||||
KC_END, NEO_K, NEO_H, NEO_G, NEO_F, NEO_Q, NEO_SS,
|
KC_END, NEO_K, NEO_H, NEO_G, NEO_F, NEO_Q, NEO_SS,
|
||||||
NEO_S, NEO_N, NEO_R, NEO_T, NEO_D, NEO_L1_R,
|
NEO_S, NEO_N, NEO_R, NEO_T, NEO_D, NEO_L1_R,
|
||||||
TG(PMN), NEO_B, NEO_M, KC_COMM,KC_DOT, NEO_J, KC_RSFT,
|
TG(PMN), NEO_B, NEO_M, KC_COMM,KC_DOT, NEO_J, KC_RSFT,
|
||||||
|
@ -140,10 +141,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
* │ │ │ │ │ ✕ │ │ │ │ │ │ F9 │ F10 │ F11 │ F12 │ │
|
* │ │ │ │ │ ✕ │ │ │ │ │ │ F9 │ F10 │ F11 │ F12 │ │
|
||||||
* ├───────┼─────┼─────┼─────╆─────╅─────┤ │ │ ├─────╆─────╅─────┼─────┼─────┼───────┤
|
* ├───────┼─────┼─────┼─────╆─────╅─────┤ │ │ ├─────╆─────╅─────┼─────┼─────┼───────┤
|
||||||
* │ │ │ │ │ ✓ │ ├─────┤ ├─────┤ │ F5 │ F6 │ F7 │ F8 │ │
|
* │ │ │ │ │ ✓ │ ├─────┤ ├─────┤ │ F5 │ F6 │ F7 │ F8 │ │
|
||||||
* ├───────┼─────┼─────┼─────╄─────╃─────┤ │ │ ├─────╄─────╃─────┼─────┼─────┼───────┤
|
* ├───────┼─────┼─────┼─────╄─────╃─────┤(TL2)│ │(TL3)├─────╄─────╃─────┼─────┼─────┼───────┤
|
||||||
* │ │ │ │ │ │ │ │ │ │ │ F1 │ F2 │ F3 │ F4 │ │
|
* │ │ │ │ │ │ │ │ │ │ │ F1 │ F2 │ F3 │ F4 │ │
|
||||||
* └─┬─────┼─────┼─────┼─────┼─────┼─────┴─────┘ └─────┴─────┼─────┼─────┼─────┼─────┼─────┬─┘
|
* └─┬─────┼─────┼─────┼─────┼─────┼─────┴─────┘ └─────┴─────┼─────┼─────┼─────┼─────┼─────┬─┘
|
||||||
* │ │ │(MO1)│ │ │ │ │ │(MO1)│ │ │
|
* │ │ │(MO1)│ │(MO4)│ │(MO4)│ │(MO1)│ │ │
|
||||||
* └─────┴─────┴─────┴─────┴─────┘ ┌─────┬─────┐ ┌─────┬─────┐ └─────┴─────┴─────┴─────┴─────┘
|
* └─────┴─────┴─────┴─────┴─────┘ ┌─────┬─────┐ ┌─────┬─────┐ └─────┴─────┴─────┴─────┴─────┘
|
||||||
* │ Ms← │ Ms↑ │ │ Ms↓ │ Ms→ │
|
* │ Ms← │ Ms↑ │ │ Ms↓ │ Ms→ │
|
||||||
* ┌─────┼─────┼─────┤ ├─────┼─────┼─────┐
|
* ┌─────┼─────┼─────┤ ├─────┼─────┼─────┐
|
||||||
|
@ -267,7 +268,13 @@ void matrix_scan_user(void)
|
||||||
ergodox_right_led_3_on();
|
ergodox_right_led_3_on();
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
if(host_keyboard_leds() & (1<<USB_LED_SCROLL_LOCK)) {
|
||||||
|
ergodox_led_all_set(LED_BRIGHTNESS_HI);
|
||||||
|
ergodox_right_led_1_on();
|
||||||
|
}
|
||||||
|
else {
|
||||||
ergodox_board_led_off();
|
ergodox_board_led_off();
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
#include "ergodox_ez.h"
|
#include "ergodox.h"
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
#include "action_layer.h"
|
#include "action_layer.h"
|
||||||
|
|
Before Width: | Height: | Size: 101 KiB After Width: | Height: | Size: 101 KiB |
|
@ -1,4 +1,4 @@
|
||||||
#include "ergodox_ez.h"
|
#include "ergodox.h"
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
#include "action_layer.h"
|
#include "action_layer.h"
|
||||||
#include "keymap_norwegian.h"
|
#include "keymap_norwegian.h"
|
Before Width: | Height: | Size: 95 KiB After Width: | Height: | Size: 95 KiB |
Before Width: | Height: | Size: 379 KiB After Width: | Height: | Size: 379 KiB |
|
@ -1,4 +1,4 @@
|
||||||
#include "ergodox_ez.h"
|
#include "ergodox.h"
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
#include "action_layer.h"
|
#include "action_layer.h"
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
#include "ergodox_ez.h"
|
#include "ergodox.h"
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
#include "action_layer.h"
|
#include "action_layer.h"
|
||||||
|
|
Before Width: | Height: | Size: 189 KiB After Width: | Height: | Size: 189 KiB |
Before Width: | Height: | Size: 1.4 MiB After Width: | Height: | Size: 1.4 MiB |
|
@ -1,6 +1,7 @@
|
||||||
#include "ergodox_ez.h"
|
#include "ergodox.h"
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
#include "action_layer.h"
|
#include "action_layer.h"
|
||||||
|
#include "version.h"
|
||||||
|
|
||||||
#define BASE 0 // default layer
|
#define BASE 0 // default layer
|
||||||
#define SYMB 1 // symbols
|
#define SYMB 1 // symbols
|
Before Width: | Height: | Size: 754 KiB After Width: | Height: | Size: 754 KiB |
|
@ -1,7 +1,7 @@
|
||||||
// Netable differences vs. the default firmware for the ErgoDox EZ:
|
// Netable differences vs. the default firmware for the ErgoDox EZ:
|
||||||
// 1. The Cmd key is now on the right side, making Cmd+Space easier.
|
// 1. The Cmd key is now on the right side, making Cmd+Space easier.
|
||||||
// 2. The media keys work on OSX (But not on Windows).
|
// 2. The media keys work on OSX (But not on Windows).
|
||||||
#include "ergodox_ez.h"
|
#include "ergodox.h"
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
#include "action_layer.h"
|
#include "action_layer.h"
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
#include "ergodox_ez.h"
|
#include "ergodox.h"
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
#include "action_layer.h"
|
#include "action_layer.h"
|
||||||
|
|
Before Width: | Height: | Size: 85 KiB After Width: | Height: | Size: 85 KiB |