Merge branch 'master' into ps2avrGB
|
@ -34,3 +34,8 @@ CMakeLists.txt
|
||||||
util/Win_Check_Output.txt
|
util/Win_Check_Output.txt
|
||||||
.vscode
|
.vscode
|
||||||
.stfolder
|
.stfolder
|
||||||
|
|
||||||
|
# ignore image files
|
||||||
|
*.png
|
||||||
|
*.jpg
|
||||||
|
*.gif
|
|
@ -1,12 +1,12 @@
|
||||||
[submodule "lib/chibios"]
|
[submodule "lib/chibios"]
|
||||||
path = lib/chibios
|
path = lib/chibios
|
||||||
url = https://github.com/ChibiOS/ChibiOS.git
|
url = https://github.com/qmk/ChibiOS
|
||||||
[submodule "lib/chibios-contrib"]
|
[submodule "lib/chibios-contrib"]
|
||||||
path = lib/chibios-contrib
|
path = lib/chibios-contrib
|
||||||
url = https://github.com/ChibiOS/ChibiOS-Contrib.git
|
url = https://github.com/qmk/ChibiOS-Contrib
|
||||||
[submodule "lib/ugfx"]
|
[submodule "lib/ugfx"]
|
||||||
path = lib/ugfx
|
path = lib/ugfx
|
||||||
url = https://bitbucket.org/Tectu/ugfx
|
url = https://github.com/qmk/uGFX
|
||||||
[submodule "lib/googletest"]
|
[submodule "lib/googletest"]
|
||||||
path = lib/googletest
|
path = lib/googletest
|
||||||
url = https://github.com/google/googletest
|
url = https://github.com/google/googletest
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
os: linux
|
os: linux
|
||||||
dist: trusty
|
dist: trusty
|
||||||
sudo: required
|
sudo: required
|
||||||
|
group: edge
|
||||||
language: c
|
language: c
|
||||||
branches:
|
branches:
|
||||||
except:
|
except:
|
||||||
|
@ -33,7 +34,7 @@ after_success:
|
||||||
notifications:
|
notifications:
|
||||||
webhooks:
|
webhooks:
|
||||||
urls:
|
urls:
|
||||||
- https://webhooks.gitter.im/e/cca31de3d44b9adb617b
|
- https://webhooks.gitter.im/e/afce403d65f143dfac09
|
||||||
on_success: change # options: [always|never|change] default: always
|
on_success: always # options: [always|never|change] default: always
|
||||||
on_failure: always # options: [always|never|change] default: always
|
on_failure: always # options: [always|never|change] default: always
|
||||||
on_start: never # options: [always|never|change] default: always
|
on_start: never # options: [always|never|change] default: always
|
|
@ -0,0 +1,15 @@
|
||||||
|
# Code Of Conduct
|
||||||
|
|
||||||
|
QMK strives to be an inclusive and tolerant community. We welcome participation from anyone regardless of age, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, political belief, race, religion, or sexual identity and orientation.
|
||||||
|
|
||||||
|
> “A gentle word turns away wrath, but a harsh word stirs up anger.”
|
||||||
|
|
||||||
|
Our users, contributors, and collaborators are expected to treat each other with respect, to assume good intentions, and to gently correct, where possible, rather than react with escalation. Some examples of behavior we will not tolerate include, but is not limited to:
|
||||||
|
|
||||||
|
* The use of sexualized language or imagery
|
||||||
|
* Unwelcome advances, sexual or otherwise
|
||||||
|
* Insults or derogatory comments, or personal or political attacks
|
||||||
|
* Publishing others’ private information without explicit permission
|
||||||
|
* Other conduct which could reasonably be considered inappropriate in a professional setting
|
||||||
|
|
||||||
|
If someone is violating this Code of Conduct you may email hello@qmk.fm to bring your concern to the Members. All complaints will be reviewed and investigated and will result in a response that is deemed necessary and appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident.
|
2
Makefile
|
@ -419,7 +419,7 @@ define BUILD_TEST
|
||||||
MAKE_TARGET := $2
|
MAKE_TARGET := $2
|
||||||
COMMAND := $1
|
COMMAND := $1
|
||||||
MAKE_CMD := $$(MAKE) -r -R -C $(ROOT_DIR) -f build_test.mk $$(MAKE_TARGET)
|
MAKE_CMD := $$(MAKE) -r -R -C $(ROOT_DIR) -f build_test.mk $$(MAKE_TARGET)
|
||||||
MAKE_VARS := TEST=$$(TEST_NAME)
|
MAKE_VARS := TEST=$$(TEST_NAME) FULL_TESTS=$$(FULL_TESTS)
|
||||||
MAKE_MSG := $$(MSG_MAKE_TEST)
|
MAKE_MSG := $$(MSG_MAKE_TEST)
|
||||||
$$(eval $$(call BUILD))
|
$$(eval $$(call BUILD))
|
||||||
ifneq ($$(MAKE_TARGET),clean)
|
ifneq ($$(MAKE_TARGET),clean)
|
||||||
|
|
|
@ -0,0 +1,30 @@
|
||||||
|
# Copyright 2017 Fred Sundvik
|
||||||
|
#
|
||||||
|
# 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 $(TMK_PATH)/protocol.mk
|
||||||
|
|
||||||
|
TEST_PATH=tests/$(TEST)
|
||||||
|
|
||||||
|
$(TEST)_SRC= \
|
||||||
|
$(TEST_PATH)/test.cpp \
|
||||||
|
$(TMK_COMMON_SRC) \
|
||||||
|
$(QUANTUM_SRC) \
|
||||||
|
tests/test_common/matrix.c \
|
||||||
|
tests/test_common/test_driver.cpp \
|
||||||
|
tests/test_common/keyboard_report_util.cpp \
|
||||||
|
tests/test_common/test_fixture.cpp
|
||||||
|
$(TEST)_DEFS=$(TMK_COMMON_DEFS)
|
||||||
|
$(TEST)_CONFIG=$(TEST_PATH)/config.h
|
||||||
|
VPATH+=$(TOP_DIR)/tests/test_common
|
|
@ -31,8 +31,6 @@ $(error MASTER does not have a valid value(left/right))
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
KEYBOARD_PATH := keyboards/$(KEYBOARD)
|
KEYBOARD_PATH := keyboards/$(KEYBOARD)
|
||||||
KEYBOARD_C := $(KEYBOARD_PATH)/$(KEYBOARD).c
|
KEYBOARD_C := $(KEYBOARD_PATH)/$(KEYBOARD).c
|
||||||
|
|
||||||
|
@ -42,7 +40,6 @@ else
|
||||||
$(error "$(KEYBOARD_C)" does not exist)
|
$(error "$(KEYBOARD_C)" does not exist)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
|
||||||
ifneq ($(SUBPROJECT),)
|
ifneq ($(SUBPROJECT),)
|
||||||
SUBPROJECT_PATH := keyboards/$(KEYBOARD)/$(SUBPROJECT)
|
SUBPROJECT_PATH := keyboards/$(KEYBOARD)/$(SUBPROJECT)
|
||||||
SUBPROJECT_C := $(SUBPROJECT_PATH)/$(SUBPROJECT).c
|
SUBPROJECT_C := $(SUBPROJECT_PATH)/$(SUBPROJECT).c
|
||||||
|
@ -118,143 +115,12 @@ endif
|
||||||
# # project specific files
|
# # project specific files
|
||||||
SRC += $(KEYBOARD_C) \
|
SRC += $(KEYBOARD_C) \
|
||||||
$(KEYMAP_C) \
|
$(KEYMAP_C) \
|
||||||
$(QUANTUM_DIR)/quantum.c \
|
$(QUANTUM_SRC)
|
||||||
$(QUANTUM_DIR)/keymap_common.c \
|
|
||||||
$(QUANTUM_DIR)/keycode_config.c \
|
|
||||||
$(QUANTUM_DIR)/process_keycode/process_leader.c
|
|
||||||
|
|
||||||
ifneq ($(SUBPROJECT),)
|
ifneq ($(SUBPROJECT),)
|
||||||
SRC += $(SUBPROJECT_C)
|
SRC += $(SUBPROJECT_C)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
ifndef CUSTOM_MATRIX
|
|
||||||
SRC += $(QUANTUM_DIR)/matrix.c
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifeq ($(strip $(API_SYSEX_ENABLE)), yes)
|
|
||||||
OPT_DEFS += -DAPI_SYSEX_ENABLE
|
|
||||||
SRC += $(QUANTUM_DIR)/api/api_sysex.c
|
|
||||||
OPT_DEFS += -DAPI_ENABLE
|
|
||||||
SRC += $(QUANTUM_DIR)/api.c
|
|
||||||
MIDI_ENABLE=yes
|
|
||||||
endif
|
|
||||||
|
|
||||||
MUSIC_ENABLE := 0
|
|
||||||
|
|
||||||
ifeq ($(strip $(AUDIO_ENABLE)), yes)
|
|
||||||
OPT_DEFS += -DAUDIO_ENABLE
|
|
||||||
MUSIC_ENABLE := 1
|
|
||||||
SRC += $(QUANTUM_DIR)/process_keycode/process_audio.c
|
|
||||||
SRC += $(QUANTUM_DIR)/audio/audio.c
|
|
||||||
SRC += $(QUANTUM_DIR)/audio/voices.c
|
|
||||||
SRC += $(QUANTUM_DIR)/audio/luts.c
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifeq ($(strip $(MIDI_ENABLE)), yes)
|
|
||||||
OPT_DEFS += -DMIDI_ENABLE
|
|
||||||
MUSIC_ENABLE := 1
|
|
||||||
SRC += $(QUANTUM_DIR)/process_keycode/process_midi.c
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifeq ($(MUSIC_ENABLE), 1)
|
|
||||||
SRC += $(QUANTUM_DIR)/process_keycode/process_music.c
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifeq ($(strip $(COMBO_ENABLE)), yes)
|
|
||||||
OPT_DEFS += -DCOMBO_ENABLE
|
|
||||||
SRC += $(QUANTUM_DIR)/process_keycode/process_combo.c
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifeq ($(strip $(VIRTSER_ENABLE)), yes)
|
|
||||||
OPT_DEFS += -DVIRTSER_ENABLE
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifeq ($(strip $(FAUXCLICKY_ENABLE)), yes)
|
|
||||||
OPT_DEFS += -DFAUXCLICKY_ENABLE
|
|
||||||
SRC += $(QUANTUM_DIR)/fauxclicky.c
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifeq ($(strip $(UCIS_ENABLE)), yes)
|
|
||||||
OPT_DEFS += -DUCIS_ENABLE
|
|
||||||
UNICODE_COMMON = yes
|
|
||||||
SRC += $(QUANTUM_DIR)/process_keycode/process_ucis.c
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifeq ($(strip $(UNICODEMAP_ENABLE)), yes)
|
|
||||||
OPT_DEFS += -DUNICODEMAP_ENABLE
|
|
||||||
UNICODE_COMMON = yes
|
|
||||||
SRC += $(QUANTUM_DIR)/process_keycode/process_unicodemap.c
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifeq ($(strip $(UNICODE_ENABLE)), yes)
|
|
||||||
OPT_DEFS += -DUNICODE_ENABLE
|
|
||||||
UNICODE_COMMON = yes
|
|
||||||
SRC += $(QUANTUM_DIR)/process_keycode/process_unicode.c
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifeq ($(strip $(UNICODE_COMMON)), yes)
|
|
||||||
SRC += $(QUANTUM_DIR)/process_keycode/process_unicode_common.c
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifeq ($(strip $(RGBLIGHT_ENABLE)), yes)
|
|
||||||
OPT_DEFS += -DRGBLIGHT_ENABLE
|
|
||||||
SRC += $(QUANTUM_DIR)/rgblight.c
|
|
||||||
CIE1931_CURVE = yes
|
|
||||||
LED_BREATHING_TABLE = yes
|
|
||||||
ifeq ($(strip $(RGBLIGHT_CUSTOM_DRIVER)), yes)
|
|
||||||
OPT_DEFS += -DRGBLIGHT_CUSTOM_DRIVER
|
|
||||||
else
|
|
||||||
SRC += $(QUANTUM_DIR)/light_ws2812.c
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifeq ($(strip $(TAP_DANCE_ENABLE)), yes)
|
|
||||||
OPT_DEFS += -DTAP_DANCE_ENABLE
|
|
||||||
SRC += $(QUANTUM_DIR)/process_keycode/process_tap_dance.c
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifeq ($(strip $(PRINTING_ENABLE)), yes)
|
|
||||||
OPT_DEFS += -DPRINTING_ENABLE
|
|
||||||
SRC += $(QUANTUM_DIR)/process_keycode/process_printer.c
|
|
||||||
SRC += $(TMK_DIR)/protocol/serial_uart.c
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifeq ($(strip $(SERIAL_LINK_ENABLE)), yes)
|
|
||||||
SRC += $(patsubst $(QUANTUM_PATH)/%,%,$(SERIAL_SRC))
|
|
||||||
OPT_DEFS += $(SERIAL_DEFS)
|
|
||||||
VAPTH += $(SERIAL_PATH)
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifneq ($(strip $(VARIABLE_TRACE)),)
|
|
||||||
SRC += $(QUANTUM_DIR)/variable_trace.c
|
|
||||||
OPT_DEFS += -DNUM_TRACED_VARIABLES=$(strip $(VARIABLE_TRACE))
|
|
||||||
ifneq ($(strip $(MAX_VARIABLE_TRACE_SIZE)),)
|
|
||||||
OPT_DEFS += -DMAX_VARIABLE_TRACE_SIZE=$(strip $(MAX_VARIABLE_TRACE_SIZE))
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifeq ($(strip $(LCD_ENABLE)), yes)
|
|
||||||
CIE1931_CURVE = yes
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifeq ($(strip $(LED_ENABLE)), yes)
|
|
||||||
CIE1931_CURVE = yes
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifeq ($(strip $(CIE1931_CURVE)), yes)
|
|
||||||
OPT_DEFS += -DUSE_CIE1931_CURVE
|
|
||||||
LED_TABLES = yes
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifeq ($(strip $(LED_BREATHING_TABLE)), yes)
|
|
||||||
OPT_DEFS += -DUSE_LED_BREATHING_TABLE
|
|
||||||
LED_TABLES = yes
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifeq ($(strip $(LED_TABLES)), yes)
|
|
||||||
SRC += $(QUANTUM_DIR)/led_tables.c
|
|
||||||
endif
|
|
||||||
|
|
||||||
# Optimize size but this may cause error "relocation truncated to fit"
|
# Optimize size but this may cause error "relocation truncated to fit"
|
||||||
#EXTRALDFLAGS = -Wl,--relax
|
#EXTRALDFLAGS = -Wl,--relax
|
||||||
|
|
||||||
|
@ -266,9 +132,10 @@ endif
|
||||||
VPATH += $(KEYBOARD_PATH)
|
VPATH += $(KEYBOARD_PATH)
|
||||||
VPATH += $(COMMON_VPATH)
|
VPATH += $(COMMON_VPATH)
|
||||||
|
|
||||||
|
include common_features.mk
|
||||||
include $(TMK_PATH)/protocol.mk
|
include $(TMK_PATH)/protocol.mk
|
||||||
|
|
||||||
include $(TMK_PATH)/common.mk
|
include $(TMK_PATH)/common.mk
|
||||||
|
|
||||||
SRC += $(TMK_COMMON_SRC)
|
SRC += $(TMK_COMMON_SRC)
|
||||||
OPT_DEFS += $(TMK_COMMON_DEFS)
|
OPT_DEFS += $(TMK_COMMON_DEFS)
|
||||||
EXTRALDFLAGS += $(TMK_COMMON_LDFLAGS)
|
EXTRALDFLAGS += $(TMK_COMMON_LDFLAGS)
|
||||||
|
|
|
@ -40,13 +40,23 @@ VPATH +=\
|
||||||
all: elf
|
all: elf
|
||||||
|
|
||||||
VPATH += $(COMMON_VPATH)
|
VPATH += $(COMMON_VPATH)
|
||||||
|
PLATFORM:=TEST
|
||||||
|
|
||||||
|
ifneq ($(filter $(FULL_TESTS),$(TEST)),)
|
||||||
|
include tests/$(TEST)/rules.mk
|
||||||
|
endif
|
||||||
|
|
||||||
|
include common_features.mk
|
||||||
include $(TMK_PATH)/common.mk
|
include $(TMK_PATH)/common.mk
|
||||||
include $(QUANTUM_PATH)/serial_link/tests/rules.mk
|
include $(QUANTUM_PATH)/serial_link/tests/rules.mk
|
||||||
|
ifneq ($(filter $(FULL_TESTS),$(TEST)),)
|
||||||
|
include build_full_test.mk
|
||||||
|
endif
|
||||||
|
|
||||||
$(TEST_OBJ)/$(TEST)_SRC := $($(TEST)_SRC)
|
$(TEST_OBJ)/$(TEST)_SRC := $($(TEST)_SRC)
|
||||||
$(TEST_OBJ)/$(TEST)_INC := $($(TEST)_INC) $(VPATH) $(GTEST_INC)
|
$(TEST_OBJ)/$(TEST)_INC := $($(TEST)_INC) $(VPATH) $(GTEST_INC)
|
||||||
$(TEST_OBJ)/$(TEST)_DEFS := $($(TEST)_DEFS)
|
$(TEST_OBJ)/$(TEST)_DEFS := $($(TEST)_DEFS)
|
||||||
|
$(TEST_OBJ)/$(TEST)_CONFIG := $($(TEST)_CONFIG)
|
||||||
|
|
||||||
include $(TMK_PATH)/native.mk
|
include $(TMK_PATH)/native.mk
|
||||||
include $(TMK_PATH)/rules.mk
|
include $(TMK_PATH)/rules.mk
|
||||||
|
|
|
@ -11,12 +11,6 @@ QUANTUM_PATH = $(TOP_DIR)/$(QUANTUM_DIR)
|
||||||
|
|
||||||
BUILD_DIR := $(TOP_DIR)/.build
|
BUILD_DIR := $(TOP_DIR)/.build
|
||||||
|
|
||||||
SERIAL_DIR := $(QUANTUM_DIR)/serial_link
|
|
||||||
SERIAL_PATH := $(QUANTUM_PATH)/serial_link
|
|
||||||
SERIAL_SRC := $(wildcard $(SERIAL_PATH)/protocol/*.c)
|
|
||||||
SERIAL_SRC += $(wildcard $(SERIAL_PATH)/system/*.c)
|
|
||||||
SERIAL_DEFS += -DSERIAL_LINK_ENABLE
|
|
||||||
|
|
||||||
COMMON_VPATH := $(TOP_DIR)
|
COMMON_VPATH := $(TOP_DIR)
|
||||||
COMMON_VPATH += $(TMK_PATH)
|
COMMON_VPATH += $(TMK_PATH)
|
||||||
COMMON_VPATH += $(QUANTUM_PATH)
|
COMMON_VPATH += $(QUANTUM_PATH)
|
||||||
|
@ -24,4 +18,3 @@ COMMON_VPATH += $(QUANTUM_PATH)/keymap_extras
|
||||||
COMMON_VPATH += $(QUANTUM_PATH)/audio
|
COMMON_VPATH += $(QUANTUM_PATH)/audio
|
||||||
COMMON_VPATH += $(QUANTUM_PATH)/process_keycode
|
COMMON_VPATH += $(QUANTUM_PATH)/process_keycode
|
||||||
COMMON_VPATH += $(QUANTUM_PATH)/api
|
COMMON_VPATH += $(QUANTUM_PATH)/api
|
||||||
COMMON_VPATH += $(SERIAL_PATH)
|
|
|
@ -0,0 +1,157 @@
|
||||||
|
# Copyright 2017 Fred Sundvik
|
||||||
|
#
|
||||||
|
# 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/>.
|
||||||
|
|
||||||
|
SERIAL_DIR := $(QUANTUM_DIR)/serial_link
|
||||||
|
SERIAL_PATH := $(QUANTUM_PATH)/serial_link
|
||||||
|
SERIAL_SRC := $(wildcard $(SERIAL_PATH)/protocol/*.c)
|
||||||
|
SERIAL_SRC += $(wildcard $(SERIAL_PATH)/system/*.c)
|
||||||
|
SERIAL_DEFS += -DSERIAL_LINK_ENABLE
|
||||||
|
COMMON_VPATH += $(SERIAL_PATH)
|
||||||
|
|
||||||
|
ifeq ($(strip $(API_SYSEX_ENABLE)), yes)
|
||||||
|
OPT_DEFS += -DAPI_SYSEX_ENABLE
|
||||||
|
SRC += $(QUANTUM_DIR)/api/api_sysex.c
|
||||||
|
OPT_DEFS += -DAPI_ENABLE
|
||||||
|
SRC += $(QUANTUM_DIR)/api.c
|
||||||
|
MIDI_ENABLE=yes
|
||||||
|
endif
|
||||||
|
|
||||||
|
MUSIC_ENABLE := 0
|
||||||
|
|
||||||
|
ifeq ($(strip $(AUDIO_ENABLE)), yes)
|
||||||
|
OPT_DEFS += -DAUDIO_ENABLE
|
||||||
|
MUSIC_ENABLE := 1
|
||||||
|
SRC += $(QUANTUM_DIR)/process_keycode/process_audio.c
|
||||||
|
SRC += $(QUANTUM_DIR)/audio/audio.c
|
||||||
|
SRC += $(QUANTUM_DIR)/audio/voices.c
|
||||||
|
SRC += $(QUANTUM_DIR)/audio/luts.c
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq ($(strip $(MIDI_ENABLE)), yes)
|
||||||
|
OPT_DEFS += -DMIDI_ENABLE
|
||||||
|
MUSIC_ENABLE := 1
|
||||||
|
SRC += $(QUANTUM_DIR)/process_keycode/process_midi.c
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq ($(MUSIC_ENABLE), 1)
|
||||||
|
SRC += $(QUANTUM_DIR)/process_keycode/process_music.c
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq ($(strip $(COMBO_ENABLE)), yes)
|
||||||
|
OPT_DEFS += -DCOMBO_ENABLE
|
||||||
|
SRC += $(QUANTUM_DIR)/process_keycode/process_combo.c
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq ($(strip $(VIRTSER_ENABLE)), yes)
|
||||||
|
OPT_DEFS += -DVIRTSER_ENABLE
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq ($(strip $(FAUXCLICKY_ENABLE)), yes)
|
||||||
|
OPT_DEFS += -DFAUXCLICKY_ENABLE
|
||||||
|
SRC += $(QUANTUM_DIR)/fauxclicky.c
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq ($(strip $(UCIS_ENABLE)), yes)
|
||||||
|
OPT_DEFS += -DUCIS_ENABLE
|
||||||
|
UNICODE_COMMON = yes
|
||||||
|
SRC += $(QUANTUM_DIR)/process_keycode/process_ucis.c
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq ($(strip $(UNICODEMAP_ENABLE)), yes)
|
||||||
|
OPT_DEFS += -DUNICODEMAP_ENABLE
|
||||||
|
UNICODE_COMMON = yes
|
||||||
|
SRC += $(QUANTUM_DIR)/process_keycode/process_unicodemap.c
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq ($(strip $(UNICODE_ENABLE)), yes)
|
||||||
|
OPT_DEFS += -DUNICODE_ENABLE
|
||||||
|
UNICODE_COMMON = yes
|
||||||
|
SRC += $(QUANTUM_DIR)/process_keycode/process_unicode.c
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq ($(strip $(UNICODE_COMMON)), yes)
|
||||||
|
SRC += $(QUANTUM_DIR)/process_keycode/process_unicode_common.c
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq ($(strip $(RGBLIGHT_ENABLE)), yes)
|
||||||
|
OPT_DEFS += -DRGBLIGHT_ENABLE
|
||||||
|
SRC += $(QUANTUM_DIR)/rgblight.c
|
||||||
|
CIE1931_CURVE = yes
|
||||||
|
LED_BREATHING_TABLE = yes
|
||||||
|
ifeq ($(strip $(RGBLIGHT_CUSTOM_DRIVER)), yes)
|
||||||
|
OPT_DEFS += -DRGBLIGHT_CUSTOM_DRIVER
|
||||||
|
else
|
||||||
|
SRC += $(QUANTUM_DIR)/light_ws2812.c
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq ($(strip $(TAP_DANCE_ENABLE)), yes)
|
||||||
|
OPT_DEFS += -DTAP_DANCE_ENABLE
|
||||||
|
SRC += $(QUANTUM_DIR)/process_keycode/process_tap_dance.c
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq ($(strip $(PRINTING_ENABLE)), yes)
|
||||||
|
OPT_DEFS += -DPRINTING_ENABLE
|
||||||
|
SRC += $(QUANTUM_DIR)/process_keycode/process_printer.c
|
||||||
|
SRC += $(TMK_DIR)/protocol/serial_uart.c
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq ($(strip $(SERIAL_LINK_ENABLE)), yes)
|
||||||
|
SRC += $(patsubst $(QUANTUM_PATH)/%,%,$(SERIAL_SRC))
|
||||||
|
OPT_DEFS += $(SERIAL_DEFS)
|
||||||
|
VAPTH += $(SERIAL_PATH)
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifneq ($(strip $(VARIABLE_TRACE)),)
|
||||||
|
SRC += $(QUANTUM_DIR)/variable_trace.c
|
||||||
|
OPT_DEFS += -DNUM_TRACED_VARIABLES=$(strip $(VARIABLE_TRACE))
|
||||||
|
ifneq ($(strip $(MAX_VARIABLE_TRACE_SIZE)),)
|
||||||
|
OPT_DEFS += -DMAX_VARIABLE_TRACE_SIZE=$(strip $(MAX_VARIABLE_TRACE_SIZE))
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq ($(strip $(LCD_ENABLE)), yes)
|
||||||
|
CIE1931_CURVE = yes
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq ($(strip $(BACKLIGHT_ENABLE)), yes)
|
||||||
|
ifeq ($(strip $(VISUALIZER_ENABLE)), yes)
|
||||||
|
CIE1931_CURVE = yes
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq ($(strip $(CIE1931_CURVE)), yes)
|
||||||
|
OPT_DEFS += -DUSE_CIE1931_CURVE
|
||||||
|
LED_TABLES = yes
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq ($(strip $(LED_BREATHING_TABLE)), yes)
|
||||||
|
OPT_DEFS += -DUSE_LED_BREATHING_TABLE
|
||||||
|
LED_TABLES = yes
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq ($(strip $(LED_TABLES)), yes)
|
||||||
|
SRC += $(QUANTUM_DIR)/led_tables.c
|
||||||
|
endif
|
||||||
|
|
||||||
|
QUANTUM_SRC:= \
|
||||||
|
$(QUANTUM_DIR)/quantum.c \
|
||||||
|
$(QUANTUM_DIR)/keymap_common.c \
|
||||||
|
$(QUANTUM_DIR)/keycode_config.c \
|
||||||
|
$(QUANTUM_DIR)/process_keycode/process_leader.c
|
||||||
|
|
||||||
|
ifndef CUSTOM_MATRIX
|
||||||
|
QUANTUM_SRC += $(QUANTUM_DIR)/matrix.c
|
||||||
|
endif
|
|
@ -3,6 +3,7 @@
|
||||||
* [Introduction](home.md)
|
* [Introduction](home.md)
|
||||||
* [QMK Overview](qmk_overview.md)
|
* [QMK Overview](qmk_overview.md)
|
||||||
* [Build Environment Setup](build_environment_setup.md)
|
* [Build Environment Setup](build_environment_setup.md)
|
||||||
|
* [Make instructions](make_instructions.md)
|
||||||
|
|
||||||
### Making a keymap
|
### Making a keymap
|
||||||
* [Keymap overview](keymap.md)
|
* [Keymap overview](keymap.md)
|
||||||
|
@ -19,10 +20,13 @@
|
||||||
* [FAQ: Compiling QMK](faq_build.md)
|
* [FAQ: Compiling QMK](faq_build.md)
|
||||||
|
|
||||||
### For hardware makers and modders
|
### For hardware makers and modders
|
||||||
* [Modding your keyboard](modding_your_keyboard.md)
|
* [Adding a keyboard to QMK](adding_a_keyboard_to_qmk.md)
|
||||||
* [Porting your keyboard to QMK](porting_your_keyboard_to_qmk.md)
|
* [Porting your keyboard to QMK](porting_your_keyboard_to_qmk.md)
|
||||||
|
* [Modding your keyboard](modding_your_keyboard.md)
|
||||||
* [Adding features to QMK](adding_features_to_qmk.md)
|
* [Adding features to QMK](adding_features_to_qmk.md)
|
||||||
|
* [ISP flashing guide](isp_flashing_guide.md)
|
||||||
|
|
||||||
### Other topics
|
### Other topics
|
||||||
* [General FAQ](faq.md)
|
* [General FAQ](faq.md)
|
||||||
* [Differences from TMK](differences_from_tmk.md)
|
* [Differences from TMK](differences_from_tmk.md)
|
||||||
|
* [Using Eclipse with QMK](eclipse.md)
|
||||||
|
|
|
@ -0,0 +1,35 @@
|
||||||
|
# Adding your keyboard to QMK
|
||||||
|
|
||||||
|
We welcome all keyboard projects into QMK, but ask that you try to stick to a couple guidelines that help us keep things organised and consistent.
|
||||||
|
|
||||||
|
## Naming your directory/project
|
||||||
|
|
||||||
|
All names should be lowercase alphanumeric, and separated by an underscore (`_`), but not begin with one. Dashes (`-`) aren't allow by our build system, and will confuse it with keymaps/subprojects. Your directory and your `.h` and `.c` files should have exactly the same name. Subprojects/revision should follow the same format.
|
||||||
|
|
||||||
|
## `readme.md`
|
||||||
|
|
||||||
|
All projects need to have a `readme.md` file that explains what the keyboard is, who made it, where it is available, and links to move information (template coming).
|
||||||
|
|
||||||
|
## Image/Hardware files
|
||||||
|
|
||||||
|
In an effort to keep the repo size down, we're no longer accepting images of any format in the repo, with few exceptions. Hosting them elsewhere (imgur) and linking them in the readme.md is the preferred method.
|
||||||
|
|
||||||
|
Any sort of hardware file (plate, case, pcb) can't be stored in qmk_firmware, but we have the [qmk.fm repo](https://github.com/qmk/qmk.fm) where such files (as well as in-depth info) can be store, and viewed on [qmk.fm](http://qmk.fm). Downloadable files are stored in `/<keyboard>/` (name follows the same format as above) which are served at `http://qmk.fm/<keyboard>/`, and pages are generated from `/_pages/<keyboard>/` which are served at the same location (.md files are generated into .html files through Jekyll). Check out the `lets_split` directory for an example.
|
||||||
|
|
||||||
|
## Non-production/handwired projects
|
||||||
|
|
||||||
|
We're happy to accept any project that uses QMK, including prototypes and handwired ones, but we have a separate `/keyboards/handwired/` folder for them, so the main `/keyboards/` folder doesn't get overcrowded. If a prototype project becomes a production project at some point in the future, we'd be happy to move it to the main `/keyboards/` folder!
|
||||||
|
|
||||||
|
## Warnings as errors
|
||||||
|
|
||||||
|
When developing your keyboard, keep in mind that all warnings will be treated as errors - these small warnings can build-up and cause larger errors down the road (and keeping them is generally a bad practice).
|
||||||
|
|
||||||
|
## Licenses
|
||||||
|
|
||||||
|
If you're adapting your keyboard's setup from another project, but not using the same code, but sure to update the copyright header at the top of the files to show your name, it this format:
|
||||||
|
|
||||||
|
Copyright 2017 Your Name <your@email.com>
|
||||||
|
|
||||||
|
## Technical details
|
||||||
|
|
||||||
|
If you're looking for more information on making your keyboard work with QMK, [check out this guide](porting_your_keyboard_to_qmk.md)!
|
|
@ -0,0 +1,106 @@
|
||||||
|
# ISP Flashing Guide
|
||||||
|
|
||||||
|
If you're having trouble flashing/erasing your board, and running into cryptic error messages like any of the following:
|
||||||
|
|
||||||
|
libusb: warning [darwin_transfer_status] transfer error: timed out
|
||||||
|
dfu.c:844: -ETIMEDOUT: Transfer timed out, NAK 0xffffffc4 (-60)
|
||||||
|
atmel.c:1627: atmel_flash: flash data dfu_download failed.
|
||||||
|
atmel.c:1629: Expected message length of 1072, got -60.
|
||||||
|
atmel.c:1434: Error flashing the block: err -2.
|
||||||
|
ERROR
|
||||||
|
Memory write error, use debug for more info.
|
||||||
|
commands.c:360: Error writing memory data. (err -4)
|
||||||
|
|
||||||
|
dfu.c:844: -EPIPE: a) Babble detect or b) Endpoint stalled 0xffffffe0 (-32)
|
||||||
|
Device is write protected.
|
||||||
|
dfu.c:252: dfu_clear_status( 0x7fff4fc2ea80 )
|
||||||
|
atmel.c:1434: Error flashing the block: err -2.
|
||||||
|
ERROR
|
||||||
|
Memory write error, use debug for more info.
|
||||||
|
commands.c:360: Error writing memory data. (err -4)
|
||||||
|
|
||||||
|
You're likely going to need to ISP flash your board/device to get it working again. Luckily, this process is pretty straight-forward, provided you have any extra programmable keyboard, Arduino, or Teensy 2.0/Teensy 2.0++. There are also dedicated ISP flashers available for this, but most cost >$15, and it's assumed that if you are googling this error, this is the first you've heard about ISP flashing, and don't have one readily available (whereas you might have some other AVR board). __We'll be using a Teensy 2.0 with Windows 10 in this guide__ - if you are comfortable doing this on another system, please consider editing this guide and contributing those instructions!
|
||||||
|
|
||||||
|
## Software needed
|
||||||
|
|
||||||
|
* [The Arduino IDE](https://www.arduino.cc/en/Main/Software)
|
||||||
|
* [Teensyduino](https://www.pjrc.com/teensy/td_download.html) (if you're using a Teensy)
|
||||||
|
* [WinAVR](http://www.ladyada.net/learn/avr/setup-win.html) (Windows)
|
||||||
|
|
||||||
|
## Wiring
|
||||||
|
|
||||||
|
This is pretty straight-forward - we'll be connecting like-things to like-things in the following manner:
|
||||||
|
|
||||||
|
Flasher B0 <-> Keyboard RESET
|
||||||
|
Flasher B1 <-> Keyboard B1 (SCLK)
|
||||||
|
Flasher B2 <-> Keyboard B2 (MOSI)
|
||||||
|
Flasher B3 <-> Keyboard B3 (MISO)
|
||||||
|
Flasher VCC <-> Keyboard VCC
|
||||||
|
Flasher GND <-> Keyboard GND
|
||||||
|
|
||||||
|
## The ISP firmware
|
||||||
|
|
||||||
|
Make sure your keyboard is unplugged from any device, and plug in your Teensy.
|
||||||
|
|
||||||
|
1. Run Arduino after you have everything installed
|
||||||
|
2. Select `Tools > Board * > Teensy 2.0`
|
||||||
|
3. Click `File > Examples > 11.ArduinoISP > ArduinoISP`
|
||||||
|
|
||||||
|
Then scroll down until you see something that looks like this block of code:
|
||||||
|
|
||||||
|
// Configure which pins to use:
|
||||||
|
|
||||||
|
// The standard pin configuration.
|
||||||
|
#ifndef ARDUINO_HOODLOADER2
|
||||||
|
|
||||||
|
#define RESET 0 // Use 0 (B0) instead of 10
|
||||||
|
#define LED_HB 11 // Use 11 (LED on the Teensy 2.0)
|
||||||
|
#define LED_ERR 8 // This won't be used unless you have an LED hooked-up to 8 (D3)
|
||||||
|
#define LED_PMODE 7 // This won't be used unless you have an LED hooked-up to 7 (D2)
|
||||||
|
|
||||||
|
And make the changes in the last four lines. If you're using something besides the Teenys 2.0, you'll want to choose something else that makes sense for `LED_HB`. We define `RESET` as `0`/`B0` because that's what's close - if you want to use another pin for some reason, [you can use the pinouts to choose something else](https://www.pjrc.com/teensy/pinout.html).
|
||||||
|
|
||||||
|
Once you've made your changes, you can click the Upload button (right arrow), which will open up the Teensy flasher app - you'll need to press the reset button on the Teensy the first time, but after that, it's automatic (you shouldn't be flashing this more than once, though). Once flashed, the orange LED on the Teensy will flash on and off, indicating it's ready for some action.
|
||||||
|
|
||||||
|
## The .hex file
|
||||||
|
|
||||||
|
Before flashing your firmware, you're going to need to and do a little preparation. We'll be appending [this bootloader (also a .hex file)](https://github.com/qmk/qmk_firmware/blob/master/util/bootloader_atmega32u4_1_0_0.hex) to the end of our firmware by opening the original .hex file in a text editor, and removing the last line, which should be `:00000001FF` (this is an EOF message). After that's been removed, copy the entire bootloader's contents and paste it at the end of the original file, and save it.
|
||||||
|
|
||||||
|
It's possible to use other bootloaders here in the same way, but __you need a bootloader__, otherwise you'll have to ISP to write new firmware to your keyboard.
|
||||||
|
|
||||||
|
## Flashing your firmware
|
||||||
|
|
||||||
|
Make sure your keyboard is unplugged from any device, and plug in your Teensy.
|
||||||
|
|
||||||
|
Open `cmd` and navigate to your where your modified .hex file is. We'll pretend this file is called `main.hex`, and that your Teensy 2.0 is on the `COM3` port - if you're unsure, you can open your Device Manager, and look for `Ports > USB Serial Device`. Use that COM port here. You can confirm it's the right port with:
|
||||||
|
|
||||||
|
avrdude -c avrisp -P COM3 -p atmega32u4
|
||||||
|
|
||||||
|
and you should get something like the following output:
|
||||||
|
|
||||||
|
avrdude: AVR device initialized and ready to accept instructions
|
||||||
|
|
||||||
|
Reading | ################################################## | 100% 0.02s
|
||||||
|
|
||||||
|
avrdude: Device signature = 0x1e9587
|
||||||
|
|
||||||
|
avrdude: safemode: Fuses OK
|
||||||
|
|
||||||
|
avrdude done. Thank you.
|
||||||
|
|
||||||
|
Since our keyboard uses an `atmega32u4` (common), that is the chip we'll specify. This is the full command:
|
||||||
|
|
||||||
|
avrdude -c avrisp -P COM3 -p atmega32u4 -U flash:w:main.hex:i
|
||||||
|
|
||||||
|
You should see a couple of progress bars, then you should see:
|
||||||
|
|
||||||
|
avrdude: verifying ...
|
||||||
|
avrdude: 32768 bytes of flash verified
|
||||||
|
|
||||||
|
avrdude: safemode: Fuses OK
|
||||||
|
|
||||||
|
avrdude done. Thank you.
|
||||||
|
|
||||||
|
Which means everything should be ok! Your board may restart automatically, otherwise, unplug your Teensy and plug in your keyboard - you can leave your Teensy wired to your keyboard while testing things, but it's recommended that you desolder it/remove the wiring once you're sure everything works.
|
||||||
|
|
||||||
|
If you have any questions/problems, feel free to [open an issue](https://github.com/qmk/qmk_firmware/issues/new)!
|
|
@ -6,6 +6,10 @@ These functions work the same way that their `ACTION_*` functions do - they're j
|
||||||
|
|
||||||
Instead of using `FNx` when defining `ACTION_*` functions, you can use `F(x)` - the benefit here is being able to use more than 32 function actions (up to 4096), if you happen to need them.
|
Instead of using `FNx` when defining `ACTION_*` functions, you can use `F(x)` - the benefit here is being able to use more than 32 function actions (up to 4096), if you happen to need them.
|
||||||
|
|
||||||
|
### Limits of these aliases
|
||||||
|
|
||||||
|
Currently, the keycodes able to used with these functions are limited to the TMK ones, meaning you can't use keycodes like `KC_TILD`, or anything greater than 0xFF. For a full list of the keycodes able to be used, [see this list](keycode.txt).
|
||||||
|
|
||||||
### Switching and toggling layers
|
### Switching and toggling layers
|
||||||
|
|
||||||
`MO(layer)` - momentary switch to *layer*. As soon as you let go of the key, the layer is deactivated and you pop back out to the previous layer. When you apply this to a key, that same key must be set as `KC_TRNS` on the destination layer. Otherwise, you won't make it back to the original layer when you release the key (and you'll get a keycode sent). You can only switch to layers *above* your current layer. If you're on layer 0 and you use `MO(1)`, that will switch to layer 1 just fine. But if you include `MO(3)` on layer 5, that won't do anything for you -- because layer 3 is lower than layer 5 on the stack.
|
`MO(layer)` - momentary switch to *layer*. As soon as you let go of the key, the layer is deactivated and you pop back out to the previous layer. When you apply this to a key, that same key must be set as `KC_TRNS` on the destination layer. Otherwise, you won't make it back to the original layer when you release the key (and you'll get a keycode sent). You can only switch to layers *above* your current layer. If you're on layer 0 and you use `MO(1)`, that will switch to layer 1 just fine. But if you include `MO(3)` on layer 5, that won't do anything for you -- because layer 3 is lower than layer 5 on the stack.
|
||||||
|
|
|
@ -7,7 +7,7 @@ In rare circumstances, your keyboard/device can become unwritable, and `dfu-prog
|
||||||
[ X ERROR
|
[ X ERROR
|
||||||
Memory write error, use debug for more info.
|
Memory write error, use debug for more info.
|
||||||
|
|
||||||
Currently the only way to solve this is to [reprogram the chip via ISP](https://www.reddit.com/r/olkb/comments/4rjzen/flashing_error_on_mac_os_x/d52rj8o/). This requires another device to be hooked up to a couple of exposed pins on the PCB. There is a guide on how to do this [here](https://learn.sparkfun.com/tutorials/installing-an-arduino-bootloader), and [this is where things are on the Planck PCB](http://imgur.com/lvbxbHt).
|
Currently the only way to solve this is to [reprogram the chip via ISP](https://www.reddit.com/r/olkb/comments/4rjzen/flashing_error_on_mac_os_x/d52rj8o/). This requires another device to be hooked up to a couple of exposed pins on the PCB. __[We now have a guide on ISP flashing](isp_flashing_guide.md)__ and [this is where things are on the Planck PCB](http://imgur.com/lvbxbHt).
|
||||||
|
|
||||||
An example command to flash the board once things are hooked up is:
|
An example command to flash the board once things are hooked up is:
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
|
|
||||||
## Audio output from a speaker
|
## Audio output from a speaker
|
||||||
|
|
||||||
Your keyboard can make sounds! If you've got a Planck, Preonic, or basically any keyboard that allows access to the C6 port, you can hook up a simple speaker and make it beep. You can use those beeps to indicate layer transitions, modifiers, special keys, or just to play some funky 8bit tunes.
|
Your keyboard can make sounds! If you've got a Planck, Preonic, or basically any keyboard that allows access to the C6 or B5 port (`#define C6_AUDIO` and `#define B5_AUDIO`), you can hook up a simple speaker and make it beep. You can use those beeps to indicate layer transitions, modifiers, special keys, or just to play some funky 8bit tunes.
|
||||||
|
|
||||||
The audio code lives in [quantum/audio/audio.h](https://github.com/qmk/qmk_firmware/blob/master/quantum/audio/audio.h) and in the other files in the audio directory. It's enabled by default on the Planck [stock keymap](https://github.com/qmk/qmk_firmware/blob/master/keyboards/planck/keymaps/default/keymap.c). Here are the important bits:
|
The audio code lives in [quantum/audio/audio.h](https://github.com/qmk/qmk_firmware/blob/master/quantum/audio/audio.h) and in the other files in the audio directory. It's enabled by default on the Planck [stock keymap](https://github.com/qmk/qmk_firmware/blob/master/keyboards/planck/keymaps/default/keymap.c). Here are the important bits:
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,7 @@
|
||||||
|
# Porting your keyboard to QMK
|
||||||
|
|
||||||
|
This page describes the technical details of porting an existing keyboard to QMK. If you're looking to add your keyboard to QMK, please [look through these guidelines](adding_a_keyboard_to_qmk.md)!
|
||||||
|
|
||||||
If your keyboard is running an Atmega chip (atmega32u4 and others), it's pretty easy to get things setup for compiling your own firmware to flash onto your board. There is a `/util/new_project.sh <keyboard>` script to help get you started - you can simply pass your keyboard's name into the script, and all of the necessary files will be created. The components of each are described below.
|
If your keyboard is running an Atmega chip (atmega32u4 and others), it's pretty easy to get things setup for compiling your own firmware to flash onto your board. There is a `/util/new_project.sh <keyboard>` script to help get you started - you can simply pass your keyboard's name into the script, and all of the necessary files will be created. The components of each are described below.
|
||||||
|
|
||||||
## `/keyboards/<keyboard>/config.h`
|
## `/keyboards/<keyboard>/config.h`
|
||||||
|
@ -34,7 +38,7 @@ At the bottom of the file, you'll find lots of features to turn on and off - all
|
||||||
|
|
||||||
## `/keyboards/<keyboard>/readme.md`
|
## `/keyboards/<keyboard>/readme.md`
|
||||||
|
|
||||||
This is where you'll describe your keyboard - please write as much as you can about it! Talking about default functionality/features is useful here. Feel free to link to external pages/sites if necessary. Images can be included here as well. This file will be rendered into a webpage at qmk.fm/keyboards/<keyboard>/.
|
This is where you'll describe your keyboard - please write as much as you can about it! Talking about default functionality/features is useful here. Feel free to link to external pages/sites if necessary. Images can be included here as well, as long as they're hosted elsewhere (imgur).
|
||||||
|
|
||||||
## `/keyboards/<keyboard>/<keyboard>.c`
|
## `/keyboards/<keyboard>/<keyboard>.c`
|
||||||
|
|
||||||
|
|
|
@ -55,12 +55,12 @@ OPT_DEFS += -DBOOTLOADER_SIZE=4096
|
||||||
|
|
||||||
|
|
||||||
# Build Options
|
# Build Options
|
||||||
# comment out to disable the options.
|
# change to no to disable the options.
|
||||||
#
|
#
|
||||||
BOOTMAGIC_ENABLE ?= yes # Virtual DIP switch configuration(+1000)
|
BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000)
|
||||||
MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700)
|
MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
|
||||||
EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450)
|
EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
|
||||||
CONSOLE_ENABLE ?= yes # Console for debug(+400)
|
CONSOLE_ENABLE = yes # Console for debug(+400)
|
||||||
COMMAND_ENABLE ?= yes # Commands for debug and configuration
|
COMMAND_ENABLE = yes # Commands for debug and configuration
|
||||||
#SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend
|
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
|
||||||
#NKRO_ENABLE = yes # USB Nkey Rollover - not yet supported in LUFA
|
NKRO_ENABLE = no # USB Nkey Rollover - not yet supported in LUFA
|
||||||
|
|
|
@ -52,15 +52,15 @@ OPT_DEFS += -DBOOTLOADER_SIZE=4096
|
||||||
# Build Options
|
# Build Options
|
||||||
# comment out to disable the options.
|
# comment out to disable the options.
|
||||||
#
|
#
|
||||||
BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration(+1000)
|
BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
|
||||||
MOUSEKEY_ENABLE ?= no # 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 ?= yes # Console for debug(+400)
|
CONSOLE_ENABLE = yes # Console for debug(+400)
|
||||||
COMMAND_ENABLE ?= yes # Commands for debug and configuration
|
COMMAND_ENABLE = yes # Commands for debug and configuration
|
||||||
NKRO_ENABLE ?= yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
|
NKRO_ENABLE = yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
|
||||||
RGBLIGHT_ENABLE ?= yes # Enable keyboard underlight functionality (+4870)
|
RGBLIGHT_ENABLE = yes # Enable keyboard underlight functionality (+4870)
|
||||||
BACKLIGHT_ENABLE ?= yes # Enable keyboard backlight functionality (+1150)
|
BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality (+1150)
|
||||||
MIDI_ENABLE ?= no # MIDI controls
|
MIDI_ENABLE = no # MIDI controls
|
||||||
AUDIO_ENABLE ?= no
|
AUDIO_ENABLE = no
|
||||||
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
|
||||||
|
|
|
@ -52,15 +52,15 @@ OPT_DEFS += -DBOOTLOADER_SIZE=4096
|
||||||
# Build Options
|
# Build Options
|
||||||
# comment out to disable the options.
|
# comment out to disable the options.
|
||||||
#
|
#
|
||||||
BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration(+1000)
|
BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
|
||||||
MOUSEKEY_ENABLE ?= no # 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 ?= yes # Console for debug(+400)
|
CONSOLE_ENABLE = yes # Console for debug(+400)
|
||||||
COMMAND_ENABLE ?= yes # Commands for debug and configuration
|
COMMAND_ENABLE = yes # Commands for debug and configuration
|
||||||
NKRO_ENABLE ?= yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
|
NKRO_ENABLE = yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
|
||||||
RGBLIGHT_ENABLE ?= no # Enable keyboard underlight functionality (+4870)
|
RGBLIGHT_ENABLE = no # Enable keyboard underlight functionality (+4870)
|
||||||
BACKLIGHT_ENABLE ?= yes # Enable keyboard backlight functionality (+1150)
|
BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality (+1150)
|
||||||
MIDI_ENABLE ?= no # MIDI controls
|
MIDI_ENABLE = no # MIDI controls
|
||||||
AUDIO_ENABLE ?= no
|
AUDIO_ENABLE = no
|
||||||
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
|
||||||
|
|
|
@ -49,6 +49,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
#define BACKLIGHT_PIN B7
|
#define BACKLIGHT_PIN B7
|
||||||
#define BACKLIGHT_BREATHING
|
#define BACKLIGHT_BREATHING
|
||||||
|
|
||||||
|
#define C6_AUDIO
|
||||||
|
|
||||||
/* COL2ROW or ROW2COL */
|
/* COL2ROW or ROW2COL */
|
||||||
#define DIODE_DIRECTION COL2ROW
|
#define DIODE_DIRECTION COL2ROW
|
||||||
|
|
||||||
|
|
|
@ -1,26 +1,16 @@
|
||||||
Atomic keyboard firmware
|
Atomic
|
||||||
======================
|
===
|
||||||
DIY/Assembled ortholinear 60% keyboard by [Ortholinear Keyboards](http://ortholinearkeyboards.com).
|
|
||||||
|
|
||||||
## Quantum MK Firmware
|
![Atomic](http://i.imgur.com/3gNDJAh.jpg)
|
||||||
|
|
||||||
For the full Quantum feature list, see [the parent readme.md](/readme.md).
|
A compact 60% (15x5) ortholinear keyboard kit made and sold by OLKB. [More info on qmk.fm](http://qmk.fm/atomic/)
|
||||||
|
|
||||||
## Building
|
Keyboard Maintainer: [Jack Humbert](https://github.com/jackhumbert)
|
||||||
|
Hardware Supported: Atomic PCB rev1, Teensy 2.0
|
||||||
|
Hardware Availability: no longer available
|
||||||
|
|
||||||
Download or clone the whole firmware and navigate to the keyboards/atomic folder. Once your dev env is setup, you'll be able to type `make` to generate your .hex - you can then use `make dfu` to program your PCB once you hit the reset button.
|
Make example for this keyboard (after setting up your build environment):
|
||||||
|
|
||||||
Depending on which keymap you would like to use, you will have to compile slightly differently.
|
make atomic-default
|
||||||
|
|
||||||
### Default
|
See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
|
||||||
To build with the default keymap, simply run `make default`.
|
|
||||||
|
|
||||||
### Other Keymaps
|
|
||||||
Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create a file in the keymaps folder named `<name>.c` and see keymap document (you can find in top readme.md) and existent keymap files.
|
|
||||||
|
|
||||||
To build the firmware binary hex file with a keymap just do `make` with a keymap like this:
|
|
||||||
|
|
||||||
```
|
|
||||||
$ make [default|jack|<name>]
|
|
||||||
```
|
|
||||||
Keymaps follow the format **__\<name\>.c__** and are stored in the `keymaps` folder.
|
|
|
@ -52,18 +52,18 @@ OPT_DEFS += -DBOOTLOADER_SIZE=4096
|
||||||
# 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 = yes # 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 ?= yes # Commands for debug and configuration
|
COMMAND_ENABLE = yes # Commands for debug and configuration
|
||||||
NKRO_ENABLE ?= no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
|
NKRO_ENABLE = no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
|
||||||
BACKLIGHT_ENABLE ?= yes # Enable keyboard backlight functionality
|
BACKLIGHT_ENABLE = yes # 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 ?= no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
|
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
|
||||||
|
|
||||||
# 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
|
|
@ -64,19 +64,19 @@ OPT_DEFS += -DBOOTLOADER_SIZE=4096
|
||||||
# comment out to disable the options.
|
# comment out to disable the options.
|
||||||
#
|
#
|
||||||
#BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000)
|
#BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000)
|
||||||
MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700)
|
MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
|
||||||
EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450)
|
EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
|
||||||
CONSOLE_ENABLE ?= yes # Console for debug(+400)
|
CONSOLE_ENABLE = yes # Console for debug(+400)
|
||||||
COMMAND_ENABLE ?= yes # Commands for debug and configuration
|
COMMAND_ENABLE = yes # Commands for debug and configuration
|
||||||
# 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 ?= yes # Breathing sleep LED during USB suspend
|
# SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend
|
||||||
NKRO_ENABLE ?= yes # USB Nkey Rollover - not yet supported in LUFA
|
NKRO_ENABLE = yes # USB Nkey Rollover - not yet supported in LUFA
|
||||||
# BACKLIGHT_ENABLE ?= yes # Enable keyboard backlight functionality
|
# BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
|
||||||
# MIDI_ENABLE ?= YES # MIDI controls
|
# MIDI_ENABLE = YES # MIDI controls
|
||||||
UNICODE_ENABLE ?= YES # Unicode
|
UNICODE_ENABLE = YES # Unicode
|
||||||
# BLUETOOTH_ENABLE ?= yes # Enable Bluetooth with the Adafruit EZ-Key HID
|
# BLUETOOTH_ENABLE = yes # Enable Bluetooth with the Adafruit EZ-Key HID
|
||||||
|
|
||||||
USB ?= /dev/cu.usbmodem1411
|
USB = /dev/cu.usbmodem1411
|
||||||
|
|
||||||
upload: build
|
upload: build
|
||||||
$(ATREUS_UPLOAD_COMMAND)
|
$(ATREUS_UPLOAD_COMMAND)
|
||||||
|
|
|
@ -35,8 +35,8 @@ void promicro_bootloader_jmp(bool program);
|
||||||
{ KC_##k00, KC_##k01, KC_##k02, KC_##k03, KC_##k04, KC_##k05, KC_NO, KC_##k06, KC_##k07, KC_##k08, KC_##k09, KC_##k0a, KC_##k0b }, \
|
{ KC_##k00, KC_##k01, KC_##k02, KC_##k03, KC_##k04, KC_##k05, KC_NO, 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_NO, KC_##k16, KC_##k17, KC_##k18, KC_##k19, KC_##k1a, KC_##k1b }, \
|
{ KC_##k10, KC_##k11, KC_##k12, KC_##k13, KC_##k14, KC_##k15, KC_NO, 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_NO, KC_##k26, KC_##k27, KC_##k28, KC_##k29, KC_##k2a, KC_##k2b }, \
|
{ KC_##k20, KC_##k21, KC_##k22, KC_##k23, KC_##k24, KC_##k25, KC_NO, 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_##k46, KC_##k36, KC_##k37, KC_##k38, KC_##k39, KC_##k3a, KC_##k3b }, \
|
{ KC_##k30, KC_##k31, KC_##k32, KC_##k33, KC_##k34, KC_##k35, KC_##k47, KC_##k36, KC_##k37, KC_##k38, KC_##k39, KC_##k3a, KC_##k3b }, \
|
||||||
{ KC_##k40, KC_##k41, KC_##k42, KC_##k43, KC_##k44, KC_##k45, KC_##k47, KC_##k48, KC_##k49, KC_##k4a, KC_##k4b, KC_##k4c, KC_##k4d } \
|
{ KC_##k40, KC_##k41, KC_##k42, KC_##k43, KC_##k44, KC_##k45, KC_##k46, KC_##k48, KC_##k49, KC_##k4a, KC_##k4b, KC_##k4c, KC_##k4d } \
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
NKRO_ENABLE = true
|
||||||
|
MOUSEKEY_ENABLE = no
|
||||||
|
EXTRAKEY_ENABLE = yes
|
||||||
|
CONSOLE_ENABLE = no
|
|
@ -0,0 +1,10 @@
|
||||||
|
<!-- -*- mode: markdown; fill-column: 8192 -*- -->
|
||||||
|
|
||||||
|
Atreus52 Modification
|
||||||
|
=======================
|
||||||
|
|
||||||
|
Firmware for my custom keyboard based on the Atreus layout, but with 5 rows and only 5 columns per hand.
|
||||||
|
More documentation coming soon.
|
||||||
|
|
||||||
|
# License
|
||||||
|
GPL-3+
|
|
@ -0,0 +1,18 @@
|
||||||
|
#include "../../config.h"
|
||||||
|
|
||||||
|
#undef MANUFACTURER
|
||||||
|
#undef PRODUCT
|
||||||
|
#undef DESCRIPTION
|
||||||
|
#undef MATRIX_ROW_PINS
|
||||||
|
#undef MATRIX_COL_PINS
|
||||||
|
#undef DIODE_DIRECTION
|
||||||
|
|
||||||
|
/* USB Device descriptor parameter */
|
||||||
|
#define MANUFACTURER Mesh Industries
|
||||||
|
#define PRODUCT Atreus52 Treeboard
|
||||||
|
#define DESCRIPTION q.m.k. keyboard firmware for Atreus52
|
||||||
|
|
||||||
|
#define MATRIX_ROW_PINS { C6, D7, E6, B4, B5 }
|
||||||
|
#define MATRIX_COL_PINS { B2, B1, F7, F6, F5, F4, B6, D3, D2, D1, D0, D4, B3 }
|
||||||
|
|
||||||
|
#define DIODE_DIRECTION COL2ROW
|
|
@ -0,0 +1,99 @@
|
||||||
|
#include "atreus62.h"
|
||||||
|
|
||||||
|
// Layers
|
||||||
|
#define DVORAK 0
|
||||||
|
#define QWERTY 1
|
||||||
|
#define RAISE 2
|
||||||
|
#define LOWER 3
|
||||||
|
#define BDO 4
|
||||||
|
#define RESETL 5
|
||||||
|
|
||||||
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
[DVORAK] = KC_KEYMAP(
|
||||||
|
NO, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, NO, \
|
||||||
|
NO, QUOT, COMM, DOT, P, Y, F, G, C, R, L, NO, \
|
||||||
|
NO, A, O, E, U, I, D, H, T, N, S, NO, \
|
||||||
|
NO, SCLN, Q, J, K, X, B, M, W, V, Z, NO, \
|
||||||
|
NO, FN2, LALT, LCTL, FN1, LSFT, BSPC, ENT, SPC, FN0, LGUI, LEFT, RGHT, NO ),
|
||||||
|
|
||||||
|
[QWERTY] = KC_KEYMAP(
|
||||||
|
NO, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, NO, \
|
||||||
|
NO, Q, W, E, R, T, Y, U, I, O, P, NO, \
|
||||||
|
NO, A, S, D, F, G, H, J, K, L, SCLN, NO, \
|
||||||
|
NO, Z, X, C, V, B, N, M, COMM, DOT, SLSH, NO, \
|
||||||
|
NO, FN2, LALT, LCTL, FN1, LSFT, BSPC, ENT, SPC, FN0, LGUI, LEFT, RGHT, NO ),
|
||||||
|
|
||||||
|
[RAISE] = KC_KEYMAP(
|
||||||
|
NO, MRWD, MPRV, MPLY, MNXT, MFFD, TRNS, MUTE, VOLD, VOLU, DEL, NO, \
|
||||||
|
NO, TILD, GRV, LCBR, RCBR, DQUO, QUOT, EQL, PLUS, MINS, QUES, NO, \
|
||||||
|
NO, ESC, TAB, LPRN, RPRN, BSLS, SLSH, LEFT, DOWN, UP, RGHT, NO, \
|
||||||
|
NO, TRNS, TRNS, LBRC, RBRC, TRNS, INS, PIPE, UNDS, TRNS, TRNS, NO, \
|
||||||
|
NO, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, FN3, NO ),
|
||||||
|
|
||||||
|
[LOWER] = KC_KEYMAP(
|
||||||
|
NO, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, NO, \
|
||||||
|
NO, EXLM, AT, HASH, DLR, PERC, CIRC, AMPR, ASTR, LPRN, RPRN, NO, \
|
||||||
|
NO, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, NO, \
|
||||||
|
NO, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, DOT, TRNS, TRNS, TRNS, NO, \
|
||||||
|
NO, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, NO ),
|
||||||
|
|
||||||
|
[BDO] = KC_KEYMAP(
|
||||||
|
NO, ESC, 1, 2, 3, 4, 5, 0, SLSH, U, C, NO, \
|
||||||
|
NO, TAB, Q, W, E, R, 6, Y, I, O, P, NO, \
|
||||||
|
NO, LSFT, A, S, D, F, 7, G, H, J, K, NO, \
|
||||||
|
NO, T, Z, X, C, V, 8, B, N, M, L, NO, \
|
||||||
|
NO, LCTL, SPC, SPC, SPC, SPC, COMM, ENT, 9, NO, NO, NO, FN2, NO ),
|
||||||
|
|
||||||
|
[RESETL] = KEYMAP(
|
||||||
|
KC_NO, RESET, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, \
|
||||||
|
KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, \
|
||||||
|
KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, \
|
||||||
|
KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, \
|
||||||
|
KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_FN3,KC_NO )
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
const uint16_t PROGMEM fn_actions[] = {
|
||||||
|
[0] = ACTION_LAYER_MOMENTARY(RAISE), // Raise layer
|
||||||
|
[1] = ACTION_LAYER_MOMENTARY(LOWER), // Lower layer
|
||||||
|
[2] = ACTION_LAYER_TOGGLE(BDO), // BDO layer
|
||||||
|
[3] = ACTION_LAYER_TOGGLE(RESETL) // RESET layer
|
||||||
|
};
|
||||||
|
|
||||||
|
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
|
||||||
|
{
|
||||||
|
// MACRODOWN only works in this function
|
||||||
|
switch (id) {
|
||||||
|
case 0:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
register_code(KC_RSFT);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
unregister_code(KC_RSFT);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return MACRO_NONE;
|
||||||
|
};
|
||||||
|
|
||||||
|
static uint8_t qw_dv_swap_state = 0;
|
||||||
|
|
||||||
|
bool process_record_user (uint16_t keycode, keyrecord_t *record) {
|
||||||
|
if (keycode == KC_LGUI) {
|
||||||
|
if (record->event.pressed)
|
||||||
|
qw_dv_swap_state |= 0b00000001;
|
||||||
|
else
|
||||||
|
qw_dv_swap_state &= ~(0b00000001);
|
||||||
|
}
|
||||||
|
if (keycode == KC_LCTL) {
|
||||||
|
if (record->event.pressed)
|
||||||
|
qw_dv_swap_state |= 0b00000010;
|
||||||
|
else
|
||||||
|
qw_dv_swap_state &= ~(0b00000010);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (qw_dv_swap_state == 0b00000011) {
|
||||||
|
layer_invert(DVORAK);
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
|
@ -51,16 +51,16 @@ OPT_DEFS += -DBOOTLOADER_SIZE=4096
|
||||||
# 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 = yes # Mouse keys(+4700)
|
||||||
EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450)
|
EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
|
||||||
CONSOLE_ENABLE ?= yes # Console for debug(+400)
|
CONSOLE_ENABLE = yes # Console for debug(+400)
|
||||||
COMMAND_ENABLE ?= yes # Commands for debug and configuration
|
COMMAND_ENABLE = yes # Commands for debug and configuration
|
||||||
NKRO_ENABLE ?= no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
|
NKRO_ENABLE = no # 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
|
||||||
UNICODE_ENABLE ?= yes # Unicode
|
UNICODE_ENABLE = yes # Unicode
|
||||||
#BLUETOOTH_ENABLE ?= yes # Enable Bluetooth with the Adafruit EZ-Key HID
|
#BLUETOOTH_ENABLE = yes # Enable Bluetooth with the Adafruit EZ-Key HID
|
||||||
|
|
||||||
# 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
|
||||||
|
|
|
@ -53,15 +53,15 @@ OPT_DEFS += -DBOOTLOADER_SIZE=512
|
||||||
# Build Options
|
# Build Options
|
||||||
# comment out to disable the options.
|
# comment out to disable the options.
|
||||||
#
|
#
|
||||||
BOOTMAGIC_ENABLE ?= yes # Virtual DIP switch configuration(+1000)
|
BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000)
|
||||||
MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700)
|
MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
|
||||||
EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450)
|
EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
|
||||||
CONSOLE_ENABLE ?= yes # Console for debug(+400)
|
CONSOLE_ENABLE = yes # Console for debug(+400)
|
||||||
COMMAND_ENABLE ?= yes # Commands for debug and configuration
|
COMMAND_ENABLE = yes # Commands for debug and configuration
|
||||||
# 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 ?= yes # Breathing sleep LED during USB suspend
|
# 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
|
# NKRO_ENABLE = yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
|
||||||
# BACKLIGHT_ENABLE ?= yes # Enable keyboard backlight functionality
|
# BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
|
||||||
# MIDI_ENABLE ?= YES # MIDI controls
|
# MIDI_ENABLE = YES # MIDI controls
|
||||||
# UNICODE_ENABLE ?= YES # Unicode
|
# UNICODE_ENABLE = YES # Unicode
|
||||||
# BLUETOOTH_ENABLE ?= yes # Enable Bluetooth with the Adafruit EZ-Key HID
|
# BLUETOOTH_ENABLE = yes # Enable Bluetooth with the Adafruit EZ-Key HID
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
#BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration
|
#BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration
|
||||||
MOUSEKEY_ENABLE ?= yes # Mouse keys
|
MOUSEKEY_ENABLE = yes # Mouse keys
|
||||||
EXTRAKEY_ENABLE ?= yes # Audio control and System control
|
EXTRAKEY_ENABLE = yes # Audio control and System control
|
||||||
CONSOLE_ENABLE ?= yes # Console for debug
|
CONSOLE_ENABLE = yes # Console for debug
|
||||||
COMMAND_ENABLE ?= yes # Commands for debug and configuration
|
COMMAND_ENABLE = yes # Commands for debug and configuration
|
||||||
SLEEP_LED_ENABLE ?= yes # Breathing sleep LED during USB suspend
|
SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend
|
||||||
NKRO_ENABLE ?= yes # USB Nkey Rollover
|
NKRO_ENABLE = yes # USB Nkey Rollover
|
||||||
CUSTOM_MATRIX ?= yes # Custom matrix file
|
CUSTOM_MATRIX = yes # Custom matrix file
|
|
@ -1,2 +1,9 @@
|
||||||
|
|
||||||
MOUSEKEY_ENABLE = yes
|
MOUSEKEY_ENABLE = yes
|
||||||
EXTRAKEY_ENABLE = yes
|
EXTRAKEY_ENABLE = yes
|
||||||
|
|
||||||
|
MIDI_ENABLE = yes
|
||||||
|
|
||||||
|
# if MIDI_ENABLE is set to yes, then CONSOLE_ENABLE has to be disabled, because of the firmware size
|
||||||
|
CONSOLE_ENABLE = false
|
||||||
|
COMMAND_ENABLE = no
|
||||||
|
|
|
@ -0,0 +1,40 @@
|
||||||
|
#ifndef CONFIG_USER_H
|
||||||
|
#define CONFIG_USER_H
|
||||||
|
|
||||||
|
#include "../../config.h"
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 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 2
|
||||||
|
|
||||||
|
/*
|
||||||
|
Setting the modified Space Cadet Parens for German layout
|
||||||
|
|
||||||
|
Default is
|
||||||
|
#define LSPO_KEY KC_9
|
||||||
|
#define RSPC_KEY KC_0
|
||||||
|
*/
|
||||||
|
#define LSPO_KEY KC_8
|
||||||
|
#define RSPC_KEY KC_9
|
||||||
|
#define PERMISSIVE_HOLD
|
||||||
|
|
||||||
|
#endif
|
|
@ -3,62 +3,112 @@
|
||||||
// Helpful defines
|
// Helpful defines
|
||||||
#define GRAVE_MODS (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT)|MOD_BIT(KC_LGUI)|MOD_BIT(KC_RGUI)|MOD_BIT(KC_LALT)|MOD_BIT(KC_RALT))
|
#define GRAVE_MODS (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT)|MOD_BIT(KC_LGUI)|MOD_BIT(KC_RGUI)|MOD_BIT(KC_LALT)|MOD_BIT(KC_RALT))
|
||||||
#define _______ KC_TRNS
|
#define _______ KC_TRNS
|
||||||
|
#define xxxxxxx KC_NO
|
||||||
|
|
||||||
// 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
|
||||||
// entirely and just use numbers.
|
// entirely and just use numbers.
|
||||||
#define _BL 0
|
#define _BL 0 // BASE Layer
|
||||||
#define _FL 1
|
#define _FL 1 // Function Layer
|
||||||
#define _ME 2
|
#define _ME 2 // Media Layer
|
||||||
#define _CL 3
|
#define _CL 3 // Control Layer
|
||||||
#define _ML 4
|
#define _ML 4 // Mouse Layer
|
||||||
|
#if defined(MIDI_ENABLE)
|
||||||
|
#define _MI 5 // MIDI Layer
|
||||||
|
#define TO_MIDI TO(_MI)
|
||||||
|
#else
|
||||||
|
#define TO_MIDI _______
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// go back to base layer
|
||||||
|
#define TO_BASE TO(_BL)
|
||||||
|
|
||||||
|
// switch to function layer while helde
|
||||||
|
#define MO_FUNC MO(_FL)
|
||||||
|
|
||||||
|
// switch to media layer while held
|
||||||
|
#define MEDIA MO(_ME)
|
||||||
|
|
||||||
|
// switch to Control layer while helde
|
||||||
|
#define MO_CTL MO(_CL)
|
||||||
|
|
||||||
|
// switch to mouse layer if held, else space
|
||||||
|
#define L_MOUSE LT(_ML, KC_SPC)
|
||||||
|
|
||||||
|
// Function key when held, else ESC
|
||||||
|
#define ESC_FUN LT(_FL, KC_ESC)
|
||||||
|
|
||||||
|
// Hyper (CTRL+ALT+SHIFT+SUPER) when held, TAB when tapped
|
||||||
|
#define HPR_TAB ALL_T(KC_TAB)
|
||||||
|
|
||||||
|
// CTRL when held, ESC when tapped
|
||||||
|
#define CTL_ESC CTL_T(KC_ESC)
|
||||||
|
|
||||||
|
// ESC/Grave mode
|
||||||
|
#define ESC_GRV F(0)
|
||||||
|
|
||||||
|
// Reset RGB mode to layer signalling
|
||||||
|
#define RGB_RST F(1)
|
||||||
|
|
||||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
/* Keymap _BL: Base Layer (Default Layer)
|
/* Keymap _BL: Base Layer (Default Layer) */
|
||||||
*/
|
|
||||||
[_BL] = KEYMAP(
|
[_BL] = KEYMAP(
|
||||||
F(0), KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, _______, KC_BSPC, KC_INS, \
|
ESC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, _______, KC_BSPC, KC_INS, \
|
||||||
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, \
|
HPR_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, \
|
||||||
MO(_FL), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, \
|
ESC_FUN, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, \
|
||||||
KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, _______, KC_RSFT, KC_UP, \
|
KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, _______, KC_RSFT, KC_UP, \
|
||||||
KC_LCTL, KC_LGUI, KC_LALT, _______, LT(_ML, KC_SPC),LT(_ML, KC_SPC), _______, KC_RALT, MO(_ME), MO(_FL), KC_LEFT, KC_DOWN, KC_RGHT),
|
KC_LCTL, KC_LGUI, KC_LALT,_______, L_MOUSE, L_MOUSE, _______, KC_RALT, KC_RCTL, MO_FUNC, KC_LEFT, KC_DOWN, KC_RGHT),
|
||||||
|
|
||||||
/* Keymap _FL: Function Layer
|
/* Keymap _FL: Function layer */
|
||||||
*/
|
|
||||||
[_FL] = KEYMAP(
|
[_FL] = KEYMAP(
|
||||||
KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, BL_STEP, \
|
KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, BL_STEP, \
|
||||||
_______, _______, _______,_______,_______,_______,_______,_______,KC_PSCR,_______, KC_PAUS, _______, _______, _______, _______, \
|
_______, _______, _______, _______, _______, _______, _______, _______, KC_PSCR, _______, KC_PAUS, _______, _______, _______, _______, \
|
||||||
MO(_FL), _______, MO(_CL),_______,_______,_______,KC_LEFT,KC_DOWN, KC_UP,KC_RGHT, _______, _______, _______, _______, \
|
_______, _______, MO_CTL, _______, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, _______, _______, _______, _______, \
|
||||||
_______, _______, _______,_______,_______,_______,_______,_______,MO(_ME),_______, _______, _______, _______, _______, KC_PGUP, \
|
KC_LSPO, _______, _______, _______, _______, _______, _______, _______, MEDIA, _______, _______, TO_MIDI, _______, KC_RSPC, KC_PGUP, \
|
||||||
_______, _______, _______,_______, _______,_______, _______, _______, _______, MO(_FL), KC_HOME, KC_PGDN, KC_END),
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, MO_FUNC, KC_HOME, KC_PGDN, KC_END),
|
||||||
|
|
||||||
/* Keymap _ME: Media layer
|
/* Keymap _ME: Media layer */
|
||||||
*/
|
|
||||||
[_ME] = KEYMAP(
|
[_ME] = KEYMAP(
|
||||||
_______, _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, KC_MUTE, KC_VOLU, \
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MUTE, KC_VOLU, \
|
||||||
_______, _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, KC_VOLD, \
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_VOLD, \
|
||||||
_______, _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, \
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
|
||||||
MO(_FL), _______, _______,_______,_______,_______,_______,_______,MO(_ME),_______, _______, _______, _______, MO(_FL), _______, \
|
_______, _______, _______, _______, _______, _______, _______, _______, MEDIA, _______, _______, _______, _______, _______, _______, \
|
||||||
_______, _______, _______,_______, _______,_______, _______, _______, _______, _______, KC_MPRV, KC_MPLY,KC_MNXT),
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MPRV, KC_MPLY, KC_MNXT),
|
||||||
|
|
||||||
/* Keymap _CL: Control layer
|
/* Keymap _CL: Control layer */
|
||||||
*/
|
|
||||||
[_CL] = KEYMAP(
|
[_CL] = KEYMAP(
|
||||||
_______, _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, RGB_TOG, RGB_VAI, \
|
_______, RGB_RST, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_TOG, RGB_VAI, \
|
||||||
_______, _______, _______,_______,RESET, _______,_______,_______,_______,_______, _______, _______, _______, _______, RGB_VAD, \
|
_______, _______, _______, _______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_VAD, \
|
||||||
_______, _______, MO(_CL),_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, \
|
_______, _______, MO_CTL, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
|
||||||
MO(_FL), _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, MO(_FL), RGB_SAI, \
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_SAI, \
|
||||||
_______, _______, _______,_______, RGB_MOD,RGB_MOD, _______, _______, _______, _______, RGB_HUD, RGB_SAD, RGB_HUI),
|
_______, _______, _______, _______, RGB_MOD, RGB_MOD, _______, _______, _______, _______, RGB_HUD, RGB_SAD, RGB_HUI),
|
||||||
|
|
||||||
/* Keymap _ML: Mouse layer
|
/* Keymap _ML: Mouse layer */
|
||||||
*/
|
|
||||||
[_ML] = KEYMAP(
|
[_ML] = KEYMAP(
|
||||||
_______, _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, _______, _______, \
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
|
||||||
_______, _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, _______, \
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
|
||||||
_______, _______, KC_BTN3,KC_BTN2,KC_BTN1,_______,KC_MS_L,KC_MS_D,KC_MS_U,KC_MS_R, _______, _______, _______, _______, \
|
_______, _______, KC_BTN2, KC_BTN3, KC_BTN1, _______, KC_MS_L, KC_MS_D, KC_MS_U, KC_MS_R, _______, _______, _______, _______, \
|
||||||
_______, _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, KC_MS_U, \
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MS_U, \
|
||||||
_______, _______, _______,_______, LT(_ML, KC_SPC),LT(_ML, KC_SPC), _______, KC_BTN1, KC_BTN2, KC_BTN3, KC_MS_L, KC_MS_D,KC_MS_R),
|
_______, _______, _______, _______, L_MOUSE, L_MOUSE, _______, KC_BTN1, KC_BTN3, KC_BTN2, KC_MS_L, KC_MS_D, KC_MS_R),
|
||||||
|
|
||||||
|
#if defined(MIDI_ENABLE) && defined(MIDI_ADVANCED)
|
||||||
|
/* Keymap _MI: MIDI layer (Advanced)*/
|
||||||
|
[_MI] = KEYMAP(
|
||||||
|
TO_BASE,MI_VEL_1,MI_VEL_2,MI_VEL_3,MI_VEL_4,MI_VEL_5,MI_VEL_6,MI_VEL_7,MI_VEL_8,MI_VEL_9,MI_VEL_10, MI_CHD, MI_CHU, xxxxxxx, xxxxxxx, xxxxxxx, \
|
||||||
|
xxxxxxx, xxxxxxx, MI_Cs, MI_Ds, xxxxxxx, MI_Fs, MI_Gs, MI_As, xxxxxxx, MI_Cs_1, MI_Ds_1, xxxxxxx, MI_Fs_1, xxxxxxx, xxxxxxx, \
|
||||||
|
MI_MOD, MI_C, MI_D, MI_E, MI_F, MI_G, MI_A, MI_B, MI_C_1, MI_D_1, MI_E_1, MI_F_1, MI_G_1, xxxxxxx, \
|
||||||
|
MI_SUS, xxxxxxx, MI_OCTD, MI_OCTU,MI_MODSD,MI_MODSU, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, MI_TRNSD,MI_TRNSU,MI_TRNS_0, MI_SUS, xxxxxxx, \
|
||||||
|
xxxxxxx, xxxxxxx, xxxxxxx,xxxxxxx, MI_ALLOFF, MI_ALLOFF, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx),
|
||||||
|
#elif defined(MIDI_ENABLE) && defined(MIDI_BASIC)
|
||||||
|
/* Keymap _MI: MIDI layer (Basic)*/
|
||||||
|
[_MI] = KEYMAP(
|
||||||
|
TO_BASE, 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, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, \
|
||||||
|
xxxxxxx, xxxxxxx, MI_ON, MI_OFF, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, \
|
||||||
|
xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx),
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
/* This is a list of user defined functions. F(N) corresponds to item N
|
/* This is a list of user defined functions. F(N) corresponds to item N
|
||||||
|
@ -66,6 +116,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
*/
|
*/
|
||||||
const uint16_t PROGMEM fn_actions[] = {
|
const uint16_t PROGMEM fn_actions[] = {
|
||||||
[0] = ACTION_FUNCTION(0), // Calls action_function()
|
[0] = ACTION_FUNCTION(0), // Calls action_function()
|
||||||
|
[1] = ACTION_FUNCTION(1), // Calls action_function()
|
||||||
};
|
};
|
||||||
|
|
||||||
void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) {
|
void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) {
|
||||||
|
@ -102,6 +153,11 @@ void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case 1:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
rgblight_mode(1);
|
||||||
|
rgblight_sethsv(206, 255, 255);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -110,29 +166,78 @@ enum layer_id {
|
||||||
LAYER_FUNCTION,
|
LAYER_FUNCTION,
|
||||||
LAYER_MEDIA,
|
LAYER_MEDIA,
|
||||||
LAYER_CONTROL,
|
LAYER_CONTROL,
|
||||||
LAYER_MOUSE
|
LAYER_MOUSE,
|
||||||
|
#if defined(MIDI_ENABLE)
|
||||||
|
LAYER_MIDI
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
void clueboard_set_led(uint8_t id) {
|
void clueboard_set_led(uint8_t id, uint8_t val) {
|
||||||
switch (id) {
|
switch (id) {
|
||||||
case LAYER_BASE:
|
case LAYER_BASE:
|
||||||
rgblight_sethsv_noeeprom(346, 0, 255);
|
rgblight_sethsv_noeeprom(0, 0, val);
|
||||||
break;
|
break;
|
||||||
case LAYER_FUNCTION:
|
case LAYER_FUNCTION:
|
||||||
rgblight_sethsv_noeeprom(46, 255, 255);
|
rgblight_sethsv_noeeprom(46, 255, val);
|
||||||
break;
|
break;
|
||||||
case LAYER_MEDIA:
|
case LAYER_MEDIA:
|
||||||
rgblight_sethsv_noeeprom(86, 255, 255);
|
rgblight_sethsv_noeeprom(86, 255, val);
|
||||||
break;
|
break;
|
||||||
case LAYER_CONTROL:
|
case LAYER_CONTROL:
|
||||||
rgblight_sethsv_noeeprom(346, 255, 255);
|
rgblight_sethsv_noeeprom(346, 255, val);
|
||||||
break;
|
break;
|
||||||
case LAYER_MOUSE:
|
case LAYER_MOUSE:
|
||||||
rgblight_sethsv_noeeprom(206, 255, 255);
|
rgblight_sethsv_noeeprom(206, 255, val);
|
||||||
break;
|
break;
|
||||||
|
#if defined(MIDI_ENABLE)
|
||||||
|
case LAYER_MIDI:
|
||||||
|
rgblight_sethsv_noeeprom(316, 255, val);
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const uint16_t oct_hues[10] = {
|
||||||
|
0,
|
||||||
|
30,
|
||||||
|
60,
|
||||||
|
90,
|
||||||
|
120,
|
||||||
|
150,
|
||||||
|
180,
|
||||||
|
210,
|
||||||
|
240,
|
||||||
|
300
|
||||||
|
};
|
||||||
|
|
||||||
|
#define MAX_OCT 9
|
||||||
|
|
||||||
|
void clueboard_set_midi_led(uint8_t base_oct, uint8_t val)
|
||||||
|
{
|
||||||
|
uint8_t sat = 255;
|
||||||
|
|
||||||
|
for (uint8_t i = 0; i < RGBLED_NUM; i++) {
|
||||||
|
sethsv(oct_hues[base_oct], sat, val, (LED_TYPE *)&led[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
uint8_t next_oct = base_oct < MAX_OCT ? base_oct + 1 : base_oct;
|
||||||
|
|
||||||
|
uint16_t next_hue = base_oct < MAX_OCT ? oct_hues[next_oct] : 0;
|
||||||
|
uint8_t next_val = base_oct < MAX_OCT ? val : 0;
|
||||||
|
uint8_t next_sat = base_oct < MAX_OCT ? sat : 0;
|
||||||
|
|
||||||
|
|
||||||
|
for (uint8_t i = 0; i < 3; i++) {
|
||||||
|
sethsv(next_hue, next_sat, next_val, (LED_TYPE *)&led[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (uint8_t i = 11; i < 14; i++) {
|
||||||
|
sethsv(next_hue, next_sat, next_val, (LED_TYPE *)&led[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
rgblight_set();
|
||||||
|
}
|
||||||
|
|
||||||
void matrix_scan_user(void) {
|
void matrix_scan_user(void) {
|
||||||
rgblight_config_t rgblight_config;
|
rgblight_config_t rgblight_config;
|
||||||
rgblight_config.raw = eeconfig_read_rgblight();
|
rgblight_config.raw = eeconfig_read_rgblight();
|
||||||
|
@ -140,18 +245,23 @@ void matrix_scan_user(void) {
|
||||||
if (!rgblight_config.enable || rgblight_config.mode != 1) { return; }
|
if (!rgblight_config.enable || rgblight_config.mode != 1) { return; }
|
||||||
|
|
||||||
uint32_t layer = layer_state;
|
uint32_t layer = layer_state;
|
||||||
|
uint8_t val = rgblight_config.val;
|
||||||
|
|
||||||
if (layer & (1<<_FL)) {
|
if (layer & (1<<_FL)) {
|
||||||
if (layer & (1<<_ME)) {
|
if (layer & (1<<_ME)) {
|
||||||
clueboard_set_led(LAYER_MEDIA);
|
clueboard_set_led(LAYER_MEDIA, val);
|
||||||
} else if (layer & (1<<_CL)) {
|
} else if (layer & (1<<_CL)) {
|
||||||
clueboard_set_led(LAYER_CONTROL);
|
clueboard_set_led(LAYER_CONTROL, val);
|
||||||
} else {
|
} else {
|
||||||
clueboard_set_led(LAYER_FUNCTION);
|
clueboard_set_led(LAYER_FUNCTION, val);
|
||||||
}
|
}
|
||||||
} else if (layer & (1<<_ML)) {
|
} else if (layer & (1<<_ML)) {
|
||||||
clueboard_set_led(LAYER_MOUSE);
|
clueboard_set_led(LAYER_MOUSE, val);
|
||||||
|
#if defined(MIDI_ENABLE)
|
||||||
|
} else if (layer & (1<<_MI)) {
|
||||||
|
clueboard_set_midi_led(midi_config.octave, val);
|
||||||
|
#endif
|
||||||
} else {
|
} else {
|
||||||
clueboard_set_led(LAYER_BASE);
|
clueboard_set_led(LAYER_BASE, val);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
|
@ -1,18 +1,43 @@
|
||||||
![Clueboard Layout Image](http://i.imgur.com/ngg4EAY.png)
|
# Layout of @magicmonty
|
||||||
|
|
||||||
|
[Keyboard Layout Editor File]
|
||||||
|
|
||||||
|
![Clueboard Layout Image](http://i.imgur.com/eEwjLEj.png)
|
||||||
|
My ClueBoard Layout as of 2017/06/30
|
||||||
|
|
||||||
# MouseKeys Layout
|
|
||||||
|
|
||||||
This layout is a combination of the `mouse_keys` and the `win_optimized` layouts.
|
This layout is a combination of the `mouse_keys` and the `win_optimized` layouts.
|
||||||
This layout is optimized for an ISO layout.
|
This layout is optimized for an ISO layout.
|
||||||
|
The CapsLock is disabled and works as ESC when tapped and FN when held.
|
||||||
|
The `TAB` key works as `TAB` when tapped, and [HYPER] (`CTRL` + `ALT` + `SHIFT` + `CMD`) when held.
|
||||||
|
|
||||||
It adds a mouse layer. When you hold down the spacebar the arrow keys
|
## Mouse Layer
|
||||||
will move your mouse cursor. You can click using the 3 mods to the left of the
|
|
||||||
arrow keys, or the 3 keys under your primary fingers on the home row.
|
When you hold down the spacebar the arrow keys will move your mouse cursor.
|
||||||
|
You can click using the 3 mods to the left of the arrow keys, or the 3 keys under your primary fingers on the home row.
|
||||||
The Left, Down, Up and Right for the mouse movement are also VIM-Like on the HJKL keys
|
The Left, Down, Up and Right for the mouse movement are also VIM-Like on the HJKL keys
|
||||||
|
|
||||||
The CapsLock is disabled and works as Function key.
|
## MIDI layer
|
||||||
|
|
||||||
There is also a separate media layer with Volume/Play controls
|
The MIDI layer is permanently enabled by pressing `FN` + `/`.
|
||||||
|
It can be exited with the `ESC`-Key
|
||||||
|
|
||||||
|
## Space Cadet(ish) Shift Parentheses
|
||||||
|
|
||||||
|
If the function layer is active, the `SHIFT`-Keys are configured like the [Space Cadet Shift Parentheses]
|
||||||
|
as opened (left `SHIFT`) and closed (right `SHIFT`) parentheses if tapped and `SHIFT` if held.
|
||||||
|
|
||||||
|
## Media layer
|
||||||
|
|
||||||
|
The media layer with Volume/Play controls, can be accessed via `FN` + `m`
|
||||||
|
|
||||||
|
## Control layer
|
||||||
|
|
||||||
|
The control layer is accessed via `FN` + `s`.
|
||||||
|
Here one can control the behavior of the RGB underlight.
|
||||||
|
`FN` + `s` + `1` resets the RGB underlight to the Layer signalling mode
|
||||||
|
|
||||||
|
## Layer signalling through underlight
|
||||||
|
|
||||||
The different layers are signalled throug setting of the underlight:
|
The different layers are signalled throug setting of the underlight:
|
||||||
|
|
||||||
|
@ -21,3 +46,8 @@ The different layers are signalled throug setting of the underlight:
|
||||||
- Media layer: Green
|
- Media layer: Green
|
||||||
- Mouse layer: Blue
|
- Mouse layer: Blue
|
||||||
- Control layer: Red
|
- Control layer: Red
|
||||||
|
- Midi layer: Purple
|
||||||
|
|
||||||
|
[HYPER]: http://brettterpstra.com/2012/12/08/a-useful-caps-lock-key/
|
||||||
|
[Space Cadet Shift Parentheses]: http://stevelosh.com/blog/2012/10/a-modern-space-cadet/#shift-parentheses
|
||||||
|
[Keyboard Layout Editor File]: http://www.keyboard-layout-editor.com/#/gists/f869b8789242a712e0f46eabbd550056
|
||||||
|
|
|
@ -90,14 +90,14 @@ OPT_DEFS += -DBOOTLOADER_SIZE=4096
|
||||||
# Build Options
|
# Build Options
|
||||||
# comment out to disable the options.
|
# comment out to disable the options.
|
||||||
#
|
#
|
||||||
BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration(+1000)
|
BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
|
||||||
MOUSEKEY_ENABLE ?= no # Mouse keys(+4700)
|
MOUSEKEY_ENABLE = no # Mouse keys(+4700)
|
||||||
EXTRAKEY_ENABLE ?= no # Audio control and System control(+450)
|
EXTRAKEY_ENABLE = no # Audio control and System control(+450)
|
||||||
CONSOLE_ENABLE ?= yes # Console for debug(+400)
|
CONSOLE_ENABLE = yes # Console for debug(+400)
|
||||||
COMMAND_ENABLE ?= yes # Commands for debug and configuration
|
COMMAND_ENABLE = yes # Commands for debug and configuration
|
||||||
NKRO_ENABLE ?= yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
|
NKRO_ENABLE = yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
|
||||||
AUDIO_ENABLE ?= no
|
AUDIO_ENABLE = no
|
||||||
RGBLIGHT_ENABLE ?= yes # Enable keyboard underlight functionality
|
RGBLIGHT_ENABLE = yes # Enable keyboard underlight functionality
|
||||||
MIDI_ENABLE ?= no # MIDI controls
|
MIDI_ENABLE = no # MIDI controls
|
||||||
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
|
||||||
|
|
|
@ -53,18 +53,18 @@ OPT_DEFS += -DBOOTLOADER_SIZE=4096
|
||||||
# Build Options
|
# Build Options
|
||||||
# change yes to no to disable
|
# change yes to no to disable
|
||||||
#
|
#
|
||||||
BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration(+1000)
|
BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
|
||||||
MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700)
|
MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
|
||||||
EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450)
|
EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
|
||||||
CONSOLE_ENABLE ?= yes # Console for debug(+400)
|
CONSOLE_ENABLE = yes # Console for debug(+400)
|
||||||
COMMAND_ENABLE ?= yes # Commands for debug and configuration
|
COMMAND_ENABLE = yes # Commands for debug and configuration
|
||||||
# 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
|
||||||
# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
|
# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
|
||||||
NKRO_ENABLE ?= no # USB Nkey Rollover
|
NKRO_ENABLE = no # USB Nkey Rollover
|
||||||
RGBLIGHT_ENABLE ?= yes # Enable keyboard underlight functionality (+4870)
|
RGBLIGHT_ENABLE = yes # Enable keyboard underlight functionality (+4870)
|
||||||
BACKLIGHT_ENABLE ?= yes # Enable keyboard backlight functionality by default
|
BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality by default
|
||||||
MIDI_ENABLE ?= no # MIDI controls
|
MIDI_ENABLE = no # MIDI controls
|
||||||
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
|
||||||
AUDIO_ENABLE ?= yes # Audio output on port C6
|
AUDIO_ENABLE = yes # Audio output on port C6
|
||||||
|
|
|
@ -52,14 +52,14 @@ OPT_DEFS += -DBOOTLOADER_SIZE=4096
|
||||||
# Build Options
|
# Build Options
|
||||||
# comment out to disable the options.
|
# comment out to disable the options.
|
||||||
#
|
#
|
||||||
BOOTMAGIC_ENABLE ?= yes # Virtual DIP switch configuration(+1000)
|
BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000)
|
||||||
# MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700)
|
# MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
|
||||||
# EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450)
|
# EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
|
||||||
# CONSOLE_ENABLE ?= yes # Console for debug(+400)
|
# CONSOLE_ENABLE = yes # Console for debug(+400)
|
||||||
# COMMAND_ENABLE ?= yes # Commands for debug and configuration
|
# COMMAND_ENABLE = yes # Commands for debug and configuration
|
||||||
NKRO_ENABLE ?= yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
|
NKRO_ENABLE = yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
|
||||||
BACKLIGHT_ENABLE ?= yes # Enable numpad's backlight functionality
|
BACKLIGHT_ENABLE = yes # Enable numpad's backlight functionality
|
||||||
RGBLIGHT_ENABLE ?= yes
|
RGBLIGHT_ENABLE = yes
|
||||||
# MIDI_ENABLE ?= YES # MIDI controls
|
# MIDI_ENABLE = YES # MIDI controls
|
||||||
# UNICODE_ENABLE ?= YES # Unicode
|
# UNICODE_ENABLE = YES # Unicode
|
||||||
# BLUETOOTH_ENABLE ?= yes # Enable Bluetooth with the Adafruit EZ-Key HID
|
# BLUETOOTH_ENABLE = yes # Enable Bluetooth with the Adafruit EZ-Key HID
|
|
@ -2,24 +2,24 @@
|
||||||
# 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 = yes # 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
|
||||||
UNICODEMAP_ENABLE ?= yes
|
UNICODEMAP_ENABLE = yes
|
||||||
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. Do not enable this with audio at the same time.
|
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
|
||||||
PS2_USE_USART ?= yes
|
PS2_USE_USART = yes
|
||||||
API_SYSEX_ENABLE ?= no
|
API_SYSEX_ENABLE = no
|
||||||
|
|
||||||
# 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
|
ifndef QUANTUM_DIR
|
||||||
include ../../../../../Makefile
|
include ../../../../../Makefile
|
||||||
|
|
|
@ -2,24 +2,24 @@
|
||||||
# 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 = yes # 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
|
||||||
UNICODEMAP_ENABLE ?= yes
|
UNICODEMAP_ENABLE = yes
|
||||||
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. Do not enable this with audio at the same time.
|
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
|
||||||
PS2_USE_USART ?= yes
|
PS2_USE_USART = yes
|
||||||
API_SYSEX_ENABLE ?= no
|
API_SYSEX_ENABLE = no
|
||||||
|
|
||||||
# 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
|
ifndef QUANTUM_DIR
|
||||||
include ../../../../../Makefile
|
include ../../../../../Makefile
|
||||||
|
|
|
@ -49,24 +49,24 @@ OPT_DEFS += -DBOOTLOADER_SIZE=4096
|
||||||
# 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 = yes # 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
|
||||||
UNICODEMAP_ENABLE ?= yes
|
UNICODEMAP_ENABLE = yes
|
||||||
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. Do not enable this with audio at the same time.
|
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
|
||||||
PS2_USE_USART ?= yes
|
PS2_USE_USART = yes
|
||||||
API_SYSEX_ENABLE ?= n
|
API_SYSEX_ENABLE = n
|
||||||
CUSTOM_MATRIX = yes
|
CUSTOM_MATRIX = 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
|
||||||
|
|
||||||
SRC = matrix.c led.c
|
SRC = matrix.c led.c
|
|
@ -5,17 +5,17 @@ F_USB = $(F_CPU)
|
||||||
OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
|
OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
|
||||||
OPT_DEFS += -DBOOTLOADER_SIZE=4096
|
OPT_DEFS += -DBOOTLOADER_SIZE=4096
|
||||||
|
|
||||||
BOOTMAGIC_ENABLE ?= yes # Virtual DIP switch configuration(+1000)
|
BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000)
|
||||||
MOUSEKEY_ENABLE ?= no # 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 ?= yes # Console for debug(+400)
|
# CONSOLE_ENABLE = yes # Console for debug(+400)
|
||||||
# COMMAND_ENABLE ?= yes # Commands for debug and configuration
|
# COMMAND_ENABLE = yes # Commands for debug and configuration
|
||||||
KEYBOARD_LOCK_ENABLE ?= yes # Allow locking of keyboard via magic key
|
KEYBOARD_LOCK_ENABLE = yes # Allow locking of keyboard via magic key
|
||||||
NKRO_ENABLE ?= yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
|
NKRO_ENABLE = yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
|
||||||
RGBLIGHT_ENABLE ?= no # Enable keyboard underlight functionality (+4870)
|
RGBLIGHT_ENABLE = no # Enable keyboard underlight functionality (+4870)
|
||||||
BACKLIGHT_ENABLE ?= no # Enable keyboard backlight functionality (+1150)
|
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality (+1150)
|
||||||
MIDI_ENABLE ?= no # MIDI controls
|
MIDI_ENABLE = no # MIDI controls
|
||||||
AUDIO_ENABLE ?= no
|
AUDIO_ENABLE = no
|
||||||
UNICODE_ENABLE ?= yes # Unicode
|
UNICODE_ENABLE = yes # Unicode
|
||||||
BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID
|
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
|
||||||
SLEEP_LED_ENABLE ?= yes
|
SLEEP_LED_ENABLE = yes
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
|
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
|
||||||
COMMAND_ENABLE = no # Commands for debug and configuration
|
COMMAND_ENABLE = no # Commands for debug and configuration
|
||||||
RGBLIGHT_ENABLE ?= yes
|
RGBLIGHT_ENABLE = yes
|
||||||
MIDI_ENABLE ?= no
|
MIDI_ENABLE = no
|
||||||
|
|
||||||
ifndef MAKEFILE_INCLUDED
|
ifndef MAKEFILE_INCLUDED
|
||||||
include ../../../Makefile
|
include ../../../Makefile
|
||||||
|
|
|
@ -1,6 +1,30 @@
|
||||||
#include "ez.h"
|
#include "ez.h"
|
||||||
#include "i2cmaster.h"
|
#include "i2cmaster.h"
|
||||||
|
|
||||||
|
|
||||||
|
extern inline void ergodox_board_led_on(void);
|
||||||
|
extern inline void ergodox_right_led_1_on(void);
|
||||||
|
extern inline void ergodox_right_led_2_on(void);
|
||||||
|
extern inline void ergodox_right_led_3_on(void);
|
||||||
|
extern inline void ergodox_right_led_on(uint8_t led);
|
||||||
|
|
||||||
|
extern inline void ergodox_board_led_off(void);
|
||||||
|
extern inline void ergodox_right_led_1_off(void);
|
||||||
|
extern inline void ergodox_right_led_2_off(void);
|
||||||
|
extern inline void ergodox_right_led_3_off(void);
|
||||||
|
extern inline void ergodox_right_led_off(uint8_t led);
|
||||||
|
|
||||||
|
extern inline void ergodox_led_all_on(void);
|
||||||
|
extern inline void ergodox_led_all_off(void);
|
||||||
|
|
||||||
|
extern inline void ergodox_right_led_1_set(uint8_t n);
|
||||||
|
extern inline void ergodox_right_led_2_set(uint8_t n);
|
||||||
|
extern inline void ergodox_right_led_3_set(uint8_t n);
|
||||||
|
extern inline void ergodox_right_led_set(uint8_t led, uint8_t n);
|
||||||
|
|
||||||
|
extern inline void ergodox_led_all_set(uint8_t n);
|
||||||
|
|
||||||
|
|
||||||
bool i2c_initialized = 0;
|
bool i2c_initialized = 0;
|
||||||
uint8_t mcp23018_status = 0x20;
|
uint8_t mcp23018_status = 0x20;
|
||||||
|
|
||||||
|
@ -57,7 +81,7 @@ uint8_t init_mcp23018(void) {
|
||||||
// cli();
|
// cli();
|
||||||
if (i2c_initialized == 0) {
|
if (i2c_initialized == 0) {
|
||||||
i2c_init(); // on pins D(1,0)
|
i2c_init(); // on pins D(1,0)
|
||||||
i2c_initialized++;
|
i2c_initialized = true;
|
||||||
_delay_ms(1000);
|
_delay_ms(1000);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,289 @@
|
||||||
|
#include "ergodox.h"
|
||||||
|
#include "debug.h"
|
||||||
|
#include "action_layer.h"
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This section of macros is for tap or hold functionality. Keys will fire off the second symbol in the name if tapped
|
||||||
|
* or fire the first symbol in the name if held. For example
|
||||||
|
* GUI_Z
|
||||||
|
*
|
||||||
|
* - will fire z if tapped
|
||||||
|
* - will fire cmd/super/win if held
|
||||||
|
*/
|
||||||
|
#define ALT_DOT ALT_T(KC_DOT)
|
||||||
|
#define ALT_X ALT_T(KC_X)
|
||||||
|
#define CTL_SLSH CTL_T(KC_SLSH)
|
||||||
|
#define CTL_Z CTL_T(KC_Z)
|
||||||
|
#define GUI_C GUI_T(KC_C)
|
||||||
|
#define GUI_COMM GUI_T(KC_COMM)
|
||||||
|
#define HPR_ESC ALL_T(KC_ESC)
|
||||||
|
#define HPR_QUO ALL_T(KC_QUOT)
|
||||||
|
|
||||||
|
#define BASE 0
|
||||||
|
#define SYMB 1
|
||||||
|
#define MDIA 2
|
||||||
|
#define MOUSE 3
|
||||||
|
#define DEV 4
|
||||||
|
|
||||||
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
/* Keymap 0: Basic layer
|
||||||
|
*
|
||||||
|
* ,--------------------------------------------------. ,--------------------------------------------------.
|
||||||
|
* | = | 1 | 2 | 3 | 4 | 5 | LEFT | | RIGHT| 6 | 7 | 8 | 9 | 0 | - |
|
||||||
|
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
|
||||||
|
* | Del | Q | W | E | R | T | L1 | | L1 | Y | U | I | O | P | \ |
|
||||||
|
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||||
|
* | BkSp | A | S | D | F | G |------| |------| H | J | K | L |; / L2| '" |
|
||||||
|
* |--------+------+------+------+------+------| Hyper| | Meh |------+------+------+------+------+--------|
|
||||||
|
* | LShift |Z/Ctrl|X/Alt |C/GUI | V | B | | | | N | M |,/GUI |./ALT |//Ctrl| RShift |
|
||||||
|
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
|
||||||
|
* |Grv/L1| '" |AltShf| Left | Right| | Up | Down | [ | ] | ~L1 |
|
||||||
|
* `----------------------------------' `----------------------------------'
|
||||||
|
* ,-------------. ,------------.
|
||||||
|
* |MOUSE | Home | | PgDn | PgUp|
|
||||||
|
* ,------|------|------| |------+-----+------.
|
||||||
|
* | | | ESC | | ESC | | |
|
||||||
|
* | Space|Backsp|------| |------| Tab |Enter |
|
||||||
|
* | |ace | LGui | | LGui | | |
|
||||||
|
* `--------------------' `-------------------'
|
||||||
|
*/
|
||||||
|
// If it accepts an argument (i.e, is a function), it doesn't need KC_.
|
||||||
|
// Otherwise, it needs KC_*
|
||||||
|
[BASE] = KEYMAP( // layer 0 : default
|
||||||
|
// left hand
|
||||||
|
KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, KC_LEFT,
|
||||||
|
KC_DELT, KC_Q, KC_W, KC_E, KC_R, KC_T, TG(DEV),
|
||||||
|
KC_BSPC, KC_A, KC_S, KC_D, KC_F, KC_G,
|
||||||
|
KC_LSFT, CTL_T(KC_Z), ALT_T(KC_X), GUI_T(KC_C), KC_V, KC_B, ALL_T(KC_NO),
|
||||||
|
LT(SYMB,KC_GRV), KC_QUOT, LALT(KC_LSFT), KC_LEFT, KC_RGHT,
|
||||||
|
|
||||||
|
TG(MOUSE), KC_HOME,
|
||||||
|
KC_ESC,
|
||||||
|
KC_SPC, KC_BSPC, KC_LGUI,
|
||||||
|
|
||||||
|
// right hand
|
||||||
|
KC_RGHT, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,
|
||||||
|
TG(SYMB), KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS,
|
||||||
|
KC_H, KC_J, KC_K, KC_L, LT(MDIA, KC_SCLN), KC_QUOT,
|
||||||
|
MEH_T(KC_NO), KC_N, KC_M, GUI_COMM, ALT_DOT, CTL_SLSH, KC_RSFT,
|
||||||
|
KC_DOWN, KC_UP, KC_LBRC, KC_RBRC, KC_FN1,
|
||||||
|
|
||||||
|
KC_PGDN, KC_PGUP,
|
||||||
|
KC_ESC,
|
||||||
|
KC_LGUI, KC_TAB, KC_ENT
|
||||||
|
),
|
||||||
|
/* Keymap 1: Symbol Layer
|
||||||
|
*
|
||||||
|
* ,--------------------------------------------------. ,--------------------------------------------------.
|
||||||
|
* | | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | F11 |
|
||||||
|
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
|
||||||
|
* | | ! | @ | { | } | | | | | | Up | 7 | 8 | 9 | * | F12 |
|
||||||
|
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||||
|
* | | # | $ | ( | ) | ` |------| |------| Down | 4 | 5 | 6 | + | |
|
||||||
|
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||||
|
* | | % | ^ | [ | ] | ~ | | | | & | 1 | 2 | 3 | \ | |
|
||||||
|
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
|
||||||
|
* | | | | | | | | . | 0 | = | |
|
||||||
|
* `----------------------------------' `----------------------------------'
|
||||||
|
* ,-------------. ,-------------.
|
||||||
|
* | | | | | |
|
||||||
|
* ,------|------|------| |------+------+------.
|
||||||
|
* | | | | | | | |
|
||||||
|
* | | |------| |------| | |
|
||||||
|
* | | | | | | | |
|
||||||
|
* `--------------------' `--------------------'
|
||||||
|
*/
|
||||||
|
// SYMBOLS
|
||||||
|
[SYMB] = KEYMAP(
|
||||||
|
// left hand
|
||||||
|
KC_TRNS,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_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_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
|
||||||
|
KC_TRNS,KC_TRNS,
|
||||||
|
KC_TRNS,
|
||||||
|
KC_TRNS,KC_TRNS,KC_TRNS,
|
||||||
|
// right hand
|
||||||
|
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_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_DOT, KC_0, KC_EQL, KC_TRNS,
|
||||||
|
KC_TRNS, KC_TRNS,
|
||||||
|
KC_TRNS,
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS
|
||||||
|
),
|
||||||
|
/* Keymap 2: Media and mouse keys
|
||||||
|
*
|
||||||
|
* ,--------------------------------------------------. ,--------------------------------------------------.
|
||||||
|
* | | | | | | | | | | | | | | | |
|
||||||
|
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
|
||||||
|
* | | | | | | | | | | | | | | | |
|
||||||
|
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||||
|
* | | | | | | |------| |------| | Prev | Next | Mute | | Play |
|
||||||
|
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||||
|
* | | | | | | | | | | | VolDn| VolUp| | | |
|
||||||
|
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
|
||||||
|
* | | | | | | | | | | | |
|
||||||
|
* `----------------------------------' `----------------------------------'
|
||||||
|
* ,-------------. ,-------------.
|
||||||
|
* | | | | | |
|
||||||
|
* ,------|------|------| |------+------+------.
|
||||||
|
* | | | | | | | |
|
||||||
|
* | | |------| |------| | |
|
||||||
|
* | | | | | | | |
|
||||||
|
* `--------------------' `--------------------'
|
||||||
|
*/
|
||||||
|
// MEDIA
|
||||||
|
[MDIA] = KEYMAP(
|
||||||
|
// left 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_TRNS,
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||||
|
KC_TRNS, 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_MPRV, KC_MNXT, KC_MUTE, KC_TRNS, KC_MPLY,
|
||||||
|
KC_TRNS, KC_TRNS, KC_VOLD, KC_VOLU, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||||
|
KC_TRNS, KC_TRNS,
|
||||||
|
KC_TRNS,
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS
|
||||||
|
),
|
||||||
|
[MOUSE] = KEYMAP(
|
||||||
|
// left hand
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_U, 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_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||||
|
KC_TRNS, 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_ACL2, KC_ACL1, KC_ACL0, 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_TRNS, KC_TRNS, KC_TRNS,
|
||||||
|
KC_TRNS, KC_TRNS,
|
||||||
|
KC_TRNS,
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS
|
||||||
|
),
|
||||||
|
[DEV] = KEYMAP(
|
||||||
|
// left hand
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||||
|
KC_TRNS, KC_F12, KC_F13, KC_F14, KC_F15, KC_F16, KC_TRNS,
|
||||||
|
KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5,
|
||||||
|
KC_TRNS, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_TRNS,
|
||||||
|
KC_TRNS, 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_TRNS,
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||||
|
KC_TRNS, KC_TRNS,
|
||||||
|
KC_TRNS,
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS
|
||||||
|
),
|
||||||
|
};
|
||||||
|
|
||||||
|
const uint16_t PROGMEM fn_actions[] = {
|
||||||
|
[1] = ACTION_LAYER_TAP_TOGGLE(SYMB) // FN1 - Momentary Layer 1 (Symbols)
|
||||||
|
};
|
||||||
|
|
||||||
|
// MACRODOWN only works in this function
|
||||||
|
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
|
||||||
|
{
|
||||||
|
switch(id) {
|
||||||
|
case 0:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
register_code(KC_RSFT);
|
||||||
|
} else {
|
||||||
|
unregister_code(KC_RSFT);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return MACRO_NONE;
|
||||||
|
};
|
||||||
|
|
||||||
|
// Runs just one time when the keyboard initializes.
|
||||||
|
void matrix_init_user(void) {
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
// Runs constantly in the background, in a loop.
|
||||||
|
void matrix_scan_user(void) {
|
||||||
|
uint8_t layer = biton32(layer_state);
|
||||||
|
|
||||||
|
ergodox_board_led_off();
|
||||||
|
ergodox_right_led_1_off();
|
||||||
|
ergodox_right_led_2_off();
|
||||||
|
ergodox_right_led_3_off();
|
||||||
|
switch (layer) {
|
||||||
|
case SYMB:
|
||||||
|
// Binary 1 represented by the leds
|
||||||
|
// --*
|
||||||
|
ergodox_right_led_3_on();
|
||||||
|
break;
|
||||||
|
case MDIA:
|
||||||
|
// Binary 2 represented by the leds
|
||||||
|
// -*-
|
||||||
|
ergodox_right_led_2_on();
|
||||||
|
break;
|
||||||
|
case MOUSE:
|
||||||
|
// Binary 3 represented by the leds
|
||||||
|
// -**
|
||||||
|
ergodox_right_led_3_on();
|
||||||
|
ergodox_right_led_2_on();
|
||||||
|
break;
|
||||||
|
case DEV:
|
||||||
|
// Binary 4 represented by the leds
|
||||||
|
// *--
|
||||||
|
ergodox_right_led_1_on();
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
// none
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
//bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||||
|
// switch (keycode) {
|
||||||
|
// case QWERTY:
|
||||||
|
// 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;
|
||||||
|
// }
|
||||||
|
// return true;
|
||||||
|
//}
|
||||||
|
|
Before Width: | Height: | Size: 20 KiB |
|
@ -7,4 +7,4 @@ If you own an 80 key Ergodox, use this as an example to get your desired keymap.
|
||||||
**NOTE:** This layout is not physically supported by the Ergodox EZ.
|
**NOTE:** This layout is not physically supported by the Ergodox EZ.
|
||||||
|
|
||||||
|
|
||||||
![Default80](ergodox80.png)
|
![Default80](https://i.imgur.com/P2Lga9x.png)
|
||||||
|
|
|
@ -72,5 +72,5 @@ OPT_DEFS += -DBOOTLOADER_SIZE=512
|
||||||
#
|
#
|
||||||
|
|
||||||
SLEEP_LED_ENABLE = no
|
SLEEP_LED_ENABLE = no
|
||||||
API_SYSEX_ENABLE ?= no
|
API_SYSEX_ENABLE = no
|
||||||
RGBLIGHT_ENABLE ?= yes
|
RGBLIGHT_ENABLE = yes
|
||||||
|
|
|
@ -25,43 +25,90 @@
|
||||||
#include "lcd_backlight_keyframes.h"
|
#include "lcd_backlight_keyframes.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef LED_ENABLE
|
#ifdef BACKLIGHT_ENABLE
|
||||||
#include "led_keyframes.h"
|
#include "led_keyframes.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "visualizer_keyframes.h"
|
#include "visualizer_keyframes.h"
|
||||||
|
|
||||||
|
|
||||||
#if defined(LCD_ENABLE) && defined(LCD_BACKLIGHT_ENABLE)
|
#if defined(LCD_ENABLE) || defined(LCD_BACKLIGHT_ENABLE) || defined(BACKLIGHT_ENABLE)
|
||||||
|
|
||||||
|
static bool keyframe_enable(keyframe_animation_t* animation, visualizer_state_t* state) {
|
||||||
|
#ifdef LCD_ENABLE
|
||||||
|
lcd_keyframe_enable(animation, state);
|
||||||
|
#endif
|
||||||
|
#ifdef LCD_BACKLIGHT_ENABLE
|
||||||
|
backlight_keyframe_enable(animation, state);
|
||||||
|
#endif
|
||||||
|
#ifdef BACKLIGHT_ENABLE
|
||||||
|
led_keyframe_enable(animation, state);
|
||||||
|
#endif
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
static bool keyframe_disable(keyframe_animation_t* animation, visualizer_state_t* state) {
|
||||||
|
#ifdef LCD_ENABLE
|
||||||
|
lcd_keyframe_disable(animation, state);
|
||||||
|
#endif
|
||||||
|
#ifdef LCD_BACKLIGHT_ENABLE
|
||||||
|
backlight_keyframe_disable(animation, state);
|
||||||
|
#endif
|
||||||
|
#ifdef BACKLIGHT_ENABLE
|
||||||
|
led_keyframe_disable(animation, state);
|
||||||
|
#endif
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
static bool keyframe_fade_in(keyframe_animation_t* animation, visualizer_state_t* state) {
|
||||||
|
bool ret = false;
|
||||||
|
#ifdef LCD_BACKLIGHT_ENABLE
|
||||||
|
ret |= backlight_keyframe_animate_color(animation, state);
|
||||||
|
#endif
|
||||||
|
#ifdef BACKLIGHT_ENABLE
|
||||||
|
ret |= led_keyframe_fade_in_all(animation, state);
|
||||||
|
#endif
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
static bool keyframe_fade_out(keyframe_animation_t* animation, visualizer_state_t* state) {
|
||||||
|
bool ret = false;
|
||||||
|
#ifdef LCD_BACKLIGHT_ENABLE
|
||||||
|
ret |= backlight_keyframe_animate_color(animation, state);
|
||||||
|
#endif
|
||||||
|
#ifdef BACKLIGHT_ENABLE
|
||||||
|
ret |= led_keyframe_fade_out_all(animation, state);
|
||||||
|
#endif
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// Don't worry, if the startup animation is long, you can use the keyboard like normal
|
// Don't worry, if the startup animation is long, you can use the keyboard like normal
|
||||||
// during that time
|
// during that time
|
||||||
keyframe_animation_t default_startup_animation = {
|
keyframe_animation_t default_startup_animation = {
|
||||||
.num_frames = 4,
|
.num_frames = 3,
|
||||||
.loop = false,
|
.loop = false,
|
||||||
.frame_lengths = {0, 0, 0, gfxMillisecondsToTicks(5000), 0},
|
.frame_lengths = {0, 0, gfxMillisecondsToTicks(5000)},
|
||||||
.frame_functions = {
|
.frame_functions = {
|
||||||
lcd_keyframe_enable,
|
keyframe_enable,
|
||||||
backlight_keyframe_enable,
|
|
||||||
lcd_keyframe_draw_logo,
|
lcd_keyframe_draw_logo,
|
||||||
backlight_keyframe_animate_color,
|
keyframe_fade_in,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
keyframe_animation_t default_suspend_animation = {
|
keyframe_animation_t default_suspend_animation = {
|
||||||
.num_frames = 4,
|
.num_frames = 3,
|
||||||
.loop = false,
|
.loop = false,
|
||||||
.frame_lengths = {0, gfxMillisecondsToTicks(1000), 0, 0},
|
.frame_lengths = {0, gfxMillisecondsToTicks(1000), 0},
|
||||||
.frame_functions = {
|
.frame_functions = {
|
||||||
lcd_keyframe_display_layer_text,
|
lcd_keyframe_display_layer_text,
|
||||||
backlight_keyframe_animate_color,
|
keyframe_fade_out,
|
||||||
lcd_keyframe_disable,
|
keyframe_disable,
|
||||||
backlight_keyframe_disable,
|
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(LED_ENABLE)
|
#if defined(BACKLIGHT_ENABLE)
|
||||||
#define CROSSFADE_TIME 1000
|
#define CROSSFADE_TIME 1000
|
||||||
#define GRADIENT_TIME 3000
|
#define GRADIENT_TIME 3000
|
||||||
|
|
||||||
|
|
|
@ -56,6 +56,11 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
#define VISUALIZER_USER_DATA_SIZE 16
|
#define VISUALIZER_USER_DATA_SIZE 16
|
||||||
|
|
||||||
|
#define LCD_DISPLAY_NUMBER 0
|
||||||
|
#define LED_DISPLAY_NUMBER 1
|
||||||
|
|
||||||
|
#define LED_NUM_ROWS 7
|
||||||
|
#define LED_NUM_COLS 7
|
||||||
/*
|
/*
|
||||||
* Feature disable options
|
* Feature disable options
|
||||||
* These options are also useful to firmware size reduction.
|
* These options are also useful to firmware size reduction.
|
||||||
|
|
|
@ -43,7 +43,7 @@ extern const uint8_t CIE1931_CURVE[];
|
||||||
#define GDISP_INITIAL_CONTRAST 0
|
#define GDISP_INITIAL_CONTRAST 0
|
||||||
#endif
|
#endif
|
||||||
#ifndef GDISP_INITIAL_BACKLIGHT
|
#ifndef GDISP_INITIAL_BACKLIGHT
|
||||||
#define GDISP_INITIAL_BACKLIGHT 100
|
#define GDISP_INITIAL_BACKLIGHT 0
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define GDISP_FLG_NEEDFLUSH (GDISP_FLG_DRIVER<<0)
|
#define GDISP_FLG_NEEDFLUSH (GDISP_FLG_DRIVER<<0)
|
||||||
|
@ -173,7 +173,7 @@ LLDSPEC bool_t gdisp_lld_init(GDisplay *g) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// software shutdown disable (i.e. turn stuff on)
|
// software shutdown disable (i.e. turn stuff on)
|
||||||
write_register(g, IS31_FUNCTIONREG, IS31_REG_SHUTDOWN, IS31_REG_SHUTDOWN_ON);
|
write_register(g, IS31_FUNCTIONREG, IS31_REG_SHUTDOWN, IS31_REG_SHUTDOWN_OFF);
|
||||||
gfxSleepMilliseconds(10);
|
gfxSleepMilliseconds(10);
|
||||||
|
|
||||||
// Finish Init
|
// Finish Init
|
||||||
|
@ -183,7 +183,7 @@ LLDSPEC bool_t gdisp_lld_init(GDisplay *g) {
|
||||||
g->g.Width = GDISP_SCREEN_WIDTH;
|
g->g.Width = GDISP_SCREEN_WIDTH;
|
||||||
g->g.Height = GDISP_SCREEN_HEIGHT;
|
g->g.Height = GDISP_SCREEN_HEIGHT;
|
||||||
g->g.Orientation = GDISP_ROTATE_0;
|
g->g.Orientation = GDISP_ROTATE_0;
|
||||||
g->g.Powermode = powerOn;
|
g->g.Powermode = powerOff;
|
||||||
g->g.Backlight = GDISP_INITIAL_BACKLIGHT;
|
g->g.Backlight = GDISP_INITIAL_BACKLIGHT;
|
||||||
g->g.Contrast = GDISP_INITIAL_CONTRAST;
|
g->g.Contrast = GDISP_INITIAL_CONTRAST;
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
@ -204,7 +204,8 @@ LLDSPEC bool_t gdisp_lld_init(GDisplay *g) {
|
||||||
uint8_t* src = PRIV(g)->frame_buffer;
|
uint8_t* src = PRIV(g)->frame_buffer;
|
||||||
for (int y=0;y<GDISP_SCREEN_HEIGHT;y++) {
|
for (int y=0;y<GDISP_SCREEN_HEIGHT;y++) {
|
||||||
for (int x=0;x<GDISP_SCREEN_WIDTH;x++) {
|
for (int x=0;x<GDISP_SCREEN_WIDTH;x++) {
|
||||||
PRIV(g)->write_buffer[get_led_address(g, x, y)]=CIE1931_CURVE[*src];
|
uint8_t val = (uint16_t)*src * g->g.Backlight / 100;
|
||||||
|
PRIV(g)->write_buffer[get_led_address(g, x, y)]=CIE1931_CURVE[val];
|
||||||
++src;
|
++src;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -297,8 +298,13 @@ LLDSPEC bool_t gdisp_lld_init(GDisplay *g) {
|
||||||
g->g.Orientation = (orientation_t)g->p.ptr;
|
g->g.Orientation = (orientation_t)g->p.ptr;
|
||||||
return;
|
return;
|
||||||
|
|
||||||
case GDISP_CONTROL_CONTRAST:
|
case GDISP_CONTROL_BACKLIGHT:
|
||||||
return;
|
if (g->g.Backlight == (unsigned)g->p.ptr)
|
||||||
|
return;
|
||||||
|
unsigned val = (unsigned)g->p.ptr;
|
||||||
|
g->g.Backlight = val > 100 ? 100 : val;
|
||||||
|
g->flags |= GDISP_FLG_NEEDFLUSH;
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif // GDISP_NEED_CONTROL
|
#endif // GDISP_NEED_CONTROL
|
||||||
|
|
|
@ -1,2 +0,0 @@
|
||||||
GFXINC += drivers/gdisp/emulator_lcd
|
|
||||||
GFXSRC += drivers/gdisp/emulator_lcd/emulator_lcd.c
|
|
|
@ -1,10 +0,0 @@
|
||||||
#define GDISP_DRIVER_VMT GDISPVMT_EMULATOR_LCD_ERGODOX
|
|
||||||
#define GDISP_HARDWARE_DRAWPIXEL TRUE
|
|
||||||
#define GDISP_HARDWARE_PIXELREAD TRUE
|
|
||||||
#define GDISP_HARDWARE_CONTROL TRUE
|
|
||||||
#define GDISP_LLD_PIXELFORMAT GDISP_PIXELFORMAT_MONO
|
|
||||||
#define GDISP_SCREEN_WIDTH 128
|
|
||||||
#define GDISP_SCREEN_HEIGHT 32
|
|
||||||
#define ROTATE_180_IS_FLIP
|
|
||||||
|
|
||||||
#include "emulator/emulator_driver_impl.h"
|
|
|
@ -1,2 +0,0 @@
|
||||||
GFXINC += drivers/gdisp/emulator_led
|
|
||||||
GFXSRC += drivers/gdisp/emulator_led/emulator_led.c
|
|
|
@ -1,10 +0,0 @@
|
||||||
#define GDISP_DRIVER_VMT GDISPVMT_EMULATOR_LED_ERGODOX
|
|
||||||
#define GDISP_HARDWARE_DRAWPIXEL TRUE
|
|
||||||
#define GDISP_HARDWARE_PIXELREAD TRUE
|
|
||||||
#define GDISP_HARDWARE_CONTROL TRUE
|
|
||||||
#define GDISP_LLD_PIXELFORMAT GDISP_PIXELFORMAT_MONO
|
|
||||||
#define GDISP_SCREEN_WIDTH 7
|
|
||||||
#define GDISP_SCREEN_HEIGHT 7
|
|
||||||
#define ROTATE_180_IS_FLIP
|
|
||||||
|
|
||||||
#include "emulator/emulator_driver_impl.h"
|
|
|
@ -58,19 +58,14 @@ OPT_DEFS += -DCORTEX_VTOR_INIT=0x00002000
|
||||||
# Build Options
|
# Build Options
|
||||||
# comment out to disable the options.
|
# comment out to disable the options.
|
||||||
#
|
#
|
||||||
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 = yes
|
||||||
LCD_ENABLE ?= yes
|
LCD_ENABLE = yes
|
||||||
LED_ENABLE ?= no
|
BACKLIGHT_ENABLE = yes
|
||||||
LCD_BACKLIGHT_ENABLE ?= yes
|
LCD_BACKLIGHT_ENABLE = yes
|
||||||
MIDI_ENABLE = no
|
MIDI_ENABLE = no
|
||||||
RGBLIGHT_ENABLE = no
|
RGBLIGHT_ENABLE = no
|
||||||
|
|
||||||
ifdef LCD_ENABLE
|
|
||||||
include $(SUBPROJECT_PATH)/drivers/gdisp/st7565ergodox/driver.mk
|
include $(SUBPROJECT_PATH)/drivers/gdisp/st7565ergodox/driver.mk
|
||||||
endif
|
|
||||||
|
|
||||||
ifdef LED_ENABLE
|
|
||||||
include $(SUBPROJECT_PATH)/drivers/gdisp/IS31FL3731C/driver.mk
|
include $(SUBPROJECT_PATH)/drivers/gdisp/IS31FL3731C/driver.mk
|
||||||
endif
|
|
|
@ -123,7 +123,7 @@ void initialize_user_visualizer(visualizer_state_t* state) {
|
||||||
start_keyframe_animation(&default_startup_animation);
|
start_keyframe_animation(&default_startup_animation);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline bool is_led_on(visualizer_user_data_t* user_data, uint8_t num) {
|
static inline bool is_led_on(visualizer_user_data_t* user_data, uint8_t num) {
|
||||||
return user_data->led_on & (1u << num);
|
return user_data->led_on & (1u << num);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
SUBPROJECT_DEFAULT = infinity
|
SUBPROJECT_DEFAULT = infinity
|
||||||
LCD_BACKLIGHT_ENABLE = yes
|
LCD_BACKLIGHT_ENABLE = yes
|
||||||
LCD_ENABLE = yes
|
LCD_ENABLE = yes
|
||||||
LED_ENABLE = yes
|
|
||||||
BACKLIGHT_ENABLE = yes
|
BACKLIGHT_ENABLE = yes
|
||||||
NKRO_ENABLE = yes
|
NKRO_ENABLE = yes
|
||||||
TAP_DANCE_ENABLE = yes
|
TAP_DANCE_ENABLE = yes
|
||||||
|
|
|
@ -14,7 +14,7 @@
|
||||||
|LCTRL | F4 | F5 | LGUI | LALT | | Left | Down | Up | Right| RGUI |
|
|LCTRL | F4 | F5 | LGUI | LALT | | Left | Down | Up | Right| RGUI |
|
||||||
`----------------------------------' `----------------------------------'
|
`----------------------------------' `----------------------------------'
|
||||||
,-------------. ,-------------.
|
,-------------. ,-------------.
|
||||||
| Home | End | | Alt |Ctrl/Esc|
|
| Copy | Paste| | Alt |Ctrl/Esc|
|
||||||
,------|------|------| |------+--------+------.
|
,------|------|------| |------+--------+------.
|
||||||
| | | PgUp | | PgDn | | |
|
| | | PgUp | | PgDn | | |
|
||||||
| Bcksp|OSL(2)|------| |------| Ent |Space |
|
| Bcksp|OSL(2)|------| |------| Ent |Space |
|
||||||
|
@ -32,23 +32,28 @@
|
||||||
| | | | | | | F10 | | F11 | | | | | | |
|
| | | | | | | F10 | | F11 | | | | | | |
|
||||||
|--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
|--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||||
| | | | | | |------| |------| | | | | | |
|
| | | | | | |------| |------| | | | | | |
|
||||||
|--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
|--------+------+------+------+------+------| L2 | | |------+------+------+------+------+--------|
|
||||||
| | | | | | | | | | | | | | | |
|
| | | | | | | | | | | | | | | |
|
||||||
`--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
|
`--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
|
||||||
| | | | | | | | | | | |
|
| | | | | | | F12 |GoToIm| FAR | | |
|
||||||
`----------------------------------' `----------------------------------'
|
`----------------------------------' `----------------------------------'
|
||||||
,-------------. ,---------------.
|
,-------------. ,---------------.
|
||||||
|Format| | | Test | DTest |
|
|Format|Build | | Test | DTest |
|
||||||
,------|------|------| |------+--------+------.
|
,------|------|------| |------+--------+------.
|
||||||
| | |Refact| | | | |
|
| | |Refact| |Sort U| | |
|
||||||
| | |------| |------| | |
|
| | |------| |------| | |
|
||||||
| | | | | | | |
|
| | | | | | | |
|
||||||
`--------------------' `----------------------'
|
`--------------------' `----------------------'
|
||||||
```
|
```
|
||||||
* Format - Visual Studio Format. Sends `CTRL + K, CTRL + D`
|
* Build - Visualt Studio Build Solution. Sends `CTRL + SHFT + B`
|
||||||
* Refact - Visual Studio Refactor. Sends `CTRL + R, R`
|
|
||||||
* Test - Visual Studio Run Test. Sends `CTRL + R, T`
|
|
||||||
* DTest - Visual Studio Debug Test. Sends `CTRL + R, CTRL + T`
|
* DTest - Visual Studio Debug Test. Sends `CTRL + R, CTRL + T`
|
||||||
|
* FAR - Visual Studio Find All References. Sends `CTRL + K, R`
|
||||||
|
* Format - Visual Studio Format. Sends `CTRL + K, CTRL + D`
|
||||||
|
* GoToIm - Visual Studio Go To Implementation. Sends `CTRL + F12`
|
||||||
|
* Refact - Visual Studio Refactor. Sends `CTRL + R, R`
|
||||||
|
* Sort U - Visual Studio Sort Usings. Sends `CTRL + R, CTRL + G`
|
||||||
|
* Test - Visual Studio Run Test. Sends `CTRL + R, T`
|
||||||
|
|
||||||
|
|
||||||
### Keymap 2: Symbol Layer
|
### Keymap 2: Symbol Layer
|
||||||
```
|
```
|
||||||
|
@ -87,9 +92,9 @@
|
||||||
| | | | Lclk | Rclk | | | | | | |
|
| | | | Lclk | Rclk | | | | | | |
|
||||||
`----------------------------------' `----------------------------------'
|
`----------------------------------' `----------------------------------'
|
||||||
,-------------. ,-------------.
|
,-------------. ,-------------.
|
||||||
| | | | Vol+ | |
|
| Back+| Back-| | Vol+ | |
|
||||||
,------|------|------| |------+------+------.
|
,------|------|------| |------+------+------.
|
||||||
| | | | | Vol- | | |
|
| | |BL_TOG| | Vol- | | |
|
||||||
| | |------| |------| PL/PS| Next |
|
| | |------| |------| PL/PS| Next |
|
||||||
| | | | | Back | | |
|
| | | | | Back | | |
|
||||||
`--------------------' `--------------------'
|
`--------------------' `--------------------'
|
||||||
|
@ -100,23 +105,24 @@
|
||||||
,--------------------------------------------------. ,--------------------------------------------------.
|
,--------------------------------------------------. ,--------------------------------------------------.
|
||||||
| | | | | | | | | | | | | | | |
|
| | | | | | | | | | | | | | | |
|
||||||
|--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
|
|--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
|
||||||
| | | | | | | | | | | | | | | |
|
| |KOpen |KType | | | | | | | Copy | | | | Paste| |
|
||||||
|--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
|--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||||
| |DLeft |DRight|LShift| | |------| |------| Left | Down | Up | Right| | |
|
| |DLeft |DRight| LCTL | | |------| |------| Left | Down | Up | Right| | |
|
||||||
|--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
|--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||||
| |KOpen |KType | | | | | | | | | | | | |
|
| |SFT_TB| Tab | | | | | | | | | | | | |
|
||||||
`--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
|
`--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
|
||||||
| | | | | | | | | | | |
|
| | | | | | | | | | | |
|
||||||
`----------------------------------' `----------------------------------'
|
`----------------------------------' `----------------------------------'
|
||||||
,-------------. ,-------------.
|
,-------------. ,-------------.
|
||||||
| | | | | |
|
| | | | Home | End |
|
||||||
,------|------|------| |------+------+------.
|
,------|------|------| |------+------+------.
|
||||||
| | | | | | | |
|
| | | | | | | |
|
||||||
| | CTRL |------| |------| | |
|
| | LSFT |------| |------| | |
|
||||||
| | | | | | | |
|
| | | | | | | |
|
||||||
`--------------------' `--------------------'
|
`--------------------' `--------------------'
|
||||||
```
|
```
|
||||||
* DLeft - Move to the left Desktop. Sends `Ctrl + Win + Left Arrow`
|
* DLeft - Move to the left Desktop. Sends `Ctrl + Win + Left Arrow`
|
||||||
* DRight - Move to the right Desktop. Sends `Ctrl + Win + Right Arrow`
|
* DRight - Move to the right Desktop. Sends `Ctrl + Win + Right Arrow`
|
||||||
* KOpen - Opens KeePass. Sends `Ctrl + Alt + k`
|
* KOpen - Opens KeePass. Sends `Ctrl + Alt + k`
|
||||||
* KType - Autotypes KeePass password. Sends `Ctrl + Alt + a`
|
* KType - Autotypes KeePass password. Sends `Ctrl + Alt + a`
|
||||||
|
* SFT_TB - Sends `CTRL + TAB`.
|
||||||
|
|
|
@ -0,0 +1,11 @@
|
||||||
|
#ifndef CONFIG_H_
|
||||||
|
#define CONFIG_H_
|
||||||
|
|
||||||
|
#include "../../config.h"
|
||||||
|
|
||||||
|
#undef TAPPING_TERM
|
||||||
|
#define TAPPING_TERM 150
|
||||||
|
|
||||||
|
#define PERMISSIVE_HOLD
|
||||||
|
|
||||||
|
#endif
|
|
@ -23,12 +23,17 @@ enum custom_macros {
|
||||||
DLEFT,
|
DLEFT,
|
||||||
DRIGHT,
|
DRIGHT,
|
||||||
PSCREEN_APP,
|
PSCREEN_APP,
|
||||||
|
LSFT_TAB,
|
||||||
|
|
||||||
// VS Macros
|
// VS Macros
|
||||||
REFACTOR,
|
REFACTOR,
|
||||||
TEST,
|
TEST,
|
||||||
DEBUG_TEST,
|
DEBUG_TEST,
|
||||||
FORMAT,
|
FORMAT,
|
||||||
|
BUILD,
|
||||||
|
GO_TO_IMPL,
|
||||||
|
FIND_ALL_REF,
|
||||||
|
REMOVE_SORT_USINGS,
|
||||||
|
|
||||||
// KeePass macros
|
// KeePass macros
|
||||||
KEEPASS_OPEN,
|
KEEPASS_OPEN,
|
||||||
|
@ -61,11 +66,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
* |LCTRL | F4 | F5 | LGUI | LALT | | Left | Down | Up | Right| RGUI |
|
* |LCTRL | F4 | F5 | LGUI | LALT | | Left | Down | Up | Right| RGUI |
|
||||||
* `----------------------------------' `----------------------------------'
|
* `----------------------------------' `----------------------------------'
|
||||||
* ,-------------. ,-------------.
|
* ,-------------. ,-------------.
|
||||||
* | Home | End | | Alt |Ctrl/Esc|
|
* | Copy | Paste| | Alt |Ctrl/Esc|
|
||||||
* ,------|------|------| |------+--------+------.
|
* ,------|------|------| |------+--------+------.
|
||||||
* | | | PgUp | | PgDn | | |
|
* | | | PgUp | | PgDn | | |
|
||||||
* | Bcksp|OSL(2)|------| |------| Ent |Space |
|
* | Bcksp|OSL(2)|------| |------| Ent |Space |
|
||||||
* | | | Del | |OSL(2)| | |
|
* | | | Del | | RCtrl| | |
|
||||||
* `--------------------' `----------------------'
|
* `--------------------' `----------------------'
|
||||||
*/
|
*/
|
||||||
// If it accepts an argument (i.e, is a function), it doesn't need KC_.
|
// If it accepts an argument (i.e, is a function), it doesn't need KC_.
|
||||||
|
@ -75,20 +80,20 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_EQL,
|
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_EQL,
|
||||||
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, TG(SYMB),
|
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, TG(SYMB),
|
||||||
KC_ESC, KC_A, KC_S, KC_D, LT(MOVE, KC_F),KC_G,
|
KC_ESC, KC_A, KC_S, KC_D, LT(MOVE, KC_F),KC_G,
|
||||||
KC_LSFT, CTL_T(KC_Z), KC_X, KC_C, KC_V, KC_B, TG(CODE),
|
OSM(MOD_LSFT), CTL_T(KC_Z), KC_X, KC_C, KC_V, KC_B, TG(CODE),
|
||||||
KC_LCTRL, KC_F4, KC_F5, KC_LGUI,KC_LALT,
|
OSM(MOD_LCTL), KC_F4, KC_F5, KC_LGUI,KC_LALT,
|
||||||
KC_HOME, KC_END,
|
LCTL(KC_C),LCTL(KC_V),
|
||||||
KC_PGUP,
|
KC_PGUP,
|
||||||
KC_BSPC,OSL(SYMB),KC_DEL,
|
KC_BSPC,OSL(SYMB), KC_DEL,
|
||||||
// right hand
|
// right hand
|
||||||
TG(CODE), KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,
|
TG(CODE), KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,
|
||||||
TG(SYMB), KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS,
|
TG(SYMB), KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS,
|
||||||
KC_H, KC_J, KC_K, KC_L, TD(TD_SEMICOLON_COLON),KC_QUOT,
|
KC_H, KC_J, KC_K, KC_L, TD(TD_SEMICOLON_COLON),KC_QUOT,
|
||||||
MO(MDIA), KC_N, KC_M, KC_COMM,KC_DOT, CTL_T(KC_SLSH), KC_RSFT,
|
MO(MDIA), KC_N, KC_M, KC_COMM,KC_DOT, CTL_T(KC_SLSH), OSM(MOD_RSFT),
|
||||||
KC_LEFT,KC_DOWN,KC_UP, KC_RIGHT, KC_RGUI,
|
KC_LEFT,KC_DOWN,KC_UP, KC_RIGHT, KC_RGUI,
|
||||||
KC_RALT, CTL_T(KC_ESC),
|
KC_RALT, CTL_T(KC_ESC),
|
||||||
KC_PGDN,
|
KC_PGDN,
|
||||||
OSL(SYMB),KC_ENT, KC_SPC
|
KC_RCTL, KC_ENT, KC_SPC
|
||||||
),
|
),
|
||||||
/* Keymap 1: Code Layer
|
/* Keymap 1: Code Layer
|
||||||
*
|
*
|
||||||
|
@ -98,15 +103,15 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
* | | | | | | | F10 | | F11 | | | | | | |
|
* | | | | | | | F10 | | F11 | | | | | | |
|
||||||
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||||
* | | | | | | |------| |------| | | | | | |
|
* | | | | | | |------| |------| | | | | | |
|
||||||
* |--------+------+------+------+------+------|ACCESS| | |------+------+------+------+------+--------|
|
* |--------+------+------+------+------+------| L2 | | |------+------+------+------+------+--------|
|
||||||
* | | | | | | | | | | | | | | | |
|
* | | | | | | | | | | | | | | | |
|
||||||
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
|
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
|
||||||
* | | | | | | | | | | | |
|
* | | | | | | | F12 |GoToIm| FAR | | |
|
||||||
* `----------------------------------' `----------------------------------'
|
* `----------------------------------' `----------------------------------'
|
||||||
* ,-------------. ,---------------.
|
* ,-------------. ,---------------.
|
||||||
* |Format| | | Test | DTest |
|
* |Format|Build | | Test | DTest |
|
||||||
* ,------|------|------| |------+--------+------.
|
* ,------|------|------| |------+--------+------.
|
||||||
* | | |Refact| | | | |
|
* | | |Refact| |Sort U| | |
|
||||||
* | | |------| |------| | |
|
* | | |------| |------| | |
|
||||||
* | | | | | | | |
|
* | | | | | | | |
|
||||||
* `--------------------' `----------------------'
|
* `--------------------' `----------------------'
|
||||||
|
@ -118,20 +123,20 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_F10,
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_F10,
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, TG(SYMB),
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||||
M(FORMAT), KC_TRNS,
|
M(FORMAT),M(BUILD),
|
||||||
M(REFACTOR),
|
M(REFACTOR),
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS,
|
KC_TRNS, KC_TRNS, KC_TRNS,
|
||||||
// right hand
|
// 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_F11, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
KC_F11, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
KC_F12, M(GO_TO_IMPL),M(FIND_ALL_REF),KC_TRNS, KC_TRNS,
|
||||||
M(TEST), M(DEBUG_TEST),
|
M(TEST), M(DEBUG_TEST),
|
||||||
KC_TRNS,
|
M(REMOVE_SORT_USINGS),
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS
|
KC_TRNS, KC_TRNS, KC_TRNS
|
||||||
),
|
),
|
||||||
/* Keymap 2: Symbol Layer
|
/* Keymap 2: Symbol Layer
|
||||||
|
@ -142,7 +147,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
* | | ! | @ | ( | ) | | |ACCESS| |ACCESS| Up | 7 | 8 | 9 | * | F12 |
|
* | | ! | @ | ( | ) | | |ACCESS| |ACCESS| Up | 7 | 8 | 9 | * | F12 |
|
||||||
* |---------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
* |---------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||||
* | | # | $ | { | } | ` |------| |------| Down | 4 | 5 | 6 | + | |
|
* | | # | $ | { | } | ` |------| |------| Down | 4 | 5 | 6 | + | |
|
||||||
* |---------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
* |---------+------+------+------+------+------|ACCESS| | |------+------+------+------+------+--------|
|
||||||
* | | % | ^ | [ | ] | ~ | | | | & | 1 | 2 | 3 | \ | |
|
* | | % | ^ | [ | ] | ~ | | | | & | 1 | 2 | 3 | \ | |
|
||||||
* `---------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
|
* `---------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
|
||||||
* | EPRM | | | | | | 0 | 0 | . | = | |
|
* | EPRM | | | | | | 0 | 0 | . | = | |
|
||||||
|
@ -190,9 +195,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
* | | | | Lclk | Rclk | | | | | | |
|
* | | | | Lclk | Rclk | | | | | | |
|
||||||
* `----------------------------------' `----------------------------------'
|
* `----------------------------------' `----------------------------------'
|
||||||
* ,-------------. ,-------------.
|
* ,-------------. ,-------------.
|
||||||
* | | | | Vol+ | |
|
* | Back+| Back-| | Vol+ | |
|
||||||
* ,------|------|------| |------+------+------.
|
* ,------|------|------| |------+------+------.
|
||||||
* | | | | | Vol- | | |
|
* | | |BackTg| | Vol- | | |
|
||||||
* | | |------| |------| PL/PS| Next |
|
* | | |------| |------| PL/PS| Next |
|
||||||
* | | | | | Back | | |
|
* | | | | | Back | | |
|
||||||
* `--------------------' `--------------------'
|
* `--------------------' `--------------------'
|
||||||
|
@ -204,8 +209,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS,
|
KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS,
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_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_BTN1, KC_BTN2,
|
||||||
KC_TRNS, KC_TRNS,
|
BL_INC, BL_DEC,
|
||||||
KC_TRNS,
|
BL_TOGG,
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS,
|
KC_TRNS, KC_TRNS, KC_TRNS,
|
||||||
// right hand
|
// 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,
|
||||||
|
@ -222,39 +227,39 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
* ,--------------------------------------------------. ,--------------------------------------------------.
|
* ,--------------------------------------------------. ,--------------------------------------------------.
|
||||||
* | | | | | | | | | | | | | | | |
|
* | | | | | | | | | | | | | | | |
|
||||||
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
|
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
|
||||||
* | | | | | | | | | | | | | | | |
|
* | |KOpen |KType | | | | | | | Copy | | | | Paste| |
|
||||||
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||||
* | |DLeft |DRight|LShift|ACCESS| |------| |------| Left | Down | Up | Right| | |
|
* | |DLeft |DRight|LCTRL |ACCESS| |------| |------| Left | Down | Up | Right| | |
|
||||||
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||||
* | |KOpen |KType | | | | | | | | | | | | |
|
* | |SFT_TB| TAB | | | | | | | | | | | | |
|
||||||
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
|
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
|
||||||
* | | | | | | | | | | | |
|
* | | | | | | | | | | | |
|
||||||
* `----------------------------------' `----------------------------------'
|
* `----------------------------------' `----------------------------------'
|
||||||
* ,-------------. ,-------------.
|
* ,-------------. ,-------------.
|
||||||
* | | | | | |
|
* | | | | Home | End |
|
||||||
* ,------|------|------| |------+------+------.
|
* ,------|------|------| |------+------+------.
|
||||||
* | | | | | | | |
|
* | | | | | | | |
|
||||||
* | | CTRL |------| |------| | |
|
* | |LSHIFT|------| |------| | |
|
||||||
* | | | | | | | |
|
* | | | | | | | |
|
||||||
* `--------------------' `--------------------'
|
* `--------------------' `--------------------'
|
||||||
*/
|
*/
|
||||||
// MEDIA AND MOUSE
|
// MEDIA AND MOUSE
|
||||||
[MOVE] = KEYMAP(
|
[MOVE] = KEYMAP(
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
|
||||||
KC_TRNS, M(DLEFT), M(DRIGHT), KC_LSFT, KC_TRNS, KC_TRNS,
|
|
||||||
KC_TRNS, M(KEEPASS_OPEN),M(KEEPASS_TYPE),KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
KC_TRNS, M(KEEPASS_OPEN),M(KEEPASS_TYPE),KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||||
|
KC_TRNS, M(DLEFT), M(DRIGHT), KC_LCTL, KC_TRNS, KC_TRNS,
|
||||||
|
KC_TRNS, M(LSFT_TAB), KC_TAB, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||||
KC_TRNS, KC_TRNS,
|
KC_TRNS, KC_TRNS,
|
||||||
KC_TRNS,
|
KC_TRNS,
|
||||||
KC_TRNS, KC_LCTRL,KC_TRNS,
|
KC_TRNS, KC_LSFT, KC_TRNS,
|
||||||
// right hand
|
// 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_TRNS, KC_TRNS,
|
KC_TRNS, LCTL(KC_C),KC_TRNS, KC_TRNS, KC_TRNS, LCTL(KC_V),KC_TRNS,
|
||||||
KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT,KC_TRNS, KC_TRNS,
|
KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT,KC_TRNS, KC_TRNS,
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||||
KC_TRNS, KC_TRNS,
|
KC_HOME, KC_END,
|
||||||
KC_TRNS,
|
KC_TRNS,
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS
|
KC_TRNS, KC_TRNS, KC_TRNS
|
||||||
|
|
||||||
|
@ -291,9 +296,13 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
|
||||||
break;
|
break;
|
||||||
case PSCREEN_APP:
|
case PSCREEN_APP:
|
||||||
if (record->event.pressed) {
|
if (record->event.pressed) {
|
||||||
return MACRO(D(LALT), T(PSCR), U(LALT));
|
return MACRO(D(LALT), T(PSCR), U(LALT), END);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case LSFT_TAB:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
return MACRO(D(LSFT), T(TAB), U(LSFT), END);
|
||||||
|
}
|
||||||
case REFACTOR:
|
case REFACTOR:
|
||||||
if (record->event.pressed) { // VS Refactor CTRL+R, R
|
if (record->event.pressed) { // VS Refactor CTRL+R, R
|
||||||
return MACRO(D(LCTL), T(R), U(LCTL), T(R), END);
|
return MACRO(D(LCTL), T(R), U(LCTL), T(R), END);
|
||||||
|
@ -314,6 +323,26 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
|
||||||
return MACRO(D(LCTL), T(K), T(D), U(LCTL), END);
|
return MACRO(D(LCTL), T(K), T(D), U(LCTL), END);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case BUILD:
|
||||||
|
if (record->event.pressed) { // VS Build. Sends CTRL+SHFT+B
|
||||||
|
return MACRO(D(LCTL), D(LSFT), T(B), U(LSFT), U(LCTL), END);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case GO_TO_IMPL:
|
||||||
|
if (record->event.pressed) { // VS Go To Implementation. Sends CTRL+F12
|
||||||
|
return MACRO(D(LCTL), T(F12), U(LCTL), END);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case FIND_ALL_REF:
|
||||||
|
if (record->event.pressed) { // VS Find All References. Sends CTRL+K, R
|
||||||
|
return MACRO(D(LCTL), T(K), U(LCTL), T(R), END);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case REMOVE_SORT_USINGS:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
return MACRO(D(LCTL), T(R), T(G), U(LCTL), END);
|
||||||
|
}
|
||||||
|
break;
|
||||||
case KEEPASS_OPEN:
|
case KEEPASS_OPEN:
|
||||||
if (record->event.pressed) { // Keepass open application
|
if (record->event.pressed) { // Keepass open application
|
||||||
return MACRO(D(LCTL), D(LALT), T(K), U(LALT), U(LCTL), END);
|
return MACRO(D(LCTL), D(LALT), T(K), U(LALT), U(LCTL), END);
|
||||||
|
|
Before Width: | Height: | Size: 79 KiB |
|
@ -1,7 +1,7 @@
|
||||||
# Beginner's keymap for Ergodox-EZ
|
# Beginner's keymap for Ergodox-EZ
|
||||||
Beginner's keymap emulates standard QWERTY keyboard for beginners. Once you get comfortable with the Ergodox-EZ, you may fork this keymap and customize it for your own needs or find a suitable one from the community contributed keymaps.
|
Beginner's keymap emulates standard QWERTY keyboard for beginners. Once you get comfortable with the Ergodox-EZ, you may fork this keymap and customize it for your own needs or find a suitable one from the community contributed keymaps.
|
||||||
|
|
||||||
![Beginner's Keymap](keyboard-layout.png)
|
![Beginner's Keymap](https://i.imgur.com/dAIocc8.png)
|
||||||
|
|
||||||
#### Pros
|
#### Pros
|
||||||
* Easier to switch between regular keyboards and Ergodox-EZ.
|
* Easier to switch between regular keyboards and Ergodox-EZ.
|
||||||
|
|
Before Width: | Height: | Size: 1.4 MiB |
|
@ -8,4 +8,4 @@
|
||||||
* Sept. 8, 2016 (V0.1):
|
* Sept. 8, 2016 (V0.1):
|
||||||
* Made A key double as MEDIA Layer change when you hold it. Added mouse buttons to the large thumb buttons on the left side on the Media Layer. Added vi/vim style arrow keys on HJKL on media layer.
|
* Made A key double as MEDIA Layer change when you hold it. Added mouse buttons to the large thumb buttons on the left side on the Media Layer. Added vi/vim style arrow keys on HJKL on media layer.
|
||||||
|
|
||||||
![Absenth](absenth_highres.png)
|
![Absenth](https://i.imgur.com/D1enl2x.jpg)
|
||||||
|
|
|
@ -22,7 +22,7 @@ the 1st layer - in case of fat fingers.
|
||||||
Layout
|
Layout
|
||||||
-------
|
-------
|
||||||
|
|
||||||
![Layout](rl-layout.jpg "Isn't it lovely")
|
![Layout](https://i.imgur.com/4bDwHLS.jpg "Isn't it lovely")
|
||||||
|
|
||||||
### Base Layer
|
### Base Layer
|
||||||
|
|
||||||
|
|
Before Width: | Height: | Size: 814 KiB |
|
@ -1,15 +1,15 @@
|
||||||
BOOTMAGIC_ENABLE=no
|
BOOTMAGIC_ENABLE=no
|
||||||
COMMAND_ENABLE=no
|
COMMAND_ENABLE=no
|
||||||
SLEEP_LED_ENABLE=no
|
SLEEP_LED_ENABLE=no
|
||||||
FORCE_NKRO ?= yes
|
FORCE_NKRO = yes
|
||||||
DEBUG_ENABLE = no
|
DEBUG_ENABLE = no
|
||||||
CONSOLE_ENABLE = no
|
CONSOLE_ENABLE = no
|
||||||
TAP_DANCE_ENABLE = yes
|
TAP_DANCE_ENABLE = yes
|
||||||
KEYLOGGER_ENABLE ?= yes
|
KEYLOGGER_ENABLE = yes
|
||||||
UCIS_ENABLE = yes
|
UCIS_ENABLE = yes
|
||||||
MOUSEKEY_ENABLE = no
|
MOUSEKEY_ENABLE = no
|
||||||
|
|
||||||
AUTOLOG_ENABLE ?= no
|
AUTOLOG_ENABLE = no
|
||||||
|
|
||||||
ifeq (${FORCE_NKRO},yes)
|
ifeq (${FORCE_NKRO},yes)
|
||||||
OPT_DEFS += -DFORCE_NKRO
|
OPT_DEFS += -DFORCE_NKRO
|
||||||
|
|
Before Width: | Height: | Size: 95 KiB |
Before Width: | Height: | Size: 100 KiB |
Before Width: | Height: | Size: 136 KiB |
Before Width: | Height: | Size: 66 KiB |
Before Width: | Height: | Size: 93 KiB |
Before Width: | Height: | Size: 63 KiB |
|
@ -34,7 +34,7 @@ Some of the things in the layout only work when one uses [Spacemacs][spacemacs]
|
||||||
|
|
||||||
## Base layer
|
## Base layer
|
||||||
|
|
||||||
[![Base layer](images/base-layer.png)](http://www.keyboard-layout-editor.com/#/gists/28f7eb305fdbff943613e1dc7aa9e82b)
|
[![Base layer](https://i.imgur.com/q1MDvq4.png)](http://www.keyboard-layout-editor.com/#/gists/28f7eb305fdbff943613e1dc7aa9e82b)
|
||||||
|
|
||||||
At its core, this is a Dvorak layout, with some minor changes. The more interesting parts are how certain keys behave:
|
At its core, this is a Dvorak layout, with some minor changes. The more interesting parts are how certain keys behave:
|
||||||
|
|
||||||
|
@ -62,7 +62,7 @@ The symbols on the front in the image above have the same color as the key that
|
||||||
|
|
||||||
## ADORE layer
|
## ADORE layer
|
||||||
|
|
||||||
[![ADORE layer](images/adore-layer.png)](http://www.keyboard-layout-editor.com/#/gists/45681a17453d235925b6028dd83bf12a)
|
[![ADORE layer](https://i.imgur.com/r3LnQAA.png)](http://www.keyboard-layout-editor.com/#/gists/45681a17453d235925b6028dd83bf12a)
|
||||||
|
|
||||||
My experimental layout, that I keep tweaking. No full description here, because things are very much in flux.
|
My experimental layout, that I keep tweaking. No full description here, because things are very much in flux.
|
||||||
|
|
||||||
|
@ -70,7 +70,7 @@ Note that the **HUN** layer does not work well with ADORE: it still has the same
|
||||||
|
|
||||||
## Steno layer
|
## Steno layer
|
||||||
|
|
||||||
[![Steno layer for Plover](images/steno-layer.png)](http://www.keyboard-layout-editor.com/#/gists/401ef9a84369e47c57f9aedcf0a0d667)
|
[![Steno layer for Plover](https://i.imgur.com/PgifhBF.png)](http://www.keyboard-layout-editor.com/#/gists/401ef9a84369e47c57f9aedcf0a0d667)
|
||||||
|
|
||||||
This is to be used with [Plover](http://www.openstenoproject.org/plover/), nothing really fancy here. The **STENO** key toggles the layer on and off, and sends the toggle command to Plover too.
|
This is to be used with [Plover](http://www.openstenoproject.org/plover/), nothing really fancy here. The **STENO** key toggles the layer on and off, and sends the toggle command to Plover too.
|
||||||
|
|
||||||
|
@ -110,7 +110,7 @@ Included with the firmware is a small tool that can parse these logs, and create
|
||||||
|
|
||||||
The generated heatmap looks somewhat like this:
|
The generated heatmap looks somewhat like this:
|
||||||
|
|
||||||
![Heatmap](images/heatmap.png)
|
![Heatmap](https://i.imgur.com/tly9XSy.png)
|
||||||
|
|
||||||
## Layer notification
|
## Layer notification
|
||||||
|
|
||||||
|
@ -144,3 +144,6 @@ The keymap default to forcing NKRO, which seems to upset Windows, and except the
|
||||||
# License
|
# License
|
||||||
|
|
||||||
The layout, being a derivative of the original TMK firmware which is under the GPL-2+, this layout is under the GPL as well, but GPL-3+, rather than the older version.
|
The layout, being a derivative of the original TMK firmware which is under the GPL-2+, this layout is under the GPL as well, but GPL-3+, rather than the older version.
|
||||||
|
|
||||||
|
![nav-n-media-layer.png](https://i.imgur.com/AReX8C9.png)
|
||||||
|
![hun-layer.png](https://i.imgur.com/uPGBl9J.png)
|
|
@ -0,0 +1,21 @@
|
||||||
|
MIT License
|
||||||
|
|
||||||
|
Copyright (c) 2016 Kaleb Elwert
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
|
@ -0,0 +1,6 @@
|
||||||
|
TAP_DANCE_ENABLE=yes
|
||||||
|
UNICODE_ENABLE=yes
|
||||||
|
|
||||||
|
ifndef QUANTUM_DIR
|
||||||
|
include ../../../../Makefile
|
||||||
|
endif
|
|
@ -0,0 +1,79 @@
|
||||||
|
# Belak's Ergodox Layout
|
||||||
|
|
||||||
|
This has been based off of [emacs\_osx\_dk](https://github.com/jackhumbert/qmk_firmware/tree/master/keyboards/ergodox/keymaps/emacs_osx_dk)
|
||||||
|
from the main qmk repo. However, I've taken some of the ideas for the thumbs
|
||||||
|
from [dvorak\_emacs](https://github.com/jackhumbert/qmk_firmware/tree/master/keyboards/ergodox/keymaps/dvorak_emacs)
|
||||||
|
and tweaked it a bit based on the keycaps I have.
|
||||||
|
|
||||||
|
This keyboard is intended for use in emacs (one of the main reasons for easy
|
||||||
|
access to modifiers) but it could be useful in other instances as well.
|
||||||
|
|
||||||
|
The main repo is used as a testbed, so sometimes the layout may be in a strange
|
||||||
|
state. The qmk version should be relatively stable.
|
||||||
|
|
||||||
|
## Instructions
|
||||||
|
|
||||||
|
This is currently being used on a regular ergodox, but it should work fine on
|
||||||
|
the infinity as well. Though, you may have to modify the commands to build and
|
||||||
|
flash the firmware to match the separate halves as defined in the infinity
|
||||||
|
documentation.
|
||||||
|
|
||||||
|
If you are using this keymap in the qmk repo, you should be able to just run
|
||||||
|
`make ergodox-belak-teensy`. If you're using this externally (I sometimes make
|
||||||
|
changes before syncing them to qmk), use the following instructions:
|
||||||
|
|
||||||
|
1. Clone the main qmk repo
|
||||||
|
2. Clone this to `$QMK/keyboards/ergodox/keymaps/belak-external`
|
||||||
|
3. Run `make ergodox-belak-external-teensy` from the root of the qmk repo.
|
||||||
|
|
||||||
|
## Changelog
|
||||||
|
|
||||||
|
Fifth Revision
|
||||||
|
|
||||||
|
* Change layer keys to tap-dance keys which cycle through additional layers
|
||||||
|
* Add a few emoji keys (in preparation for an emoji layer)
|
||||||
|
|
||||||
|
Fourth Revision
|
||||||
|
|
||||||
|
* Remove media layer
|
||||||
|
* Add a layer which swaps control and gui on the thumb keys.
|
||||||
|
* Add some basic code to save settings to the eeprom
|
||||||
|
* Save the state of the keys swapped in the thumb in the eeprom
|
||||||
|
|
||||||
|
Third Revision
|
||||||
|
|
||||||
|
* Add numpad layer and remove numpad from symbols layer
|
||||||
|
* Disable media layer
|
||||||
|
* Add arrow keys on ijkl to the symbols layer
|
||||||
|
* Replace ALT on held enter and held delete with GUI (for better OSX
|
||||||
|
compatibility, as there's already an ALT key relatively close)
|
||||||
|
* Replace keys above enter and delete with temporary layer switch buttons not
|
||||||
|
matching the other layer switch for that hand.
|
||||||
|
* Reindent and space out most of the layer definitions
|
||||||
|
|
||||||
|
Second Revision
|
||||||
|
|
||||||
|
* Clean up definitions to make differences between layers easier to see
|
||||||
|
* Remove old LCD code
|
||||||
|
* Add new LCD code based on fredizzimo's branch
|
||||||
|
|
||||||
|
First Revision
|
||||||
|
|
||||||
|
* Reverse grave and escape
|
||||||
|
|
||||||
|
Initial Version
|
||||||
|
|
||||||
|
* Copy from emacs\_osx\_dk
|
||||||
|
* "Fix" right alt
|
||||||
|
* Change thumb keys to match default layout (backspace, delete, enter, space)
|
||||||
|
* Add modifiers to thumb keys (ctrl to backspace and space, alt to delete and
|
||||||
|
enter)
|
||||||
|
* Replace the RAlt below the brackets with LGui and RGui
|
||||||
|
* Remove LCtrl and RCtrl from the keys above shift
|
||||||
|
* Add browser forward, and move browser back
|
||||||
|
* "Fix" the order of volume keys
|
||||||
|
|
||||||
|
## Repository
|
||||||
|
|
||||||
|
The original code for this is kept at https://github.com/belak/ergodox-layout and
|
||||||
|
is synced to qmk every few main revisions.
|
|
@ -0,0 +1,368 @@
|
||||||
|
#include "ergodox.h"
|
||||||
|
#include "debug.h"
|
||||||
|
#include "action_layer.h"
|
||||||
|
#include "eeconfig.h"
|
||||||
|
#include "eeprom.h"
|
||||||
|
|
||||||
|
#define LAYER_ON(pos) ((layer_state) & (1<<(pos)))
|
||||||
|
#define _______ KC_TRNS
|
||||||
|
|
||||||
|
#define EECONFIG_BELAK_MAGIC (uint16_t)0xBE42
|
||||||
|
|
||||||
|
// NOTE: This is just a number that's a bit beyond the end of what's already
|
||||||
|
// defined. As there is no other define we can base this on, it may need to be
|
||||||
|
// changed in the future. The initial value here is used as a placeholder with a
|
||||||
|
// magic word, similar to the normal eeconfig. Note that all the storage being
|
||||||
|
// used needs to fit inside the 32 bytes of the Ergodox Infinity.
|
||||||
|
#define EECONFIG_BELAK (uint16_t *)16
|
||||||
|
|
||||||
|
// The correct way to do this would be how the normal eeconfig handles it and
|
||||||
|
// use a bitfield. However, the eeprom has a ton of space which isn't being
|
||||||
|
// used so I don't really care and have a separate byte for every setting.
|
||||||
|
#define EECONFIG_BELAK_SWAP_GUI_CTRL (uint8_t *)18
|
||||||
|
|
||||||
|
static uint8_t swap_gui_ctrl = 0;
|
||||||
|
static uint8_t td_led_override = 0;
|
||||||
|
|
||||||
|
enum belak_keycodes {
|
||||||
|
// Function codes
|
||||||
|
BEL_F0 = SAFE_RANGE,
|
||||||
|
BEL_F1,
|
||||||
|
|
||||||
|
E_SHRUG,
|
||||||
|
E_TFLIP,
|
||||||
|
E_TSET,
|
||||||
|
};
|
||||||
|
|
||||||
|
inline void tap(uint16_t keycode) {
|
||||||
|
register_code(keycode);
|
||||||
|
unregister_code(keycode);
|
||||||
|
};
|
||||||
|
|
||||||
|
// TODO: Add LED support to the tap dance by using the advanced macro
|
||||||
|
#define LTOGGLE TD(TD_LAYER_TOGGLE)
|
||||||
|
|
||||||
|
#define BASE 0 // default layer
|
||||||
|
#define SYMB 1 // symbols
|
||||||
|
#define NUMP 2 // numpad
|
||||||
|
#define SWPH 3 // swap gui/ctrl on the hands
|
||||||
|
|
||||||
|
enum belak_td {
|
||||||
|
TD_LAYER_TOGGLE = 0,
|
||||||
|
};
|
||||||
|
|
||||||
|
void belak_td_each(qk_tap_dance_state_t *state, void *user_data);
|
||||||
|
void belak_td_finished(qk_tap_dance_state_t *state, void *user_data);
|
||||||
|
void belak_td_reset(qk_tap_dance_state_t *state, void *user_data);
|
||||||
|
|
||||||
|
qk_tap_dance_action_t tap_dance_actions[] = {
|
||||||
|
[TD_LAYER_TOGGLE] = ACTION_TAP_DANCE_FN_ADVANCED(belak_td_each, belak_td_finished, belak_td_reset),
|
||||||
|
};
|
||||||
|
|
||||||
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
/* Keymap 0: Basic layer
|
||||||
|
*
|
||||||
|
* ,--------------------------------------------------. ,--------------------------------------------------.
|
||||||
|
* | Esc | 1 | 2 | 3 | 4 | 5 | L1 | | L2 | 6 | 7 | 8 | 9 | 0 | = |
|
||||||
|
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
|
||||||
|
* | Tab | Q | W | E | R | T | [ | | ] | Y | U | I | O | P | - |
|
||||||
|
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||||
|
* | \ | A | S | D | F | G |------| |------| H | J | K | L | ; | ' |
|
||||||
|
* |--------+------+------+------+------+------| LGui | | RGui |------+------+------+------+------+--------|
|
||||||
|
* | LShift | Z | X | C | V | B | | | | N | M | , | . | / | RShift |
|
||||||
|
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
|
||||||
|
* |Layers| LCtrl| Left | Right| LAlt | | RAlt | Up | Down | RCtrl|Layers|
|
||||||
|
* `----------------------------------' `----------------------------------'
|
||||||
|
* ,-------------. ,--------------.
|
||||||
|
* | ~L2 | Ins | | Grv | ~L1 |
|
||||||
|
* ,-------|------|------| |------+-------+-------.
|
||||||
|
* | Back | | Home | | PgUp | | |
|
||||||
|
* | Space | Del |------| |------| Enter | Space |
|
||||||
|
* | | | End | | PgDn | | |
|
||||||
|
* `---------------------' `----------------------'
|
||||||
|
*/
|
||||||
|
[BASE] = KEYMAP( // layer 0 : default
|
||||||
|
// left hand
|
||||||
|
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, TG(SYMB),
|
||||||
|
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_LBRC,
|
||||||
|
CTL_T(KC_BSLS), KC_A, KC_S, KC_D, KC_F, KC_G,
|
||||||
|
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_LGUI,
|
||||||
|
LTOGGLE, KC_LCTRL, KC_LEFT,KC_RGHT,KC_LALT,
|
||||||
|
MO(NUMP),KC_INS,
|
||||||
|
KC_HOME,
|
||||||
|
CTL_T(KC_BSPC),GUI_T(KC_DEL),KC_END,
|
||||||
|
// right hand
|
||||||
|
TG(NUMP), KC_6, KC_7, KC_8, KC_9, KC_0, KC_EQL,
|
||||||
|
KC_RBRC, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_MINS,
|
||||||
|
KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
|
||||||
|
KC_RGUI, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_RSFT,
|
||||||
|
KC_RALT,KC_UP, KC_DOWN,KC_RCTRL, LTOGGLE,
|
||||||
|
KC_GRV, MO(SYMB),
|
||||||
|
KC_PGUP,
|
||||||
|
KC_PGDN, GUI_T(KC_ENT), CTL_T(KC_SPC)
|
||||||
|
),
|
||||||
|
/* Keymap 1: Symbol Layer
|
||||||
|
*
|
||||||
|
* ,--------------------------------------------------. ,--------------------------------------------------.
|
||||||
|
* | | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | F11 |
|
||||||
|
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
|
||||||
|
* | | ! | @ | { | } | | | | | | Up | | Up | | | F12 |
|
||||||
|
* |--------+------+------+------+------+------| TFLIP| | TSET |------+------+------+------+------+--------|
|
||||||
|
* | | # | $ | ( | ) | ` |------| |------| Down | Left | Down | Rght | | |
|
||||||
|
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||||
|
* | | % | ^ | [ | ] | ~ | SHRUG| | | & | | | | | |
|
||||||
|
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
|
||||||
|
* |LClear| | | | | | | | | |LClear|
|
||||||
|
* `----------------------------------' `----------------------------------'
|
||||||
|
* ,-------------. ,-------------.
|
||||||
|
* | TOGL | | | | TOGL |
|
||||||
|
* ,------|------|------| |------+------+------.
|
||||||
|
* | | | | | | | |
|
||||||
|
* | | |------| |------| | |
|
||||||
|
* | | | | | | | |
|
||||||
|
* `--------------------' `--------------------'
|
||||||
|
*/
|
||||||
|
[SYMB] = KEYMAP(
|
||||||
|
// left hand
|
||||||
|
_______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, E_TFLIP,
|
||||||
|
_______, KC_EXLM, KC_AT, KC_LCBR, KC_RCBR, KC_PIPE, E_TSET,
|
||||||
|
_______, KC_HASH, KC_DLR, KC_LPRN, KC_RPRN, KC_GRV,
|
||||||
|
_______, KC_PERC, KC_CIRC, KC_LBRC, KC_RBRC, KC_TILD, E_SHRUG,
|
||||||
|
BEL_F1, _______, _______, _______, _______,
|
||||||
|
BEL_F0, _______,
|
||||||
|
_______,
|
||||||
|
_______, _______, _______,
|
||||||
|
// right hand
|
||||||
|
_______, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
|
||||||
|
_______, KC_UP, _______, KC_UP, _______, _______, KC_F12,
|
||||||
|
KC_DOWN, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______,
|
||||||
|
_______, KC_AMPR, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, BEL_F1,
|
||||||
|
_______, BEL_F0,
|
||||||
|
_______,
|
||||||
|
_______, _______, _______
|
||||||
|
),
|
||||||
|
/* Keymap 2: Numpad Layer
|
||||||
|
*
|
||||||
|
* ,--------------------------------------------------. ,--------------------------------------------------.
|
||||||
|
* | | | | | | | | | | | | | | | |
|
||||||
|
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
|
||||||
|
* | | | | | | | | | | | 7 | 8 | 9 | * | |
|
||||||
|
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||||
|
* | | | | | | |------| |------| | 4 | 5 | 6 | + | |
|
||||||
|
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||||
|
* | | | | | | | | | | | 1 | 2 | 3 | \ | |
|
||||||
|
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
|
||||||
|
* |LClear| | | | | | 0 | 0 | . | = |LClear|
|
||||||
|
* `----------------------------------' `----------------------------------'
|
||||||
|
* ,-------------. ,-------------.
|
||||||
|
* | TOGL | | | | TOGL |
|
||||||
|
* ,------|------|------| |------+------+------.
|
||||||
|
* | | | | | | | |
|
||||||
|
* | | |------| |------| | |
|
||||||
|
* | | | | | | | |
|
||||||
|
* `--------------------' `--------------------'
|
||||||
|
*/
|
||||||
|
[NUMP] = KEYMAP(
|
||||||
|
// left hand
|
||||||
|
_______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______,
|
||||||
|
BEL_F1, _______, _______, _______, _______,
|
||||||
|
BEL_F0, _______,
|
||||||
|
_______,
|
||||||
|
_______, _______, _______,
|
||||||
|
// right hand
|
||||||
|
_______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, KC_7, KC_8, KC_9, KC_ASTR, _______,
|
||||||
|
_______, KC_4, KC_5, KC_6, KC_PLUS, _______,
|
||||||
|
_______, _______, KC_1, KC_2, KC_3, KC_BSLS, _______,
|
||||||
|
KC_0, KC_0, KC_DOT, KC_EQL, BEL_F1,
|
||||||
|
_______, BEL_F0,
|
||||||
|
_______,
|
||||||
|
_______, _______, _______
|
||||||
|
),
|
||||||
|
/* Keymap 3: Swap control and gui on the thumb */
|
||||||
|
[SWPH] = KEYMAP(
|
||||||
|
// left hand
|
||||||
|
_______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______,
|
||||||
|
_______, _______,
|
||||||
|
_______,
|
||||||
|
GUI_T(KC_BSPC), CTL_T(KC_DEL), _______,
|
||||||
|
// right hand
|
||||||
|
_______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______,
|
||||||
|
_______, _______,
|
||||||
|
_______,
|
||||||
|
_______, CTL_T(KC_ENT), GUI_T(KC_SPC)
|
||||||
|
),
|
||||||
|
};
|
||||||
|
|
||||||
|
// Runs just one time when the keyboard initializes.
|
||||||
|
void matrix_init_user(void) {
|
||||||
|
// If our magic word wasn't set properly, we need to zero out the settings.
|
||||||
|
if (eeprom_read_word(EECONFIG_BELAK) != EECONFIG_BELAK_MAGIC) {
|
||||||
|
eeprom_update_word(EECONFIG_BELAK, EECONFIG_BELAK_MAGIC);
|
||||||
|
eeprom_update_byte(EECONFIG_BELAK_SWAP_GUI_CTRL, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (eeprom_read_byte(EECONFIG_BELAK_SWAP_GUI_CTRL)) {
|
||||||
|
layer_on(SWPH);
|
||||||
|
swap_gui_ctrl = 1;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// Runs constantly in the background, in a loop.
|
||||||
|
void matrix_scan_user(void) {
|
||||||
|
ergodox_board_led_off();
|
||||||
|
ergodox_right_led_1_off();
|
||||||
|
ergodox_right_led_2_off();
|
||||||
|
ergodox_right_led_3_off();
|
||||||
|
|
||||||
|
switch (td_led_override) {
|
||||||
|
case 1:
|
||||||
|
ergodox_right_led_1_on();
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
ergodox_right_led_2_on();
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
// Layer 1 and 2 are both overlay layers, so they could both be on. This
|
||||||
|
// means we can't use the lazy check of checking for the first significant
|
||||||
|
// bit.
|
||||||
|
if (LAYER_ON(SYMB)) {
|
||||||
|
ergodox_right_led_1_on();
|
||||||
|
}
|
||||||
|
if (LAYER_ON(NUMP)) {
|
||||||
|
ergodox_right_led_2_on();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||||
|
switch (keycode) {
|
||||||
|
case BEL_F0:
|
||||||
|
if(record->event.pressed){
|
||||||
|
swap_gui_ctrl = !swap_gui_ctrl;
|
||||||
|
eeprom_update_byte(EECONFIG_BELAK_SWAP_GUI_CTRL, swap_gui_ctrl);
|
||||||
|
|
||||||
|
if (swap_gui_ctrl) {
|
||||||
|
layer_on(SWPH);
|
||||||
|
} else {
|
||||||
|
layer_off(SWPH);
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case BEL_F1:
|
||||||
|
if(record->event.pressed){
|
||||||
|
layer_off(SYMB);
|
||||||
|
layer_off(NUMP);
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case E_SHRUG: // ¯\_(ツ)_/¯
|
||||||
|
if (record->event.pressed) {
|
||||||
|
process_unicode((0x00AF|QK_UNICODE), record); // Hand
|
||||||
|
tap(KC_BSLS); // Arm
|
||||||
|
register_code(KC_RSFT);
|
||||||
|
tap(KC_UNDS); // Arm
|
||||||
|
tap(KC_LPRN); // Head
|
||||||
|
unregister_code(KC_RSFT);
|
||||||
|
process_unicode((0x30C4|QK_UNICODE), record); // Face
|
||||||
|
register_code(KC_RSFT);
|
||||||
|
tap(KC_RPRN); // Head
|
||||||
|
tap(KC_UNDS); // Arm
|
||||||
|
unregister_code(KC_RSFT);
|
||||||
|
tap(KC_SLSH); // Arm
|
||||||
|
process_unicode((0x00AF|QK_UNICODE), record); // Hand
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
break;
|
||||||
|
case E_TFLIP: // (╯°□°)╯ ︵ ┻━┻
|
||||||
|
if (record->event.pressed) {
|
||||||
|
register_code(KC_RSFT);
|
||||||
|
tap(KC_9);
|
||||||
|
unregister_code(KC_RSFT);
|
||||||
|
process_unicode((0x256F|QK_UNICODE), record); // Arm
|
||||||
|
process_unicode((0x00B0|QK_UNICODE), record); // Eye
|
||||||
|
process_unicode((0x25A1|QK_UNICODE), record); // Mouth
|
||||||
|
process_unicode((0x00B0|QK_UNICODE), record); // Eye
|
||||||
|
register_code(KC_RSFT);
|
||||||
|
tap(KC_0);
|
||||||
|
unregister_code(KC_RSFT);
|
||||||
|
process_unicode((0x256F|QK_UNICODE), record); // Arm
|
||||||
|
tap(KC_SPC);
|
||||||
|
process_unicode((0x0361|QK_UNICODE), record); // Flippy
|
||||||
|
tap(KC_SPC);
|
||||||
|
process_unicode((0x253B|QK_UNICODE), record); // Table
|
||||||
|
process_unicode((0x2501|QK_UNICODE), record); // Table
|
||||||
|
process_unicode((0x253B|QK_UNICODE), record); // Table
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
break;
|
||||||
|
case E_TSET: // ┬──┬ ノ( ゜-゜ノ)
|
||||||
|
if (record->event.pressed) {
|
||||||
|
process_unicode((0x252C|QK_UNICODE), record); // Table
|
||||||
|
process_unicode((0x2500|QK_UNICODE), record); // Table
|
||||||
|
process_unicode((0x2500|QK_UNICODE), record); // Table
|
||||||
|
process_unicode((0x252C|QK_UNICODE), record); // Table
|
||||||
|
tap(KC_SPC);
|
||||||
|
process_unicode((0x30CE|QK_UNICODE), record); // Arm
|
||||||
|
register_code(KC_RSFT);
|
||||||
|
tap(KC_9);
|
||||||
|
unregister_code(KC_RSFT);
|
||||||
|
tap(KC_SPC);
|
||||||
|
process_unicode((0x309C|QK_UNICODE), record); // Eye
|
||||||
|
tap(KC_MINS);
|
||||||
|
process_unicode((0x309C|QK_UNICODE), record); // Eye
|
||||||
|
process_unicode((0x30CE|QK_UNICODE), record); // Arm
|
||||||
|
register_code(KC_RSFT);
|
||||||
|
tap(KC_0);
|
||||||
|
unregister_code(KC_RSFT);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void belak_td_each(qk_tap_dance_state_t *state, void *user_data) {
|
||||||
|
switch (state->count) {
|
||||||
|
case 1:
|
||||||
|
td_led_override = 1;
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
td_led_override = 2;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
reset_tap_dance(state);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void belak_td_finished(qk_tap_dance_state_t *state, void *user_data) {
|
||||||
|
switch (state->count) {
|
||||||
|
case 1:
|
||||||
|
layer_on(SYMB);
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
layer_on(NUMP);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
td_led_override = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void belak_td_reset(qk_tap_dance_state_t *state, void *user_data) {
|
||||||
|
td_led_override = 0;
|
||||||
|
}
|
|
@ -0,0 +1,49 @@
|
||||||
|
/*
|
||||||
|
Copyright 2017 Fred Sundvik
|
||||||
|
|
||||||
|
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/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Currently we are assuming that both the backlight and LCD are enabled
|
||||||
|
// But it's entirely possible to write a custom visualizer that use only
|
||||||
|
// one of them
|
||||||
|
#ifndef LCD_BACKLIGHT_ENABLE
|
||||||
|
#error This visualizer needs that LCD backlight is enabled
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef LCD_ENABLE
|
||||||
|
#error This visualizer needs that LCD is enabled
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "simple_visualizer.h"
|
||||||
|
|
||||||
|
static void get_visualizer_layer_and_color(visualizer_state_t* state) {
|
||||||
|
uint8_t saturation = 60;
|
||||||
|
if (state->status.leds & (1u << USB_LED_CAPS_LOCK)) {
|
||||||
|
saturation = 255;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (state->status.layer & 0x4) {
|
||||||
|
state->target_lcd_color = LCD_COLOR(0, saturation, 0xFF);
|
||||||
|
state->layer_text = "Media";
|
||||||
|
}
|
||||||
|
else if (state->status.layer & 0x2) {
|
||||||
|
state->target_lcd_color = LCD_COLOR(168, saturation, 0xFF);
|
||||||
|
state->layer_text = "Symbols";
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
state->target_lcd_color = LCD_COLOR(84, saturation, 0xFF);
|
||||||
|
state->layer_text = "Base";
|
||||||
|
}
|
||||||
|
}
|
Before Width: | Height: | Size: 78 KiB |
|
@ -1,3 +1,5 @@
|
||||||
|
![bepo.png](https://i.imgur.com/TnO8ApW.png)
|
||||||
|
|
||||||
# BEPO keymap for the ErgoDox
|
# BEPO keymap for the ErgoDox
|
||||||
|
|
||||||
This keymap has been made for the BEPO layout (http://bepo.fr), which is an ergonomic french keyboard layout based on Dvorak rules. As it's made for french people, the following of this readme will be in french.
|
This keymap has been made for the BEPO layout (http://bepo.fr), which is an ergonomic french keyboard layout based on Dvorak rules. As it's made for french people, the following of this readme will be in french.
|
||||||
|
|
Before Width: | Height: | Size: 101 KiB |
|
@ -20,4 +20,4 @@ Tap for the next character to be shifted, hold down for regular shift functional
|
||||||
|
|
||||||
## Layout
|
## Layout
|
||||||
|
|
||||||
![keyboard-layout](keyboard-layout.png)
|
![keyboard-layout](https://i.imgur.com/168aGmR.png)
|
||||||
|
|
Before Width: | Height: | Size: 294 KiB |
Before Width: | Height: | Size: 230 KiB |
|
@ -19,5 +19,5 @@ I came to this layout after several iterations. It is not the ultimate best ergo
|
||||||
|
|
||||||
Alternatively view the [graphical creator version](http://configure.ergodox-ez.com/keyboard_layouts/kmevwm/edit) but beware it is not the same due to the creator limitations.
|
Alternatively view the [graphical creator version](http://configure.ergodox-ez.com/keyboard_layouts/kmevwm/edit) but beware it is not the same due to the creator limitations.
|
||||||
|
|
||||||
![Default](colemak_programmer_001.jpg)
|
![Default](https://i.imgur.com/BCJEoKw.jpg)
|
||||||
![Default](colemak_programmer_002.jpg)
|
![Default](https://i.imgur.com/0P1jBph.jpg)
|
Before Width: | Height: | Size: 95 KiB |
Before Width: | Height: | Size: 379 KiB |
|
@ -16,7 +16,8 @@ The biggest flaw in standard QWERTY keyboards was that I always needed to perfor
|
||||||
|
|
||||||
Then I came across the ErgoDox EZ project, that allowed a full customization of its firmware, and a unique 2 parts design.
|
Then I came across the ErgoDox EZ project, that allowed a full customization of its firmware, and a unique 2 parts design.
|
||||||
|
|
||||||
![CSharpDev](csharp_dev_legend.png)
|
![CSharpDev](https://i.imgur.com/PkNqi7V.png)
|
||||||
|
![CSharpDev](https://i.imgur.com/0IcMgMf.png)
|
||||||
|
|
||||||
## Layout design principles
|
## Layout design principles
|
||||||
* No key combination required for the most common input characters ( (),[],{},<> ... )
|
* No key combination required for the most common input characters ( (),[],{},<> ... )
|
||||||
|
|
Before Width: | Height: | Size: 95 KiB |
Before Width: | Height: | Size: 78 KiB |
Before Width: | Height: | Size: 64 KiB |
Before Width: | Height: | Size: 72 KiB |
Before Width: | Height: | Size: 65 KiB |
|
@ -13,7 +13,7 @@ All layer images created using [keyboard-layout-editor](http://www.keyboard-layo
|
||||||
|
|
||||||
## Base layer
|
## Base layer
|
||||||
|
|
||||||
[![Base layer](images/deadcyclo-base-layout.png)](http://www.keyboard-layout-editor.com/#/gists/0321b18620180a3e46c498206eb65366)
|
[![Base layer](https://i.imgur.com/PGhP2jZ.png)](http://www.keyboard-layout-editor.com/#/gists/0321b18620180a3e46c498206eb65366)
|
||||||
|
|
||||||
The base layer here is marked with the us international alt-gr layout,
|
The base layer here is marked with the us international alt-gr layout,
|
||||||
including characters bound to what on an iso keyboard would be alt-gr
|
including characters bound to what on an iso keyboard would be alt-gr
|
||||||
|
@ -34,7 +34,7 @@ type in the unicode hex value, and hit enter.
|
||||||
|
|
||||||
## Layer 1 - Symbols and RGB
|
## Layer 1 - Symbols and RGB
|
||||||
|
|
||||||
[![Layer 1 - Symbols and RGB](images/deadcyclo-layer-1-symbols.png)](http://www.keyboard-layout-editor.com/#/gists/96714e198054c9115bafb5267cc6bc73)
|
[![Layer 1 - Symbols and RGB](https://i.imgur.com/SfkkU5D.png)](http://www.keyboard-layout-editor.com/#/gists/96714e198054c9115bafb5267cc6bc73)
|
||||||
|
|
||||||
The Symbols and RGB layer contains function keys, commonly used
|
The Symbols and RGB layer contains function keys, commonly used
|
||||||
symbols, a numpad and if you have the new Ergodox Ez shine keys for
|
symbols, a numpad and if you have the new Ergodox Ez shine keys for
|
||||||
|
@ -43,7 +43,7 @@ and a down key for easy scrolling. RGB controller keys are yellow.
|
||||||
|
|
||||||
## Layer 2 - Media, Mouse and Navigation
|
## Layer 2 - Media, Mouse and Navigation
|
||||||
|
|
||||||
[![Layer 2 - Media, Mouse and Navigation](images/deadcyclo-layer-2-media-and-mouse.png)](http://www.keyboard-layout-editor.com/#/gists/824759486e378bcec30784309a7e5731)
|
[![Layer 2 - Media, Mouse and Navigation](https://i.imgur.com/UwPHjCO.png)](http://www.keyboard-layout-editor.com/#/gists/824759486e378bcec30784309a7e5731)
|
||||||
|
|
||||||
The Media, Mouse and unicode layer contains special keys for moving
|
The Media, Mouse and unicode layer contains special keys for moving
|
||||||
the mouse and clicking on it with the keyboard. In addition it
|
the mouse and clicking on it with the keyboard. In addition it
|
||||||
|
@ -51,13 +51,13 @@ provides standard media control keys, and default arrow keys.
|
||||||
|
|
||||||
## Layer 3 - Unicode
|
## Layer 3 - Unicode
|
||||||
|
|
||||||
[![Layer 3 - Unicode](images/deadcyclo-layer-3-unicode.png)](http://www.keyboard-layout-editor.com/#/gists/67d9613dcd873c68693d11863d0fd289)
|
[![Layer 3 - Unicode](https://i.imgur.com/HRkeY8j.png)](http://www.keyboard-layout-editor.com/#/gists/67d9613dcd873c68693d11863d0fd289)
|
||||||
|
|
||||||
The unicode layer provides keys for directly typing unicode (utf-8)
|
The unicode layer provides keys for directly typing unicode (utf-8)
|
||||||
|
|
||||||
## Layer 4 - Unicode 2
|
## Layer 4 - Unicode 2
|
||||||
|
|
||||||
[![Layer 43 - Unicode](images/deadcyclo-layer-4-unicode-2.png)](http://www.keyboard-layout-editor.com/#/gists/7b2241110ab8311d9668a0798f3baf4a)
|
[![Layer 43 - Unicode](https://i.imgur.com/dyB459q.png)](http://www.keyboard-layout-editor.com/#/gists/7b2241110ab8311d9668a0798f3baf4a)
|
||||||
|
|
||||||
The unicode 2 layer provides keys for directly typing unicode (utf-8)
|
The unicode 2 layer provides keys for directly typing unicode (utf-8)
|
||||||
|
|
||||||
|
|
Before Width: | Height: | Size: 189 KiB |
|
@ -0,0 +1 @@
|
||||||
|
https://i.imgur.com/fKX0Zbs.png
|
Before Width: | Height: | Size: 252 KiB |