Merge branch 'master' into coderkun_neo2
1
.gitattributes
vendored
|
@ -91,3 +91,4 @@ GRAPHICS
|
||||||
|
|
||||||
# hex files
|
# hex files
|
||||||
*.hex binary
|
*.hex binary
|
||||||
|
*.eep binary
|
||||||
|
|
1
.gitignore
vendored
|
@ -29,3 +29,4 @@ CMakeLists.txt
|
||||||
.idea
|
.idea
|
||||||
.browse.VC.db*
|
.browse.VC.db*
|
||||||
*.stackdump
|
*.stackdump
|
||||||
|
util/Win_Check_Output.txt
|
||||||
|
|
3
.gitmodules
vendored
|
@ -7,3 +7,6 @@
|
||||||
[submodule "lib/ugfx"]
|
[submodule "lib/ugfx"]
|
||||||
path = lib/ugfx
|
path = lib/ugfx
|
||||||
url = https://bitbucket.org/Tectu/ugfx
|
url = https://bitbucket.org/Tectu/ugfx
|
||||||
|
[submodule "lib/googletest"]
|
||||||
|
path = lib/googletest
|
||||||
|
url = https://github.com/google/googletest
|
||||||
|
|
11
.travis.yml
|
@ -9,8 +9,11 @@ branches:
|
||||||
env:
|
env:
|
||||||
global:
|
global:
|
||||||
- secure: vBTSL34BDPxDilKUuTXqU4CJ26Pv5hogD2nghatkxSQkI1/jbdnLj/DQdPUrMJFDIY6TK3AltsBx72MaMsLQ1JO/Ou24IeHINHXzUC1FlS9yQa48cpxnhX5kzXNyGs3oa0qaFbvnr7RgYRWtmD52n4bIZuSuW+xpBv05x2OCizdT2ZonH33nATaHGFasxROm4qYZ241VfzcUv766V6RVHgL4x9V08warugs+RENVkfzxxwhk3NmkrISabze0gSVJLHBPHxroZC6EUcf/ocobcuDrCwFqtEt90i7pNIAFUE7gZsN2uE75LmpzAWin21G7lLPcPL2k4FJVd8an1HiP2WmscJU6U89fOfMb2viObnKcCzebozBCmKGtHEuXZo9FcReOx49AnQSpmESJGs+q2dL/FApkTjQiyT4J6O5dJpoww0/r57Wx0cmmqjETKBb5rSgXM51Etk3wO09mvcPHsEwrT7qH8r9XWdyCDoEn7FCLX3/LYnf/D4SmZ633YPl5gv3v9XEwxR5+04akjgnvWDSNIaDbWBdxHNb7l4pMc+WR1bwCyMyA7KXj0RrftEGOrm9ZRLe6BkbT4cycA+j77nbPOMcyZChliV9pPQos+4TOJoTzcK2L8yWVoY409aDNVuAjdP6Yum0R2maBGl/etLmIMpJC35C5/lZ+dUNjJAM=
|
- secure: vBTSL34BDPxDilKUuTXqU4CJ26Pv5hogD2nghatkxSQkI1/jbdnLj/DQdPUrMJFDIY6TK3AltsBx72MaMsLQ1JO/Ou24IeHINHXzUC1FlS9yQa48cpxnhX5kzXNyGs3oa0qaFbvnr7RgYRWtmD52n4bIZuSuW+xpBv05x2OCizdT2ZonH33nATaHGFasxROm4qYZ241VfzcUv766V6RVHgL4x9V08warugs+RENVkfzxxwhk3NmkrISabze0gSVJLHBPHxroZC6EUcf/ocobcuDrCwFqtEt90i7pNIAFUE7gZsN2uE75LmpzAWin21G7lLPcPL2k4FJVd8an1HiP2WmscJU6U89fOfMb2viObnKcCzebozBCmKGtHEuXZo9FcReOx49AnQSpmESJGs+q2dL/FApkTjQiyT4J6O5dJpoww0/r57Wx0cmmqjETKBb5rSgXM51Etk3wO09mvcPHsEwrT7qH8r9XWdyCDoEn7FCLX3/LYnf/D4SmZ633YPl5gv3v9XEwxR5+04akjgnvWDSNIaDbWBdxHNb7l4pMc+WR1bwCyMyA7KXj0RrftEGOrm9ZRLe6BkbT4cycA+j77nbPOMcyZChliV9pPQos+4TOJoTzcK2L8yWVoY409aDNVuAjdP6Yum0R2maBGl/etLmIMpJC35C5/lZ+dUNjJAM=
|
||||||
|
matrix:
|
||||||
|
- TARGET=all-keyboards AUTOGEN=true
|
||||||
|
- TARGET=test AUTOGEN=false
|
||||||
script:
|
script:
|
||||||
- make all-keyboards AUTOGEN=true
|
- make $TARGET AUTOGEN=$AUTOGEN
|
||||||
addons:
|
addons:
|
||||||
apt:
|
apt:
|
||||||
packages:
|
packages:
|
||||||
|
@ -21,4 +24,8 @@ addons:
|
||||||
- gcc-arm-none-eabi
|
- gcc-arm-none-eabi
|
||||||
- binutils-arm-none-eabi
|
- binutils-arm-none-eabi
|
||||||
- libnewlib-arm-none-eabi
|
- libnewlib-arm-none-eabi
|
||||||
after_success: bash util/travis_compiled_push.sh
|
- diffutils
|
||||||
|
after_success:
|
||||||
|
if [ "$AUTOGEN" == "true" ]; then
|
||||||
|
bash util/travis_compiled_push.sh;
|
||||||
|
fi
|
||||||
|
|
736
Makefile
|
@ -2,284 +2,518 @@ ifndef VERBOSE
|
||||||
.SILENT:
|
.SILENT:
|
||||||
endif
|
endif
|
||||||
|
|
||||||
.DEFAULT_GOAL := all
|
# Never run this makefile in parallel, as it could screw things up
|
||||||
|
# It won't affect the submakes, so you still get the speedup from specifying -jx
|
||||||
|
.NOTPARALLEL:
|
||||||
|
|
||||||
space := $(subst ,, )
|
# Allow the silent with lower caps to work the same way as upper caps
|
||||||
ESCAPED_ABS_PATH = $(subst $(space),_SPACE_,$(abspath $1))
|
ifdef silent
|
||||||
starting_makefile := $(call ESCAPED_ABS_PATH,$(firstword $(MAKEFILE_LIST)))
|
SILENT = $(silent)
|
||||||
mkfile_path := $(call ESCAPED_ABS_PATH,$(lastword $(MAKEFILE_LIST))))
|
|
||||||
abs_tmk_root := $(patsubst %/,%,$(dir $(mkfile_path)))
|
|
||||||
|
|
||||||
ifneq (,$(findstring /keyboards/,$(starting_makefile)))
|
|
||||||
possible_keyboard:=$(patsubst %/,%,$(dir $(patsubst $(abs_tmk_root)/keyboards/%,%,$(starting_makefile))))
|
|
||||||
ifneq (,$(findstring /keymaps/,$(possible_keyboard)))
|
|
||||||
KEYMAP_DIR:=$(lastword $(subst /keymaps/, ,$(possible_keyboard)))
|
|
||||||
KEYBOARD_DIR:=$(firstword $(subst /keymaps/, ,$(possible_keyboard)))
|
|
||||||
ifneq (,$(findstring /,$(KEYBOARD_DIR)))
|
|
||||||
# SUBPROJECT_DIR:=$(lastword $(subst /, ,$(KEYBOARD_DIR)))
|
|
||||||
# KEYBOARD_DIR:=$(firstword $(subst /, ,$(KEYBOARD_DIR)))
|
|
||||||
tmk_root = ../../..
|
|
||||||
else
|
|
||||||
tmk_root = ../../../..
|
|
||||||
endif
|
|
||||||
else
|
|
||||||
KEYMAP_DIR:=default
|
|
||||||
KEYBOARD_DIR:=$(possible_keyboard)
|
|
||||||
ifneq (,$(findstring /,$(KEYBOARD_DIR)))
|
|
||||||
# SUBPROJECT_DIR:=$(lastword $(subst /, ,$(KEYBOARD_DIR)))
|
|
||||||
# KEYBOARD_DIR:=$(firstword $(subst /, ,$(KEYBOARD_DIR)))
|
|
||||||
tmk_root = ../../..
|
|
||||||
else
|
|
||||||
tmk_root = ../..
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
else
|
|
||||||
tmk_root = .
|
|
||||||
endif
|
endif
|
||||||
# $(info $(KEYBOARD_DIR))
|
|
||||||
# $(info $(KEYMAP_DIR))
|
|
||||||
# $(info $(SUBPROJECT_DIR))
|
|
||||||
|
|
||||||
# Directory common source filess exist
|
ifdef SILENT
|
||||||
TOP_DIR = $(tmk_root)
|
SUB_IS_SILENT := $(SILENT)
|
||||||
TMK_DIR = tmk_core
|
endif
|
||||||
TMK_PATH = $(TOP_DIR)/$(TMK_DIR)
|
|
||||||
LIB_PATH = $(TOP_DIR)/lib
|
|
||||||
|
|
||||||
QUANTUM_DIR = quantum
|
# We need to make sure that silent is always turned off at the top level
|
||||||
QUANTUM_PATH = $(TOP_DIR)/$(QUANTUM_DIR)
|
# Otherwise the [OK], [ERROR] and [WARN] messags won't be displayed correctly
|
||||||
|
override SILENT := false
|
||||||
|
|
||||||
|
ON_ERROR := error_occured=1
|
||||||
|
|
||||||
|
STARTING_MAKEFILE := $(firstword $(MAKEFILE_LIST))
|
||||||
|
ROOT_MAKEFILE := $(lastword $(MAKEFILE_LIST))
|
||||||
|
ROOT_DIR := $(dir $(ROOT_MAKEFILE))
|
||||||
|
ifeq ($(ROOT_DIR),)
|
||||||
|
ROOT_DIR := .
|
||||||
|
endif
|
||||||
|
ABS_STARTING_MAKEFILE := $(abspath $(STARTING_MAKEFILE))
|
||||||
|
ABS_ROOT_MAKEFILE := $(abspath $(ROOT_MAKEFILE))
|
||||||
|
ABS_STARTING_DIR := $(dir $(ABS_STARTING_MAKEFILE))
|
||||||
|
ABS_ROOT_DIR := $(dir $(ABS_ROOT_MAKEFILE))
|
||||||
|
STARTING_DIR := $(subst $(ABS_ROOT_DIR),,$(ABS_STARTING_DIR))
|
||||||
|
TEST_DIR := $(ROOT_DIR)/.build/test
|
||||||
|
|
||||||
|
MAKEFILE_INCLUDED=yes
|
||||||
|
|
||||||
|
# Helper function to process the newt element of a space separated path
|
||||||
|
# It works a bit like the traditional functional head tail
|
||||||
|
# so the CURRENT_PATH_ELEMENT will beome the new head
|
||||||
|
# and the PATH_ELEMENTS are the rest that are still unprocessed
|
||||||
|
define NEXT_PATH_ELEMENT
|
||||||
|
$$(eval CURRENT_PATH_ELEMENT := $$(firstword $$(PATH_ELEMENTS)))
|
||||||
|
$$(eval PATH_ELEMENTS := $$(wordlist 2,9999,$$(PATH_ELEMENTS)))
|
||||||
|
endef
|
||||||
|
|
||||||
|
# We change the / to spaces so that we more easily can work with the elements
|
||||||
|
# separately
|
||||||
|
PATH_ELEMENTS := $(subst /, ,$(STARTING_DIR))
|
||||||
|
# Initialize the path elements list for further processing
|
||||||
|
$(eval $(call NEXT_PATH_ELEMENT))
|
||||||
|
|
||||||
|
# This function sets the KEYBOARD; KEYMAP and SUBPROJECT to the correct
|
||||||
|
# variables depending on which directory you stand in.
|
||||||
|
# It's really a very simple if else chain, if you squint enough,
|
||||||
|
# but the makefile syntax makes it very verbose.
|
||||||
|
# If we are in a subfolder of keyboards
|
||||||
|
ifeq ($(CURRENT_PATH_ELEMENT),keyboards)
|
||||||
|
$(eval $(call NEXT_PATH_ELEMENT))
|
||||||
|
KEYBOARD := $(CURRENT_PATH_ELEMENT)
|
||||||
|
$(eval $(call NEXT_PATH_ELEMENT))
|
||||||
|
# If we are in a subfolder of keymaps, or in other words in a keymap
|
||||||
|
# folder
|
||||||
|
ifeq ($(CURRENT_PATH_ELEMENT),keymaps)
|
||||||
|
$(eval $(call NEXT_PATH_ELEMENT))
|
||||||
|
KEYMAP := $(CURRENT_PATH_ELEMENT)
|
||||||
|
# else if we are not in the keyboard folder itself
|
||||||
|
else ifneq ($(CURRENT_PATH_ELEMENT),)
|
||||||
|
# the we can assume it's a subproject, as no other folders
|
||||||
|
# should have make files in them
|
||||||
|
SUBPROJECT := $(CURRENT_PATH_ELEMENT)
|
||||||
|
$(eval $(call NEXT_PATH_ELEMENT))
|
||||||
|
# if we are inside a keymap folder of a subproject
|
||||||
|
ifeq ($(CURRENT_PATH_ELEMENT),keymaps)
|
||||||
|
$(eval $(call NEXT_PATH_ELEMENT))
|
||||||
|
KEYMAP := $(CURRENT_PATH_ELEMENT)
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
|
# Only consider folders with makefiles, to prevent errors in case there are extra folders
|
||||||
|
KEYBOARDS := $(notdir $(patsubst %/Makefile,%,$(wildcard $(ROOT_DIR)/keyboards/*/Makefile)))
|
||||||
|
|
||||||
|
#Compability with the old make variables, anything you specify directly on the command line
|
||||||
|
# always overrides the detected folders
|
||||||
ifdef keyboard
|
ifdef keyboard
|
||||||
KEYBOARD ?= $(keyboard)
|
KEYBOARD := $(keyboard)
|
||||||
endif
|
endif
|
||||||
ifdef KEYBOARD_DIR
|
|
||||||
KEYBOARD ?= $(KEYBOARD_DIR)
|
|
||||||
endif
|
|
||||||
ifndef KEYBOARD
|
|
||||||
KEYBOARD=planck
|
|
||||||
endif
|
|
||||||
|
|
||||||
MASTER ?= left
|
|
||||||
ifdef master
|
|
||||||
MASTER = $(master)
|
|
||||||
endif
|
|
||||||
|
|
||||||
|
|
||||||
# converts things to keyboards/subproject
|
|
||||||
ifneq (,$(findstring /,$(KEYBOARD)))
|
|
||||||
TEMP:=$(KEYBOARD)
|
|
||||||
KEYBOARD:=$(firstword $(subst /, ,$(TEMP)))
|
|
||||||
SUBPROJECT:=$(lastword $(subst /, ,$(TEMP)))
|
|
||||||
endif
|
|
||||||
|
|
||||||
KEYBOARD_PATH = $(TOP_DIR)/keyboards/$(KEYBOARD)
|
|
||||||
|
|
||||||
ifdef sub
|
ifdef sub
|
||||||
SUBPROJECT=$(sub)
|
SUBPROJECT := $(sub)
|
||||||
endif
|
endif
|
||||||
ifdef subproject
|
ifdef subproject
|
||||||
SUBPROJECT=$(subproject)
|
SUBPROJECT := $(subproject)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
ifneq ("$(wildcard $(KEYBOARD_PATH)/$(KEYBOARD).c)","")
|
|
||||||
KEYBOARD_FILE = keyboards/$(KEYBOARD)/$(KEYBOARD).c
|
|
||||||
ifneq ($(call ESCAPED_ABS_PATH,$(KEYBOARD_PATH)/Makefile),$(starting_makefile))
|
|
||||||
-include $(KEYBOARD_PATH)/Makefile
|
|
||||||
endif
|
|
||||||
else
|
|
||||||
$(error "$(KEYBOARD_PATH)/$(KEYBOARD).c" does not exist)
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifdef SUBPROJECT_DEFAULT
|
|
||||||
SUBPROJECT?=$(SUBPROJECT_DEFAULT)
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifdef SUBPROJECT
|
|
||||||
SUBPROJECT_PATH = $(TOP_DIR)/keyboards/$(KEYBOARD)/$(SUBPROJECT)
|
|
||||||
ifneq ("$(wildcard $(SUBPROJECT_PATH)/$(SUBPROJECT).c)","")
|
|
||||||
OPT_DEFS += -DSUBPROJECT_$(SUBPROJECT)
|
|
||||||
SUBPROJECT_FILE = keyboards/$(KEYBOARD)/$(SUBPROJECT)/$(SUBPROJECT).c
|
|
||||||
ifneq ($(call ESCAPED_ABS_PATH,$(SUBPROJECT_PATH)/Makefile),$(starting_makefile))
|
|
||||||
-include $(SUBPROJECT_PATH)/Makefile
|
|
||||||
endif
|
|
||||||
else
|
|
||||||
$(error "$(SUBPROJECT_PATH)/$(SUBPROJECT).c" does not exist)
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifdef keymap
|
ifdef keymap
|
||||||
KEYMAP ?= $(keymap)
|
KEYMAP := $(keymap)
|
||||||
endif
|
|
||||||
ifdef KEYMAP_DIR
|
|
||||||
KEYMAP ?= $(KEYMAP_DIR)
|
|
||||||
endif
|
|
||||||
ifndef KEYMAP
|
|
||||||
KEYMAP = default
|
|
||||||
endif
|
|
||||||
KEYMAP_PATH = $(KEYBOARD_PATH)/keymaps/$(KEYMAP)
|
|
||||||
ifneq ("$(wildcard $(KEYMAP_PATH)/keymap.c)","")
|
|
||||||
KEYMAP_FILE = keyboards/$(KEYBOARD)/keymaps/$(KEYMAP)/keymap.c
|
|
||||||
ifneq ($(call ESCAPED_ABS_PATH,$(KEYMAP_PATH)/Makefile),$(starting_makefile))
|
|
||||||
-include $(KEYMAP_PATH)/Makefile
|
|
||||||
endif
|
|
||||||
else
|
|
||||||
ifeq ("$(wildcard $(SUBPROJECT_PATH)/keymaps/$(KEYMAP)/keymap.c)","")
|
|
||||||
$(error "$(KEYMAP_PATH)/keymap.c" does not exist)
|
|
||||||
else
|
|
||||||
KEYMAP_PATH = $(SUBPROJECT_PATH)/keymaps/$(KEYMAP)
|
|
||||||
KEYMAP_FILE = keyboards/$(KEYBOARD)/$(SUBPROJECT)/keymaps/$(KEYMAP)/keymap.c
|
|
||||||
ifneq ($(call ESCAPED_ABS_PATH,$(KEYMAP_PATH)/Makefile),$(starting_makefile))
|
|
||||||
-include $(KEYMAP_PATH)/Makefile
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
ifdef SUBPROJECT
|
# Uncomment these for debugging
|
||||||
TARGET ?= $(KEYBOARD)_$(SUBPROJECT)_$(KEYMAP)
|
#$(info Keyboard: $(KEYBOARD))
|
||||||
else
|
#$(info Keymap: $(KEYMAP))
|
||||||
TARGET ?= $(KEYBOARD)_$(KEYMAP)
|
#$(info Subproject: $(SUBPROJECT))
|
||||||
|
#$(info Keyboards: $(KEYBOARDS))
|
||||||
|
|
||||||
|
|
||||||
|
# Set the default goal depening on where we are running make from
|
||||||
|
# this handles the case where you run make without any arguments
|
||||||
|
.DEFAULT_GOAL := all
|
||||||
|
ifneq ($(KEYMAP),)
|
||||||
|
ifeq ($(SUBPROJECT),)
|
||||||
|
# Inside a keymap folder, just build the keymap, with the
|
||||||
|
# default subproject
|
||||||
|
.DEFAULT_GOAL := $(KEYBOARD)-$(KEYMAP)
|
||||||
|
else
|
||||||
|
# Inside a subproject keyamp folder, build the keymap
|
||||||
|
# for that subproject
|
||||||
|
.DEFAULT_GOAL := $(KEYBOARD)-$(SUBPROJECT)-$(KEYMAP)
|
||||||
|
endif
|
||||||
|
else ifneq ($(SUBPROJECT),)
|
||||||
|
# Inside a subproject folder, build all keymaps for that subproject
|
||||||
|
.DEFAULT_GOAL := $(KEYBOARD)-$(SUBPROJECT)-allkm
|
||||||
|
else ifneq ($(KEYBOARD),)
|
||||||
|
# Inside a keyboard folder, build all keymaps for all subprojects
|
||||||
|
# Note that this is different from the old behaviour, which would
|
||||||
|
# build only the default keymap of the default keyboard
|
||||||
|
.DEFAULT_GOAL := $(KEYBOARD)-allsp-allkm
|
||||||
endif
|
endif
|
||||||
|
|
||||||
BUILD_DIR = $(TOP_DIR)/.build
|
|
||||||
|
|
||||||
# Object files directory
|
# Compare the start of the RULE variable with the first argument($1)
|
||||||
# To put object files in current directory, use a dot (.), do NOT make
|
# If the rules equals $1 or starts with $1-, RULE_FOUND is set to true
|
||||||
# this an empty or blank macro!
|
# and $1 is removed from the RULE variable
|
||||||
OBJDIR = $(BUILD_DIR)/obj_$(TARGET)
|
# Otherwise the RULE_FOUND variable is set to false, and RULE left as it was
|
||||||
|
# The function is a bit tricky, since there's no built in $(startswith) function
|
||||||
|
define COMPARE_AND_REMOVE_FROM_RULE_HELPER
|
||||||
|
ifeq ($1,$$(RULE))
|
||||||
|
RULE:=
|
||||||
|
RULE_FOUND := true
|
||||||
|
else
|
||||||
|
STARTDASH_REMOVED=$$(subst START$1-,,START$$(RULE))
|
||||||
|
ifneq ($$(STARTDASH_REMOVED),START$$(RULE))
|
||||||
|
RULE_FOUND := true
|
||||||
|
RULE := $$(STARTDASH_REMOVED)
|
||||||
|
else
|
||||||
|
RULE_FOUND := false
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
endef
|
||||||
|
|
||||||
|
# This makes it easier to call COMPARE_AND_REMOVE_FROM_RULE, since it makes it behave like
|
||||||
|
# a function that returns the value
|
||||||
|
COMPARE_AND_REMOVE_FROM_RULE = $(eval $(call COMPARE_AND_REMOVE_FROM_RULE_HELPER,$1))$(RULE_FOUND)
|
||||||
|
|
||||||
|
|
||||||
|
# Recursively try to find a match for the start of the rule to be checked
|
||||||
|
# $1 The list to be checked
|
||||||
|
# If a match is found, then RULE_FOUND is set to true
|
||||||
|
# and MATCHED_ITEM to the item that was matched
|
||||||
|
define TRY_TO_MATCH_RULE_FROM_LIST_HELPER3
|
||||||
|
ifneq ($1,)
|
||||||
|
ifeq ($$(call COMPARE_AND_REMOVE_FROM_RULE,$$(firstword $1)),true)
|
||||||
|
MATCHED_ITEM := $$(firstword $1)
|
||||||
|
else
|
||||||
|
$$(eval $$(call TRY_TO_MATCH_RULE_FROM_LIST_HELPER3,$$(wordlist 2,9999,$1)))
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
endef
|
||||||
|
|
||||||
ifneq ("$(wildcard $(KEYMAP_PATH)/config.h)","")
|
# A recursive helper function for finding the longest match
|
||||||
CONFIG_H = $(KEYMAP_PATH)/config.h
|
# $1 The list to be checed
|
||||||
else
|
# It works by always removing the currently matched item from the list
|
||||||
CONFIG_H = $(KEYBOARD_PATH)/config.h
|
# and call itself recursively, until a match is found
|
||||||
ifdef SUBPROJECT
|
define TRY_TO_MATCH_RULE_FROM_LIST_HELPER2
|
||||||
ifneq ("$(wildcard $(SUBPROJECT_PATH)/$(SUBPROJECT).c)","")
|
# Stop the recursion when the list is empty
|
||||||
CONFIG_H = $(SUBPROJECT_PATH)/config.h
|
ifneq ($1,)
|
||||||
endif
|
RULE_BEFORE := $$(RULE)
|
||||||
endif
|
$$(eval $$(call TRY_TO_MATCH_RULE_FROM_LIST_HELPER3,$1))
|
||||||
endif
|
# If a match is found in the current list, otherwise just return what we had before
|
||||||
|
ifeq ($$(RULE_FOUND),true)
|
||||||
# # project specific files
|
# Save the best match so far and call itself recursivel
|
||||||
SRC += $(KEYBOARD_FILE) \
|
BEST_MATCH := $$(MATCHED_ITEM)
|
||||||
$(KEYMAP_FILE) \
|
BEST_MATCH_RULE := $$(RULE)
|
||||||
$(QUANTUM_DIR)/quantum.c \
|
RULE_FOUND := false
|
||||||
$(QUANTUM_DIR)/keymap_common.c \
|
RULE := $$(RULE_BEFORE)
|
||||||
$(QUANTUM_DIR)/keycode_config.c \
|
$$(eval $$(call TRY_TO_MATCH_RULE_FROM_LIST_HELPER2,$$(filter-out $$(MATCHED_ITEM),$1)))
|
||||||
$(QUANTUM_DIR)/process_keycode/process_leader.c
|
endif
|
||||||
|
endif
|
||||||
ifdef SUBPROJECT
|
endef
|
||||||
SRC += $(SUBPROJECT_FILE)
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifdef SUBPROJECT
|
|
||||||
SRC += $(SUBPROJECT_FILE)
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifdef SUBPROJECT
|
|
||||||
SRC += $(SUBPROJECT_FILE)
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifndef CUSTOM_MATRIX
|
|
||||||
SRC += $(QUANTUM_DIR)/matrix.c
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifeq ($(strip $(MIDI_ENABLE)), yes)
|
|
||||||
OPT_DEFS += -DMIDI_ENABLE
|
|
||||||
SRC += $(QUANTUM_DIR)/process_keycode/process_midi.c
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifeq ($(strip $(VIRTSER_ENABLE)), yes)
|
|
||||||
OPT_DEFS += -DVIRTSER_ENABLE
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifeq ($(strip $(AUDIO_ENABLE)), yes)
|
|
||||||
OPT_DEFS += -DAUDIO_ENABLE
|
|
||||||
SRC += $(QUANTUM_DIR)/process_keycode/process_music.c
|
|
||||||
SRC += $(QUANTUM_DIR)/audio/audio.c
|
|
||||||
SRC += $(QUANTUM_DIR)/audio/voices.c
|
|
||||||
SRC += $(QUANTUM_DIR)/audio/luts.c
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifeq ($(strip $(UCIS_ENABLE)), yes)
|
|
||||||
OPT_DEFS += -DUCIS_ENABLE
|
|
||||||
UNICODE_ENABLE = yes
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifeq ($(strip $(UNICODE_ENABLE)), yes)
|
|
||||||
OPT_DEFS += -DUNICODE_ENABLE
|
|
||||||
SRC += $(QUANTUM_DIR)/process_keycode/process_unicode.c
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifeq ($(strip $(RGBLIGHT_ENABLE)), yes)
|
|
||||||
OPT_DEFS += -DRGBLIGHT_ENABLE
|
|
||||||
SRC += $(QUANTUM_DIR)/light_ws2812.c
|
|
||||||
SRC += $(QUANTUM_DIR)/rgblight.c
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifeq ($(strip $(TAP_DANCE_ENABLE)), yes)
|
|
||||||
OPT_DEFS += -DTAP_DANCE_ENABLE
|
|
||||||
SRC += $(QUANTUM_DIR)/process_keycode/process_tap_dance.c
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifeq ($(strip $(SERIAL_LINK_ENABLE)), yes)
|
|
||||||
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)
|
|
||||||
SRC += $(patsubst $(QUANTUM_PATH)/%,%,$(SERIAL_SRC))
|
|
||||||
OPT_DEFS += -DSERIAL_LINK_ENABLE
|
|
||||||
VAPTH += $(SERIAL_PATH)
|
|
||||||
endif
|
|
||||||
|
|
||||||
# Optimize size but this may cause error "relocation truncated to fit"
|
|
||||||
#EXTRALDFLAGS = -Wl,--relax
|
|
||||||
|
|
||||||
# Search Path
|
|
||||||
VPATH += $(KEYMAP_PATH)
|
|
||||||
ifdef SUBPROJECT
|
|
||||||
VPATH += $(SUBPROJECT_PATH)
|
|
||||||
endif
|
|
||||||
VPATH += $(KEYBOARD_PATH)
|
|
||||||
VPATH += $(TOP_DIR)
|
|
||||||
VPATH += $(TMK_PATH)
|
|
||||||
VPATH += $(QUANTUM_PATH)
|
|
||||||
VPATH += $(QUANTUM_PATH)/keymap_extras
|
|
||||||
VPATH += $(QUANTUM_PATH)/audio
|
|
||||||
VPATH += $(QUANTUM_PATH)/process_keycode
|
|
||||||
|
|
||||||
|
|
||||||
# We can assume a ChibiOS target When MCU_FAMILY is defined, since it's not used for LUFA
|
# Recursively try to find the longest match for the start of the rule to be checked
|
||||||
ifdef MCU_FAMILY
|
# $1 The list to be checked
|
||||||
PLATFORM=CHIBIOS
|
# If a match is found, then RULE_FOUND is set to true
|
||||||
else
|
# and MATCHED_ITEM to the item that was matched
|
||||||
PLATFORM=AVR
|
define TRY_TO_MATCH_RULE_FROM_LIST_HELPER
|
||||||
endif
|
BEST_MATCH :=
|
||||||
|
$$(eval $$(call TRY_TO_MATCH_RULE_FROM_LIST_HELPER2,$1))
|
||||||
|
ifneq ($$(BEST_MATCH),)
|
||||||
|
RULE_FOUND := true
|
||||||
|
RULE := $$(BEST_MATCH_RULE)
|
||||||
|
MATCHED_ITEM := $$(BEST_MATCH)
|
||||||
|
else
|
||||||
|
RULE_FOUND := false
|
||||||
|
MATCHED_ITEM :=
|
||||||
|
endif
|
||||||
|
endef
|
||||||
|
|
||||||
include $(TMK_PATH)/common.mk
|
# Make it easier to call TRY_TO_MATCH_RULE_FROM_LIST
|
||||||
ifeq ($(PLATFORM),AVR)
|
TRY_TO_MATCH_RULE_FROM_LIST = $(eval $(call TRY_TO_MATCH_RULE_FROM_LIST_HELPER,$1))$(RULE_FOUND)
|
||||||
include $(TMK_PATH)/protocol/lufa.mk
|
|
||||||
include $(TMK_PATH)/avr.mk
|
|
||||||
else ifeq ($(PLATFORM),CHIBIOS)
|
|
||||||
include $(TMK_PATH)/protocol/chibios.mk
|
|
||||||
include $(TMK_PATH)/chibios.mk
|
|
||||||
OPT_OS = chibios
|
|
||||||
else
|
|
||||||
$(error Unknown platform)
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifeq ($(strip $(VISUALIZER_ENABLE)), yes)
|
define ALL_IN_LIST_LOOP
|
||||||
VISUALIZER_DIR = $(QUANTUM_DIR)/visualizer
|
OLD_RULE$1 := $$(RULE)
|
||||||
VISUALIZER_PATH = $(QUANTUM_PATH)/visualizer
|
$$(eval $$(call $1,$$(ITEM$1)))
|
||||||
include $(VISUALIZER_PATH)/visualizer.mk
|
RULE := $$(OLD_RULE$1)
|
||||||
endif
|
endef
|
||||||
|
|
||||||
include $(TMK_PATH)/rules.mk
|
define PARSE_ALL_IN_LIST
|
||||||
|
$$(foreach ITEM$1,$2,$$(eval $$(call ALL_IN_LIST_LOOP,$1)))
|
||||||
|
endef
|
||||||
|
|
||||||
|
# The entry point for rule parsing
|
||||||
|
# parses a rule in the format <keyboard>-<subproject>-<keymap>-<target>
|
||||||
|
# but this particular function only deals with the first <keyboard> part
|
||||||
|
define PARSE_RULE
|
||||||
|
RULE := $1
|
||||||
|
COMMANDS :=
|
||||||
|
# If the rule starts with allkb, then continue the parsing from
|
||||||
|
# PARSE_ALL_KEYBOARDS
|
||||||
|
ifeq ($$(call COMPARE_AND_REMOVE_FROM_RULE,allkb),true)
|
||||||
|
$$(eval $$(call PARSE_ALL_KEYBOARDS))
|
||||||
|
else ifeq ($$(call COMPARE_AND_REMOVE_FROM_RULE,test),true)
|
||||||
|
$$(eval $$(call PARSE_TEST))
|
||||||
|
# If the rule starts with the name of a known keyboard, then continue
|
||||||
|
# the parsing from PARSE_KEYBOARD
|
||||||
|
else ifeq ($$(call TRY_TO_MATCH_RULE_FROM_LIST,$$(KEYBOARDS)),true)
|
||||||
|
$$(eval $$(call PARSE_KEYBOARD,$$(MATCHED_ITEM)))
|
||||||
|
# Otherwise use the KEYBOARD variable, which is determined either by
|
||||||
|
# the current directory you run make from, or passed in as an argument
|
||||||
|
else ifneq ($$(KEYBOARD),)
|
||||||
|
$$(eval $$(call PARSE_KEYBOARD,$$(KEYBOARD)))
|
||||||
|
else
|
||||||
|
$$(info make: *** No rule to make target '$1'. Stop.)
|
||||||
|
# Notice the tab instead of spaces below!
|
||||||
|
exit 1
|
||||||
|
endif
|
||||||
|
endef
|
||||||
|
|
||||||
|
# $1 = Keyboard
|
||||||
|
# Parses a rule in the format <subproject>-<keymap>-<target>
|
||||||
|
# the keyboard is already known when entering this function
|
||||||
|
define PARSE_KEYBOARD
|
||||||
|
CURRENT_KB := $1
|
||||||
|
# A subproject is any keyboard subfolder with a makefile
|
||||||
|
SUBPROJECTS := $$(notdir $$(patsubst %/Makefile,%,$$(wildcard $(ROOT_DIR)/keyboards/$$(CURRENT_KB)/*/Makefile)))
|
||||||
|
# if the rule starts with allsp, then continue with looping over all subprojects
|
||||||
|
ifeq ($$(call COMPARE_AND_REMOVE_FROM_RULE,allsp),true)
|
||||||
|
$$(eval $$(call PARSE_ALL_SUBPROJECTS))
|
||||||
|
# A special case for matching the defaultsp (default subproject)
|
||||||
|
else ifeq ($$(call COMPARE_AND_REMOVE_FROM_RULE,defaultsp),true)
|
||||||
|
$$(eval $$(call PARSE_SUBPROJECT,defaultsp))
|
||||||
|
# If the rule starts with the name of a known subproject
|
||||||
|
else ifeq ($$(call TRY_TO_MATCH_RULE_FROM_LIST,$$(SUBPROJECTS)),true)
|
||||||
|
$$(eval $$(call PARSE_SUBPROJECT,$$(MATCHED_ITEM)))
|
||||||
|
# Try to use the SUBPROJECT variable, which is either determined by the
|
||||||
|
# directory which invoked make, or passed as an argument to make
|
||||||
|
else ifneq ($$(SUBPROJECT),)
|
||||||
|
$$(eval $$(call PARSE_SUBPROJECT,$$(SUBPROJECT)))
|
||||||
|
# If there's no matching subproject, we assume it's the default
|
||||||
|
# This will allow you to leave the subproject part of the target out
|
||||||
|
else
|
||||||
|
$$(eval $$(call PARSE_SUBPROJECT,))
|
||||||
|
endif
|
||||||
|
endef
|
||||||
|
|
||||||
|
# if we are going to compile all keyboards, match the rest of the rule
|
||||||
|
# for each of them
|
||||||
|
define PARSE_ALL_KEYBOARDS
|
||||||
|
$$(eval $$(call PARSE_ALL_IN_LIST,PARSE_KEYBOARD,$(KEYBOARDS)))
|
||||||
|
endef
|
||||||
|
|
||||||
|
# $1 Subproject
|
||||||
|
# When entering this, the keyboard and subproject are known, so now we need
|
||||||
|
# to determine which keymaps are going to get compiled
|
||||||
|
define PARSE_SUBPROJECT
|
||||||
|
# If we want to compile the default subproject, then we need to
|
||||||
|
# include the correct makefile to determine the actual name of it
|
||||||
|
CURRENT_SP := $1
|
||||||
|
ifeq ($$(CURRENT_SP),)
|
||||||
|
CURRENT_SP := defaultsp
|
||||||
|
endif
|
||||||
|
ifeq ($$(CURRENT_SP),defaultsp)
|
||||||
|
SUBPROJECT_DEFAULT=
|
||||||
|
$$(eval include $(ROOT_DIR)/keyboards/$$(CURRENT_KB)/Makefile)
|
||||||
|
CURRENT_SP := $$(SUBPROJECT_DEFAULT)
|
||||||
|
endif
|
||||||
|
# If current subproject is empty (the default was not defined), and we have a list of subproject
|
||||||
|
# then make all of them
|
||||||
|
ifeq ($$(CURRENT_SP),)
|
||||||
|
ifneq ($$(SUBPROJECTS),)
|
||||||
|
CURRENT_SP := allsp
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
# The special allsp is handled later
|
||||||
|
ifneq ($$(CURRENT_SP),allsp)
|
||||||
|
# get a list of all keymaps
|
||||||
|
KEYMAPS := $$(notdir $$(patsubst %/.,%,$$(wildcard $(ROOT_DIR)/keyboards/$$(CURRENT_KB)/keymaps/*/.)))
|
||||||
|
ifneq ($$(CURRENT_SP),)
|
||||||
|
# if the subproject is defined, then also look for keymaps inside the subproject folder
|
||||||
|
SP_KEYMAPS := $$(notdir $$(patsubst %/.,%,$$(wildcard $(ROOT_DIR)/keyboards/$$(CURRENT_KB)/$$(CURRENT_SP)/keymaps/*/.)))
|
||||||
|
KEYMAPS := $$(sort $$(KEYMAPS) $$(SP_KEYMAPS))
|
||||||
|
endif
|
||||||
|
# if the rule after removing the start of it is empty (we haven't specified a kemap or target)
|
||||||
|
# compile all the keymaps
|
||||||
|
ifeq ($$(RULE),)
|
||||||
|
$$(eval $$(call PARSE_ALL_KEYMAPS))
|
||||||
|
# The same if allkm was specified
|
||||||
|
else ifeq ($$(call COMPARE_AND_REMOVE_FROM_RULE,allkm),true)
|
||||||
|
$$(eval $$(call PARSE_ALL_KEYMAPS))
|
||||||
|
# Try to match the specified keyamp with the list of known keymaps
|
||||||
|
else ifeq ($$(call TRY_TO_MATCH_RULE_FROM_LIST,$$(KEYMAPS)),true)
|
||||||
|
$$(eval $$(call PARSE_KEYMAP,$$(MATCHED_ITEM)))
|
||||||
|
# Otherwise try to match the keymap from the current folder, or arguments to the make command
|
||||||
|
else ifneq ($$(KEYMAP),)
|
||||||
|
$$(eval $$(call PARSE_KEYMAP,$$(KEYMAP)))
|
||||||
|
# No matching keymap found, so we assume that the rest of the rule is the target
|
||||||
|
# If we haven't been able to parse out a subproject, then make all of them
|
||||||
|
# This is consistent with running make without any arguments from the keyboard
|
||||||
|
# folder
|
||||||
|
else ifeq ($1,)
|
||||||
|
$$(eval $$(call PARSE_ALL_SUBPROJECTS))
|
||||||
|
# Otherwise, make all keymaps, again this is consistent with how it works without
|
||||||
|
# any arguments
|
||||||
|
else
|
||||||
|
$$(eval $$(call PARSE_ALL_KEYMAPS))
|
||||||
|
endif
|
||||||
|
else
|
||||||
|
# As earlier mentione,d when allsb is specified, we call our self recursively
|
||||||
|
# for all of the subprojects
|
||||||
|
$$(eval $$(call PARSE_ALL_IN_LIST,PARSE_SUBPROJECT,$(SUBPROJECTS)))
|
||||||
|
endif
|
||||||
|
endef
|
||||||
|
|
||||||
|
# If we want to parse all subprojects, but the keyboard doesn't have any,
|
||||||
|
# then use defaultsp instead
|
||||||
|
define PARSE_ALL_SUBPROJECTS
|
||||||
|
ifeq ($$(SUBPROJECTS),)
|
||||||
|
$$(eval $$(call PARSE_SUBPROJECT,defaultsp))
|
||||||
|
else
|
||||||
|
$$(eval $$(call PARSE_ALL_IN_LIST,PARSE_SUBPROJECT,$$(SUBPROJECTS)))
|
||||||
|
endif
|
||||||
|
endef
|
||||||
|
|
||||||
|
# $1 Keymap
|
||||||
|
# This is the meat of compiling a keyboard, when entering this, everything is known
|
||||||
|
# keyboard, subproject, and keymap
|
||||||
|
# Note that we are not directly calling the command here, but instead building a list,
|
||||||
|
# which will later be processed
|
||||||
|
define PARSE_KEYMAP
|
||||||
|
CURRENT_KM = $1
|
||||||
|
# The rest of the rule is the target
|
||||||
|
# Remove the leading "-" from the target, as it acts as a separator
|
||||||
|
MAKE_TARGET := $$(patsubst -%,%,$$(RULE))
|
||||||
|
# We need to generate an unique indentifer to append to the COMMANDS list
|
||||||
|
COMMAND := COMMAND_KEYBOARD_$$(CURRENT_KB)_SUBPROJECT_$(CURRENT_SP)_KEYMAP_$$(CURRENT_KM)
|
||||||
|
# If we are compiling a keyboard without a subproject, we want to display just the name
|
||||||
|
# of the keyboard, otherwise keyboard/subproject
|
||||||
|
ifeq ($$(CURRENT_SP),)
|
||||||
|
KB_SP := $(CURRENT_KB)
|
||||||
|
else
|
||||||
|
KB_SP := $(CURRENT_KB)/$$(CURRENT_SP)
|
||||||
|
endif
|
||||||
|
# Format it in bold
|
||||||
|
KB_SP := $(BOLD)$$(KB_SP)$(NO_COLOR)
|
||||||
|
# Specify the variables that we are passing forward to submake
|
||||||
|
MAKE_VARS := KEYBOARD=$$(CURRENT_KB) SUBPROJECT=$$(CURRENT_SP) KEYMAP=$$(CURRENT_KM)
|
||||||
|
# And the first part of the make command
|
||||||
|
MAKE_CMD := $$(MAKE) -r -R -C $(ROOT_DIR) -f build_keyboard.mk $$(MAKE_TARGET)
|
||||||
|
# The message to display
|
||||||
|
MAKE_MSG := $$(MSG_MAKE_KB)
|
||||||
|
# We run the command differently, depending on if we want more output or not
|
||||||
|
# The true version for silent output and the false version otherwise
|
||||||
|
$$(eval $$(call BUILD))
|
||||||
|
endef
|
||||||
|
|
||||||
|
define BUILD
|
||||||
|
MAKE_VARS += VERBOSE=$(VERBOSE) COLOR=$(COLOR)
|
||||||
|
COMMANDS += $$(COMMAND)
|
||||||
|
COMMAND_true_$$(COMMAND) := \
|
||||||
|
printf "$$(MAKE_MSG)" | \
|
||||||
|
$$(MAKE_MSG_FORMAT); \
|
||||||
|
LOG=$$$$($$(MAKE_CMD) $$(MAKE_VARS) SILENT=true 2>&1) ; \
|
||||||
|
if [ $$$$? -gt 0 ]; \
|
||||||
|
then $$(PRINT_ERROR_PLAIN); \
|
||||||
|
elif [ "$$$$LOG" != "" ] ; \
|
||||||
|
then $$(PRINT_WARNING_PLAIN); \
|
||||||
|
else \
|
||||||
|
$$(PRINT_OK); \
|
||||||
|
fi;
|
||||||
|
COMMAND_false_$$(COMMAND) := \
|
||||||
|
printf "$$(MAKE_MSG)\n\n"; \
|
||||||
|
$$(MAKE_CMD) $$(MAKE_VARS) SILENT=false; \
|
||||||
|
if [ $$$$? -gt 0 ]; \
|
||||||
|
then error_occured=1; \
|
||||||
|
fi;
|
||||||
|
endef
|
||||||
|
|
||||||
|
# Just parse all the keymaps for a specifc keyboard
|
||||||
|
define PARSE_ALL_KEYMAPS
|
||||||
|
$$(eval $$(call PARSE_ALL_IN_LIST,PARSE_KEYMAP,$$(KEYMAPS)))
|
||||||
|
endef
|
||||||
|
|
||||||
|
define BUILD_TEST
|
||||||
|
TEST_NAME := $1
|
||||||
|
MAKE_TARGET := $2
|
||||||
|
COMMAND := $1
|
||||||
|
MAKE_CMD := $$(MAKE) -r -R -C $(ROOT_DIR) -f build_test.mk $$(MAKE_TARGET)
|
||||||
|
MAKE_VARS := TEST=$$(TEST_NAME)
|
||||||
|
MAKE_MSG := $$(MSG_MAKE_TEST)
|
||||||
|
$$(eval $$(call BUILD))
|
||||||
|
ifneq ($$(MAKE_TARGET),clean)
|
||||||
|
TEST_EXECUTABLE := $$(TEST_DIR)/$$(TEST_NAME).elf
|
||||||
|
TESTS += $$(TEST_NAME)
|
||||||
|
TEST_MSG := $$(MSG_TEST)
|
||||||
|
$$(TEST_NAME)_COMMAND := \
|
||||||
|
printf "$$(TEST_MSG)\n"; \
|
||||||
|
$$(TEST_EXECUTABLE); \
|
||||||
|
if [ $$$$? -gt 0 ]; \
|
||||||
|
then error_occured=1; \
|
||||||
|
fi; \
|
||||||
|
printf "\n";
|
||||||
|
endif
|
||||||
|
endef
|
||||||
|
|
||||||
|
define PARSE_TEST
|
||||||
|
TESTS :=
|
||||||
|
TEST_NAME := $$(firstword $$(subst -, ,$$(RULE)))
|
||||||
|
TEST_TARGET := $$(subst $$(TEST_NAME),,$$(subst $$(TEST_NAME)-,,$$(RULE)))
|
||||||
|
ifeq ($$(TEST_NAME),all)
|
||||||
|
MATCHED_TESTS := $$(TEST_LIST)
|
||||||
|
else
|
||||||
|
MATCHED_TESTS := $$(foreach TEST,$$(TEST_LIST),$$(if $$(findstring $$(TEST_NAME),$$(TEST)),$$(TEST),))
|
||||||
|
endif
|
||||||
|
$$(foreach TEST,$$(MATCHED_TESTS),$$(eval $$(call BUILD_TEST,$$(TEST),$$(TEST_TARGET))))
|
||||||
|
endef
|
||||||
|
|
||||||
|
|
||||||
|
# Set the silent mode depending on if we are trying to compile multiple keyboards or not
|
||||||
|
# By default it's on in that case, but it can be overriden by specifying silent=false
|
||||||
|
# from the command line
|
||||||
|
define SET_SILENT_MODE
|
||||||
|
ifdef SUB_IS_SILENT
|
||||||
|
SILENT_MODE := $(SUB_IS_SILENT)
|
||||||
|
else ifeq ($$(words $$(COMMANDS)),1)
|
||||||
|
SILENT_MODE := false
|
||||||
|
else
|
||||||
|
SILENT_MODE := true
|
||||||
|
endif
|
||||||
|
endef
|
||||||
|
|
||||||
|
include $(ROOT_DIR)/message.mk
|
||||||
|
|
||||||
|
RUN_COMMAND = \
|
||||||
|
$(COMMAND_$(SILENT_MODE)_$(COMMAND))
|
||||||
|
|
||||||
|
# Allow specifying just the subproject, in the keyboard directory, which will compile all keymaps
|
||||||
|
SUBPROJECTS := $(notdir $(patsubst %/Makefile,%,$(wildcard ./*/Makefile)))
|
||||||
|
.PHONY: $(SUBPROJECTS)
|
||||||
|
$(SUBPROJECTS): %: %-allkm
|
||||||
|
|
||||||
|
# Let's match everything, we handle all the rule parsing ourselves
|
||||||
|
.PHONY: %
|
||||||
|
%:
|
||||||
|
# Check if we have the CMP tool installed
|
||||||
|
cmp --version >/dev/null 2>&1; if [ $$? -gt 0 ]; then printf "$(MSG_NO_CMP)"; exit 1; fi;
|
||||||
|
# Check if the submodules are dirty, and display a warning if they are
|
||||||
|
git submodule status --recursive 2>/dev/null | \
|
||||||
|
while IFS= read -r x; do \
|
||||||
|
case "$$x" in \
|
||||||
|
\ *) ;; \
|
||||||
|
*) printf "$(MSG_SUBMODULE_DIRTY)";break;; \
|
||||||
|
esac \
|
||||||
|
done
|
||||||
|
$(eval $(call PARSE_RULE,$@))
|
||||||
|
$(eval $(call SET_SILENT_MODE))
|
||||||
|
# Run all the commands in the same shell, notice the + at the first line
|
||||||
|
# it has to be there to allow parallel execution of the submake
|
||||||
|
# This always tries to compile everything, even if error occurs in the middle
|
||||||
|
# But we return the error code at the end, to trigger travis failures
|
||||||
|
+error_occured=0; \
|
||||||
|
$(foreach COMMAND,$(COMMANDS),$(RUN_COMMAND)) \
|
||||||
|
if [ $$error_occured -gt 0 ]; then printf "$(MSG_ERRORS)" & exit $$error_occured; fi;\
|
||||||
|
$(foreach TEST,$(TESTS),$($(TEST)_COMMAND)) \
|
||||||
|
if [ $$error_occured -gt 0 ]; then printf "$(MSG_ERRORS)" & exit $$error_occured; fi;\
|
||||||
|
|
||||||
|
# All should compile everything
|
||||||
|
.PHONY: all
|
||||||
|
all: all-keyboards test-all
|
||||||
|
|
||||||
|
# Define some shortcuts, mostly for compability with the old syntax
|
||||||
|
.PHONY: all-keyboards
|
||||||
|
all-keyboards: allkb-allsp-allkm
|
||||||
|
|
||||||
|
.PHONY: all-keyboards-defaults
|
||||||
|
all-keyboards-defaults: allkb-allsp-default
|
||||||
|
|
||||||
|
.PHONY: test
|
||||||
|
test: test-all
|
||||||
|
|
||||||
|
.PHONY: test-clean
|
||||||
|
test-clean: test-all-clean
|
||||||
|
|
||||||
|
# Generate the version.h file
|
||||||
GIT_VERSION := $(shell git describe --abbrev=6 --dirty --always --tags 2>/dev/null || date +"%Y-%m-%d-%H:%M:%S")
|
GIT_VERSION := $(shell git describe --abbrev=6 --dirty --always --tags 2>/dev/null || date +"%Y-%m-%d-%H:%M:%S")
|
||||||
BUILD_DATE := $(shell date +"%Y-%m-%d-%H:%M:%S")
|
BUILD_DATE := $(shell date +"%Y-%m-%d-%H:%M:%S")
|
||||||
OPT_DEFS += -DQMK_KEYBOARD=\"$(KEYBOARD)\" -DQMK_KEYMAP=\"$(KEYMAP)\"
|
$(shell echo '#define QMK_VERSION "$(GIT_VERSION)"' > $(ROOT_DIR)/quantum/version.h)
|
||||||
|
$(shell echo '#define QMK_BUILDDATE "$(BUILD_DATE)"' >> $(ROOT_DIR)/quantum/version.h)
|
||||||
|
|
||||||
$(shell echo '#define QMK_VERSION "$(GIT_VERSION)"' > $(QUANTUM_PATH)/version.h)
|
include $(ROOT_DIR)/testlist.mk
|
||||||
$(shell echo '#define QMK_BUILDDATE "$(BUILD_DATE)"' >> $(QUANTUM_PATH)/version.h)
|
|
226
build_keyboard.mk
Normal file
|
@ -0,0 +1,226 @@
|
||||||
|
ifndef VERBOSE
|
||||||
|
.SILENT:
|
||||||
|
endif
|
||||||
|
|
||||||
|
.DEFAULT_GOAL := all
|
||||||
|
|
||||||
|
include common.mk
|
||||||
|
|
||||||
|
ifneq ($(SUBPROJECT),)
|
||||||
|
TARGET ?= $(KEYBOARD)_$(SUBPROJECT)_$(KEYMAP)
|
||||||
|
KEYBOARD_OUTPUT := $(BUILD_DIR)/obj_$(KEYBOARD)_$(SUBPROJECT)
|
||||||
|
else
|
||||||
|
TARGET ?= $(KEYBOARD)_$(KEYMAP)
|
||||||
|
KEYBOARD_OUTPUT := $(BUILD_DIR)/obj_$(KEYBOARD)
|
||||||
|
endif
|
||||||
|
|
||||||
|
# Force expansion
|
||||||
|
TARGET := $(TARGET)
|
||||||
|
|
||||||
|
|
||||||
|
MASTER ?= left
|
||||||
|
ifdef master
|
||||||
|
MASTER = $(master)
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq ($(MASTER),right)
|
||||||
|
OPT_DEFS += -DMASTER_IS_ON_RIGHT
|
||||||
|
else
|
||||||
|
ifneq ($(MASTER),left)
|
||||||
|
$(error MASTER does not have a valid value(left/right))
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
KEYBOARD_PATH := keyboards/$(KEYBOARD)
|
||||||
|
KEYBOARD_C := $(KEYBOARD_PATH)/$(KEYBOARD).c
|
||||||
|
|
||||||
|
ifneq ("$(wildcard $(KEYBOARD_C))","")
|
||||||
|
include $(KEYBOARD_PATH)/rules.mk
|
||||||
|
else
|
||||||
|
$(error "$(KEYBOARD_C)" does not exist)
|
||||||
|
endif
|
||||||
|
|
||||||
|
|
||||||
|
ifneq ($(SUBPROJECT),)
|
||||||
|
SUBPROJECT_PATH := keyboards/$(KEYBOARD)/$(SUBPROJECT)
|
||||||
|
SUBPROJECT_C := $(SUBPROJECT_PATH)/$(SUBPROJECT).c
|
||||||
|
ifneq ("$(wildcard $(SUBPROJECT_C))","")
|
||||||
|
OPT_DEFS += -DSUBPROJECT_$(SUBPROJECT)
|
||||||
|
include $(SUBPROJECT_PATH)/rules.mk
|
||||||
|
else
|
||||||
|
$(error "$(SUBPROJECT_PATH)/$(SUBPROJECT).c" does not exist)
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
|
# We can assume a ChibiOS target When MCU_FAMILY is defined, since it's not used for LUFA
|
||||||
|
ifdef MCU_FAMILY
|
||||||
|
PLATFORM=CHIBIOS
|
||||||
|
else
|
||||||
|
PLATFORM=AVR
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq ($(PLATFORM),CHIBIOS)
|
||||||
|
include $(TMK_PATH)/protocol/chibios.mk
|
||||||
|
include $(TMK_PATH)/chibios.mk
|
||||||
|
OPT_OS = chibios
|
||||||
|
ifneq ("$(wildcard $(SUBPROJECT_PATH)/bootloader_defs.h)","")
|
||||||
|
OPT_DEFS += -include $(SUBPROJECT_PATH)/bootloader_defs.h
|
||||||
|
else ifneq ("$(wildcard $(SUBPROJECT_PATH)/boards/$(BOARD)/bootloader_defs.h)","")
|
||||||
|
OPT_DEFS += -include $(SUBPROJECT_PATH)/boards/$(BOARD)/bootloader_defs.h
|
||||||
|
else ifneq ("$(wildcard $(KEYBOARD_PATH)/bootloader_defs.h)","")
|
||||||
|
OPT_DEFS += -include $(KEYBOARD_PATH)/bootloader_defs.h
|
||||||
|
else ifneq ("$(wildcard $(KEYBOARD_PATH)/boards/$(BOARD)/bootloader_defs.h)","")
|
||||||
|
OPT_DEFS += -include $(KEYBOARD_PATH)/boards/$(BOARD)/bootloader_defs.h
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
|
CONFIG_H = $(KEYBOARD_PATH)/config.h
|
||||||
|
ifneq ($(SUBPROJECT),)
|
||||||
|
ifneq ("$(wildcard $(SUBPROJECT_C))","")
|
||||||
|
CONFIG_H = $(SUBPROJECT_PATH)/config.h
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
|
# Save the defines and includes here, so we don't include any keymap specific ones
|
||||||
|
PROJECT_DEFS := $(OPT_DEFS)
|
||||||
|
PROJECT_INC := $(VPATH) $(EXTRAINCDIRS) $(SUBPROJECT_PATH) $(KEYBOARD_PATH)
|
||||||
|
PROJECT_CONFIG := $(CONFIG_H)
|
||||||
|
|
||||||
|
MAIN_KEYMAP_PATH := $(KEYBOARD_PATH)/keymaps/$(KEYMAP)
|
||||||
|
MAIN_KEYMAP_C := $(MAIN_KEYMAP_PATH)/keymap.c
|
||||||
|
SUBPROJ_KEYMAP_PATH := $(SUBPROJECT_PATH)/keymaps/$(KEYMAP)
|
||||||
|
SUBPROJ_KEYMAP_C := $(SUBPROJ_KEYMAP_PATH)/keymap.c
|
||||||
|
ifneq ("$(wildcard $(SUBPROJ_KEYMAP_C))","")
|
||||||
|
-include $(SUBPROJ_KEYMAP_PATH)/Makefile
|
||||||
|
KEYMAP_C := $(SUBPROJ_KEYMAP_C)
|
||||||
|
KEYMAP_PATH := $(SUBPROJ_KEYMAP_PATH)
|
||||||
|
else ifneq ("$(wildcard $(MAIN_KEYMAP_C))","")
|
||||||
|
-include $(MAIN_KEYMAP_PATH)/Makefile
|
||||||
|
KEYMAP_C := $(MAIN_KEYMAP_C)
|
||||||
|
KEYMAP_PATH := $(MAIN_KEYMAP_PATH)
|
||||||
|
else
|
||||||
|
$(error "$(MAIN_KEYMAP_C)/keymap.c" does not exist)
|
||||||
|
endif
|
||||||
|
|
||||||
|
|
||||||
|
# Object files directory
|
||||||
|
# To put object files in current directory, use a dot (.), do NOT make
|
||||||
|
# this an empty or blank macro!
|
||||||
|
KEYMAP_OUTPUT := $(BUILD_DIR)/obj_$(TARGET)
|
||||||
|
|
||||||
|
|
||||||
|
ifneq ("$(wildcard $(KEYMAP_PATH)/config.h)","")
|
||||||
|
CONFIG_H = $(KEYMAP_PATH)/config.h
|
||||||
|
endif
|
||||||
|
|
||||||
|
# # project specific files
|
||||||
|
SRC += $(KEYBOARD_C) \
|
||||||
|
$(KEYMAP_C) \
|
||||||
|
$(QUANTUM_DIR)/quantum.c \
|
||||||
|
$(QUANTUM_DIR)/keymap_common.c \
|
||||||
|
$(QUANTUM_DIR)/keycode_config.c \
|
||||||
|
$(QUANTUM_DIR)/process_keycode/process_leader.c
|
||||||
|
|
||||||
|
ifneq ($(SUBPROJECT),)
|
||||||
|
SRC += $(SUBPROJECT_C)
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifndef CUSTOM_MATRIX
|
||||||
|
SRC += $(QUANTUM_DIR)/matrix.c
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq ($(strip $(MIDI_ENABLE)), yes)
|
||||||
|
OPT_DEFS += -DMIDI_ENABLE
|
||||||
|
SRC += $(QUANTUM_DIR)/process_keycode/process_midi.c
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq ($(strip $(VIRTSER_ENABLE)), yes)
|
||||||
|
OPT_DEFS += -DVIRTSER_ENABLE
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq ($(strip $(AUDIO_ENABLE)), yes)
|
||||||
|
OPT_DEFS += -DAUDIO_ENABLE
|
||||||
|
SRC += $(QUANTUM_DIR)/process_keycode/process_music.c
|
||||||
|
SRC += $(QUANTUM_DIR)/audio/audio.c
|
||||||
|
SRC += $(QUANTUM_DIR)/audio/voices.c
|
||||||
|
SRC += $(QUANTUM_DIR)/audio/luts.c
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq ($(strip $(UCIS_ENABLE)), yes)
|
||||||
|
OPT_DEFS += -DUCIS_ENABLE
|
||||||
|
UNICODE_ENABLE = yes
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq ($(strip $(UNICODE_ENABLE)), yes)
|
||||||
|
OPT_DEFS += -DUNICODE_ENABLE
|
||||||
|
SRC += $(QUANTUM_DIR)/process_keycode/process_unicode.c
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq ($(strip $(RGBLIGHT_ENABLE)), yes)
|
||||||
|
OPT_DEFS += -DRGBLIGHT_ENABLE
|
||||||
|
SRC += $(QUANTUM_DIR)/light_ws2812.c
|
||||||
|
SRC += $(QUANTUM_DIR)/rgblight.c
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq ($(strip $(TAP_DANCE_ENABLE)), yes)
|
||||||
|
OPT_DEFS += -DTAP_DANCE_ENABLE
|
||||||
|
SRC += $(QUANTUM_DIR)/process_keycode/process_tap_dance.c
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq ($(strip $(SERIAL_LINK_ENABLE)), yes)
|
||||||
|
SRC += $(patsubst $(QUANTUM_PATH)/%,%,$(SERIAL_SRC))
|
||||||
|
OPT_DEFS += $(SERIAL_DEFS)
|
||||||
|
VAPTH += $(SERIAL_PATH)
|
||||||
|
endif
|
||||||
|
|
||||||
|
# Optimize size but this may cause error "relocation truncated to fit"
|
||||||
|
#EXTRALDFLAGS = -Wl,--relax
|
||||||
|
|
||||||
|
# Search Path
|
||||||
|
VPATH += $(KEYMAP_PATH)
|
||||||
|
ifneq ($(SUBPROJECT),)
|
||||||
|
VPATH += $(SUBPROJECT_PATH)
|
||||||
|
endif
|
||||||
|
VPATH += $(KEYBOARD_PATH)
|
||||||
|
VPATH += $(COMMON_VPATH)
|
||||||
|
|
||||||
|
|
||||||
|
include $(TMK_PATH)/common.mk
|
||||||
|
SRC += $(TMK_COMMON_SRC)
|
||||||
|
OPT_DEFS += $(TMK_COMMON_DEFS)
|
||||||
|
EXTRALDFLAGS += $(TMK_COMMON_LDFLAGS)
|
||||||
|
|
||||||
|
ifeq ($(PLATFORM),AVR)
|
||||||
|
include $(TMK_PATH)/protocol/lufa.mk
|
||||||
|
include $(TMK_PATH)/avr.mk
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq ($(strip $(VISUALIZER_ENABLE)), yes)
|
||||||
|
VISUALIZER_DIR = $(QUANTUM_DIR)/visualizer
|
||||||
|
VISUALIZER_PATH = $(QUANTUM_PATH)/visualizer
|
||||||
|
include $(VISUALIZER_PATH)/visualizer.mk
|
||||||
|
endif
|
||||||
|
|
||||||
|
OUTPUTS := $(KEYMAP_OUTPUT) $(KEYBOARD_OUTPUT)
|
||||||
|
$(KEYMAP_OUTPUT)_SRC := $(SRC)
|
||||||
|
$(KEYMAP_OUTPUT)_DEFS := $(OPT_DEFS) -DQMK_KEYBOARD=\"$(KEYBOARD)\" -DQMK_KEYMAP=\"$(KEYMAP)\"
|
||||||
|
$(KEYMAP_OUTPUT)_INC := $(VPATH) $(EXTRAINCDIRS)
|
||||||
|
$(KEYMAP_OUTPUT)_CONFIG := $(CONFIG_H)
|
||||||
|
$(KEYBOARD_OUTPUT)_SRC := $(CHIBISRC)
|
||||||
|
$(KEYBOARD_OUTPUT)_DEFS := $(PROJECT_DEFS)
|
||||||
|
$(KEYBOARD_OUTPUT)_INC := $(PROJECT_INC)
|
||||||
|
$(KEYBOARD_OUTPUT)_CONFIG := $(PROJECT_CONFIG)
|
||||||
|
|
||||||
|
# Default target.
|
||||||
|
all: build sizeafter
|
||||||
|
|
||||||
|
# Change the build target to build a HEX file or a library.
|
||||||
|
build: elf hex
|
||||||
|
#build: elf hex eep lss sym
|
||||||
|
#build: lib
|
||||||
|
|
||||||
|
|
||||||
|
include $(TMK_PATH)/rules.mk
|
||||||
|
|
57
build_test.mk
Normal file
|
@ -0,0 +1,57 @@
|
||||||
|
ifndef VERBOSE
|
||||||
|
.SILENT:
|
||||||
|
endif
|
||||||
|
|
||||||
|
.DEFAULT_GOAL := all
|
||||||
|
|
||||||
|
include common.mk
|
||||||
|
|
||||||
|
TARGET=test/$(TEST)
|
||||||
|
|
||||||
|
GTEST_OUTPUT = $(BUILD_DIR)/gtest
|
||||||
|
|
||||||
|
TEST_OBJ = $(BUILD_DIR)/test_obj
|
||||||
|
|
||||||
|
OUTPUTS := $(TEST_OBJ)/$(TEST) $(GTEST_OUTPUT)
|
||||||
|
|
||||||
|
GTEST_INC := \
|
||||||
|
$(LIB_PATH)/googletest/googletest/include\
|
||||||
|
$(LIB_PATH)/googletest/googlemock/include\
|
||||||
|
|
||||||
|
GTEST_INTERNAL_INC :=\
|
||||||
|
$(LIB_PATH)/googletest/googletest\
|
||||||
|
$(LIB_PATH)/googletest/googlemock
|
||||||
|
|
||||||
|
$(GTEST_OUTPUT)_SRC :=\
|
||||||
|
googletest/src/gtest-all.cc\
|
||||||
|
googletest/src/gtest_main.cc\
|
||||||
|
googlemock/src/gmock-all.cc
|
||||||
|
|
||||||
|
$(GTEST_OUTPUT)_DEFS :=
|
||||||
|
$(GTEST_OUTPUT)_INC := $(GTEST_INC) $(GTEST_INTERNAL_INC)
|
||||||
|
|
||||||
|
LDFLAGS += -lstdc++ -lpthread -shared-libgcc
|
||||||
|
CREATE_MAP := no
|
||||||
|
|
||||||
|
VPATH +=\
|
||||||
|
$(LIB_PATH)/googletest\
|
||||||
|
$(LIB_PATH)/googlemock
|
||||||
|
|
||||||
|
all: elf
|
||||||
|
|
||||||
|
VPATH += $(COMMON_VPATH)
|
||||||
|
|
||||||
|
include $(TMK_PATH)/common.mk
|
||||||
|
include $(QUANTUM_PATH)/serial_link/tests/rules.mk
|
||||||
|
|
||||||
|
$(TEST_OBJ)/$(TEST)_SRC := $($(TEST)_SRC)
|
||||||
|
$(TEST_OBJ)/$(TEST)_INC := $($(TEST)_INC) $(VPATH) $(GTEST_INC)
|
||||||
|
$(TEST_OBJ)/$(TEST)_DEFS := $($(TEST)_DEFS)
|
||||||
|
|
||||||
|
include $(TMK_PATH)/native.mk
|
||||||
|
include $(TMK_PATH)/rules.mk
|
||||||
|
|
||||||
|
|
||||||
|
$(shell mkdir -p $(BUILD_DIR)/test 2>/dev/null)
|
||||||
|
$(shell mkdir -p $(TEST_OBJ) 2>/dev/null)
|
||||||
|
|
26
common.mk
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
include message.mk
|
||||||
|
|
||||||
|
# Directory common source files exist
|
||||||
|
TOP_DIR = .
|
||||||
|
TMK_DIR = tmk_core
|
||||||
|
TMK_PATH = $(TOP_DIR)/$(TMK_DIR)
|
||||||
|
LIB_PATH = $(TOP_DIR)/lib
|
||||||
|
|
||||||
|
QUANTUM_DIR = quantum
|
||||||
|
QUANTUM_PATH = $(TOP_DIR)/$(QUANTUM_DIR)
|
||||||
|
|
||||||
|
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 += $(TMK_PATH)
|
||||||
|
COMMON_VPATH += $(QUANTUM_PATH)
|
||||||
|
COMMON_VPATH += $(QUANTUM_PATH)/keymap_extras
|
||||||
|
COMMON_VPATH += $(QUANTUM_PATH)/audio
|
||||||
|
COMMON_VPATH += $(QUANTUM_PATH)/process_keycode
|
||||||
|
COMMON_VPATH += $(SERIAL_PATH)
|
|
@ -6,7 +6,8 @@ This project includes a Vagrantfile that will allow you to build a new firmware
|
||||||
|
|
||||||
Using the `/Vagrantfile` in this repository requires you have [Vagrant](http://www.vagrantup.com/) as well as [VirtualBox](https://www.virtualbox.org/) (or [VMware Workstation](https://www.vmware.com/products/workstation) and [Vagrant VMware plugin](http://www.vagrantup.com/vmware) but the (paid) VMware plugin requires a licensed copy of VMware Workstation/Fusion).
|
Using the `/Vagrantfile` in this repository requires you have [Vagrant](http://www.vagrantup.com/) as well as [VirtualBox](https://www.virtualbox.org/) (or [VMware Workstation](https://www.vmware.com/products/workstation) and [Vagrant VMware plugin](http://www.vagrantup.com/vmware) but the (paid) VMware plugin requires a licensed copy of VMware Workstation/Fusion).
|
||||||
|
|
||||||
*COMPATIBILITY NOTICE* Certain versions of Virtualbox 5 appear to have an incompatibility with the Virtualbox extensions installed in the boxes in this Vagrantfile. If you encounter any issues with the /vagrant mount not succeeding, please upgrade your version of Virtualbox to at least 5.0.12.
|
*COMPATIBILITY NOTICE* Certain versions of Virtualbox 5 appear to have an incompatibility with the Virtualbox extensions installed in the boxes in this Vagrantfile. If you encounter any issues with the /vagrant mount not succeeding, please upgrade your version of Virtualbox to at least 5.0.12. **Alternately, you can try running the following command:** `vagrant plugin install vagrant-vbguest`
|
||||||
|
|
||||||
|
|
||||||
Other than having Vagrant and Virtualbox installed and possibly a restart of your computer afterwards, you can simple run a 'vagrant up' anywhere inside the folder where you checked out this project and it will start a Linux virtual machine that contains all the tools required to build this project. There is a post Vagrant startup hint that will get you off on the right foot, otherwise you can also reference the build documentation below.
|
Other than having Vagrant and Virtualbox installed and possibly a restart of your computer afterwards, you can simple run a 'vagrant up' anywhere inside the folder where you checked out this project and it will start a Linux virtual machine that contains all the tools required to build this project. There is a post Vagrant startup hint that will get you off on the right foot, otherwise you can also reference the build documentation below.
|
||||||
|
|
||||||
|
|
|
@ -1,70 +1,3 @@
|
||||||
|
ifndef MAKEFILE_INCLUDED
|
||||||
|
|
||||||
# Target file name (without extension).
|
|
||||||
|
|
||||||
# project specific files
|
|
||||||
SRC = led.c
|
|
||||||
|
|
||||||
# MCU name
|
|
||||||
MCU = atmega32u2
|
|
||||||
|
|
||||||
# Processor frequency.
|
|
||||||
# This will define a symbol, F_CPU, in all source code files equal to the
|
|
||||||
# processor frequency in Hz. You can then use this symbol in your source code to
|
|
||||||
# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
|
|
||||||
# automatically to create a 32-bit value in your source code.
|
|
||||||
#
|
|
||||||
# This will be an integer division of F_USB below, as it is sourced by
|
|
||||||
# F_USB after it has run through any CPU prescalers. Note that this value
|
|
||||||
# does not *change* the processor frequency - it should merely be updated to
|
|
||||||
# reflect the processor speed set externally so that the code can use accurate
|
|
||||||
# software delays.
|
|
||||||
F_CPU = 16000000
|
|
||||||
|
|
||||||
|
|
||||||
#
|
|
||||||
# LUFA specific
|
|
||||||
#
|
|
||||||
# Target architecture (see library "Board Types" documentation).
|
|
||||||
ARCH = AVR8
|
|
||||||
|
|
||||||
# Input clock frequency.
|
|
||||||
# This will define a symbol, F_USB, in all source code files equal to the
|
|
||||||
# input clock frequency (before any prescaling is performed) in Hz. This value may
|
|
||||||
# differ from F_CPU if prescaling is used on the latter, and is required as the
|
|
||||||
# raw input clock is fed directly to the PLL sections of the AVR for high speed
|
|
||||||
# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
|
|
||||||
# at the end, this will be done automatically to create a 32-bit value in your
|
|
||||||
# source code.
|
|
||||||
#
|
|
||||||
# If no clock division is performed on the input clock inside the AVR (via the
|
|
||||||
# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
|
|
||||||
F_USB = $(F_CPU)
|
|
||||||
|
|
||||||
# Interrupt driven control endpoint task(+60)
|
|
||||||
OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
|
|
||||||
|
|
||||||
|
|
||||||
# Boot Section Size in *bytes*
|
|
||||||
# Teensy halfKay 512
|
|
||||||
# Teensy++ halfKay 1024
|
|
||||||
# Atmel DFU loader 4096
|
|
||||||
# LUFA bootloader 4096
|
|
||||||
# USBaspLoader 2048
|
|
||||||
OPT_DEFS += -DBOOTLOADER_SIZE=4096
|
|
||||||
|
|
||||||
|
|
||||||
# Build Options
|
|
||||||
# comment out to disable the options.
|
|
||||||
#
|
|
||||||
BOOTMAGIC_ENABLE ?= yes # Virtual DIP switch configuration(+1000)
|
|
||||||
MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700)
|
|
||||||
EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450)
|
|
||||||
CONSOLE_ENABLE ?= yes # Console for debug(+400)
|
|
||||||
COMMAND_ENABLE ?= yes # Commands for debug and configuration
|
|
||||||
#SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend
|
|
||||||
#NKRO_ENABLE = yes # USB Nkey Rollover - not yet supported in LUFA
|
|
||||||
|
|
||||||
ifndef QUANTUM_DIR
|
|
||||||
include ../../Makefile
|
include ../../Makefile
|
||||||
endif
|
endif
|
66
keyboards/alps64/rules.mk
Normal file
|
@ -0,0 +1,66 @@
|
||||||
|
|
||||||
|
|
||||||
|
# Target file name (without extension).
|
||||||
|
|
||||||
|
# project specific files
|
||||||
|
SRC = led.c
|
||||||
|
|
||||||
|
# MCU name
|
||||||
|
MCU = atmega32u2
|
||||||
|
|
||||||
|
# Processor frequency.
|
||||||
|
# This will define a symbol, F_CPU, in all source code files equal to the
|
||||||
|
# processor frequency in Hz. You can then use this symbol in your source code to
|
||||||
|
# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
|
||||||
|
# automatically to create a 32-bit value in your source code.
|
||||||
|
#
|
||||||
|
# This will be an integer division of F_USB below, as it is sourced by
|
||||||
|
# F_USB after it has run through any CPU prescalers. Note that this value
|
||||||
|
# does not *change* the processor frequency - it should merely be updated to
|
||||||
|
# reflect the processor speed set externally so that the code can use accurate
|
||||||
|
# software delays.
|
||||||
|
F_CPU = 16000000
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
# LUFA specific
|
||||||
|
#
|
||||||
|
# Target architecture (see library "Board Types" documentation).
|
||||||
|
ARCH = AVR8
|
||||||
|
|
||||||
|
# Input clock frequency.
|
||||||
|
# This will define a symbol, F_USB, in all source code files equal to the
|
||||||
|
# input clock frequency (before any prescaling is performed) in Hz. This value may
|
||||||
|
# differ from F_CPU if prescaling is used on the latter, and is required as the
|
||||||
|
# raw input clock is fed directly to the PLL sections of the AVR for high speed
|
||||||
|
# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
|
||||||
|
# at the end, this will be done automatically to create a 32-bit value in your
|
||||||
|
# source code.
|
||||||
|
#
|
||||||
|
# If no clock division is performed on the input clock inside the AVR (via the
|
||||||
|
# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
|
||||||
|
F_USB = $(F_CPU)
|
||||||
|
|
||||||
|
# Interrupt driven control endpoint task(+60)
|
||||||
|
OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
|
||||||
|
|
||||||
|
|
||||||
|
# Boot Section Size in *bytes*
|
||||||
|
# Teensy halfKay 512
|
||||||
|
# Teensy++ halfKay 1024
|
||||||
|
# Atmel DFU loader 4096
|
||||||
|
# LUFA bootloader 4096
|
||||||
|
# USBaspLoader 2048
|
||||||
|
OPT_DEFS += -DBOOTLOADER_SIZE=4096
|
||||||
|
|
||||||
|
|
||||||
|
# Build Options
|
||||||
|
# comment out to disable the options.
|
||||||
|
#
|
||||||
|
BOOTMAGIC_ENABLE ?= yes # Virtual DIP switch configuration(+1000)
|
||||||
|
MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700)
|
||||||
|
EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450)
|
||||||
|
CONSOLE_ENABLE ?= yes # Console for debug(+400)
|
||||||
|
COMMAND_ENABLE ?= yes # Commands for debug and configuration
|
||||||
|
#SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend
|
||||||
|
#NKRO_ENABLE = yes # USB Nkey Rollover - not yet supported in LUFA
|
|
@ -1,70 +1,3 @@
|
||||||
|
ifndef MAKEFILE_INCLUDED
|
||||||
# MCU name
|
|
||||||
#MCU = at90usb1287
|
|
||||||
MCU = atmega32u4
|
|
||||||
|
|
||||||
# Processor frequency.
|
|
||||||
# This will define a symbol, F_CPU, in all source code files equal to the
|
|
||||||
# processor frequency in Hz. You can then use this symbol in your source code to
|
|
||||||
# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
|
|
||||||
# automatically to create a 32-bit value in your source code.
|
|
||||||
#
|
|
||||||
# This will be an integer division of F_USB below, as it is sourced by
|
|
||||||
# F_USB after it has run through any CPU prescalers. Note that this value
|
|
||||||
# does not *change* the processor frequency - it should merely be updated to
|
|
||||||
# reflect the processor speed set externally so that the code can use accurate
|
|
||||||
# software delays.
|
|
||||||
F_CPU = 16000000
|
|
||||||
|
|
||||||
|
|
||||||
#
|
|
||||||
# LUFA specific
|
|
||||||
#
|
|
||||||
# Target architecture (see library "Board Types" documentation).
|
|
||||||
ARCH = AVR8
|
|
||||||
|
|
||||||
# Input clock frequency.
|
|
||||||
# This will define a symbol, F_USB, in all source code files equal to the
|
|
||||||
# input clock frequency (before any prescaling is performed) in Hz. This value may
|
|
||||||
# differ from F_CPU if prescaling is used on the latter, and is required as the
|
|
||||||
# raw input clock is fed directly to the PLL sections of the AVR for high speed
|
|
||||||
# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
|
|
||||||
# at the end, this will be done automatically to create a 32-bit value in your
|
|
||||||
# source code.
|
|
||||||
#
|
|
||||||
# If no clock division is performed on the input clock inside the AVR (via the
|
|
||||||
# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
|
|
||||||
F_USB = $(F_CPU)
|
|
||||||
|
|
||||||
# Interrupt driven control endpoint task(+60)
|
|
||||||
OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
|
|
||||||
|
|
||||||
|
|
||||||
# Boot Section Size in *bytes*
|
|
||||||
# Teensy halfKay 512
|
|
||||||
# Teensy++ halfKay 1024
|
|
||||||
# Atmel DFU loader 4096
|
|
||||||
# LUFA bootloader 4096
|
|
||||||
# USBaspLoader 2048
|
|
||||||
OPT_DEFS += -DBOOTLOADER_SIZE=4096
|
|
||||||
|
|
||||||
|
|
||||||
# Build Options
|
|
||||||
# comment out to disable the options.
|
|
||||||
#
|
|
||||||
BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration(+1000)
|
|
||||||
MOUSEKEY_ENABLE ?= no # Mouse keys(+4700)
|
|
||||||
EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450)
|
|
||||||
CONSOLE_ENABLE ?= yes # Console for debug(+400)
|
|
||||||
COMMAND_ENABLE ?= yes # Commands for debug and configuration
|
|
||||||
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)
|
|
||||||
BACKLIGHT_ENABLE ?= yes # Enable keyboard backlight functionality (+1150)
|
|
||||||
MIDI_ENABLE ?= no # MIDI controls
|
|
||||||
AUDIO_ENABLE ?= no
|
|
||||||
UNICODE_ENABLE ?= no # Unicode
|
|
||||||
BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID
|
|
||||||
|
|
||||||
ifndef QUANTUM_DIR
|
|
||||||
include ../../Makefile
|
include ../../Makefile
|
||||||
endif
|
endif
|
66
keyboards/amj60/rules.mk
Normal file
|
@ -0,0 +1,66 @@
|
||||||
|
|
||||||
|
# MCU name
|
||||||
|
#MCU = at90usb1287
|
||||||
|
MCU = atmega32u4
|
||||||
|
|
||||||
|
# Processor frequency.
|
||||||
|
# This will define a symbol, F_CPU, in all source code files equal to the
|
||||||
|
# processor frequency in Hz. You can then use this symbol in your source code to
|
||||||
|
# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
|
||||||
|
# automatically to create a 32-bit value in your source code.
|
||||||
|
#
|
||||||
|
# This will be an integer division of F_USB below, as it is sourced by
|
||||||
|
# F_USB after it has run through any CPU prescalers. Note that this value
|
||||||
|
# does not *change* the processor frequency - it should merely be updated to
|
||||||
|
# reflect the processor speed set externally so that the code can use accurate
|
||||||
|
# software delays.
|
||||||
|
F_CPU = 16000000
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
# LUFA specific
|
||||||
|
#
|
||||||
|
# Target architecture (see library "Board Types" documentation).
|
||||||
|
ARCH = AVR8
|
||||||
|
|
||||||
|
# Input clock frequency.
|
||||||
|
# This will define a symbol, F_USB, in all source code files equal to the
|
||||||
|
# input clock frequency (before any prescaling is performed) in Hz. This value may
|
||||||
|
# differ from F_CPU if prescaling is used on the latter, and is required as the
|
||||||
|
# raw input clock is fed directly to the PLL sections of the AVR for high speed
|
||||||
|
# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
|
||||||
|
# at the end, this will be done automatically to create a 32-bit value in your
|
||||||
|
# source code.
|
||||||
|
#
|
||||||
|
# If no clock division is performed on the input clock inside the AVR (via the
|
||||||
|
# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
|
||||||
|
F_USB = $(F_CPU)
|
||||||
|
|
||||||
|
# Interrupt driven control endpoint task(+60)
|
||||||
|
OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
|
||||||
|
|
||||||
|
|
||||||
|
# Boot Section Size in *bytes*
|
||||||
|
# Teensy halfKay 512
|
||||||
|
# Teensy++ halfKay 1024
|
||||||
|
# Atmel DFU loader 4096
|
||||||
|
# LUFA bootloader 4096
|
||||||
|
# USBaspLoader 2048
|
||||||
|
OPT_DEFS += -DBOOTLOADER_SIZE=4096
|
||||||
|
|
||||||
|
|
||||||
|
# Build Options
|
||||||
|
# comment out to disable the options.
|
||||||
|
#
|
||||||
|
BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration(+1000)
|
||||||
|
MOUSEKEY_ENABLE ?= no # Mouse keys(+4700)
|
||||||
|
EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450)
|
||||||
|
CONSOLE_ENABLE ?= yes # Console for debug(+400)
|
||||||
|
COMMAND_ENABLE ?= yes # Commands for debug and configuration
|
||||||
|
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)
|
||||||
|
BACKLIGHT_ENABLE ?= yes # Enable keyboard backlight functionality (+1150)
|
||||||
|
MIDI_ENABLE ?= no # MIDI controls
|
||||||
|
AUDIO_ENABLE ?= no
|
||||||
|
UNICODE_ENABLE ?= no # Unicode
|
||||||
|
BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID
|
|
@ -1,74 +1,3 @@
|
||||||
|
ifndef MAKEFILE_INCLUDED
|
||||||
|
|
||||||
# MCU name
|
|
||||||
#MCU = at90usb1287
|
|
||||||
MCU = atmega32u4
|
|
||||||
|
|
||||||
# Processor frequency.
|
|
||||||
# This will define a symbol, F_CPU, in all source code files equal to the
|
|
||||||
# processor frequency in Hz. You can then use this symbol in your source code to
|
|
||||||
# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
|
|
||||||
# automatically to create a 32-bit value in your source code.
|
|
||||||
#
|
|
||||||
# This will be an integer division of F_USB below, as it is sourced by
|
|
||||||
# F_USB after it has run through any CPU prescalers. Note that this value
|
|
||||||
# does not *change* the processor frequency - it should merely be updated to
|
|
||||||
# reflect the processor speed set externally so that the code can use accurate
|
|
||||||
# software delays.
|
|
||||||
F_CPU = 16000000
|
|
||||||
|
|
||||||
|
|
||||||
#
|
|
||||||
# LUFA specific
|
|
||||||
#
|
|
||||||
# Target architecture (see library "Board Types" documentation).
|
|
||||||
ARCH = AVR8
|
|
||||||
|
|
||||||
# Input clock frequency.
|
|
||||||
# This will define a symbol, F_USB, in all source code files equal to the
|
|
||||||
# input clock frequency (before any prescaling is performed) in Hz. This value may
|
|
||||||
# differ from F_CPU if prescaling is used on the latter, and is required as the
|
|
||||||
# raw input clock is fed directly to the PLL sections of the AVR for high speed
|
|
||||||
# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
|
|
||||||
# at the end, this will be done automatically to create a 32-bit value in your
|
|
||||||
# source code.
|
|
||||||
#
|
|
||||||
# If no clock division is performed on the input clock inside the AVR (via the
|
|
||||||
# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
|
|
||||||
F_USB = $(F_CPU)
|
|
||||||
|
|
||||||
# Interrupt driven control endpoint task(+60)
|
|
||||||
OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
|
|
||||||
|
|
||||||
|
|
||||||
# Boot Section Size in *bytes*
|
|
||||||
# Teensy halfKay 512
|
|
||||||
# Teensy++ halfKay 1024
|
|
||||||
# Atmel DFU loader 4096
|
|
||||||
# LUFA bootloader 4096
|
|
||||||
# USBaspLoader 2048
|
|
||||||
OPT_DEFS += -DBOOTLOADER_SIZE=512
|
|
||||||
|
|
||||||
|
|
||||||
# Build Options
|
|
||||||
# change yes to no to disable
|
|
||||||
#
|
|
||||||
BOOTMAGIC_ENABLE ?= yes # Virtual DIP switch configuration(+1000)
|
|
||||||
MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700)
|
|
||||||
EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450)
|
|
||||||
CONSOLE_ENABLE ?= yes # Console for debug(+400)
|
|
||||||
COMMAND_ENABLE ?= yes # Commands for debug and configuration
|
|
||||||
KEYBOARD_LOCK_ENABLE ?= yes # Allow locking of keyboard via magic key
|
|
||||||
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
|
|
||||||
SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend
|
|
||||||
# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
|
|
||||||
NKRO_ENABLE ?= yes # USB Nkey Rollover
|
|
||||||
BACKLIGHT_ENABLE ?= yes # Enable keyboard backlight functionality
|
|
||||||
MIDI_ENABLE ?= no # MIDI controls
|
|
||||||
UNICODE_ENABLE ?= no # Unicode
|
|
||||||
BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID
|
|
||||||
AUDIO_ENABLE ?= no # Audio output on port C6
|
|
||||||
|
|
||||||
ifndef QUANTUM_DIR
|
|
||||||
include ../../Makefile
|
include ../../Makefile
|
||||||
endif
|
endif
|
|
@ -1,24 +1,133 @@
|
||||||
arrow_pad keyboard firmware
|
arrow_pad keyboard firmware
|
||||||
======================
|
======================
|
||||||
|
|
||||||
|
## Keyboard Info
|
||||||
|
|
||||||
|
The ArrowPad is a wired conversion that can be made to any stand-alone keypad. It uses two main layers - a standard numpad, and a more advanced arrow cluster navigator.
|
||||||
|
|
||||||
|
The first 24-key ArrowPad was handwired, but the PCB was wired as listed below.
|
||||||
|
|
||||||
|
```
|
||||||
|
<Chip Ref Des> pin <Pin #>
|
||||||
|
<Keycap Name> (Silkscreen Name if different) - <Switch Pin #>
|
||||||
|
|
||||||
|
|
||||||
|
Note:
|
||||||
|
U2 pin 2 is the Num Lock LED and is active low.
|
||||||
|
|
||||||
|
U2 pin 1
|
||||||
|
Clear (Num Lock) - 1
|
||||||
|
Enter - 2
|
||||||
|
Esc (ESC) - 2
|
||||||
|
|
||||||
|
|
||||||
|
U2 pin 3
|
||||||
|
- - 1
|
||||||
|
|
||||||
|
U2 pin 4
|
||||||
|
7 - 2
|
||||||
|
8 - 2
|
||||||
|
9 - 2
|
||||||
|
|
||||||
|
U2 pin 5
|
||||||
|
* - 2
|
||||||
|
Delete (BACK SPACE) - 2
|
||||||
|
|
||||||
|
U2 pin 6
|
||||||
|
1 - 2
|
||||||
|
0 - 2
|
||||||
|
. - 2
|
||||||
|
, - 2
|
||||||
|
|
||||||
|
U2 pin 7
|
||||||
|
4 - 2
|
||||||
|
5 - 2
|
||||||
|
6 - 2
|
||||||
|
|
||||||
|
U2 pin 8
|
||||||
|
Tab - 2
|
||||||
|
= (/) - 2
|
||||||
|
|
||||||
|
U2 pin 13
|
||||||
|
Delete (BACK SPACE) - 1
|
||||||
|
9 - 1
|
||||||
|
6 - 1
|
||||||
|
3 - 1
|
||||||
|
. - 1
|
||||||
|
|
||||||
|
U2 pin 14
|
||||||
|
Tab - 1
|
||||||
|
8 - 1
|
||||||
|
5 - 1
|
||||||
|
2 - 1
|
||||||
|
0 - 1
|
||||||
|
|
||||||
|
U2 pin 15
|
||||||
|
Esc (ESC) - 1
|
||||||
|
= (/) - 1
|
||||||
|
/ (*) - 1
|
||||||
|
7 - 1
|
||||||
|
4 - 1
|
||||||
|
1 - 1
|
||||||
|
+ - 1
|
||||||
|
|
||||||
|
U2 pin 16
|
||||||
|
Enter - 1
|
||||||
|
* (<--) - 1
|
||||||
|
, - 1
|
||||||
|
|
||||||
|
U2 pin 17
|
||||||
|
Fn (#NAME?) - 1
|
||||||
|
- - 2
|
||||||
|
Clear (Num Lock) - 2
|
||||||
|
|
||||||
|
U2 pin 18
|
||||||
|
Fn (#NAME?) - 2
|
||||||
|
* (<--) - 2
|
||||||
|
+ - 2
|
||||||
|
3 - 2
|
||||||
|
2 - 2
|
||||||
|
```
|
||||||
|
|
||||||
|
More info can be found on [GeekHack](https://geekhack.org/index.php?topic=73632.msg1802497#msg1802497)
|
||||||
|
|
||||||
|
The second ArrowPad was a conversion from a 21-key Genovation keypad. It used a 2 row x 11 column matrix.
|
||||||
|
|
||||||
|
```
|
||||||
|
#define KEYMAP( \
|
||||||
|
KM_ESC, KM_TAB, KM_BSL, KM_ARR, \
|
||||||
|
KM_NUM, KM_FSL, KM_AST, KM_MIN, \
|
||||||
|
KM___7, KM___8, KM___9, ___PLS, \
|
||||||
|
KM___4, KM___5, KM___6, KM_PLS, \
|
||||||
|
KM___1, KM___2, KM___3, ___ENT, \
|
||||||
|
KM___0, _____0, KM_DOT, KM_ENT \
|
||||||
|
) { \
|
||||||
|
{ KM_ESC, KM_TAB, KM_BSL, KM_ARR, KM___7, KM___8, KM___9, KM_PLS, KM___1, KM___2, KM___3, }, \
|
||||||
|
{ KM_NUM, KM_FSL, KM_AST, KM_MIN, KM___4, KM___5, KM___6, KM_ENT, KC_NO, KM___0, KM_DOT, }, \
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
## Quantum MK Firmware
|
## Quantum MK Firmware
|
||||||
|
|
||||||
For the full Quantum feature list, see [the parent readme.md](/readme.md).
|
For the full Quantum feature list, see [the parent readme.md](/readme.md).
|
||||||
|
|
||||||
## Building
|
## Building
|
||||||
|
|
||||||
Download or clone the whole firmware and navigate to the keyboards/arrow_pad folder. Once your dev env is setup, you'll be able to type `make` to generate your .hex - you can then use the Teensy Loader to program your .hex file.
|
Download or clone the whole firmware and navigate to the keyboards/arrow_pad folder. Once your dev env is setup, you'll be able to type `make` to generate your .hex - you can then use the Teensy Loader to program your .hex file.
|
||||||
|
|
||||||
Depending on which keymap you would like to use, you will have to compile slightly differently.
|
Depending on which keymap you would like to use, you will have to compile slightly differently.
|
||||||
|
|
||||||
### Default
|
### Default
|
||||||
To build with the default keymap, simply run `make`.
|
To build with the default keymap, simply run `make default`.
|
||||||
|
|
||||||
### Other Keymaps
|
### 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 file named `<name>.c` in the keymaps folder, and see keymap document (you can find in top readme.md) and existent keymap files.
|
Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create file named `<name>.c` in the keymaps folder, 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 `KEYMAP` option like:
|
To build the firmware binary hex file with a keymap just do `make` with a keymap like this:
|
||||||
|
|
||||||
```
|
```
|
||||||
$ make KEYMAP=[default|jack|<name>]
|
$ make [default|pad_21|pad_24|<name>]
|
||||||
```
|
```
|
||||||
Keymaps follow the format **__\<name\>.c__** and are stored in the `keymaps` folder.
|
|
||||||
|
Keymaps follow the format **__\<name\>.c__** and are stored in the `keymaps` folder.
|
||||||
|
|
70
keyboards/arrow_pad/rules.mk
Normal file
|
@ -0,0 +1,70 @@
|
||||||
|
|
||||||
|
|
||||||
|
# MCU name
|
||||||
|
#MCU = at90usb1287
|
||||||
|
MCU = atmega32u4
|
||||||
|
|
||||||
|
# Processor frequency.
|
||||||
|
# This will define a symbol, F_CPU, in all source code files equal to the
|
||||||
|
# processor frequency in Hz. You can then use this symbol in your source code to
|
||||||
|
# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
|
||||||
|
# automatically to create a 32-bit value in your source code.
|
||||||
|
#
|
||||||
|
# This will be an integer division of F_USB below, as it is sourced by
|
||||||
|
# F_USB after it has run through any CPU prescalers. Note that this value
|
||||||
|
# does not *change* the processor frequency - it should merely be updated to
|
||||||
|
# reflect the processor speed set externally so that the code can use accurate
|
||||||
|
# software delays.
|
||||||
|
F_CPU = 16000000
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
# LUFA specific
|
||||||
|
#
|
||||||
|
# Target architecture (see library "Board Types" documentation).
|
||||||
|
ARCH = AVR8
|
||||||
|
|
||||||
|
# Input clock frequency.
|
||||||
|
# This will define a symbol, F_USB, in all source code files equal to the
|
||||||
|
# input clock frequency (before any prescaling is performed) in Hz. This value may
|
||||||
|
# differ from F_CPU if prescaling is used on the latter, and is required as the
|
||||||
|
# raw input clock is fed directly to the PLL sections of the AVR for high speed
|
||||||
|
# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
|
||||||
|
# at the end, this will be done automatically to create a 32-bit value in your
|
||||||
|
# source code.
|
||||||
|
#
|
||||||
|
# If no clock division is performed on the input clock inside the AVR (via the
|
||||||
|
# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
|
||||||
|
F_USB = $(F_CPU)
|
||||||
|
|
||||||
|
# Interrupt driven control endpoint task(+60)
|
||||||
|
OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
|
||||||
|
|
||||||
|
|
||||||
|
# Boot Section Size in *bytes*
|
||||||
|
# Teensy halfKay 512
|
||||||
|
# Teensy++ halfKay 1024
|
||||||
|
# Atmel DFU loader 4096
|
||||||
|
# LUFA bootloader 4096
|
||||||
|
# USBaspLoader 2048
|
||||||
|
OPT_DEFS += -DBOOTLOADER_SIZE=512
|
||||||
|
|
||||||
|
|
||||||
|
# Build Options
|
||||||
|
# change yes to no to disable
|
||||||
|
#
|
||||||
|
BOOTMAGIC_ENABLE ?= yes # Virtual DIP switch configuration(+1000)
|
||||||
|
MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700)
|
||||||
|
EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450)
|
||||||
|
CONSOLE_ENABLE ?= yes # Console for debug(+400)
|
||||||
|
COMMAND_ENABLE ?= yes # Commands for debug and configuration
|
||||||
|
KEYBOARD_LOCK_ENABLE ?= yes # Allow locking of keyboard via magic key
|
||||||
|
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
|
||||||
|
SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend
|
||||||
|
# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
|
||||||
|
NKRO_ENABLE ?= yes # USB Nkey Rollover
|
||||||
|
BACKLIGHT_ENABLE ?= yes # Enable keyboard backlight functionality
|
||||||
|
MIDI_ENABLE ?= no # MIDI controls
|
||||||
|
UNICODE_ENABLE ?= no # Unicode
|
||||||
|
BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID
|
||||||
|
AUDIO_ENABLE ?= no # Audio output on port C6
|
|
@ -1,73 +1,3 @@
|
||||||
|
ifndef MAKEFILE_INCLUDED
|
||||||
|
|
||||||
# MCU name
|
|
||||||
#MCU = at90usb1287
|
|
||||||
MCU = atmega32u4
|
|
||||||
|
|
||||||
# Processor frequency.
|
|
||||||
# This will define a symbol, F_CPU, in all source code files equal to the
|
|
||||||
# processor frequency in Hz. You can then use this symbol in your source code to
|
|
||||||
# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
|
|
||||||
# automatically to create a 32-bit value in your source code.
|
|
||||||
#
|
|
||||||
# This will be an integer division of F_USB below, as it is sourced by
|
|
||||||
# F_USB after it has run through any CPU prescalers. Note that this value
|
|
||||||
# does not *change* the processor frequency - it should merely be updated to
|
|
||||||
# reflect the processor speed set externally so that the code can use accurate
|
|
||||||
# software delays.
|
|
||||||
F_CPU = 16000000
|
|
||||||
|
|
||||||
#
|
|
||||||
# LUFA specific
|
|
||||||
#
|
|
||||||
# Target architecture (see library "Board Types" documentation).
|
|
||||||
ARCH = AVR8
|
|
||||||
|
|
||||||
# Input clock frequency.
|
|
||||||
# This will define a symbol, F_USB, in all source code files equal to the
|
|
||||||
# input clock frequency (before any prescaling is performed) in Hz. This value may
|
|
||||||
# differ from F_CPU if prescaling is used on the latter, and is required as the
|
|
||||||
# raw input clock is fed directly to the PLL sections of the AVR for high speed
|
|
||||||
# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
|
|
||||||
# at the end, this will be done automatically to create a 32-bit value in your
|
|
||||||
# source code.
|
|
||||||
#
|
|
||||||
# If no clock division is performed on the input clock inside the AVR (via the
|
|
||||||
# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
|
|
||||||
F_USB = $(F_CPU)
|
|
||||||
|
|
||||||
# Interrupt driven control endpoint task(+60)
|
|
||||||
OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
|
|
||||||
|
|
||||||
|
|
||||||
# Boot Section Size in *bytes*
|
|
||||||
# Teensy halfKay 512
|
|
||||||
# Teensy++ halfKay 1024
|
|
||||||
# Atmel DFU loader 4096
|
|
||||||
# LUFA bootloader 4096
|
|
||||||
# USBaspLoader 2048
|
|
||||||
OPT_DEFS += -DBOOTLOADER_SIZE=4096
|
|
||||||
|
|
||||||
# Build Options
|
|
||||||
# change to "no" to disable the options, or define them in the Makefile in
|
|
||||||
# the appropriate keymap folder that will get included automatically
|
|
||||||
#
|
|
||||||
BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration(+1000)
|
|
||||||
MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700)
|
|
||||||
EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450)
|
|
||||||
CONSOLE_ENABLE ?= no # Console for debug(+400)
|
|
||||||
COMMAND_ENABLE ?= yes # Commands for debug and configuration
|
|
||||||
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
|
|
||||||
MIDI_ENABLE ?= no # MIDI controls
|
|
||||||
AUDIO_ENABLE ?= no # Audio output on port C6
|
|
||||||
UNICODE_ENABLE ?= no # Unicode
|
|
||||||
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.
|
|
||||||
|
|
||||||
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
|
|
||||||
SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend
|
|
||||||
|
|
||||||
ifndef QUANTUM_DIR
|
|
||||||
include ../../Makefile
|
include ../../Makefile
|
||||||
endif
|
endif
|
|
@ -1,7 +1,7 @@
|
||||||
BOOTMAGIC_ENABLE = yes # 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 = yes # Console for debug(+400)
|
||||||
COMMAND_ENABLE = yes # Commands for debug and configuration
|
COMMAND_ENABLE = yes # 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 = yes # Enable keyboard backlight functionality
|
BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
|
||||||
|
|
|
@ -150,10 +150,17 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* disable debug print */
|
/* disable debug print */
|
||||||
//#define NO_DEBUG
|
#ifndef NO_DEBUG
|
||||||
|
# define NO_DEBUG
|
||||||
|
#endif
|
||||||
|
|
||||||
/* disable print */
|
/* disable print */
|
||||||
//#define NO_PRINT
|
// #ifndef NO_PRINT
|
||||||
|
// # define NO_PRINT
|
||||||
|
// #endif
|
||||||
|
|
||||||
|
/* Only print user print statements */
|
||||||
|
#define USER_PRINT
|
||||||
|
|
||||||
/* disable action features */
|
/* disable action features */
|
||||||
//#define NO_ACTION_LAYER
|
//#define NO_ACTION_LAYER
|
||||||
|
|
|
@ -2,48 +2,59 @@
|
||||||
#include "action_layer.h"
|
#include "action_layer.h"
|
||||||
#include "eeconfig.h"
|
#include "eeconfig.h"
|
||||||
#include "led.h"
|
#include "led.h"
|
||||||
|
#include "mousekey.h"
|
||||||
|
|
||||||
#ifdef AUDIO_ENABLE
|
#ifdef AUDIO_ENABLE
|
||||||
#include "audio.h"
|
#include "audio.h"
|
||||||
#include "song_list.h"
|
#include "song_list.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define LAYER_QWERTY 0
|
enum keyboard_layers {
|
||||||
#define LAYER_COLEMAK 1
|
LAYER_QWERTY = 0,
|
||||||
#define LAYER_DVORAK 2
|
LAYER_UPPER,
|
||||||
#define LAYER_UPPER 3
|
LAYER_LOWER,
|
||||||
#define LAYER_LOWER 4
|
LAYER_FUNCTION,
|
||||||
#define LAYER_FUNCTION 5
|
LAYER_MOUSE,
|
||||||
#define LAYER_MOUSE 6
|
LAYER_ADJUST,
|
||||||
#define LAYER_ADJUST 7
|
};
|
||||||
|
enum keyboard_macros {
|
||||||
#define MACRO_QWERTY 0
|
MACRO_QWERTY = 0,
|
||||||
#define MACRO_COLEMAK 1
|
MACRO_UPPER,
|
||||||
#define MACRO_DVORAK 2
|
MACRO_LOWER,
|
||||||
#define MACRO_UPPER 3
|
MACRO_FUNCTION,
|
||||||
#define MACRO_LOWER 4
|
MACRO_MOUSE,
|
||||||
#define MACRO_FUNCTION 5
|
MACRO_TIMBRE_1,
|
||||||
#define MACRO_MOUSE 6
|
MACRO_TIMBRE_2,
|
||||||
#define MACRO_TIMBRE_1 7
|
MACRO_TIMBRE_3,
|
||||||
#define MACRO_TIMBRE_2 8
|
MACRO_TIMBRE_4,
|
||||||
#define MACRO_TIMBRE_3 9
|
MACRO_TEMPO_U,
|
||||||
#define MACRO_TIMBRE_4 10
|
MACRO_TEMPO_D,
|
||||||
#define MACRO_TEMPO_U 11
|
MACRO_TONE_DEFAULT,
|
||||||
#define MACRO_TEMPO_D 12
|
MACRO_MUSIC_TOGGLE,
|
||||||
#define MACRO_TONE_DEFAULT 13
|
MACRO_AUDIO_TOGGLE,
|
||||||
#define MACRO_MUSIC_TOGGLE 14
|
MACRO_INC_VOICE,
|
||||||
#define MACRO_AUDIO_TOGGLE 16
|
MACRO_DEC_VOICE,
|
||||||
#define MACRO_INC_VOICE 18
|
MACRO_BACKLIGHT,
|
||||||
#define MACRO_DEC_VOICE 19
|
MACRO_BREATH_TOGGLE,
|
||||||
#define MACRO_BACKLIGHT 20
|
MACRO_BREATH_SPEED_INC,
|
||||||
#define MACRO_BREATH_TOGGLE 21
|
MACRO_BREATH_SPEED_DEC,
|
||||||
#define MACRO_BREATH_SPEED_INC 23
|
MACRO_BREATH_DEFAULT,
|
||||||
#define MACRO_BREATH_SPEED_DEC 24
|
MACRO_MOUSE_MOVE_UL,
|
||||||
#define MACRO_BREATH_DEFAULT 25
|
MACRO_MOUSE_MOVE_UR,
|
||||||
|
MACRO_MOUSE_MOVE_DL,
|
||||||
|
MACRO_MOUSE_MOVE_DR,
|
||||||
|
MACRO_HELP_1,
|
||||||
|
MACRO_HELP_2,
|
||||||
|
MACRO_HELP_3,
|
||||||
|
MACRO_HELP_4,
|
||||||
|
MACRO_HELP_5,
|
||||||
|
MACRO_HELP_6,
|
||||||
|
MACRO_HELP_7,
|
||||||
|
MACRO_HELP_8,
|
||||||
|
MACRO_HELP_9,
|
||||||
|
};
|
||||||
|
|
||||||
#define M_QWRTY M(MACRO_QWERTY)
|
#define M_QWRTY M(MACRO_QWERTY)
|
||||||
#define M_COLMK M(MACRO_COLEMAK)
|
|
||||||
#define M_DVORK M(MACRO_DVORAK)
|
|
||||||
#define M_UPPER M(MACRO_UPPER)
|
#define M_UPPER M(MACRO_UPPER)
|
||||||
#define M_LOWER M(MACRO_LOWER)
|
#define M_LOWER M(MACRO_LOWER)
|
||||||
#define M_FUNCT M(MACRO_FUNCTION)
|
#define M_FUNCT M(MACRO_FUNCTION)
|
||||||
|
@ -60,6 +71,19 @@
|
||||||
#define M_BSPDU M(MACRO_BREATH_SPEED_INC)
|
#define M_BSPDU M(MACRO_BREATH_SPEED_INC)
|
||||||
#define M_BSPDD M(MACRO_BREATH_SPEED_DEC)
|
#define M_BSPDD M(MACRO_BREATH_SPEED_DEC)
|
||||||
#define M_BDFLT M(MACRO_BREATH_DEFAULT)
|
#define M_BDFLT M(MACRO_BREATH_DEFAULT)
|
||||||
|
#define M_MS_UL M(MACRO_MOUSE_MOVE_UL)
|
||||||
|
#define M_MS_UR M(MACRO_MOUSE_MOVE_UR)
|
||||||
|
#define M_MS_DL M(MACRO_MOUSE_MOVE_DL)
|
||||||
|
#define M_MS_DR M(MACRO_MOUSE_MOVE_DR)
|
||||||
|
#define M_HELP1 M(MACRO_HELP_1)
|
||||||
|
#define M_HELP2 M(MACRO_HELP_2)
|
||||||
|
#define M_HELP3 M(MACRO_HELP_3)
|
||||||
|
#define M_HELP4 M(MACRO_HELP_4)
|
||||||
|
#define M_HELP5 M(MACRO_HELP_5)
|
||||||
|
#define M_HELP6 M(MACRO_HELP_6)
|
||||||
|
#define M_HELP7 M(MACRO_HELP_7)
|
||||||
|
#define M_HELP8 M(MACRO_HELP_8)
|
||||||
|
#define M_HELP9 M(MACRO_HELP_9)
|
||||||
|
|
||||||
|
|
||||||
#define VC_UP M(MACRO_INC_VOICE)
|
#define VC_UP M(MACRO_INC_VOICE)
|
||||||
|
@ -77,6 +101,7 @@
|
||||||
#define SC_ACLS LALT(KC_F4)
|
#define SC_ACLS LALT(KC_F4)
|
||||||
#define SC_CCLS LCTL(KC_F4)
|
#define SC_CCLS LCTL(KC_F4)
|
||||||
|
|
||||||
|
#define TG_NKRO MAGIC_TOGGLE_NKRO
|
||||||
#define OS_SHFT KC_FN0
|
#define OS_SHFT KC_FN0
|
||||||
|
|
||||||
#define _______ KC_TRNS
|
#define _______ KC_TRNS
|
||||||
|
@ -86,169 +111,126 @@
|
||||||
|
|
||||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
|
||||||
/* QWERTY
|
/* LAYER = LAYER_QWERTY
|
||||||
* .---------------------------------------------------------------------------------------------------------------------- 2u ------------.
|
.--------------------------------------------------------------------------------------------------------------------------------------.
|
||||||
* | ESC | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | XXXXXX . BACKSP |
|
| ESC | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | BACKSP . BACKSP |
|
||||||
* |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------|
|
|--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
|
||||||
* | TAB | Q | W | E | R | T | Y | U | I | O | P | [ | ] | \ | DEL |
|
| TAB | Q | W | E | R | T | Y | U | I | O | P | [ | ] | \ | DEL |
|
||||||
* |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ------------+--------|
|
|--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
|
||||||
* | CAPS | A | S | D | F | G | H | J | K | L | ; | ' | XXXXXX . ENTER | PG UP |
|
| CAP LK | A | S | D | F | G | H | J | K | L | ; | ' | ENTER . ENTER | PG UP |
|
||||||
* |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ---------------------+--------|
|
|--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
|
||||||
* | LSHIFT | Z | X | C | V | B | N | M | , | . | / | XXXXXX . RSHIFT | UP | PG DN |
|
| LSHIFT | Z | X | C | V | B | N | M | , | . | / | RSHIFT . RSHIFT | UP | PG DN |
|
||||||
* |--------+--------+--------+--------+--------+- 2u ------------+--------+--------+--------+--------+-----------------+--------+--------|
|
|--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
|
||||||
* | LCTRL | LWIN | FN | LALT | UPPER | XXXXXX . SPACE | LOWER | SHIFT | RALT | APP | RCTRL | LEFT | DOWN | RIGHT |
|
| LCTRL | LWIN | FN | LALT | UPPER | SPACE . SPACE | LOWER | OSHIFT | RALT | APP | RCTRL | LEFT | DOWN | RIGHT |
|
||||||
* '--------------------------------------------------------------------------------------------------------------------------------------'
|
'--------------------------------------------------------------------------------------------------------------------------------------'
|
||||||
*/
|
|
||||||
|
|
||||||
[LAYER_QWERTY] = { // QWERTY
|
|
||||||
{ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC },
|
|
||||||
{ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL },
|
|
||||||
{ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_ENT, KC_PGUP },
|
|
||||||
{ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_RSFT, KC_UP, KC_PGDN },
|
|
||||||
{ KC_LCTL, KC_LGUI, M_FUNCT, KC_LALT, M_UPPER, KC_SPC, KC_SPC, M_LOWER, OS_SHFT, KC_RALT, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT },
|
|
||||||
},
|
|
||||||
|
|
||||||
/* COLEMAK
|
|
||||||
* .---------------------------------------------------------------------------------------------------------------------- 2u ------------.
|
|
||||||
* | ESC | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | XXXXXX . BACKSP |
|
|
||||||
* |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------|
|
|
||||||
* | TAB | Q | W | F | P | G | J | L | U | Y | ; | [ | ] | \ | DEL |
|
|
||||||
* |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ------------+--------|
|
|
||||||
* | BACKSP | A | R | S | T | D | H | N | E | I | O | ' | XXXXXX . ENTER | PG UP |
|
|
||||||
* |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ---------------------+--------|
|
|
||||||
* | LSHIFT | Z | X | C | V | B | K | M | , | . | / | XXXXXX . RSHIFT | UP | PG DN |
|
|
||||||
* |--------+--------+--------+--------+--------+- 2u ------------+--------+--------+--------+--------+-----------------+--------+--------|
|
|
||||||
* | LCTRL | LWIN | FN | LALT | UPPER | XXXXXX . SPACE | LOWER | SHIFT | RALT | APP | RCTRL | LEFT | DOWN | RIGHT |
|
|
||||||
* '--------------------------------------------------------------------------------------------------------------------------------------'
|
|
||||||
*/
|
|
||||||
|
|
||||||
[LAYER_COLEMAK] = { // COLEMAK
|
|
||||||
{ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC },
|
|
||||||
{ KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL },
|
|
||||||
{ KC_BSPC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, KC_ENT, KC_ENT, KC_PGUP },
|
|
||||||
{ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_RSFT, KC_UP, KC_PGDN },
|
|
||||||
{ KC_LCTL, KC_LGUI, M_FUNCT, KC_LALT, M_UPPER, KC_SPC, KC_SPC, M_LOWER, OS_SHFT, KC_RALT, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT },
|
|
||||||
},
|
|
||||||
|
|
||||||
/* DVORAK
|
|
||||||
* .---------------------------------------------------------------------------------------------------------------------- 2u ------------.
|
|
||||||
* | ESC | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | [ | ] | XXXXXX . BACKSP |
|
|
||||||
* |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------|
|
|
||||||
* | TAB | ' | , | . | P | Y | F | G | C | R | L | / | = | \ | DEL |
|
|
||||||
* |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ------------+--------|
|
|
||||||
* | CAPS | A | O | E | U | I | D | H | T | N | S | - | XXXXXX . ENTER | PG UP |
|
|
||||||
* |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ---------------------+--------|
|
|
||||||
* | LSHIFT | ; | Q | J | K | X | B | M | W | V | Z | XXXXXX . RSHIFT | UP | PG DN |
|
|
||||||
* |--------+--------+--------+--------+--------+- 2u ------------+--------+--------+--------+--------+-----------------+--------+--------|
|
|
||||||
* | LCTRL | LWIN | FN | LALT | UPPER | XXXXXX . SPACE | LOWER | SHIFT | RALT | APP | RCTRL | LEFT | DOWN | RIGHT |
|
|
||||||
* '--------------------------------------------------------------------------------------------------------------------------------------'
|
|
||||||
*/
|
|
||||||
|
|
||||||
[LAYER_DVORAK] = { // DVORAK
|
|
||||||
{ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_LBRC, KC_RBRC, KC_BSPC, KC_BSPC },
|
|
||||||
{ KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_SLSH, KC_EQL, KC_BSLS, KC_DEL },
|
|
||||||
{ KC_CAPS, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS, KC_ENT, KC_ENT, KC_PGUP },
|
|
||||||
{ KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_RSFT, KC_RSFT, KC_UP, KC_PGDN },
|
|
||||||
{ KC_LCTL, KC_LGUI, M_FUNCT, KC_LALT, M_UPPER, KC_SPC, KC_SPC, M_LOWER, OS_SHFT, KC_RALT, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT },
|
|
||||||
},
|
|
||||||
|
|
||||||
/* UPPER
|
|
||||||
* .---------------------------------------------------------------------------------------------------------------------- 2u ------------.
|
|
||||||
* | PRINT | BR TOG | BR SP+ | BR SP- | BR RST | XXXXXX | XXXXXX | NUM LK | / | * | | NUM LK | SCR LK | XXXXXX . PAUSE |
|
|
||||||
* |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------|
|
|
||||||
* | | F1 | F2 | F3 | F4 | | | 7 | 8 | 9 | - | | | | INS |
|
|
||||||
* |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ------------+--------|
|
|
||||||
* | CAP LK | F5 | F6 | F7 | F8 | | | 4 | 5 | 6 | + | | XXXXXX . | HOME |
|
|
||||||
* |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ---------------------+--------|
|
|
||||||
* | | F9 | F10 | F11 | F12 | | | 1 | 2 | 3 | ENTER | XXXXXX . | | END |
|
|
||||||
* |--------+--------+--------+--------+--------+- 2u ------------+--------+--------+--------+--------+-----------------+--------+--------|
|
|
||||||
* | | | | | | 0 | | RALT | . | ENTER | | | | |
|
|
||||||
* '--------------------------------------------------------------------------------------------------------------------------------------'
|
|
||||||
*/
|
|
||||||
|
|
||||||
[LAYER_UPPER] = { // UPPER
|
|
||||||
{ KC_PSCR, M_BRTOG, M_BSPDU, M_BSPDD, M_BDFLT, XXXXXXX, XXXXXXX, KC_NLCK, KC_PSLS, KC_PAST, XXXXXXX, XXXXXXX, KC_SLCK, KC_PAUS, KC_PAUS },
|
|
||||||
{ _______, KC_F1, KC_F2, KC_F3, KC_F4, XXXXXXX, XXXXXXX, KC_KP_7, KC_KP_8, KC_KP_9, KC_PMNS, _______, _______, _______, KC_INS },
|
|
||||||
{ KC_CAPS, KC_F5, KC_F6, KC_F7, KC_F8, XXXXXXX, XXXXXXX, KC_KP_4, KC_KP_5, KC_KP_6, KC_PPLS, _______, ________________, KC_HOME },
|
|
||||||
{ _______, KC_F9, KC_F10, KC_F11, KC_F12, XXXXXXX, XXXXXXX, KC_KP_1, KC_KP_2, KC_KP_3, KC_PENT, ________________, _______, KC_END },
|
|
||||||
{ _______, _______, _______, _______, _______, KC_KP_0, KC_KP_0, _______, KC_RALT, KC_PDOT, KC_PENT, _______, _______, _______, _______ },
|
|
||||||
},
|
|
||||||
|
|
||||||
/* LOWER
|
|
||||||
* .---------------------------------------------------------------------------------------------------------------------- 2u ------------.
|
|
||||||
* | | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | XXXXXX . BACKSP |
|
|
||||||
* |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------|
|
|
||||||
* | | $ | { | [ | ( | % | # | ) | ] | } | @ | | | | INS |
|
|
||||||
* |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ------------+--------|
|
|
||||||
* | | ^ | * | + | - | / | \ | _ | ' | " | ` | | XXXXXX . | HOME |
|
|
||||||
* |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ---------------------+--------|
|
|
||||||
* | | | | & | ! | ~ | ; | : | = | < | > | ? | XXXXXX . | | END |
|
|
||||||
* |--------+--------+--------+--------+--------+- 2u ------------+--------+--------+--------+--------+-----------------+--------+--------|
|
|
||||||
* | | | | | | | | | | | | | | |
|
|
||||||
* '--------------------------------------------------------------------------------------------------------------------------------------'
|
|
||||||
*/
|
|
||||||
|
|
||||||
[LAYER_LOWER] = { // LOWER
|
|
||||||
{ _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, ________________ },
|
|
||||||
{ _______, KC_DLR, KC_LCBR, KC_LBRC, KC_LPRN, KC_PERC, KC_HASH, KC_RPRN, KC_RBRC, KC_RCBR, KC_AT, _______, _______, _______, KC_INS },
|
|
||||||
{ _______, KC_CIRC, KC_ASTR, KC_PPLS, KC_PMNS, KC_SLSH, KC_BSLS, KC_UNDS, KC_QUOT, KC_DQT, KC_GRV, _______, ________________, KC_HOME },
|
|
||||||
{ _______, KC_PIPE, KC_AMPR, KC_EXLM, KC_TILD, KC_SCLN, KC_COLN, KC_EQL, KC_LT, KC_GT, KC_QUES, ________________, _______, KC_END },
|
|
||||||
{ _______, _______, _______, _______, _______, ________________, _______, _______, _______, _______, _______, _______, _______, _______ },
|
|
||||||
},
|
|
||||||
|
|
||||||
/* FUNCTION
|
|
||||||
* .---------------------------------------------------------------------------------------------------------------------- 2u ------------.
|
|
||||||
* | NUM LK | | | | | | | | | | | | | XXXXXX . |
|
|
||||||
* |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------|
|
|
||||||
* | SCR LK | F13 | F14 | F15 | F16 | | | | | | | | | | |
|
|
||||||
* |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ------------+--------|
|
|
||||||
* | CAP LK | F17 | F18 | F19 | F20 | | | | | | | | XXXXXX . | |
|
|
||||||
* |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ---------------------+--------|
|
|
||||||
* | | F21 | F22 | F23 | F24 | | | | | | | XXXXXX . | VOL UP | MUTE |
|
|
||||||
* |--------+--------+--------+--------+--------+- 2u ------------+--------+--------+--------+--------+-----------------+--------+--------|
|
|
||||||
* | | | | | | PLAY/PAUSE | | | | | | PTRACK | VOL DN | NTRACK |
|
|
||||||
* '--------------------------------------------------------------------------------------------------------------------------------------'
|
|
||||||
*/
|
|
||||||
|
|
||||||
[LAYER_FUNCTION] = { // FUNCTION
|
|
||||||
{ KC_NLCK, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXXXXXXXXXXX },
|
|
||||||
{ KC_SLCK, KC_F13, KC_F14, KC_F15, KC_F16, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX },
|
|
||||||
{ KC_CAPS, KC_F17, KC_F18, KC_F19, KC_F20, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXXXXXXXXXXX, XXXXXXX },
|
|
||||||
{ _______, KC_F21, KC_F22, KC_F23, KC_F24, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, ________________, KC_VOLU, KC_MUTE },
|
|
||||||
{ _______, _______, _______, _______, _______, KC_MPLY, KC_MPLY, _______, _______, _______, _______, _______, KC_MPRV, KC_VOLD, KC_MNXT },
|
|
||||||
},
|
|
||||||
|
|
||||||
#ifdef MOUSEKEY_ENABLE
|
|
||||||
|
|
||||||
[LAYER_MOUSE] = { // MOUSE
|
|
||||||
{ _______, KC_ACL0, KC_ACL1, KC_ACL2, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXXXXXXXXXXX },
|
|
||||||
{ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX },
|
|
||||||
{ XXXXXXX, KC_BTN5, KC_BTN4, KC_BTN3, KC_BTN2, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXXXXXXXXXXX, KC_WH_U },
|
|
||||||
{ _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, ________________, KC_MS_U, KC_WH_D },
|
|
||||||
{ _______, _______, _______, _______, _______, KC_BTN1, KC_BTN1, _______, _______, _______, _______, _______, KC_MS_L, KC_MS_D, KC_MS_R },
|
|
||||||
},
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
[LAYER_ADJUST] = { // ADJUST
|
|
||||||
{ _______, TIMBR_1, TIMBR_2, TIMBR_3, TIMBR_4, TMPO_UP, TMPO_DN, TMPO_DF, _______, _______, _______, MU_TOG, AU_TOG, ________________ },
|
|
||||||
{ _______, M_QWRTY, M_COLMK, M_DVORK, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ },
|
|
||||||
{ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, ________________, _______ },
|
|
||||||
{ _______, _______, _______, _______, M_BACKL, RESET, _______, M_MOUSE, _______, _______, _______, ________________, MUV_IN, _______ },
|
|
||||||
{ _______, _______, _______, _______, _______, ________________, _______, _______, _______, _______, _______, _______, MUV_DE, _______ },
|
|
||||||
},
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
[LAYER_EMPTY] = { // LAYER
|
|
||||||
{ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, ________________ },
|
|
||||||
{ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ },
|
|
||||||
{ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, ________________, _______ },
|
|
||||||
{ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, ________________, _______, _______ },
|
|
||||||
{ _______, _______, _______, _______, _______, ________________, _______, _______, _______, _______, _______, _______, _______, _______ },
|
|
||||||
},
|
|
||||||
*/
|
*/
|
||||||
|
[LAYER_QWERTY] = {
|
||||||
|
{ KC_ESC , KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , KC_MINS, KC_EQL , KC_BSPC, KC_BSPC },
|
||||||
|
{ KC_TAB , KC_Q , KC_W , KC_E , KC_R , KC_T , KC_Y , KC_U , KC_I , KC_O , KC_P , KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL },
|
||||||
|
{ KC_CAPS, KC_A , KC_S , KC_D , KC_F , KC_G , KC_H , KC_J , KC_K , KC_L , KC_SCLN, KC_QUOT, KC_ENT , KC_ENT , KC_PGUP },
|
||||||
|
{ KC_LSFT, KC_Z , KC_X , KC_C , KC_V , KC_B , KC_N , KC_M , KC_COMM, KC_DOT , KC_SLSH, KC_RSFT, KC_RSFT, KC_UP , KC_PGDN },
|
||||||
|
{ KC_LCTL, KC_LGUI, M_FUNCT, KC_LALT, M_UPPER, KC_SPC , KC_SPC , M_LOWER, OS_SHFT, KC_RALT, KC_APP , KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT }
|
||||||
|
},
|
||||||
|
/* LAYER = LAYER_UPPER
|
||||||
|
.--------------------------------------------------------------------------------------------------------------------------------------.
|
||||||
|
| PRINT | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | NUM LK | KP / | KP * | KP - | XXXXXX | XXXXXX | ______ . ______ |
|
||||||
|
|--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
|
||||||
|
| PAUSE | F1 | F2 | F3 | F4 | NUM LK | KP / | KP 7 | KP 8 | KP 9 | KP - | ______ | ______ | ______ | INS |
|
||||||
|
|--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
|
||||||
|
| ______ | F5 | F6 | F7 | F8 | CAP LK | KP * | KP 4 | KP 5 | KP 6 | KP + | ______ | ______ . ______ | HOME |
|
||||||
|
|--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
|
||||||
|
| ______ | F9 | F10 | F11 | F12 | SCR LK | KP 0 | KP 1 | KP 2 | KP 3 | KP ENT | ______ . ______ | ______ | END |
|
||||||
|
|--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
|
||||||
|
| ______ | ______ | ______ | ______ | UPPER | KP 0 . KP 0 | ______ | RALT | KP . | KP ENT | ______ | ______ | ______ | ______ |
|
||||||
|
'--------------------------------------------------------------------------------------------------------------------------------------'
|
||||||
|
*/
|
||||||
|
[LAYER_UPPER] = {
|
||||||
|
{ KC_PSCR, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS, XXXXXXX, XXXXXXX, _______, _______ },
|
||||||
|
{ KC_PAUS, KC_F1 , KC_F2 , KC_F3 , KC_F4 , KC_NLCK, KC_PSLS, KC_KP_7, KC_KP_8, KC_KP_9, KC_PMNS, _______, _______, _______, KC_INS },
|
||||||
|
{ _______, KC_F5 , KC_F6 , KC_F7 , KC_F8 , KC_CAPS, KC_PAST, KC_KP_4, KC_KP_5, KC_KP_6, KC_PPLS, _______, _______, _______, KC_HOME },
|
||||||
|
{ _______, KC_F9 , KC_F10 , KC_F11 , KC_F12 , KC_SLCK, KC_KP_0, KC_KP_1, KC_KP_2, KC_KP_3, KC_PENT, _______, _______, _______, KC_END },
|
||||||
|
{ _______, _______, _______, _______, M_UPPER, KC_KP_0, KC_KP_0, _______, KC_RALT, KC_PDOT, KC_PENT, _______, _______, _______, _______ }
|
||||||
|
},
|
||||||
|
/* LAYER = LAYER_LOWER
|
||||||
|
.--------------------------------------------------------------------------------------------------------------------------------------.
|
||||||
|
| PRINT | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | ______ . ______ |
|
||||||
|
|--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
|
||||||
|
| ______ | $ | { | [ | ( | % | # | ) | ] | } | @ | ______ | ______ | ______ | INS |
|
||||||
|
|--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
|
||||||
|
| ______ | ^ | * | + | - | / | \ | _ | ' | " | ` | ______ | ______ . ______ | HOME |
|
||||||
|
|--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
|
||||||
|
| ______ | | | & | ! | ~ | ; | : | = | < | > | ? | ______ . ______ | ______ | END |
|
||||||
|
|--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
|
||||||
|
| ______ | ______ | ______ | ______ | ______ | ______ . ______ | LOWER | ______ | ______ | ______ | ______ | ______ | ______ | ______ |
|
||||||
|
'--------------------------------------------------------------------------------------------------------------------------------------'
|
||||||
|
*/
|
||||||
|
[LAYER_LOWER] = {
|
||||||
|
{ KC_PSCR, KC_F1 , KC_F2 , KC_F3 , KC_F4 , KC_F5 , KC_F6 , KC_F7 , KC_F8 , KC_F9 , KC_F10 , KC_F11 , KC_F12 , _______, _______ },
|
||||||
|
{ _______, KC_DLR , KC_LCBR, KC_LBRC, KC_LPRN, KC_PERC, KC_HASH, KC_RPRN, KC_RBRC, KC_RCBR, KC_AT , _______, _______, _______, KC_INS },
|
||||||
|
{ _______, KC_CIRC, KC_ASTR, KC_PLUS, KC_MINS, KC_SLSH, KC_BSLS, KC_UNDS, KC_QUOT, KC_DQT , KC_GRV , _______, _______, _______, KC_HOME },
|
||||||
|
{ _______, KC_PIPE, KC_AMPR, KC_EXLM, KC_TILD, KC_SCLN, KC_COLN, KC_EQL , KC_LT , KC_GT , KC_QUES, _______, _______, _______, KC_END },
|
||||||
|
{ _______, _______, _______, _______, _______, _______, _______, M_LOWER, _______, _______, _______, _______, _______, _______, _______ }
|
||||||
|
},
|
||||||
|
/* LAYER = LAYER_FUNCTION
|
||||||
|
.--------------------------------------------------------------------------------------------------------------------------------------.
|
||||||
|
| XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX . XXXXXX |
|
||||||
|
|--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
|
||||||
|
| XXXXXX | F13 | F14 | F15 | F16 | NUM LK | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX |
|
||||||
|
|--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
|
||||||
|
| XXXXXX | F17 | F18 | F19 | F20 | SCR LK | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX . XXXXXX | XXXXXX |
|
||||||
|
|--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
|
||||||
|
| ______ | F21 | F22 | F23 | F24 | CAP LK | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | ______ . ______ | VOL UP | MUTE |
|
||||||
|
|--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
|
||||||
|
| ______ | ______ | FN | ______ | ______ | PLAY . PLAY | ______ | ______ | ______ | ______ | ______ | PREV | VOL DN | NEXT |
|
||||||
|
'--------------------------------------------------------------------------------------------------------------------------------------'
|
||||||
|
*/
|
||||||
|
[LAYER_FUNCTION] = {
|
||||||
|
{ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX },
|
||||||
|
{ XXXXXXX, KC_F13 , KC_F14 , KC_F15 , KC_F16 , KC_NLCK, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX },
|
||||||
|
{ XXXXXXX, KC_F17 , KC_F18 , KC_F19 , KC_F20 , KC_SLCK, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX },
|
||||||
|
{ _______, KC_F21 , KC_F22 , KC_F23 , KC_F24 , KC_CAPS, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, KC_VOLU, KC_MUTE },
|
||||||
|
{ _______, _______, M_FUNCT, _______, _______, KC_MPLY, KC_MPLY, _______, _______, _______, _______, _______, KC_MPRV, KC_VOLD, KC_MNXT }
|
||||||
|
},
|
||||||
|
/* LAYER = LAYER_MOUSE
|
||||||
|
.--------------------------------------------------------------------------------------------------------------------------------------.
|
||||||
|
| ESC | MS AC0 | MS AC1 | MS AC2 | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX . XXXXXX |
|
||||||
|
|--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
|
||||||
|
| XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | MS UL | MS U | MS UR | XXXXXX | XXXXXX | XXXXXX | MS WHL | MS WHR |
|
||||||
|
|--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
|
||||||
|
| XXXXXX | MS BT5 | MS BT4 | MS BT3 | MS BT2 | XXXXXX | XXXXXX | MS L | XXXXXX | MS R | XXXXXX | XXXXXX | XXXXXX . XXXXXX | MS WHU |
|
||||||
|
|--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
|
||||||
|
| ______ | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | MS DL | MS D | MS DR | XXXXXX | ______ . ______ | MS U | MS WHD |
|
||||||
|
|--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
|
||||||
|
| ______ | ______ | ______ | ______ | ______ | MS BT1 . MS BT1 | ______ | ______ | ______ | ______ | ______ | MS L | MS D | MS R |
|
||||||
|
'--------------------------------------------------------------------------------------------------------------------------------------'
|
||||||
|
*/
|
||||||
|
[LAYER_MOUSE] = {
|
||||||
|
{ KC_ESC , KC_ACL0, KC_ACL1, KC_ACL2, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX },
|
||||||
|
{ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, M_MS_UL, KC_MS_U, M_MS_UR, XXXXXXX, XXXXXXX, XXXXXXX, KC_WH_L, KC_WH_R },
|
||||||
|
{ XXXXXXX, KC_BTN5, KC_BTN4, KC_BTN3, KC_BTN2, XXXXXXX, XXXXXXX, KC_MS_L, XXXXXXX, KC_MS_R, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_WH_U },
|
||||||
|
{ _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, M_MS_DL, KC_MS_D, M_MS_DR, XXXXXXX, _______, _______, KC_MS_U, KC_WH_D },
|
||||||
|
{ _______, _______, _______, _______, _______, KC_BTN1, KC_BTN1, _______, _______, _______, _______, _______, KC_MS_L, KC_MS_D, KC_MS_R }
|
||||||
|
},
|
||||||
|
/* LAYER = LAYER_ADJUST
|
||||||
|
.--------------------------------------------------------------------------------------------------------------------------------------.
|
||||||
|
| XXXXXX | HELP 1 | HELP 2 | HELP 3 | HELP 4 | HELP 5 | HELP 6 | HELP 7 | HELP 8 | HELP 9 | XXXXXX | MUSIC | AUDIO | XXXXXX . XXXXXX |
|
||||||
|
|--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
|
||||||
|
| XXXXXX | BRTOG | BRSPD+ | BRSPD- | BRDFLT | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX |
|
||||||
|
|--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
|
||||||
|
| XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX . XXXXXX | XXXXXX |
|
||||||
|
|--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
|
||||||
|
| XXXXXX | QWERTY | XXXXXX | XXXXXX | BACKLT | RESET | XXXXXX | MOUSE | XXXXXX | XXXXXX | XXXXXX | XXXXXX . XXXXXX | VOICE+ | XXXXXX |
|
||||||
|
|--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
|
||||||
|
| XXXXXX | XXXXXX | XXXXXX | XXXXXX | UPPER | XXXXXX . XXXXXX | LOWER | XXXXXX | XXXXXX | XXXXXX | XXXXXX | TEMPO- | VOICE- | TEMPO+ |
|
||||||
|
'--------------------------------------------------------------------------------------------------------------------------------------'
|
||||||
|
*/
|
||||||
|
[LAYER_ADJUST] = {
|
||||||
|
{ XXXXXXX, M_HELP1, M_HELP2, M_HELP3, M_HELP4, M_HELP5, M_HELP6, M_HELP7, M_HELP8, M_HELP9, XXXXXXX, MU_TOG , AU_TOG , XXXXXXX, XXXXXXX },
|
||||||
|
{ XXXXXXX, M_BRTOG, M_BSPDU, M_BSPDD, M_BDFLT, 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, M_QWRTY, XXXXXXX, XXXXXXX, M_BACKL, RESET , XXXXXXX, M_MOUSE, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, MUV_IN , XXXXXXX },
|
||||||
|
{ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, M_UPPER, XXXXXXX, XXXXXXX, M_LOWER, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, TMPO_DN, MUV_DE , TMPO_UP }
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
#ifdef AUDIO_ENABLE
|
#ifdef AUDIO_ENABLE
|
||||||
|
@ -290,6 +272,69 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
|
||||||
switch(id)
|
switch(id)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
case MACRO_HELP_1:
|
||||||
|
if (record->event.pressed)
|
||||||
|
{
|
||||||
|
uprintf("1");
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case MACRO_HELP_2:
|
||||||
|
if (record->event.pressed)
|
||||||
|
{
|
||||||
|
uprintf("2");
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case MACRO_HELP_3:
|
||||||
|
if (record->event.pressed)
|
||||||
|
{
|
||||||
|
uprintf("3");
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case MACRO_HELP_4:
|
||||||
|
if (record->event.pressed)
|
||||||
|
{
|
||||||
|
uprintf("4");
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case MACRO_HELP_5:
|
||||||
|
if (record->event.pressed)
|
||||||
|
{
|
||||||
|
uprintf("5");
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case MACRO_HELP_6:
|
||||||
|
if (record->event.pressed)
|
||||||
|
{
|
||||||
|
uprintf("6");
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case MACRO_HELP_7:
|
||||||
|
if (record->event.pressed)
|
||||||
|
{
|
||||||
|
uprintf("7");
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case MACRO_HELP_8:
|
||||||
|
if (record->event.pressed)
|
||||||
|
{
|
||||||
|
uprintf("8");
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case MACRO_HELP_9:
|
||||||
|
if (record->event.pressed)
|
||||||
|
{
|
||||||
|
uprintf("9");
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
case MACRO_BREATH_TOGGLE:
|
case MACRO_BREATH_TOGGLE:
|
||||||
if (record->event.pressed)
|
if (record->event.pressed)
|
||||||
{
|
{
|
||||||
|
@ -322,29 +367,6 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
|
||||||
if (record->event.pressed)
|
if (record->event.pressed)
|
||||||
{
|
{
|
||||||
persistant_default_layer_set(1UL<<LAYER_QWERTY);
|
persistant_default_layer_set(1UL<<LAYER_QWERTY);
|
||||||
#ifdef AUDIO_ENABLE
|
|
||||||
PLAY_NOTE_ARRAY(tone_qwerty, false, STACCATO);
|
|
||||||
#endif /* AUDIO_ENABLE */
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case MACRO_COLEMAK:
|
|
||||||
if (record->event.pressed)
|
|
||||||
{
|
|
||||||
persistant_default_layer_set(1UL<<LAYER_COLEMAK);
|
|
||||||
#ifdef AUDIO_ENABLE
|
|
||||||
PLAY_NOTE_ARRAY(tone_colemak, false, STACCATO);
|
|
||||||
#endif /* AUDIO_ENABLE */
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case MACRO_DVORAK:
|
|
||||||
if (record->event.pressed)
|
|
||||||
{
|
|
||||||
persistant_default_layer_set(1UL<<LAYER_DVORAK);
|
|
||||||
#ifdef AUDIO_ENABLE
|
|
||||||
PLAY_NOTE_ARRAY(tone_dvorak, false, STACCATO);
|
|
||||||
#endif /* AUDIO_ENABLE */
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
|
@ -13,13 +13,14 @@ Download or clone the whole firmware and navigate to the keyboards/atomic folder
|
||||||
Depending on which keymap you would like to use, you will have to compile slightly differently.
|
Depending on which keymap you would like to use, you will have to compile slightly differently.
|
||||||
|
|
||||||
### Default
|
### Default
|
||||||
To build with the default keymap, simply run `make`.
|
To build with the default keymap, simply run `make default`.
|
||||||
|
|
||||||
### Other Keymaps
|
### 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.
|
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 `KEYMAP` option like:
|
To build the firmware binary hex file with a keymap just do `make` with a keymap like this:
|
||||||
|
|
||||||
```
|
```
|
||||||
$ make KEYMAP=[default|jack|<name>]
|
$ make [default|jack|<name>]
|
||||||
```
|
```
|
||||||
Keymaps follow the format **__\<name\>.c__** and are stored in the `keymaps` folder.
|
Keymaps follow the format **__\<name\>.c__** and are stored in the `keymaps` folder.
|
||||||
|
|
69
keyboards/atomic/rules.mk
Normal file
|
@ -0,0 +1,69 @@
|
||||||
|
|
||||||
|
|
||||||
|
# MCU name
|
||||||
|
#MCU = at90usb1287
|
||||||
|
MCU = atmega32u4
|
||||||
|
|
||||||
|
# Processor frequency.
|
||||||
|
# This will define a symbol, F_CPU, in all source code files equal to the
|
||||||
|
# processor frequency in Hz. You can then use this symbol in your source code to
|
||||||
|
# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
|
||||||
|
# automatically to create a 32-bit value in your source code.
|
||||||
|
#
|
||||||
|
# This will be an integer division of F_USB below, as it is sourced by
|
||||||
|
# F_USB after it has run through any CPU prescalers. Note that this value
|
||||||
|
# does not *change* the processor frequency - it should merely be updated to
|
||||||
|
# reflect the processor speed set externally so that the code can use accurate
|
||||||
|
# software delays.
|
||||||
|
F_CPU = 16000000
|
||||||
|
|
||||||
|
#
|
||||||
|
# LUFA specific
|
||||||
|
#
|
||||||
|
# Target architecture (see library "Board Types" documentation).
|
||||||
|
ARCH = AVR8
|
||||||
|
|
||||||
|
# Input clock frequency.
|
||||||
|
# This will define a symbol, F_USB, in all source code files equal to the
|
||||||
|
# input clock frequency (before any prescaling is performed) in Hz. This value may
|
||||||
|
# differ from F_CPU if prescaling is used on the latter, and is required as the
|
||||||
|
# raw input clock is fed directly to the PLL sections of the AVR for high speed
|
||||||
|
# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
|
||||||
|
# at the end, this will be done automatically to create a 32-bit value in your
|
||||||
|
# source code.
|
||||||
|
#
|
||||||
|
# If no clock division is performed on the input clock inside the AVR (via the
|
||||||
|
# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
|
||||||
|
F_USB = $(F_CPU)
|
||||||
|
|
||||||
|
# Interrupt driven control endpoint task(+60)
|
||||||
|
OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
|
||||||
|
|
||||||
|
|
||||||
|
# Boot Section Size in *bytes*
|
||||||
|
# Teensy halfKay 512
|
||||||
|
# Teensy++ halfKay 1024
|
||||||
|
# Atmel DFU loader 4096
|
||||||
|
# LUFA bootloader 4096
|
||||||
|
# USBaspLoader 2048
|
||||||
|
OPT_DEFS += -DBOOTLOADER_SIZE=4096
|
||||||
|
|
||||||
|
# Build Options
|
||||||
|
# change to "no" to disable the options, or define them in the Makefile in
|
||||||
|
# the appropriate keymap folder that will get included automatically
|
||||||
|
#
|
||||||
|
BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration(+1000)
|
||||||
|
MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700)
|
||||||
|
EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450)
|
||||||
|
CONSOLE_ENABLE ?= no # Console for debug(+400)
|
||||||
|
COMMAND_ENABLE ?= yes # Commands for debug and configuration
|
||||||
|
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
|
||||||
|
MIDI_ENABLE ?= no # MIDI controls
|
||||||
|
AUDIO_ENABLE ?= no # Audio output on port C6
|
||||||
|
UNICODE_ENABLE ?= no # Unicode
|
||||||
|
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.
|
||||||
|
|
||||||
|
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
|
||||||
|
SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend
|
|
@ -1,88 +1,3 @@
|
||||||
|
ifndef MAKEFILE_INCLUDED
|
||||||
|
|
||||||
ifdef TEENSY2
|
|
||||||
OPT_DEFS += -DATREUS_TEENSY2
|
|
||||||
ATREUS_UPLOAD_COMMAND = teensy_loader_cli -w -mmcu=$(MCU) $(TARGET).hex
|
|
||||||
else
|
|
||||||
OPT_DEFS += -DATREUS_ASTAR
|
|
||||||
OPT_DEFS += -DCATERINA_BOOTLOADER
|
|
||||||
ATREUS_UPLOAD_COMMAND = while [ ! -r $(USB) ]; do sleep 1; done; \
|
|
||||||
avrdude -p $(MCU) -c avr109 -U flash:w:$(TARGET).hex -P $(USB)
|
|
||||||
endif
|
|
||||||
|
|
||||||
# MCU name
|
|
||||||
#MCU = at90usb1287
|
|
||||||
MCU = atmega32u4
|
|
||||||
|
|
||||||
# Processor frequency.
|
|
||||||
# This will define a symbol, F_CPU, in all source code files equal to the
|
|
||||||
# processor frequency in Hz. You can then use this symbol in your source code to
|
|
||||||
# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
|
|
||||||
# automatically to create a 32-bit value in your source code.
|
|
||||||
#
|
|
||||||
# This will be an integer division of F_USB below, as it is sourced by
|
|
||||||
# F_USB after it has run through any CPU prescalers. Note that this value
|
|
||||||
# does not *change* the processor frequency - it should merely be updated to
|
|
||||||
# reflect the processor speed set externally so that the code can use accurate
|
|
||||||
# software delays.
|
|
||||||
F_CPU = 16000000
|
|
||||||
|
|
||||||
|
|
||||||
#
|
|
||||||
# LUFA specific
|
|
||||||
#
|
|
||||||
# Target architecture (see library "Board Types" documentation).
|
|
||||||
ARCH = AVR8
|
|
||||||
|
|
||||||
# Input clock frequency.
|
|
||||||
# This will define a symbol, F_USB, in all source code files equal to the
|
|
||||||
# input clock frequency (before any prescaling is performed) in Hz. This value may
|
|
||||||
# differ from F_CPU if prescaling is used on the latter, and is required as the
|
|
||||||
# raw input clock is fed directly to the PLL sections of the AVR for high speed
|
|
||||||
# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
|
|
||||||
# at the end, this will be done automatically to create a 32-bit value in your
|
|
||||||
# source code.
|
|
||||||
#
|
|
||||||
# If no clock division is performed on the input clock inside the AVR (via the
|
|
||||||
# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
|
|
||||||
F_USB = $(F_CPU)
|
|
||||||
|
|
||||||
# Interrupt driven control endpoint task(+60)
|
|
||||||
OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
|
|
||||||
|
|
||||||
|
|
||||||
# Boot Section Size in *bytes*
|
|
||||||
# Teensy halfKay 512
|
|
||||||
# Teensy++ halfKay 1024
|
|
||||||
# Atmel DFU loader 4096
|
|
||||||
# LUFA bootloader 4096
|
|
||||||
# USBaspLoader 2048
|
|
||||||
OPT_DEFS += -DBOOTLOADER_SIZE=4096
|
|
||||||
|
|
||||||
|
|
||||||
# Build Options
|
|
||||||
# comment out to disable the options.
|
|
||||||
#
|
|
||||||
#BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000)
|
|
||||||
MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700)
|
|
||||||
EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450)
|
|
||||||
CONSOLE_ENABLE ?= yes # Console for debug(+400)
|
|
||||||
COMMAND_ENABLE ?= yes # Commands for debug and configuration
|
|
||||||
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
|
|
||||||
# SLEEP_LED_ENABLE ?= yes # Breathing sleep LED during USB suspend
|
|
||||||
NKRO_ENABLE ?= yes # USB Nkey Rollover - not yet supported in LUFA
|
|
||||||
# BACKLIGHT_ENABLE ?= yes # Enable keyboard backlight functionality
|
|
||||||
# MIDI_ENABLE ?= YES # MIDI controls
|
|
||||||
UNICODE_ENABLE ?= YES # Unicode
|
|
||||||
# BLUETOOTH_ENABLE ?= yes # Enable Bluetooth with the Adafruit EZ-Key HID
|
|
||||||
|
|
||||||
|
|
||||||
ifndef QUANTUM_DIR
|
|
||||||
include ../../Makefile
|
include ../../Makefile
|
||||||
endif
|
endif
|
||||||
|
|
||||||
USB ?= /dev/cu.usbmodem1411
|
|
||||||
|
|
||||||
upload: build
|
|
||||||
$(ATREUS_UPLOAD_COMMAND)
|
|
||||||
|
|
|
@ -37,7 +37,11 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
// COLS: Left to right, ROWS: Top to bottom
|
// COLS: Left to right, ROWS: Top to bottom
|
||||||
#if defined(ATREUS_ASTAR)
|
#if defined(ATREUS_ASTAR)
|
||||||
# define MATRIX_ROW_PINS { D0, D1, D3, D2 }
|
# define MATRIX_ROW_PINS { D0, D1, D3, D2 }
|
||||||
|
#if defined(PCBDOWN)
|
||||||
|
# define MATRIX_COL_PINS { B7, D6, F7, F6, B6, D4, E6, B4, B5, C6, D7 }
|
||||||
|
#else
|
||||||
# define MATRIX_COL_PINS { D7, C6, B5, B4, E6, D4, B6, F6, F7, D6, B7 }
|
# define MATRIX_COL_PINS { D7, C6, B5, B4, E6, D4, B6, F6, F7, D6, B7 }
|
||||||
|
#endif
|
||||||
# define UNUSED_PINS
|
# define UNUSED_PINS
|
||||||
#elif defined(ATREUS_TEENSY2)
|
#elif defined(ATREUS_TEENSY2)
|
||||||
# define MATRIX_ROW_PINS { D0, D1, D2, D3 }
|
# define MATRIX_ROW_PINS { D0, D1, D2, D3 }
|
||||||
|
|
48
keyboards/atreus/keymaps/classic/keymap.c
Normal file
|
@ -0,0 +1,48 @@
|
||||||
|
#include "atreus.h"
|
||||||
|
|
||||||
|
// Each layer gets a name for readability, which is then used in the keymap matrix below.
|
||||||
|
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
|
||||||
|
// Layer names don't all need to be of the same length, obviously, and you can also skip them
|
||||||
|
// entirely and just use numbers.
|
||||||
|
#define _QW 0
|
||||||
|
#define _RS 1
|
||||||
|
#define _LW 2
|
||||||
|
|
||||||
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
[_QW] = { /* Qwerty */
|
||||||
|
{KC_Q, KC_W, KC_E, KC_R, KC_T, KC_TRNS, KC_Y, KC_U, KC_I, KC_O, KC_P },
|
||||||
|
{KC_A, KC_S, KC_D, KC_F, KC_G, KC_TRNS, KC_H, KC_J, KC_K, KC_L, KC_SCLN },
|
||||||
|
{KC_Z, KC_X, KC_C, KC_V, KC_B, KC_LALT, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH },
|
||||||
|
{KC_ESC, KC_TAB, KC_LGUI, KC_LSFT, KC_BSPC, KC_LCTL, KC_SPC, MO(_RS), KC_MINS, KC_QUOT, KC_ENT }
|
||||||
|
},
|
||||||
|
[_RS] = { /* [> RAISE <] */
|
||||||
|
{KC_EXLM, KC_AT, KC_LCBR, KC_RCBR, KC_PIPE, KC_TRNS, KC_PGUP, KC_7, KC_8, KC_9, KC_ASTR},
|
||||||
|
{KC_HASH, KC_DLR, KC_LPRN, KC_RPRN, KC_GRV, KC_TRNS, KC_PGDN, KC_4, KC_5, KC_6, KC_PLUS},
|
||||||
|
{KC_PERC, KC_CIRC, KC_LBRC, KC_RBRC, KC_TILD, KC_LALT, KC_AMPR, KC_1, KC_2, KC_3, KC_BSLS},
|
||||||
|
{TG(_LW), KC_INS, KC_LGUI, KC_LSFT, KC_BSPC, KC_LCTL, KC_SPC, KC_TRNS, KC_DOT, KC_0, KC_EQL}
|
||||||
|
},
|
||||||
|
[_LW] = { /* [> LOWER <] */
|
||||||
|
{KC_INS, KC_HOME, KC_UP, KC_END, KC_PGUP, KC_TRNS, KC_UP, KC_F7, KC_F8, KC_F9, KC_F10},
|
||||||
|
{KC_DELT, KC_LEFT, KC_DOWN, KC_RGHT, KC_DOWN, KC_TRNS, KC_DOWN, KC_F4, KC_F5, KC_F6, KC_F11},
|
||||||
|
{KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LALT, KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F12},
|
||||||
|
{KC_TRNS, KC_TRNS, KC_LGUI, KC_LSFT, KC_BSPC, KC_LCTL, KC_SPC, DF(_QW), KC_TRNS, KC_TRNS, RESET}
|
||||||
|
}};
|
||||||
|
|
||||||
|
const uint16_t PROGMEM fn_actions[] = {
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
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;
|
||||||
|
};
|
|
@ -18,17 +18,29 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
{KC_Z, KC_X, KC_C, KC_V, KC_B, KC_LALT, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH },
|
{KC_Z, KC_X, KC_C, KC_V, KC_B, KC_LALT, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH },
|
||||||
{KC_ESC, KC_TAB, KC_LGUI, KC_LSFT, KC_BSPC, KC_LCTL, KC_SPC, MO(_RS), KC_MINS, KC_QUOT, KC_ENT }
|
{KC_ESC, KC_TAB, KC_LGUI, KC_LSFT, KC_BSPC, KC_LCTL, KC_SPC, MO(_RS), KC_MINS, KC_QUOT, KC_ENT }
|
||||||
},
|
},
|
||||||
|
/*
|
||||||
|
* ! @ up { } || pgup 7 8 9 *
|
||||||
|
* # left down right $ || pgdn 4 5 6 +
|
||||||
|
* [ ] ( ) & || ` 1 2 3 \
|
||||||
|
* lower insert super shift bksp ctrl || alt space fn . 0 =
|
||||||
|
*/
|
||||||
[_RS] = { /* [> RAISE <] */
|
[_RS] = { /* [> RAISE <] */
|
||||||
{KC_EXLM, KC_AT, KC_LCBR, KC_RCBR, KC_PIPE, KC_TRNS, KC_PGUP, KC_7, KC_8, KC_9, KC_ASTR},
|
{KC_EXLM, KC_AT, KC_UP, KC_LCBR, KC_RCBR, KC_TRNS, KC_PGUP, KC_7, KC_8, KC_9, KC_ASTR},
|
||||||
{KC_HASH, KC_DLR, KC_LPRN, KC_RPRN, KC_GRV, KC_TRNS, KC_PGDN, KC_4, KC_5, KC_6, KC_PLUS},
|
{KC_HASH, KC_LEFT, KC_DOWN, KC_RGHT, KC_DLR, KC_TRNS, KC_PGDN, KC_4, KC_5, KC_6, KC_PLUS},
|
||||||
{KC_PERC, KC_CIRC, KC_LBRC, KC_RBRC, KC_TILD, KC_LALT, KC_AMPR, KC_1, KC_2, KC_3, KC_BSLS},
|
{KC_LBRC, KC_RBRC, KC_LPRN, KC_RPRN, KC_AMPR, KC_LALT, KC_GRV, KC_1, KC_2, KC_3, KC_BSLS},
|
||||||
{TG(_LW), KC_INS, KC_LGUI, KC_LSFT, KC_BSPC, KC_LCTL, KC_SPC, KC_TRNS, KC_DOT, KC_0, KC_EQL}
|
{TG(_LW), KC_INS, KC_LGUI, KC_LSFT, KC_BSPC, KC_LCTL, KC_SPC, KC_TRNS, KC_DOT, KC_0, KC_EQL}
|
||||||
},
|
},
|
||||||
|
/*
|
||||||
|
* insert home up end pgup || up F7 F8 F9 F10
|
||||||
|
* del left down right pgdn || down F4 F5 F6 F11
|
||||||
|
* volup reset || F1 F2 F3 F12
|
||||||
|
* voldn super shift bksp ctrl || alt space L0 prtsc scroll pause
|
||||||
|
*/
|
||||||
[_LW] = { /* [> LOWER <] */
|
[_LW] = { /* [> LOWER <] */
|
||||||
{KC_INS, KC_HOME, KC_UP, KC_END, KC_PGUP, KC_TRNS, KC_UP, KC_F7, KC_F8, KC_F9, KC_F10},
|
{KC_INS, KC_HOME, KC_UP, KC_END, KC_PGUP, KC_TRNS, KC_UP, KC_F7, KC_F8, KC_F9, KC_F10},
|
||||||
{KC_DELT, KC_LEFT, KC_DOWN, KC_RGHT, KC_DOWN, KC_TRNS, KC_DOWN, KC_F4, KC_F5, KC_F6, KC_F11},
|
{KC_DELT, KC_LEFT, KC_DOWN, KC_RGHT, KC_DOWN, KC_TRNS, KC_DOWN, KC_F4, KC_F5, KC_F6, KC_F11},
|
||||||
{KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LALT, KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F12},
|
{KC_TRNS, KC_VOLU, KC_TRNS, KC_TRNS, RESET, KC_LALT, KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F12},
|
||||||
{KC_TRNS, KC_TRNS, KC_LGUI, KC_LSFT, KC_BSPC, KC_LCTL, KC_SPC, DF(_QW), KC_TRNS, KC_TRNS, RESET}
|
{KC_TRNS, KC_VOLD, KC_LGUI, KC_LSFT, KC_BSPC, KC_LCTL, KC_SPC, DF(_QW), KC_PSCR, KC_SLCK, KC_PAUS}
|
||||||
}};
|
}};
|
||||||
|
|
||||||
const uint16_t PROGMEM fn_actions[] = {
|
const uint16_t PROGMEM fn_actions[] = {
|
||||||
|
|
96
keyboards/atreus/keymaps/erlandsona/config.h
Normal file
|
@ -0,0 +1,96 @@
|
||||||
|
/*
|
||||||
|
Copyright 2012 Jun Wako <wakojun@gmail.com>
|
||||||
|
|
||||||
|
This program is free software: you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation, either version 2 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef CONFIG_H
|
||||||
|
#define CONFIG_H
|
||||||
|
|
||||||
|
#include "config_common.h"
|
||||||
|
|
||||||
|
|
||||||
|
/* Make Overloaded Keys switch faster */
|
||||||
|
#define TAPPING_TERM 150
|
||||||
|
|
||||||
|
/* USB Device descriptor parameter */
|
||||||
|
|
||||||
|
#define VENDOR_ID 0xFEED
|
||||||
|
#define PRODUCT_ID 0x6060
|
||||||
|
#define DEVICE_VER 0x0001
|
||||||
|
#define MANUFACTURER Technomancy
|
||||||
|
#define PRODUCT Atreus
|
||||||
|
#define DESCRIPTION q.m.k. keyboard firmware for Atreus
|
||||||
|
|
||||||
|
/* key matrix size */
|
||||||
|
#define MATRIX_ROWS 4
|
||||||
|
#define MATRIX_COLS 11
|
||||||
|
|
||||||
|
// Change this to how you wired your keyboard
|
||||||
|
// COLS: Left to right, ROWS: Top to bottom
|
||||||
|
#if defined(ATREUS_ASTAR)
|
||||||
|
# define MATRIX_ROW_PINS { D0, D1, D3, D2 }
|
||||||
|
#if defined(PCBDOWN)
|
||||||
|
# define MATRIX_COL_PINS { B7, D6, F7, F6, B6, D4, E6, B4, B5, C6, D7 }
|
||||||
|
#else
|
||||||
|
# define MATRIX_COL_PINS { D7, C6, B5, B4, E6, D4, B6, F6, F7, D6, B7 }
|
||||||
|
#endif
|
||||||
|
# define UNUSED_PINS
|
||||||
|
#elif defined(ATREUS_TEENSY2)
|
||||||
|
# define MATRIX_ROW_PINS { D0, D1, D2, D3 }
|
||||||
|
# define MATRIX_COL_PINS { F6, F5, F4, B7, B6, B5, B4, B3, B2, B1, B0 }
|
||||||
|
# define UNUSED_PINS
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* COL2ROW or ROW2COL */
|
||||||
|
#define DIODE_DIRECTION COL2ROW
|
||||||
|
|
||||||
|
/* define if matrix has ghost */
|
||||||
|
//#define MATRIX_HAS_GHOST
|
||||||
|
|
||||||
|
/* number of backlight levels */
|
||||||
|
//#define BACKLIGHT_LEVELS 3
|
||||||
|
|
||||||
|
/* Set 0 if debouncing isn't needed */
|
||||||
|
#define DEBOUNCING_DELAY 5
|
||||||
|
|
||||||
|
/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
|
||||||
|
#define LOCKING_SUPPORT_ENABLE
|
||||||
|
/* Locking resynchronize hack */
|
||||||
|
#define LOCKING_RESYNC_ENABLE
|
||||||
|
|
||||||
|
/* key combination for command */
|
||||||
|
#define IS_COMMAND() ( \
|
||||||
|
keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
|
||||||
|
)
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Feature disable options
|
||||||
|
* These options are also useful to firmware size reduction.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* disable debug print */
|
||||||
|
//#define NO_DEBUG
|
||||||
|
|
||||||
|
/* disable print */
|
||||||
|
//#define NO_PRINT
|
||||||
|
|
||||||
|
/* disable action features */
|
||||||
|
//#define NO_ACTION_LAYER
|
||||||
|
//#define NO_ACTION_TAPPING
|
||||||
|
//#define NO_ACTION_ONESHOT
|
||||||
|
//#define NO_ACTION_MACRO
|
||||||
|
//#define NO_ACTION_FUNCTION
|
||||||
|
|
||||||
|
#endif
|
61
keyboards/atreus/keymaps/erlandsona/keymap.c
Normal file
|
@ -0,0 +1,61 @@
|
||||||
|
// this is the style you want to emulate.
|
||||||
|
// This is the canonical layout file for the Quantum project. If you want to add another keyboard,
|
||||||
|
|
||||||
|
#include "atreus.h"
|
||||||
|
|
||||||
|
// Each layer gets a name for readability, which is then used in the keymap matrix below.
|
||||||
|
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
|
||||||
|
// Layer names don't all need to be of the same length, obviously, and you can also skip them
|
||||||
|
// entirely and just use numbers.
|
||||||
|
#define BASE 0
|
||||||
|
#define NUMS 1
|
||||||
|
#define MOUS 2
|
||||||
|
|
||||||
|
// Some quick aliases, just to make it look pretty
|
||||||
|
#define _______ KC_TRNS
|
||||||
|
#define XXXXXXX KC_NO
|
||||||
|
|
||||||
|
|
||||||
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
[BASE] = KEYMAP( /* Qwerty */
|
||||||
|
KC_Q , KC_W , KC_E , KC_R , KC_T , KC_Y , KC_U , KC_I , KC_O , KC_P ,
|
||||||
|
KC_A , KC_S , KC_D , KC_F , KC_G , KC_H , KC_J , KC_K , KC_L , KC_SCLN ,
|
||||||
|
SFT_T(KC_Z), KC_X , KC_C , KC_V , KC_B , KC_N , KC_M , KC_COMM, KC_DOT , SFT_T(KC_QUOT),
|
||||||
|
KC_LCTL , KC_LALT, KC_LALT, KC_LGUI, KC_BSPC, KC_ESC, KC_ENT, KC_SPC, F(NUMS), KC_RALT, KC_SLSH, KC_BSLS ),
|
||||||
|
|
||||||
|
[NUMS] = KEYMAP( /* Numbers / Arrows / Symbols */
|
||||||
|
KC_GRV , KC_1 , KC_2 , KC_3 , KC_4 , KC_LPRN, KC_RPRN, KC_MINS, KC_EQL , KC_LBRC,
|
||||||
|
KC_TAB , KC_5 , KC_6 , KC_7 , KC_8 , KC_LEFT, KC_DOWN, KC_UP , KC_RGHT, KC_RBRC,
|
||||||
|
_______, KC_9 , KC_0 , KC_DOT , KC_COMM, KC_HOME, KC_PGDN, KC_PGUP, KC_END , _______,
|
||||||
|
_______, _______, _______, _______, KC_DEL , F(MOUS), _______, _______, _______, _______, _______, _______),
|
||||||
|
|
||||||
|
[MOUS] = KEYMAP( /* Mouse and Media Keys */
|
||||||
|
KC_SLCK, KC_PAUSE, KC_F11 , KC_F10 , KC_F9 , KC_F8 , KC_F7 , KC_F6 , KC_F5 , KC_F4,
|
||||||
|
KC_VOLD, KC_ACL0 , KC_ACL1, KC_ACL2, KC_VOLU, KC_MS_L, KC_MS_D, KC_MS_U, KC_MS_R, KC_F3,
|
||||||
|
KC_MUTE, KC_MPRV , KC_MPLY, KC_MNXT, KC_MUTE, KC_WH_R, KC_WH_U, KC_WH_D, KC_WH_L, KC_F2,
|
||||||
|
_______, _______ , _______, _______, _______, _______, _______, KC_BTN1, F(BASE), RESET , KC_F12 , KC_F1)
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// I prefer this layer switching strategy to the TG and MO functions.
|
||||||
|
// so that I can get out of mouse mode just by tapping/holding my base layer FN key.
|
||||||
|
const uint16_t PROGMEM fn_actions[] = {
|
||||||
|
[BASE] = ACTION_LAYER_OFF(2, 1), // switch back to layer 0
|
||||||
|
[NUMS] = ACTION_LAYER_MOMENTARY(1), // to Fn overlay
|
||||||
|
[MOUS] = ACTION_LAYER_ON(2, 1) // switch to layer 2
|
||||||
|
};
|
||||||
|
|
||||||
|
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;
|
||||||
|
};
|
66
keyboards/atreus/keymaps/jeremy/keymap.c
Normal file
|
@ -0,0 +1,66 @@
|
||||||
|
// This is the personal keymap of Jeremy Cowgar (@jcowgar). It is written for the programmer.
|
||||||
|
|
||||||
|
#include "atreus.h"
|
||||||
|
#include "action_layer.h"
|
||||||
|
#include "keymap_colemak.h"
|
||||||
|
|
||||||
|
#define PREVENT_STUCK_MODIFIERS
|
||||||
|
|
||||||
|
// Each layer gets a name for readability, which is then used in the keymap matrix below.
|
||||||
|
#define ALPH 0
|
||||||
|
#define NUMS 1
|
||||||
|
#define CURS 2
|
||||||
|
#define SYMB 3
|
||||||
|
#define FKEY 4
|
||||||
|
|
||||||
|
// Some handy macros to keep the keymaps clean and easier to maintain
|
||||||
|
#define KM_SAVE LGUI(CM_S)
|
||||||
|
#define KM_CLSE LGUI(CM_W)
|
||||||
|
#define KM_OPEN LGUI(CM_O)
|
||||||
|
|
||||||
|
#define KM_COPY LGUI(KC_C)
|
||||||
|
#define KM_CUT LGUI(KC_X)
|
||||||
|
#define KM_PAST LGUI(KC_V)
|
||||||
|
#define KM_UNDO LGUI(KC_Z)
|
||||||
|
#define KM_REDO LGUI(LSFT(KC_Z))
|
||||||
|
|
||||||
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
[ALPH] = {
|
||||||
|
{KC_Q, KC_W, KC_E, KC_R, KC_T, KC_TRNS, KC_Y, KC_U, KC_I, KC_O, KC_P},
|
||||||
|
{KC_A, LT(NUMS, KC_S), LT(FKEY, KC_D), KC_F, KC_G, KC_TRNS, KC_H, KC_J, LT(CURS, KC_K), LT(SYMB, KC_L), KC_SCLN},
|
||||||
|
{KC_Z, KC_X, KC_C, KC_V, KC_B, KC_LALT, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH},
|
||||||
|
{KC_LCTL, KC_ESC, KC_NO, KC_LSFT, KC_SPC, KC_LGUI, KC_ENT, KC_RSFT, KC_NO, KC_ESC, KC_RCTL}
|
||||||
|
},
|
||||||
|
[NUMS] = {
|
||||||
|
{KC_TRNS, KC_TRNS, KC_TRNS, KC_ASTR, KC_SLSH, KC_TRNS, KC_TRNS, KC_7, KC_8, KC_9, KC_SLSH},
|
||||||
|
{KC_TRNS, KC_TRNS, KC_EQL, KC_PLUS, KC_MINS, KC_TRNS, KC_LPRN, KC_4, KC_5, KC_6, KC_ASTR},
|
||||||
|
{KC_TRNS, KC_TRNS, KC_DOT, KC_COMM, CM_SCLN, KC_TRNS, KC_RPRN, KC_1, KC_2, KC_3, KC_MINS},
|
||||||
|
{KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_0, KC_DOT, KC_EQL, KC_PLUS}
|
||||||
|
},
|
||||||
|
[CURS] = {
|
||||||
|
{KC_TRNS, KC_BSPC, KC_UP, KC_DELT, KC_PGUP, KC_TRNS, KC_TRNS, KM_SAVE, KC_TRNS, KM_OPEN, KC_TRNS},
|
||||||
|
{KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, KC_TRNS, KM_UNDO, KC_LALT, KC_TRNS, KC_LGUI, KC_TRNS},
|
||||||
|
{KC_TRNS, KC_VOLD, KC_MUTE, KC_VOLU, KC_MPLY, KM_COPY, KM_REDO, KM_CLSE, KC_TRNS, KC_TRNS, KC_TRNS},
|
||||||
|
{KC_TRNS, KC_TRNS, RESET, KC_TRNS, KC_TAB, KM_CUT, KM_PAST, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS}
|
||||||
|
},
|
||||||
|
[SYMB] = {
|
||||||
|
{KC_BSLS, KC_EXLM, KC_LABK, KC_RABK, CM_COLN, KC_TRNS, KC_UNDS, KC_DLR, KC_QUES, KC_TRNS, KC_PERC},
|
||||||
|
{KC_AT, KC_AMPR, KC_LPRN, KC_RPRN, CM_SCLN, KC_TRNS, KC_COMM, KC_DOT, KC_QUOT, KC_TRNS, KC_TILD},
|
||||||
|
{KC_HASH, KC_PIPE, KC_LCBR, KC_RCBR, KC_SLSH, KC_TRNS, KC_TRNS, KC_GRV, KC_DQT, KC_TRNS, KC_CIRC},
|
||||||
|
{KC_TRNS, KC_TRNS, KC_LBRC, KC_RBRC, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS}
|
||||||
|
},
|
||||||
|
[FKEY] = {
|
||||||
|
{KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_F9, KC_F10, KC_F11, KC_F12},
|
||||||
|
{KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_F5, KC_F6, KC_F7, KC_F8},
|
||||||
|
{KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4},
|
||||||
|
{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[] = {};
|
||||||
|
|
||||||
|
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
|
||||||
|
{
|
||||||
|
switch(id) {}
|
||||||
|
|
||||||
|
return MACRO_NONE;
|
||||||
|
};
|
45
keyboards/atreus/keymaps/jeremy/readme.md
Normal file
|
@ -0,0 +1,45 @@
|
||||||
|
Jeremy's Atreus Key Mapping
|
||||||
|
===========================
|
||||||
|
|
||||||
|
I am a programmer by trade that suffers from the beginning stages of RSI. As a programmer I use letters, symbols and cursor navigation most often. To prevent strange finger gymnastics, I wrote a script to rank which non-letter characters occurred in my primary source projects most often and then placed these characters in the easiest to reach locations, for me. I made heavy use of momentary layer toggling.
|
||||||
|
|
||||||
|
My layout is also geared toward a software based Colemak mapping. I would like it to be hardware, but I use my Laptop on the go frequently and thus my laptop keyboard. I have moved the keycaps to reflect the Colemak layout. My laptop is a MacBook Pro (2015).
|
||||||
|
|
||||||
|
## Main Layers
|
||||||
|
|
||||||
|
1. [Letters](http://www.keyboard-layout-editor.com/#/gists/6861cb9df09ce78efaddf8aa7471e3ac)
|
||||||
|
2. [Symbols](http://www.keyboard-layout-editor.com/#/gists/8956a18b508a78e93b9c38ec3fcccaa5)
|
||||||
|
3. [Navigation](http://www.keyboard-layout-editor.com/#/gists/6ed492b714a7f54eb1c5de09b87fd8c4)
|
||||||
|
4. [Numbers](http://www.keyboard-layout-editor.com/#/gists/399ceb5624e8388e48a3a5eacac8e973)
|
||||||
|
5. [Function Keys](http://www.keyboard-layout-editor.com/#/gists/7fd7dc24c7048316f3724b1893c64e89)
|
||||||
|
|
||||||
|
## Notes
|
||||||
|
|
||||||
|
### General
|
||||||
|
|
||||||
|
Some characters can be accessed multiple ways. This was done because you may be in a given layer, such as numbers, where when doing math, you may need quick access to the parentheses characters for grouping. This prevents some layer switching.
|
||||||
|
|
||||||
|
I own an ErgoDox and plan on porting this as a base layer, then using the extra keys the ErgoDox provides accordingly. My goal, though, is to be fully functional on this base setup and build everything into muscle memory.
|
||||||
|
|
||||||
|
### Symbol Layer
|
||||||
|
|
||||||
|
1. I placed characters that deal with an if statement close together, such as !, & and |.
|
||||||
|
2. All matching brace/bracket characters are together as well.
|
||||||
|
|
||||||
|
### Number Layer
|
||||||
|
|
||||||
|
1. Everything I did was a compromise when trying to mimic a ten-key. I did the best I could.
|
||||||
|
2. Operators are duplicated on the right and left. I do not find it comfortable to use my pinky much, so I tend to use my left hand for +, -, * and / but those were also placed on the right hand to mimic the ten-key.
|
||||||
|
3. Parentheses were added for typing on the calculator.
|
||||||
|
|
||||||
|
### Cursor Layer
|
||||||
|
|
||||||
|
1. It includes basic audio controls because they didn't really fit anywhere else
|
||||||
|
2. It contains basic file manipulation. I'm not sure that was a good idea. I do save all the time, but Cmd+S isn't exactly hard.
|
||||||
|
3. It contains the backspace and delete keys right on top of the left and right arrows.
|
||||||
|
4. Cmd and Opt keys are duplicated. This makes for very easy navigation, for example on a Mac, Opt+Left/Right moves word by word. It also backspaces or deletes word by word.
|
||||||
|
|
||||||
|
### Function Layer
|
||||||
|
|
||||||
|
1. Almost all other layers I saw grouped the F keys into a bunch of three. This only gives nine function keys in order if you attempt to stay as close to the home row as possible. I went with a group of four, which gives all twelve function keys to the right hand, one row below and above the home row.
|
||||||
|
2. I duplicated the Command and Option keys the same as on the cursor layer. This makes it dead easy to hit modified function keys such as Cmd+Opt+F5. It's also easy to toss in a Shift modifier in there with the right thumb since the bottom row is preserved.
|
|
@ -174,13 +174,14 @@ Download or clone the whole firmware and navigate to the keyboards/planck folder
|
||||||
Depending on which keymap you would like to use, you will have to compile slightly differently.
|
Depending on which keymap you would like to use, you will have to compile slightly differently.
|
||||||
|
|
||||||
### Default
|
### Default
|
||||||
To build with the default keymap, simply run `make`.
|
To build with the default keymap, simply run `make default`.
|
||||||
|
|
||||||
### Other Keymaps
|
### 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 file named `<name>.c` and see keymap document (you can find in top readme.md) and existent keymap files.
|
Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create file 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 `KEYMAP` option like:
|
To build the firmware binary hex file with a keymap just do `make` with a keymap like this:
|
||||||
|
|
||||||
```
|
```
|
||||||
$ make KEYMAP=[default|jack|<name>]
|
$ make [default|jack|<name>]
|
||||||
```
|
```
|
||||||
Keymaps follow the format **__\<name\>.c__** and are stored in the `keymaps` folder.
|
Keymaps follow the format **__\<name\>.c__** and are stored in the `keymaps` folder.
|
||||||
|
|
82
keyboards/atreus/rules.mk
Normal file
|
@ -0,0 +1,82 @@
|
||||||
|
|
||||||
|
|
||||||
|
ifdef TEENSY2
|
||||||
|
OPT_DEFS += -DATREUS_TEENSY2
|
||||||
|
ATREUS_UPLOAD_COMMAND = teensy_loader_cli -w -mmcu=$(MCU) $(TARGET).hex
|
||||||
|
else
|
||||||
|
OPT_DEFS += -DATREUS_ASTAR
|
||||||
|
OPT_DEFS += -DCATERINA_BOOTLOADER
|
||||||
|
ATREUS_UPLOAD_COMMAND = while [ ! -r $(USB) ]; do sleep 1; done; \
|
||||||
|
avrdude -p $(MCU) -c avr109 -U flash:w:$(TARGET).hex -P $(USB)
|
||||||
|
endif
|
||||||
|
|
||||||
|
# MCU name
|
||||||
|
#MCU = at90usb1287
|
||||||
|
MCU = atmega32u4
|
||||||
|
|
||||||
|
# Processor frequency.
|
||||||
|
# This will define a symbol, F_CPU, in all source code files equal to the
|
||||||
|
# processor frequency in Hz. You can then use this symbol in your source code to
|
||||||
|
# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
|
||||||
|
# automatically to create a 32-bit value in your source code.
|
||||||
|
#
|
||||||
|
# This will be an integer division of F_USB below, as it is sourced by
|
||||||
|
# F_USB after it has run through any CPU prescalers. Note that this value
|
||||||
|
# does not *change* the processor frequency - it should merely be updated to
|
||||||
|
# reflect the processor speed set externally so that the code can use accurate
|
||||||
|
# software delays.
|
||||||
|
F_CPU = 16000000
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
# LUFA specific
|
||||||
|
#
|
||||||
|
# Target architecture (see library "Board Types" documentation).
|
||||||
|
ARCH = AVR8
|
||||||
|
|
||||||
|
# Input clock frequency.
|
||||||
|
# This will define a symbol, F_USB, in all source code files equal to the
|
||||||
|
# input clock frequency (before any prescaling is performed) in Hz. This value may
|
||||||
|
# differ from F_CPU if prescaling is used on the latter, and is required as the
|
||||||
|
# raw input clock is fed directly to the PLL sections of the AVR for high speed
|
||||||
|
# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
|
||||||
|
# at the end, this will be done automatically to create a 32-bit value in your
|
||||||
|
# source code.
|
||||||
|
#
|
||||||
|
# If no clock division is performed on the input clock inside the AVR (via the
|
||||||
|
# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
|
||||||
|
F_USB = $(F_CPU)
|
||||||
|
|
||||||
|
# Interrupt driven control endpoint task(+60)
|
||||||
|
OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
|
||||||
|
|
||||||
|
|
||||||
|
# Boot Section Size in *bytes*
|
||||||
|
# Teensy halfKay 512
|
||||||
|
# Teensy++ halfKay 1024
|
||||||
|
# Atmel DFU loader 4096
|
||||||
|
# LUFA bootloader 4096
|
||||||
|
# USBaspLoader 2048
|
||||||
|
OPT_DEFS += -DBOOTLOADER_SIZE=4096
|
||||||
|
|
||||||
|
|
||||||
|
# Build Options
|
||||||
|
# comment out to disable the options.
|
||||||
|
#
|
||||||
|
#BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000)
|
||||||
|
MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700)
|
||||||
|
EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450)
|
||||||
|
CONSOLE_ENABLE ?= yes # Console for debug(+400)
|
||||||
|
COMMAND_ENABLE ?= yes # Commands for debug and configuration
|
||||||
|
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
|
||||||
|
# SLEEP_LED_ENABLE ?= yes # Breathing sleep LED during USB suspend
|
||||||
|
NKRO_ENABLE ?= yes # USB Nkey Rollover - not yet supported in LUFA
|
||||||
|
# BACKLIGHT_ENABLE ?= yes # Enable keyboard backlight functionality
|
||||||
|
# MIDI_ENABLE ?= YES # MIDI controls
|
||||||
|
UNICODE_ENABLE ?= YES # Unicode
|
||||||
|
# BLUETOOTH_ENABLE ?= yes # Enable Bluetooth with the Adafruit EZ-Key HID
|
||||||
|
|
||||||
|
USB ?= /dev/cu.usbmodem1411
|
||||||
|
|
||||||
|
upload: build
|
||||||
|
$(ATREUS_UPLOAD_COMMAND)
|
|
@ -1,72 +1,3 @@
|
||||||
|
ifndef MAKEFILE_INCLUDED
|
||||||
|
|
||||||
# MCU name
|
|
||||||
#MCU = at90usb1287
|
|
||||||
MCU = atmega32u4
|
|
||||||
|
|
||||||
# Processor frequency.
|
|
||||||
# This will define a symbol, F_CPU, in all source code files equal to the
|
|
||||||
# processor frequency in Hz. You can then use this symbol in your source code to
|
|
||||||
# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
|
|
||||||
# automatically to create a 32-bit value in your source code.
|
|
||||||
#
|
|
||||||
# This will be an integer division of F_USB below, as it is sourced by
|
|
||||||
# F_USB after it has run through any CPU prescalers. Note that this value
|
|
||||||
# does not *change* the processor frequency - it should merely be updated to
|
|
||||||
# reflect the processor speed set externally so that the code can use accurate
|
|
||||||
# software delays.
|
|
||||||
F_CPU = 16000000
|
|
||||||
|
|
||||||
|
|
||||||
#
|
|
||||||
# LUFA specific
|
|
||||||
#
|
|
||||||
# Target architecture (see library "Board Types" documentation).
|
|
||||||
ARCH = AVR8
|
|
||||||
|
|
||||||
# Input clock frequency.
|
|
||||||
# This will define a symbol, F_USB, in all source code files equal to the
|
|
||||||
# input clock frequency (before any prescaling is performed) in Hz. This value may
|
|
||||||
# differ from F_CPU if prescaling is used on the latter, and is required as the
|
|
||||||
# raw input clock is fed directly to the PLL sections of the AVR for high speed
|
|
||||||
# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
|
|
||||||
# at the end, this will be done automatically to create a 32-bit value in your
|
|
||||||
# source code.
|
|
||||||
#
|
|
||||||
# If no clock division is performed on the input clock inside the AVR (via the
|
|
||||||
# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
|
|
||||||
F_USB = $(F_CPU)
|
|
||||||
|
|
||||||
# Interrupt driven control endpoint task(+60)
|
|
||||||
OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
|
|
||||||
|
|
||||||
|
|
||||||
# Boot Section Size in *bytes*
|
|
||||||
# Teensy halfKay 512
|
|
||||||
# Teensy++ halfKay 1024
|
|
||||||
# Atmel DFU loader 4096
|
|
||||||
# LUFA bootloader 4096
|
|
||||||
# USBaspLoader 2048
|
|
||||||
OPT_DEFS += -DBOOTLOADER_SIZE=512
|
|
||||||
|
|
||||||
|
|
||||||
# Build Options
|
|
||||||
# comment out to disable the options.
|
|
||||||
#
|
|
||||||
BOOTMAGIC_ENABLE ?= yes # Virtual DIP switch configuration(+1000)
|
|
||||||
MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700)
|
|
||||||
EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450)
|
|
||||||
CONSOLE_ENABLE ?= yes # Console for debug(+400)
|
|
||||||
COMMAND_ENABLE ?= yes # Commands for debug and configuration
|
|
||||||
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
|
|
||||||
# SLEEP_LED_ENABLE ?= 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
|
|
||||||
# BACKLIGHT_ENABLE ?= yes # Enable keyboard backlight functionality
|
|
||||||
# MIDI_ENABLE ?= YES # MIDI controls
|
|
||||||
# UNICODE_ENABLE ?= YES # Unicode
|
|
||||||
# BLUETOOTH_ENABLE ?= yes # Enable Bluetooth with the Adafruit EZ-Key HID
|
|
||||||
|
|
||||||
ifndef QUANTUM_DIR
|
|
||||||
include ../../Makefile
|
include ../../Makefile
|
||||||
endif
|
endif
|
||||||
|
|
|
@ -12,13 +12,14 @@ Download or clone the whole firmware and navigate to the keyboards/Bantam44 fold
|
||||||
Depending on which keymap you would like to use, you will have to compile slightly differently.
|
Depending on which keymap you would like to use, you will have to compile slightly differently.
|
||||||
|
|
||||||
### Default
|
### Default
|
||||||
To build with the default keymap, simply run `make`.
|
To build with the default keymap, simply run `make default`.
|
||||||
|
|
||||||
### Other Keymaps
|
### 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 file named `<name>.c` and see keymap document (you can find in top readme.md) and existent keymap files.
|
Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create file 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 `KEYMAP` option like:
|
To build the firmware binary hex file with a keymap just do `make` with a keymap like this:
|
||||||
|
|
||||||
```
|
```
|
||||||
$ make KEYMAP=[default|jack|<name>]
|
$ make [default|jack|<name>]
|
||||||
```
|
```
|
||||||
Keymaps follow the format **__\<name\>.c__** and are stored in the `keymaps` folder.
|
Keymaps follow the format **__\<name\>.c__** and are stored in the `keymaps` folder.
|
67
keyboards/bantam44/rules.mk
Normal file
|
@ -0,0 +1,67 @@
|
||||||
|
|
||||||
|
|
||||||
|
# MCU name
|
||||||
|
#MCU = at90usb1287
|
||||||
|
MCU = atmega32u4
|
||||||
|
|
||||||
|
# Processor frequency.
|
||||||
|
# This will define a symbol, F_CPU, in all source code files equal to the
|
||||||
|
# processor frequency in Hz. You can then use this symbol in your source code to
|
||||||
|
# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
|
||||||
|
# automatically to create a 32-bit value in your source code.
|
||||||
|
#
|
||||||
|
# This will be an integer division of F_USB below, as it is sourced by
|
||||||
|
# F_USB after it has run through any CPU prescalers. Note that this value
|
||||||
|
# does not *change* the processor frequency - it should merely be updated to
|
||||||
|
# reflect the processor speed set externally so that the code can use accurate
|
||||||
|
# software delays.
|
||||||
|
F_CPU = 16000000
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
# LUFA specific
|
||||||
|
#
|
||||||
|
# Target architecture (see library "Board Types" documentation).
|
||||||
|
ARCH = AVR8
|
||||||
|
|
||||||
|
# Input clock frequency.
|
||||||
|
# This will define a symbol, F_USB, in all source code files equal to the
|
||||||
|
# input clock frequency (before any prescaling is performed) in Hz. This value may
|
||||||
|
# differ from F_CPU if prescaling is used on the latter, and is required as the
|
||||||
|
# raw input clock is fed directly to the PLL sections of the AVR for high speed
|
||||||
|
# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
|
||||||
|
# at the end, this will be done automatically to create a 32-bit value in your
|
||||||
|
# source code.
|
||||||
|
#
|
||||||
|
# If no clock division is performed on the input clock inside the AVR (via the
|
||||||
|
# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
|
||||||
|
F_USB = $(F_CPU)
|
||||||
|
|
||||||
|
# Interrupt driven control endpoint task(+60)
|
||||||
|
OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
|
||||||
|
|
||||||
|
|
||||||
|
# Boot Section Size in *bytes*
|
||||||
|
# Teensy halfKay 512
|
||||||
|
# Teensy++ halfKay 1024
|
||||||
|
# Atmel DFU loader 4096
|
||||||
|
# LUFA bootloader 4096
|
||||||
|
# USBaspLoader 2048
|
||||||
|
OPT_DEFS += -DBOOTLOADER_SIZE=512
|
||||||
|
|
||||||
|
|
||||||
|
# Build Options
|
||||||
|
# comment out to disable the options.
|
||||||
|
#
|
||||||
|
BOOTMAGIC_ENABLE ?= yes # Virtual DIP switch configuration(+1000)
|
||||||
|
MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700)
|
||||||
|
EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450)
|
||||||
|
CONSOLE_ENABLE ?= yes # Console for debug(+400)
|
||||||
|
COMMAND_ENABLE ?= yes # Commands for debug and configuration
|
||||||
|
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
|
||||||
|
# SLEEP_LED_ENABLE ?= 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
|
||||||
|
# BACKLIGHT_ENABLE ?= yes # Enable keyboard backlight functionality
|
||||||
|
# MIDI_ENABLE ?= YES # MIDI controls
|
||||||
|
# UNICODE_ENABLE ?= YES # Unicode
|
||||||
|
# BLUETOOTH_ENABLE ?= yes # Enable Bluetooth with the Adafruit EZ-Key HID
|
|
@ -1,14 +1,5 @@
|
||||||
SUBPROJECT_DEFAULT = stm32_f072_onekey
|
SUBPROJECT_DEFAULT = stm32_f072_onekey
|
||||||
|
|
||||||
#BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration
|
ifndef MAKEFILE_INCLUDED
|
||||||
MOUSEKEY_ENABLE ?= yes # Mouse keys
|
|
||||||
EXTRAKEY_ENABLE ?= yes # Audio control and System control
|
|
||||||
CONSOLE_ENABLE ?= yes # Console for debug
|
|
||||||
COMMAND_ENABLE ?= yes # Commands for debug and configuration
|
|
||||||
SLEEP_LED_ENABLE ?= yes # Breathing sleep LED during USB suspend
|
|
||||||
NKRO_ENABLE ?= yes # USB Nkey Rollover
|
|
||||||
CUSTOM_MATRIX ?= yes # Custom matrix file
|
|
||||||
|
|
||||||
ifndef QUANTUM_DIR
|
|
||||||
include ../../Makefile
|
include ../../Makefile
|
||||||
endif
|
endif
|
|
@ -1,49 +1,49 @@
|
||||||
/*
|
/*
|
||||||
ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio
|
ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio
|
||||||
|
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
you may not use this file except in compliance with the License.
|
you may not use this file except in compliance with the License.
|
||||||
You may obtain a copy of the License at
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
http://www.apache.org/licenses/LICENSE-2.0
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
Unless required by applicable law or agreed to in writing, software
|
Unless required by applicable law or agreed to in writing, software
|
||||||
distributed under the License is distributed on an "AS IS" BASIS,
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
See the License for the specific language governing permissions and
|
See the License for the specific language governing permissions and
|
||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "hal.h"
|
#include "hal.h"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief PAL setup.
|
* @brief PAL setup.
|
||||||
* @details Digital I/O ports static configuration as defined in @p board.h.
|
* @details Digital I/O ports static configuration as defined in @p board.h.
|
||||||
* This variable is used by the HAL when initializing the PAL driver.
|
* This variable is used by the HAL when initializing the PAL driver.
|
||||||
*/
|
*/
|
||||||
#if HAL_USE_PAL || defined(__DOXYGEN__)
|
#if HAL_USE_PAL || defined(__DOXYGEN__)
|
||||||
const PALConfig pal_default_config =
|
const PALConfig pal_default_config =
|
||||||
{
|
{
|
||||||
{VAL_GPIOAODR, VAL_GPIOACRL, VAL_GPIOACRH},
|
{VAL_GPIOAODR, VAL_GPIOACRL, VAL_GPIOACRH},
|
||||||
{VAL_GPIOBODR, VAL_GPIOBCRL, VAL_GPIOBCRH},
|
{VAL_GPIOBODR, VAL_GPIOBCRL, VAL_GPIOBCRH},
|
||||||
{VAL_GPIOCODR, VAL_GPIOCCRL, VAL_GPIOCCRH},
|
{VAL_GPIOCODR, VAL_GPIOCCRL, VAL_GPIOCCRH},
|
||||||
{VAL_GPIODODR, VAL_GPIODCRL, VAL_GPIODCRH},
|
{VAL_GPIODODR, VAL_GPIODCRL, VAL_GPIODCRH},
|
||||||
{VAL_GPIOEODR, VAL_GPIOECRL, VAL_GPIOECRH},
|
{VAL_GPIOEODR, VAL_GPIOECRL, VAL_GPIOECRH},
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Early initialization code.
|
* Early initialization code.
|
||||||
* This initialization must be performed just after stack setup and before
|
* This initialization must be performed just after stack setup and before
|
||||||
* any other initialization.
|
* any other initialization.
|
||||||
*/
|
*/
|
||||||
void __early_init(void) {
|
void __early_init(void) {
|
||||||
|
|
||||||
stm32_clock_init();
|
stm32_clock_init();
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Board-specific initialization code.
|
* Board-specific initialization code.
|
||||||
*/
|
*/
|
||||||
void boardInit(void) {
|
void boardInit(void) {
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,166 +1,166 @@
|
||||||
/*
|
/*
|
||||||
ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio
|
ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio
|
||||||
|
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
you may not use this file except in compliance with the License.
|
you may not use this file except in compliance with the License.
|
||||||
You may obtain a copy of the License at
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
http://www.apache.org/licenses/LICENSE-2.0
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
Unless required by applicable law or agreed to in writing, software
|
Unless required by applicable law or agreed to in writing, software
|
||||||
distributed under the License is distributed on an "AS IS" BASIS,
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
See the License for the specific language governing permissions and
|
See the License for the specific language governing permissions and
|
||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef _BOARD_H_
|
#ifndef _BOARD_H_
|
||||||
#define _BOARD_H_
|
#define _BOARD_H_
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Setup for a Generic STM32F103 board.
|
* Setup for a Generic STM32F103 board.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Board identifier.
|
* Board identifier.
|
||||||
*/
|
*/
|
||||||
#define BOARD_GENERIC_STM32_F103
|
#define BOARD_GENERIC_STM32_F103
|
||||||
#define BOARD_NAME "Generic STM32F103x board"
|
#define BOARD_NAME "Generic STM32F103x board"
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Board frequencies.
|
* Board frequencies.
|
||||||
*/
|
*/
|
||||||
#define STM32_LSECLK 32768
|
#define STM32_LSECLK 32768
|
||||||
#define STM32_HSECLK 8000000
|
#define STM32_HSECLK 8000000
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* MCU type, supported types are defined in ./os/hal/platforms/hal_lld.h.
|
* MCU type, supported types are defined in ./os/hal/platforms/hal_lld.h.
|
||||||
*/
|
*/
|
||||||
#define STM32F103xB
|
#define STM32F103xB
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* IO pins assignments
|
* IO pins assignments
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* on-board */
|
/* on-board */
|
||||||
|
|
||||||
#define GPIOC_LED 13
|
#define GPIOC_LED 13
|
||||||
#define GPIOD_OSC_IN 0
|
#define GPIOD_OSC_IN 0
|
||||||
#define GPIOD_OSC_OUT 1
|
#define GPIOD_OSC_OUT 1
|
||||||
|
|
||||||
/* In case your board has a "USB enable" hardware
|
/* In case your board has a "USB enable" hardware
|
||||||
controlled by a pin, define it here. (It could be just
|
controlled by a pin, define it here. (It could be just
|
||||||
a 1.5k resistor connected to D+ line.)
|
a 1.5k resistor connected to D+ line.)
|
||||||
*/
|
*/
|
||||||
/*
|
/*
|
||||||
#define GPIOB_USB_DISC 10
|
#define GPIOB_USB_DISC 10
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* I/O ports initial setup, this configuration is established soon after reset
|
* I/O ports initial setup, this configuration is established soon after reset
|
||||||
* in the initialization code.
|
* in the initialization code.
|
||||||
*
|
*
|
||||||
* The digits have the following meaning:
|
* The digits have the following meaning:
|
||||||
* 0 - Analog input.
|
* 0 - Analog input.
|
||||||
* 1 - Push Pull output 10MHz.
|
* 1 - Push Pull output 10MHz.
|
||||||
* 2 - Push Pull output 2MHz.
|
* 2 - Push Pull output 2MHz.
|
||||||
* 3 - Push Pull output 50MHz.
|
* 3 - Push Pull output 50MHz.
|
||||||
* 4 - Digital input.
|
* 4 - Digital input.
|
||||||
* 5 - Open Drain output 10MHz.
|
* 5 - Open Drain output 10MHz.
|
||||||
* 6 - Open Drain output 2MHz.
|
* 6 - Open Drain output 2MHz.
|
||||||
* 7 - Open Drain output 50MHz.
|
* 7 - Open Drain output 50MHz.
|
||||||
* 8 - Digital input with PullUp or PullDown resistor depending on ODR.
|
* 8 - Digital input with PullUp or PullDown resistor depending on ODR.
|
||||||
* 9 - Alternate Push Pull output 10MHz.
|
* 9 - Alternate Push Pull output 10MHz.
|
||||||
* A - Alternate Push Pull output 2MHz.
|
* A - Alternate Push Pull output 2MHz.
|
||||||
* B - Alternate Push Pull output 50MHz.
|
* B - Alternate Push Pull output 50MHz.
|
||||||
* C - Reserved.
|
* C - Reserved.
|
||||||
* D - Alternate Open Drain output 10MHz.
|
* D - Alternate Open Drain output 10MHz.
|
||||||
* E - Alternate Open Drain output 2MHz.
|
* E - Alternate Open Drain output 2MHz.
|
||||||
* F - Alternate Open Drain output 50MHz.
|
* F - Alternate Open Drain output 50MHz.
|
||||||
* Please refer to the STM32 Reference Manual for details.
|
* Please refer to the STM32 Reference Manual for details.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Port A setup.
|
* Port A setup.
|
||||||
* Everything input with pull-up except:
|
* Everything input with pull-up except:
|
||||||
* PA2 - Alternate output (USART2 TX).
|
* PA2 - Alternate output (USART2 TX).
|
||||||
* PA3 - Normal input (USART2 RX).
|
* PA3 - Normal input (USART2 RX).
|
||||||
* PA9 - Alternate output (USART1 TX).
|
* PA9 - Alternate output (USART1 TX).
|
||||||
* PA10 - Normal input (USART1 RX).
|
* PA10 - Normal input (USART1 RX).
|
||||||
*/
|
*/
|
||||||
#define VAL_GPIOACRL 0x88884B88 /* PA7...PA0 */
|
#define VAL_GPIOACRL 0x88884B88 /* PA7...PA0 */
|
||||||
#define VAL_GPIOACRH 0x888884B8 /* PA15...PA8 */
|
#define VAL_GPIOACRH 0x888884B8 /* PA15...PA8 */
|
||||||
#define VAL_GPIOAODR 0xFFFFFFFF
|
#define VAL_GPIOAODR 0xFFFFFFFF
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Port B setup.
|
* Port B setup.
|
||||||
* Everything input with pull-up except:
|
* Everything input with pull-up except:
|
||||||
* PB10 - Push Pull output (USB switch).
|
* PB10 - Push Pull output (USB switch).
|
||||||
*/
|
*/
|
||||||
#define VAL_GPIOBCRL 0x88888888 /* PB7...PB0 */
|
#define VAL_GPIOBCRL 0x88888888 /* PB7...PB0 */
|
||||||
#define VAL_GPIOBCRH 0x88888388 /* PB15...PB8 */
|
#define VAL_GPIOBCRH 0x88888388 /* PB15...PB8 */
|
||||||
#define VAL_GPIOBODR 0xFFFFFFFF
|
#define VAL_GPIOBODR 0xFFFFFFFF
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Port C setup.
|
* Port C setup.
|
||||||
* Everything input with pull-up except:
|
* Everything input with pull-up except:
|
||||||
* PC13 - Push Pull output (LED).
|
* PC13 - Push Pull output (LED).
|
||||||
*/
|
*/
|
||||||
#define VAL_GPIOCCRL 0x88888888 /* PC7...PC0 */
|
#define VAL_GPIOCCRL 0x88888888 /* PC7...PC0 */
|
||||||
#define VAL_GPIOCCRH 0x88388888 /* PC15...PC8 */
|
#define VAL_GPIOCCRH 0x88388888 /* PC15...PC8 */
|
||||||
#define VAL_GPIOCODR 0xFFFFFFFF
|
#define VAL_GPIOCODR 0xFFFFFFFF
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Port D setup.
|
* Port D setup.
|
||||||
* Everything input with pull-up except:
|
* Everything input with pull-up except:
|
||||||
* PD0 - Normal input (XTAL).
|
* PD0 - Normal input (XTAL).
|
||||||
* PD1 - Normal input (XTAL).
|
* PD1 - Normal input (XTAL).
|
||||||
*/
|
*/
|
||||||
#define VAL_GPIODCRL 0x88888844 /* PD7...PD0 */
|
#define VAL_GPIODCRL 0x88888844 /* PD7...PD0 */
|
||||||
#define VAL_GPIODCRH 0x88888888 /* PD15...PD8 */
|
#define VAL_GPIODCRH 0x88888888 /* PD15...PD8 */
|
||||||
#define VAL_GPIODODR 0xFFFFFFFF
|
#define VAL_GPIODODR 0xFFFFFFFF
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Port E setup.
|
* Port E setup.
|
||||||
* Everything input with pull-up except:
|
* Everything input with pull-up except:
|
||||||
*/
|
*/
|
||||||
#define VAL_GPIOECRL 0x88888888 /* PE7...PE0 */
|
#define VAL_GPIOECRL 0x88888888 /* PE7...PE0 */
|
||||||
#define VAL_GPIOECRH 0x88888888 /* PE15...PE8 */
|
#define VAL_GPIOECRH 0x88888888 /* PE15...PE8 */
|
||||||
#define VAL_GPIOEODR 0xFFFFFFFF
|
#define VAL_GPIOEODR 0xFFFFFFFF
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* USB bus activation macro, required by the USB driver.
|
* USB bus activation macro, required by the USB driver.
|
||||||
*/
|
*/
|
||||||
/* The point is that most of the generic STM32F103* boards
|
/* The point is that most of the generic STM32F103* boards
|
||||||
have a 1.5k resistor connected on one end to the D+ line
|
have a 1.5k resistor connected on one end to the D+ line
|
||||||
and on the other end to some pin. Or even a slightly more
|
and on the other end to some pin. Or even a slightly more
|
||||||
complicated "USB enable" circuit, controlled by a pin.
|
complicated "USB enable" circuit, controlled by a pin.
|
||||||
That should go here.
|
That should go here.
|
||||||
|
|
||||||
However on some boards (e.g. one that I have), there's no
|
However on some boards (e.g. one that I have), there's no
|
||||||
such hardware. In which case it's better to not do anything.
|
such hardware. In which case it's better to not do anything.
|
||||||
*/
|
*/
|
||||||
/*
|
/*
|
||||||
#define usb_lld_connect_bus(usbp) palClearPad(GPIOB, GPIOB_USB_DISC)
|
#define usb_lld_connect_bus(usbp) palClearPad(GPIOB, GPIOB_USB_DISC)
|
||||||
*/
|
*/
|
||||||
#define usb_lld_connect_bus(usbp) palSetPadMode(GPIOA, 12, PAL_MODE_INPUT);
|
#define usb_lld_connect_bus(usbp) palSetPadMode(GPIOA, 12, PAL_MODE_INPUT);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* USB bus de-activation macro, required by the USB driver.
|
* USB bus de-activation macro, required by the USB driver.
|
||||||
*/
|
*/
|
||||||
/*
|
/*
|
||||||
#define usb_lld_disconnect_bus(usbp) palSetPad(GPIOB, GPIOB_USB_DISC)
|
#define usb_lld_disconnect_bus(usbp) palSetPad(GPIOB, GPIOB_USB_DISC)
|
||||||
*/
|
*/
|
||||||
#define usb_lld_disconnect_bus(usbp) palSetPadMode(GPIOA, 12, PAL_MODE_OUTPUT_PUSHPULL); palClearPad(GPIOA, 12);
|
#define usb_lld_disconnect_bus(usbp) palSetPadMode(GPIOA, 12, PAL_MODE_OUTPUT_PUSHPULL); palClearPad(GPIOA, 12);
|
||||||
|
|
||||||
#if !defined(_FROM_ASM_)
|
#if !defined(_FROM_ASM_)
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
void boardInit(void);
|
void boardInit(void);
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
#endif /* _FROM_ASM_ */
|
#endif /* _FROM_ASM_ */
|
||||||
|
|
||||||
#endif /* _BOARD_H_ */
|
#endif /* _BOARD_H_ */
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
# List of all the board related files.
|
# List of all the board related files.
|
||||||
BOARDSRC = $(KEYBOARD_PATH)/boards/GENERIC_STM32_F103/board.c
|
BOARDSRC = $(KEYBOARD_PATH)/boards/GENERIC_STM32_F103/board.c
|
||||||
|
|
||||||
# Required include directories
|
# Required include directories
|
||||||
BOARDINC = $(KEYBOARD_PATH)/boards/GENERIC_STM32_F103
|
BOARDINC = $(KEYBOARD_PATH)/boards/GENERIC_STM32_F103
|
||||||
|
|
|
@ -1,105 +1,105 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (C) 2013-2016 Fabio Utzig, http://fabioutzig.com
|
* Copyright (C) 2013-2016 Fabio Utzig, http://fabioutzig.com
|
||||||
* (C) 2016 flabbergast <s3+flabbergast@sdfeu.org>
|
* (C) 2016 flabbergast <s3+flabbergast@sdfeu.org>
|
||||||
*
|
*
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining
|
* Permission is hereby granted, free of charge, to any person obtaining
|
||||||
* a copy of this software and associated documentation files (the "Software"),
|
* a copy of this software and associated documentation files (the "Software"),
|
||||||
* to deal in the Software without restriction, including without limitation
|
* to deal in the Software without restriction, including without limitation
|
||||||
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||||
* and/or sell copies of the Software, and to permit persons to whom the
|
* 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:
|
* Software is furnished to do so, subject to the following conditions:
|
||||||
*
|
*
|
||||||
* The above copyright notice and this permission notice shall be included in
|
* The above copyright notice and this permission notice shall be included in
|
||||||
* all copies or substantial portions of the Software.
|
* all copies or substantial portions of the Software.
|
||||||
*
|
*
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||||
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
* 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
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
* SOFTWARE.
|
* SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* KL26Z64 memory setup.
|
* KL26Z64 memory setup.
|
||||||
*/
|
*/
|
||||||
MEMORY
|
MEMORY
|
||||||
{
|
{
|
||||||
flash0 : org = 0x00000000, len = 0x100
|
flash0 : org = 0x00000000, len = 0x100
|
||||||
flash1 : org = 0x00000400, len = 0x10
|
flash1 : org = 0x00000400, len = 0x10
|
||||||
flash2 : org = 0x00000410, len = 62k - 0x410
|
flash2 : org = 0x00000410, len = 62k - 0x410
|
||||||
flash3 : org = 0x0000F800, len = 2k
|
flash3 : org = 0x0000F800, len = 2k
|
||||||
flash4 : org = 0x00000000, len = 0
|
flash4 : org = 0x00000000, len = 0
|
||||||
flash5 : org = 0x00000000, len = 0
|
flash5 : org = 0x00000000, len = 0
|
||||||
flash6 : org = 0x00000000, len = 0
|
flash6 : org = 0x00000000, len = 0
|
||||||
flash7 : org = 0x00000000, len = 0
|
flash7 : org = 0x00000000, len = 0
|
||||||
ram0 : org = 0x1FFFF800, len = 8k
|
ram0 : org = 0x1FFFF800, len = 8k
|
||||||
ram1 : org = 0x00000000, len = 0
|
ram1 : org = 0x00000000, len = 0
|
||||||
ram2 : org = 0x00000000, len = 0
|
ram2 : org = 0x00000000, len = 0
|
||||||
ram3 : org = 0x00000000, len = 0
|
ram3 : org = 0x00000000, len = 0
|
||||||
ram4 : org = 0x00000000, len = 0
|
ram4 : org = 0x00000000, len = 0
|
||||||
ram5 : org = 0x00000000, len = 0
|
ram5 : org = 0x00000000, len = 0
|
||||||
ram6 : org = 0x00000000, len = 0
|
ram6 : org = 0x00000000, len = 0
|
||||||
ram7 : org = 0x00000000, len = 0
|
ram7 : org = 0x00000000, len = 0
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Flash region for the configuration bytes.*/
|
/* Flash region for the configuration bytes.*/
|
||||||
SECTIONS
|
SECTIONS
|
||||||
{
|
{
|
||||||
.cfmprotect : ALIGN(4) SUBALIGN(4)
|
.cfmprotect : ALIGN(4) SUBALIGN(4)
|
||||||
{
|
{
|
||||||
KEEP(*(.cfmconfig))
|
KEEP(*(.cfmconfig))
|
||||||
} > flash1
|
} > flash1
|
||||||
}
|
}
|
||||||
|
|
||||||
/* For each data/text section two region are defined, a virtual region
|
/* For each data/text section two region are defined, a virtual region
|
||||||
and a load region (_LMA suffix).*/
|
and a load region (_LMA suffix).*/
|
||||||
|
|
||||||
/* Flash region to be used for exception vectors.*/
|
/* Flash region to be used for exception vectors.*/
|
||||||
REGION_ALIAS("VECTORS_FLASH", flash0);
|
REGION_ALIAS("VECTORS_FLASH", flash0);
|
||||||
REGION_ALIAS("VECTORS_FLASH_LMA", flash0);
|
REGION_ALIAS("VECTORS_FLASH_LMA", flash0);
|
||||||
|
|
||||||
/* Flash region to be used for constructors and destructors.*/
|
/* Flash region to be used for constructors and destructors.*/
|
||||||
REGION_ALIAS("XTORS_FLASH", flash2);
|
REGION_ALIAS("XTORS_FLASH", flash2);
|
||||||
REGION_ALIAS("XTORS_FLASH_LMA", flash2);
|
REGION_ALIAS("XTORS_FLASH_LMA", flash2);
|
||||||
|
|
||||||
/* Flash region to be used for code text.*/
|
/* Flash region to be used for code text.*/
|
||||||
REGION_ALIAS("TEXT_FLASH", flash2);
|
REGION_ALIAS("TEXT_FLASH", flash2);
|
||||||
REGION_ALIAS("TEXT_FLASH_LMA", flash2);
|
REGION_ALIAS("TEXT_FLASH_LMA", flash2);
|
||||||
|
|
||||||
/* Flash region to be used for read only data.*/
|
/* Flash region to be used for read only data.*/
|
||||||
REGION_ALIAS("RODATA_FLASH", flash2);
|
REGION_ALIAS("RODATA_FLASH", flash2);
|
||||||
REGION_ALIAS("RODATA_FLASH_LMA", flash2);
|
REGION_ALIAS("RODATA_FLASH_LMA", flash2);
|
||||||
|
|
||||||
/* Flash region to be used for various.*/
|
/* Flash region to be used for various.*/
|
||||||
REGION_ALIAS("VARIOUS_FLASH", flash2);
|
REGION_ALIAS("VARIOUS_FLASH", flash2);
|
||||||
REGION_ALIAS("VARIOUS_FLASH_LMA", flash2);
|
REGION_ALIAS("VARIOUS_FLASH_LMA", flash2);
|
||||||
|
|
||||||
/* Flash region to be used for RAM(n) initialization data.*/
|
/* Flash region to be used for RAM(n) initialization data.*/
|
||||||
REGION_ALIAS("RAM_INIT_FLASH_LMA", flash2);
|
REGION_ALIAS("RAM_INIT_FLASH_LMA", flash2);
|
||||||
|
|
||||||
/* RAM region to be used for Main stack. This stack accommodates the processing
|
/* RAM region to be used for Main stack. This stack accommodates the processing
|
||||||
of all exceptions and interrupts.*/
|
of all exceptions and interrupts.*/
|
||||||
REGION_ALIAS("MAIN_STACK_RAM", ram0);
|
REGION_ALIAS("MAIN_STACK_RAM", ram0);
|
||||||
|
|
||||||
/* RAM region to be used for the process stack. This is the stack used by
|
/* RAM region to be used for the process stack. This is the stack used by
|
||||||
the main() function.*/
|
the main() function.*/
|
||||||
REGION_ALIAS("PROCESS_STACK_RAM", ram0);
|
REGION_ALIAS("PROCESS_STACK_RAM", ram0);
|
||||||
|
|
||||||
/* RAM region to be used for data segment.*/
|
/* RAM region to be used for data segment.*/
|
||||||
REGION_ALIAS("DATA_RAM", ram0);
|
REGION_ALIAS("DATA_RAM", ram0);
|
||||||
REGION_ALIAS("DATA_RAM_LMA", flash2);
|
REGION_ALIAS("DATA_RAM_LMA", flash2);
|
||||||
|
|
||||||
/* RAM region to be used for BSS segment.*/
|
/* RAM region to be used for BSS segment.*/
|
||||||
REGION_ALIAS("BSS_RAM", ram0);
|
REGION_ALIAS("BSS_RAM", ram0);
|
||||||
|
|
||||||
/* RAM region to be used for the default heap.*/
|
/* RAM region to be used for the default heap.*/
|
||||||
REGION_ALIAS("HEAP_RAM", ram0);
|
REGION_ALIAS("HEAP_RAM", ram0);
|
||||||
|
|
||||||
__eeprom_workarea_start__ = ORIGIN(flash3);
|
__eeprom_workarea_start__ = ORIGIN(flash3);
|
||||||
__eeprom_workarea_size__ = LENGTH(flash3);
|
__eeprom_workarea_size__ = LENGTH(flash3);
|
||||||
__eeprom_workarea_end__ = __eeprom_workarea_start__ + __eeprom_workarea_size__;
|
__eeprom_workarea_end__ = __eeprom_workarea_start__ + __eeprom_workarea_size__;
|
||||||
|
|
||||||
/* Generic rules inclusion.*/
|
/* Generic rules inclusion.*/
|
||||||
INCLUDE rules.ld
|
INCLUDE rules.ld
|
||||||
|
|
|
@ -1,88 +1,88 @@
|
||||||
/*
|
/*
|
||||||
ChibiOS - Copyright (C) 2006..2016 Giovanni Di Sirio
|
ChibiOS - Copyright (C) 2006..2016 Giovanni Di Sirio
|
||||||
|
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
you may not use this file except in compliance with the License.
|
you may not use this file except in compliance with the License.
|
||||||
You may obtain a copy of the License at
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
http://www.apache.org/licenses/LICENSE-2.0
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
Unless required by applicable law or agreed to in writing, software
|
Unless required by applicable law or agreed to in writing, software
|
||||||
distributed under the License is distributed on an "AS IS" BASIS,
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
See the License for the specific language governing permissions and
|
See the License for the specific language governing permissions and
|
||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* ST32F103xB memory setup for use with the maplemini bootloader.
|
* ST32F103xB memory setup for use with the maplemini bootloader.
|
||||||
* You will have to
|
* You will have to
|
||||||
* #define CORTEX_VTOR_INIT 0x5000
|
* #define CORTEX_VTOR_INIT 0x5000
|
||||||
* in your projects chconf.h
|
* in your projects chconf.h
|
||||||
*/
|
*/
|
||||||
MEMORY
|
MEMORY
|
||||||
{
|
{
|
||||||
flash0 : org = 0x08002000, len = 128k - 0x2000
|
flash0 : org = 0x08002000, len = 128k - 0x2000
|
||||||
flash1 : org = 0x00000000, len = 0
|
flash1 : org = 0x00000000, len = 0
|
||||||
flash2 : org = 0x00000000, len = 0
|
flash2 : org = 0x00000000, len = 0
|
||||||
flash3 : org = 0x00000000, len = 0
|
flash3 : org = 0x00000000, len = 0
|
||||||
flash4 : org = 0x00000000, len = 0
|
flash4 : org = 0x00000000, len = 0
|
||||||
flash5 : org = 0x00000000, len = 0
|
flash5 : org = 0x00000000, len = 0
|
||||||
flash6 : org = 0x00000000, len = 0
|
flash6 : org = 0x00000000, len = 0
|
||||||
flash7 : org = 0x00000000, len = 0
|
flash7 : org = 0x00000000, len = 0
|
||||||
ram0 : org = 0x20000000, len = 20k
|
ram0 : org = 0x20000000, len = 20k
|
||||||
ram1 : org = 0x00000000, len = 0
|
ram1 : org = 0x00000000, len = 0
|
||||||
ram2 : org = 0x00000000, len = 0
|
ram2 : org = 0x00000000, len = 0
|
||||||
ram3 : org = 0x00000000, len = 0
|
ram3 : org = 0x00000000, len = 0
|
||||||
ram4 : org = 0x00000000, len = 0
|
ram4 : org = 0x00000000, len = 0
|
||||||
ram5 : org = 0x00000000, len = 0
|
ram5 : org = 0x00000000, len = 0
|
||||||
ram6 : org = 0x00000000, len = 0
|
ram6 : org = 0x00000000, len = 0
|
||||||
ram7 : org = 0x00000000, len = 0
|
ram7 : org = 0x00000000, len = 0
|
||||||
}
|
}
|
||||||
|
|
||||||
/* For each data/text section two region are defined, a virtual region
|
/* For each data/text section two region are defined, a virtual region
|
||||||
and a load region (_LMA suffix).*/
|
and a load region (_LMA suffix).*/
|
||||||
|
|
||||||
/* Flash region to be used for exception vectors.*/
|
/* Flash region to be used for exception vectors.*/
|
||||||
REGION_ALIAS("VECTORS_FLASH", flash0);
|
REGION_ALIAS("VECTORS_FLASH", flash0);
|
||||||
REGION_ALIAS("VECTORS_FLASH_LMA", flash0);
|
REGION_ALIAS("VECTORS_FLASH_LMA", flash0);
|
||||||
|
|
||||||
/* Flash region to be used for constructors and destructors.*/
|
/* Flash region to be used for constructors and destructors.*/
|
||||||
REGION_ALIAS("XTORS_FLASH", flash0);
|
REGION_ALIAS("XTORS_FLASH", flash0);
|
||||||
REGION_ALIAS("XTORS_FLASH_LMA", flash0);
|
REGION_ALIAS("XTORS_FLASH_LMA", flash0);
|
||||||
|
|
||||||
/* Flash region to be used for code text.*/
|
/* Flash region to be used for code text.*/
|
||||||
REGION_ALIAS("TEXT_FLASH", flash0);
|
REGION_ALIAS("TEXT_FLASH", flash0);
|
||||||
REGION_ALIAS("TEXT_FLASH_LMA", flash0);
|
REGION_ALIAS("TEXT_FLASH_LMA", flash0);
|
||||||
|
|
||||||
/* Flash region to be used for read only data.*/
|
/* Flash region to be used for read only data.*/
|
||||||
REGION_ALIAS("RODATA_FLASH", flash0);
|
REGION_ALIAS("RODATA_FLASH", flash0);
|
||||||
REGION_ALIAS("RODATA_FLASH_LMA", flash0);
|
REGION_ALIAS("RODATA_FLASH_LMA", flash0);
|
||||||
|
|
||||||
/* Flash region to be used for various.*/
|
/* Flash region to be used for various.*/
|
||||||
REGION_ALIAS("VARIOUS_FLASH", flash0);
|
REGION_ALIAS("VARIOUS_FLASH", flash0);
|
||||||
REGION_ALIAS("VARIOUS_FLASH_LMA", flash0);
|
REGION_ALIAS("VARIOUS_FLASH_LMA", flash0);
|
||||||
|
|
||||||
/* Flash region to be used for RAM(n) initialization data.*/
|
/* Flash region to be used for RAM(n) initialization data.*/
|
||||||
REGION_ALIAS("RAM_INIT_FLASH_LMA", flash0);
|
REGION_ALIAS("RAM_INIT_FLASH_LMA", flash0);
|
||||||
|
|
||||||
/* RAM region to be used for Main stack. This stack accommodates the processing
|
/* RAM region to be used for Main stack. This stack accommodates the processing
|
||||||
of all exceptions and interrupts.*/
|
of all exceptions and interrupts.*/
|
||||||
REGION_ALIAS("MAIN_STACK_RAM", ram0);
|
REGION_ALIAS("MAIN_STACK_RAM", ram0);
|
||||||
|
|
||||||
/* RAM region to be used for the process stack. This is the stack used by
|
/* RAM region to be used for the process stack. This is the stack used by
|
||||||
the main() function.*/
|
the main() function.*/
|
||||||
REGION_ALIAS("PROCESS_STACK_RAM", ram0);
|
REGION_ALIAS("PROCESS_STACK_RAM", ram0);
|
||||||
|
|
||||||
/* RAM region to be used for data segment.*/
|
/* RAM region to be used for data segment.*/
|
||||||
REGION_ALIAS("DATA_RAM", ram0);
|
REGION_ALIAS("DATA_RAM", ram0);
|
||||||
REGION_ALIAS("DATA_RAM_LMA", flash0);
|
REGION_ALIAS("DATA_RAM_LMA", flash0);
|
||||||
|
|
||||||
/* RAM region to be used for BSS segment.*/
|
/* RAM region to be used for BSS segment.*/
|
||||||
REGION_ALIAS("BSS_RAM", ram0);
|
REGION_ALIAS("BSS_RAM", ram0);
|
||||||
|
|
||||||
/* RAM region to be used for the default heap.*/
|
/* RAM region to be used for the default heap.*/
|
||||||
REGION_ALIAS("HEAP_RAM", ram0);
|
REGION_ALIAS("HEAP_RAM", ram0);
|
||||||
|
|
||||||
/* Generic rules inclusion.*/
|
/* Generic rules inclusion.*/
|
||||||
INCLUDE rules.ld
|
INCLUDE rules.ld
|
||||||
|
|
8
keyboards/chibios_test/rules.mk
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
#BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration
|
||||||
|
MOUSEKEY_ENABLE ?= yes # Mouse keys
|
||||||
|
EXTRAKEY_ENABLE ?= yes # Audio control and System control
|
||||||
|
CONSOLE_ENABLE ?= yes # Console for debug
|
||||||
|
COMMAND_ENABLE ?= yes # Commands for debug and configuration
|
||||||
|
SLEEP_LED_ENABLE ?= yes # Breathing sleep LED during USB suspend
|
||||||
|
NKRO_ENABLE ?= yes # USB Nkey Rollover
|
||||||
|
CUSTOM_MATRIX ?= yes # Custom matrix file
|
|
@ -1,41 +1,3 @@
|
||||||
# project specific files
|
ifndef MAKEFILE_INCLUDED
|
||||||
SRC = matrix.c \
|
|
||||||
led.c
|
|
||||||
|
|
||||||
## chip/board settings
|
|
||||||
# the next two should match the directories in
|
|
||||||
# <chibios>/os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES)
|
|
||||||
MCU_FAMILY = STM32
|
|
||||||
MCU_SERIES = STM32F0xx
|
|
||||||
# linker script to use
|
|
||||||
# it should exist either in <chibios>/os/common/ports/ARMCMx/compilers/GCC/ld/
|
|
||||||
# or <this_dir>/ld/
|
|
||||||
MCU_LDSCRIPT = STM32F072xB
|
|
||||||
# startup code to use
|
|
||||||
# is should exist in <chibios>/os/common/ports/ARMCMx/compilers/GCC/mk/
|
|
||||||
MCU_STARTUP = stm32f0xx
|
|
||||||
# it should exist either in <chibios>/os/hal/boards/
|
|
||||||
# or <this_dir>/boards
|
|
||||||
BOARD = ST_STM32F072B_DISCOVERY
|
|
||||||
# Cortex version
|
|
||||||
# Teensy LC is cortex-m0; Teensy 3.x are cortex-m4
|
|
||||||
MCU = cortex-m0
|
|
||||||
# ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7
|
|
||||||
ARMV = 6
|
|
||||||
# If you want to be able to jump to bootloader from firmware on STM32 MCUs,
|
|
||||||
# set the correct BOOTLOADER_ADDRESS. Either set it here, or define it in
|
|
||||||
# ./bootloader_defs.h or in ./boards/<FOO>/bootloader_defs.h (if you have
|
|
||||||
# a custom board definition that you plan to reuse).
|
|
||||||
# If you're not setting it here, leave it commented out.
|
|
||||||
# It is chip dependent, the correct number can be looked up here (page 175):
|
|
||||||
# http://www.st.com/web/en/resource/technical/document/application_note/CD00167594.pdf
|
|
||||||
# This also requires a patch to chibios:
|
|
||||||
# <tmk_dir>/tmk_core/tool/chibios/ch-bootloader-jump.patch
|
|
||||||
#STM32_BOOTLOADER_ADDRESS = 0x1FFFC800
|
|
||||||
|
|
||||||
# Build Options
|
|
||||||
# comment out to disable the options.
|
|
||||||
#
|
|
||||||
ifndef QUANTUM_DIR
|
|
||||||
include ../../../Makefile
|
include ../../../Makefile
|
||||||
endif
|
endif
|
|
@ -1,171 +1,171 @@
|
||||||
/*
|
/*
|
||||||
ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio
|
ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio
|
||||||
|
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
you may not use this file except in compliance with the License.
|
you may not use this file except in compliance with the License.
|
||||||
You may obtain a copy of the License at
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
http://www.apache.org/licenses/LICENSE-2.0
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
Unless required by applicable law or agreed to in writing, software
|
Unless required by applicable law or agreed to in writing, software
|
||||||
distributed under the License is distributed on an "AS IS" BASIS,
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
See the License for the specific language governing permissions and
|
See the License for the specific language governing permissions and
|
||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef _MCUCONF_H_
|
#ifndef _MCUCONF_H_
|
||||||
#define _MCUCONF_H_
|
#define _MCUCONF_H_
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* STM32F0xx drivers configuration.
|
* STM32F0xx drivers configuration.
|
||||||
* The following settings override the default settings present in
|
* The following settings override the default settings present in
|
||||||
* the various device driver implementation headers.
|
* the various device driver implementation headers.
|
||||||
* Note that the settings for each driver only have effect if the whole
|
* Note that the settings for each driver only have effect if the whole
|
||||||
* driver is enabled in halconf.h.
|
* driver is enabled in halconf.h.
|
||||||
*
|
*
|
||||||
* IRQ priorities:
|
* IRQ priorities:
|
||||||
* 3...0 Lowest...Highest.
|
* 3...0 Lowest...Highest.
|
||||||
*
|
*
|
||||||
* DMA priorities:
|
* DMA priorities:
|
||||||
* 0...3 Lowest...Highest.
|
* 0...3 Lowest...Highest.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define STM32F0xx_MCUCONF
|
#define STM32F0xx_MCUCONF
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* HAL driver system settings.
|
* HAL driver system settings.
|
||||||
*/
|
*/
|
||||||
#define STM32_NO_INIT FALSE
|
#define STM32_NO_INIT FALSE
|
||||||
#define STM32_PVD_ENABLE FALSE
|
#define STM32_PVD_ENABLE FALSE
|
||||||
#define STM32_PLS STM32_PLS_LEV0
|
#define STM32_PLS STM32_PLS_LEV0
|
||||||
#define STM32_HSI_ENABLED TRUE
|
#define STM32_HSI_ENABLED TRUE
|
||||||
#define STM32_HSI14_ENABLED TRUE
|
#define STM32_HSI14_ENABLED TRUE
|
||||||
#define STM32_HSI48_ENABLED FALSE
|
#define STM32_HSI48_ENABLED FALSE
|
||||||
#define STM32_LSI_ENABLED TRUE
|
#define STM32_LSI_ENABLED TRUE
|
||||||
#define STM32_HSE_ENABLED FALSE
|
#define STM32_HSE_ENABLED FALSE
|
||||||
#define STM32_LSE_ENABLED FALSE
|
#define STM32_LSE_ENABLED FALSE
|
||||||
#define STM32_SW STM32_SW_PLL
|
#define STM32_SW STM32_SW_PLL
|
||||||
#define STM32_PLLSRC STM32_PLLSRC_HSI_DIV2
|
#define STM32_PLLSRC STM32_PLLSRC_HSI_DIV2
|
||||||
#define STM32_PREDIV_VALUE 1
|
#define STM32_PREDIV_VALUE 1
|
||||||
#define STM32_PLLMUL_VALUE 12
|
#define STM32_PLLMUL_VALUE 12
|
||||||
#define STM32_HPRE STM32_HPRE_DIV1
|
#define STM32_HPRE STM32_HPRE_DIV1
|
||||||
#define STM32_PPRE STM32_PPRE_DIV1
|
#define STM32_PPRE STM32_PPRE_DIV1
|
||||||
#define STM32_ADCSW STM32_ADCSW_HSI14
|
#define STM32_ADCSW STM32_ADCSW_HSI14
|
||||||
#define STM32_ADCPRE STM32_ADCPRE_DIV4
|
#define STM32_ADCPRE STM32_ADCPRE_DIV4
|
||||||
#define STM32_MCOSEL STM32_MCOSEL_NOCLOCK
|
#define STM32_MCOSEL STM32_MCOSEL_NOCLOCK
|
||||||
#define STM32_ADCPRE STM32_ADCPRE_DIV4
|
#define STM32_ADCPRE STM32_ADCPRE_DIV4
|
||||||
#define STM32_ADCSW STM32_ADCSW_HSI14
|
#define STM32_ADCSW STM32_ADCSW_HSI14
|
||||||
#define STM32_USBSW STM32_USBSW_HSI48
|
#define STM32_USBSW STM32_USBSW_HSI48
|
||||||
#define STM32_CECSW STM32_CECSW_HSI
|
#define STM32_CECSW STM32_CECSW_HSI
|
||||||
#define STM32_I2C1SW STM32_I2C1SW_HSI
|
#define STM32_I2C1SW STM32_I2C1SW_HSI
|
||||||
#define STM32_USART1SW STM32_USART1SW_PCLK
|
#define STM32_USART1SW STM32_USART1SW_PCLK
|
||||||
#define STM32_RTCSEL STM32_RTCSEL_LSI
|
#define STM32_RTCSEL STM32_RTCSEL_LSI
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* ADC driver system settings.
|
* ADC driver system settings.
|
||||||
*/
|
*/
|
||||||
#define STM32_ADC_USE_ADC1 FALSE
|
#define STM32_ADC_USE_ADC1 FALSE
|
||||||
#define STM32_ADC_ADC1_DMA_PRIORITY 2
|
#define STM32_ADC_ADC1_DMA_PRIORITY 2
|
||||||
#define STM32_ADC_IRQ_PRIORITY 2
|
#define STM32_ADC_IRQ_PRIORITY 2
|
||||||
#define STM32_ADC_ADC1_DMA_IRQ_PRIORITY 2
|
#define STM32_ADC_ADC1_DMA_IRQ_PRIORITY 2
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* EXT driver system settings.
|
* EXT driver system settings.
|
||||||
*/
|
*/
|
||||||
#define STM32_EXT_EXTI0_1_IRQ_PRIORITY 3
|
#define STM32_EXT_EXTI0_1_IRQ_PRIORITY 3
|
||||||
#define STM32_EXT_EXTI2_3_IRQ_PRIORITY 3
|
#define STM32_EXT_EXTI2_3_IRQ_PRIORITY 3
|
||||||
#define STM32_EXT_EXTI4_15_IRQ_PRIORITY 3
|
#define STM32_EXT_EXTI4_15_IRQ_PRIORITY 3
|
||||||
#define STM32_EXT_EXTI16_IRQ_PRIORITY 3
|
#define STM32_EXT_EXTI16_IRQ_PRIORITY 3
|
||||||
#define STM32_EXT_EXTI17_IRQ_PRIORITY 3
|
#define STM32_EXT_EXTI17_IRQ_PRIORITY 3
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* GPT driver system settings.
|
* GPT driver system settings.
|
||||||
*/
|
*/
|
||||||
#define STM32_GPT_USE_TIM1 FALSE
|
#define STM32_GPT_USE_TIM1 FALSE
|
||||||
#define STM32_GPT_USE_TIM2 FALSE
|
#define STM32_GPT_USE_TIM2 FALSE
|
||||||
#define STM32_GPT_USE_TIM3 FALSE
|
#define STM32_GPT_USE_TIM3 FALSE
|
||||||
#define STM32_GPT_USE_TIM14 FALSE
|
#define STM32_GPT_USE_TIM14 FALSE
|
||||||
#define STM32_GPT_TIM1_IRQ_PRIORITY 2
|
#define STM32_GPT_TIM1_IRQ_PRIORITY 2
|
||||||
#define STM32_GPT_TIM2_IRQ_PRIORITY 2
|
#define STM32_GPT_TIM2_IRQ_PRIORITY 2
|
||||||
#define STM32_GPT_TIM3_IRQ_PRIORITY 2
|
#define STM32_GPT_TIM3_IRQ_PRIORITY 2
|
||||||
#define STM32_GPT_TIM14_IRQ_PRIORITY 2
|
#define STM32_GPT_TIM14_IRQ_PRIORITY 2
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* I2C driver system settings.
|
* I2C driver system settings.
|
||||||
*/
|
*/
|
||||||
#define STM32_I2C_USE_I2C1 FALSE
|
#define STM32_I2C_USE_I2C1 FALSE
|
||||||
#define STM32_I2C_USE_I2C2 FALSE
|
#define STM32_I2C_USE_I2C2 FALSE
|
||||||
#define STM32_I2C_BUSY_TIMEOUT 50
|
#define STM32_I2C_BUSY_TIMEOUT 50
|
||||||
#define STM32_I2C_I2C1_IRQ_PRIORITY 3
|
#define STM32_I2C_I2C1_IRQ_PRIORITY 3
|
||||||
#define STM32_I2C_I2C2_IRQ_PRIORITY 3
|
#define STM32_I2C_I2C2_IRQ_PRIORITY 3
|
||||||
#define STM32_I2C_USE_DMA TRUE
|
#define STM32_I2C_USE_DMA TRUE
|
||||||
#define STM32_I2C_I2C1_DMA_PRIORITY 1
|
#define STM32_I2C_I2C1_DMA_PRIORITY 1
|
||||||
#define STM32_I2C_I2C2_DMA_PRIORITY 1
|
#define STM32_I2C_I2C2_DMA_PRIORITY 1
|
||||||
#define STM32_I2C_DMA_ERROR_HOOK(i2cp) osalSysHalt("DMA failure")
|
#define STM32_I2C_DMA_ERROR_HOOK(i2cp) osalSysHalt("DMA failure")
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* ICU driver system settings.
|
* ICU driver system settings.
|
||||||
*/
|
*/
|
||||||
#define STM32_ICU_USE_TIM1 FALSE
|
#define STM32_ICU_USE_TIM1 FALSE
|
||||||
#define STM32_ICU_USE_TIM2 FALSE
|
#define STM32_ICU_USE_TIM2 FALSE
|
||||||
#define STM32_ICU_USE_TIM3 FALSE
|
#define STM32_ICU_USE_TIM3 FALSE
|
||||||
#define STM32_ICU_TIM1_IRQ_PRIORITY 3
|
#define STM32_ICU_TIM1_IRQ_PRIORITY 3
|
||||||
#define STM32_ICU_TIM2_IRQ_PRIORITY 3
|
#define STM32_ICU_TIM2_IRQ_PRIORITY 3
|
||||||
#define STM32_ICU_TIM3_IRQ_PRIORITY 3
|
#define STM32_ICU_TIM3_IRQ_PRIORITY 3
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* PWM driver system settings.
|
* PWM driver system settings.
|
||||||
*/
|
*/
|
||||||
#define STM32_PWM_USE_ADVANCED FALSE
|
#define STM32_PWM_USE_ADVANCED FALSE
|
||||||
#define STM32_PWM_USE_TIM1 FALSE
|
#define STM32_PWM_USE_TIM1 FALSE
|
||||||
#define STM32_PWM_USE_TIM2 FALSE
|
#define STM32_PWM_USE_TIM2 FALSE
|
||||||
#define STM32_PWM_USE_TIM3 FALSE
|
#define STM32_PWM_USE_TIM3 FALSE
|
||||||
#define STM32_PWM_TIM1_IRQ_PRIORITY 3
|
#define STM32_PWM_TIM1_IRQ_PRIORITY 3
|
||||||
#define STM32_PWM_TIM2_IRQ_PRIORITY 3
|
#define STM32_PWM_TIM2_IRQ_PRIORITY 3
|
||||||
#define STM32_PWM_TIM3_IRQ_PRIORITY 3
|
#define STM32_PWM_TIM3_IRQ_PRIORITY 3
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* SERIAL driver system settings.
|
* SERIAL driver system settings.
|
||||||
*/
|
*/
|
||||||
#define STM32_SERIAL_USE_USART1 FALSE
|
#define STM32_SERIAL_USE_USART1 FALSE
|
||||||
#define STM32_SERIAL_USE_USART2 FALSE
|
#define STM32_SERIAL_USE_USART2 FALSE
|
||||||
#define STM32_SERIAL_USART1_PRIORITY 3
|
#define STM32_SERIAL_USART1_PRIORITY 3
|
||||||
#define STM32_SERIAL_USART2_PRIORITY 3
|
#define STM32_SERIAL_USART2_PRIORITY 3
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* SPI driver system settings.
|
* SPI driver system settings.
|
||||||
*/
|
*/
|
||||||
#define STM32_SPI_USE_SPI1 FALSE
|
#define STM32_SPI_USE_SPI1 FALSE
|
||||||
#define STM32_SPI_USE_SPI2 FALSE
|
#define STM32_SPI_USE_SPI2 FALSE
|
||||||
#define STM32_SPI_SPI1_DMA_PRIORITY 1
|
#define STM32_SPI_SPI1_DMA_PRIORITY 1
|
||||||
#define STM32_SPI_SPI2_DMA_PRIORITY 1
|
#define STM32_SPI_SPI2_DMA_PRIORITY 1
|
||||||
#define STM32_SPI_SPI1_IRQ_PRIORITY 2
|
#define STM32_SPI_SPI1_IRQ_PRIORITY 2
|
||||||
#define STM32_SPI_SPI2_IRQ_PRIORITY 2
|
#define STM32_SPI_SPI2_IRQ_PRIORITY 2
|
||||||
#define STM32_SPI_DMA_ERROR_HOOK(spip) osalSysHalt("DMA failure")
|
#define STM32_SPI_DMA_ERROR_HOOK(spip) osalSysHalt("DMA failure")
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* ST driver system settings.
|
* ST driver system settings.
|
||||||
*/
|
*/
|
||||||
#define STM32_ST_IRQ_PRIORITY 2
|
#define STM32_ST_IRQ_PRIORITY 2
|
||||||
#define STM32_ST_USE_TIMER 2
|
#define STM32_ST_USE_TIMER 2
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* UART driver system settings.
|
* UART driver system settings.
|
||||||
*/
|
*/
|
||||||
#define STM32_UART_USE_USART1 FALSE
|
#define STM32_UART_USE_USART1 FALSE
|
||||||
#define STM32_UART_USE_USART2 FALSE
|
#define STM32_UART_USE_USART2 FALSE
|
||||||
#define STM32_UART_USART1_IRQ_PRIORITY 3
|
#define STM32_UART_USART1_IRQ_PRIORITY 3
|
||||||
#define STM32_UART_USART2_IRQ_PRIORITY 3
|
#define STM32_UART_USART2_IRQ_PRIORITY 3
|
||||||
#define STM32_UART_USART1_DMA_PRIORITY 0
|
#define STM32_UART_USART1_DMA_PRIORITY 0
|
||||||
#define STM32_UART_USART2_DMA_PRIORITY 0
|
#define STM32_UART_USART2_DMA_PRIORITY 0
|
||||||
#define STM32_UART_DMA_ERROR_HOOK(uartp) osalSysHalt("DMA failure")
|
#define STM32_UART_DMA_ERROR_HOOK(uartp) osalSysHalt("DMA failure")
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* USB driver system settings.
|
* USB driver system settings.
|
||||||
*/
|
*/
|
||||||
#define STM32_USB_USE_USB1 TRUE
|
#define STM32_USB_USE_USB1 TRUE
|
||||||
#define STM32_USB_LOW_POWER_ON_SUSPEND FALSE
|
#define STM32_USB_LOW_POWER_ON_SUSPEND FALSE
|
||||||
#define STM32_USB_USB1_LP_IRQ_PRIORITY 3
|
#define STM32_USB_USB1_LP_IRQ_PRIORITY 3
|
||||||
|
|
||||||
#endif /* _MCUCONF_H_ */
|
#endif /* _MCUCONF_H_ */
|
||||||
|
|
41
keyboards/chibios_test/stm32_f072_onekey/rules.mk
Normal file
|
@ -0,0 +1,41 @@
|
||||||
|
# project specific files
|
||||||
|
SRC = matrix.c \
|
||||||
|
led.c
|
||||||
|
|
||||||
|
## chip/board settings
|
||||||
|
# the next two should match the directories in
|
||||||
|
# <chibios>/os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES)
|
||||||
|
MCU_FAMILY = STM32
|
||||||
|
MCU_SERIES = STM32F0xx
|
||||||
|
# linker script to use
|
||||||
|
# it should exist either in <chibios>/os/common/ports/ARMCMx/compilers/GCC/ld/
|
||||||
|
# or <this_dir>/ld/
|
||||||
|
MCU_LDSCRIPT = STM32F072xB
|
||||||
|
# startup code to use
|
||||||
|
# is should exist in <chibios>/os/common/ports/ARMCMx/compilers/GCC/mk/
|
||||||
|
MCU_STARTUP = stm32f0xx
|
||||||
|
# it should exist either in <chibios>/os/hal/boards/
|
||||||
|
# or <this_dir>/boards
|
||||||
|
BOARD = ST_STM32F072B_DISCOVERY
|
||||||
|
# Cortex version
|
||||||
|
# Teensy LC is cortex-m0; Teensy 3.x are cortex-m4
|
||||||
|
MCU = cortex-m0
|
||||||
|
# ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7
|
||||||
|
ARMV = 6
|
||||||
|
# If you want to be able to jump to bootloader from firmware on STM32 MCUs,
|
||||||
|
# set the correct BOOTLOADER_ADDRESS. Either set it here, or define it in
|
||||||
|
# ./bootloader_defs.h or in ./boards/<FOO>/bootloader_defs.h (if you have
|
||||||
|
# a custom board definition that you plan to reuse).
|
||||||
|
# If you're not setting it here, leave it commented out.
|
||||||
|
# It is chip dependent, the correct number can be looked up here (page 175):
|
||||||
|
# http://www.st.com/web/en/resource/technical/document/application_note/CD00167594.pdf
|
||||||
|
# This also requires a patch to chibios:
|
||||||
|
# <tmk_dir>/tmk_core/tool/chibios/ch-bootloader-jump.patch
|
||||||
|
#STM32_BOOTLOADER_ADDRESS = 0x1FFFC800
|
||||||
|
|
||||||
|
# Build Options
|
||||||
|
# comment out to disable the options.
|
||||||
|
#
|
||||||
|
ifndef QUANTUM_DIR
|
||||||
|
include ../../../Makefile
|
||||||
|
endif
|
|
@ -1,52 +1,3 @@
|
||||||
# project specific files
|
ifndef MAKEFILE_INCLUDED
|
||||||
SRC = matrix.c \
|
|
||||||
led.c
|
|
||||||
|
|
||||||
# GENERIC STM32F103C8T6 board - stm32duino bootloader
|
|
||||||
OPT_DEFS = -DCORTEX_VTOR_INIT=0x2000
|
|
||||||
MCU_LDSCRIPT = STM32F103x8_stm32duino_bootloader
|
|
||||||
BOARD = GENERIC_STM32_F103
|
|
||||||
|
|
||||||
# GENERIC STM32F103C8T6 board - no bootloader (programmer over serial or SWD)
|
|
||||||
# OPT_DEFS =
|
|
||||||
# MCU_LDSCRIPT = STM32F103x8
|
|
||||||
# BOARD = GENERIC_STM32_F103
|
|
||||||
|
|
||||||
# MAPLE MINI
|
|
||||||
# OPT_DEFS = -DCORTEX_VTOR_INIT=0x5000
|
|
||||||
# MCU_LDSCRIPT = STM32F103xB_maplemini_bootloader
|
|
||||||
# BOARD = MAPLEMINI_STM32_F103
|
|
||||||
|
|
||||||
## chip/board settings
|
|
||||||
# the next two should match the directories in
|
|
||||||
# <chibios>/os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES)
|
|
||||||
MCU_FAMILY = STM32
|
|
||||||
MCU_SERIES = STM32F1xx
|
|
||||||
# linker script to use
|
|
||||||
# it should exist either in <chibios>/os/common/ports/ARMCMx/compilers/GCC/ld/
|
|
||||||
# or <this_dir>/ld/
|
|
||||||
# startup code to use
|
|
||||||
# is should exist in <chibios>/os/common/ports/ARMCMx/compilers/GCC/mk/
|
|
||||||
MCU_STARTUP = stm32f1xx
|
|
||||||
# it should exist either in <chibios>/os/hal/boards/
|
|
||||||
# or <this_dir>/boards
|
|
||||||
# Cortex version
|
|
||||||
# Teensy LC is cortex-m0; Teensy 3.x are cortex-m4
|
|
||||||
MCU = cortex-m3
|
|
||||||
# ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7
|
|
||||||
ARMV = 7
|
|
||||||
# If you want to be able to jump to bootloader from firmware on STM32 MCUs,
|
|
||||||
# set the correct BOOTLOADER_ADDRESS. Either set it here, or define it in
|
|
||||||
# ./bootloader_defs.h or in ./boards/<FOO>/bootloader_defs.h (if you have
|
|
||||||
# a custom board definition that you plan to reuse).
|
|
||||||
# If you're not setting it here, leave it commented out.
|
|
||||||
# It is chip dependent, the correct number can be looked up here (page 175):
|
|
||||||
# http://www.st.com/web/en/resource/technical/document/application_note/CD00167594.pdf
|
|
||||||
# This also requires a patch to chibios:
|
|
||||||
# <tmk_dir>/tmk_core/tool/chibios/ch-bootloader-jump.patch
|
|
||||||
#STM32_BOOTLOADER_ADDRESS = 0x1FFFC800
|
|
||||||
|
|
||||||
|
|
||||||
ifndef QUANTUM_DIR
|
|
||||||
include ../../../Makefile
|
include ../../../Makefile
|
||||||
endif
|
endif
|
|
@ -1,209 +1,209 @@
|
||||||
/*
|
/*
|
||||||
ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio
|
ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio
|
||||||
|
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
you may not use this file except in compliance with the License.
|
you may not use this file except in compliance with the License.
|
||||||
You may obtain a copy of the License at
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
http://www.apache.org/licenses/LICENSE-2.0
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
Unless required by applicable law or agreed to in writing, software
|
Unless required by applicable law or agreed to in writing, software
|
||||||
distributed under the License is distributed on an "AS IS" BASIS,
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
See the License for the specific language governing permissions and
|
See the License for the specific language governing permissions and
|
||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef _MCUCONF_H_
|
#ifndef _MCUCONF_H_
|
||||||
#define _MCUCONF_H_
|
#define _MCUCONF_H_
|
||||||
|
|
||||||
#define STM32F103_MCUCONF
|
#define STM32F103_MCUCONF
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* STM32F103 drivers configuration.
|
* STM32F103 drivers configuration.
|
||||||
* The following settings override the default settings present in
|
* The following settings override the default settings present in
|
||||||
* the various device driver implementation headers.
|
* the various device driver implementation headers.
|
||||||
* Note that the settings for each driver only have effect if the whole
|
* Note that the settings for each driver only have effect if the whole
|
||||||
* driver is enabled in halconf.h.
|
* driver is enabled in halconf.h.
|
||||||
*
|
*
|
||||||
* IRQ priorities:
|
* IRQ priorities:
|
||||||
* 15...0 Lowest...Highest.
|
* 15...0 Lowest...Highest.
|
||||||
*
|
*
|
||||||
* DMA priorities:
|
* DMA priorities:
|
||||||
* 0...3 Lowest...Highest.
|
* 0...3 Lowest...Highest.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* HAL driver system settings.
|
* HAL driver system settings.
|
||||||
*/
|
*/
|
||||||
#define STM32_NO_INIT FALSE
|
#define STM32_NO_INIT FALSE
|
||||||
#define STM32_HSI_ENABLED TRUE
|
#define STM32_HSI_ENABLED TRUE
|
||||||
#define STM32_LSI_ENABLED FALSE
|
#define STM32_LSI_ENABLED FALSE
|
||||||
#define STM32_HSE_ENABLED TRUE
|
#define STM32_HSE_ENABLED TRUE
|
||||||
#define STM32_LSE_ENABLED FALSE
|
#define STM32_LSE_ENABLED FALSE
|
||||||
#define STM32_SW STM32_SW_PLL
|
#define STM32_SW STM32_SW_PLL
|
||||||
#define STM32_PLLSRC STM32_PLLSRC_HSE
|
#define STM32_PLLSRC STM32_PLLSRC_HSE
|
||||||
#define STM32_PLLXTPRE STM32_PLLXTPRE_DIV1
|
#define STM32_PLLXTPRE STM32_PLLXTPRE_DIV1
|
||||||
#define STM32_PLLMUL_VALUE 9
|
#define STM32_PLLMUL_VALUE 9
|
||||||
#define STM32_HPRE STM32_HPRE_DIV1
|
#define STM32_HPRE STM32_HPRE_DIV1
|
||||||
#define STM32_PPRE1 STM32_PPRE1_DIV2
|
#define STM32_PPRE1 STM32_PPRE1_DIV2
|
||||||
#define STM32_PPRE2 STM32_PPRE2_DIV2
|
#define STM32_PPRE2 STM32_PPRE2_DIV2
|
||||||
#define STM32_ADCPRE STM32_ADCPRE_DIV4
|
#define STM32_ADCPRE STM32_ADCPRE_DIV4
|
||||||
#define STM32_USB_CLOCK_REQUIRED TRUE
|
#define STM32_USB_CLOCK_REQUIRED TRUE
|
||||||
#define STM32_USBPRE STM32_USBPRE_DIV1P5
|
#define STM32_USBPRE STM32_USBPRE_DIV1P5
|
||||||
#define STM32_MCOSEL STM32_MCOSEL_NOCLOCK
|
#define STM32_MCOSEL STM32_MCOSEL_NOCLOCK
|
||||||
#define STM32_RTCSEL STM32_RTCSEL_HSEDIV
|
#define STM32_RTCSEL STM32_RTCSEL_HSEDIV
|
||||||
#define STM32_PVD_ENABLE FALSE
|
#define STM32_PVD_ENABLE FALSE
|
||||||
#define STM32_PLS STM32_PLS_LEV0
|
#define STM32_PLS STM32_PLS_LEV0
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* ADC driver system settings.
|
* ADC driver system settings.
|
||||||
*/
|
*/
|
||||||
#define STM32_ADC_USE_ADC1 FALSE
|
#define STM32_ADC_USE_ADC1 FALSE
|
||||||
#define STM32_ADC_ADC1_DMA_PRIORITY 2
|
#define STM32_ADC_ADC1_DMA_PRIORITY 2
|
||||||
#define STM32_ADC_ADC1_IRQ_PRIORITY 6
|
#define STM32_ADC_ADC1_IRQ_PRIORITY 6
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* CAN driver system settings.
|
* CAN driver system settings.
|
||||||
*/
|
*/
|
||||||
#define STM32_CAN_USE_CAN1 FALSE
|
#define STM32_CAN_USE_CAN1 FALSE
|
||||||
#define STM32_CAN_CAN1_IRQ_PRIORITY 11
|
#define STM32_CAN_CAN1_IRQ_PRIORITY 11
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* EXT driver system settings.
|
* EXT driver system settings.
|
||||||
*/
|
*/
|
||||||
#define STM32_EXT_EXTI0_IRQ_PRIORITY 6
|
#define STM32_EXT_EXTI0_IRQ_PRIORITY 6
|
||||||
#define STM32_EXT_EXTI1_IRQ_PRIORITY 6
|
#define STM32_EXT_EXTI1_IRQ_PRIORITY 6
|
||||||
#define STM32_EXT_EXTI2_IRQ_PRIORITY 6
|
#define STM32_EXT_EXTI2_IRQ_PRIORITY 6
|
||||||
#define STM32_EXT_EXTI3_IRQ_PRIORITY 6
|
#define STM32_EXT_EXTI3_IRQ_PRIORITY 6
|
||||||
#define STM32_EXT_EXTI4_IRQ_PRIORITY 6
|
#define STM32_EXT_EXTI4_IRQ_PRIORITY 6
|
||||||
#define STM32_EXT_EXTI5_9_IRQ_PRIORITY 6
|
#define STM32_EXT_EXTI5_9_IRQ_PRIORITY 6
|
||||||
#define STM32_EXT_EXTI10_15_IRQ_PRIORITY 6
|
#define STM32_EXT_EXTI10_15_IRQ_PRIORITY 6
|
||||||
#define STM32_EXT_EXTI16_IRQ_PRIORITY 6
|
#define STM32_EXT_EXTI16_IRQ_PRIORITY 6
|
||||||
#define STM32_EXT_EXTI17_IRQ_PRIORITY 6
|
#define STM32_EXT_EXTI17_IRQ_PRIORITY 6
|
||||||
#define STM32_EXT_EXTI18_IRQ_PRIORITY 6
|
#define STM32_EXT_EXTI18_IRQ_PRIORITY 6
|
||||||
#define STM32_EXT_EXTI19_IRQ_PRIORITY 6
|
#define STM32_EXT_EXTI19_IRQ_PRIORITY 6
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* GPT driver system settings.
|
* GPT driver system settings.
|
||||||
*/
|
*/
|
||||||
#define STM32_GPT_USE_TIM1 FALSE
|
#define STM32_GPT_USE_TIM1 FALSE
|
||||||
#define STM32_GPT_USE_TIM2 FALSE
|
#define STM32_GPT_USE_TIM2 FALSE
|
||||||
#define STM32_GPT_USE_TIM3 FALSE
|
#define STM32_GPT_USE_TIM3 FALSE
|
||||||
#define STM32_GPT_USE_TIM4 FALSE
|
#define STM32_GPT_USE_TIM4 FALSE
|
||||||
#define STM32_GPT_USE_TIM5 FALSE
|
#define STM32_GPT_USE_TIM5 FALSE
|
||||||
#define STM32_GPT_USE_TIM8 FALSE
|
#define STM32_GPT_USE_TIM8 FALSE
|
||||||
#define STM32_GPT_TIM1_IRQ_PRIORITY 7
|
#define STM32_GPT_TIM1_IRQ_PRIORITY 7
|
||||||
#define STM32_GPT_TIM2_IRQ_PRIORITY 7
|
#define STM32_GPT_TIM2_IRQ_PRIORITY 7
|
||||||
#define STM32_GPT_TIM3_IRQ_PRIORITY 7
|
#define STM32_GPT_TIM3_IRQ_PRIORITY 7
|
||||||
#define STM32_GPT_TIM4_IRQ_PRIORITY 7
|
#define STM32_GPT_TIM4_IRQ_PRIORITY 7
|
||||||
#define STM32_GPT_TIM5_IRQ_PRIORITY 7
|
#define STM32_GPT_TIM5_IRQ_PRIORITY 7
|
||||||
#define STM32_GPT_TIM8_IRQ_PRIORITY 7
|
#define STM32_GPT_TIM8_IRQ_PRIORITY 7
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* I2C driver system settings.
|
* I2C driver system settings.
|
||||||
*/
|
*/
|
||||||
#define STM32_I2C_USE_I2C1 FALSE
|
#define STM32_I2C_USE_I2C1 FALSE
|
||||||
#define STM32_I2C_USE_I2C2 FALSE
|
#define STM32_I2C_USE_I2C2 FALSE
|
||||||
#define STM32_I2C_BUSY_TIMEOUT 50
|
#define STM32_I2C_BUSY_TIMEOUT 50
|
||||||
#define STM32_I2C_I2C1_IRQ_PRIORITY 5
|
#define STM32_I2C_I2C1_IRQ_PRIORITY 5
|
||||||
#define STM32_I2C_I2C2_IRQ_PRIORITY 5
|
#define STM32_I2C_I2C2_IRQ_PRIORITY 5
|
||||||
#define STM32_I2C_I2C1_DMA_PRIORITY 3
|
#define STM32_I2C_I2C1_DMA_PRIORITY 3
|
||||||
#define STM32_I2C_I2C2_DMA_PRIORITY 3
|
#define STM32_I2C_I2C2_DMA_PRIORITY 3
|
||||||
#define STM32_I2C_DMA_ERROR_HOOK(i2cp) osalSysHalt("DMA failure")
|
#define STM32_I2C_DMA_ERROR_HOOK(i2cp) osalSysHalt("DMA failure")
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* ICU driver system settings.
|
* ICU driver system settings.
|
||||||
*/
|
*/
|
||||||
#define STM32_ICU_USE_TIM1 FALSE
|
#define STM32_ICU_USE_TIM1 FALSE
|
||||||
#define STM32_ICU_USE_TIM2 FALSE
|
#define STM32_ICU_USE_TIM2 FALSE
|
||||||
#define STM32_ICU_USE_TIM3 FALSE
|
#define STM32_ICU_USE_TIM3 FALSE
|
||||||
#define STM32_ICU_USE_TIM4 FALSE
|
#define STM32_ICU_USE_TIM4 FALSE
|
||||||
#define STM32_ICU_USE_TIM5 FALSE
|
#define STM32_ICU_USE_TIM5 FALSE
|
||||||
#define STM32_ICU_USE_TIM8 FALSE
|
#define STM32_ICU_USE_TIM8 FALSE
|
||||||
#define STM32_ICU_TIM1_IRQ_PRIORITY 7
|
#define STM32_ICU_TIM1_IRQ_PRIORITY 7
|
||||||
#define STM32_ICU_TIM2_IRQ_PRIORITY 7
|
#define STM32_ICU_TIM2_IRQ_PRIORITY 7
|
||||||
#define STM32_ICU_TIM3_IRQ_PRIORITY 7
|
#define STM32_ICU_TIM3_IRQ_PRIORITY 7
|
||||||
#define STM32_ICU_TIM4_IRQ_PRIORITY 7
|
#define STM32_ICU_TIM4_IRQ_PRIORITY 7
|
||||||
#define STM32_ICU_TIM5_IRQ_PRIORITY 7
|
#define STM32_ICU_TIM5_IRQ_PRIORITY 7
|
||||||
#define STM32_ICU_TIM8_IRQ_PRIORITY 7
|
#define STM32_ICU_TIM8_IRQ_PRIORITY 7
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* PWM driver system settings.
|
* PWM driver system settings.
|
||||||
*/
|
*/
|
||||||
#define STM32_PWM_USE_ADVANCED FALSE
|
#define STM32_PWM_USE_ADVANCED FALSE
|
||||||
#define STM32_PWM_USE_TIM1 FALSE
|
#define STM32_PWM_USE_TIM1 FALSE
|
||||||
#define STM32_PWM_USE_TIM2 FALSE
|
#define STM32_PWM_USE_TIM2 FALSE
|
||||||
#define STM32_PWM_USE_TIM3 FALSE
|
#define STM32_PWM_USE_TIM3 FALSE
|
||||||
#define STM32_PWM_USE_TIM4 FALSE
|
#define STM32_PWM_USE_TIM4 FALSE
|
||||||
#define STM32_PWM_USE_TIM5 FALSE
|
#define STM32_PWM_USE_TIM5 FALSE
|
||||||
#define STM32_PWM_USE_TIM8 FALSE
|
#define STM32_PWM_USE_TIM8 FALSE
|
||||||
#define STM32_PWM_TIM1_IRQ_PRIORITY 7
|
#define STM32_PWM_TIM1_IRQ_PRIORITY 7
|
||||||
#define STM32_PWM_TIM2_IRQ_PRIORITY 7
|
#define STM32_PWM_TIM2_IRQ_PRIORITY 7
|
||||||
#define STM32_PWM_TIM3_IRQ_PRIORITY 7
|
#define STM32_PWM_TIM3_IRQ_PRIORITY 7
|
||||||
#define STM32_PWM_TIM4_IRQ_PRIORITY 7
|
#define STM32_PWM_TIM4_IRQ_PRIORITY 7
|
||||||
#define STM32_PWM_TIM5_IRQ_PRIORITY 7
|
#define STM32_PWM_TIM5_IRQ_PRIORITY 7
|
||||||
#define STM32_PWM_TIM8_IRQ_PRIORITY 7
|
#define STM32_PWM_TIM8_IRQ_PRIORITY 7
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* RTC driver system settings.
|
* RTC driver system settings.
|
||||||
*/
|
*/
|
||||||
#define STM32_RTC_IRQ_PRIORITY 15
|
#define STM32_RTC_IRQ_PRIORITY 15
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* SERIAL driver system settings.
|
* SERIAL driver system settings.
|
||||||
*/
|
*/
|
||||||
#define STM32_SERIAL_USE_USART1 FALSE
|
#define STM32_SERIAL_USE_USART1 FALSE
|
||||||
#define STM32_SERIAL_USE_USART2 FALSE
|
#define STM32_SERIAL_USE_USART2 FALSE
|
||||||
#define STM32_SERIAL_USE_USART3 FALSE
|
#define STM32_SERIAL_USE_USART3 FALSE
|
||||||
#define STM32_SERIAL_USE_UART4 FALSE
|
#define STM32_SERIAL_USE_UART4 FALSE
|
||||||
#define STM32_SERIAL_USE_UART5 FALSE
|
#define STM32_SERIAL_USE_UART5 FALSE
|
||||||
#define STM32_SERIAL_USART1_PRIORITY 12
|
#define STM32_SERIAL_USART1_PRIORITY 12
|
||||||
#define STM32_SERIAL_USART2_PRIORITY 12
|
#define STM32_SERIAL_USART2_PRIORITY 12
|
||||||
#define STM32_SERIAL_USART3_PRIORITY 12
|
#define STM32_SERIAL_USART3_PRIORITY 12
|
||||||
#define STM32_SERIAL_UART4_PRIORITY 12
|
#define STM32_SERIAL_UART4_PRIORITY 12
|
||||||
#define STM32_SERIAL_UART5_PRIORITY 12
|
#define STM32_SERIAL_UART5_PRIORITY 12
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* SPI driver system settings.
|
* SPI driver system settings.
|
||||||
*/
|
*/
|
||||||
#define STM32_SPI_USE_SPI1 FALSE
|
#define STM32_SPI_USE_SPI1 FALSE
|
||||||
#define STM32_SPI_USE_SPI2 FALSE
|
#define STM32_SPI_USE_SPI2 FALSE
|
||||||
#define STM32_SPI_USE_SPI3 FALSE
|
#define STM32_SPI_USE_SPI3 FALSE
|
||||||
#define STM32_SPI_SPI1_DMA_PRIORITY 1
|
#define STM32_SPI_SPI1_DMA_PRIORITY 1
|
||||||
#define STM32_SPI_SPI2_DMA_PRIORITY 1
|
#define STM32_SPI_SPI2_DMA_PRIORITY 1
|
||||||
#define STM32_SPI_SPI3_DMA_PRIORITY 1
|
#define STM32_SPI_SPI3_DMA_PRIORITY 1
|
||||||
#define STM32_SPI_SPI1_IRQ_PRIORITY 10
|
#define STM32_SPI_SPI1_IRQ_PRIORITY 10
|
||||||
#define STM32_SPI_SPI2_IRQ_PRIORITY 10
|
#define STM32_SPI_SPI2_IRQ_PRIORITY 10
|
||||||
#define STM32_SPI_SPI3_IRQ_PRIORITY 10
|
#define STM32_SPI_SPI3_IRQ_PRIORITY 10
|
||||||
#define STM32_SPI_DMA_ERROR_HOOK(spip) osalSysHalt("DMA failure")
|
#define STM32_SPI_DMA_ERROR_HOOK(spip) osalSysHalt("DMA failure")
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* ST driver system settings.
|
* ST driver system settings.
|
||||||
*/
|
*/
|
||||||
#define STM32_ST_IRQ_PRIORITY 8
|
#define STM32_ST_IRQ_PRIORITY 8
|
||||||
#define STM32_ST_USE_TIMER 2
|
#define STM32_ST_USE_TIMER 2
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* UART driver system settings.
|
* UART driver system settings.
|
||||||
*/
|
*/
|
||||||
#define STM32_UART_USE_USART1 FALSE
|
#define STM32_UART_USE_USART1 FALSE
|
||||||
#define STM32_UART_USE_USART2 FALSE
|
#define STM32_UART_USE_USART2 FALSE
|
||||||
#define STM32_UART_USE_USART3 FALSE
|
#define STM32_UART_USE_USART3 FALSE
|
||||||
#define STM32_UART_USART1_IRQ_PRIORITY 12
|
#define STM32_UART_USART1_IRQ_PRIORITY 12
|
||||||
#define STM32_UART_USART2_IRQ_PRIORITY 12
|
#define STM32_UART_USART2_IRQ_PRIORITY 12
|
||||||
#define STM32_UART_USART3_IRQ_PRIORITY 12
|
#define STM32_UART_USART3_IRQ_PRIORITY 12
|
||||||
#define STM32_UART_USART1_DMA_PRIORITY 0
|
#define STM32_UART_USART1_DMA_PRIORITY 0
|
||||||
#define STM32_UART_USART2_DMA_PRIORITY 0
|
#define STM32_UART_USART2_DMA_PRIORITY 0
|
||||||
#define STM32_UART_USART3_DMA_PRIORITY 0
|
#define STM32_UART_USART3_DMA_PRIORITY 0
|
||||||
#define STM32_UART_DMA_ERROR_HOOK(uartp) osalSysHalt("DMA failure")
|
#define STM32_UART_DMA_ERROR_HOOK(uartp) osalSysHalt("DMA failure")
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* USB driver system settings.
|
* USB driver system settings.
|
||||||
*/
|
*/
|
||||||
#define STM32_USB_USE_USB1 TRUE
|
#define STM32_USB_USE_USB1 TRUE
|
||||||
#define STM32_USB_LOW_POWER_ON_SUSPEND FALSE
|
#define STM32_USB_LOW_POWER_ON_SUSPEND FALSE
|
||||||
#define STM32_USB_USB1_HP_IRQ_PRIORITY 13
|
#define STM32_USB_USB1_HP_IRQ_PRIORITY 13
|
||||||
#define STM32_USB_USB1_LP_IRQ_PRIORITY 14
|
#define STM32_USB_USB1_LP_IRQ_PRIORITY 14
|
||||||
|
|
||||||
#endif /* _MCUCONF_H_ */
|
#endif /* _MCUCONF_H_ */
|
||||||
|
|
52
keyboards/chibios_test/stm32_f103_onekey/rules.mk
Normal file
|
@ -0,0 +1,52 @@
|
||||||
|
# project specific files
|
||||||
|
SRC = matrix.c \
|
||||||
|
led.c
|
||||||
|
|
||||||
|
# GENERIC STM32F103C8T6 board - stm32duino bootloader
|
||||||
|
OPT_DEFS = -DCORTEX_VTOR_INIT=0x2000
|
||||||
|
MCU_LDSCRIPT = STM32F103x8_stm32duino_bootloader
|
||||||
|
BOARD = GENERIC_STM32_F103
|
||||||
|
|
||||||
|
# GENERIC STM32F103C8T6 board - no bootloader (programmer over serial or SWD)
|
||||||
|
# OPT_DEFS =
|
||||||
|
# MCU_LDSCRIPT = STM32F103x8
|
||||||
|
# BOARD = GENERIC_STM32_F103
|
||||||
|
|
||||||
|
# MAPLE MINI
|
||||||
|
# OPT_DEFS = -DCORTEX_VTOR_INIT=0x5000
|
||||||
|
# MCU_LDSCRIPT = STM32F103xB_maplemini_bootloader
|
||||||
|
# BOARD = MAPLEMINI_STM32_F103
|
||||||
|
|
||||||
|
## chip/board settings
|
||||||
|
# the next two should match the directories in
|
||||||
|
# <chibios>/os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES)
|
||||||
|
MCU_FAMILY = STM32
|
||||||
|
MCU_SERIES = STM32F1xx
|
||||||
|
# linker script to use
|
||||||
|
# it should exist either in <chibios>/os/common/ports/ARMCMx/compilers/GCC/ld/
|
||||||
|
# or <this_dir>/ld/
|
||||||
|
# startup code to use
|
||||||
|
# is should exist in <chibios>/os/common/ports/ARMCMx/compilers/GCC/mk/
|
||||||
|
MCU_STARTUP = stm32f1xx
|
||||||
|
# it should exist either in <chibios>/os/hal/boards/
|
||||||
|
# or <this_dir>/boards
|
||||||
|
# Cortex version
|
||||||
|
# Teensy LC is cortex-m0; Teensy 3.x are cortex-m4
|
||||||
|
MCU = cortex-m3
|
||||||
|
# ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7
|
||||||
|
ARMV = 7
|
||||||
|
# If you want to be able to jump to bootloader from firmware on STM32 MCUs,
|
||||||
|
# set the correct BOOTLOADER_ADDRESS. Either set it here, or define it in
|
||||||
|
# ./bootloader_defs.h or in ./boards/<FOO>/bootloader_defs.h (if you have
|
||||||
|
# a custom board definition that you plan to reuse).
|
||||||
|
# If you're not setting it here, leave it commented out.
|
||||||
|
# It is chip dependent, the correct number can be looked up here (page 175):
|
||||||
|
# http://www.st.com/web/en/resource/technical/document/application_note/CD00167594.pdf
|
||||||
|
# This also requires a patch to chibios:
|
||||||
|
# <tmk_dir>/tmk_core/tool/chibios/ch-bootloader-jump.patch
|
||||||
|
#STM32_BOOTLOADER_ADDRESS = 0x1FFFC800
|
||||||
|
|
||||||
|
|
||||||
|
ifndef QUANTUM_DIR
|
||||||
|
include ../../../Makefile
|
||||||
|
endif
|
|
@ -1,49 +1,3 @@
|
||||||
# project specific files
|
ifndef MAKEFILE_INCLUDED
|
||||||
SRC = matrix.c \
|
|
||||||
led.c
|
|
||||||
|
|
||||||
## chip/board settings
|
|
||||||
# - the next two should match the directories in
|
|
||||||
# <chibios>/os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES)
|
|
||||||
# - For Teensies, FAMILY = KINETIS and SERIES is either
|
|
||||||
# KL2x (LC) or K20x (3.0,3.1,3.2).
|
|
||||||
MCU_FAMILY = KINETIS
|
|
||||||
MCU_SERIES = KL2x
|
|
||||||
|
|
||||||
# Linker script to use
|
|
||||||
# - it should exist either in <chibios>/os/common/ports/ARMCMx/compilers/GCC/ld/
|
|
||||||
# or <this_dir>/ld/
|
|
||||||
# - NOTE: a custom ld script is needed for EEPROM on Teensy LC
|
|
||||||
# - LDSCRIPT =
|
|
||||||
# - MKL26Z64 for Teensy LC
|
|
||||||
# - MK20DX128 for Teensy 3.0
|
|
||||||
# - MK20DX256 for Teensy 3.1 and 3.2
|
|
||||||
MCU_LDSCRIPT = MKL26Z64
|
|
||||||
|
|
||||||
# Startup code to use
|
|
||||||
# - it should exist in <chibios>/os/common/ports/ARMCMx/compilers/GCC/mk/
|
|
||||||
# - STARTUP =
|
|
||||||
# - kl2x for Teensy LC
|
|
||||||
# - k20x5 for Teensy 3.0
|
|
||||||
# - k20x7 for Teensy 3.1 and 3.2
|
|
||||||
MCU_STARTUP = kl2x
|
|
||||||
|
|
||||||
# Board: it should exist either in <chibios>/os/hal/boards/
|
|
||||||
# or <this_dir>/boards
|
|
||||||
# - BOARD =
|
|
||||||
# - PJRC_TEENSY_LC for Teensy LC
|
|
||||||
# - PJRC_TEENSY_3 for Teensy 3.0
|
|
||||||
# - PJRC_TEENSY_3_1 for Teensy 3.1 or 3.2
|
|
||||||
BOARD = PJRC_TEENSY_LC
|
|
||||||
|
|
||||||
# Cortex version
|
|
||||||
# Teensy LC is cortex-m0plus; Teensy 3.x are cortex-m4
|
|
||||||
MCU = cortex-m0plus
|
|
||||||
|
|
||||||
# ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7
|
|
||||||
# I.e. 6 for Teensy LC; 7 for Teensy 3.x
|
|
||||||
ARMV = 6
|
|
||||||
|
|
||||||
ifndef QUANTUM_DIR
|
|
||||||
include ../../../Makefile
|
include ../../../Makefile
|
||||||
endif
|
endif
|
|
@ -1,187 +1,187 @@
|
||||||
/*
|
/*
|
||||||
ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio
|
ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio
|
||||||
|
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
you may not use this file except in compliance with the License.
|
you may not use this file except in compliance with the License.
|
||||||
You may obtain a copy of the License at
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
http://www.apache.org/licenses/LICENSE-2.0
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
Unless required by applicable law or agreed to in writing, software
|
Unless required by applicable law or agreed to in writing, software
|
||||||
distributed under the License is distributed on an "AS IS" BASIS,
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
See the License for the specific language governing permissions and
|
See the License for the specific language governing permissions and
|
||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @file templates/halconf.h
|
* @file templates/halconf.h
|
||||||
* @brief HAL configuration header.
|
* @brief HAL configuration header.
|
||||||
* @details HAL configuration file, this file allows to enable or disable the
|
* @details HAL configuration file, this file allows to enable or disable the
|
||||||
* various device drivers from your application. You may also use
|
* various device drivers from your application. You may also use
|
||||||
* this file in order to override the device drivers default settings.
|
* this file in order to override the device drivers default settings.
|
||||||
*
|
*
|
||||||
* @addtogroup HAL_CONF
|
* @addtogroup HAL_CONF
|
||||||
* @{
|
* @{
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef _HALCONF_H_
|
#ifndef _HALCONF_H_
|
||||||
#define _HALCONF_H_
|
#define _HALCONF_H_
|
||||||
|
|
||||||
#include "mcuconf.h"
|
#include "mcuconf.h"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Enables the PAL subsystem.
|
* @brief Enables the PAL subsystem.
|
||||||
*/
|
*/
|
||||||
#if !defined(HAL_USE_PAL) || defined(__DOXYGEN__)
|
#if !defined(HAL_USE_PAL) || defined(__DOXYGEN__)
|
||||||
#define HAL_USE_PAL TRUE
|
#define HAL_USE_PAL TRUE
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Enables the ADC subsystem.
|
* @brief Enables the ADC subsystem.
|
||||||
*/
|
*/
|
||||||
#if !defined(HAL_USE_ADC) || defined(__DOXYGEN__)
|
#if !defined(HAL_USE_ADC) || defined(__DOXYGEN__)
|
||||||
#define HAL_USE_ADC FALSE
|
#define HAL_USE_ADC FALSE
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Enables the CAN subsystem.
|
* @brief Enables the CAN subsystem.
|
||||||
*/
|
*/
|
||||||
#if !defined(HAL_USE_CAN) || defined(__DOXYGEN__)
|
#if !defined(HAL_USE_CAN) || defined(__DOXYGEN__)
|
||||||
#define HAL_USE_CAN FALSE
|
#define HAL_USE_CAN FALSE
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Enables the DAC subsystem.
|
* @brief Enables the DAC subsystem.
|
||||||
*/
|
*/
|
||||||
#if !defined(HAL_USE_DAC) || defined(__DOXYGEN__)
|
#if !defined(HAL_USE_DAC) || defined(__DOXYGEN__)
|
||||||
#define HAL_USE_DAC FALSE
|
#define HAL_USE_DAC FALSE
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Enables the EXT subsystem.
|
* @brief Enables the EXT subsystem.
|
||||||
*/
|
*/
|
||||||
#if !defined(HAL_USE_EXT) || defined(__DOXYGEN__)
|
#if !defined(HAL_USE_EXT) || defined(__DOXYGEN__)
|
||||||
#define HAL_USE_EXT FALSE
|
#define HAL_USE_EXT FALSE
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Enables the GPT subsystem.
|
* @brief Enables the GPT subsystem.
|
||||||
*/
|
*/
|
||||||
#if !defined(HAL_USE_GPT) || defined(__DOXYGEN__)
|
#if !defined(HAL_USE_GPT) || defined(__DOXYGEN__)
|
||||||
#define HAL_USE_GPT FALSE
|
#define HAL_USE_GPT FALSE
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Enables the I2C subsystem.
|
* @brief Enables the I2C subsystem.
|
||||||
*/
|
*/
|
||||||
#if !defined(HAL_USE_I2C) || defined(__DOXYGEN__)
|
#if !defined(HAL_USE_I2C) || defined(__DOXYGEN__)
|
||||||
#define HAL_USE_I2C FALSE
|
#define HAL_USE_I2C FALSE
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Enables the I2S subsystem.
|
* @brief Enables the I2S subsystem.
|
||||||
*/
|
*/
|
||||||
#if !defined(HAL_USE_I2S) || defined(__DOXYGEN__)
|
#if !defined(HAL_USE_I2S) || defined(__DOXYGEN__)
|
||||||
#define HAL_USE_I2S FALSE
|
#define HAL_USE_I2S FALSE
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Enables the ICU subsystem.
|
* @brief Enables the ICU subsystem.
|
||||||
*/
|
*/
|
||||||
#if !defined(HAL_USE_ICU) || defined(__DOXYGEN__)
|
#if !defined(HAL_USE_ICU) || defined(__DOXYGEN__)
|
||||||
#define HAL_USE_ICU FALSE
|
#define HAL_USE_ICU FALSE
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Enables the MAC subsystem.
|
* @brief Enables the MAC subsystem.
|
||||||
*/
|
*/
|
||||||
#if !defined(HAL_USE_MAC) || defined(__DOXYGEN__)
|
#if !defined(HAL_USE_MAC) || defined(__DOXYGEN__)
|
||||||
#define HAL_USE_MAC FALSE
|
#define HAL_USE_MAC FALSE
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Enables the MMC_SPI subsystem.
|
* @brief Enables the MMC_SPI subsystem.
|
||||||
*/
|
*/
|
||||||
#if !defined(HAL_USE_MMC_SPI) || defined(__DOXYGEN__)
|
#if !defined(HAL_USE_MMC_SPI) || defined(__DOXYGEN__)
|
||||||
#define HAL_USE_MMC_SPI FALSE
|
#define HAL_USE_MMC_SPI FALSE
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Enables the PWM subsystem.
|
* @brief Enables the PWM subsystem.
|
||||||
*/
|
*/
|
||||||
#if !defined(HAL_USE_PWM) || defined(__DOXYGEN__)
|
#if !defined(HAL_USE_PWM) || defined(__DOXYGEN__)
|
||||||
#define HAL_USE_PWM FALSE
|
#define HAL_USE_PWM FALSE
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Enables the RTC subsystem.
|
* @brief Enables the RTC subsystem.
|
||||||
*/
|
*/
|
||||||
#if !defined(HAL_USE_RTC) || defined(__DOXYGEN__)
|
#if !defined(HAL_USE_RTC) || defined(__DOXYGEN__)
|
||||||
#define HAL_USE_RTC FALSE
|
#define HAL_USE_RTC FALSE
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Enables the SDC subsystem.
|
* @brief Enables the SDC subsystem.
|
||||||
*/
|
*/
|
||||||
#if !defined(HAL_USE_SDC) || defined(__DOXYGEN__)
|
#if !defined(HAL_USE_SDC) || defined(__DOXYGEN__)
|
||||||
#define HAL_USE_SDC FALSE
|
#define HAL_USE_SDC FALSE
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Enables the SERIAL subsystem.
|
* @brief Enables the SERIAL subsystem.
|
||||||
*/
|
*/
|
||||||
#if !defined(HAL_USE_SERIAL) || defined(__DOXYGEN__)
|
#if !defined(HAL_USE_SERIAL) || defined(__DOXYGEN__)
|
||||||
#define HAL_USE_SERIAL FALSE
|
#define HAL_USE_SERIAL FALSE
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Enables the SERIAL over USB subsystem.
|
* @brief Enables the SERIAL over USB subsystem.
|
||||||
*/
|
*/
|
||||||
#if !defined(HAL_USE_SERIAL_USB) || defined(__DOXYGEN__)
|
#if !defined(HAL_USE_SERIAL_USB) || defined(__DOXYGEN__)
|
||||||
#define HAL_USE_SERIAL_USB FALSE
|
#define HAL_USE_SERIAL_USB FALSE
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Enables the SPI subsystem.
|
* @brief Enables the SPI subsystem.
|
||||||
*/
|
*/
|
||||||
#if !defined(HAL_USE_SPI) || defined(__DOXYGEN__)
|
#if !defined(HAL_USE_SPI) || defined(__DOXYGEN__)
|
||||||
#define HAL_USE_SPI FALSE
|
#define HAL_USE_SPI FALSE
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Enables the UART subsystem.
|
* @brief Enables the UART subsystem.
|
||||||
*/
|
*/
|
||||||
#if !defined(HAL_USE_UART) || defined(__DOXYGEN__)
|
#if !defined(HAL_USE_UART) || defined(__DOXYGEN__)
|
||||||
#define HAL_USE_UART FALSE
|
#define HAL_USE_UART FALSE
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Enables the USB subsystem.
|
* @brief Enables the USB subsystem.
|
||||||
*/
|
*/
|
||||||
#if !defined(HAL_USE_USB) || defined(__DOXYGEN__)
|
#if !defined(HAL_USE_USB) || defined(__DOXYGEN__)
|
||||||
#define HAL_USE_USB TRUE
|
#define HAL_USE_USB TRUE
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Enables the WDG subsystem.
|
* @brief Enables the WDG subsystem.
|
||||||
*/
|
*/
|
||||||
#if !defined(HAL_USE_WDG) || defined(__DOXYGEN__)
|
#if !defined(HAL_USE_WDG) || defined(__DOXYGEN__)
|
||||||
#define HAL_USE_WDG FALSE
|
#define HAL_USE_WDG FALSE
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*===========================================================================*/
|
/*===========================================================================*/
|
||||||
/* USB driver related settings. */
|
/* USB driver related settings. */
|
||||||
/*===========================================================================*/
|
/*===========================================================================*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Enables synchronous APIs.
|
* @brief Enables synchronous APIs.
|
||||||
* @note Disabling this option saves both code and data space.
|
* @note Disabling this option saves both code and data space.
|
||||||
*/
|
*/
|
||||||
#if !defined(USB_USE_WAIT) || defined(__DOXYGEN__)
|
#if !defined(USB_USE_WAIT) || defined(__DOXYGEN__)
|
||||||
#define USB_USE_WAIT TRUE
|
#define USB_USE_WAIT TRUE
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif /* _HALCONF_H_ */
|
#endif /* _HALCONF_H_ */
|
||||||
|
|
||||||
/** @} */
|
/** @} */
|
||||||
|
|
|
@ -1,55 +1,55 @@
|
||||||
/*
|
/*
|
||||||
ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio
|
ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio
|
||||||
|
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
you may not use this file except in compliance with the License.
|
you may not use this file except in compliance with the License.
|
||||||
You may obtain a copy of the License at
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
http://www.apache.org/licenses/LICENSE-2.0
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
Unless required by applicable law or agreed to in writing, software
|
Unless required by applicable law or agreed to in writing, software
|
||||||
distributed under the License is distributed on an "AS IS" BASIS,
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
See the License for the specific language governing permissions and
|
See the License for the specific language governing permissions and
|
||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef _MCUCONF_H_
|
#ifndef _MCUCONF_H_
|
||||||
#define _MCUCONF_H_
|
#define _MCUCONF_H_
|
||||||
|
|
||||||
#define KL2x_MCUCONF
|
#define KL2x_MCUCONF
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* HAL driver system settings.
|
* HAL driver system settings.
|
||||||
*/
|
*/
|
||||||
#if 1
|
#if 1
|
||||||
/* PEE mode - 48MHz system clock driven by (16 MHz) external crystal. */
|
/* PEE mode - 48MHz system clock driven by (16 MHz) external crystal. */
|
||||||
#define KINETIS_MCG_MODE KINETIS_MCG_MODE_PEE
|
#define KINETIS_MCG_MODE KINETIS_MCG_MODE_PEE
|
||||||
#define KINETIS_PLLCLK_FREQUENCY 96000000UL
|
#define KINETIS_PLLCLK_FREQUENCY 96000000UL
|
||||||
#define KINETIS_SYSCLK_FREQUENCY 48000000UL
|
#define KINETIS_SYSCLK_FREQUENCY 48000000UL
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
/* crystal-less FEI mode - 48 MHz with internal 32.768 kHz crystal */
|
/* crystal-less FEI mode - 48 MHz with internal 32.768 kHz crystal */
|
||||||
#define KINETIS_MCG_MODE KINETIS_MCG_MODE_FEI
|
#define KINETIS_MCG_MODE KINETIS_MCG_MODE_FEI
|
||||||
#define KINETIS_MCG_FLL_DMX32 1 /* Fine-tune for 32.768 kHz */
|
#define KINETIS_MCG_FLL_DMX32 1 /* Fine-tune for 32.768 kHz */
|
||||||
#define KINETIS_MCG_FLL_DRS 1 /* 1464x FLL factor */
|
#define KINETIS_MCG_FLL_DRS 1 /* 1464x FLL factor */
|
||||||
#define KINETIS_SYSCLK_FREQUENCY 47972352UL /* 32.768 kHz * 1464 (~48 MHz) */
|
#define KINETIS_SYSCLK_FREQUENCY 47972352UL /* 32.768 kHz * 1464 (~48 MHz) */
|
||||||
#define KINETIS_CLKDIV1_OUTDIV1 1 /* do not divide system clock */
|
#define KINETIS_CLKDIV1_OUTDIV1 1 /* do not divide system clock */
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* SERIAL driver system settings.
|
* SERIAL driver system settings.
|
||||||
*/
|
*/
|
||||||
#define KINETIS_SERIAL_USE_UART0 TRUE
|
#define KINETIS_SERIAL_USE_UART0 TRUE
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* USB driver settings
|
* USB driver settings
|
||||||
*/
|
*/
|
||||||
#define KINETIS_USB_USE_USB0 TRUE
|
#define KINETIS_USB_USE_USB0 TRUE
|
||||||
/* Need to redefine this, since the default is for K20x */
|
/* Need to redefine this, since the default is for K20x */
|
||||||
/* This is for Teensy LC; you should comment it out (or change to 5)
|
/* This is for Teensy LC; you should comment it out (or change to 5)
|
||||||
* for Teensy 3.x */
|
* for Teensy 3.x */
|
||||||
#define KINETIS_USB_USB0_IRQ_PRIORITY 2
|
#define KINETIS_USB_USB0_IRQ_PRIORITY 2
|
||||||
|
|
||||||
#endif /* _MCUCONF_H_ */
|
#endif /* _MCUCONF_H_ */
|
||||||
|
|
49
keyboards/chibios_test/teensy_lc_onekey/rules.mk
Normal file
|
@ -0,0 +1,49 @@
|
||||||
|
# project specific files
|
||||||
|
SRC = matrix.c \
|
||||||
|
led.c
|
||||||
|
|
||||||
|
## chip/board settings
|
||||||
|
# - the next two should match the directories in
|
||||||
|
# <chibios>/os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES)
|
||||||
|
# - For Teensies, FAMILY = KINETIS and SERIES is either
|
||||||
|
# KL2x (LC) or K20x (3.0,3.1,3.2).
|
||||||
|
MCU_FAMILY = KINETIS
|
||||||
|
MCU_SERIES = KL2x
|
||||||
|
|
||||||
|
# Linker script to use
|
||||||
|
# - it should exist either in <chibios>/os/common/ports/ARMCMx/compilers/GCC/ld/
|
||||||
|
# or <this_dir>/ld/
|
||||||
|
# - NOTE: a custom ld script is needed for EEPROM on Teensy LC
|
||||||
|
# - LDSCRIPT =
|
||||||
|
# - MKL26Z64 for Teensy LC
|
||||||
|
# - MK20DX128 for Teensy 3.0
|
||||||
|
# - MK20DX256 for Teensy 3.1 and 3.2
|
||||||
|
MCU_LDSCRIPT = MKL26Z64
|
||||||
|
|
||||||
|
# Startup code to use
|
||||||
|
# - it should exist in <chibios>/os/common/ports/ARMCMx/compilers/GCC/mk/
|
||||||
|
# - STARTUP =
|
||||||
|
# - kl2x for Teensy LC
|
||||||
|
# - k20x5 for Teensy 3.0
|
||||||
|
# - k20x7 for Teensy 3.1 and 3.2
|
||||||
|
MCU_STARTUP = kl2x
|
||||||
|
|
||||||
|
# Board: it should exist either in <chibios>/os/hal/boards/
|
||||||
|
# or <this_dir>/boards
|
||||||
|
# - BOARD =
|
||||||
|
# - PJRC_TEENSY_LC for Teensy LC
|
||||||
|
# - PJRC_TEENSY_3 for Teensy 3.0
|
||||||
|
# - PJRC_TEENSY_3_1 for Teensy 3.1 or 3.2
|
||||||
|
BOARD = PJRC_TEENSY_LC
|
||||||
|
|
||||||
|
# Cortex version
|
||||||
|
# Teensy LC is cortex-m0plus; Teensy 3.x are cortex-m4
|
||||||
|
MCU = cortex-m0plus
|
||||||
|
|
||||||
|
# ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7
|
||||||
|
# I.e. 6 for Teensy LC; 7 for Teensy 3.x
|
||||||
|
ARMV = 6
|
||||||
|
|
||||||
|
ifndef QUANTUM_DIR
|
||||||
|
include ../../../Makefile
|
||||||
|
endif
|
|
@ -1,109 +1,5 @@
|
||||||
#----------------------------------------------------------------------------
|
|
||||||
# On command line:
|
|
||||||
#
|
|
||||||
# make all = Make software.
|
|
||||||
#
|
|
||||||
# make clean = Clean out built project files.
|
|
||||||
#
|
|
||||||
# make coff = Convert ELF to AVR COFF.
|
|
||||||
#
|
|
||||||
# make extcoff = Convert ELF to AVR Extended COFF.
|
|
||||||
#
|
|
||||||
# make program = Download the hex file to the device.
|
|
||||||
# Please customize your programmer settings(PROGRAM_CMD)
|
|
||||||
#
|
|
||||||
# make teensy = Download the hex file to the device, using teensy_loader_cli.
|
|
||||||
# (must have teensy_loader_cli installed).
|
|
||||||
#
|
|
||||||
# make dfu = Download the hex file to the device, using dfu-programmer (must
|
|
||||||
# have dfu-programmer installed).
|
|
||||||
#
|
|
||||||
# make flip = Download the hex file to the device, using Atmel FLIP (must
|
|
||||||
# have Atmel FLIP installed).
|
|
||||||
#
|
|
||||||
# make dfu-ee = Download the eeprom file to the device, using dfu-programmer
|
|
||||||
# (must have dfu-programmer installed).
|
|
||||||
#
|
|
||||||
# make flip-ee = Download the eeprom file to the device, using Atmel FLIP
|
|
||||||
# (must have Atmel FLIP installed).
|
|
||||||
#
|
|
||||||
# make debug = Start either simulavr or avarice as specified for debugging,
|
|
||||||
# with avr-gdb or avr-insight as the front end for debugging.
|
|
||||||
#
|
|
||||||
# make filename.s = Just compile filename.c into the assembler code only.
|
|
||||||
#
|
|
||||||
# make filename.i = Create a preprocessed source file for use in submitting
|
|
||||||
# bug reports to the GCC project.
|
|
||||||
#
|
|
||||||
# To rebuild project do "make clean" then "make all".
|
|
||||||
#----------------------------------------------------------------------------
|
|
||||||
|
|
||||||
SUBPROJECT_DEFAULT = rev2
|
SUBPROJECT_DEFAULT = rev2
|
||||||
|
|
||||||
# MCU name
|
ifndef MAKEFILE_INCLUDED
|
||||||
MCU = atmega32u4
|
|
||||||
|
|
||||||
# Processor frequency.
|
|
||||||
# This will define a symbol, F_CPU, in all source code files equal to the
|
|
||||||
# processor frequency in Hz. You can then use this symbol in your source code to
|
|
||||||
# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
|
|
||||||
# automatically to create a 32-bit value in your source code.
|
|
||||||
#
|
|
||||||
# This will be an integer division of F_USB below, as it is sourced by
|
|
||||||
# F_USB after it has run through any CPU prescalers. Note that this value
|
|
||||||
# does not *change* the processor frequency - it should merely be updated to
|
|
||||||
# reflect the processor speed set externally so that the code can use accurate
|
|
||||||
# software delays.
|
|
||||||
F_CPU = 16000000
|
|
||||||
|
|
||||||
|
|
||||||
#
|
|
||||||
# LUFA specific
|
|
||||||
#
|
|
||||||
# Target architecture (see library "Board Types" documentation).
|
|
||||||
ARCH = AVR8
|
|
||||||
|
|
||||||
# Input clock frequency.
|
|
||||||
# This will define a symbol, F_USB, in all source code files equal to the
|
|
||||||
# input clock frequency (before any prescaling is performed) in Hz. This value may
|
|
||||||
# differ from F_CPU if prescaling is used on the latter, and is required as the
|
|
||||||
# raw input clock is fed directly to the PLL sections of the AVR for high speed
|
|
||||||
# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
|
|
||||||
# at the end, this will be done automatically to create a 32-bit value in your
|
|
||||||
# source code.
|
|
||||||
#
|
|
||||||
# If no clock division is performed on the input clock inside the AVR (via the
|
|
||||||
# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
|
|
||||||
F_USB = $(F_CPU)
|
|
||||||
|
|
||||||
# Interrupt driven control endpoint task(+60)
|
|
||||||
OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
|
|
||||||
|
|
||||||
|
|
||||||
# Boot Section Size in *bytes*
|
|
||||||
# Teensy halfKay 512
|
|
||||||
# Teensy++ halfKay 1024
|
|
||||||
# Atmel DFU loader 4096
|
|
||||||
# LUFA bootloader 4096
|
|
||||||
# USBaspLoader 2048
|
|
||||||
OPT_DEFS += -DBOOTLOADER_SIZE=4096
|
|
||||||
|
|
||||||
|
|
||||||
# Build Options
|
|
||||||
# change to no to disable the options.
|
|
||||||
#
|
|
||||||
BOOTMAGIC_ENABLE ?= yes # Virtual DIP switch configuration(+1000)
|
|
||||||
MOUSEKEY_ENABLE ?= no # Mouse keys(+4700)
|
|
||||||
EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450)
|
|
||||||
CONSOLE_ENABLE ?= yes # Console for debug(+400)
|
|
||||||
COMMAND_ENABLE ?= yes # Commands for debug and configuration
|
|
||||||
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
|
|
||||||
RGBLIGHT_ENABLE ?= no # Enable keyboard underlight functionality
|
|
||||||
MIDI_ENABLE ?= no # MIDI controls
|
|
||||||
UNICODE_ENABLE ?= no # Unicode
|
|
||||||
BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID
|
|
||||||
|
|
||||||
ifndef QUANTUM_DIR
|
|
||||||
include ../../Makefile
|
include ../../Makefile
|
||||||
endif
|
endif
|
|
@ -31,36 +31,36 @@ If you would like to use one of the alternative keymaps, or create your own, see
|
||||||
|
|
||||||
## Clueboard 1.0
|
## Clueboard 1.0
|
||||||
|
|
||||||
If you have a first generation Clueboard (one with a black PCB) you will need to use the revision 1 code. To do so add `SUBPROJECT=rev1` to your make command, like this:
|
If you have a first generation Clueboard (one with a black PCB) you will need to use the revision 1 code. To do so add `rev1` to your make command, like this:
|
||||||
|
|
||||||
```
|
```
|
||||||
$ make SUBPROJECT=rev1
|
$ make rev1
|
||||||
```
|
```
|
||||||
|
|
||||||
And when flashing your keyboard:
|
And when flashing your keyboard:
|
||||||
|
|
||||||
```
|
```
|
||||||
$ make SUBPROJECT=rev1 dfu
|
$ make rev1-dfu
|
||||||
```
|
```
|
||||||
|
|
||||||
If you are flashing an alternative layout to your rev1, include both `SUBPROJECT=rev1` and `KEYMAP=<keymap>` in your command, for example when flashing max:
|
If you are flashing an alternative layout to your rev1, include both `rev1` and `<keymap>` in your command, for example when flashing max:
|
||||||
|
|
||||||
```
|
```
|
||||||
$ make SUBPROJECT=rev1 KEYMAP=max dfu
|
$ make rev1-max-dfu
|
||||||
```
|
```
|
||||||
|
|
||||||
## Alternate Keymaps
|
## Alternate Keymaps
|
||||||
|
|
||||||
There are many alternative and user-contributed layouts available in the [keymaps/](keymaps/) directory. To compile and flash an alternative you will want to add `KEYMAP=<keymap>` to your command:
|
There are many alternative and user-contributed layouts available in the [keymaps/](keymaps/) directory. To compile and flash an alternative you will want to add `<keymap>` to your command:
|
||||||
|
|
||||||
```
|
```
|
||||||
$ make KEYMAP=skully
|
$ make skully
|
||||||
```
|
```
|
||||||
|
|
||||||
And when flashing your keyboard, put `KEYMAP=<keymap>` between "make" and "dfu":
|
And when flashing your keyboard, put `<keymap>` between "make" and "dfu":
|
||||||
|
|
||||||
```
|
```
|
||||||
$ make KEYMAP=skully dfu
|
$ make skully-dfu
|
||||||
```
|
```
|
||||||
|
|
||||||
### Notable Layouts
|
### Notable Layouts
|
||||||
|
@ -76,15 +76,15 @@ These layouts are notable for one reason or another. If you are looking for idea
|
||||||
There are a lot of possibilities when creating your own keymap, and the primary documentation for doing that is [Customizing Your Keymap](/readme.md##customizing-your-keymap) in the main readme.md. As a way to get started, here is the procedure I recommend:
|
There are a lot of possibilities when creating your own keymap, and the primary documentation for doing that is [Customizing Your Keymap](/readme.md##customizing-your-keymap) in the main readme.md. As a way to get started, here is the procedure I recommend:
|
||||||
|
|
||||||
* Copy `[keymaps/default](keymaps/default/)` to `keymaps/<your_layout>`.
|
* Copy `[keymaps/default](keymaps/default/)` to `keymaps/<your_layout>`.
|
||||||
* Compile the firmware (`$ make KEYMAP=<your_layout>`)
|
* Compile the firmware (`$ make <your_layout>`)
|
||||||
* Flash the firmware (`$ make KEYMAP=<your_layout> dfu`)
|
* Flash the firmware (`$ make <your_layout>-dfu`)
|
||||||
* Make sure everything works like the default keyboard
|
* Make sure everything works like the default keyboard
|
||||||
* Modify `keymaps/<your_layout>/readme.md` to tell others about your layout.
|
* Modify `keymaps/<your_layout>/readme.md` to tell others about your layout.
|
||||||
* Modify `keymaps/<your_layout>/keymap.c` to reflect your desired layout.
|
* Modify `keymaps/<your_layout>/keymap.c` to reflect your desired layout.
|
||||||
* Compile your new custom firmware (`$ make KEYMAP=<your_layout>`)
|
* Compile your new custom firmware (`$ make <your_layout>`)
|
||||||
** If you have warnings you may flash without fixing them, but something may not work right.
|
** If you have warnings you may flash without fixing them, but something may not work right.
|
||||||
** If you have any errors you must fix them before continuing.
|
** If you have any errors you must fix them before continuing.
|
||||||
* Flash the firmware (`$ make KEYMAP=<your_layout> dfu`)
|
* Flash the firmware (`$ make <your_layout>-dfu`)
|
||||||
|
|
||||||
## Share Your Keymap
|
## Share Your Keymap
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,3 @@
|
||||||
BACKLIGHT_ENABLE = no
|
ifndef MAKEFILE_INCLUDED
|
||||||
|
|
||||||
ifndef QUANTUM_DIR
|
|
||||||
include ../../../Makefile
|
include ../../../Makefile
|
||||||
endif
|
endif
|
5
keyboards/clueboard/rev1/rules.mk
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
BACKLIGHT_ENABLE = no
|
||||||
|
|
||||||
|
ifndef QUANTUM_DIR
|
||||||
|
include ../../../Makefile
|
||||||
|
endif
|
|
@ -1,5 +1,3 @@
|
||||||
BACKLIGHT_ENABLE = yes
|
ifndef MAKEFILE_INCLUDED
|
||||||
|
|
||||||
ifndef QUANTUM_DIR
|
|
||||||
include ../../../Makefile
|
include ../../../Makefile
|
||||||
endif
|
endif
|
5
keyboards/clueboard/rev2/rules.mk
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
BACKLIGHT_ENABLE = yes
|
||||||
|
|
||||||
|
ifndef QUANTUM_DIR
|
||||||
|
include ../../../Makefile
|
||||||
|
endif
|
103
keyboards/clueboard/rules.mk
Normal file
|
@ -0,0 +1,103 @@
|
||||||
|
#----------------------------------------------------------------------------
|
||||||
|
# On command line:
|
||||||
|
#
|
||||||
|
# make all = Make software.
|
||||||
|
#
|
||||||
|
# make clean = Clean out built project files.
|
||||||
|
#
|
||||||
|
# make coff = Convert ELF to AVR COFF.
|
||||||
|
#
|
||||||
|
# make extcoff = Convert ELF to AVR Extended COFF.
|
||||||
|
#
|
||||||
|
# make program = Download the hex file to the device.
|
||||||
|
# Please customize your programmer settings(PROGRAM_CMD)
|
||||||
|
#
|
||||||
|
# make teensy = Download the hex file to the device, using teensy_loader_cli.
|
||||||
|
# (must have teensy_loader_cli installed).
|
||||||
|
#
|
||||||
|
# make dfu = Download the hex file to the device, using dfu-programmer (must
|
||||||
|
# have dfu-programmer installed).
|
||||||
|
#
|
||||||
|
# make flip = Download the hex file to the device, using Atmel FLIP (must
|
||||||
|
# have Atmel FLIP installed).
|
||||||
|
#
|
||||||
|
# make dfu-ee = Download the eeprom file to the device, using dfu-programmer
|
||||||
|
# (must have dfu-programmer installed).
|
||||||
|
#
|
||||||
|
# make flip-ee = Download the eeprom file to the device, using Atmel FLIP
|
||||||
|
# (must have Atmel FLIP installed).
|
||||||
|
#
|
||||||
|
# make debug = Start either simulavr or avarice as specified for debugging,
|
||||||
|
# with avr-gdb or avr-insight as the front end for debugging.
|
||||||
|
#
|
||||||
|
# make filename.s = Just compile filename.c into the assembler code only.
|
||||||
|
#
|
||||||
|
# make filename.i = Create a preprocessed source file for use in submitting
|
||||||
|
# bug reports to the GCC project.
|
||||||
|
#
|
||||||
|
# To rebuild project do "make clean" then "make all".
|
||||||
|
#----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
# MCU name
|
||||||
|
MCU = atmega32u4
|
||||||
|
|
||||||
|
# Processor frequency.
|
||||||
|
# This will define a symbol, F_CPU, in all source code files equal to the
|
||||||
|
# processor frequency in Hz. You can then use this symbol in your source code to
|
||||||
|
# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
|
||||||
|
# automatically to create a 32-bit value in your source code.
|
||||||
|
#
|
||||||
|
# This will be an integer division of F_USB below, as it is sourced by
|
||||||
|
# F_USB after it has run through any CPU prescalers. Note that this value
|
||||||
|
# does not *change* the processor frequency - it should merely be updated to
|
||||||
|
# reflect the processor speed set externally so that the code can use accurate
|
||||||
|
# software delays.
|
||||||
|
F_CPU = 16000000
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
# LUFA specific
|
||||||
|
#
|
||||||
|
# Target architecture (see library "Board Types" documentation).
|
||||||
|
ARCH = AVR8
|
||||||
|
|
||||||
|
# Input clock frequency.
|
||||||
|
# This will define a symbol, F_USB, in all source code files equal to the
|
||||||
|
# input clock frequency (before any prescaling is performed) in Hz. This value may
|
||||||
|
# differ from F_CPU if prescaling is used on the latter, and is required as the
|
||||||
|
# raw input clock is fed directly to the PLL sections of the AVR for high speed
|
||||||
|
# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
|
||||||
|
# at the end, this will be done automatically to create a 32-bit value in your
|
||||||
|
# source code.
|
||||||
|
#
|
||||||
|
# If no clock division is performed on the input clock inside the AVR (via the
|
||||||
|
# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
|
||||||
|
F_USB = $(F_CPU)
|
||||||
|
|
||||||
|
# Interrupt driven control endpoint task(+60)
|
||||||
|
OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
|
||||||
|
|
||||||
|
|
||||||
|
# Boot Section Size in *bytes*
|
||||||
|
# Teensy halfKay 512
|
||||||
|
# Teensy++ halfKay 1024
|
||||||
|
# Atmel DFU loader 4096
|
||||||
|
# LUFA bootloader 4096
|
||||||
|
# USBaspLoader 2048
|
||||||
|
OPT_DEFS += -DBOOTLOADER_SIZE=4096
|
||||||
|
|
||||||
|
|
||||||
|
# Build Options
|
||||||
|
# comment out to disable the options.
|
||||||
|
#
|
||||||
|
BOOTMAGIC_ENABLE ?= yes # Virtual DIP switch configuration(+1000)
|
||||||
|
MOUSEKEY_ENABLE ?= no # Mouse keys(+4700)
|
||||||
|
EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450)
|
||||||
|
CONSOLE_ENABLE ?= yes # Console for debug(+400)
|
||||||
|
COMMAND_ENABLE ?= yes # Commands for debug and configuration
|
||||||
|
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
|
||||||
|
RGBLIGHT_ENABLE ?= no # Enable keyboard underlight functionality
|
||||||
|
MIDI_ENABLE ?= no # MIDI controls
|
||||||
|
UNICODE_ENABLE ?= no # Unicode
|
||||||
|
BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID
|
|
@ -1,76 +1,3 @@
|
||||||
|
ifndef MAKEFILE_INCLUDED
|
||||||
|
|
||||||
# MCU name
|
|
||||||
#MCU = at90usb1287
|
|
||||||
MCU = atmega32u4
|
|
||||||
|
|
||||||
# Processor frequency.
|
|
||||||
# This will define a symbol, F_CPU, in all source code files equal to the
|
|
||||||
# processor frequency in Hz. You can then use this symbol in your source code to
|
|
||||||
# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
|
|
||||||
# automatically to create a 32-bit value in your source code.
|
|
||||||
#
|
|
||||||
# This will be an integer division of F_USB below, as it is sourced by
|
|
||||||
# F_USB after it has run through any CPU prescalers. Note that this value
|
|
||||||
# does not *change* the processor frequency - it should merely be updated to
|
|
||||||
# reflect the processor speed set externally so that the code can use accurate
|
|
||||||
# software delays.
|
|
||||||
F_CPU = 16000000
|
|
||||||
|
|
||||||
|
|
||||||
#
|
|
||||||
# LUFA specific
|
|
||||||
#
|
|
||||||
# Target architecture (see library "Board Types" documentation).
|
|
||||||
ARCH = AVR8
|
|
||||||
|
|
||||||
# Input clock frequency.
|
|
||||||
# This will define a symbol, F_USB, in all source code files equal to the
|
|
||||||
# input clock frequency (before any prescaling is performed) in Hz. This value may
|
|
||||||
# differ from F_CPU if prescaling is used on the latter, and is required as the
|
|
||||||
# raw input clock is fed directly to the PLL sections of the AVR for high speed
|
|
||||||
# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
|
|
||||||
# at the end, this will be done automatically to create a 32-bit value in your
|
|
||||||
# source code.
|
|
||||||
#
|
|
||||||
# If no clock division is performed on the input clock inside the AVR (via the
|
|
||||||
# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
|
|
||||||
F_USB = $(F_CPU)
|
|
||||||
|
|
||||||
# Interrupt driven control endpoint task(+60)
|
|
||||||
OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
|
|
||||||
|
|
||||||
|
|
||||||
# Boot Section Size in *bytes*
|
|
||||||
# Teensy halfKay 512
|
|
||||||
# Teensy++ halfKay 1024
|
|
||||||
# Atmel DFU loader 4096
|
|
||||||
# LUFA bootloader 4096
|
|
||||||
# USBaspLoader 2048
|
|
||||||
OPT_DEFS += -DBOOTLOADER_SIZE=4096
|
|
||||||
|
|
||||||
|
|
||||||
# Build Options
|
|
||||||
# change yes to no to disable
|
|
||||||
#
|
|
||||||
BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration(+1000)
|
|
||||||
MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700)
|
|
||||||
EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450)
|
|
||||||
CONSOLE_ENABLE ?= yes # Console for debug(+400)
|
|
||||||
COMMAND_ENABLE ?= yes # Commands for debug and configuration
|
|
||||||
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
|
|
||||||
SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend
|
|
||||||
# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
|
|
||||||
NKRO_ENABLE ?= no # USB Nkey Rollover
|
|
||||||
RGBLIGHT_ENABLE ?= yes # Enable keyboard underlight functionality (+4870)
|
|
||||||
BACKLIGHT_ENABLE ?= yes # Enable keyboard backlight functionality by default
|
|
||||||
MIDI_ENABLE ?= no # MIDI controls
|
|
||||||
UNICODE_ENABLE ?= no # Unicode
|
|
||||||
BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID
|
|
||||||
AUDIO_ENABLE ?= yes # Audio output on port C6
|
|
||||||
|
|
||||||
ifndef QUANTUM_DIR
|
|
||||||
include ../../Makefile
|
include ../../Makefile
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
|
|
@ -13,16 +13,16 @@ Depending on which keymap you would like to use, you will have to compile slight
|
||||||
|
|
||||||
### Default
|
### Default
|
||||||
|
|
||||||
To build with the default keymap, simply run `make`.
|
To build with the default keymap, simply run `make default`.
|
||||||
|
|
||||||
### Other Keymaps
|
### 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 folder with the name of your keymap in the keymaps folder, and see keymap documentation (you can find in top readme.md) and existant keymap files.
|
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 folder with the name of your keymap in the keymaps folder, and see keymap documentation (you can find in top readme.md) and existant keymap files.
|
||||||
|
|
||||||
To build the firmware binary hex file with a keymap just do `make` with `keymap` option like:
|
To build the firmware binary hex file with a keymap just do `make` with a keymap like this:
|
||||||
|
|
||||||
```
|
```
|
||||||
$ make keymap=[default|jack|<name>]
|
$ make [default|jack|<name>]
|
||||||
```
|
```
|
||||||
|
|
||||||
Keymaps follow the format **__keymap.c__** and are stored in folders in the `keymaps` folder, eg `keymaps/my_keymap/`
|
Keymaps follow the format **__keymap.c__** and are stored in folders in the `keymaps` folder, eg `keymaps/my_keymap/`
|
||||||
|
|
70
keyboards/cluecard/rules.mk
Normal file
|
@ -0,0 +1,70 @@
|
||||||
|
|
||||||
|
|
||||||
|
# MCU name
|
||||||
|
#MCU = at90usb1287
|
||||||
|
MCU = atmega32u4
|
||||||
|
|
||||||
|
# Processor frequency.
|
||||||
|
# This will define a symbol, F_CPU, in all source code files equal to the
|
||||||
|
# processor frequency in Hz. You can then use this symbol in your source code to
|
||||||
|
# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
|
||||||
|
# automatically to create a 32-bit value in your source code.
|
||||||
|
#
|
||||||
|
# This will be an integer division of F_USB below, as it is sourced by
|
||||||
|
# F_USB after it has run through any CPU prescalers. Note that this value
|
||||||
|
# does not *change* the processor frequency - it should merely be updated to
|
||||||
|
# reflect the processor speed set externally so that the code can use accurate
|
||||||
|
# software delays.
|
||||||
|
F_CPU = 16000000
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
# LUFA specific
|
||||||
|
#
|
||||||
|
# Target architecture (see library "Board Types" documentation).
|
||||||
|
ARCH = AVR8
|
||||||
|
|
||||||
|
# Input clock frequency.
|
||||||
|
# This will define a symbol, F_USB, in all source code files equal to the
|
||||||
|
# input clock frequency (before any prescaling is performed) in Hz. This value may
|
||||||
|
# differ from F_CPU if prescaling is used on the latter, and is required as the
|
||||||
|
# raw input clock is fed directly to the PLL sections of the AVR for high speed
|
||||||
|
# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
|
||||||
|
# at the end, this will be done automatically to create a 32-bit value in your
|
||||||
|
# source code.
|
||||||
|
#
|
||||||
|
# If no clock division is performed on the input clock inside the AVR (via the
|
||||||
|
# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
|
||||||
|
F_USB = $(F_CPU)
|
||||||
|
|
||||||
|
# Interrupt driven control endpoint task(+60)
|
||||||
|
OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
|
||||||
|
|
||||||
|
|
||||||
|
# Boot Section Size in *bytes*
|
||||||
|
# Teensy halfKay 512
|
||||||
|
# Teensy++ halfKay 1024
|
||||||
|
# Atmel DFU loader 4096
|
||||||
|
# LUFA bootloader 4096
|
||||||
|
# USBaspLoader 2048
|
||||||
|
OPT_DEFS += -DBOOTLOADER_SIZE=4096
|
||||||
|
|
||||||
|
|
||||||
|
# Build Options
|
||||||
|
# change yes to no to disable
|
||||||
|
#
|
||||||
|
BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration(+1000)
|
||||||
|
MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700)
|
||||||
|
EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450)
|
||||||
|
CONSOLE_ENABLE ?= yes # Console for debug(+400)
|
||||||
|
COMMAND_ENABLE ?= yes # Commands for debug and configuration
|
||||||
|
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
|
||||||
|
SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend
|
||||||
|
# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
|
||||||
|
NKRO_ENABLE ?= no # USB Nkey Rollover
|
||||||
|
RGBLIGHT_ENABLE ?= yes # Enable keyboard underlight functionality (+4870)
|
||||||
|
BACKLIGHT_ENABLE ?= yes # Enable keyboard backlight functionality by default
|
||||||
|
MIDI_ENABLE ?= no # MIDI controls
|
||||||
|
UNICODE_ENABLE ?= no # Unicode
|
||||||
|
BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID
|
||||||
|
AUDIO_ENABLE ?= yes # Audio output on port C6
|
|
@ -1,70 +1,3 @@
|
||||||
|
ifndef MAKEFILE_INCLUDED
|
||||||
# MCU name
|
|
||||||
#MCU = at90usb1287
|
|
||||||
MCU = atmega32u4
|
|
||||||
|
|
||||||
# Processor frequency.
|
|
||||||
# This will define a symbol, F_CPU, in all source code files equal to the
|
|
||||||
# processor frequency in Hz. You can then use this symbol in your source code to
|
|
||||||
# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
|
|
||||||
# automatically to create a 32-bit value in your source code.
|
|
||||||
#
|
|
||||||
# This will be an integer division of F_USB below, as it is sourced by
|
|
||||||
# F_USB after it has run through any CPU prescalers. Note that this value
|
|
||||||
# does not *change* the processor frequency - it should merely be updated to
|
|
||||||
# reflect the processor speed set externally so that the code can use accurate
|
|
||||||
# software delays.
|
|
||||||
F_CPU = 16000000
|
|
||||||
|
|
||||||
|
|
||||||
#
|
|
||||||
# LUFA specific
|
|
||||||
#
|
|
||||||
# Target architecture (see library "Board Types" documentation).
|
|
||||||
ARCH = AVR8
|
|
||||||
|
|
||||||
# Input clock frequency.
|
|
||||||
# This will define a symbol, F_USB, in all source code files equal to the
|
|
||||||
# input clock frequency (before any prescaling is performed) in Hz. This value may
|
|
||||||
# differ from F_CPU if prescaling is used on the latter, and is required as the
|
|
||||||
# raw input clock is fed directly to the PLL sections of the AVR for high speed
|
|
||||||
# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
|
|
||||||
# at the end, this will be done automatically to create a 32-bit value in your
|
|
||||||
# source code.
|
|
||||||
#
|
|
||||||
# If no clock division is performed on the input clock inside the AVR (via the
|
|
||||||
# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
|
|
||||||
F_USB = $(F_CPU)
|
|
||||||
|
|
||||||
# Interrupt driven control endpoint task(+60)
|
|
||||||
OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
|
|
||||||
|
|
||||||
|
|
||||||
# Boot Section Size in *bytes*
|
|
||||||
# Teensy halfKay 512
|
|
||||||
# Teensy++ halfKay 1024
|
|
||||||
# Atmel DFU loader 4096
|
|
||||||
# LUFA bootloader 4096
|
|
||||||
# USBaspLoader 2048
|
|
||||||
OPT_DEFS += -DBOOTLOADER_SIZE=4096
|
|
||||||
|
|
||||||
|
|
||||||
# Build Options
|
|
||||||
# comment out to disable the options.
|
|
||||||
#
|
|
||||||
BOOTMAGIC_ENABLE ?= yes # Virtual DIP switch configuration(+1000)
|
|
||||||
# MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700)
|
|
||||||
# EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450)
|
|
||||||
# CONSOLE_ENABLE ?= yes # Console for debug(+400)
|
|
||||||
# COMMAND_ENABLE ?= yes # Commands for debug and configuration
|
|
||||||
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
|
|
||||||
RGBLIGHT_ENABLE ?= yes
|
|
||||||
# MIDI_ENABLE ?= YES # MIDI controls
|
|
||||||
# UNICODE_ENABLE ?= YES # Unicode
|
|
||||||
# BLUETOOTH_ENABLE ?= yes # Enable Bluetooth with the Adafruit EZ-Key HID
|
|
||||||
|
|
||||||
|
|
||||||
ifndef QUANTUM_DIR
|
|
||||||
include ../../Makefile
|
include ../../Makefile
|
||||||
endif
|
endif
|
65
keyboards/cluepad/rules.mk
Normal file
|
@ -0,0 +1,65 @@
|
||||||
|
|
||||||
|
# MCU name
|
||||||
|
#MCU = at90usb1287
|
||||||
|
MCU = atmega32u4
|
||||||
|
|
||||||
|
# Processor frequency.
|
||||||
|
# This will define a symbol, F_CPU, in all source code files equal to the
|
||||||
|
# processor frequency in Hz. You can then use this symbol in your source code to
|
||||||
|
# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
|
||||||
|
# automatically to create a 32-bit value in your source code.
|
||||||
|
#
|
||||||
|
# This will be an integer division of F_USB below, as it is sourced by
|
||||||
|
# F_USB after it has run through any CPU prescalers. Note that this value
|
||||||
|
# does not *change* the processor frequency - it should merely be updated to
|
||||||
|
# reflect the processor speed set externally so that the code can use accurate
|
||||||
|
# software delays.
|
||||||
|
F_CPU = 16000000
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
# LUFA specific
|
||||||
|
#
|
||||||
|
# Target architecture (see library "Board Types" documentation).
|
||||||
|
ARCH = AVR8
|
||||||
|
|
||||||
|
# Input clock frequency.
|
||||||
|
# This will define a symbol, F_USB, in all source code files equal to the
|
||||||
|
# input clock frequency (before any prescaling is performed) in Hz. This value may
|
||||||
|
# differ from F_CPU if prescaling is used on the latter, and is required as the
|
||||||
|
# raw input clock is fed directly to the PLL sections of the AVR for high speed
|
||||||
|
# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
|
||||||
|
# at the end, this will be done automatically to create a 32-bit value in your
|
||||||
|
# source code.
|
||||||
|
#
|
||||||
|
# If no clock division is performed on the input clock inside the AVR (via the
|
||||||
|
# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
|
||||||
|
F_USB = $(F_CPU)
|
||||||
|
|
||||||
|
# Interrupt driven control endpoint task(+60)
|
||||||
|
OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
|
||||||
|
|
||||||
|
|
||||||
|
# Boot Section Size in *bytes*
|
||||||
|
# Teensy halfKay 512
|
||||||
|
# Teensy++ halfKay 1024
|
||||||
|
# Atmel DFU loader 4096
|
||||||
|
# LUFA bootloader 4096
|
||||||
|
# USBaspLoader 2048
|
||||||
|
OPT_DEFS += -DBOOTLOADER_SIZE=4096
|
||||||
|
|
||||||
|
|
||||||
|
# Build Options
|
||||||
|
# comment out to disable the options.
|
||||||
|
#
|
||||||
|
BOOTMAGIC_ENABLE ?= yes # Virtual DIP switch configuration(+1000)
|
||||||
|
# MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700)
|
||||||
|
# EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450)
|
||||||
|
# CONSOLE_ENABLE ?= yes # Console for debug(+400)
|
||||||
|
# COMMAND_ENABLE ?= yes # Commands for debug and configuration
|
||||||
|
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
|
||||||
|
RGBLIGHT_ENABLE ?= yes
|
||||||
|
# MIDI_ENABLE ?= YES # MIDI controls
|
||||||
|
# UNICODE_ENABLE ?= YES # Unicode
|
||||||
|
# BLUETOOTH_ENABLE ?= yes # Enable Bluetooth with the Adafruit EZ-Key HID
|
|
@ -1,34 +1,5 @@
|
||||||
#----------------------------------------------------------------------------
|
|
||||||
# On command line:
|
|
||||||
#
|
|
||||||
# make = Make software.
|
|
||||||
#
|
|
||||||
# make clean = Clean out built project files.
|
|
||||||
#
|
|
||||||
# That's pretty much all you need. To compile, always go make clean,
|
|
||||||
# followed by make.
|
|
||||||
#
|
|
||||||
# For advanced users only:
|
|
||||||
# make teensy = Download the hex file to the device, using teensy_loader_cli.
|
|
||||||
# (must have teensy_loader_cli installed).
|
|
||||||
#
|
|
||||||
#----------------------------------------------------------------------------
|
|
||||||
SUBPROJECT_DEFAULT = ez
|
SUBPROJECT_DEFAULT = ez
|
||||||
|
|
||||||
# Build Options
|
ifndef MAKEFILE_INCLUDED
|
||||||
# comment out to disable the options.
|
|
||||||
#
|
|
||||||
BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration(+1000)
|
|
||||||
MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700)
|
|
||||||
EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450)
|
|
||||||
CONSOLE_ENABLE ?= no # Console for debug(+400)
|
|
||||||
COMMAND_ENABLE ?= yes # Commands for debug and configuration
|
|
||||||
CUSTOM_MATRIX ?= yes # Custom matrix file for the ErgoDox EZ
|
|
||||||
SLEEP_LED_ENABLE ?= yes # Breathing sleep LED during USB suspend
|
|
||||||
NKRO_ENABLE ?= yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
|
|
||||||
MIDI_ENABLE ?= no # MIDI controls
|
|
||||||
UNICODE_ENABLE ?= yes # Unicode
|
|
||||||
|
|
||||||
ifndef QUANTUM_DIR
|
|
||||||
include ../../Makefile
|
include ../../Makefile
|
||||||
endif
|
endif
|
|
@ -0,0 +1,24 @@
|
||||||
|
#include "ergodox.h"
|
||||||
|
#include "debug.h"
|
||||||
|
#include "action_layer.h"
|
||||||
|
|
||||||
|
// swap-hands action needs a matrix to define the swap
|
||||||
|
const keypos_t hand_swap_config[MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
/* Left hand, matrix positions */
|
||||||
|
{{0,13}, {1,13}, {2,13}, {3,13}, {4,13}, {5,13}},
|
||||||
|
{{0,12}, {1,12}, {2,12}, {3,12}, {4,12}, {5,12}},
|
||||||
|
{{0,11}, {1,11}, {2,11}, {3,11}, {4,11}, {5,11}},
|
||||||
|
{{0,10}, {1,10}, {2,10}, {3,10}, {4,10}, {5,10}},
|
||||||
|
{{0,9}, {1,9}, {2,9}, {3,9}, {4,9}, {5,9}},
|
||||||
|
{{0,8}, {1,8}, {2,8}, {3,8}, {4,8}, {5,8}},
|
||||||
|
{{0,7}, {1,7}, {2,7}, {3,7}, {4,7}, {5,7}},
|
||||||
|
/* Right hand, matrix positions */
|
||||||
|
{{0,6}, {1,6}, {2,6}, {3,6}, {4,6}, {5,6}},
|
||||||
|
{{0,5}, {1,5}, {2,5}, {3,5}, {4,5}, {5,5}},
|
||||||
|
{{0,4}, {1,4}, {2,4}, {3,4}, {4,4}, {5,4}},
|
||||||
|
{{0,3}, {1,3}, {2,3}, {3,3}, {4,3}, {5,3}},
|
||||||
|
{{0,2}, {1,2}, {2,2}, {3,2}, {4,2}, {5,2}},
|
||||||
|
{{0,1}, {1,1}, {2,1}, {3,1}, {4,1}, {5,1}},
|
||||||
|
{{0,0}, {1,0}, {2,0}, {3,0}, {4,0}, {5,0}},
|
||||||
|
};
|
||||||
|
|
|
@ -1,76 +1,3 @@
|
||||||
#----------------------------------------------------------------------------
|
ifndef MAKEFILE_INCLUDED
|
||||||
# On command line:
|
|
||||||
#
|
|
||||||
# make = Make software.
|
|
||||||
#
|
|
||||||
# make clean = Clean out built project files.
|
|
||||||
#
|
|
||||||
# That's pretty much all you need. To compile, always go make clean,
|
|
||||||
# followed by make.
|
|
||||||
#
|
|
||||||
# For advanced users only:
|
|
||||||
# make teensy = Download the hex file to the device, using teensy_loader_cli.
|
|
||||||
# (must have teensy_loader_cli installed).
|
|
||||||
#
|
|
||||||
#----------------------------------------------------------------------------
|
|
||||||
|
|
||||||
# # project specific files
|
|
||||||
SRC = twimaster.c \
|
|
||||||
matrix.c
|
|
||||||
|
|
||||||
# MCU name
|
|
||||||
MCU = atmega32u4
|
|
||||||
|
|
||||||
# Processor frequency.
|
|
||||||
# This will define a symbol, F_CPU, in all source code files equal to the
|
|
||||||
# processor frequency in Hz. You can then use this symbol in your source code to
|
|
||||||
# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
|
|
||||||
# automatically to create a 32-bit value in your source code.
|
|
||||||
#
|
|
||||||
# This will be an integer division of F_USB below, as it is sourced by
|
|
||||||
# F_USB after it has run through any CPU prescalers. Note that this value
|
|
||||||
# does not *change* the processor frequency - it should merely be updated to
|
|
||||||
# reflect the processor speed set externally so that the code can use accurate
|
|
||||||
# software delays.
|
|
||||||
F_CPU = 16000000
|
|
||||||
|
|
||||||
|
|
||||||
#
|
|
||||||
# LUFA specific
|
|
||||||
#
|
|
||||||
# Target architecture (see library "Board Types" documentation).
|
|
||||||
ARCH = AVR8
|
|
||||||
|
|
||||||
# Input clock frequency.
|
|
||||||
# This will define a symbol, F_USB, in all source code files equal to the
|
|
||||||
# input clock frequency (before any prescaling is performed) in Hz. This value may
|
|
||||||
# differ from F_CPU if prescaling is used on the latter, and is required as the
|
|
||||||
# raw input clock is fed directly to the PLL sections of the AVR for high speed
|
|
||||||
# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
|
|
||||||
# at the end, this will be done automatically to create a 32-bit value in your
|
|
||||||
# source code.
|
|
||||||
#
|
|
||||||
# If no clock division is performed on the input clock inside the AVR (via the
|
|
||||||
# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
|
|
||||||
F_USB = $(F_CPU)
|
|
||||||
|
|
||||||
# Interrupt driven control endpoint task(+60)
|
|
||||||
OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
|
|
||||||
|
|
||||||
|
|
||||||
# Boot Section Size in *bytes*
|
|
||||||
# Teensy halfKay 512
|
|
||||||
# Teensy++ halfKay 1024
|
|
||||||
# Atmel DFU loader 4096
|
|
||||||
# LUFA bootloader 4096
|
|
||||||
# USBaspLoader 2048
|
|
||||||
OPT_DEFS += -DBOOTLOADER_SIZE=512
|
|
||||||
|
|
||||||
|
|
||||||
# Build Options
|
|
||||||
# comment out to disable the options.
|
|
||||||
#
|
|
||||||
|
|
||||||
ifndef QUANTUM_DIR
|
|
||||||
include ../../../Makefile
|
include ../../../Makefile
|
||||||
endif
|
endif
|
|
@ -119,4 +119,45 @@ inline void ergodox_led_all_set(uint8_t n)
|
||||||
{ k0D, k1D, k2D, k3D, k4D, KC_NO } \
|
{ k0D, k1D, k2D, k3D, k4D, KC_NO } \
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define KEYMAP_80( \
|
||||||
|
\
|
||||||
|
/* left hand, spatial positions */ \
|
||||||
|
k00,k01,k02,k03,k04,k05,k06, \
|
||||||
|
k10,k11,k12,k13,k14,k15,k16, \
|
||||||
|
k20,k21,k22,k23,k24,k25, \
|
||||||
|
k30,k31,k32,k33,k34,k35,k36, \
|
||||||
|
k40,k41,k42,k43,k44, \
|
||||||
|
k55,k56, \
|
||||||
|
k45,k46,k54, \
|
||||||
|
k53,k52,k51, \
|
||||||
|
\
|
||||||
|
/* right hand, spatial positions */ \
|
||||||
|
k07,k08,k09,k0A,k0B,k0C,k0D, \
|
||||||
|
k17,k18,k19,k1A,k1B,k1C,k1D, \
|
||||||
|
k28,k29,k2A,k2B,k2C,k2D, \
|
||||||
|
k37,k38,k39,k3A,k3B,k3C,k3D, \
|
||||||
|
k49,k4A,k4B,k4C,k4D, \
|
||||||
|
k57,k58, \
|
||||||
|
k59,k47,k48, \
|
||||||
|
k5C,k5B,k5A ) \
|
||||||
|
\
|
||||||
|
/* matrix positions */ \
|
||||||
|
{ \
|
||||||
|
{ k00, k10, k20, k30, k40, KC_NO }, \
|
||||||
|
{ k01, k11, k21, k31, k41, k51 }, \
|
||||||
|
{ k02, k12, k22, k32, k42, k52 }, \
|
||||||
|
{ k03, k13, k23, k33, k43, k53 }, \
|
||||||
|
{ k04, k14, k24, k34, k44, k54 }, \
|
||||||
|
{ k05, k15, k25, k35, k45, k55 }, \
|
||||||
|
{ k06, k16, KC_NO, k36, k46, k56 }, \
|
||||||
|
\
|
||||||
|
{ k07, k17, KC_NO, k37, k47, k57 }, \
|
||||||
|
{ k08, k18, k28, k38, k48, k58 }, \
|
||||||
|
{ k09, k19, k29, k39, k49, k59 }, \
|
||||||
|
{ k0A, k1A, k2A, k3A, k4A, k5A }, \
|
||||||
|
{ k0B, k1B, k2B, k3B, k4B, k5B }, \
|
||||||
|
{ k0C, k1C, k2C, k3C, k4C, k5C }, \
|
||||||
|
{ k0D, k1D, k2D, k3D, k4D, KC_NO } \
|
||||||
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
BIN
keyboards/ergodox/ez/keymaps/profet_80/ergodox80.png
Normal file
After Width: | Height: | Size: 20 KiB |
183
keyboards/ergodox/ez/keymaps/profet_80/keymap.c
Normal file
|
@ -0,0 +1,183 @@
|
||||||
|
#include "ergodox.h"
|
||||||
|
#include "debug.h"
|
||||||
|
#include "action_layer.h"
|
||||||
|
#include "version.h"
|
||||||
|
|
||||||
|
#define BASE 0 // default layer
|
||||||
|
#define SYMB 1 // symbols
|
||||||
|
#define MDIA 2 // media keys
|
||||||
|
|
||||||
|
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|' / Cmd |
|
||||||
|
* |--------+------+------+------+------+------| Hyper| | Meh |------+------+------+------+------+--------|
|
||||||
|
* | LShift |Z/Ctrl| X | C | V | B | | | | N | M | , | . |//Ctrl| RShift |
|
||||||
|
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
|
||||||
|
* |Grv/L1| '" |AltShf| Left | Right| | Up | Down | [ | ] | ~L1 |
|
||||||
|
* `----------------------------------' `----------------------------------'
|
||||||
|
* ,-------------. ,-------------.
|
||||||
|
* | App | LGui | | Alt |Ctrl/Esc|
|
||||||
|
* ,------|------|------| |------+--------+------.
|
||||||
|
* | 1 | 2 | Home | | PgUp | 3 | 4 |
|
||||||
|
* |------|------|------| |------|--------|------|
|
||||||
|
* | Space| BkSp | End | | PgDn | Tab |Enter |
|
||||||
|
* `--------------------' `----------------------'
|
||||||
|
*/
|
||||||
|
// If it accepts an argument (i.e, is a function), it doesn't need KC_.
|
||||||
|
// Otherwise, it needs KC_*
|
||||||
|
[BASE] = KEYMAP_80( // 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(SYMB),
|
||||||
|
KC_BSPC, KC_A, KC_S, KC_D, KC_F, KC_G,
|
||||||
|
KC_LSFT, CTL_T(KC_Z), KC_X, KC_C, KC_V, KC_B, ALL_T(KC_NO),
|
||||||
|
LT(SYMB,KC_GRV),KC_QUOT, LALT(KC_LSFT), KC_LEFT,KC_RGHT,
|
||||||
|
ALT_T(KC_APP), KC_LGUI,
|
||||||
|
KC_1, KC_2, KC_HOME,
|
||||||
|
KC_SPC,KC_BSPC,KC_END,
|
||||||
|
// 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),GUI_T(KC_QUOT),
|
||||||
|
MEH_T(KC_NO),KC_N, KC_M, KC_COMM,KC_DOT, CTL_T(KC_SLSH), KC_RSFT,
|
||||||
|
KC_UP, KC_DOWN,KC_LBRC,KC_RBRC, KC_FN1,
|
||||||
|
KC_LALT, CTL_T(KC_ESC),
|
||||||
|
KC_PGUP,KC_3, KC_4,
|
||||||
|
KC_PGDN,KC_TAB, KC_ENT
|
||||||
|
),
|
||||||
|
/* Keymap 1: Symbol Layer
|
||||||
|
*
|
||||||
|
* ,--------------------------------------------------. ,--------------------------------------------------.
|
||||||
|
* |Version | 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_80(
|
||||||
|
// left hand
|
||||||
|
M(0), 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,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, KC_TRNS, KC_TRNS
|
||||||
|
),
|
||||||
|
/* Keymap 2: Media and mouse keys
|
||||||
|
*
|
||||||
|
* ,--------------------------------------------------. ,--------------------------------------------------.
|
||||||
|
* | | | | | | | | | | | | | | | |
|
||||||
|
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
|
||||||
|
* | | | | MsUp | | | | | | | | | | | |
|
||||||
|
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||||
|
* | | |MsLeft|MsDown|MsRght| |------| |------| | | | | | Play |
|
||||||
|
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||||
|
* | | | | | | | | | | | | Prev | Next | | |
|
||||||
|
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
|
||||||
|
* | | | | Lclk | Rclk | |VolUp |VolDn | Mute | | |
|
||||||
|
* `----------------------------------' `----------------------------------'
|
||||||
|
* ,-------------. ,-------------.
|
||||||
|
* | | | | | |
|
||||||
|
* ,------|------|------| |------+------+----------.
|
||||||
|
* | | | | | | | |
|
||||||
|
* |------|------|------| |------|------|----------|
|
||||||
|
* | | | | | | |BrwserBack|
|
||||||
|
* `--------------------' `------------------------'
|
||||||
|
*/
|
||||||
|
// MEDIA AND MOUSE
|
||||||
|
[MDIA] = KEYMAP_80(
|
||||||
|
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_BTN1, KC_BTN2,
|
||||||
|
KC_TRNS, KC_TRNS,
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS,
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS,
|
||||||
|
// right hand
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY,
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS,
|
||||||
|
KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS,
|
||||||
|
KC_TRNS, KC_TRNS,
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS,
|
||||||
|
KC_TRNS, KC_TRNS, KC_WBAK
|
||||||
|
),
|
||||||
|
};
|
||||||
|
|
||||||
|
const uint16_t PROGMEM fn_actions[] = {
|
||||||
|
[1] = ACTION_LAYER_TAP_TOGGLE(SYMB) // FN1 - Momentary Layer 1 (Symbols)
|
||||||
|
};
|
||||||
|
|
||||||
|
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) {
|
||||||
|
SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION);
|
||||||
|
}
|
||||||
|
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) {
|
||||||
|
// TODO: Make this relevant to the ErgoDox EZ.
|
||||||
|
case 1:
|
||||||
|
ergodox_right_led_1_on();
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
ergodox_right_led_2_on();
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
// none
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
10
keyboards/ergodox/ez/keymaps/profet_80/readme.md
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
# ErgoDox 80 Default Configuration
|
||||||
|
|
||||||
|
This is based on the default Ergodox EZ keymap.
|
||||||
|
The difference is that this keymap supports 80 key layouts.
|
||||||
|
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.
|
||||||
|
|
||||||
|
|
||||||
|
![Default80](ergodox80.png)
|
78
keyboards/ergodox/ez/rules.mk
Normal file
|
@ -0,0 +1,78 @@
|
||||||
|
#----------------------------------------------------------------------------
|
||||||
|
# On command line:
|
||||||
|
#
|
||||||
|
# make = Make software.
|
||||||
|
#
|
||||||
|
# make clean = Clean out built project files.
|
||||||
|
#
|
||||||
|
# That's pretty much all you need. To compile, always go make clean,
|
||||||
|
# followed by make.
|
||||||
|
#
|
||||||
|
# For advanced users only:
|
||||||
|
# make teensy = Download the hex file to the device, using teensy_loader_cli.
|
||||||
|
# (must have teensy_loader_cli installed).
|
||||||
|
#
|
||||||
|
#----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
# # project specific files
|
||||||
|
SRC = twimaster.c \
|
||||||
|
matrix.c
|
||||||
|
|
||||||
|
# MCU name
|
||||||
|
MCU = atmega32u4
|
||||||
|
|
||||||
|
# Processor frequency.
|
||||||
|
# This will define a symbol, F_CPU, in all source code files equal to the
|
||||||
|
# processor frequency in Hz. You can then use this symbol in your source code to
|
||||||
|
# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
|
||||||
|
# automatically to create a 32-bit value in your source code.
|
||||||
|
#
|
||||||
|
# This will be an integer division of F_USB below, as it is sourced by
|
||||||
|
# F_USB after it has run through any CPU prescalers. Note that this value
|
||||||
|
# does not *change* the processor frequency - it should merely be updated to
|
||||||
|
# reflect the processor speed set externally so that the code can use accurate
|
||||||
|
# software delays.
|
||||||
|
F_CPU = 16000000
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
# LUFA specific
|
||||||
|
#
|
||||||
|
# Target architecture (see library "Board Types" documentation).
|
||||||
|
ARCH = AVR8
|
||||||
|
|
||||||
|
# Input clock frequency.
|
||||||
|
# This will define a symbol, F_USB, in all source code files equal to the
|
||||||
|
# input clock frequency (before any prescaling is performed) in Hz. This value may
|
||||||
|
# differ from F_CPU if prescaling is used on the latter, and is required as the
|
||||||
|
# raw input clock is fed directly to the PLL sections of the AVR for high speed
|
||||||
|
# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
|
||||||
|
# at the end, this will be done automatically to create a 32-bit value in your
|
||||||
|
# source code.
|
||||||
|
#
|
||||||
|
# If no clock division is performed on the input clock inside the AVR (via the
|
||||||
|
# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
|
||||||
|
F_USB = $(F_CPU)
|
||||||
|
|
||||||
|
# Interrupt driven control endpoint task(+60)
|
||||||
|
OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
|
||||||
|
|
||||||
|
|
||||||
|
# Boot Section Size in *bytes*
|
||||||
|
# Teensy halfKay 512
|
||||||
|
# Teensy++ halfKay 1024
|
||||||
|
# Atmel DFU loader 4096
|
||||||
|
# LUFA bootloader 4096
|
||||||
|
# USBaspLoader 2048
|
||||||
|
OPT_DEFS += -DBOOTLOADER_SIZE=512
|
||||||
|
|
||||||
|
|
||||||
|
# Build Options
|
||||||
|
# comment out to disable the options.
|
||||||
|
#
|
||||||
|
|
||||||
|
SLEEP_LED_ENABLE = no
|
||||||
|
|
||||||
|
ifndef QUANTUM_DIR
|
||||||
|
include ../../../Makefile
|
||||||
|
endif
|
|
@ -1,77 +1,3 @@
|
||||||
# project specific files
|
ifndef MAKEFILE_INCLUDED
|
||||||
SRC = matrix.c \
|
|
||||||
led.c
|
|
||||||
|
|
||||||
## chip/board settings
|
|
||||||
# - the next two should match the directories in
|
|
||||||
# <chibios>/os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES)
|
|
||||||
# - For Teensies, FAMILY = KINETIS and SERIES is either
|
|
||||||
# KL2x (LC) or K20x (3.0,3.1,3.2).
|
|
||||||
# - For Infinity KB, SERIES = K20x
|
|
||||||
MCU_FAMILY = KINETIS
|
|
||||||
MCU_SERIES = K20x
|
|
||||||
|
|
||||||
# Linker script to use
|
|
||||||
# - it should exist either in <chibios>/os/common/ports/ARMCMx/compilers/GCC/ld/
|
|
||||||
# or <this_dir>/ld/
|
|
||||||
# - NOTE: a custom ld script is needed for EEPROM on Teensy LC
|
|
||||||
# - LDSCRIPT =
|
|
||||||
# - MKL26Z64 for Teensy LC
|
|
||||||
# - MK20DX128 for Teensy 3.0
|
|
||||||
# - MK20DX256 for Teensy 3.1 and 3.2
|
|
||||||
# - MK20DX128BLDR4 for Infinity 60% with Kiibohd bootloader
|
|
||||||
# - MK20DX256BLDR8 for Infinity ErgoDox with Kiibohd bootloader
|
|
||||||
MCU_LDSCRIPT = MK20DX256BLDR8
|
|
||||||
|
|
||||||
# Startup code to use
|
|
||||||
# - it should exist in <chibios>/os/common/ports/ARMCMx/compilers/GCC/mk/
|
|
||||||
# - STARTUP =
|
|
||||||
# - kl2x for Teensy LC
|
|
||||||
# - k20x5 for Teensy 3.0 and Infinity 60%
|
|
||||||
# - k20x7 for Teensy 3.1, 3.2 and Infinity ErgoDox
|
|
||||||
MCU_STARTUP = k20x7
|
|
||||||
|
|
||||||
# Board: it should exist either in <chibios>/os/hal/boards/
|
|
||||||
# or <this_dir>/boards
|
|
||||||
# - BOARD =
|
|
||||||
# - PJRC_TEENSY_LC for Teensy LC
|
|
||||||
# - PJRC_TEENSY_3 for Teensy 3.0
|
|
||||||
# - PJRC_TEENSY_3_1 for Teensy 3.1 or 3.2
|
|
||||||
# - MCHCK_K20 for Infinity KB
|
|
||||||
#BOARD = MCHCK_K20
|
|
||||||
BOARD = PJRC_TEENSY_3_1
|
|
||||||
|
|
||||||
# Cortex version
|
|
||||||
# Teensy LC is cortex-m0; Teensy 3.x are cortex-m4
|
|
||||||
MCU = cortex-m4
|
|
||||||
|
|
||||||
# ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7
|
|
||||||
# I.e. 6 for Teensy LC; 7 for Teensy 3.x
|
|
||||||
ARMV = 7
|
|
||||||
|
|
||||||
# Vector table for application
|
|
||||||
# 0x00000000-0x00001000 area is occupied by bootlaoder.*/
|
|
||||||
# The CORTEX_VTOR... is needed only for MCHCK/Infinity KB
|
|
||||||
OPT_DEFS += -DCORTEX_VTOR_INIT=0x00002000
|
|
||||||
|
|
||||||
# Build Options
|
|
||||||
# comment out to disable the options.
|
|
||||||
#
|
|
||||||
CUSTOM_MATRIX ?= yes # Custom matrix file
|
|
||||||
SERIAL_LINK_ENABLE = yes
|
|
||||||
VISUALIZER_ENABLE ?= no #temporarily disabled to make everything compile
|
|
||||||
LCD_ENABLE ?= yes
|
|
||||||
LED_ENABLE ?= yes
|
|
||||||
LCD_BACKLIGHT_ENABLE ?= yes
|
|
||||||
|
|
||||||
ifndef QUANTUM_DIR
|
|
||||||
include ../../../Makefile
|
include ../../../Makefile
|
||||||
endif
|
endif
|
||||||
|
|
||||||
ifdef LCD_ENABLE
|
|
||||||
include $(SUBPROJECT_PATH)/drivers/gdisp/st7565ergodox/driver.mk
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifdef LED_ENABLE
|
|
||||||
include $(SUBPROJECT_PATH)/drivers/gdisp/IS31FL3731C/driver.mk
|
|
||||||
endif
|
|
77
keyboards/ergodox/infinity/rules.mk
Normal file
|
@ -0,0 +1,77 @@
|
||||||
|
# project specific files
|
||||||
|
SRC = matrix.c \
|
||||||
|
led.c
|
||||||
|
|
||||||
|
## chip/board settings
|
||||||
|
# - the next two should match the directories in
|
||||||
|
# <chibios>/os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES)
|
||||||
|
# - For Teensies, FAMILY = KINETIS and SERIES is either
|
||||||
|
# KL2x (LC) or K20x (3.0,3.1,3.2).
|
||||||
|
# - For Infinity KB, SERIES = K20x
|
||||||
|
MCU_FAMILY = KINETIS
|
||||||
|
MCU_SERIES = K20x
|
||||||
|
|
||||||
|
# Linker script to use
|
||||||
|
# - it should exist either in <chibios>/os/common/ports/ARMCMx/compilers/GCC/ld/
|
||||||
|
# or <this_dir>/ld/
|
||||||
|
# - NOTE: a custom ld script is needed for EEPROM on Teensy LC
|
||||||
|
# - LDSCRIPT =
|
||||||
|
# - MKL26Z64 for Teensy LC
|
||||||
|
# - MK20DX128 for Teensy 3.0
|
||||||
|
# - MK20DX256 for Teensy 3.1 and 3.2
|
||||||
|
# - MK20DX128BLDR4 for Infinity 60% with Kiibohd bootloader
|
||||||
|
# - MK20DX256BLDR8 for Infinity ErgoDox with Kiibohd bootloader
|
||||||
|
MCU_LDSCRIPT = MK20DX256BLDR8
|
||||||
|
|
||||||
|
# Startup code to use
|
||||||
|
# - it should exist in <chibios>/os/common/ports/ARMCMx/compilers/GCC/mk/
|
||||||
|
# - STARTUP =
|
||||||
|
# - kl2x for Teensy LC
|
||||||
|
# - k20x5 for Teensy 3.0 and Infinity 60%
|
||||||
|
# - k20x7 for Teensy 3.1, 3.2 and Infinity ErgoDox
|
||||||
|
MCU_STARTUP = k20x7
|
||||||
|
|
||||||
|
# Board: it should exist either in <chibios>/os/hal/boards/
|
||||||
|
# or <this_dir>/boards
|
||||||
|
# - BOARD =
|
||||||
|
# - PJRC_TEENSY_LC for Teensy LC
|
||||||
|
# - PJRC_TEENSY_3 for Teensy 3.0
|
||||||
|
# - PJRC_TEENSY_3_1 for Teensy 3.1 or 3.2
|
||||||
|
# - MCHCK_K20 for Infinity KB
|
||||||
|
#BOARD = MCHCK_K20
|
||||||
|
BOARD = PJRC_TEENSY_3_1
|
||||||
|
|
||||||
|
# Cortex version
|
||||||
|
# Teensy LC is cortex-m0; Teensy 3.x are cortex-m4
|
||||||
|
MCU = cortex-m4
|
||||||
|
|
||||||
|
# ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7
|
||||||
|
# I.e. 6 for Teensy LC; 7 for Teensy 3.x
|
||||||
|
ARMV = 7
|
||||||
|
|
||||||
|
# Vector table for application
|
||||||
|
# 0x00000000-0x00001000 area is occupied by bootlaoder.*/
|
||||||
|
# The CORTEX_VTOR... is needed only for MCHCK/Infinity KB
|
||||||
|
OPT_DEFS += -DCORTEX_VTOR_INIT=0x00002000
|
||||||
|
|
||||||
|
# Build Options
|
||||||
|
# comment out to disable the options.
|
||||||
|
#
|
||||||
|
CUSTOM_MATRIX ?= yes # Custom matrix file
|
||||||
|
SERIAL_LINK_ENABLE = yes
|
||||||
|
VISUALIZER_ENABLE ?= no #temporarily disabled to make everything compile
|
||||||
|
LCD_ENABLE ?= yes
|
||||||
|
LED_ENABLE ?= yes
|
||||||
|
LCD_BACKLIGHT_ENABLE ?= yes
|
||||||
|
|
||||||
|
ifndef QUANTUM_DIR
|
||||||
|
include ../../../Makefile
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifdef LCD_ENABLE
|
||||||
|
include $(SUBPROJECT_PATH)/drivers/gdisp/st7565ergodox/driver.mk
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifdef LED_ENABLE
|
||||||
|
include $(SUBPROJECT_PATH)/drivers/gdisp/IS31FL3731C/driver.mk
|
||||||
|
endif
|
BIN
keyboards/ergodox/keymaps/absenth/absenth_highres.png
Normal file
After Width: | Height: | Size: 1.4 MiB |
183
keyboards/ergodox/keymaps/absenth/keymap.c
Normal file
|
@ -0,0 +1,183 @@
|
||||||
|
#include "ergodox.h"
|
||||||
|
#include "debug.h"
|
||||||
|
#include "action_layer.h"
|
||||||
|
#include "version.h"
|
||||||
|
|
||||||
|
#define BASE 0 // default layer
|
||||||
|
#define SYMB 1 // symbols
|
||||||
|
#define MDIA 2 // media keys
|
||||||
|
|
||||||
|
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/L2 | S | D | F | G |------| |------| H | J | K | L |; / L2|' / Cmd |
|
||||||
|
* |--------+------+------+------+------+------| Hyper| | Meh |------+------+------+------+------+--------|
|
||||||
|
* | LS/PO |Z/Ctrl| X | C | V | B | | | | N | M | , | . |//Ctrl| RS/PC |
|
||||||
|
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
|
||||||
|
* |Grv/L1| '" |AltShf| Left | Right| | Up | Down | [ | ] | ~L1 |
|
||||||
|
* `----------------------------------' `----------------------------------'
|
||||||
|
* ,-------------. ,-------------.
|
||||||
|
* | App | LGui | | Alt |Ctrl/Esc|
|
||||||
|
* ,------|------|------| |------+--------+------.
|
||||||
|
* | | | Home | | PgUp | | |
|
||||||
|
* | Space|Backsp|------| |------| Tab |Enter |
|
||||||
|
* | |ace | End | | PgDn | | |
|
||||||
|
* `--------------------' `----------------------'
|
||||||
|
*/
|
||||||
|
// 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(SYMB),
|
||||||
|
KC_BSPC, LT(MDIA, KC_A), KC_S, KC_D, KC_F, KC_G,
|
||||||
|
KC_LSPO, CTL_T(KC_Z), KC_X, KC_C, KC_V, KC_B, ALL_T(KC_NO),
|
||||||
|
LT(SYMB,KC_GRV),KC_QUOT, LALT(KC_LSFT), KC_LEFT,KC_RGHT,
|
||||||
|
ALT_T(KC_APP), KC_LGUI,
|
||||||
|
KC_HOME,
|
||||||
|
KC_SPC,KC_BSPC,KC_END,
|
||||||
|
// 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),GUI_T(KC_QUOT),
|
||||||
|
MEH_T(KC_NO),KC_N, KC_M, KC_COMM,KC_DOT, CTL_T(KC_SLSH), KC_RSPC,
|
||||||
|
KC_UP, KC_DOWN,KC_LBRC,KC_RBRC, KC_FN1,
|
||||||
|
KC_LALT, CTL_T(KC_ESC),
|
||||||
|
KC_PGUP,
|
||||||
|
KC_PGDN,KC_TAB, KC_ENT
|
||||||
|
),
|
||||||
|
/* Keymap 1: Symbol Layer
|
||||||
|
*
|
||||||
|
* ,--------------------------------------------------. ,--------------------------------------------------.
|
||||||
|
* |Version | 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
|
||||||
|
M(0), 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
|
||||||
|
*
|
||||||
|
* ,--------------------------------------------------. ,--------------------------------------------------.
|
||||||
|
* | | | | | | | | | | | | | | | |
|
||||||
|
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
|
||||||
|
* | | | | MsUp | | | | | | | | | | | |
|
||||||
|
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||||
|
* | | |MsLeft|MsDown|MsRght| |------| |------| left | down | up | down | | Play |
|
||||||
|
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||||
|
* | | | | | | | | | | | | Prev | Next | | |
|
||||||
|
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
|
||||||
|
* | | | | Lclk | Rclk | |VolUp |VolDn | Mute | | |
|
||||||
|
* `----------------------------------' `----------------------------------'
|
||||||
|
* ,-------------. ,-------------.
|
||||||
|
* | | | | | |
|
||||||
|
* ,------|------|------| |------+------+------.
|
||||||
|
* | | | | | | |Brwser|
|
||||||
|
* | Lclk | Rclk |------| |------| |Back |
|
||||||
|
* | | | | | | | |
|
||||||
|
* `--------------------' `--------------------'
|
||||||
|
*/
|
||||||
|
// MEDIA AND MOUSE
|
||||||
|
[MDIA] = KEYMAP(
|
||||||
|
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_BTN1, KC_BTN2,
|
||||||
|
KC_TRNS, KC_TRNS,
|
||||||
|
KC_TRNS,
|
||||||
|
KC_BTN1, KC_BTN2, 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_LEFT, KC_DOWN, KC_UP, KC_RIGHT,KC_TRNS, KC_MPLY,
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS,
|
||||||
|
KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS,
|
||||||
|
KC_TRNS, KC_TRNS,
|
||||||
|
KC_TRNS,
|
||||||
|
KC_TRNS, KC_TRNS, KC_WBAK
|
||||||
|
),
|
||||||
|
};
|
||||||
|
|
||||||
|
const uint16_t PROGMEM fn_actions[] = {
|
||||||
|
[1] = ACTION_LAYER_TAP_TOGGLE(SYMB) // FN1 - Momentary Layer 1 (Symbols)
|
||||||
|
};
|
||||||
|
|
||||||
|
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) {
|
||||||
|
SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION);
|
||||||
|
}
|
||||||
|
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) {
|
||||||
|
// TODO: Make this relevant to the ErgoDox EZ.
|
||||||
|
case 1:
|
||||||
|
ergodox_right_led_1_on();
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
ergodox_right_led_2_on();
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
// none
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
11
keyboards/ergodox/keymaps/absenth/readme.md
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
# ErgoDox EZ Absenth Configuration
|
||||||
|
|
||||||
|
## Changelog
|
||||||
|
|
||||||
|
|
||||||
|
* Sept. 14, 2016 (V0.2):
|
||||||
|
* Added Space Cadet to Left and Right Shift. Pressing Left shift with no other key adds an "(" and pressing Right shift with no other key adds an ")"
|
||||||
|
* 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.
|
||||||
|
|
||||||
|
![Absenth](absenth_highres.png)
|
|
@ -1,22 +1,23 @@
|
||||||
BOOTMAGIC_ENABLE=no
|
BOOTMAGIC_ENABLE=no
|
||||||
COMMAND_ENABLE=no
|
COMMAND_ENABLE=no
|
||||||
SLEEP_LED_ENABLE=no
|
SLEEP_LED_ENABLE=no
|
||||||
UNICODE_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
|
||||||
|
MOUSEKEY_ENABLE = no
|
||||||
|
|
||||||
ADORE_AUTOLOG ?= no
|
AUTOLOG_ENABLE ?= no
|
||||||
|
|
||||||
ifeq (${FORCE_NKRO},yes)
|
ifeq (${FORCE_NKRO},yes)
|
||||||
OPT_DEFS += -DFORCE_NKRO
|
OPT_DEFS += -DFORCE_NKRO
|
||||||
endif
|
endif
|
||||||
|
|
||||||
ifeq (${ADORE_AUTOLOG},yes)
|
ifeq (${AUTOLOG_ENABLE},yes)
|
||||||
KEYLOGGER_ENABLE = yes
|
KEYLOGGER_ENABLE = yes
|
||||||
OPT_DEFS += -DADORE_AUTOLOG
|
OPT_DEFS += -DAUTOLOG_ENABLE
|
||||||
endif
|
endif
|
||||||
|
|
||||||
ifeq (${KEYLOGGER_ENABLE},yes)
|
ifeq (${KEYLOGGER_ENABLE},yes)
|
||||||
|
@ -24,6 +25,8 @@ OPT_DEFS += -DKEYLOGGER_ENABLE
|
||||||
CONSOLE_ENABLE = yes
|
CONSOLE_ENABLE = yes
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
OPT_DEFS += -DUSER_PRINT
|
||||||
|
|
||||||
KEYMAP_VERSION = $(shell \
|
KEYMAP_VERSION = $(shell \
|
||||||
if [ -d "${KEYMAP_PATH}/.git" ]; then \
|
if [ -d "${KEYMAP_PATH}/.git" ]; then \
|
||||||
cd "${KEYMAP_PATH}" && git describe --abbrev=6 --dirty --always --tags --match 'v*' 2>/dev/null; \
|
cd "${KEYMAP_PATH}" && git describe --abbrev=6 --dirty --always --tags --match 'v*' 2>/dev/null; \
|
||||||
|
|
Before Width: | Height: | Size: 92 KiB After Width: | Height: | Size: 95 KiB |
Before Width: | Height: | Size: 93 KiB After Width: | Height: | Size: 100 KiB |
Before Width: | Height: | Size: 135 KiB After Width: | Height: | Size: 136 KiB |
|
@ -3,23 +3,26 @@
|
||||||
algernon's layout
|
algernon's layout
|
||||||
=======================
|
=======================
|
||||||
|
|
||||||
This is an unconventional layout for the ErgoDox EZ. For more details about the history of the layout, see my [blog posts about my ErgoDox journey][blog-ergodox].
|
This is an unconventional layout for the [ErgoDox EZ][ez]. For more details about the history of the layout, see my [blog posts about my ErgoDox journey][blog-ergodox].
|
||||||
|
|
||||||
|
[ez]: https://ergodox-ez.com/
|
||||||
[blog-ergodox]: https://asylum.madhouse-project.org/blog/tags/ergodox/
|
[blog-ergodox]: https://asylum.madhouse-project.org/blog/tags/ergodox/
|
||||||
|
|
||||||
Some of the things in the layout only work when one uses Spacemacs and GNOME under Linux. Your mileage may vary.
|
Some of the things in the layout only work when one uses [Spacemacs][spacemacs] and [GNOME][gnome] under Linux. Your mileage may vary.
|
||||||
|
|
||||||
|
[spacemacs]: http://spacemacs.org/
|
||||||
|
[gnome]: https://www.gnome.org/
|
||||||
|
|
||||||
## Table of Contents
|
## Table of Contents
|
||||||
|
|
||||||
* [Layouts](#layouts)
|
* [Layouts](#layouts)
|
||||||
- [Base layer](#base-layer)
|
- [Base layer](#base-layer)
|
||||||
- [ADORE layer](#adore-layer)
|
- [ADORE layer](#adore-layer)
|
||||||
- [Hungarian layer](#hungarian-layer)
|
|
||||||
- [Navigation and media layer](#navigation-and-media-layer)
|
|
||||||
- [Steno layer](#steno-layer)
|
- [Steno layer](#steno-layer)
|
||||||
- [LED states](#led-states)
|
- [LED states](#led-states)
|
||||||
* [Tools](#tools)
|
* [Tools](#tools)
|
||||||
- [Heatmap](#heatmap)
|
- [Heatmap](#heatmap)
|
||||||
|
- [Layer notification](#layer-notification)
|
||||||
* [Special features](#special-features)
|
* [Special features](#special-features)
|
||||||
- [Unicode Symbol Input](#unicode-symbol-input)
|
- [Unicode Symbol Input](#unicode-symbol-input)
|
||||||
* [Building](#building)
|
* [Building](#building)
|
||||||
|
@ -35,15 +38,15 @@ Some of the things in the layout only work when one uses Spacemacs and GNOME und
|
||||||
|
|
||||||
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:
|
||||||
|
|
||||||
* The keys on the number row double as function keys, when held for a bit longer than an usual tap. This allows me to use the function keys without having to switch layers.
|
* The number row is the same as in the [ADORE](#adore-layer) layer. The function keys are on the **Media** layer.
|
||||||
* The `Shift`, `Alt`, and `Control` modifiers are one-shot. When tapped, they are considered active for the next key press only. When double tapped, they toggle on, until a third, single tap sometime later. When held, they act as expected. My usual pattern is that I use these for the next keypress only, so this behaviour is perfect. If I need them held, I'll just double-tap.
|
* The `Shift`, `Alt`, and `Control` modifiers are one-shot. When tapped, they are considered active for the next key press only. When double tapped, they toggle on, until a third, single tap sometime later. When held, they act as expected. My usual pattern is that I use these for the next keypress only, so this behaviour is perfect. If I need them held, I'll just double-tap.
|
||||||
* The `GUI` key is special, because when I double-tap it, it sends `GUI + w`, which pops up an application selector. It also switches to a one-shot layer, where the number row on the left half turns into app selector macros, for the most common things I usually want to switch to. Otherwise it behaves as on a normal layout.
|
* The `GUI` key is special, because when I double-tap it, it sends `GUI + w`, which pops up an application selector. It also switches to a one-shot layer, where the number row on the left half turns into app selector macros, for the most common things I usually want to switch to. Otherwise it behaves as on a normal layout.
|
||||||
* The `ESC` key also doubles as a one-shot cancel key: if tapped while any of the one-shot modifiers are in-flight (as in, single-tapped, and not expired yet), it cancels all one-shot modifiers. It also cancels the **Hun** layer, if active. Otherwise it sends the usual keycode.
|
* The `ESC` key also doubles as a one-shot cancel key: if tapped while any of the one-shot modifiers are in-flight (as in, single-tapped, and not expired yet), it cancels all one-shot modifiers. It also cancels the **Hun** layer, if active. Otherwise it sends the usual keycode.
|
||||||
* The **Media** and **Hun** layer keys are one-shot, the **STENO** key is a toggle.
|
* The **Media** and **Hun** layer keys are one-shot, the **STENO** key is a toggle.
|
||||||
* When holding any of the **Arrow** layer keys, the arrow layer activates while the layer key is held. Tapping the key produces the normal key.
|
* When holding the `Tab`/**Arrow** key, the arrow layer activates while the key is held. Tapping the key produces the normal, `Tab` key. Double-tapping it toggles the **Arrow** layer on until a third tap.
|
||||||
* Tapping the `:` key once yields `:`, tapping it twice yields `;`.
|
* Tapping the `:` key once yields `:`, tapping it twice yields `;`.
|
||||||
|
* Tapping the `[{(`/`)}]` keys once yields `[` (or `{` when shifted), tapping them twice yields `(`.
|
||||||
* The **Lead** key allows me to type in a sequence of keys, and trigger some actions:
|
* The **Lead** key allows me to type in a sequence of keys, and trigger some actions:
|
||||||
- `LEAD u` enters unicode input mode, by sending the GTK+ key sequence that does this.
|
|
||||||
- `LEAD l` uses the unicode input method to enter a `λ`.
|
- `LEAD l` uses the unicode input method to enter a `λ`.
|
||||||
- `LEAD s` does a lot of magic to type in a shruggie: `¯\_(ツ)_/¯`
|
- `LEAD s` does a lot of magic to type in a shruggie: `¯\_(ツ)_/¯`
|
||||||
- `LEAD y` types `\o/`.
|
- `LEAD y` types `\o/`.
|
||||||
|
@ -52,29 +55,17 @@ At its core, this is a Dvorak layout, with some minor changes. The more interest
|
||||||
- `LEAD v` prints the firmware version, the keyboard and the keymap.
|
- `LEAD v` prints the firmware version, the keyboard and the keymap.
|
||||||
- `LEAD d` toggles logging keypress positions to the HID console.
|
- `LEAD d` toggles logging keypress positions to the HID console.
|
||||||
- `LEAD t` toggles time travel. Figuring out the current `date` is left as an exercise to the reader.
|
- `LEAD t` toggles time travel. Figuring out the current `date` is left as an exercise to the reader.
|
||||||
- `LEAD LEAD u` enters the [Unicode symbol input][#unicode-symbol-input] mode.
|
- `LEAD u` enters the [Unicode symbol input](#unicode-symbol-input) mode.
|
||||||
|
|
||||||
|
The symbols on the front in the image above have the same color as the key that activates them, with the exception of the **Arrow** layer, which is just black on the front.
|
||||||
|
|
||||||
## ADORE layer
|
## ADORE layer
|
||||||
|
|
||||||
[![ADORE layer](images/adore-layer.png)](http://www.keyboard-layout-editor.com/#/gists/45681a17453d235925b6028dd83bf12a)
|
[![ADORE layer](images/adore-layer.png)](http://www.keyboard-layout-editor.com/#/gists/45681a17453d235925b6028dd83bf12a)
|
||||||
|
|
||||||
While using the standard Dvorak layout, I encountered a number of inconveniences, and on this layer, I am playing with ideas to make the layout feel better. Initially, it was based on [Capewell-Dvorak][cpd], but that too, had shortcomings I was not happy with. So now this is something inbetween, with own observations thrown in. How it works out in the long run remains to be seen.
|
My experimental layout, that I keep tweaking. No full description here, because things are very much in flux.
|
||||||
|
|
||||||
[cpd]: http://www.michaelcapewell.com/projects/keyboard/layout_capewell-dvorak.htm
|
Note that the **HUN** layer does not work well with ADORE: it still has the same layout as on the [Base](#base-layer) layer. This will remain until ADORE becomes the default.
|
||||||
|
|
||||||
Based on a week and a half of typing, the keys were rearranged, and the home row neatly spelled out **ADORE**, that gave the layout its name.
|
|
||||||
|
|
||||||
## Hungarian layer
|
|
||||||
|
|
||||||
[![Hungarian layer](images/hun-layer.png)](http://www.keyboard-layout-editor.com/#/gists/b160f6ec90d58c127c114c89f66e9dc9)
|
|
||||||
|
|
||||||
On this layer, the accented characters are at the same position as their base variant. For some, which can have other diatribes, the long one is on top, short's on bottom. Tapping any of the accented characters takes us back to the base layer.
|
|
||||||
|
|
||||||
## Navigation and media layer
|
|
||||||
|
|
||||||
[![Navigation and media layer](images/nav-n-media-layer.png)](http://www.keyboard-layout-editor.com/#/gists/c59c453f9fe1a3238ba1494e7e5c6892)
|
|
||||||
|
|
||||||
This layer is primarily for navigating with the cursor or the mouse, and some media things.
|
|
||||||
|
|
||||||
## Steno layer
|
## Steno layer
|
||||||
|
|
||||||
|
@ -89,8 +80,9 @@ The primary purpose of the LEDs is to show the modifier status, a secondary, to
|
||||||
For the layers, the following rules apply:
|
For the layers, the following rules apply:
|
||||||
|
|
||||||
* When the [ADORE layer](#adore-layer) is toggled on, LEDs will light up from left to right in a sequence, then turn off. When the layer is toggled off, the LEDs light up and turn off in the other direction. No LEDs are on while the layer is active.
|
* When the [ADORE layer](#adore-layer) is toggled on, LEDs will light up from left to right in a sequence, then turn off. When the layer is toggled off, the LEDs light up and turn off in the other direction. No LEDs are on while the layer is active.
|
||||||
* When the [Hungarian layer](#hungarian-layer) is active, the *green* and *blue* LEDs are on.
|
* When the **Hungarian** layer is active, the *green* and *blue* LEDs are on.
|
||||||
* When the [Navigation and media layer](#navigation-and-media-layer) is active, the *red* and *green* ones are on.
|
* When the **Media** layer is active, the *red* and *green* ones are on.
|
||||||
|
* When the **ARROW** layer is active, the *red* and *blue* ones are on.
|
||||||
* For the [Steno layer](#steno-layer), all LEDs will be turned on.
|
* For the [Steno layer](#steno-layer), all LEDs will be turned on.
|
||||||
|
|
||||||
Unless noted otherwise, the layers use a dim light for the LEDs, while modifiers use a stronger one, and modifiers override any layer preferences. For example, when on the one-handed layer, with the left side active (*red* light blinking), if `Shift` is on, the *red* light will be constantly on.
|
Unless noted otherwise, the layers use a dim light for the LEDs, while modifiers use a stronger one, and modifiers override any layer preferences. For example, when on the one-handed layer, with the left side active (*red* light blinking), if `Shift` is on, the *red* light will be constantly on.
|
||||||
|
@ -116,7 +108,7 @@ This is an experimental feature, and may or may not work reliably.
|
||||||
|
|
||||||
When the keypress logging functionality is enabled (by `LEAD d`), the keyboard will output a line every time a key is pressed, containing the position of the key in the matrix. This allows one to collect this information, and build analytics over it, such as a heat map, including dead keys too.
|
When the keypress logging functionality is enabled (by `LEAD d`), the keyboard will output a line every time a key is pressed, containing the position of the key in the matrix. This allows one to collect this information, and build analytics over it, such as a heat map, including dead keys too.
|
||||||
|
|
||||||
Included with the firmware is a small tool that can parse these logs, and create a heatmap that one can import into [KLE][kle]. To use it, simply point `tools/log-to-heatmap.py` to a base layout file (one is included in the `tools/` directory), and the key position log. The latter one can create by running `hid-listen`, and redirecting its output to a file.
|
Included with the firmware is a small tool that can parse these logs, and create a heatmap that one can import into [KLE][kle]. To use it, either pipe the output of `hid_listen` into it, or pipe it an already saved log, and it will save the results into files in an output directory (given on the command-line). See the output of `tools/log-to-heatmap.py --help` for more information.
|
||||||
|
|
||||||
[kle]: http://www.keyboard-layout-editor.com/
|
[kle]: http://www.keyboard-layout-editor.com/
|
||||||
|
|
||||||
|
@ -124,6 +116,10 @@ The generated heatmap looks somewhat like this:
|
||||||
|
|
||||||
![Heatmap](images/heatmap.png)
|
![Heatmap](images/heatmap.png)
|
||||||
|
|
||||||
|
## Layer notification
|
||||||
|
|
||||||
|
There is a very small tool in `tools/layer-notify`, that listens to the HID console, looking for layer change events, and pops up a notification for every detected change. It is a very simple tool, mainly serving as an example.
|
||||||
|
|
||||||
# Building
|
# Building
|
||||||
|
|
||||||
To make my workflow easier, this layout is maintained in [its own repository][algernon:ez-layout]. To build it, you will need the [QMK][qmk] firmware checked out, and this repo either checked out to something like `keyboards/ergodox_ez/algernon-master`. One way to achieve that is this:
|
To make my workflow easier, this layout is maintained in [its own repository][algernon:ez-layout]. To build it, you will need the [QMK][qmk] firmware checked out, and this repo either checked out to something like `keyboards/ergodox_ez/algernon-master`. One way to achieve that is this:
|
||||||
|
@ -151,7 +147,72 @@ The keymap default to forcing NKRO, which seems to upset Windows, and except the
|
||||||
|
|
||||||
# Changelog
|
# Changelog
|
||||||
|
|
||||||
## v1.5 - 2016-08-12
|
## v1.7
|
||||||
|
|
||||||
|
*2016-09-18*
|
||||||
|
|
||||||
|
### Overall changes
|
||||||
|
|
||||||
|
* The number row has been completely rearranged on both the [Base](#base-layer) and the [ADORE](#adore-layer) layers.
|
||||||
|
* The number/function key behavior was changed: function keys are now on the **Media**.
|
||||||
|
* The `:`/`;` and `-`/`_` keys were put back to their thumb position on the bottom row, on both the [Base](#base-layer) and [ADORE](#adore-layer) layers.
|
||||||
|
* The bottom large keys on the inner side of each half now function as [tmux](http://tmux.github.io/) keys: the left to send the prefix, the right to send the `display-panes` key. The left also doubles as a GNU screen prefix key, and sends `C-a` when double tapped.
|
||||||
|
* A number of functions, such as the **AppSel** layer, now require the `hid-commands` tool to be running, with the output of `hid_listen` being piped to it.
|
||||||
|
|
||||||
|
### ADORE
|
||||||
|
|
||||||
|
* `Y` and `X` have been swapped again.
|
||||||
|
|
||||||
|
### Media/Navigation layer
|
||||||
|
|
||||||
|
* The function keys are now on this layer.
|
||||||
|
* Mouse keys have been removed.
|
||||||
|
* Media start/stop/prev/next have been removed.
|
||||||
|
* `Print screen` has been removed.
|
||||||
|
* There is only one screen lock key now.
|
||||||
|
|
||||||
|
### Heatmap
|
||||||
|
|
||||||
|
* Fixed a few issues in the finger-stats calculation.
|
||||||
|
* The tool now also timestamps and saves all input lines to a logfile, which it loads on start, allowing one to continue the collection after upgrading the tool.
|
||||||
|
* The heatmap tool will now colorize the stats by default.
|
||||||
|
* The periodic stats are now printed in a more compact format.
|
||||||
|
|
||||||
|
### Tools
|
||||||
|
|
||||||
|
* Added a new tool, `tools/layer-notify` that listens to layer change events on the HID console, and pops up a notification on layer changes.
|
||||||
|
* Another new tool, `tools/text-to-log.py` has been added that converts arbitrary text to a keylogger output, which can be fed to the heatmap generator.
|
||||||
|
* A number of features have been moved to the `tools/hid-commands` utility. These generally are OS dependent, and are easier to implement on the software side.
|
||||||
|
|
||||||
|
## v1.6
|
||||||
|
|
||||||
|
*2016-08-24*
|
||||||
|
|
||||||
|
### Base layer changes
|
||||||
|
|
||||||
|
* The parentheses & bracket keys have been merged: tapping them results in `[` or `{` (if it was shifted), double tapping leads to `(`.
|
||||||
|
* The `:;` and `-_` keys are now available on the base layer, on their [ADORE](#adore-layer) location, too, just below `[{(`/`]})`.
|
||||||
|
* The `Apps` key has been replaced by `F12`.
|
||||||
|
* The `-`/`_` is no longer a tap-dance key.
|
||||||
|
|
||||||
|
### ADORE layer changes
|
||||||
|
|
||||||
|
* Adjustments were made to the [ADORE](#adore-layer) layer, to separate some inconvenient combinations.
|
||||||
|
|
||||||
|
### Miscellaneous changes
|
||||||
|
|
||||||
|
* `LEAD u` now starts the symbolic unicode input system, instead of the OS-one.
|
||||||
|
* The mouse acceleration keys on the **Navigation/Media** layer have been turned into toggles: tap them once to turn them on, until tapped again. Tapping an accelerator button will turn all the others off.
|
||||||
|
* When the **ARROW** layer is on, the *red* and *blue* LEDs light up now.
|
||||||
|
|
||||||
|
### Heatmap
|
||||||
|
|
||||||
|
* The built-in keylogger has been greatly enhanced, it now outputs the pressed state, and the layer (Dvorak or ADORE). As such, the `ADORE_AUTOLOG` option has been removed, instead there is `AUTOLOG_ENABLE` now, which when enabled, makes the keylogger start when the keyboard boots. It defaults to off.
|
||||||
|
* The heatmap generator received a lot of updates.
|
||||||
|
|
||||||
|
## v1.5
|
||||||
|
|
||||||
|
*2016-08-12*
|
||||||
|
|
||||||
* The **1HAND** layer has been removed.
|
* The **1HAND** layer has been removed.
|
||||||
* A `Delete` key is now available on the right thumb cluster.
|
* A `Delete` key is now available on the right thumb cluster.
|
||||||
|
@ -161,7 +222,9 @@ The keymap default to forcing NKRO, which seems to upset Windows, and except the
|
||||||
* On the **ARROW** layer, `Backspace` has been replaced by `Enter`.
|
* On the **ARROW** layer, `Backspace` has been replaced by `Enter`.
|
||||||
* There is some experimental support for entering Unicode symbols.
|
* There is some experimental support for entering Unicode symbols.
|
||||||
|
|
||||||
## v1.4 - 2016-07-29
|
## v1.4
|
||||||
|
|
||||||
|
*2016-07-29*
|
||||||
|
|
||||||
* When toggling the key logging on or off, the LEDs will do a little dance.
|
* When toggling the key logging on or off, the LEDs will do a little dance.
|
||||||
* The keylogger is now optional, but enabled by default. Use `KEYLOGGER_ENABLE=no` on the `make` command line to disable it.
|
* The keylogger is now optional, but enabled by default. Use `KEYLOGGER_ENABLE=no` on the `make` command line to disable it.
|
||||||
|
@ -169,25 +232,31 @@ The keymap default to forcing NKRO, which seems to upset Windows, and except the
|
||||||
* The `-`/`_` key was turned into a tap-dance key too.
|
* The `-`/`_` key was turned into a tap-dance key too.
|
||||||
* There is now a way to travel time with the keyboard, toggle the feature on by hitting `LEAD t`.
|
* There is now a way to travel time with the keyboard, toggle the feature on by hitting `LEAD t`.
|
||||||
|
|
||||||
## v1.3 - 2016-07-06
|
## v1.3
|
||||||
|
|
||||||
|
*2016-07-06*
|
||||||
|
|
||||||
* Added support for logging keys, by pressing `LEAD d`. Also included is a tool to generate a [heatmap](#heatmap) out of the logs.
|
* Added support for logging keys, by pressing `LEAD d`. Also included is a tool to generate a [heatmap](#heatmap) out of the logs.
|
||||||
* The arrow and navigation keys were rearranged again, and now require an additional key being held to activate. See the [base layer](#base-layer) for an image that shows where arrows are.
|
* The arrow and navigation keys were rearranged again, and now require an additional key being held to activate. See the [base layer](#base-layer) for an image that shows where arrows are.
|
||||||
* The **experimental** layer has been redone, and is now called [ADORE](#adore-layer), and as such, can be enabled by `LEAD a` now.
|
* The **experimental** layer has been redone, and is now called [ADORE](#adore-layer), and as such, can be enabled by `LEAD a` now.
|
||||||
* Switching between Dvorak and ADORE is now persisted into EEPROM, and survives a reboot.
|
* Switching between Dvorak and ADORE is now persisted into EEPROM, and survives a reboot.
|
||||||
|
|
||||||
## v1.2 - 2016-06-22
|
## v1.2
|
||||||
|
|
||||||
|
*2016-06-22*
|
||||||
|
|
||||||
* The forced NKRO mode can be easily toggled off at compile-time, to make the firmware compatible with [certain operating systems](#using-on-windows).
|
* The forced NKRO mode can be easily toggled off at compile-time, to make the firmware compatible with [certain operating systems](#using-on-windows).
|
||||||
* The `:;` key has changed behaviour: to access the `;` symbol, the key needs to be double-tapped, instead of shifted.
|
* The `:;` key has changed behaviour: to access the `;` symbol, the key needs to be double-tapped, instead of shifted.
|
||||||
* The `=` and `\` keys were swapped, `=` moved to the home row, on both the [base](#base-layer) and the **experimental** layers.
|
* The `=` and `\` keys were swapped, `=` moved to the home row, on both the [base](#base-layer) and the **experimental** layers.
|
||||||
* The arrow and navigation keys were redone, they are now more accessible, but the navigation keys require an extra tap to access.
|
* The arrow and navigation keys were redone, they are now more accessible, but the navigation keys require an extra tap to access.
|
||||||
* The **Emacs** layer is gone, replaced by a simplified [navigation and media](#navigation-and-media-layer) layer.
|
* The **Emacs** layer is gone, replaced by a simplified **navigation and media** layer.
|
||||||
* `LEAD v` types the firmware version, and the keymap version.
|
* `LEAD v` types the firmware version, and the keymap version.
|
||||||
* On the **experimental** layer, the `L` and `Q`, and the `K` and `G` keys were swapped.
|
* On the **experimental** layer, the `L` and `Q`, and the `K` and `G` keys were swapped.
|
||||||
* The [Steno](#steno-layer) layer gained a few more `#` and `*` keys, to make it easier on my fingers.
|
* The [Steno](#steno-layer) layer gained a few more `#` and `*` keys, to make it easier on my fingers.
|
||||||
|
|
||||||
## v1.1 - 2016-06-14
|
## v1.1
|
||||||
|
|
||||||
|
*2016-06-14*
|
||||||
|
|
||||||
* The keyboard starts in NKRO mode, bootmagic and other things are disabled.
|
* The keyboard starts in NKRO mode, bootmagic and other things are disabled.
|
||||||
* A [Steno](#steno-layer) layer was added, to be used with Plover.
|
* A [Steno](#steno-layer) layer was added, to be used with Plover.
|
||||||
|
@ -199,9 +268,11 @@ The keymap default to forcing NKRO, which seems to upset Windows, and except the
|
||||||
- `-` on the left half was replaced by `Tab`.
|
- `-` on the left half was replaced by `Tab`.
|
||||||
- `Tab`'s original position is taken by a `Media Next`/`Media Prev` key.
|
- `Tab`'s original position is taken by a `Media Next`/`Media Prev` key.
|
||||||
- `:` now inputs `;` when shifted.
|
- `:` now inputs `;` when shifted.
|
||||||
* `ESC` cancels the [Hungarian](#hungarian-layer) layer too, not just modifiers.
|
* `ESC` cancels the **Hungarian** layer too, not just modifiers.
|
||||||
|
|
||||||
## v1.0 - 2016-05-26
|
## v1.0
|
||||||
|
|
||||||
|
*2016-05-26*
|
||||||
|
|
||||||
Initial version.
|
Initial version.
|
||||||
|
|
||||||
|
|
|
@ -13,18 +13,15 @@
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"x": 3.5,
|
"x": 3.5,
|
||||||
"c": "#a7d0db",
|
|
||||||
"fa": [
|
"fa": [
|
||||||
0,
|
0,
|
||||||
0,
|
0,
|
||||||
2
|
2
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"#\n3\nF3",
|
"*\n5\nF5",
|
||||||
{
|
{
|
||||||
"x": 10.5,
|
"x": 10.5,
|
||||||
"c": "#a7d0db",
|
|
||||||
"t": "#000000",
|
|
||||||
"a": 4,
|
"a": 4,
|
||||||
"fa": [
|
"fa": [
|
||||||
0,
|
0,
|
||||||
|
@ -32,54 +29,44 @@
|
||||||
2
|
2
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"*\n8\nF8"
|
"#\n4\nF4"
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"y": -0.875,
|
"y": -0.875,
|
||||||
"x": 2.5,
|
"x": 2.5
|
||||||
"c": "#bfbad1",
|
|
||||||
"t": "#0d0d0b"
|
|
||||||
},
|
},
|
||||||
"@\n2\nF2",
|
"@\n7\nF7",
|
||||||
{
|
{
|
||||||
"x": 1,
|
"x": 1
|
||||||
"c": "#7adabd",
|
|
||||||
"t": "#000000"
|
|
||||||
},
|
},
|
||||||
"$\n4\nF4",
|
"^\n3\nF3",
|
||||||
{
|
{
|
||||||
"x": 8.5
|
"x": 8.5
|
||||||
},
|
},
|
||||||
"&\n7\nF7",
|
"!\n2\nF2",
|
||||||
{
|
{
|
||||||
"x": 1,
|
"x": 1
|
||||||
"c": "#bfbad1",
|
|
||||||
"t": "#0d0d0b"
|
|
||||||
},
|
},
|
||||||
"(\n9\nF9"
|
"&\n6\nF6"
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"y": -0.875,
|
"y": -0.875,
|
||||||
"x": 5.5,
|
"x": 5.5
|
||||||
"c": "#7adabd",
|
|
||||||
"t": "#000000"
|
|
||||||
},
|
},
|
||||||
"%\n5\nF5",
|
"$\n1\nF1",
|
||||||
{
|
{
|
||||||
"c": "#f9cd31",
|
|
||||||
"a": 7,
|
"a": 7,
|
||||||
"f": 2
|
"f": 3
|
||||||
},
|
},
|
||||||
"STENO",
|
"F11",
|
||||||
{
|
{
|
||||||
"x": 4.5,
|
"x": 4.5,
|
||||||
"f": 6
|
"f": 3
|
||||||
},
|
},
|
||||||
"<i class='mss mss-Unicode-Option-3'></i>",
|
"F12",
|
||||||
{
|
{
|
||||||
"c": "#7adabd",
|
|
||||||
"a": 4,
|
"a": 4,
|
||||||
"f": 3,
|
"f": 3,
|
||||||
"fa": [
|
"fa": [
|
||||||
|
@ -88,39 +75,43 @@
|
||||||
2
|
2
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"^\n6\nF6"
|
"%\n0\nF10"
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"y": -0.875,
|
"y": -0.875,
|
||||||
"c": "#ffb2d2",
|
"f": 9,
|
||||||
"f": 3,
|
"a": 6,
|
||||||
"w": 1.5
|
"w": 1.5
|
||||||
},
|
},
|
||||||
"\n\n~\n`",
|
"\n\n<i class='kb kb-Multimedia-Play-Pause'></i>",
|
||||||
{
|
{
|
||||||
"t": "#0d0d0b"
|
"f": 3,
|
||||||
|
"a": 4,
|
||||||
|
"fa": [
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
2
|
||||||
|
]
|
||||||
},
|
},
|
||||||
"!\n1\nF1",
|
" \n9\nF9",
|
||||||
{
|
{
|
||||||
"x": 14.5
|
"x": 14.5
|
||||||
},
|
},
|
||||||
")\n0\nF10",
|
" \n8\nF8",
|
||||||
{
|
{
|
||||||
"a": 7,
|
"a": 7,
|
||||||
"w": 1.5
|
"w": 1.5
|
||||||
},
|
},
|
||||||
"F11"
|
"STENO"
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"y": -0.375,
|
"y": -0.375,
|
||||||
"x": 3.5,
|
"x": 3.5,
|
||||||
"c": "#a7d0db",
|
|
||||||
"t": "#000000",
|
|
||||||
"a": 6
|
"a": 6
|
||||||
},
|
},
|
||||||
"L",
|
"G",
|
||||||
{
|
{
|
||||||
"x": 10.5
|
"x": 10.5
|
||||||
},
|
},
|
||||||
|
@ -130,50 +121,41 @@
|
||||||
{
|
{
|
||||||
"y": -0.875,
|
"y": -0.875,
|
||||||
"x": 2.5,
|
"x": 2.5,
|
||||||
"c": "#bfbad1",
|
|
||||||
"t": "#0d0d0b",
|
|
||||||
"a": 4
|
|
||||||
},
|
|
||||||
">\n.",
|
|
||||||
{
|
|
||||||
"x": 1,
|
|
||||||
"c": "#7adabd",
|
|
||||||
"t": "#000000",
|
|
||||||
"a": 6
|
"a": 6
|
||||||
},
|
},
|
||||||
"W",
|
"W",
|
||||||
|
{
|
||||||
|
"x": 1,
|
||||||
|
"a": 6
|
||||||
|
},
|
||||||
|
"L",
|
||||||
{
|
{
|
||||||
"x": 8.5
|
"x": 8.5
|
||||||
},
|
},
|
||||||
"H",
|
"H",
|
||||||
{
|
{
|
||||||
"x": 1,
|
"x": 1
|
||||||
"c": "#bfbad1",
|
|
||||||
"t": "#0d0d0b"
|
|
||||||
},
|
},
|
||||||
"P"
|
"P"
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"y": -0.875,
|
"y": -0.875,
|
||||||
"x": 5.5,
|
"x": 5.5
|
||||||
"c": "#7adabd",
|
|
||||||
"t": "#000000"
|
|
||||||
},
|
},
|
||||||
"M",
|
"M",
|
||||||
{
|
{
|
||||||
"c": "#93c9b7",
|
|
||||||
"a": 4,
|
"a": 4,
|
||||||
|
"fa": [0, 0, 0],
|
||||||
"h": 1.5
|
"h": 1.5
|
||||||
},
|
},
|
||||||
"{\n[",
|
"{\n(\n[",
|
||||||
{
|
{
|
||||||
"x": 4.5,
|
"x": 4.5,
|
||||||
"h": 1.5
|
"h": 1.5
|
||||||
},
|
},
|
||||||
"}\n]",
|
"}\n)\n]",
|
||||||
{
|
{
|
||||||
"c": "#7adabd",
|
|
||||||
"a": 6
|
"a": 6
|
||||||
},
|
},
|
||||||
"F"
|
"F"
|
||||||
|
@ -181,18 +163,16 @@
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"y": -0.875,
|
"y": -0.875,
|
||||||
"c": "#ffb07b",
|
"f": 3,
|
||||||
"t": "#0d0d0b",
|
"a": 4,
|
||||||
"f": 6,
|
|
||||||
"w": 1.5
|
"w": 1.5
|
||||||
},
|
},
|
||||||
"<i class='fa fa-fast-backward'></i>\n\n<i class='fa fa-fast-forward'></i>",
|
"\n\n~\n`",
|
||||||
{
|
{
|
||||||
"c": "#ffb2d2",
|
"a": 6,
|
||||||
"a": 4,
|
|
||||||
"f": 3
|
"f": 3
|
||||||
},
|
},
|
||||||
"<\n,",
|
"X",
|
||||||
{
|
{
|
||||||
"x": 14.5,
|
"x": 14.5,
|
||||||
"a": 6
|
"a": 6
|
||||||
|
@ -208,8 +188,6 @@
|
||||||
{
|
{
|
||||||
"y": -0.375,
|
"y": -0.375,
|
||||||
"x": 3.5,
|
"x": 3.5,
|
||||||
"c": "#a7d0db",
|
|
||||||
"t": "#000000",
|
|
||||||
"a": 6
|
"a": 6
|
||||||
},
|
},
|
||||||
"E",
|
"E",
|
||||||
|
@ -221,15 +199,11 @@
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"y": -0.875,
|
"y": -0.875,
|
||||||
"x": 2.5,
|
"x": 2.5
|
||||||
"c": "#bfbad1",
|
|
||||||
"t": "#0d0d0b"
|
|
||||||
},
|
},
|
||||||
"O",
|
"O",
|
||||||
{
|
{
|
||||||
"x": 1,
|
"x": 1,
|
||||||
"c": "#7adabd",
|
|
||||||
"t": "#000000",
|
|
||||||
"n": true
|
"n": true
|
||||||
},
|
},
|
||||||
"I",
|
"I",
|
||||||
|
@ -239,18 +213,14 @@
|
||||||
},
|
},
|
||||||
"R",
|
"R",
|
||||||
{
|
{
|
||||||
"x": 1,
|
"x": 1
|
||||||
"c": "#bfbad1",
|
|
||||||
"t": "#0d0d0b"
|
|
||||||
},
|
},
|
||||||
"N"
|
"N"
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"y": -0.875,
|
"y": -0.875,
|
||||||
"x": 5.5,
|
"x": 5.5
|
||||||
"c": "#7adabd",
|
|
||||||
"t": "#000000"
|
|
||||||
},
|
},
|
||||||
"U",
|
"U",
|
||||||
{
|
{
|
||||||
|
@ -261,8 +231,6 @@
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"y": -0.875,
|
"y": -0.875,
|
||||||
"c": "#ffb2d2",
|
|
||||||
"t": "#0d0d0b",
|
|
||||||
"fa": [
|
"fa": [
|
||||||
6
|
6
|
||||||
],
|
],
|
||||||
|
@ -298,29 +266,29 @@
|
||||||
{
|
{
|
||||||
"y": -0.625,
|
"y": -0.625,
|
||||||
"x": 6.5,
|
"x": 6.5,
|
||||||
"c": "#93c9b7",
|
|
||||||
"t": "#000000",
|
|
||||||
"a": 7,
|
"a": 7,
|
||||||
|
"f": 9,
|
||||||
"h": 1.5
|
"h": 1.5
|
||||||
},
|
},
|
||||||
"(",
|
"<i class='fa fa-columns'></i>",
|
||||||
{
|
{
|
||||||
"x": 4.5,
|
"x": 4.5,
|
||||||
"h": 1.5
|
"h": 1.5
|
||||||
},
|
},
|
||||||
")"
|
"<i class='fa fa-table'></i>"
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"y": -0.75,
|
"y": -0.75,
|
||||||
"x": 3.5,
|
"x": 3.5,
|
||||||
"c": "#a7d0db",
|
|
||||||
"a": 4,
|
"a": 4,
|
||||||
"f": 3
|
"f": 3
|
||||||
},
|
},
|
||||||
"\"\n'",
|
"\"\n'",
|
||||||
{
|
{
|
||||||
"x": 10.5
|
"x": 10.5,
|
||||||
|
"a": 6,
|
||||||
|
"f": 3
|
||||||
},
|
},
|
||||||
"V"
|
"V"
|
||||||
],
|
],
|
||||||
|
@ -328,24 +296,21 @@
|
||||||
{
|
{
|
||||||
"y": -0.875,
|
"y": -0.875,
|
||||||
"x": 2.5,
|
"x": 2.5,
|
||||||
"c": "#bfbad1",
|
"a": 6
|
||||||
"t": "#0d0d0b"
|
|
||||||
},
|
},
|
||||||
"Z",
|
"Q",
|
||||||
{
|
{
|
||||||
"x": 1,
|
"x": 1,
|
||||||
"c": "#7adabd",
|
"a": 4
|
||||||
"t": "#000000"
|
},
|
||||||
|
"<\n,",
|
||||||
|
{
|
||||||
|
"x": 8.5,
|
||||||
|
"a": 6
|
||||||
},
|
},
|
||||||
"K",
|
"K",
|
||||||
{
|
{
|
||||||
"x": 8.5
|
"x": 1
|
||||||
},
|
|
||||||
"G",
|
|
||||||
{
|
|
||||||
"x": 1,
|
|
||||||
"c": "#bfbad1",
|
|
||||||
"t": "#0d0d0b"
|
|
||||||
},
|
},
|
||||||
"J"
|
"J"
|
||||||
],
|
],
|
||||||
|
@ -353,48 +318,46 @@
|
||||||
{
|
{
|
||||||
"y": -0.875,
|
"y": -0.875,
|
||||||
"x": 5.5,
|
"x": 5.5,
|
||||||
"c": "#7adabd",
|
"a": 4
|
||||||
"t": "#000000"
|
|
||||||
},
|
},
|
||||||
"X",
|
">\n.",
|
||||||
{
|
{
|
||||||
"x": 6.5
|
"x": 6.5,
|
||||||
|
"a": 6
|
||||||
},
|
},
|
||||||
"B"
|
"B"
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"y": -0.875,
|
"y": -0.875,
|
||||||
"c": "#ffb07b",
|
|
||||||
"f": 9,
|
"f": 9,
|
||||||
"w": 1.5
|
"w": 1.5,
|
||||||
|
"g": true
|
||||||
},
|
},
|
||||||
"\n\n<i class='kb kb-Multimedia-Play-Pause'></i>",
|
"",
|
||||||
{
|
{
|
||||||
"c": "#ffb2d2",
|
"a": 6,
|
||||||
"t": "#0d0d0b",
|
"f": 3,
|
||||||
"a": 4,
|
"g": false
|
||||||
"f": 3
|
},
|
||||||
|
"Z",
|
||||||
|
{
|
||||||
|
"x": 14.5,
|
||||||
|
"a": 4
|
||||||
},
|
},
|
||||||
"?\n/",
|
"?\n/",
|
||||||
{
|
{
|
||||||
"x": 14.5,
|
|
||||||
"a": 6
|
|
||||||
},
|
|
||||||
"Q",
|
|
||||||
{
|
|
||||||
"c": "#ffb07b",
|
|
||||||
"t": "#000000",
|
|
||||||
"f": 9,
|
"f": 9,
|
||||||
"w": 1.5
|
"g": true,
|
||||||
|
"w": 1.5,
|
||||||
|
"a": 4
|
||||||
},
|
},
|
||||||
"<i class='kb kb-Multimedia-Stop'></i>"
|
""
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"y": -0.375,
|
"y": -0.375,
|
||||||
"x": 3.5,
|
"x": 3.5,
|
||||||
"c": "#d9dae0",
|
|
||||||
"g": true,
|
"g": true,
|
||||||
"a": 7,
|
"a": 7,
|
||||||
"f": 3
|
"f": 3
|
||||||
|
@ -413,7 +376,6 @@
|
||||||
"",
|
"",
|
||||||
{
|
{
|
||||||
"x": 1,
|
"x": 1,
|
||||||
"c": "#d4872a",
|
|
||||||
"g": false,
|
"g": false,
|
||||||
"a": 5
|
"a": 5
|
||||||
},
|
},
|
||||||
|
@ -424,7 +386,6 @@
|
||||||
"_\n-",
|
"_\n-",
|
||||||
{
|
{
|
||||||
"x": 1,
|
"x": 1,
|
||||||
"c": "#d9dae0",
|
|
||||||
"g": true,
|
"g": true,
|
||||||
"a": 7
|
"a": 7
|
||||||
},
|
},
|
||||||
|
@ -452,7 +413,6 @@
|
||||||
"ry": 4.25,
|
"ry": 4.25,
|
||||||
"y": -1,
|
"y": -1,
|
||||||
"x": 1,
|
"x": 1,
|
||||||
"c": "#f9cd31",
|
|
||||||
"g": false
|
"g": false
|
||||||
},
|
},
|
||||||
"Alt",
|
"Alt",
|
||||||
|
@ -469,7 +429,6 @@
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"c": "#d4872a",
|
|
||||||
"a": 7,
|
"a": 7,
|
||||||
"f": 9,
|
"f": 9,
|
||||||
"h": 2
|
"h": 2
|
||||||
|
@ -480,15 +439,13 @@
|
||||||
},
|
},
|
||||||
"<i class='fa fa-angle-double-up'></i>",
|
"<i class='fa fa-angle-double-up'></i>",
|
||||||
{
|
{
|
||||||
"c": "#f9cd31",
|
|
||||||
"f": 3
|
"f": 3
|
||||||
},
|
},
|
||||||
"Ctrl"
|
"Ctrl"
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"x": 2,
|
"x": 2
|
||||||
"c": "#e26757"
|
|
||||||
},
|
},
|
||||||
"ESC"
|
"ESC"
|
||||||
],
|
],
|
||||||
|
@ -498,20 +455,18 @@
|
||||||
"rx": 13,
|
"rx": 13,
|
||||||
"y": -1,
|
"y": -1,
|
||||||
"x": -3,
|
"x": -3,
|
||||||
"c": "#f9cd31",
|
|
||||||
"f": 2
|
"f": 2
|
||||||
},
|
},
|
||||||
"MEDIA",
|
"MEDIA",
|
||||||
{},
|
{},
|
||||||
"1HAND"
|
"DEL"
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"x": -3
|
"x": -3
|
||||||
},
|
},
|
||||||
"LEAD",
|
"HUN",
|
||||||
{
|
{
|
||||||
"c": "#d4872a",
|
|
||||||
"f": 9,
|
"f": 9,
|
||||||
"h": 2
|
"h": 2
|
||||||
},
|
},
|
||||||
|
@ -525,9 +480,8 @@
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"x": -3,
|
"x": -3,
|
||||||
"c": "#f9cd31",
|
|
||||||
"f": 2
|
"f": 2
|
||||||
},
|
},
|
||||||
"HUN"
|
"LEAD"
|
||||||
]
|
]
|
||||||
]
|
]
|
|
@ -13,18 +13,15 @@
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"x": 3.5,
|
"x": 3.5,
|
||||||
"c": "#a7d0db",
|
|
||||||
"fa": [
|
"fa": [
|
||||||
0,
|
0,
|
||||||
0,
|
0,
|
||||||
2
|
2
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"#\n3\nF3",
|
"*\n5\nF5",
|
||||||
{
|
{
|
||||||
"x": 10.5,
|
"x": 10.5,
|
||||||
"c": "#a7d0db",
|
|
||||||
"t": "#000000",
|
|
||||||
"a": 4,
|
"a": 4,
|
||||||
"fa": [
|
"fa": [
|
||||||
0,
|
0,
|
||||||
|
@ -32,54 +29,44 @@
|
||||||
2
|
2
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"*\n8\nF8"
|
"#\n4\nF4"
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"y": -0.875,
|
"y": -0.875,
|
||||||
"x": 2.5,
|
"x": 2.5
|
||||||
"c": "#bfbad1",
|
|
||||||
"t": "#0d0d0b"
|
|
||||||
},
|
},
|
||||||
"@\n2\nF2",
|
"@\n7\nF7",
|
||||||
{
|
{
|
||||||
"x": 1,
|
"x": 1
|
||||||
"c": "#7adabd",
|
|
||||||
"t": "#000000"
|
|
||||||
},
|
},
|
||||||
"$\n4\nF4",
|
"^\n3\nF3",
|
||||||
{
|
{
|
||||||
"x": 8.5
|
"x": 8.5
|
||||||
},
|
},
|
||||||
"&\n7\nF7",
|
"!\n2\nF2",
|
||||||
{
|
{
|
||||||
"x": 1,
|
"x": 1
|
||||||
"c": "#bfbad1",
|
|
||||||
"t": "#0d0d0b"
|
|
||||||
},
|
},
|
||||||
"(\n9\nF9"
|
"&\n6\nF6"
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"y": -0.875,
|
"y": -0.875,
|
||||||
"x": 5.5,
|
"x": 5.5
|
||||||
"c": "#7adabd",
|
|
||||||
"t": "#000000"
|
|
||||||
},
|
},
|
||||||
"%\n5\nF5",
|
"$\n1\nF1",
|
||||||
{
|
{
|
||||||
"c": "#f9cd31",
|
|
||||||
"a": 7,
|
"a": 7,
|
||||||
"f": 2
|
"f": 3
|
||||||
},
|
},
|
||||||
"STENO",
|
"F11",
|
||||||
{
|
{
|
||||||
"x": 4.5,
|
"x": 4.5,
|
||||||
"f": 6
|
"f": 3
|
||||||
},
|
},
|
||||||
"<i class='mss mss-Unicode-Option-3'></i>",
|
"F12",
|
||||||
{
|
{
|
||||||
"c": "#7adabd",
|
|
||||||
"a": 4,
|
"a": 4,
|
||||||
"f": 3,
|
"f": 3,
|
||||||
"fa": [
|
"fa": [
|
||||||
|
@ -88,36 +75,41 @@
|
||||||
2
|
2
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"^\n6\nF6"
|
"%\n0\nF10"
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"y": -0.875,
|
"y": -0.875,
|
||||||
"c": "#ffb2d2",
|
"f": 6,
|
||||||
"f": 3,
|
"a": 6,
|
||||||
"w": 1.5
|
"w": 1.5
|
||||||
},
|
},
|
||||||
"\n\n~\n`",
|
"<i class='fa fa-fast-backward'></i>\n\n<i class='fa fa-fast-forward'></i>",
|
||||||
{
|
{
|
||||||
"t": "#0d0d0b"
|
"f": 3,
|
||||||
|
"a": 4,
|
||||||
|
"fa": [
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
2
|
||||||
|
]
|
||||||
|
|
||||||
},
|
},
|
||||||
"!\n1\nF1",
|
" \n9\nF9",
|
||||||
{
|
{
|
||||||
"x": 14.5
|
"x": 14.5
|
||||||
},
|
},
|
||||||
")\n0\nF10",
|
" \n8\nF8",
|
||||||
{
|
{
|
||||||
"a": 7,
|
"a": 7,
|
||||||
"w": 1.5
|
"w": 1.5
|
||||||
},
|
},
|
||||||
"F11"
|
"STENO"
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"y": -0.375,
|
"y": -0.375,
|
||||||
"x": 3.5,
|
"x": 3.5,
|
||||||
"c": "#a7d0db",
|
|
||||||
"t": "#000000",
|
|
||||||
"a": 4
|
"a": 4
|
||||||
},
|
},
|
||||||
">\n.",
|
">\n.",
|
||||||
|
@ -131,15 +123,11 @@
|
||||||
{
|
{
|
||||||
"y": -0.875,
|
"y": -0.875,
|
||||||
"x": 2.5,
|
"x": 2.5,
|
||||||
"c": "#bfbad1",
|
|
||||||
"t": "#0d0d0b",
|
|
||||||
"a": 4
|
"a": 4
|
||||||
},
|
},
|
||||||
"<\n,",
|
"<\n,",
|
||||||
{
|
{
|
||||||
"x": 1,
|
"x": 1,
|
||||||
"c": "#7adabd",
|
|
||||||
"t": "#000000",
|
|
||||||
"a": 6
|
"a": 6
|
||||||
},
|
},
|
||||||
"P",
|
"P",
|
||||||
|
@ -148,33 +136,27 @@
|
||||||
},
|
},
|
||||||
"G",
|
"G",
|
||||||
{
|
{
|
||||||
"x": 1,
|
"x": 1
|
||||||
"c": "#bfbad1",
|
|
||||||
"t": "#0d0d0b"
|
|
||||||
},
|
},
|
||||||
"R"
|
"R"
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"y": -0.875,
|
"y": -0.875,
|
||||||
"x": 5.5,
|
"x": 5.5
|
||||||
"c": "#7adabd",
|
|
||||||
"t": "#000000"
|
|
||||||
},
|
},
|
||||||
"Y",
|
"Y",
|
||||||
{
|
{
|
||||||
"c": "#93c9b7",
|
|
||||||
"a": 4,
|
"a": 4,
|
||||||
"h": 1.5
|
"h": 1.5
|
||||||
},
|
},
|
||||||
"{\n[",
|
"{\n(\n[",
|
||||||
{
|
{
|
||||||
"x": 4.5,
|
"x": 4.5,
|
||||||
"h": 1.5
|
"h": 1.5
|
||||||
},
|
},
|
||||||
"}\n]",
|
"}\n)\n]",
|
||||||
{
|
{
|
||||||
"c": "#7adabd",
|
|
||||||
"a": 6
|
"a": 6
|
||||||
},
|
},
|
||||||
"F"
|
"F"
|
||||||
|
@ -182,14 +164,12 @@
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"y": -0.875,
|
"y": -0.875,
|
||||||
"c": "#ffb07b",
|
"f": 3,
|
||||||
"t": "#0d0d0b",
|
"a": 4,
|
||||||
"f": 6,
|
|
||||||
"w": 1.5
|
"w": 1.5
|
||||||
},
|
},
|
||||||
"<i class='fa fa-fast-backward'></i>\n\n<i class='fa fa-fast-forward'></i>",
|
"\n\n~\n`",
|
||||||
{
|
{
|
||||||
"c": "#ffb2d2",
|
|
||||||
"a": 4,
|
"a": 4,
|
||||||
"f": 3
|
"f": 3
|
||||||
},
|
},
|
||||||
|
@ -209,8 +189,6 @@
|
||||||
{
|
{
|
||||||
"y": -0.375,
|
"y": -0.375,
|
||||||
"x": 3.5,
|
"x": 3.5,
|
||||||
"c": "#a7d0db",
|
|
||||||
"t": "#000000",
|
|
||||||
"a": 6
|
"a": 6
|
||||||
},
|
},
|
||||||
"E",
|
"E",
|
||||||
|
@ -222,15 +200,11 @@
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"y": -0.875,
|
"y": -0.875,
|
||||||
"x": 2.5,
|
"x": 2.5
|
||||||
"c": "#bfbad1",
|
|
||||||
"t": "#0d0d0b"
|
|
||||||
},
|
},
|
||||||
"O",
|
"O",
|
||||||
{
|
{
|
||||||
"x": 1,
|
"x": 1,
|
||||||
"c": "#7adabd",
|
|
||||||
"t": "#000000",
|
|
||||||
"n": true
|
"n": true
|
||||||
},
|
},
|
||||||
"U",
|
"U",
|
||||||
|
@ -240,18 +214,14 @@
|
||||||
},
|
},
|
||||||
"H",
|
"H",
|
||||||
{
|
{
|
||||||
"x": 1,
|
"x": 1
|
||||||
"c": "#bfbad1",
|
|
||||||
"t": "#0d0d0b"
|
|
||||||
},
|
},
|
||||||
"N"
|
"N"
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"y": -0.875,
|
"y": -0.875,
|
||||||
"x": 5.5,
|
"x": 5.5
|
||||||
"c": "#7adabd",
|
|
||||||
"t": "#000000"
|
|
||||||
},
|
},
|
||||||
"I",
|
"I",
|
||||||
{
|
{
|
||||||
|
@ -262,8 +232,6 @@
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"y": -0.875,
|
"y": -0.875,
|
||||||
"c": "#ffb2d2",
|
|
||||||
"t": "#0d0d0b",
|
|
||||||
"fa": [
|
"fa": [
|
||||||
6
|
6
|
||||||
],
|
],
|
||||||
|
@ -299,23 +267,22 @@
|
||||||
{
|
{
|
||||||
"y": -0.625,
|
"y": -0.625,
|
||||||
"x": 6.5,
|
"x": 6.5,
|
||||||
"c": "#93c9b7",
|
|
||||||
"t": "#000000",
|
|
||||||
"a": 7,
|
"a": 7,
|
||||||
|
"f": 9,
|
||||||
"h": 1.5
|
"h": 1.5
|
||||||
},
|
},
|
||||||
"(",
|
"<i class='fa fa-columns'></i>",
|
||||||
{
|
{
|
||||||
"x": 4.5,
|
"x": 4.5,
|
||||||
"h": 1.5
|
"h": 1.5
|
||||||
},
|
},
|
||||||
")"
|
"<i class='fa fa-table'></i>"
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"y": -0.75,
|
"y": -0.75,
|
||||||
"x": 3.5,
|
"x": 3.5,
|
||||||
"c": "#a7d0db",
|
"f": 3,
|
||||||
"a": 6
|
"a": 6
|
||||||
},
|
},
|
||||||
"J",
|
"J",
|
||||||
|
@ -327,15 +294,11 @@
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"y": -0.875,
|
"y": -0.875,
|
||||||
"x": 2.5,
|
"x": 2.5
|
||||||
"c": "#bfbad1",
|
|
||||||
"t": "#0d0d0b"
|
|
||||||
},
|
},
|
||||||
"Q",
|
"Q",
|
||||||
{
|
{
|
||||||
"x": 1,
|
"x": 1
|
||||||
"c": "#7adabd",
|
|
||||||
"t": "#000000"
|
|
||||||
},
|
},
|
||||||
"K",
|
"K",
|
||||||
{
|
{
|
||||||
|
@ -343,18 +306,14 @@
|
||||||
},
|
},
|
||||||
"M",
|
"M",
|
||||||
{
|
{
|
||||||
"x": 1,
|
"x": 1
|
||||||
"c": "#bfbad1",
|
|
||||||
"t": "#0d0d0b"
|
|
||||||
},
|
},
|
||||||
"V"
|
"V"
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"y": -0.875,
|
"y": -0.875,
|
||||||
"x": 5.5,
|
"x": 5.5
|
||||||
"c": "#7adabd",
|
|
||||||
"t": "#000000"
|
|
||||||
},
|
},
|
||||||
"X",
|
"X",
|
||||||
{
|
{
|
||||||
|
@ -365,14 +324,11 @@
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"y": -0.875,
|
"y": -0.875,
|
||||||
"c": "#ffb07b",
|
|
||||||
"f": 9,
|
"f": 9,
|
||||||
"w": 1.5
|
"w": 1.5
|
||||||
},
|
},
|
||||||
"\n\n<i class='kb kb-Multimedia-Play-Pause'></i>",
|
"\n\n<i class='kb kb-Multimedia-Play-Pause'></i>",
|
||||||
{
|
{
|
||||||
"c": "#ffb2d2",
|
|
||||||
"t": "#0d0d0b",
|
|
||||||
"a": 4,
|
"a": 4,
|
||||||
"f": 3
|
"f": 3
|
||||||
},
|
},
|
||||||
|
@ -383,8 +339,6 @@
|
||||||
},
|
},
|
||||||
"Z",
|
"Z",
|
||||||
{
|
{
|
||||||
"c": "#ffb07b",
|
|
||||||
"t": "#000000",
|
|
||||||
"f": 9,
|
"f": 9,
|
||||||
"w": 1.5
|
"w": 1.5
|
||||||
},
|
},
|
||||||
|
@ -394,7 +348,6 @@
|
||||||
{
|
{
|
||||||
"y": -0.375,
|
"y": -0.375,
|
||||||
"x": 3.5,
|
"x": 3.5,
|
||||||
"c": "#d9dae0",
|
|
||||||
"g": true,
|
"g": true,
|
||||||
"a": 7,
|
"a": 7,
|
||||||
"f": 3
|
"f": 3
|
||||||
|
@ -413,7 +366,6 @@
|
||||||
"",
|
"",
|
||||||
{
|
{
|
||||||
"x": 1,
|
"x": 1,
|
||||||
"c": "#d4872a",
|
|
||||||
"g": false,
|
"g": false,
|
||||||
"a": 5
|
"a": 5
|
||||||
},
|
},
|
||||||
|
@ -424,7 +376,6 @@
|
||||||
"_\n-",
|
"_\n-",
|
||||||
{
|
{
|
||||||
"x": 1,
|
"x": 1,
|
||||||
"c": "#d9dae0",
|
|
||||||
"g": true,
|
"g": true,
|
||||||
"a": 7
|
"a": 7
|
||||||
},
|
},
|
||||||
|
@ -452,7 +403,6 @@
|
||||||
"ry": 4.25,
|
"ry": 4.25,
|
||||||
"y": -1,
|
"y": -1,
|
||||||
"x": 1,
|
"x": 1,
|
||||||
"c": "#f9cd31",
|
|
||||||
"g": false
|
"g": false
|
||||||
},
|
},
|
||||||
"Alt",
|
"Alt",
|
||||||
|
@ -469,7 +419,6 @@
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"c": "#d4872a",
|
|
||||||
"a": 7,
|
"a": 7,
|
||||||
"f": 9,
|
"f": 9,
|
||||||
"h": 2
|
"h": 2
|
||||||
|
@ -480,15 +429,13 @@
|
||||||
},
|
},
|
||||||
"<i class='fa fa-angle-double-up'></i>",
|
"<i class='fa fa-angle-double-up'></i>",
|
||||||
{
|
{
|
||||||
"c": "#f9cd31",
|
|
||||||
"f": 3
|
"f": 3
|
||||||
},
|
},
|
||||||
"Ctrl"
|
"Ctrl"
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"x": 2,
|
"x": 2
|
||||||
"c": "#e26757"
|
|
||||||
},
|
},
|
||||||
"ESC"
|
"ESC"
|
||||||
],
|
],
|
||||||
|
@ -498,12 +445,11 @@
|
||||||
"rx": 13,
|
"rx": 13,
|
||||||
"y": -1,
|
"y": -1,
|
||||||
"x": -3,
|
"x": -3,
|
||||||
"c": "#f9cd31",
|
|
||||||
"f": 2
|
"f": 2
|
||||||
},
|
},
|
||||||
"MEDIA",
|
"MEDIA",
|
||||||
{},
|
{},
|
||||||
"1HAND"
|
"DEL"
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
|
@ -511,7 +457,6 @@
|
||||||
},
|
},
|
||||||
"LEAD",
|
"LEAD",
|
||||||
{
|
{
|
||||||
"c": "#d4872a",
|
|
||||||
"f": 9,
|
"f": 9,
|
||||||
"h": 2
|
"h": 2
|
||||||
},
|
},
|
||||||
|
@ -525,7 +470,6 @@
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"x": -3,
|
"x": -3,
|
||||||
"c": "#f9cd31",
|
|
||||||
"f": 2
|
"f": 2
|
||||||
},
|
},
|
||||||
"HUN"
|
"HUN"
|
61
keyboards/ergodox/keymaps/algernon/tools/hid-commands
Executable file
|
@ -0,0 +1,61 @@
|
||||||
|
#!/bin/bash
|
||||||
|
set -e
|
||||||
|
|
||||||
|
cmd_wm () {
|
||||||
|
WIN="$(xdotool getactivewindow)"
|
||||||
|
wmctrl -i -r ${WIN} -b remove,maximized_vert,maximized_horz
|
||||||
|
xdotool windowsize ${WIN} 100% 100%
|
||||||
|
wmctrl -i -r ${WIN} -b add,maximized_vert,maximized_horz
|
||||||
|
}
|
||||||
|
|
||||||
|
_cmd_appsel () {
|
||||||
|
wmctrl -x -a $1 || true
|
||||||
|
xdotool key Escape
|
||||||
|
}
|
||||||
|
|
||||||
|
cmd_appsel_music () {
|
||||||
|
wmctrl -x -a rhythmbox || wmctrl -x -a spotify || true
|
||||||
|
xdotool key Escape
|
||||||
|
}
|
||||||
|
|
||||||
|
cmd_appsel_slack () {
|
||||||
|
_cmd_appsel slack
|
||||||
|
}
|
||||||
|
|
||||||
|
cmd_appsel_emacs () {
|
||||||
|
_cmd_appsel emacs24
|
||||||
|
}
|
||||||
|
|
||||||
|
cmd_appsel_term () {
|
||||||
|
_cmd_appsel gnome-terminal
|
||||||
|
}
|
||||||
|
|
||||||
|
cmd_appsel_chrome () {
|
||||||
|
_cmd_appsel chromium
|
||||||
|
}
|
||||||
|
|
||||||
|
cmd_help () {
|
||||||
|
cat <<EOF
|
||||||
|
Use the source, Luke!
|
||||||
|
EOF
|
||||||
|
}
|
||||||
|
|
||||||
|
while read l; do
|
||||||
|
case "$l" in
|
||||||
|
"CMD:"*)
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
continue
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
cmd="$(echo $l | cut -d: -f2-)"
|
||||||
|
|
||||||
|
echo "Got command: ${cmd}"
|
||||||
|
|
||||||
|
if type cmd_${cmd} >/dev/null 2>&1; then
|
||||||
|
cmd_${cmd}
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
|
12
keyboards/ergodox/keymaps/algernon/tools/layer-notify
Executable file
|
@ -0,0 +1,12 @@
|
||||||
|
#!/bin/sh
|
||||||
|
HL="${HID_LISTEN:-$HOME/src/ext/hid_listen/hid_listen}"
|
||||||
|
|
||||||
|
sudo "${HL}" | grep --line-buffered LAYER: | \
|
||||||
|
(while read line; do
|
||||||
|
case $line in
|
||||||
|
LAYER:*)
|
||||||
|
layer="$(echo $(echo $line | cut -d: -f2-))"
|
||||||
|
notify-send -i mark-location-symbolic "Switched to layer: $layer"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done)
|
|
@ -1,145 +1,339 @@
|
||||||
#! /usr/bin/env python
|
#! /usr/bin/env python3
|
||||||
import json
|
import json
|
||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
import re
|
import re
|
||||||
|
import argparse
|
||||||
|
import time
|
||||||
|
|
||||||
from math import floor
|
from math import floor
|
||||||
|
from os.path import dirname
|
||||||
|
from subprocess import Popen, PIPE, STDOUT
|
||||||
|
from blessings import Terminal
|
||||||
|
|
||||||
cr_coord_map = [
|
class Heatmap(object):
|
||||||
[
|
coords = [
|
||||||
# Row 0
|
[
|
||||||
[ 4, 0], [ 4, 2], [ 2, 0], [ 1, 0], [ 2, 2], [ 3, 0], [ 3, 2],
|
# Row 0
|
||||||
[ 3, 4], [ 3, 6], [ 2, 4], [ 1, 2], [ 2, 6], [ 4, 4], [ 4, 6],
|
[ 4, 0], [ 4, 2], [ 2, 0], [ 1, 0], [ 2, 2], [ 3, 0], [ 3, 2],
|
||||||
],
|
[ 3, 4], [ 3, 6], [ 2, 4], [ 1, 2], [ 2, 6], [ 4, 4], [ 4, 6],
|
||||||
[
|
],
|
||||||
# Row 1
|
[
|
||||||
[ 8, 0], [ 8, 2], [ 6, 0], [ 5, 0], [ 6, 2], [ 7, 0], [ 7, 2],
|
# Row 1
|
||||||
[ 7, 4], [ 7, 6], [ 6, 4], [ 5, 2], [ 6, 6], [ 8, 4], [ 8, 6],
|
[ 8, 0], [ 8, 2], [ 6, 0], [ 5, 0], [ 6, 2], [ 7, 0], [ 7, 2],
|
||||||
],
|
[ 7, 4], [ 7, 6], [ 6, 4], [ 5, 2], [ 6, 6], [ 8, 4], [ 8, 6],
|
||||||
[
|
],
|
||||||
# Row 2
|
[
|
||||||
[12, 0], [12, 2], [10, 0], [ 9, 0], [10, 2], [11, 0], [ ],
|
# Row 2
|
||||||
[ ], [11, 2], [10, 4], [ 9, 2], [10, 6], [12, 4], [12, 6],
|
[12, 0], [12, 2], [10, 0], [ 9, 0], [10, 2], [11, 0], [ ],
|
||||||
],
|
[ ], [11, 2], [10, 4], [ 9, 2], [10, 6], [12, 4], [12, 6],
|
||||||
[
|
],
|
||||||
# Row 3
|
[
|
||||||
[17, 0], [17, 2], [15, 0], [14, 0], [15, 2], [16, 0], [13, 0],
|
# Row 3
|
||||||
[13, 2], [16, 2], [15, 4], [14, 2], [15, 6], [17, 4], [17, 6],
|
[17, 0], [17, 2], [15, 0], [14, 0], [15, 2], [16, 0], [13, 0],
|
||||||
],
|
[13, 2], [16, 2], [15, 4], [14, 2], [15, 6], [17, 4], [17, 6],
|
||||||
[
|
],
|
||||||
# Row 4
|
[
|
||||||
[20, 0], [20, 2], [19, 0], [18, 0], [19, 2], [], [], [], [],
|
# Row 4
|
||||||
[19, 4], [18, 2], [19, 6], [20, 4], [20, 6],
|
[20, 0], [20, 2], [19, 0], [18, 0], [19, 2], [], [], [], [],
|
||||||
],
|
[19, 4], [18, 2], [19, 6], [20, 4], [20, 6], [], [], [], []
|
||||||
[
|
],
|
||||||
# Row 5
|
[
|
||||||
[ ], [23, 0], [22, 2], [22, 0], [22, 4], [21, 0], [21, 2],
|
# Row 5
|
||||||
[24, 0], [24, 2], [25, 0], [25, 4], [25, 2], [26, 0], [ ],
|
[ ], [23, 0], [22, 2], [22, 0], [22, 4], [21, 0], [21, 2],
|
||||||
],
|
[24, 0], [24, 2], [25, 0], [25, 4], [25, 2], [26, 0], [ ],
|
||||||
]
|
],
|
||||||
|
]
|
||||||
|
|
||||||
def set_attr_at(j, b, n, attr, fn, val):
|
def set_attr_at(self, block, n, attr, fn, val):
|
||||||
blk = j[b][n]
|
blk = self.heatmap[block][n]
|
||||||
if attr in blk:
|
if attr in blk:
|
||||||
blk[attr] = fn(blk[attr], val)
|
blk[attr] = fn(blk[attr], val)
|
||||||
else:
|
|
||||||
blk[attr] = fn(None, val)
|
|
||||||
|
|
||||||
def coord(col, row):
|
|
||||||
return cr_coord_map[row][col]
|
|
||||||
|
|
||||||
def set_attr(orig, new):
|
|
||||||
return new
|
|
||||||
|
|
||||||
def set_bg(j, (b, n), color):
|
|
||||||
set_attr_at(j, b, n, "c", set_attr, color)
|
|
||||||
#set_attr_at(j, b, n, "g", set_attr, False)
|
|
||||||
|
|
||||||
def _set_tap_info(o, count, cap):
|
|
||||||
ns = 4 - o.count ("\n")
|
|
||||||
return o + "\n" * ns + "%.02f%%" % (float(count) / float(cap) * 100)
|
|
||||||
|
|
||||||
def set_tap_info(j, (b, n), count, cap):
|
|
||||||
j[b][n + 1] = _set_tap_info (j[b][n + 1], count, cap)
|
|
||||||
|
|
||||||
def heatmap_color (v):
|
|
||||||
colors = [ [0.3, 0.3, 1], [0.3, 1, 0.3], [1, 1, 0.3], [1, 0.3, 0.3]]
|
|
||||||
fb = 0
|
|
||||||
if v <= 0:
|
|
||||||
idx1, idx2 = 0, 0
|
|
||||||
elif v >= 1:
|
|
||||||
idx1, idx2 = len(colors) - 1, len(colors) - 1
|
|
||||||
else:
|
|
||||||
val = v * (len(colors) - 1)
|
|
||||||
idx1 = int(floor(val))
|
|
||||||
idx2 = idx1 + 1
|
|
||||||
fb = val - float(idx1)
|
|
||||||
|
|
||||||
r = (colors[idx2][0] - colors[idx1][0]) * fb + colors[idx1][0]
|
|
||||||
g = (colors[idx2][1] - colors[idx1][1]) * fb + colors[idx1][1]
|
|
||||||
b = (colors[idx2][2] - colors[idx1][2]) * fb + colors[idx1][2]
|
|
||||||
|
|
||||||
r, g, b = [x * 255 for x in r, g, b]
|
|
||||||
return "#%02x%02x%02x" % (r, g, b)
|
|
||||||
|
|
||||||
# Load the keylog
|
|
||||||
def load_keylog(fname, restrict_row):
|
|
||||||
keylog = {}
|
|
||||||
total = 0
|
|
||||||
with open(fname, "r") as f:
|
|
||||||
lines = f.readlines()
|
|
||||||
for line in lines:
|
|
||||||
m = re.search ('KL: col=(\d+), row=(\d+)', line)
|
|
||||||
if not m:
|
|
||||||
continue
|
|
||||||
(c, r) = (int(m.group (2)), int(m.group (1)))
|
|
||||||
if restrict_row != None and r != int(restrict_row):
|
|
||||||
continue
|
|
||||||
if (c, r) in keylog:
|
|
||||||
keylog[(c, r)] = keylog[(c, r)] + 1
|
|
||||||
else:
|
else:
|
||||||
keylog[(c, r)] = 1
|
blk[attr] = fn(None, val)
|
||||||
total = total + 1
|
|
||||||
return total / 2, keylog
|
|
||||||
|
|
||||||
def l_flat(s):
|
def coord(self, col, row):
|
||||||
f = s.split("\n")
|
return self.coords[row][col]
|
||||||
return ", ".join (f)
|
|
||||||
|
|
||||||
def main(base_fn, log_fn, restrict_row = None):
|
@staticmethod
|
||||||
|
def set_attr(orig, new):
|
||||||
|
return new
|
||||||
|
|
||||||
with open(base_fn, "r") as f:
|
def set_bg(self, coords, color):
|
||||||
layout = json.load (f)
|
(block, n) = coords
|
||||||
|
self.set_attr_at(block, n, "c", self.set_attr, color)
|
||||||
|
#self.set_attr_at(block, n, "g", self.set_attr, False)
|
||||||
|
|
||||||
## Reset colors
|
def set_tap_info(self, coords, count, cap):
|
||||||
for row in cr_coord_map:
|
(block, n) = coords
|
||||||
for col in row:
|
def _set_tap_info(o, _count, _cap):
|
||||||
if col != []:
|
ns = 4 - o.count ("\n")
|
||||||
set_bg (layout, col, "#d9dae0")
|
return o + "\n" * ns + "%.02f%%" % (float(_count) / float(_cap) * 100)
|
||||||
#set_attr_at (layout, col[0], col[1], "g", set_attr, True)
|
|
||||||
|
|
||||||
total, log = load_keylog (log_fn, restrict_row)
|
if not cap:
|
||||||
max_cnt = 0
|
cap = 1
|
||||||
for (c, r) in log:
|
self.heatmap[block][n + 1] = _set_tap_info (self.heatmap[block][n + 1], count, cap)
|
||||||
max_cnt = max(max_cnt, log[(c, r)])
|
|
||||||
|
|
||||||
# Create the heatmap
|
@staticmethod
|
||||||
for (c, r) in log:
|
def heatmap_color (v):
|
||||||
coords = coord(c, r)
|
colors = [ [0.3, 0.3, 1], [0.3, 1, 0.3], [1, 1, 0.3], [1, 0.3, 0.3]]
|
||||||
b, n = coords
|
fb = 0
|
||||||
cap = max_cnt
|
if v <= 0:
|
||||||
v = float(log[(c, r)]) / cap
|
idx1, idx2 = 0, 0
|
||||||
print >> sys.stderr, "%s => %d/%d => %f = %s" % (l_flat(layout[b][n+1]), log[(c,r)], cap, v, heatmap_color(v))
|
elif v >= 1:
|
||||||
set_bg (layout, coord(c, r), heatmap_color (v))
|
idx1, idx2 = len(colors) - 1, len(colors) - 1
|
||||||
set_tap_info (layout, coord (c, r), log[(c, r)], total)
|
else:
|
||||||
|
val = v * (len(colors) - 1)
|
||||||
|
idx1 = int(floor(val))
|
||||||
|
idx2 = idx1 + 1
|
||||||
|
fb = val - float(idx1)
|
||||||
|
|
||||||
print json.dumps(layout)
|
r = (colors[idx2][0] - colors[idx1][0]) * fb + colors[idx1][0]
|
||||||
|
g = (colors[idx2][1] - colors[idx1][1]) * fb + colors[idx1][1]
|
||||||
|
b = (colors[idx2][2] - colors[idx1][2]) * fb + colors[idx1][2]
|
||||||
|
|
||||||
|
r, g, b = [x * 255 for x in (r, g, b)]
|
||||||
|
return "#%02x%02x%02x" % (int(r), int(g), int(b))
|
||||||
|
|
||||||
|
def __init__(self, layout):
|
||||||
|
self.log = {}
|
||||||
|
self.total = 0
|
||||||
|
self.max_cnt = 0
|
||||||
|
self.layout = layout
|
||||||
|
|
||||||
|
def update_log(self, coords):
|
||||||
|
(c, r) = coords
|
||||||
|
if not (c, r) in self.log:
|
||||||
|
self.log[(c, r)] = 0
|
||||||
|
self.log[(c, r)] = self.log[(c, r)] + 1
|
||||||
|
self.total = self.total + 1
|
||||||
|
if self.max_cnt < self.log[(c, r)]:
|
||||||
|
self.max_cnt = self.log[(c, r)]
|
||||||
|
|
||||||
|
def get_heatmap(self):
|
||||||
|
with open("%s/heatmap-layout.%s.json" % (dirname(sys.argv[0]), self.layout), "r") as f:
|
||||||
|
self.heatmap = json.load (f)
|
||||||
|
|
||||||
|
## Reset colors
|
||||||
|
for row in self.coords:
|
||||||
|
for coord in row:
|
||||||
|
if coord != []:
|
||||||
|
self.set_bg (coord, "#d9dae0")
|
||||||
|
|
||||||
|
for (c, r) in self.log:
|
||||||
|
coords = self.coord(c, r)
|
||||||
|
b, n = coords
|
||||||
|
cap = self.max_cnt
|
||||||
|
if cap == 0:
|
||||||
|
cap = 1
|
||||||
|
v = float(self.log[(c, r)]) / cap
|
||||||
|
self.set_bg (coords, self.heatmap_color (v))
|
||||||
|
self.set_tap_info (coords, self.log[(c, r)], self.total)
|
||||||
|
return self.heatmap
|
||||||
|
|
||||||
|
def get_stats(self):
|
||||||
|
usage = [
|
||||||
|
# left hand
|
||||||
|
[0, 0, 0, 0, 0],
|
||||||
|
# right hand
|
||||||
|
[0, 0, 0, 0, 0]
|
||||||
|
]
|
||||||
|
finger_map = [0, 0, 1, 2, 3, 3, 3, 1, 1, 1, 2, 3, 4, 4]
|
||||||
|
for (c, r) in self.log:
|
||||||
|
if r == 5: # thumb cluster
|
||||||
|
if c <= 6: # left side
|
||||||
|
usage[0][4] = usage[0][4] + self.log[(c, r)]
|
||||||
|
else:
|
||||||
|
usage[1][0] = usage[1][0] + self.log[(c, r)]
|
||||||
|
else:
|
||||||
|
fc = c
|
||||||
|
hand = 0
|
||||||
|
if fc >= 7:
|
||||||
|
hand = 1
|
||||||
|
fm = finger_map[fc]
|
||||||
|
usage[hand][fm] = usage[hand][fm] + self.log[(c, r)]
|
||||||
|
hand_usage = [0, 0]
|
||||||
|
for f in usage[0]:
|
||||||
|
hand_usage[0] = hand_usage[0] + f
|
||||||
|
for f in usage[1]:
|
||||||
|
hand_usage[1] = hand_usage[1] + f
|
||||||
|
|
||||||
|
total = self.total
|
||||||
|
if total == 0:
|
||||||
|
total = 1
|
||||||
|
stats = {
|
||||||
|
"total-keys": total,
|
||||||
|
"hands": {
|
||||||
|
"left": {
|
||||||
|
"usage": round(float(hand_usage[0]) / total * 100, 2),
|
||||||
|
"fingers": {
|
||||||
|
"pinky": 0,
|
||||||
|
"ring": 0,
|
||||||
|
"middle": 0,
|
||||||
|
"index": 0,
|
||||||
|
"thumb": 0,
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"right": {
|
||||||
|
"usage": round(float(hand_usage[1]) / total * 100, 2),
|
||||||
|
"fingers": {
|
||||||
|
"thumb": 0,
|
||||||
|
"index": 0,
|
||||||
|
"middle": 0,
|
||||||
|
"ring": 0,
|
||||||
|
"pinky": 0,
|
||||||
|
}
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
hmap = ['left', 'right']
|
||||||
|
fmap = ['pinky', 'ring', 'middle', 'index', 'thumb',
|
||||||
|
'thumb', 'index', 'middle', 'ring', 'pinky']
|
||||||
|
for hand_idx in range(len(usage)):
|
||||||
|
hand = usage[hand_idx]
|
||||||
|
for finger_idx in range(len(hand)):
|
||||||
|
stats['hands'][hmap[hand_idx]]['fingers'][fmap[finger_idx + hand_idx * 5]] = round(float(hand[finger_idx]) / total * 100, 2)
|
||||||
|
return stats
|
||||||
|
|
||||||
|
def dump_all(out_dir, heatmaps):
|
||||||
|
stats = {}
|
||||||
|
t = Terminal()
|
||||||
|
t.clear()
|
||||||
|
sys.stdout.write("\x1b[2J\x1b[H")
|
||||||
|
|
||||||
|
print ('{t.underline}{outdir}{t.normal}\n'.format(t=t, outdir=out_dir))
|
||||||
|
|
||||||
|
keys = list(heatmaps.keys())
|
||||||
|
keys.sort()
|
||||||
|
|
||||||
|
for layer in keys:
|
||||||
|
if len(heatmaps[layer].log) == 0:
|
||||||
|
continue
|
||||||
|
|
||||||
|
with open ("%s/%s.json" % (out_dir, layer), "w") as f:
|
||||||
|
json.dump(heatmaps[layer].get_heatmap(), f)
|
||||||
|
stats[layer] = heatmaps[layer].get_stats()
|
||||||
|
|
||||||
|
left = stats[layer]['hands']['left']
|
||||||
|
right = stats[layer]['hands']['right']
|
||||||
|
|
||||||
|
print ('{t.bold}{layer}{t.normal} ({total:,} taps):'.format(t=t, layer=layer,
|
||||||
|
total=int(stats[layer]['total-keys'] / 2)))
|
||||||
|
print (('{t.underline} | ' + \
|
||||||
|
'left ({l[usage]:6.2f}%) | ' + \
|
||||||
|
'right ({r[usage]:6.2f}%) |{t.normal}').format(t=t, l=left, r=right))
|
||||||
|
print ((' {t.bright_magenta}pinky{t.white} | {left[pinky]:6.2f}% | {right[pinky]:6.2f}% |\n' + \
|
||||||
|
' {t.bright_cyan}ring{t.white} | {left[ring]:6.2f}% | {right[ring]:6.2f}% |\n' + \
|
||||||
|
' {t.bright_blue}middle{t.white} | {left[middle]:6.2f}% | {right[middle]:6.2f}% |\n' + \
|
||||||
|
' {t.bright_green}index{t.white} | {left[index]:6.2f}% | {right[index]:6.2f}% |\n' + \
|
||||||
|
' {t.bright_red}thumb{t.white} | {left[thumb]:6.2f}% | {right[thumb]:6.2f}% |\n' + \
|
||||||
|
'').format(left=left['fingers'], right=right['fingers'], t=t))
|
||||||
|
|
||||||
|
def process_line(line, heatmaps, opts, stamped_log = None):
|
||||||
|
m = re.search ('KL: col=(\d+), row=(\d+), pressed=(\d+), layer=(.*)', line)
|
||||||
|
if not m:
|
||||||
|
return False
|
||||||
|
if stamped_log is not None:
|
||||||
|
if line.startswith("KL:"):
|
||||||
|
print ("%10.10f %s" % (time.time(), line),
|
||||||
|
file = stamped_log, end = '')
|
||||||
|
else:
|
||||||
|
print (line,
|
||||||
|
file = stamped_log, end = '')
|
||||||
|
stamped_log.flush()
|
||||||
|
|
||||||
|
(c, r, l) = (int(m.group (2)), int(m.group (1)), m.group (4))
|
||||||
|
if (c, r) not in opts.allowed_keys:
|
||||||
|
return False
|
||||||
|
|
||||||
|
heatmaps[l].update_log ((c, r))
|
||||||
|
|
||||||
|
return True
|
||||||
|
|
||||||
|
def setup_allowed_keys(opts):
|
||||||
|
if len(opts.only_key):
|
||||||
|
incmap={}
|
||||||
|
for v in opts.only_key:
|
||||||
|
m = re.search ('(\d+),(\d+)', v)
|
||||||
|
if not m:
|
||||||
|
continue
|
||||||
|
(c, r) = (int(m.group(1)), int(m.group(2)))
|
||||||
|
incmap[(c, r)] = True
|
||||||
|
else:
|
||||||
|
incmap={}
|
||||||
|
for r in range(0, 6):
|
||||||
|
for c in range(0, 14):
|
||||||
|
incmap[(c, r)] = True
|
||||||
|
|
||||||
|
for v in opts.ignore_key:
|
||||||
|
m = re.search ('(\d+),(\d+)', v)
|
||||||
|
if not m:
|
||||||
|
continue
|
||||||
|
(c, r) = (int(m.group(1)), int(m.group(2)))
|
||||||
|
del(incmap[(c, r)])
|
||||||
|
|
||||||
|
return incmap
|
||||||
|
|
||||||
|
def main(opts):
|
||||||
|
heatmaps = {"Dvorak": Heatmap("Dvorak"),
|
||||||
|
"ADORE": Heatmap("ADORE")
|
||||||
|
}
|
||||||
|
cnt = 0
|
||||||
|
out_dir = opts.outdir
|
||||||
|
|
||||||
|
if not os.path.exists(out_dir):
|
||||||
|
os.makedirs(out_dir)
|
||||||
|
|
||||||
|
opts.allowed_keys = setup_allowed_keys(opts)
|
||||||
|
|
||||||
|
if not opts.one_shot:
|
||||||
|
|
||||||
|
try:
|
||||||
|
with open("%s/stamped-log" % out_dir, "r") as f:
|
||||||
|
while True:
|
||||||
|
line = f.readline()
|
||||||
|
if not line:
|
||||||
|
break
|
||||||
|
if not process_line(line, heatmaps, opts):
|
||||||
|
continue
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
|
||||||
|
stamped_log = open ("%s/stamped-log" % (out_dir), "a+")
|
||||||
|
else:
|
||||||
|
stamped_log = None
|
||||||
|
|
||||||
|
while True:
|
||||||
|
line = sys.stdin.readline()
|
||||||
|
if not line:
|
||||||
|
break
|
||||||
|
if not process_line(line, heatmaps, opts, stamped_log):
|
||||||
|
continue
|
||||||
|
|
||||||
|
cnt = cnt + 1
|
||||||
|
|
||||||
|
if opts.dump_interval != -1 and cnt >= opts.dump_interval and not opts.one_shot:
|
||||||
|
cnt = 0
|
||||||
|
dump_all(out_dir, heatmaps)
|
||||||
|
|
||||||
|
dump_all (out_dir, heatmaps)
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
if len(sys.argv) < 3:
|
parser = argparse.ArgumentParser (description = "keylog to heatmap processor")
|
||||||
print """Log to Heatmap -- creates a heatmap out of keyboard logs
|
parser.add_argument ('outdir', action = 'store',
|
||||||
|
help = 'Output directory')
|
||||||
Usage: log-to-heatmap.py base-layout.json logfile [row] >layout.json"""
|
parser.add_argument ('--dump-interval', dest = 'dump_interval', action = 'store', type = int,
|
||||||
sys.exit (1)
|
default = 100, help = 'Dump stats and heatmap at every Nth event, -1 for dumping at EOF only')
|
||||||
main(*sys.argv[1:])
|
parser.add_argument ('--ignore-key', dest = 'ignore_key', action = 'append', type = str,
|
||||||
|
default = [], help = 'Ignore the key at position (x, y)')
|
||||||
|
parser.add_argument ('--only-key', dest = 'only_key', action = 'append', type = str,
|
||||||
|
default = [], help = 'Only include key at position (x, y)')
|
||||||
|
parser.add_argument ('--one-shot', dest = 'one_shot', action = 'store_true',
|
||||||
|
help = 'Do not load previous data, and do not update it, either.')
|
||||||
|
args = parser.parse_args()
|
||||||
|
if len(args.ignore_key) and len(args.only_key):
|
||||||
|
print ("--ignore-key and --only-key are mutually exclusive, please only use one of them!",
|
||||||
|
file = sys.stderr)
|
||||||
|
sys.exit(1)
|
||||||
|
main(args)
|
||||||
|
|
|
@ -1,5 +0,0 @@
|
||||||
#! /bin/sh
|
|
||||||
WIN="$(xdotool getactivewindow)"
|
|
||||||
wmctrl -i -r ${WIN} -b remove,maximized_vert,maximized_horz
|
|
||||||
xdotool windowsize ${WIN} 100% 100%
|
|
||||||
wmctrl -i -r ${WIN} -b add,maximized_vert,maximized_horz
|
|
107
keyboards/ergodox/keymaps/algernon/tools/text-to-log.py
Executable file
|
@ -0,0 +1,107 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
|
||||||
|
charmap = {
|
||||||
|
'9': [[1, 0]],
|
||||||
|
'7': [[2, 0]], '@': [[2, 5], [2, 0]],
|
||||||
|
'5': [[3, 0]], '*': [[2, 5], [3, 0]],
|
||||||
|
'3': [[4, 0]], '^': [[2, 5], [4, 0]],
|
||||||
|
'1': [[5, 0]], '$': [[2, 5], [5, 0]],
|
||||||
|
'0': [[8, 0]], '%': [[2, 5], [8, 0]],
|
||||||
|
'2': [[9, 0]], '!': [[2, 5], [9, 0]],
|
||||||
|
'4': [[10, 0]], '#': [[2, 5], [10, 0]],
|
||||||
|
'6': [[11, 0]], '&': [[2, 5], [11, 0]],
|
||||||
|
'8': [[12, 0]],
|
||||||
|
|
||||||
|
'`': [[0, 1]], '~': [[2, 5], [0, 1]],
|
||||||
|
'y': [[1, 1]], 'Y': [[2, 5], [1, 1]],
|
||||||
|
'w': [[2, 1]], 'W': [[2, 5], [2, 1]],
|
||||||
|
'g': [[3, 1]], 'G': [[2, 5], [3, 1]],
|
||||||
|
'l': [[4, 1]], 'L': [[2, 5], [4, 1]],
|
||||||
|
'm': [[5, 1]], 'M': [[2, 5], [5, 1]],
|
||||||
|
'[': [[6, 1]], '{': [[2, 5], [6, 1]], '(': [[6, 1], [6, 1]],
|
||||||
|
']': [[7, 1]], '}': [[2, 5], [7, 1]], ')': [[7, 1], [7, 1]],
|
||||||
|
'f': [[8, 1]], 'F': [[2, 5], [8, 1]],
|
||||||
|
'h': [[9, 1]], 'H': [[2, 5], [9, 1]],
|
||||||
|
'c': [[10, 1]], 'C': [[2, 5], [10, 1]],
|
||||||
|
'p': [[11, 1]], 'P': [[2, 5], [11, 1]],
|
||||||
|
'x': [[12, 1]], 'X': [[2, 5], [12, 1]],
|
||||||
|
'\\': [[13, 1]], '|': [[2, 5], [13, 1]],
|
||||||
|
|
||||||
|
'\t': [[0, 2]],
|
||||||
|
'a': [[1, 2]], 'A': [[2, 5], [1, 2]],
|
||||||
|
'o': [[2, 2]], 'O': [[2, 5], [2, 2]],
|
||||||
|
'e': [[3, 2]], 'E': [[2, 5], [3, 2]],
|
||||||
|
'i': [[4, 2]], 'I': [[2, 5], [4, 2]],
|
||||||
|
'u': [[5, 2]], 'U': [[2, 5], [5, 2]],
|
||||||
|
'd': [[8, 2]], 'D': [[2, 5], [8, 2]],
|
||||||
|
'r': [[9, 2]], 'R': [[2, 5], [9, 2]],
|
||||||
|
't': [[10, 2]], 'T': [[2, 5], [10, 2]],
|
||||||
|
'n': [[11, 2]], 'N': [[2, 5], [11, 2]],
|
||||||
|
's': [[12, 2]], 'S': [[2, 5], [12, 2]],
|
||||||
|
'=': [[13, 2]], '+': [[2, 5], [13, 2]],
|
||||||
|
|
||||||
|
'z': [[1, 3]], 'Z': [[2, 5], [1, 3]],
|
||||||
|
'q': [[2, 3]], 'Q': [[2, 5], [2, 3]],
|
||||||
|
'\'': [[3, 3]], '"': [[2, 5], [3, 3]],
|
||||||
|
',': [[4, 3]], '<': [[2, 5], [4, 3]],
|
||||||
|
'.': [[5, 3]], '>': [[2, 5], [5, 3]],
|
||||||
|
'b': [[8, 3]], 'B': [[2, 5], [8, 3]],
|
||||||
|
'k': [[9, 3]], 'K': [[2, 5], [9, 3]],
|
||||||
|
'v': [[10, 3]], 'V': [[2, 5], [10, 3]],
|
||||||
|
'j': [[11, 3]], 'J': [[2, 5], [11, 3]],
|
||||||
|
'/': [[12, 3]], '?': [[2, 5], [12, 3]],
|
||||||
|
|
||||||
|
':': [[4, 4]], ';': [[4, 4], [4, 4]],
|
||||||
|
'-': [[9, 4]], '_': [[2, 5], [9, 4]],
|
||||||
|
|
||||||
|
' ': [[10, 5]],
|
||||||
|
'\n': [[11, 5]],
|
||||||
|
|
||||||
|
## Layered things
|
||||||
|
# Hungarian
|
||||||
|
'á': [[9, 5], [1, 2]], 'Á': [[2, 5], [9, 5], [1, 2]],
|
||||||
|
'ó': [[9, 5], [2, 2]], 'Ó': [[2, 5], [9, 5], [2, 2]],
|
||||||
|
'ő': [[9, 5], [2, 1]], 'Ő': [[2, 5], [9, 5], [2, 1]],
|
||||||
|
'ö': [[9, 5], [2, 3]], 'Ö': [[2, 5], [9, 5], [2, 3]],
|
||||||
|
'é': [[9, 5], [3, 2]], 'É': [[2, 5], [9, 5], [3, 2]],
|
||||||
|
'ú': [[9, 5], [4, 2]], 'Ú': [[2, 5], [9, 5], [4, 2]],
|
||||||
|
'ű': [[9, 5], [4, 1]], 'Ű': [[2, 5], [9, 5], [4, 1]],
|
||||||
|
'ü': [[9, 5], [4, 3]], 'Ü': [[2, 5], [9, 5], [4, 3]],
|
||||||
|
'í': [[9, 5], [5, 2]], 'Í': [[2, 5], [9, 5], [5, 2]],
|
||||||
|
}
|
||||||
|
|
||||||
|
def lookup_char(layer, ch):
|
||||||
|
if ch in charmap:
|
||||||
|
return charmap[ch]
|
||||||
|
return None
|
||||||
|
|
||||||
|
def process_char(layer, ch, out=sys.stdout):
|
||||||
|
keys = lookup_char(layer, ch)
|
||||||
|
if not keys:
|
||||||
|
print ("Unknown char: %s" % ch, file=sys.stderr)
|
||||||
|
else:
|
||||||
|
for (c, r) in keys:
|
||||||
|
print ("KL: col=%d, row=%d, pressed=1, layer=%s" % (r, c, layer), file=out)
|
||||||
|
print ("KL: col=%d, row=%d, pressed=0, layer=%s" % (r, c, layer), file=out)
|
||||||
|
|
||||||
|
def process_file(fn, layer, out=sys.stdout):
|
||||||
|
with open(fn, "r") as f:
|
||||||
|
ch = f.read(1)
|
||||||
|
while ch:
|
||||||
|
process_char(layer, ch, out)
|
||||||
|
ch = f.read(1)
|
||||||
|
|
||||||
|
if sys.argv[1] == '-':
|
||||||
|
out='/dev/stdin'
|
||||||
|
else:
|
||||||
|
out=sys.argv[1]
|
||||||
|
|
||||||
|
if len(sys.argv) >= 2:
|
||||||
|
layer = 'ADORE'
|
||||||
|
else:
|
||||||
|
layer = sys.argv[2]
|
||||||
|
|
||||||
|
process_file(out, layer = layer)
|
527
keyboards/ergodox/keymaps/bepo_csa/keymap.c
Normal file
|
@ -0,0 +1,527 @@
|
||||||
|
/* TypeMatrix-2030-like keymap */
|
||||||
|
#include "ergodox.h"
|
||||||
|
#include "debug.h"
|
||||||
|
#include "action_layer.h"
|
||||||
|
#include "action_util.h"
|
||||||
|
#include "led.h"
|
||||||
|
#include "keymap_extras/keymap_bepo.h"
|
||||||
|
#include "keymap_extras/keymap_canadian_multilingual.h"
|
||||||
|
|
||||||
|
enum layers {
|
||||||
|
LR_BASE, // default layer
|
||||||
|
LR_CSA, // BÉPO over Canadian Multilingual (CSA)
|
||||||
|
LR_CSA_SFT, // shifted BÉPO over CSA
|
||||||
|
LR_CSA_AGR, // altgr-ed BÉPO over CSA
|
||||||
|
LR_CSA_AGR_SFT, // altgr-shifted BÉPO over CSA
|
||||||
|
LR_NUMR, // numeric layer
|
||||||
|
LR_FN, // fn layer
|
||||||
|
};
|
||||||
|
|
||||||
|
#define IS_CA_MULT_ENABLED() (layer_state & (1 << LR_CSA))
|
||||||
|
|
||||||
|
enum macros {
|
||||||
|
// Characters that do not exist in CSA and must be implemented based on unicode support
|
||||||
|
// Note: these are intentionally declared first to be used as indexes in spec_chars below
|
||||||
|
UC_NDSH, // –
|
||||||
|
UC_MDSH, // —
|
||||||
|
UC_ELPS, // …
|
||||||
|
END_UC, // indicates the last unicode character macro
|
||||||
|
// other macros
|
||||||
|
M_CSA_SFT, // toggle shift on CSA
|
||||||
|
M_CSA_AGR_SFT, // toggle shift on LR_CSA_AGR (goes to LR_CSA_AGR_SFT)
|
||||||
|
M_CSA_SFT_AGR, // toggle AltGr on LR_CSA_SFT (goes to LR_CSA_AGR_SFT)
|
||||||
|
// macros for characters that need to be un-shifted in LR_CA_MULT_SHIFT
|
||||||
|
M_1,
|
||||||
|
M_2,
|
||||||
|
M_3,
|
||||||
|
M_4,
|
||||||
|
M_5,
|
||||||
|
M_6,
|
||||||
|
M_7,
|
||||||
|
M_8,
|
||||||
|
M_9,
|
||||||
|
M_0,
|
||||||
|
M_DEGR,
|
||||||
|
M_SCLN,
|
||||||
|
M_GRV,
|
||||||
|
M_NBSP,
|
||||||
|
// macros for characters that don't have a simple key combination in LR_CA_MULT_ALTGR
|
||||||
|
M_CRC,
|
||||||
|
// other layer macros
|
||||||
|
M_DBL0, // double 0
|
||||||
|
M_FNLR, // fn layer
|
||||||
|
M_NMAL, // num+alt
|
||||||
|
};
|
||||||
|
|
||||||
|
#define CSA(name) M(M_CSA_##name) // calls a CSA macro
|
||||||
|
|
||||||
|
const uint16_t unicode_chars[] = {
|
||||||
|
[UC_NDSH] = L'–',
|
||||||
|
[UC_MDSH] = L'—',
|
||||||
|
[UC_ELPS] = L'…',
|
||||||
|
};
|
||||||
|
|
||||||
|
/* shortcut for unicode character macros */
|
||||||
|
#define MUC(name) M(UC_##name) // calls a unicode macro
|
||||||
|
|
||||||
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
/* Basic layer
|
||||||
|
*
|
||||||
|
* ,--------------------------------------------------. ,--------------------------------------------------.
|
||||||
|
* | $ | " | « | » | ( | ) | Del | | Del | @ | + | - | / | * | W |
|
||||||
|
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
|
||||||
|
* | Tab | B | É | P | O | È |Backsp| |Backsp| ^ | V | D | L | J | Z |
|
||||||
|
* |--------+------+------+------+------+------|ace | |ace |------+------+------+------+------+--------|
|
||||||
|
* | = | A | U | I | E | , |------| |------| C | T | S | R | N | M |
|
||||||
|
* |--------+------+------+------+------+------|Enter | |Enter |------+------+------+------+------+--------|
|
||||||
|
* | LShift | À | Y | X | . | K | | | | ' | Q | G | H | F | RShift |
|
||||||
|
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
|
||||||
|
* |LCtrl | fn | LGui |numAlt| LAlt | |Alt Gr| % | App | Ç | RCtrl|
|
||||||
|
* `----------------------------------' `----------------------------------'
|
||||||
|
* ,--------------. ,-------------.
|
||||||
|
* | Esc | num | | Left |Right |
|
||||||
|
* ,------+-------+------| |------+------+------.
|
||||||
|
* | | | PgUp | | Up | | |
|
||||||
|
* |Space | Home |------| |------| End |Space |
|
||||||
|
* | | | PgDn | | Down | | |
|
||||||
|
* `---------------------' `--------------------'
|
||||||
|
*/
|
||||||
|
// If it accepts an argument (i.e, is a function), it doesn't need KC_.
|
||||||
|
// Otherwise, it needs KC_*
|
||||||
|
[LR_BASE] = KEYMAP( // layer 0 : default
|
||||||
|
// left hand
|
||||||
|
BP_DLR, KC_1, KC_2, KC_3, KC_4, KC_5, KC_DELT,
|
||||||
|
KC_TAB, BP_B, BP_ECUT, BP_P, BP_O, BP_EGRV, KC_BSPC,
|
||||||
|
BP_EQL, BP_A, BP_U, BP_I, BP_E, BP_COMM,
|
||||||
|
KC_LSFT, BP_AGRV, BP_Y, BP_X, BP_DOT, BP_K, KC_ENT,
|
||||||
|
KC_LCTL, M(M_FNLR), KC_LGUI, M(M_NMAL), KC_LALT,
|
||||||
|
|
||||||
|
KC_ESC, TG(LR_NUMR),
|
||||||
|
KC_PGUP,
|
||||||
|
KC_SPC, KC_HOME, KC_PGDN,
|
||||||
|
|
||||||
|
// right hand
|
||||||
|
KC_DELT, KC_6, KC_7, KC_8, KC_9, KC_0, BP_W,
|
||||||
|
KC_BSPC, BP_DCRC, BP_V, BP_D, BP_L, BP_J, BP_Z,
|
||||||
|
BP_C, BP_T, BP_S, BP_R, BP_N, BP_M,
|
||||||
|
KC_ENT, BP_APOS, BP_Q, BP_G, BP_H, BP_F, KC_RSFT,
|
||||||
|
BP_ALGR, BP_PERC, KC_APP, BP_CCED, KC_RCTL,
|
||||||
|
|
||||||
|
KC_LEFT, KC_RGHT,
|
||||||
|
KC_UP,
|
||||||
|
KC_DOWN, KC_END, KC_SPC
|
||||||
|
),
|
||||||
|
/**
|
||||||
|
* Same as default but for use with Canadian Multilingual on OS side
|
||||||
|
*/
|
||||||
|
[LR_CSA] = KEYMAP(
|
||||||
|
// left hand
|
||||||
|
KC_DLR, CSA_DQOT, CSA_LGIL, CSA_RGIL, KC_LPRN, KC_RPRN, KC_TRNS,
|
||||||
|
KC_TRNS, KC_B, CSA_ECUT, KC_P, KC_O, CSA_EGRV, KC_TRNS,
|
||||||
|
KC_EQL, KC_A, KC_U, KC_I, KC_E, KC_COMM,
|
||||||
|
CSA(SFT), CSA_AGRV, KC_Y, KC_X, KC_DOT, KC_K, 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_AT, KC_PLUS, KC_MINS, CSA_SLSH, KC_ASTR, KC_W,
|
||||||
|
KC_TRNS, CSA_DCRC, KC_V, KC_D, KC_L, KC_J, KC_Z,
|
||||||
|
KC_C, KC_T, KC_S, KC_R, KC_N, KC_M,
|
||||||
|
KC_TRNS, CSA_APOS, KC_Q, KC_G, KC_H, KC_F, CSA(SFT),
|
||||||
|
MO(LR_CSA_AGR), KC_PERC, KC_TRNS, CSA_CCED, KC_LCTL, // RCTL has a special behaviour in CSA so use LCTL
|
||||||
|
|
||||||
|
KC_TRNS, KC_TRNS,
|
||||||
|
KC_TRNS,
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS
|
||||||
|
),
|
||||||
|
/* Shifted BÉPO over Canadian Multilingual
|
||||||
|
*
|
||||||
|
* ,--------------------------------------------------. ,--------------------------------------------------.
|
||||||
|
* | # | 1 | 2 | 3 | 4 | 5 | | | | 6 | 7 | 8 | 9 | 0 | |
|
||||||
|
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
|
||||||
|
* | | | | | | | | | | ! | | | | | |
|
||||||
|
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||||
|
* | ° | | | | | ; |------| |------| | | | | | |
|
||||||
|
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||||
|
* | | | | | : | | | | | ? | | | | | |
|
||||||
|
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
|
||||||
|
* | | | | | | | | ` | | | |
|
||||||
|
* `----------------------------------' `-----------------------------------'
|
||||||
|
* ,-------------. ,-------------.
|
||||||
|
* | | | | | |
|
||||||
|
* ,------|------|------| |------+------+------.
|
||||||
|
* | | | | | | | |
|
||||||
|
* | | |------| |------| | |
|
||||||
|
* | | | | | | | |
|
||||||
|
* `--------------------' `--------------------'
|
||||||
|
*/
|
||||||
|
[LR_CSA_SFT] = KEYMAP(
|
||||||
|
// left hand
|
||||||
|
KC_HASH, M(M_1), M(M_2), M(M_3), M(M_4), M(M_5), KC_TRNS,
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||||
|
M(M_DEGR),KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, M(M_SCLN),
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_COLN, KC_TRNS, KC_TRNS,
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||||
|
|
||||||
|
KC_TRNS, KC_TRNS,
|
||||||
|
KC_TRNS,
|
||||||
|
M(M_NBSP), KC_TRNS, KC_TRNS,
|
||||||
|
|
||||||
|
// right hand
|
||||||
|
KC_TRNS, M(M_6), M(M_7), M(M_8), M(M_9), M(M_0), KC_TRNS,
|
||||||
|
KC_TRNS, KC_EXLM, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||||
|
KC_TRNS, CSA_QEST, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||||
|
CSA(SFT_AGR), M(M_GRV), KC_TRNS, KC_TRNS, KC_TRNS,
|
||||||
|
|
||||||
|
KC_TRNS, KC_TRNS,
|
||||||
|
KC_TRNS,
|
||||||
|
KC_TRNS, KC_TRNS, M(M_NBSP)
|
||||||
|
),
|
||||||
|
/* AltGr-ed BÉPO over Canadian Multilingual
|
||||||
|
* "////" indicates that the key is disabled (unsupported bépo character)
|
||||||
|
*
|
||||||
|
* ,--------------------------------------------------. ,--------------------------------------------------.
|
||||||
|
* | – | — | < | > | [ | ] | | | | ^ | ± | //// | ÷ | × | dead ˘ |
|
||||||
|
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
|
||||||
|
* | | | |dead '| & | œ |dead `| | | | ¡ |dead ˇ| ð | //// | ij | ////// |
|
||||||
|
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||||
|
* | ////// | æ | ù |dead "| € | ̛’ |------| |------| © | þ | ß | ® |dead ~| dead ¯ |
|
||||||
|
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||||
|
* | | \ | { | } | … | ~ | | | | ¿ |dead °| μ | //// |dead ˛| |
|
||||||
|
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
|
||||||
|
* | | | | | | | | //// | |dead ¸| |
|
||||||
|
* `----------------------------------' `-----------------------------------'
|
||||||
|
* ,-------------. ,-------------.
|
||||||
|
* | | | | | |
|
||||||
|
* ,------|------|------| |------+------+------.
|
||||||
|
* | | | | | | | |
|
||||||
|
* | _ | |------| |------| | _ |
|
||||||
|
* | | | | | | | |
|
||||||
|
* `--------------------' `--------------------'
|
||||||
|
*/
|
||||||
|
[LR_CSA_AGR] = KEYMAP(
|
||||||
|
// left hand
|
||||||
|
MUC(NDSH), MUC(MDSH), CSA_LESS, CSA_GRTR, CSA_LBRC, CSA_RBRC, KC_TRNS,
|
||||||
|
KC_TRNS, CSA_PIPE, CSA_DACT, KC_AMPR, CSA_OE, CSA_DGRV, KC_TRNS,
|
||||||
|
KC_NO, CSA_AE, CSA_UGRV, CSA_DTRM, CSA_EURO, CSA_RQOT,
|
||||||
|
CSA(AGR_SFT), CSA_BSLS, CSA_LCBR, CSA_RCBR, MUC(ELPS), CSA_TILD, KC_TRNS,
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||||
|
|
||||||
|
KC_TRNS, KC_TRNS,
|
||||||
|
KC_TRNS,
|
||||||
|
KC_UNDS, CSA(AGR_SFT), KC_TRNS,
|
||||||
|
|
||||||
|
// right hand
|
||||||
|
KC_TRNS, M(M_CRC), CSA_PSMS, KC_NO, CSA_DVSN, CSA_TIMS, CSA_DBRV,
|
||||||
|
KC_TRNS, CSA_IXLM, CSA_DCAR, CSA_ETH, KC_NO, CSA_IJ, KC_NO,
|
||||||
|
CSA_CPRT, CSA_THRN, CSA_SRPS, CSA_RTM, CSA_DTLD, CSA_DMCR,
|
||||||
|
KC_TRNS, CSA_IQST, CSA_DRNG, CSA_MU, KC_NO, CSA_DOGO, CSA(AGR_SFT),
|
||||||
|
KC_TRNS, KC_NO, KC_TRNS, CSA_DCED, KC_TRNS,
|
||||||
|
|
||||||
|
KC_TRNS, KC_TRNS,
|
||||||
|
KC_TRNS,
|
||||||
|
KC_TRNS, CSA(AGR_SFT), KC_UNDS
|
||||||
|
),
|
||||||
|
/* AltGr-shifted BÉPO over Canadian Multilingual
|
||||||
|
* "////" indicates that the key is disabled (unsupported bépo character or unused in bépo)
|
||||||
|
*
|
||||||
|
* ,--------------------------------------------------. ,--------------------------------------------------.
|
||||||
|
* | ¶ | //// | “ | ” | //// | //// | | | | //// | ¬ | ¼ | ½ | ¾ | ////// |
|
||||||
|
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
|
||||||
|
* | | ¦ | ˝ | § | Œ | ` | | | | //// | //// | Ð | //// | IJ | ////// |
|
||||||
|
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||||
|
* | ////// | Æ | Ù |dead-˙| //// | //// |------| |------| //// | Þ | ẞ | ™ | //// | º |
|
||||||
|
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||||
|
* | | //// | ‘ | ’ | //// | //// | | | | //// | //// | //// | //// | ª | |
|
||||||
|
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
|
||||||
|
* | | | | | | | | | | | |
|
||||||
|
* `----------------------------------' `----------------------------------'
|
||||||
|
* ,-------------. ,-------------.
|
||||||
|
* | | | | | |
|
||||||
|
* ,------|------|------| |------+------+------.
|
||||||
|
* | | | | | | | |
|
||||||
|
* | | |------| |------| | |
|
||||||
|
* | | | | | | | |
|
||||||
|
* `--------------------' `--------------------'
|
||||||
|
*/
|
||||||
|
[LR_CSA_AGR_SFT] = KEYMAP(
|
||||||
|
// left hand
|
||||||
|
CSA_PARG, KC_NO, CSA_LDQT, CSA_RDQT, KC_NO, KC_NO, KC_TRNS,
|
||||||
|
KC_TRNS, CSA_BPIP, CSA_DDCT, CSA_SECT, S(CSA_OE), M(M_GRV), KC_TRNS,
|
||||||
|
KC_NO, S(CSA_AE), S(CSA_UGRV), CSA_DDTA, KC_NO, KC_NO,
|
||||||
|
CSA(AGR_SFT), KC_NO, CSA_LQOT, CSA_RQOT, KC_NO, KC_NO, KC_TRNS,
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||||
|
|
||||||
|
KC_TRNS, KC_TRNS,
|
||||||
|
KC_TRNS,
|
||||||
|
KC_TRNS, CSA(AGR_SFT), KC_TRNS,
|
||||||
|
|
||||||
|
// right hand
|
||||||
|
KC_TRNS, KC_NO, CSA_NEGT, CSA_1QRT, CSA_1HLF, CSA_3QRT, KC_NO,
|
||||||
|
KC_TRNS, KC_NO, KC_NO, S(CSA_ETH), KC_NO, S(CSA_IJ), KC_NO,
|
||||||
|
KC_NO, S(CSA_THRN), S(CSA_SRPS), CSA_TM, KC_NO, CSA_ORDO,
|
||||||
|
KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, CSA_ORDA, CSA(AGR_SFT),
|
||||||
|
CSA(SFT_AGR), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||||
|
|
||||||
|
KC_TRNS, KC_TRNS,
|
||||||
|
KC_TRNS,
|
||||||
|
KC_TRNS, CSA(AGR_SFT), KC_TRNS
|
||||||
|
),
|
||||||
|
/* Numeric Layer
|
||||||
|
*
|
||||||
|
* ,--------------------------------------------------. ,--------------------------------------------------.
|
||||||
|
* | | F1 | F2 | F3 | F4 | F5 | | | | | | Tab | / | * | - |
|
||||||
|
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
|
||||||
|
* | | F6 | F7 | F8 | F9 | F10 | | | | | Home | 7 | 8 | 9 | + |
|
||||||
|
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||||
|
* | | F11 | F12 | | | |------| |------| Up | End | 4 | 5 | 6 | + |
|
||||||
|
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||||
|
* | | | | | | | | | Left | Down | Right| 1 | 2 | 3 |KpEnter |
|
||||||
|
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
|
||||||
|
* | | | | | | | | 0 | 00 | . |Etr/Ctl|
|
||||||
|
* `----------------------------------' `-----------------------------------'
|
||||||
|
* ,-------------. ,-------------.
|
||||||
|
* | | | |n.lock|c.lock|
|
||||||
|
* ,------|------|------| |------+------+------.
|
||||||
|
* | | | | | | | |
|
||||||
|
* | | |------| |------| | |
|
||||||
|
* | | | | | | | |
|
||||||
|
* `--------------------' `--------------------'
|
||||||
|
*/
|
||||||
|
// SYMBOLS
|
||||||
|
[LR_NUMR] = KEYMAP(
|
||||||
|
// left hand
|
||||||
|
KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS,
|
||||||
|
KC_TRNS, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_TRNS,
|
||||||
|
KC_TRNS, KC_F11, KC_F12, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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_TAB, KC_PSLS, KC_PAST, KC_PMNS,
|
||||||
|
KC_TRNS, KC_TRNS, KC_HOME, KC_P7, KC_P8, KC_P9, KC_PPLS,
|
||||||
|
KC_UP, KC_END, KC_P4, KC_P5, KC_P6, KC_PPLS,
|
||||||
|
KC_LEFT, KC_DOWN, KC_RGHT, KC_P1, KC_P2, KC_P3, KC_PENT,
|
||||||
|
KC_TRNS, KC_P0, M(M_DBL0),KC_PDOT, CTL_T(KC_PENT),
|
||||||
|
|
||||||
|
KC_NLCK, KC_CAPS,
|
||||||
|
KC_TRNS,
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS
|
||||||
|
),
|
||||||
|
/* fn layer
|
||||||
|
*
|
||||||
|
* ,--------------------------------------------------. ,--------------------------------------------------.
|
||||||
|
* |~CA-mult| | | | | |Insert| |Insert|Eject |Power |Sleep | Wake |PrtScr|ScrollLk|
|
||||||
|
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
|
||||||
|
* | | | | | | |VolUp | | | | | | | | Pause |
|
||||||
|
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||||
|
* | RESET | | | Calc | Mail |Browsr|------| |------| | | | | | |
|
||||||
|
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||||
|
* | | App | cut | copy |paste | Mute |VolDn | | | | | | | | |
|
||||||
|
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
|
||||||
|
* | | | | | | | | | | | |
|
||||||
|
* `----------------------------------' `----------------------------------'
|
||||||
|
* ,-------------. ,-------------.
|
||||||
|
* | | | | | |
|
||||||
|
* ,------|------|------| |------+------+------.
|
||||||
|
* | | | Next | | | | |
|
||||||
|
* | Mute | play |------| |------| | |
|
||||||
|
* | | | Prev | | | | |
|
||||||
|
* `--------------------' `--------------------'
|
||||||
|
*/
|
||||||
|
// MEDIA AND MOUSE
|
||||||
|
[LR_FN] = KEYMAP(
|
||||||
|
TG(LR_CSA), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_INS,
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLU,
|
||||||
|
RESET, KC_TRNS, KC_TRNS, KC_CALC, KC_MAIL, KC_WHOM,
|
||||||
|
KC_TRNS, KC_APP, S(KC_DELT), LCTL(KC_INS),S(KC_INS), KC_MUTE, KC_VOLD,
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||||
|
|
||||||
|
KC_TRNS, KC_TRNS,
|
||||||
|
KC_MPRV,
|
||||||
|
KC_MUTE, KC_MPLY, KC_MNXT,
|
||||||
|
|
||||||
|
// right hand
|
||||||
|
KC_INS, KC_EJCT, KC_PWR, KC_SLEP, KC_WAKE, KC_PSCR, KC_SLCK,
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PAUS,
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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[] = {
|
||||||
|
};
|
||||||
|
|
||||||
|
void hold_shift(void) {
|
||||||
|
register_code(KC_LSHIFT);
|
||||||
|
}
|
||||||
|
|
||||||
|
void release_shift(void) {
|
||||||
|
unregister_code(KC_LSHIFT);
|
||||||
|
}
|
||||||
|
|
||||||
|
uint16_t hextokeycode(int hex) {
|
||||||
|
if (hex == 0x0) {
|
||||||
|
return KC_P0;
|
||||||
|
} else if (hex < 0xA) {
|
||||||
|
return KC_P1 + (hex - 0x1);
|
||||||
|
} else {
|
||||||
|
return KC_A + (hex - 0xA);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void send_unicode(uint16_t unicode)
|
||||||
|
{
|
||||||
|
// For more info on how this works per OS, see here: https://en.wikipedia.org/wiki/Unicode_input#Hexadecimal_code_input
|
||||||
|
// Implemented for Windows:
|
||||||
|
// Pressing ALT followed by + followed by the unicode code point in hex.
|
||||||
|
// Requires registry key HKEY_CURRENT_USER\Control Panel\Input Method\EnableHexNumpad set to String 1
|
||||||
|
register_code(KC_LALT);
|
||||||
|
register_code(KC_PPLS);
|
||||||
|
unregister_code(KC_PPLS);
|
||||||
|
|
||||||
|
for (int i = 12; i >= 0; i -= 4) {
|
||||||
|
register_code(hextokeycode((unicode >> i) & 0xF));
|
||||||
|
unregister_code(hextokeycode((unicode >> i) & 0xF));
|
||||||
|
}
|
||||||
|
|
||||||
|
unregister_code(KC_LALT);
|
||||||
|
}
|
||||||
|
|
||||||
|
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 ... END_UC:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
send_unicode(unicode_chars[id]);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case M_CSA_SFT:
|
||||||
|
// BÉPO over CSA: toggle shift layer
|
||||||
|
layer_invert(LR_CSA_SFT);
|
||||||
|
if (record->event.pressed) {
|
||||||
|
hold_shift();
|
||||||
|
} else {
|
||||||
|
release_shift();
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case M_CSA_SFT_AGR:
|
||||||
|
// BÉPO over CSA: from shift layer, momentary altgr+shift layer
|
||||||
|
layer_invert(LR_CSA_AGR);
|
||||||
|
layer_invert(LR_CSA_AGR_SFT);
|
||||||
|
if (record->event.pressed) {
|
||||||
|
// shift not needed for LR_CSA_AGR_SFT
|
||||||
|
release_shift();
|
||||||
|
} else {
|
||||||
|
// back to shift layer
|
||||||
|
hold_shift();
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case M_CSA_AGR_SFT:
|
||||||
|
// BÉPO over CSA: from altgr layer, momentary altgr+shift layer
|
||||||
|
layer_invert(LR_CSA_SFT);
|
||||||
|
layer_invert(LR_CSA_AGR_SFT);
|
||||||
|
break;
|
||||||
|
case M_1 ... M_0:
|
||||||
|
case M_DEGR:
|
||||||
|
case M_SCLN:
|
||||||
|
case M_GRV:
|
||||||
|
case M_NBSP:
|
||||||
|
// macros of the shift layer that require to release shift
|
||||||
|
if (record->event.pressed) {
|
||||||
|
release_shift();
|
||||||
|
switch (id) {
|
||||||
|
case M_1 ... M_0:
|
||||||
|
register_code(KC_1 + (id - M_1));
|
||||||
|
break;
|
||||||
|
case M_DEGR:
|
||||||
|
return MACRO(DOWN(CSA_ALTGR), D(SCLN), END);
|
||||||
|
case M_SCLN:
|
||||||
|
return MACRO(D(SCLN), END);
|
||||||
|
case M_GRV:
|
||||||
|
return MACRO(I(75), DOWN(CSA_ALTGR), TYPE(CSA_DCRC), UP(CSA_ALTGR), T(SPACE), END);
|
||||||
|
case M_NBSP:
|
||||||
|
// use weak mod such that pressing another key will not be affected
|
||||||
|
add_weak_mods(MOD_BIT(CSA_ALTGR));
|
||||||
|
return MACRO(D(SPACE), END);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
hold_shift();
|
||||||
|
switch (id) {
|
||||||
|
case M_1 ... M_0:
|
||||||
|
unregister_code(KC_1 + (id - M_1));
|
||||||
|
break;
|
||||||
|
case M_DEGR:
|
||||||
|
return MACRO(UP(CSA_ALTGR), U(SCLN), END);
|
||||||
|
case M_SCLN:
|
||||||
|
return MACRO(U(SCLN), END);
|
||||||
|
case M_NBSP:
|
||||||
|
del_weak_mods(MOD_BIT(CSA_ALTGR));
|
||||||
|
return MACRO(U(SPACE), END);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case M_CRC:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
return MACRO(I(75), TYPE(CSA_DCRC), T(SPACE), END);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case M_DBL0:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
return MACRO( I(25), T(P0), T(P0), END );
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case M_FNLR:
|
||||||
|
layer_invert(LR_NUMR);
|
||||||
|
layer_invert(LR_FN);
|
||||||
|
break;
|
||||||
|
case M_NMAL:
|
||||||
|
layer_invert(LR_NUMR);
|
||||||
|
if (record->event.pressed) {
|
||||||
|
register_code(KC_LALT);
|
||||||
|
} else {
|
||||||
|
unregister_code(KC_LALT);
|
||||||
|
}
|
||||||
|
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) {
|
||||||
|
|
||||||
|
ergodox_board_led_off();
|
||||||
|
ergodox_right_led_1_off();
|
||||||
|
ergodox_right_led_2_off();
|
||||||
|
ergodox_right_led_3_off();
|
||||||
|
// led 1: numeric layer
|
||||||
|
if (layer_state & (1 << LR_NUMR)) {
|
||||||
|
ergodox_right_led_1_on();
|
||||||
|
}
|
||||||
|
// led 2: BÉPO over Canadian Multilingual
|
||||||
|
if (IS_CA_MULT_ENABLED()) {
|
||||||
|
ergodox_right_led_2_on();
|
||||||
|
}
|
||||||
|
// led 3: caps lock
|
||||||
|
if (host_keyboard_leds() & (1<<USB_LED_CAPS_LOCK)) {
|
||||||
|
ergodox_right_led_3_on();
|
||||||
|
}
|
||||||
|
};
|
162
keyboards/ergodox/keymaps/bepo_csa/readme.md
Normal file
|
@ -0,0 +1,162 @@
|
||||||
|
# BÉPO Keymap with firmware-remapping for software CSA layout
|
||||||
|
|
||||||
|
This is a keymap intended to be used with the [BÉPO layout](http://bepo.fr), a French ergonomic layout designed by following Dvorak's principles.
|
||||||
|
|
||||||
|
The particularity of this keymap is that it supports using the [Canadian Multilingual Standard layout](https://en.wikipedia.org/wiki/QWERTY#Canadian_Multilingual_Standard) (also known as _ACNOR keyboard_ or _CSA keyboard_, see also the [French page](https://fr.wikipedia.org/wiki/QWERTY#Clavier_canadien_multilingue_standard) which contains more details) on the OS side, by enabling the _CSA_ layer. This is especially useful for operating systems that natively provide CSA, but not BÉPO, like Windows. The CSA layout was chosen because it is probably the standard layout that provides the best character set coverage.
|
||||||
|
|
||||||
|
This keymap is based on the [tm2030](../tm2030/) keymap, whose goal was to have a [TypeMatrix™ 2030](http://typematrix.com/2030/features.php) inspired layout for the ErgoDox EZ.
|
||||||
|
|
||||||
|
As this keyboard is intended for French people, the rest of this page will be in French.
|
||||||
|
|
||||||
|
# Keymap BÉPO avec support en firmware pour utilisation avec la disposition CSA en software
|
||||||
|
|
||||||
|
Cette keymap a été conçue pour être utilisée avec la [disposition BÉPO](http://bepo.fr), la disposition francophone, ergonomique et libre basée sure les principes de Dvorak.
|
||||||
|
|
||||||
|
La particularité de cette keymap est qu'elle supporte l'utilisation du [clavier canadien multilingue standard](https://fr.wikipedia.org/wiki/QWERTY#Clavier_canadien_multilingue_standard) (aussi appelé _clavier ACNOR_ ou _clavier CSA_) du côté du système d'exploitation, en activant la couche _CSA_. Ceci s'avère particulièrement utile pour les systèmes d'exploitations qui fournissent nativement le CSA, mais pas le BÉPO, comme Windows. Le clavier CSA a été choisi comme base car c'est probablement la disposition standard qui fournit la meilleure couverture en termes de caractères disponibles.
|
||||||
|
|
||||||
|
Cette keymap est basée sur la keymap [tm2030](../tm2030/), dont le but est de fournir une disposition inspirée du [TypeMatrix™ 2030](http://typematrix.com/2030/features.php) pour l'ErgoDox EZ.
|
||||||
|
|
||||||
|
## Couche de base
|
||||||
|
C'est la couche par défaut, proche du TypeMatrix, avec les différences suivantes:
|
||||||
|
- La ligne du haut (les touches `F`) et la colonne de droite sont retirées, les touches correspondantes étant déplacées ailleurs.
|
||||||
|
- Les touches situés en bas à gauche sont redisposées dans cet ordre: `Ctrl`, `fn`, `Gui`, `num+Alt`, `Alt`
|
||||||
|
- Les touches `shuffle` (`Alt+Tab`) et `desktop` ne sont pas supportés
|
||||||
|
- `W` est déplacé à la place de `=`
|
||||||
|
- `=` est déplacé sous `Tab` (au lieu d'avoir un grand `Shift`)
|
||||||
|
- `%` et `Ç` sont déplacés à la place de `Home` et `End` respectivement
|
||||||
|
- Les flèches ainsi que `PgUp`/`PgDown`/`Home`/`End` sont déplacées sur les pouces
|
||||||
|
|
||||||
|
À noter que pour `W` et `Ç`, le but a été de ne pas les déplacer trop par rapport à la disposition BÉPO _standard_, afin de pouvoir repasser facilement sur un TypeMatrix ou un clavier traditionnel.
|
||||||
|
|
||||||
|
|
||||||
|
```
|
||||||
|
,--------------------------------------------------. ,--------------------------------------------------.
|
||||||
|
| $ | " | « | » | ( | ) | Del | | Del | @ | + | - | / | * | W |
|
||||||
|
|--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
|
||||||
|
| Tab | B | É | P | O | È |Backsp| |Backsp| ^ | V | D | L | J | Z |
|
||||||
|
|--------+------+------+------+------+------|ace | |ace |------+------+------+------+------+--------|
|
||||||
|
| = | A | U | I | E | , |------| |------| C | T | S | R | N | M |
|
||||||
|
|--------+------+------+------+------+------|Enter | |Enter |------+------+------+------+------+--------|
|
||||||
|
| LShift | À | Y | X | . | K | | | | ' | Q | G | H | F | RShift |
|
||||||
|
`--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
|
||||||
|
|LCtrl | fn | LGui |numAlt| LAlt | |Alt Gr| % | App | Ç | RCtrl|
|
||||||
|
`----------------------------------' `----------------------------------'
|
||||||
|
,--------------. ,-------------.
|
||||||
|
| Esc | num | | Left |Right |
|
||||||
|
,------+-------+------| |------+------+------.
|
||||||
|
| | | PgUp | | Up | | |
|
||||||
|
|Space | Home |------| |------| End |Space |
|
||||||
|
| | | PgDn | | Down | | |
|
||||||
|
`---------------------' `--------------------'
|
||||||
|
```
|
||||||
|
|
||||||
|
### Changer de couche
|
||||||
|
|
||||||
|
- Utilisez `num` pour activer/désactiver [la couche numérique](#couche-numérique)
|
||||||
|
- Maintenez `fn` pour activer temporairement [les couches numériques et Fn](#couche-fn)
|
||||||
|
- Maintenez `numAlt` pour activer temporairement la couche numérique combinée avec `Alt` (facilite l'utilisation des raccourcis tels que `Alt`+`F4`)
|
||||||
|
|
||||||
|
### Diodes
|
||||||
|
Les diodes de l'ErgoDox EZ (côté droit) sont utilisées de la façon suivante :
|
||||||
|
|
||||||
|
- diode de gauche (rouge) : indique l'activation de [la couche numérique](#couche-numérique)
|
||||||
|
- diode du milieu (verte) : indique l'activation du [mode CSA](#couche-csa)
|
||||||
|
- diode de droite (bleue) : indique le verrouillage majuscules
|
||||||
|
|
||||||
|
## Couche CSA
|
||||||
|
La couche _CSA_ est la même que la couche de base, pour une utilisation avec un clavier Canadien Multilingue configuré dans le système d'exploitation.
|
||||||
|
|
||||||
|
Pour l'activer, appuyez sur `fn`+`$`. La [diode](#diodes) verte indique que la couche CSA est activée.
|
||||||
|
|
||||||
|
### Limitations
|
||||||
|
Seuls les caractères présents dans le clavier CSA sont parfaitement supportés. De manière générale, il s'agit des caractères suivants :
|
||||||
|
|
||||||
|
- toute la couche de base
|
||||||
|
- tous les caractères accessibles en `Shift`
|
||||||
|
- tous les caractères de la main gauche accessibles en `AltGr` à l'exception du `≠`
|
||||||
|
- environ la moitié des caractères de la main droite accessibles en `AltGr` et la moitié des caractères accessibles en `AltGr`+`Shift` (consultez [le fichier source](keymap.c) pour voir les caractères supportés)
|
||||||
|
|
||||||
|
En particulier, les caractères suivants sont émulés via le support Unicode (Windows seulement):
|
||||||
|
|
||||||
|
- le tiret cadratin (tiret long) : —
|
||||||
|
- le tiret demi-cadratin (demi tiret) : –
|
||||||
|
- les points de suspension : …
|
||||||
|
|
||||||
|
L'implémentation actuelle ne fonctionne pas dans toutes les applications, en particulier les applications MS Office.
|
||||||
|
|
||||||
|
Il est probable que l'utilisation de la couche CSA ne fonctionne pas correctement dans certains jeux vidéos.
|
||||||
|
|
||||||
|
Cette fonctionnalité a été conçue et testée essentiellment pour Windows (7).
|
||||||
|
|
||||||
|
### Détails techniques
|
||||||
|
Techniquement, la couche CSA est en réalité composée de 4 couches servant à émuler la couche de base, les appuis sur `Shift` ou `Alt` et la combinaison des deux.
|
||||||
|
|
||||||
|
Le changement de couches se fait par des macros afin d'activer ou désactiver plusieurs couches et la touche `Shift` en même temps.
|
||||||
|
|
||||||
|
Certains caractères sont également implémentés par des macros, notamment ceux de la couche `Shift` qui n'ont pas besoin de cette touche en CSA, comme les chiffres.
|
||||||
|
|
||||||
|
Les caractères Unicode se basent sur une implémentation spécifique et non celle fournie dans QMK — il faudrait sans doute migrer le code. Notez la façon dont ces caractères sont déclarés tels quels dans [le code source](keymap.c) (tableau `unicode_char`).
|
||||||
|
|
||||||
|
## Couche numérique
|
||||||
|
Couche numérique proche du TM lorsqu'on active `num`, avec les différences suivantes :
|
||||||
|
|
||||||
|
- Le clavier numérique est déplacés de 1 vers le haut et vers la droite.
|
||||||
|
- Les flèches sont décalées de 1 vers la gauche.
|
||||||
|
- Fournit l'accès aux touches `F1` à `F12`, `caps-lock` et `num-lock`.
|
||||||
|
|
||||||
|
La couche numérique est indiquée par la [diode](#diodes) de gauche (rouge). Caps-lock est indiqué par la diode de droite (bleue).
|
||||||
|
|
||||||
|
La touche `numAlt` de [la couche de base](#couche-de-base) permet d'activer la couche numérique et la touche `Alt` simultanément, afin de faciliter les raccourcis claviers comme `Alt`+`F4`.
|
||||||
|
|
||||||
|
```
|
||||||
|
,--------------------------------------------------. ,--------------------------------------------------.
|
||||||
|
| | F1 | F2 | F3 | F4 | F5 | | | | | | Tab | / | * | - |
|
||||||
|
|--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
|
||||||
|
| | F6 | F7 | F8 | F9 | F10 | | | | | Home | 7 | 8 | 9 | + |
|
||||||
|
|--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||||
|
| | F11 | F12 | | | |------| |------| Up | End | 4 | 5 | 6 | + |
|
||||||
|
|--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||||
|
| | | | | | | | | Left | Down | Right| 1 | 2 | 3 |KpEnter |
|
||||||
|
`--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
|
||||||
|
| | | | | | | | 0 | 00 | . |Etr/Ctl|
|
||||||
|
`----------------------------------' `-----------------------------------'
|
||||||
|
,-------------. ,-------------.
|
||||||
|
| | | |n.lock|c.lock|
|
||||||
|
,------|------|------| |------+------+------.
|
||||||
|
| | | | | | | |
|
||||||
|
| | |------| |------| | |
|
||||||
|
| | | | | | | |
|
||||||
|
`--------------------' `--------------------'
|
||||||
|
```
|
||||||
|
|
||||||
|
## Couche Fn
|
||||||
|
Activée simultanément avec la couche numérique lorsque l'on maintient la touche `fn`. Comme sur le TM, elle fournit l'accès aux fonctionnalités suivantes :
|
||||||
|
|
||||||
|
- `couper`, `copier` et `coller` — attention: ne pas utiliser dans l'explorateur de fichiers.
|
||||||
|
- monter/baisser/couper le volume — seulement accessible en main gauche, contrairement au TM.
|
||||||
|
- piste précédente/suivante
|
||||||
|
- calculatrice, e-mail et page d'accueil du navigateur web
|
||||||
|
- `insert`, `power`, `sleep`, `wake`, `print screen`, `scroll-lock` et `pause`
|
||||||
|
- ~CSA: (dés)activation de [la couche CSA](#couche-csa) sur `$`
|
||||||
|
- RESET: rechargement du firmware avec Teensy-Loader (pour les développeurs)
|
||||||
|
|
||||||
|
```
|
||||||
|
,--------------------------------------------------. ,--------------------------------------------------.
|
||||||
|
| ~CSA | | | | | |Insert| |Insert|Eject |Power |Sleep | Wake |PrtScr|ScrollLk|
|
||||||
|
|--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
|
||||||
|
| | | | | | |VolUp | | | | | | | | Pause |
|
||||||
|
|--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||||
|
| RESET | | | Calc | Mail |Browsr|------| |------| | | | | | |
|
||||||
|
|--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||||
|
| | App | cut | copy |paste | Mute |VolDn | | | | | | | | |
|
||||||
|
`--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
|
||||||
|
| | | | | | | | | | | |
|
||||||
|
`----------------------------------' `----------------------------------'
|
||||||
|
,-------------. ,-------------.
|
||||||
|
| | | | | |
|
||||||
|
,------|------|------| |------+------+------.
|
||||||
|
| | | Next | | | | |
|
||||||
|
| Mute | play |------| |------| | |
|
||||||
|
| | | Prev | | | | |
|
||||||
|
`--------------------' `--------------------'
|
||||||
|
```
|
|
@ -7,6 +7,8 @@
|
||||||
#define SYMB 1 // symbols
|
#define SYMB 1 // symbols
|
||||||
#define MDIA 2 // media keys
|
#define MDIA 2 // media keys
|
||||||
|
|
||||||
|
#define EPRM M(1) // Macro 1: Reset EEPROM
|
||||||
|
|
||||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
/* Keymap 0: Basic layer
|
/* Keymap 0: Basic layer
|
||||||
*
|
*
|
||||||
|
@ -62,7 +64,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||||
* | | % | ^ | [ | ] | ~ | | | | & | 1 | 2 | 3 | \ | |
|
* | | % | ^ | [ | ] | ~ | | | | & | 1 | 2 | 3 | \ | |
|
||||||
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
|
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
|
||||||
* | | | | | | | | . | 0 | = | |
|
* | EPRM | | | | | | | . | 0 | = | |
|
||||||
* `----------------------------------' `----------------------------------'
|
* `----------------------------------' `----------------------------------'
|
||||||
* ,-------------. ,-------------.
|
* ,-------------. ,-------------.
|
||||||
* | | | | | |
|
* | | | | | |
|
||||||
|
@ -79,7 +81,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
KC_TRNS,KC_EXLM,KC_AT, KC_LCBR,KC_RCBR,KC_PIPE,KC_TRNS,
|
KC_TRNS,KC_EXLM,KC_AT, KC_LCBR,KC_RCBR,KC_PIPE,KC_TRNS,
|
||||||
KC_TRNS,KC_HASH,KC_DLR, KC_LPRN,KC_RPRN,KC_GRV,
|
KC_TRNS,KC_HASH,KC_DLR, KC_LPRN,KC_RPRN,KC_GRV,
|
||||||
KC_TRNS,KC_PERC,KC_CIRC,KC_LBRC,KC_RBRC,KC_TILD,KC_TRNS,
|
KC_TRNS,KC_PERC,KC_CIRC,KC_LBRC,KC_RBRC,KC_TILD,KC_TRNS,
|
||||||
KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
|
EPRM,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
|
||||||
KC_TRNS,KC_TRNS,
|
KC_TRNS,KC_TRNS,
|
||||||
KC_TRNS,
|
KC_TRNS,
|
||||||
KC_TRNS,KC_TRNS,KC_TRNS,
|
KC_TRNS,KC_TRNS,KC_TRNS,
|
||||||
|
@ -149,6 +151,11 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
|
||||||
SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION);
|
SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case 1:
|
||||||
|
if (record->event.pressed) { // For resetting EEPROM
|
||||||
|
eeconfig_init();
|
||||||
|
}
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
return MACRO_NONE;
|
return MACRO_NONE;
|
||||||
};
|
};
|
||||||
|
@ -158,6 +165,7 @@ void matrix_init_user(void) {
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
// Runs constantly in the background, in a loop.
|
// Runs constantly in the background, in a loop.
|
||||||
void matrix_scan_user(void) {
|
void matrix_scan_user(void) {
|
||||||
|
|
||||||
|
|
|
@ -2,6 +2,8 @@
|
||||||
|
|
||||||
## Changelog
|
## Changelog
|
||||||
|
|
||||||
|
* Sep 22, 2016:
|
||||||
|
* Created a new key in layer 1 (bottom-corner key) that resets the EEPROM.
|
||||||
* Feb 2, 2016 (V1.1):
|
* Feb 2, 2016 (V1.1):
|
||||||
* Made the right-hand quote key double as Cmd/Win on hold. So you get ' when you tap it, " when you tap it with Shift, and Cmd or Win when you hold it. You can then use it as a modifier, or just press and hold it for a moment (and then let go) to send a single Cmd or Win keystroke (handy for opening the Start menu on Windows).
|
* Made the right-hand quote key double as Cmd/Win on hold. So you get ' when you tap it, " when you tap it with Shift, and Cmd or Win when you hold it. You can then use it as a modifier, or just press and hold it for a moment (and then let go) to send a single Cmd or Win keystroke (handy for opening the Start menu on Windows).
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,6 @@
|
||||||
|
/* Setup to approximate a Kinesis Advantage with an eye to use in a
|
||||||
|
* Mac/OSX environment
|
||||||
|
* This version adds a hand swap feature to flip the keyboard */
|
||||||
#include "ergodox.h"
|
#include "ergodox.h"
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
#include "action_layer.h"
|
#include "action_layer.h"
|
||||||
|
@ -18,10 +21,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
* |--------+------+------+------+------+------| Hyper| | Meh |------+------+------+------+------+--------|
|
* |--------+------+------+------+------+------| Hyper| | Meh |------+------+------+------+------+--------|
|
||||||
* | LShift |Z/Ctrl| X | C | V | B | | | | N | M | , | . |//Ctrl| RShift |
|
* | LShift |Z/Ctrl| X | C | V | B | | | | N | M | , | . |//Ctrl| RShift |
|
||||||
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
|
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
|
||||||
* |Grv/L1| '" |AltShf| Left | Right| | Up | Down | [ | ] | ~L1 |
|
* |Grv/L1| \ |AltShf| Left | Right| | Up | Down | [ | ] |Grv/L1|
|
||||||
* `----------------------------------' `----------------------------------'
|
* `----------------------------------' `----------------------------------'
|
||||||
* ,---------------. ,---------------.
|
* ,---------------. ,---------------.
|
||||||
* |Ctrl/Esc| Alt | | Alt |Ctrl/Esc|
|
* | LGUI |Al/Esc| |Al/Esc| RGUI |
|
||||||
* ,------|--------|------| |------+--------+------.
|
* ,------|--------|------| |------+--------+------.
|
||||||
* | | | Home | | PgUp | | |
|
* | | | Home | | PgUp | | |
|
||||||
* |Backsp| Del |------| |------| Enter | Space|
|
* |Backsp| Del |------| |------| Enter | Space|
|
||||||
|
@ -31,33 +34,34 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
// 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_.
|
||||||
// Otherwise, it needs KC_*
|
// Otherwise, it needs KC_*
|
||||||
[BASE] = KEYMAP( // layer 0 : default
|
[BASE] = KEYMAP( // layer 0 : default
|
||||||
// left hand
|
// left hand
|
||||||
KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, KC_LGUI,
|
KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, KC_LGUI,
|
||||||
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, TG(1),
|
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, TG(1),
|
||||||
KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G,
|
KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G,
|
||||||
KC_LSFT, CTL_T(KC_Z), KC_X, KC_C, KC_V, KC_B, ALL_T(KC_NO),
|
KC_LSFT, CTL_T(KC_Z), KC_X, KC_C, KC_V, KC_B, ALL_T(KC_NO),
|
||||||
LT(SYMB,KC_GRV),KC_QUOT, LALT(KC_LSFT), KC_LEFT,KC_RGHT,
|
KC_FN1, KC_BSLS, LALT(KC_LSFT), KC_LEFT, KC_RGHT,
|
||||||
CTL_T(KC_ESC), ALT_T(KC_APP),
|
KC_LGUI, ALT_T(KC_ESC),
|
||||||
KC_HOME,
|
KC_HOME,
|
||||||
KC_BSPC,KC_DEL,KC_END,
|
KC_BSPC, KC_DEL, KC_END,
|
||||||
// right hand
|
// right hand
|
||||||
KC_APP, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,
|
KC_APP, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,
|
||||||
TG(1), KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS,
|
TG(1), 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,
|
KC_H, KC_J, KC_K, KC_L, LT(MDIA, KC_SCLN), KC_QUOT,
|
||||||
MEH_T(KC_NO),KC_N, KC_M, KC_COMM,KC_DOT, CTL_T(KC_SLSH), KC_RSFT,
|
MEH_T(KC_NO), KC_N, KC_M, KC_COMM, KC_DOT, CTL_T(KC_SLSH), KC_RSFT,
|
||||||
KC_UP, KC_DOWN,KC_LBRC,KC_RBRC, KC_FN1,
|
KC_UP, KC_DOWN, KC_LBRC, KC_RBRC, KC_FN1,
|
||||||
KC_LALT, CTL_T(KC_ESC),
|
ALT_T(KC_ESC), KC_RGUI,
|
||||||
KC_PGUP,
|
KC_PGUP,
|
||||||
KC_PGDN,KC_ENT, KC_SPC
|
KC_PGDN, KC_ENT, KC_SPC
|
||||||
),
|
),
|
||||||
|
|
||||||
/* Keymap 1: Symbol Layer
|
/* Keymap 1: Symbol Layer
|
||||||
*
|
*
|
||||||
* ,--------------------------------------------------. ,--------------------------------------------------.
|
* ,--------------------------------------------------. ,--------------------------------------------------.
|
||||||
* | | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | F11 |
|
* | PrScr | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | F11 |
|
||||||
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
|
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
|
||||||
* | | ! | @ | { | } | | | | | | Up | 7 | 8 | 9 | * | F12 |
|
* | ScrLk | ! | @ | { | } | | | | | | Up | 7 | 8 | 9 | * | F12 |
|
||||||
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||||
* | | # | $ | ( | ) | ` |------| |------| Down | 4 | 5 | 6 | + | |
|
* | Pause | # | $ | ( | ) | ` |------| |------| Down | 4 | 5 | 6 | + | |
|
||||||
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||||
* | | % | ^ | [ | ] | ~ | | | | & | 1 | 2 | 3 | \ | |
|
* | | % | ^ | [ | ] | ~ | | | | & | 1 | 2 | 3 | \ | |
|
||||||
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
|
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
|
||||||
|
@ -74,14 +78,14 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
// SYMBOLS
|
// SYMBOLS
|
||||||
[SYMB] = KEYMAP(
|
[SYMB] = KEYMAP(
|
||||||
// left hand
|
// left hand
|
||||||
KC_TRNS,KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS,
|
KC_PSCR, 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_SLCK, 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_PAUS, KC_HASH, KC_DLR, KC_LPRN, KC_RPRN, KC_GRV,
|
||||||
KC_TRNS,KC_PERC,KC_CIRC,KC_LBRC,KC_RBRC,KC_TILD,KC_TRNS,
|
KC_TRNS, KC_PERC, KC_CIRC, KC_LBRC, KC_RBRC, KC_TILD, KC_TRNS,
|
||||||
KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||||
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
|
// right hand
|
||||||
KC_TRNS, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
|
KC_TRNS, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
|
||||||
KC_TRNS, KC_UP, KC_7, KC_8, KC_9, KC_ASTR, KC_F12,
|
KC_TRNS, KC_UP, KC_7, KC_8, KC_9, KC_ASTR, KC_F12,
|
||||||
|
@ -92,6 +96,7 @@ 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
|
||||||
),
|
),
|
||||||
|
|
||||||
/* Keymap 2: Media and mouse keys
|
/* Keymap 2: Media and mouse keys
|
||||||
*
|
*
|
||||||
* ,--------------------------------------------------. ,--------------------------------------------------.
|
* ,--------------------------------------------------. ,--------------------------------------------------.
|
||||||
|
@ -135,10 +140,6 @@ KEYMAP(
|
||||||
),
|
),
|
||||||
};
|
};
|
||||||
|
|
||||||
const uint16_t PROGMEM fn_actions[] = {
|
|
||||||
[1] = ACTION_LAYER_TAP_TOGGLE(SYMB) // FN1 - Momentary Layer 1 (Symbols)
|
|
||||||
};
|
|
||||||
|
|
||||||
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
|
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
|
||||||
{
|
{
|
||||||
// MACRODOWN only works in this function
|
// MACRODOWN only works in this function
|
||||||
|
@ -154,6 +155,10 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
|
||||||
return MACRO_NONE;
|
return MACRO_NONE;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const uint16_t PROGMEM fn_actions[] = {
|
||||||
|
[1] = ACTION_SWAP_HANDS_TAP_KEY(KC_GRV) // FN1 - Tap = Grave/Tilde - Hold Momentary swap hands
|
||||||
|
};
|
||||||
|
|
||||||
// Runs just one time when the keyboard initializes.
|
// Runs just one time when the keyboard initializes.
|
||||||
void matrix_init_user(void) {
|
void matrix_init_user(void) {
|
||||||
|
|
||||||
|
|
14
keyboards/ergodox/keymaps/kastyle/readme.md
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
The kastyle keymap was originally intended to remap the ErgoDox EZ to more
|
||||||
|
closely approximate the layout of a Kinesis Advantage. Notable changes
|
||||||
|
over the stock ErgoDox layout include:
|
||||||
|
|
||||||
|
* Re-arragnement of tab, enter, space, and delete to match the Kinesis
|
||||||
|
* Addition of print screen, pause, etc. keys following the kines-ish keymap
|
||||||
|
on L1
|
||||||
|
* GUI keys have replaced Ctrl on the thumb keys (for Mac use), and Alt keys
|
||||||
|
are mapped to allow Esc on tap (good for Vi users)
|
||||||
|
* Most notably, the addition of a momentary one-handed mode for quick and
|
||||||
|
easy access to keys on the other half of the keyboard, e.g. while using a
|
||||||
|
mouse in one hand, one may add text to a dialogue box with the other without
|
||||||
|
having to reach across the keyboard or remove one's hand from the mouse.
|
||||||
|
|
5
keyboards/ergodox/keymaps/mclennon_osx/README.md
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
# Ergodox EZ for OS X
|
||||||
|
|
||||||
|
This keymapping is designed to be reasonably familiar to an ordinary Mac keyboard while taking advantage of the Ergodox EZ's features. Caps lock instead enables a layer which allows a user to use HJKL as arrow keys and to control media. Shift and control have additional mappings on S and D to provide easier access while holding down caps lock.
|
||||||
|
|
||||||
|
If you choose to compile this yourself, be sure to compile with `#define PREVENT_STUCK_MODIFIERS` in your `config.h`. Firmware built using [qmk_firmware](https://github.com/jackhumbert/qmk_firmware/).
|
144
keyboards/ergodox/keymaps/mclennon_osx/keymap.c
Normal file
|
@ -0,0 +1,144 @@
|
||||||
|
// Media keys work on OSX, but not on Windows.
|
||||||
|
#include "ergodox.h"
|
||||||
|
#include "debug.h"
|
||||||
|
#include "action_layer.h"
|
||||||
|
|
||||||
|
#define BASE 0 // Default layer
|
||||||
|
#define AUXI 1 // Auxiliary layer
|
||||||
|
|
||||||
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
/* Keymap 0: Basic Layer
|
||||||
|
*
|
||||||
|
* ,--------------------------------------------------. ,--------------------------------------------------.
|
||||||
|
* | ~` | 1 | 2 | 3 | 4 | 5 | 6 | | 7 | 8 | 9 | 0 | -_ | += | Bkspc |
|
||||||
|
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
|
||||||
|
* | Tab | Q | W | E | R | T | L1 | | Del | Y | U | I | O | P | |\ |
|
||||||
|
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||||
|
* | L1 | A | S | D | F | G |------| |------| H | J | K | L | ;: | Enter |
|
||||||
|
* |--------+------+------+------+------+------| {[ | | }] |------+------+------+------+------+--------|
|
||||||
|
* | LShift | Z | X | C | V | B | | | | N | M | <, | >. | ?/ | "' |
|
||||||
|
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
|
||||||
|
* |LCtrl | | | | Esc | | | | | | |
|
||||||
|
* `----------------------------------' `----------------------------------'
|
||||||
|
* ,-------------. ,-------------.
|
||||||
|
* | | | |Power | |
|
||||||
|
* ,------|------|------| |------+--------+------.
|
||||||
|
* | | | | | | | |
|
||||||
|
* | LGui | LAlt |------| |------| Bkspc |Space |
|
||||||
|
* | | | | | Del | | |
|
||||||
|
* `--------------------' `----------------------'
|
||||||
|
*/
|
||||||
|
// 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_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6,
|
||||||
|
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, MO(1),
|
||||||
|
MO(1), KC_A, KC_S, KC_D, KC_F, KC_G,
|
||||||
|
KC_LSHIFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_LBRC,
|
||||||
|
KC_LCTL, KC_TRNS,KC_TRNS,KC_TRNS,KC_ESC,
|
||||||
|
KC_TRNS,KC_TRNS,
|
||||||
|
KC_TRNS,
|
||||||
|
KC_LGUI,KC_LALT,KC_TRNS,
|
||||||
|
|
||||||
|
// right hand
|
||||||
|
KC_7, KC_8, KC_9, KC_0, KC_MINS,KC_EQL, KC_BSPC,
|
||||||
|
KC_DELETE, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLASH,
|
||||||
|
KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_ENT,
|
||||||
|
KC_RBRC, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH,KC_QUOT,
|
||||||
|
KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
|
||||||
|
KC_PWR, KC_TRNS,
|
||||||
|
KC_TRNS,
|
||||||
|
KC_DELETE, KC_BSPC, KC_SPC
|
||||||
|
),
|
||||||
|
/* Keymap 1: Auxiliary Layer
|
||||||
|
*
|
||||||
|
* ,--------------------------------------------------. ,--------------------------------------------------.
|
||||||
|
* | | F1 | F2 | F3 | F4 | F5 | F6 | | F7 | F8 | F9 | F10 | F11 | F12 | |
|
||||||
|
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
|
||||||
|
* | | | | | | | TRNS | | | Mute | VolDn| VolUp| Play | | |
|
||||||
|
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||||
|
* | TRNS | |LShift| LCtrl| | |------| |------| LEFT | DOWN | UP |RIGHT | | |
|
||||||
|
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||||
|
* | LShift | | | | | | | | | MPrv | MNxt | | | | |
|
||||||
|
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
|
||||||
|
* |LCtrl | | | | | | | | | | |
|
||||||
|
* `----------------------------------' `----------------------------------'
|
||||||
|
* ,-------------. ,-------------.
|
||||||
|
* | | | | | |
|
||||||
|
* ,------|------|------| |------+------+------.
|
||||||
|
* | | | | | | | |
|
||||||
|
* | LGui | LAlt |------| |------| Bkspc| Space|
|
||||||
|
* | | | | | Del | | |
|
||||||
|
* `--------------------' `--------------------'
|
||||||
|
*/
|
||||||
|
// AUXILIARY
|
||||||
|
[AUXI] = KEYMAP(
|
||||||
|
// left hand
|
||||||
|
KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6,
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||||
|
KC_TRNS, KC_TRNS, KC_LSHIFT,KC_LCTL, KC_TRNS, KC_TRNS,
|
||||||
|
KC_LSHIFT,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||||
|
KC_LCTL, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||||
|
KC_TRNS, KC_TRNS,
|
||||||
|
KC_TRNS,
|
||||||
|
KC_LGUI, KC_LALT, KC_TRNS,
|
||||||
|
// right hand
|
||||||
|
KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_TRNS,
|
||||||
|
KC_TRNS, KC_MUTE, KC_VOLD, KC_VOLU, KC_MPLY, KC_TRNS, KC_TRNS,
|
||||||
|
KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT,KC_TRNS, KC_TRNS,
|
||||||
|
KC_TRNS, KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||||
|
KC_PWR, KC_TRNS,
|
||||||
|
KC_TRNS,
|
||||||
|
KC_DELETE, KC_BSPC, KC_SPC
|
||||||
|
),
|
||||||
|
};
|
||||||
|
|
||||||
|
const uint16_t PROGMEM fn_actions[] = {
|
||||||
|
[1] = ACTION_LAYER_TAP_TOGGLE(AUXI) // FN1 - Momentary Layer 1 (Auxiliary)
|
||||||
|
};
|
||||||
|
|
||||||
|
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;
|
||||||
|
};
|
||||||
|
|
||||||
|
// 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) {
|
||||||
|
// TODO: Make this relevant to the ErgoDox EZ.
|
||||||
|
case 1:
|
||||||
|
ergodox_right_led_1_on();
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
ergodox_right_led_2_on();
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
// none
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
After Width: | Height: | Size: 137 KiB |