Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e951317acb | ||
|
|
1aa0be4cf1 | ||
|
|
0f163c0028 | ||
|
|
fb9b8dadb9 | ||
|
|
43d8fa5bf1 | ||
|
|
36f820be7e | ||
|
|
e85b185796 | ||
|
|
6a76192fa4 | ||
|
|
bd1729d5be | ||
|
|
fb95d86b39 | ||
|
|
017458a07b | ||
|
|
c38589d861 | ||
|
|
3bb0586acc | ||
|
|
617578399c | ||
|
|
c588fca06c | ||
|
|
a72e8f0865 | ||
|
|
1c0fe956ac | ||
|
|
d29906cb64 | ||
|
|
f646f00b93 | ||
|
|
83509adc3a | ||
|
|
26eb97a4a8 | ||
|
|
fdfd48e8c8 | ||
|
|
efaf0e830b | ||
|
|
585d646128 | ||
|
|
8674f9c466 | ||
|
|
7424261dae | ||
|
|
30f22d450d | ||
|
|
621ae42a6c | ||
|
|
4217cb5bbc | ||
|
|
517f75d893 | ||
|
|
dd73e14c9b | ||
|
|
66e2d6a063 | ||
|
|
f2e1609801 | ||
|
|
5682254f71 | ||
|
|
45d437ca04 | ||
|
|
51a86b85f3 | ||
|
|
2fd670bec0 | ||
|
|
6ba22b5f5e | ||
|
|
a15510b57b | ||
|
|
5acc0e54aa | ||
|
|
1a8042ae91 | ||
|
|
a284245f77 | ||
|
|
85d688e92c | ||
|
|
4c2f04986a | ||
|
|
3007d01718 | ||
|
|
3b9fabb9aa | ||
|
|
a8992a2cfe | ||
|
|
7837d96b6e | ||
|
|
56026dd4df | ||
|
|
1552fd6ae1 | ||
|
|
133908da74 | ||
|
|
3c2c489768 | ||
|
|
b236e51b69 | ||
|
|
17e81baab3 | ||
|
|
f9eb11a674 | ||
|
|
bb99d7117c | ||
|
|
a5ba30338f | ||
|
|
7feadbd66d | ||
|
|
206233d98c | ||
|
|
82372d36af | ||
|
|
df26ede131 | ||
|
|
67e150a08a | ||
|
|
ba945c5e77 | ||
|
|
be002137f9 | ||
|
|
a621c7f88b | ||
|
|
722adce095 | ||
|
|
98316ef017 | ||
|
|
ff2b01da49 | ||
|
|
6549e169f8 | ||
|
|
e9a4a5e961 | ||
|
|
ef4abfeb31 | ||
|
|
b4802d7567 | ||
|
|
d2a11b523b | ||
|
|
086aad0d7e | ||
|
|
ec88a0b3cc | ||
|
|
7d5606085f | ||
|
|
19f0285a76 | ||
|
|
29108d1477 | ||
|
|
4cefb45a2d | ||
|
|
f894103997 | ||
|
|
b56a9a9899 | ||
|
|
e32e7dc0f5 | ||
|
|
44ce179192 | ||
|
|
d9ffd77ee7 | ||
|
|
e553bb3af4 | ||
|
|
b107d64d69 | ||
|
|
c81be932d2 | ||
|
|
899584187f | ||
|
|
6a75a7d672 | ||
|
|
be9fd4b4fa | ||
|
|
cc158d90ae | ||
|
|
5c11ba74d8 | ||
|
|
a44ba492ea | ||
|
|
22f985eba7 | ||
|
|
49cfdb544d | ||
|
|
b51a0db6ed | ||
|
|
2a7f9a7e46 | ||
|
|
effffa33a5 | ||
|
|
0f9bfafb9e | ||
|
|
a916f4e8b8 | ||
|
|
9af272e4bb | ||
|
|
ac97870801 | ||
|
|
083267680d | ||
|
|
e6c9b07e1c | ||
|
|
2dcd6c38fa | ||
|
|
f54b4771eb | ||
|
|
164a6c994b | ||
|
|
a144968807 | ||
|
|
16774333ad | ||
|
|
5fc5661147 | ||
|
|
d1ff2bb9db | ||
|
|
821f72eae9 | ||
|
|
b5675e2025 | ||
|
|
967cf0f6d4 | ||
|
|
5df74f3ba7 | ||
|
|
f1d81d2cc6 | ||
|
|
2c5b551970 | ||
|
|
52f671c23e | ||
|
|
b27fb216ef | ||
|
|
ff6beeb7a3 | ||
|
|
b3945c103c | ||
|
|
046f1baf30 | ||
|
|
c0ec1756af | ||
|
|
ec1e936dfb | ||
|
|
1b1adf35bb | ||
|
|
15635817b5 | ||
|
|
0881f2dbfa | ||
|
|
d8e9c183be | ||
|
|
dda858c437 | ||
|
|
a2ac883779 | ||
|
|
af13e9a12d | ||
|
|
d89114400c | ||
|
|
56be300757 | ||
|
|
91f2e9fb5e | ||
|
|
02ef122cbb | ||
|
|
f66361d678 | ||
|
|
da4c2d2e3e | ||
|
|
b73c935d36 | ||
|
|
dfb0a512a0 |
No files matched your search
@@ -419,7 +419,7 @@ define BUILD_TEST
|
|||||||
MAKE_TARGET := $2
|
MAKE_TARGET := $2
|
||||||
COMMAND := $1
|
COMMAND := $1
|
||||||
MAKE_CMD := $$(MAKE) -r -R -C $(ROOT_DIR) -f build_test.mk $$(MAKE_TARGET)
|
MAKE_CMD := $$(MAKE) -r -R -C $(ROOT_DIR) -f build_test.mk $$(MAKE_TARGET)
|
||||||
MAKE_VARS := TEST=$$(TEST_NAME)
|
MAKE_VARS := TEST=$$(TEST_NAME) FULL_TESTS=$$(FULL_TESTS)
|
||||||
MAKE_MSG := $$(MSG_MAKE_TEST)
|
MAKE_MSG := $$(MSG_MAKE_TEST)
|
||||||
$$(eval $$(call BUILD))
|
$$(eval $$(call BUILD))
|
||||||
ifneq ($$(MAKE_TARGET),clean)
|
ifneq ($$(MAKE_TARGET),clean)
|
||||||
|
|||||||
@@ -0,0 +1,30 @@
|
|||||||
|
# Copyright 2017 Fred Sundvik
|
||||||
|
#
|
||||||
|
# This program is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation, either version 2 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
#include $(TMK_PATH)/protocol.mk
|
||||||
|
|
||||||
|
TEST_PATH=tests/$(TEST)
|
||||||
|
|
||||||
|
$(TEST)_SRC= \
|
||||||
|
$(TEST_PATH)/test.cpp \
|
||||||
|
$(TMK_COMMON_SRC) \
|
||||||
|
$(QUANTUM_SRC) \
|
||||||
|
tests/test_common/matrix.c \
|
||||||
|
tests/test_common/test_driver.cpp \
|
||||||
|
tests/test_common/keyboard_report_util.cpp \
|
||||||
|
tests/test_common/test_fixture.cpp
|
||||||
|
$(TEST)_DEFS=$(TMK_COMMON_DEFS)
|
||||||
|
$(TEST)_CONFIG=$(TEST_PATH)/config.h
|
||||||
|
VPATH+=$(TOP_DIR)/tests/test_common
|
||||||
+3
-132
@@ -31,8 +31,6 @@ $(error MASTER does not have a valid value(left/right))
|
|||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
KEYBOARD_PATH := keyboards/$(KEYBOARD)
|
KEYBOARD_PATH := keyboards/$(KEYBOARD)
|
||||||
KEYBOARD_C := $(KEYBOARD_PATH)/$(KEYBOARD).c
|
KEYBOARD_C := $(KEYBOARD_PATH)/$(KEYBOARD).c
|
||||||
|
|
||||||
@@ -42,7 +40,6 @@ else
|
|||||||
$(error "$(KEYBOARD_C)" does not exist)
|
$(error "$(KEYBOARD_C)" does not exist)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
|
||||||
ifneq ($(SUBPROJECT),)
|
ifneq ($(SUBPROJECT),)
|
||||||
SUBPROJECT_PATH := keyboards/$(KEYBOARD)/$(SUBPROJECT)
|
SUBPROJECT_PATH := keyboards/$(KEYBOARD)/$(SUBPROJECT)
|
||||||
SUBPROJECT_C := $(SUBPROJECT_PATH)/$(SUBPROJECT).c
|
SUBPROJECT_C := $(SUBPROJECT_PATH)/$(SUBPROJECT).c
|
||||||
@@ -118,139 +115,12 @@ endif
|
|||||||
# # project specific files
|
# # project specific files
|
||||||
SRC += $(KEYBOARD_C) \
|
SRC += $(KEYBOARD_C) \
|
||||||
$(KEYMAP_C) \
|
$(KEYMAP_C) \
|
||||||
$(QUANTUM_DIR)/quantum.c \
|
$(QUANTUM_SRC)
|
||||||
$(QUANTUM_DIR)/keymap_common.c \
|
|
||||||
$(QUANTUM_DIR)/keycode_config.c \
|
|
||||||
$(QUANTUM_DIR)/process_keycode/process_leader.c
|
|
||||||
|
|
||||||
ifneq ($(SUBPROJECT),)
|
ifneq ($(SUBPROJECT),)
|
||||||
SRC += $(SUBPROJECT_C)
|
SRC += $(SUBPROJECT_C)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
ifndef CUSTOM_MATRIX
|
|
||||||
SRC += $(QUANTUM_DIR)/matrix.c
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifeq ($(strip $(API_SYSEX_ENABLE)), yes)
|
|
||||||
OPT_DEFS += -DAPI_SYSEX_ENABLE
|
|
||||||
SRC += $(QUANTUM_DIR)/api/api_sysex.c
|
|
||||||
OPT_DEFS += -DAPI_ENABLE
|
|
||||||
SRC += $(QUANTUM_DIR)/api.c
|
|
||||||
MIDI_ENABLE=yes
|
|
||||||
endif
|
|
||||||
|
|
||||||
MUSIC_ENABLE := 0
|
|
||||||
|
|
||||||
ifeq ($(strip $(AUDIO_ENABLE)), yes)
|
|
||||||
OPT_DEFS += -DAUDIO_ENABLE
|
|
||||||
MUSIC_ENABLE := 1
|
|
||||||
SRC += $(QUANTUM_DIR)/process_keycode/process_audio.c
|
|
||||||
SRC += $(QUANTUM_DIR)/audio/audio.c
|
|
||||||
SRC += $(QUANTUM_DIR)/audio/voices.c
|
|
||||||
SRC += $(QUANTUM_DIR)/audio/luts.c
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifeq ($(strip $(MIDI_ENABLE)), yes)
|
|
||||||
OPT_DEFS += -DMIDI_ENABLE
|
|
||||||
MUSIC_ENABLE := 1
|
|
||||||
SRC += $(QUANTUM_DIR)/process_keycode/process_midi.c
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifeq ($(MUSIC_ENABLE), 1)
|
|
||||||
SRC += $(QUANTUM_DIR)/process_keycode/process_music.c
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifeq ($(strip $(COMBO_ENABLE)), yes)
|
|
||||||
OPT_DEFS += -DCOMBO_ENABLE
|
|
||||||
SRC += $(QUANTUM_DIR)/process_keycode/process_combo.c
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifeq ($(strip $(VIRTSER_ENABLE)), yes)
|
|
||||||
OPT_DEFS += -DVIRTSER_ENABLE
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifeq ($(strip $(FAUXCLICKY_ENABLE)), yes)
|
|
||||||
OPT_DEFS += -DFAUXCLICKY_ENABLE
|
|
||||||
SRC += $(QUANTUM_DIR)/fauxclicky.c
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifeq ($(strip $(UCIS_ENABLE)), yes)
|
|
||||||
OPT_DEFS += -DUCIS_ENABLE
|
|
||||||
UNICODE_COMMON = yes
|
|
||||||
SRC += $(QUANTUM_DIR)/process_keycode/process_ucis.c
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifeq ($(strip $(UNICODEMAP_ENABLE)), yes)
|
|
||||||
OPT_DEFS += -DUNICODEMAP_ENABLE
|
|
||||||
UNICODE_COMMON = yes
|
|
||||||
SRC += $(QUANTUM_DIR)/process_keycode/process_unicodemap.c
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifeq ($(strip $(UNICODE_ENABLE)), yes)
|
|
||||||
OPT_DEFS += -DUNICODE_ENABLE
|
|
||||||
UNICODE_COMMON = yes
|
|
||||||
SRC += $(QUANTUM_DIR)/process_keycode/process_unicode.c
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifeq ($(strip $(UNICODE_COMMON)), yes)
|
|
||||||
SRC += $(QUANTUM_DIR)/process_keycode/process_unicode_common.c
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifeq ($(strip $(RGBLIGHT_ENABLE)), yes)
|
|
||||||
OPT_DEFS += -DRGBLIGHT_ENABLE
|
|
||||||
SRC += $(QUANTUM_DIR)/light_ws2812.c
|
|
||||||
SRC += $(QUANTUM_DIR)/rgblight.c
|
|
||||||
CIE1931_CURVE = yes
|
|
||||||
LED_BREATHING_TABLE = yes
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifeq ($(strip $(TAP_DANCE_ENABLE)), yes)
|
|
||||||
OPT_DEFS += -DTAP_DANCE_ENABLE
|
|
||||||
SRC += $(QUANTUM_DIR)/process_keycode/process_tap_dance.c
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifeq ($(strip $(PRINTING_ENABLE)), yes)
|
|
||||||
OPT_DEFS += -DPRINTING_ENABLE
|
|
||||||
SRC += $(QUANTUM_DIR)/process_keycode/process_printer.c
|
|
||||||
SRC += $(TMK_DIR)/protocol/serial_uart.c
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifeq ($(strip $(SERIAL_LINK_ENABLE)), yes)
|
|
||||||
SRC += $(patsubst $(QUANTUM_PATH)/%,%,$(SERIAL_SRC))
|
|
||||||
OPT_DEFS += $(SERIAL_DEFS)
|
|
||||||
VAPTH += $(SERIAL_PATH)
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifneq ($(strip $(VARIABLE_TRACE)),)
|
|
||||||
SRC += $(QUANTUM_DIR)/variable_trace.c
|
|
||||||
OPT_DEFS += -DNUM_TRACED_VARIABLES=$(strip $(VARIABLE_TRACE))
|
|
||||||
ifneq ($(strip $(MAX_VARIABLE_TRACE_SIZE)),)
|
|
||||||
OPT_DEFS += -DMAX_VARIABLE_TRACE_SIZE=$(strip $(MAX_VARIABLE_TRACE_SIZE))
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifeq ($(strip $(LCD_ENABLE)), yes)
|
|
||||||
CIE1931_CURVE = yes
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifeq ($(strip $(LED_ENABLE)), yes)
|
|
||||||
CIE1931_CURVE = yes
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifeq ($(strip $(CIE1931_CURVE)), yes)
|
|
||||||
OPT_DEFS += -DUSE_CIE1931_CURVE
|
|
||||||
LED_TABLES = yes
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifeq ($(strip $(LED_BREATHING_TABLE)), yes)
|
|
||||||
OPT_DEFS += -DUSE_LED_BREATHING_TABLE
|
|
||||||
LED_TABLES = yes
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifeq ($(strip $(LED_TABLES)), yes)
|
|
||||||
SRC += $(QUANTUM_DIR)/led_tables.c
|
|
||||||
endif
|
|
||||||
|
|
||||||
# Optimize size but this may cause error "relocation truncated to fit"
|
# Optimize size but this may cause error "relocation truncated to fit"
|
||||||
#EXTRALDFLAGS = -Wl,--relax
|
#EXTRALDFLAGS = -Wl,--relax
|
||||||
|
|
||||||
@@ -262,9 +132,10 @@ endif
|
|||||||
VPATH += $(KEYBOARD_PATH)
|
VPATH += $(KEYBOARD_PATH)
|
||||||
VPATH += $(COMMON_VPATH)
|
VPATH += $(COMMON_VPATH)
|
||||||
|
|
||||||
|
include common_features.mk
|
||||||
include $(TMK_PATH)/protocol.mk
|
include $(TMK_PATH)/protocol.mk
|
||||||
|
|
||||||
include $(TMK_PATH)/common.mk
|
include $(TMK_PATH)/common.mk
|
||||||
|
|
||||||
SRC += $(TMK_COMMON_SRC)
|
SRC += $(TMK_COMMON_SRC)
|
||||||
OPT_DEFS += $(TMK_COMMON_DEFS)
|
OPT_DEFS += $(TMK_COMMON_DEFS)
|
||||||
EXTRALDFLAGS += $(TMK_COMMON_LDFLAGS)
|
EXTRALDFLAGS += $(TMK_COMMON_LDFLAGS)
|
||||||
|
|||||||
@@ -40,13 +40,23 @@ VPATH +=\
|
|||||||
all: elf
|
all: elf
|
||||||
|
|
||||||
VPATH += $(COMMON_VPATH)
|
VPATH += $(COMMON_VPATH)
|
||||||
|
PLATFORM:=TEST
|
||||||
|
|
||||||
|
ifneq ($(filter $(FULL_TESTS),$(TEST)),)
|
||||||
|
include tests/$(TEST)/rules.mk
|
||||||
|
endif
|
||||||
|
|
||||||
|
include common_features.mk
|
||||||
include $(TMK_PATH)/common.mk
|
include $(TMK_PATH)/common.mk
|
||||||
include $(QUANTUM_PATH)/serial_link/tests/rules.mk
|
include $(QUANTUM_PATH)/serial_link/tests/rules.mk
|
||||||
|
ifneq ($(filter $(FULL_TESTS),$(TEST)),)
|
||||||
|
include build_full_test.mk
|
||||||
|
endif
|
||||||
|
|
||||||
$(TEST_OBJ)/$(TEST)_SRC := $($(TEST)_SRC)
|
$(TEST_OBJ)/$(TEST)_SRC := $($(TEST)_SRC)
|
||||||
$(TEST_OBJ)/$(TEST)_INC := $($(TEST)_INC) $(VPATH) $(GTEST_INC)
|
$(TEST_OBJ)/$(TEST)_INC := $($(TEST)_INC) $(VPATH) $(GTEST_INC)
|
||||||
$(TEST_OBJ)/$(TEST)_DEFS := $($(TEST)_DEFS)
|
$(TEST_OBJ)/$(TEST)_DEFS := $($(TEST)_DEFS)
|
||||||
|
$(TEST_OBJ)/$(TEST)_CONFIG := $($(TEST)_CONFIG)
|
||||||
|
|
||||||
include $(TMK_PATH)/native.mk
|
include $(TMK_PATH)/native.mk
|
||||||
include $(TMK_PATH)/rules.mk
|
include $(TMK_PATH)/rules.mk
|
||||||
|
|||||||
@@ -11,17 +11,10 @@ QUANTUM_PATH = $(TOP_DIR)/$(QUANTUM_DIR)
|
|||||||
|
|
||||||
BUILD_DIR := $(TOP_DIR)/.build
|
BUILD_DIR := $(TOP_DIR)/.build
|
||||||
|
|
||||||
SERIAL_DIR := $(QUANTUM_DIR)/serial_link
|
|
||||||
SERIAL_PATH := $(QUANTUM_PATH)/serial_link
|
|
||||||
SERIAL_SRC := $(wildcard $(SERIAL_PATH)/protocol/*.c)
|
|
||||||
SERIAL_SRC += $(wildcard $(SERIAL_PATH)/system/*.c)
|
|
||||||
SERIAL_DEFS += -DSERIAL_LINK_ENABLE
|
|
||||||
|
|
||||||
COMMON_VPATH := $(TOP_DIR)
|
COMMON_VPATH := $(TOP_DIR)
|
||||||
COMMON_VPATH += $(TMK_PATH)
|
COMMON_VPATH += $(TMK_PATH)
|
||||||
COMMON_VPATH += $(QUANTUM_PATH)
|
COMMON_VPATH += $(QUANTUM_PATH)
|
||||||
COMMON_VPATH += $(QUANTUM_PATH)/keymap_extras
|
COMMON_VPATH += $(QUANTUM_PATH)/keymap_extras
|
||||||
COMMON_VPATH += $(QUANTUM_PATH)/audio
|
COMMON_VPATH += $(QUANTUM_PATH)/audio
|
||||||
COMMON_VPATH += $(QUANTUM_PATH)/process_keycode
|
COMMON_VPATH += $(QUANTUM_PATH)/process_keycode
|
||||||
COMMON_VPATH += $(QUANTUM_PATH)/api
|
COMMON_VPATH += $(QUANTUM_PATH)/api
|
||||||
COMMON_VPATH += $(SERIAL_PATH)
|
|
||||||
@@ -0,0 +1,153 @@
|
|||||||
|
# Copyright 2017 Fred Sundvik
|
||||||
|
#
|
||||||
|
# This program is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation, either version 2 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
SERIAL_DIR := $(QUANTUM_DIR)/serial_link
|
||||||
|
SERIAL_PATH := $(QUANTUM_PATH)/serial_link
|
||||||
|
SERIAL_SRC := $(wildcard $(SERIAL_PATH)/protocol/*.c)
|
||||||
|
SERIAL_SRC += $(wildcard $(SERIAL_PATH)/system/*.c)
|
||||||
|
SERIAL_DEFS += -DSERIAL_LINK_ENABLE
|
||||||
|
COMMON_VPATH += $(SERIAL_PATH)
|
||||||
|
|
||||||
|
ifeq ($(strip $(API_SYSEX_ENABLE)), yes)
|
||||||
|
OPT_DEFS += -DAPI_SYSEX_ENABLE
|
||||||
|
SRC += $(QUANTUM_DIR)/api/api_sysex.c
|
||||||
|
OPT_DEFS += -DAPI_ENABLE
|
||||||
|
SRC += $(QUANTUM_DIR)/api.c
|
||||||
|
MIDI_ENABLE=yes
|
||||||
|
endif
|
||||||
|
|
||||||
|
MUSIC_ENABLE := 0
|
||||||
|
|
||||||
|
ifeq ($(strip $(AUDIO_ENABLE)), yes)
|
||||||
|
OPT_DEFS += -DAUDIO_ENABLE
|
||||||
|
MUSIC_ENABLE := 1
|
||||||
|
SRC += $(QUANTUM_DIR)/process_keycode/process_audio.c
|
||||||
|
SRC += $(QUANTUM_DIR)/audio/audio.c
|
||||||
|
SRC += $(QUANTUM_DIR)/audio/voices.c
|
||||||
|
SRC += $(QUANTUM_DIR)/audio/luts.c
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq ($(strip $(MIDI_ENABLE)), yes)
|
||||||
|
OPT_DEFS += -DMIDI_ENABLE
|
||||||
|
MUSIC_ENABLE := 1
|
||||||
|
SRC += $(QUANTUM_DIR)/process_keycode/process_midi.c
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq ($(MUSIC_ENABLE), 1)
|
||||||
|
SRC += $(QUANTUM_DIR)/process_keycode/process_music.c
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq ($(strip $(COMBO_ENABLE)), yes)
|
||||||
|
OPT_DEFS += -DCOMBO_ENABLE
|
||||||
|
SRC += $(QUANTUM_DIR)/process_keycode/process_combo.c
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq ($(strip $(VIRTSER_ENABLE)), yes)
|
||||||
|
OPT_DEFS += -DVIRTSER_ENABLE
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq ($(strip $(FAUXCLICKY_ENABLE)), yes)
|
||||||
|
OPT_DEFS += -DFAUXCLICKY_ENABLE
|
||||||
|
SRC += $(QUANTUM_DIR)/fauxclicky.c
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq ($(strip $(UCIS_ENABLE)), yes)
|
||||||
|
OPT_DEFS += -DUCIS_ENABLE
|
||||||
|
UNICODE_COMMON = yes
|
||||||
|
SRC += $(QUANTUM_DIR)/process_keycode/process_ucis.c
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq ($(strip $(UNICODEMAP_ENABLE)), yes)
|
||||||
|
OPT_DEFS += -DUNICODEMAP_ENABLE
|
||||||
|
UNICODE_COMMON = yes
|
||||||
|
SRC += $(QUANTUM_DIR)/process_keycode/process_unicodemap.c
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq ($(strip $(UNICODE_ENABLE)), yes)
|
||||||
|
OPT_DEFS += -DUNICODE_ENABLE
|
||||||
|
UNICODE_COMMON = yes
|
||||||
|
SRC += $(QUANTUM_DIR)/process_keycode/process_unicode.c
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq ($(strip $(UNICODE_COMMON)), yes)
|
||||||
|
SRC += $(QUANTUM_DIR)/process_keycode/process_unicode_common.c
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq ($(strip $(RGBLIGHT_ENABLE)), yes)
|
||||||
|
OPT_DEFS += -DRGBLIGHT_ENABLE
|
||||||
|
SRC += $(QUANTUM_DIR)/light_ws2812.c
|
||||||
|
SRC += $(QUANTUM_DIR)/rgblight.c
|
||||||
|
CIE1931_CURVE = yes
|
||||||
|
LED_BREATHING_TABLE = yes
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq ($(strip $(TAP_DANCE_ENABLE)), yes)
|
||||||
|
OPT_DEFS += -DTAP_DANCE_ENABLE
|
||||||
|
SRC += $(QUANTUM_DIR)/process_keycode/process_tap_dance.c
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq ($(strip $(PRINTING_ENABLE)), yes)
|
||||||
|
OPT_DEFS += -DPRINTING_ENABLE
|
||||||
|
SRC += $(QUANTUM_DIR)/process_keycode/process_printer.c
|
||||||
|
SRC += $(TMK_DIR)/protocol/serial_uart.c
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq ($(strip $(SERIAL_LINK_ENABLE)), yes)
|
||||||
|
SRC += $(patsubst $(QUANTUM_PATH)/%,%,$(SERIAL_SRC))
|
||||||
|
OPT_DEFS += $(SERIAL_DEFS)
|
||||||
|
VAPTH += $(SERIAL_PATH)
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifneq ($(strip $(VARIABLE_TRACE)),)
|
||||||
|
SRC += $(QUANTUM_DIR)/variable_trace.c
|
||||||
|
OPT_DEFS += -DNUM_TRACED_VARIABLES=$(strip $(VARIABLE_TRACE))
|
||||||
|
ifneq ($(strip $(MAX_VARIABLE_TRACE_SIZE)),)
|
||||||
|
OPT_DEFS += -DMAX_VARIABLE_TRACE_SIZE=$(strip $(MAX_VARIABLE_TRACE_SIZE))
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq ($(strip $(LCD_ENABLE)), yes)
|
||||||
|
CIE1931_CURVE = yes
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq ($(strip $(BACKLIGHT_ENABLE)), yes)
|
||||||
|
ifeq ($(strip $(VISUALIZER_ENABLE)), yes)
|
||||||
|
CIE1931_CURVE = yes
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq ($(strip $(CIE1931_CURVE)), yes)
|
||||||
|
OPT_DEFS += -DUSE_CIE1931_CURVE
|
||||||
|
LED_TABLES = yes
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq ($(strip $(LED_BREATHING_TABLE)), yes)
|
||||||
|
OPT_DEFS += -DUSE_LED_BREATHING_TABLE
|
||||||
|
LED_TABLES = yes
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq ($(strip $(LED_TABLES)), yes)
|
||||||
|
SRC += $(QUANTUM_DIR)/led_tables.c
|
||||||
|
endif
|
||||||
|
|
||||||
|
QUANTUM_SRC:= \
|
||||||
|
$(QUANTUM_DIR)/quantum.c \
|
||||||
|
$(QUANTUM_DIR)/keymap_common.c \
|
||||||
|
$(QUANTUM_DIR)/keycode_config.c \
|
||||||
|
$(QUANTUM_DIR)/process_keycode/process_leader.c
|
||||||
|
|
||||||
|
ifndef CUSTOM_MATRIX
|
||||||
|
QUANTUM_SRC += $(QUANTUM_DIR)/matrix.c
|
||||||
|
endif
|
||||||
@@ -35,8 +35,8 @@ void promicro_bootloader_jmp(bool program);
|
|||||||
{ KC_##k00, KC_##k01, KC_##k02, KC_##k03, KC_##k04, KC_##k05, KC_NO, KC_##k06, KC_##k07, KC_##k08, KC_##k09, KC_##k0a, KC_##k0b }, \
|
{ KC_##k00, KC_##k01, KC_##k02, KC_##k03, KC_##k04, KC_##k05, KC_NO, KC_##k06, KC_##k07, KC_##k08, KC_##k09, KC_##k0a, KC_##k0b }, \
|
||||||
{ KC_##k10, KC_##k11, KC_##k12, KC_##k13, KC_##k14, KC_##k15, KC_NO, KC_##k16, KC_##k17, KC_##k18, KC_##k19, KC_##k1a, KC_##k1b }, \
|
{ KC_##k10, KC_##k11, KC_##k12, KC_##k13, KC_##k14, KC_##k15, KC_NO, KC_##k16, KC_##k17, KC_##k18, KC_##k19, KC_##k1a, KC_##k1b }, \
|
||||||
{ KC_##k20, KC_##k21, KC_##k22, KC_##k23, KC_##k24, KC_##k25, KC_NO, KC_##k26, KC_##k27, KC_##k28, KC_##k29, KC_##k2a, KC_##k2b }, \
|
{ KC_##k20, KC_##k21, KC_##k22, KC_##k23, KC_##k24, KC_##k25, KC_NO, KC_##k26, KC_##k27, KC_##k28, KC_##k29, KC_##k2a, KC_##k2b }, \
|
||||||
{ KC_##k30, KC_##k31, KC_##k32, KC_##k33, KC_##k34, KC_##k35, KC_##k46, KC_##k36, KC_##k37, KC_##k38, KC_##k39, KC_##k3a, KC_##k3b }, \
|
{ KC_##k30, KC_##k31, KC_##k32, KC_##k33, KC_##k34, KC_##k35, KC_##k47, KC_##k36, KC_##k37, KC_##k38, KC_##k39, KC_##k3a, KC_##k3b }, \
|
||||||
{ KC_##k40, KC_##k41, KC_##k42, KC_##k43, KC_##k44, KC_##k45, KC_##k47, KC_##k48, KC_##k49, KC_##k4a, KC_##k4b, KC_##k4c, KC_##k4d } \
|
{ KC_##k40, KC_##k41, KC_##k42, KC_##k43, KC_##k44, KC_##k45, KC_##k46, KC_##k48, KC_##k49, KC_##k4a, KC_##k4b, KC_##k4c, KC_##k4d } \
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
NKRO_ENABLE = true
|
||||||
|
MOUSEKEY_ENABLE = no
|
||||||
|
EXTRAKEY_ENABLE = yes
|
||||||
|
CONSOLE_ENABLE = no
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
<!-- -*- mode: markdown; fill-column: 8192 -*- -->
|
||||||
|
|
||||||
|
Atreus52 Modification
|
||||||
|
=======================
|
||||||
|
|
||||||
|
Firmware for my custom keyboard based on the Atreus layout, but with 5 rows and only 5 columns per hand.
|
||||||
|
More documentation coming soon.
|
||||||
|
|
||||||
|
# License
|
||||||
|
GPL-3+
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
#include "../../config.h"
|
||||||
|
|
||||||
|
#undef MANUFACTURER
|
||||||
|
#undef PRODUCT
|
||||||
|
#undef DESCRIPTION
|
||||||
|
#undef MATRIX_ROW_PINS
|
||||||
|
#undef MATRIX_COL_PINS
|
||||||
|
#undef DIODE_DIRECTION
|
||||||
|
|
||||||
|
/* USB Device descriptor parameter */
|
||||||
|
#define MANUFACTURER Mesh Industries
|
||||||
|
#define PRODUCT Atreus52 Treeboard
|
||||||
|
#define DESCRIPTION q.m.k. keyboard firmware for Atreus52
|
||||||
|
|
||||||
|
#define MATRIX_ROW_PINS { C6, D7, E6, B4, B5 }
|
||||||
|
#define MATRIX_COL_PINS { B2, B1, F7, F6, F5, F4, B6, D3, D2, D1, D0, D4, B3 }
|
||||||
|
|
||||||
|
#define DIODE_DIRECTION COL2ROW
|
||||||
@@ -0,0 +1,99 @@
|
|||||||
|
#include "atreus62.h"
|
||||||
|
|
||||||
|
// Layers
|
||||||
|
#define DVORAK 0
|
||||||
|
#define QWERTY 1
|
||||||
|
#define RAISE 2
|
||||||
|
#define LOWER 3
|
||||||
|
#define BDO 4
|
||||||
|
#define RESETL 5
|
||||||
|
|
||||||
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
[DVORAK] = KC_KEYMAP(
|
||||||
|
NO, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, NO, \
|
||||||
|
NO, QUOT, COMM, DOT, P, Y, F, G, C, R, L, NO, \
|
||||||
|
NO, A, O, E, U, I, D, H, T, N, S, NO, \
|
||||||
|
NO, SCLN, Q, J, K, X, B, M, W, V, Z, NO, \
|
||||||
|
NO, FN2, LALT, LCTL, FN1, LSFT, BSPC, ENT, SPC, FN0, LGUI, LEFT, RGHT, NO ),
|
||||||
|
|
||||||
|
[QWERTY] = KC_KEYMAP(
|
||||||
|
NO, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, NO, \
|
||||||
|
NO, Q, W, E, R, T, Y, U, I, O, P, NO, \
|
||||||
|
NO, A, S, D, F, G, H, J, K, L, SCLN, NO, \
|
||||||
|
NO, Z, X, C, V, B, N, M, COMM, DOT, SLSH, NO, \
|
||||||
|
NO, FN2, LALT, LCTL, FN1, LSFT, BSPC, ENT, SPC, FN0, LGUI, LEFT, RGHT, NO ),
|
||||||
|
|
||||||
|
[RAISE] = KC_KEYMAP(
|
||||||
|
NO, MRWD, MPRV, MPLY, MNXT, MFFD, TRNS, MUTE, VOLD, VOLU, DEL, NO, \
|
||||||
|
NO, TILD, GRV, LCBR, RCBR, DQUO, QUOT, EQL, PLUS, MINS, QUES, NO, \
|
||||||
|
NO, ESC, TAB, LPRN, RPRN, BSLS, SLSH, LEFT, DOWN, UP, RGHT, NO, \
|
||||||
|
NO, TRNS, TRNS, LBRC, RBRC, TRNS, INS, PIPE, UNDS, TRNS, TRNS, NO, \
|
||||||
|
NO, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, FN3, NO ),
|
||||||
|
|
||||||
|
[LOWER] = KC_KEYMAP(
|
||||||
|
NO, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, NO, \
|
||||||
|
NO, EXLM, AT, HASH, DLR, PERC, CIRC, AMPR, ASTR, LPRN, RPRN, NO, \
|
||||||
|
NO, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, NO, \
|
||||||
|
NO, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, DOT, TRNS, TRNS, TRNS, NO, \
|
||||||
|
NO, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, NO ),
|
||||||
|
|
||||||
|
[BDO] = KC_KEYMAP(
|
||||||
|
NO, ESC, 1, 2, 3, 4, 5, 0, SLSH, U, C, NO, \
|
||||||
|
NO, TAB, Q, W, E, R, 6, Y, I, O, P, NO, \
|
||||||
|
NO, LSFT, A, S, D, F, 7, G, H, J, K, NO, \
|
||||||
|
NO, T, Z, X, C, V, 8, B, N, M, L, NO, \
|
||||||
|
NO, LCTL, SPC, SPC, SPC, SPC, COMM, ENT, 9, NO, NO, NO, FN2, NO ),
|
||||||
|
|
||||||
|
[RESETL] = KEYMAP(
|
||||||
|
KC_NO, RESET, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, \
|
||||||
|
KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, \
|
||||||
|
KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, \
|
||||||
|
KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, \
|
||||||
|
KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_FN3,KC_NO )
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
const uint16_t PROGMEM fn_actions[] = {
|
||||||
|
[0] = ACTION_LAYER_MOMENTARY(RAISE), // Raise layer
|
||||||
|
[1] = ACTION_LAYER_MOMENTARY(LOWER), // Lower layer
|
||||||
|
[2] = ACTION_LAYER_TOGGLE(BDO), // BDO layer
|
||||||
|
[3] = ACTION_LAYER_TOGGLE(RESETL) // RESET layer
|
||||||
|
};
|
||||||
|
|
||||||
|
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
|
||||||
|
{
|
||||||
|
// MACRODOWN only works in this function
|
||||||
|
switch (id) {
|
||||||
|
case 0:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
register_code(KC_RSFT);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
unregister_code(KC_RSFT);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return MACRO_NONE;
|
||||||
|
};
|
||||||
|
|
||||||
|
static uint8_t qw_dv_swap_state = 0;
|
||||||
|
|
||||||
|
bool process_record_user (uint16_t keycode, keyrecord_t *record) {
|
||||||
|
if (keycode == KC_LGUI) {
|
||||||
|
if (record->event.pressed)
|
||||||
|
qw_dv_swap_state |= 0b00000001;
|
||||||
|
else
|
||||||
|
qw_dv_swap_state &= ~(0b00000001);
|
||||||
|
}
|
||||||
|
if (keycode == KC_LCTL) {
|
||||||
|
if (record->event.pressed)
|
||||||
|
qw_dv_swap_state |= 0b00000010;
|
||||||
|
else
|
||||||
|
qw_dv_swap_state &= ~(0b00000010);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (qw_dv_swap_state == 0b00000011) {
|
||||||
|
layer_invert(DVORAK);
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
@@ -6,3 +6,4 @@ MIDI_ENABLE = yes
|
|||||||
|
|
||||||
# if MIDI_ENABLE is set to yes, then CONSOLE_ENABLE has to be disabled, because of the firmware size
|
# if MIDI_ENABLE is set to yes, then CONSOLE_ENABLE has to be disabled, because of the firmware size
|
||||||
CONSOLE_ENABLE = false
|
CONSOLE_ENABLE = false
|
||||||
|
COMMAND_ENABLE = no
|
||||||
@@ -26,4 +26,19 @@
|
|||||||
/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */
|
/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */
|
||||||
#define MIDI_TONE_KEYCODE_OCTAVES 2
|
#define MIDI_TONE_KEYCODE_OCTAVES 2
|
||||||
|
|
||||||
|
/* Disabling rollover allows you to use the opposite shift key to cancel the space cadet state in the event
|
||||||
|
of an erroneous press instead of emitting a pair of parentheses when the keys are released.
|
||||||
|
*/
|
||||||
|
#define DISABLE_SPACE_CADET_ROLLOVER
|
||||||
|
|
||||||
|
/*
|
||||||
|
Setting the Space Cadet Parens for German layout
|
||||||
|
|
||||||
|
Default is
|
||||||
|
#define LSPO_KEY KC_9
|
||||||
|
#define RSPC_KEY KC_0
|
||||||
|
*/
|
||||||
|
#define LSPO_KEY KC_8
|
||||||
|
#define RSPC_KEY KC_9
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
@@ -4,6 +4,8 @@
|
|||||||
#define GRAVE_MODS (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT)|MOD_BIT(KC_LGUI)|MOD_BIT(KC_RGUI)|MOD_BIT(KC_LALT)|MOD_BIT(KC_RALT))
|
#define GRAVE_MODS (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT)|MOD_BIT(KC_LGUI)|MOD_BIT(KC_RGUI)|MOD_BIT(KC_LALT)|MOD_BIT(KC_RALT))
|
||||||
#define _______ KC_TRNS
|
#define _______ KC_TRNS
|
||||||
#define xxxxxxx KC_NO
|
#define xxxxxxx KC_NO
|
||||||
|
#define HPR_TAB ALL_T(KC_TAB)
|
||||||
|
#define CTL_ESC CTL_T(KC_ESC)
|
||||||
|
|
||||||
// Each layer gets a name for readability, which is then used in the keymap matrix below.
|
// Each layer gets a name for readability, which is then used in the keymap matrix below.
|
||||||
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
|
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
|
||||||
@@ -21,64 +23,73 @@
|
|||||||
#define TO_MIDI _______
|
#define TO_MIDI _______
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#define TO_BASE TO(_BL)
|
||||||
|
#define MO_FUNC MO(_FL)
|
||||||
|
#define MEDIA MO(_ME)
|
||||||
|
#define MO_CTL MO(_CL)
|
||||||
|
#define L_MOUSE LT(_ML, KC_SPC)
|
||||||
|
#define ESC_FUN LT(_FL, KC_ESC)
|
||||||
|
|
||||||
|
#define ESC_GRV F(0)
|
||||||
|
#define RGB_RST F(1)
|
||||||
|
|
||||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
/* Keymap _BL: Base Layer (Default Layer)
|
/* Keymap _BL: Base Layer (Default Layer) */
|
||||||
*/
|
|
||||||
[_BL] = KEYMAP(
|
[_BL] = KEYMAP(
|
||||||
F(0), KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, _______, KC_BSPC, KC_INS, \
|
ESC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, _______, KC_BSPC, KC_INS, \
|
||||||
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, \
|
HPR_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, \
|
||||||
MO(_FL), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, \
|
ESC_FUN, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, \
|
||||||
KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, _______, KC_RSFT, KC_UP, \
|
KC_LSPO, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, _______, KC_RSPC, KC_UP, \
|
||||||
KC_LCTL, KC_LGUI, KC_LALT, _______, LT(_ML, KC_SPC),LT(_ML, KC_SPC), _______, KC_RALT, MO(_ME), MO(_FL), KC_LEFT, KC_DOWN, KC_RGHT),
|
KC_LCTL, KC_LGUI, KC_LALT,_______, L_MOUSE, L_MOUSE, _______, KC_RALT, KC_RCTL, MO_FUNC, KC_LEFT, KC_DOWN, KC_RGHT),
|
||||||
|
|
||||||
/* Keymap _FL: Function Layer */
|
/* Keymap _FL: Function Layer */
|
||||||
[_FL] = KEYMAP(
|
[_FL] = KEYMAP(
|
||||||
KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, BL_STEP, \
|
KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, BL_STEP, \
|
||||||
_______, _______, _______,_______,_______,_______,_______,_______,KC_PSCR,_______, KC_PAUS, _______, _______, _______, _______, \
|
_______, _______, _______, _______, _______, _______, _______, _______, KC_PSCR, _______, KC_PAUS, _______, _______, _______, _______, \
|
||||||
MO(_FL), _______, MO(_CL),_______,_______,_______,KC_LEFT,KC_DOWN, KC_UP,KC_RGHT, _______, _______, _______, _______, \
|
_______, _______, MO_CTL, _______, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, _______, _______, _______, _______, \
|
||||||
_______, _______, _______,_______,_______,_______,_______,_______,MO(_ME),_______, _______, TO_MIDI, _______, _______, KC_PGUP, \
|
_______, _______, _______, _______, _______, _______, _______, _______, MEDIA, _______, _______, TO_MIDI, _______, _______, KC_PGUP, \
|
||||||
_______, _______, _______,_______, _______,_______, _______, _______, _______, MO(_FL), KC_HOME, KC_PGDN, KC_END),
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, MO_FUNC, KC_HOME, KC_PGDN, KC_END),
|
||||||
|
|
||||||
/* Keymap _ME: Media layer */
|
/* Keymap _ME: Media layer */
|
||||||
[_ME] = KEYMAP(
|
[_ME] = KEYMAP(
|
||||||
_______, _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, KC_MUTE, KC_VOLU, \
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MUTE, KC_VOLU, \
|
||||||
_______, _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, KC_VOLD, \
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_VOLD, \
|
||||||
_______, _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, \
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
|
||||||
MO(_FL), _______, _______,_______,_______,_______,_______,_______,MO(_ME),_______, _______, _______, _______, MO(_FL), _______, \
|
_______, _______, _______, _______, _______, _______, _______, _______, MEDIA, _______, _______, _______, _______, _______, _______, \
|
||||||
_______, _______, _______,_______, _______,_______, _______, _______, _______, _______, KC_MPRV, KC_MPLY,KC_MNXT),
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MPRV, KC_MPLY, KC_MNXT),
|
||||||
|
|
||||||
/* Keymap _CL: Control layer */
|
/* Keymap _CL: Control layer */
|
||||||
[_CL] = KEYMAP(
|
[_CL] = KEYMAP(
|
||||||
_______, F(1), _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, RGB_TOG, RGB_VAI, \
|
_______, RGB_RST, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_TOG, RGB_VAI, \
|
||||||
_______, _______, _______,_______,RESET, _______,_______,_______,_______,_______, _______, _______, _______, _______, RGB_VAD, \
|
_______, _______, _______, _______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_VAD, \
|
||||||
_______, _______, MO(_CL),_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, \
|
_______, _______, MO_CTL, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
|
||||||
MO(_FL), _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, MO(_FL), RGB_SAI, \
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_SAI, \
|
||||||
_______, _______, _______,_______, RGB_MOD,RGB_MOD, _______, _______, _______, _______, RGB_HUD, RGB_SAD, RGB_HUI),
|
_______, _______, _______, _______, RGB_MOD, RGB_MOD, _______, _______, _______, _______, RGB_HUD, RGB_SAD, RGB_HUI),
|
||||||
|
|
||||||
/* Keymap _ML: Mouse layer */
|
/* Keymap _ML: Mouse layer */
|
||||||
[_ML] = KEYMAP(
|
[_ML] = KEYMAP(
|
||||||
_______, _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, _______, _______, \
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
|
||||||
_______, _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, _______, \
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
|
||||||
_______, _______, KC_BTN3,KC_BTN2,KC_BTN1,_______,KC_MS_L,KC_MS_D,KC_MS_U,KC_MS_R, _______, _______, _______, _______, \
|
_______, _______, KC_BTN3, KC_BTN2, KC_BTN1, _______, KC_MS_L, KC_MS_D, KC_MS_U, KC_MS_R, _______, _______, _______, _______, \
|
||||||
_______, _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, KC_MS_U, \
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MS_U, \
|
||||||
_______, _______, _______,_______, LT(_ML, KC_SPC),LT(_ML, KC_SPC), _______, KC_BTN1, KC_BTN2, KC_BTN3, KC_MS_L, KC_MS_D,KC_MS_R),
|
_______, _______, _______, _______, L_MOUSE, L_MOUSE, _______, KC_BTN1, KC_BTN2, KC_BTN3, KC_MS_L, KC_MS_D, KC_MS_R),
|
||||||
|
|
||||||
#if defined(MIDI_ENABLE) && defined(MIDI_ADVANCED)
|
#if defined(MIDI_ENABLE) && defined(MIDI_ADVANCED)
|
||||||
/* Keymap _MI: MIDI layer (Advanced)*/
|
/* Keymap _MI: MIDI layer (Advanced)*/
|
||||||
[_MI] = KEYMAP(
|
[_MI] = KEYMAP(
|
||||||
TO(_BL),MI_VEL_1,MI_VEL_2,MI_VEL_3,MI_VEL_4,MI_VEL_5,MI_VEL_6,MI_VEL_7,MI_VEL_8,MI_VEL_9,MI_VEL_10, MI_CHD, MI_CHU, xxxxxxx, xxxxxxx, xxxxxxx, \
|
TO_BASE,MI_VEL_1,MI_VEL_2,MI_VEL_3,MI_VEL_4,MI_VEL_5,MI_VEL_6,MI_VEL_7,MI_VEL_8,MI_VEL_9,MI_VEL_10, MI_CHD, MI_CHU, xxxxxxx, xxxxxxx, xxxxxxx, \
|
||||||
xxxxxxx, xxxxxxx, MI_Cs, MI_Ds, xxxxxxx, MI_Fs, MI_Gs, MI_As, xxxxxxx, MI_Cs_1, MI_Ds_1, xxxxxxx, MI_Fs_1, xxxxxxx, xxxxxxx, \
|
xxxxxxx, xxxxxxx, MI_Cs, MI_Ds, xxxxxxx, MI_Fs, MI_Gs, MI_As, xxxxxxx, MI_Cs_1, MI_Ds_1, xxxxxxx, MI_Fs_1, xxxxxxx, xxxxxxx, \
|
||||||
MI_MOD, MI_C, MI_D, MI_E, MI_F, MI_G, MI_A, MI_B, MI_C_1, MI_D_1, MI_E_1, MI_F_1, MI_G_1, xxxxxxx, \
|
MI_MOD, MI_C, MI_D, MI_E, MI_F, MI_G, MI_A, MI_B, MI_C_1, MI_D_1, MI_E_1, MI_F_1, MI_G_1, xxxxxxx, \
|
||||||
MI_SUS, xxxxxxx, MI_OCTD, MI_OCTU,MI_MODSD,MI_MODSU, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, MI_TRNSD,MI_TRNSU,MI_TRNS_0, MI_SUS, xxxxxxx, \
|
MI_SUS, xxxxxxx, MI_OCTD, MI_OCTU,MI_MODSD,MI_MODSU, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, MI_TRNSD,MI_TRNSU,MI_TRNS_0, MI_SUS, xxxxxxx, \
|
||||||
xxxxxxx, xxxxxxx, xxxxxxx,xxxxxxx, MI_ALLOFF,MI_ALLOFF, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx,xxxxxxx),
|
xxxxxxx, xxxxxxx, xxxxxxx,xxxxxxx, MI_ALLOFF, MI_ALLOFF, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx),
|
||||||
#elif defined(MIDI_ENABLE) && defined(MIDI_BASIC)
|
#elif defined(MIDI_ENABLE) && defined(MIDI_BASIC)
|
||||||
/* Keymap _MI: MIDI layer (Basic)*/
|
/* Keymap _MI: MIDI layer (Basic)*/
|
||||||
[_MI] = KEYMAP(
|
[_MI] = KEYMAP(
|
||||||
TO(_BL), xxxxxxx, xxxxxxx,xxxxxxx,xxxxxxx,xxxxxxx,xxxxxxx,xxxxxxx,xxxxxxx,xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, \
|
TO_BASE, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, \
|
||||||
xxxxxxx, xxxxxxx, xxxxxxx,xxxxxxx,xxxxxxx,xxxxxxx,xxxxxxx,xxxxxxx,xxxxxxx,xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, \
|
xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, \
|
||||||
xxxxxxx, xxxxxxx, xxxxxxx,xxxxxxx,xxxxxxx,xxxxxxx,xxxxxxx,xxxxxxx,xxxxxxx,xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, \
|
xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, \
|
||||||
xxxxxxx, xxxxxxx, MI_ON, MI_OFF,xxxxxxx,xxxxxxx,xxxxxxx,xxxxxxx,xxxxxxx,xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, \
|
xxxxxxx, xxxxxxx, MI_ON, MI_OFF, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, \
|
||||||
xxxxxxx, xxxxxxx, xxxxxxx,xxxxxxx, xxxxxxx,xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx,xxxxxxx),
|
xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx),
|
||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -125,7 +136,10 @@ void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) {
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
rgblight_mode(1);
|
if (record->event.pressed) {
|
||||||
|
rgblight_mode(1);
|
||||||
|
rgblight_sethsv(206, 255, 255);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -143,7 +157,7 @@ enum layer_id {
|
|||||||
void clueboard_set_led(uint8_t id, uint8_t val) {
|
void clueboard_set_led(uint8_t id, uint8_t val) {
|
||||||
switch (id) {
|
switch (id) {
|
||||||
case LAYER_BASE:
|
case LAYER_BASE:
|
||||||
rgblight_sethsv_noeeprom(346, 0, val);
|
rgblight_sethsv_noeeprom(0, 0, val);
|
||||||
break;
|
break;
|
||||||
case LAYER_FUNCTION:
|
case LAYER_FUNCTION:
|
||||||
rgblight_sethsv_noeeprom(46, 255, val);
|
rgblight_sethsv_noeeprom(46, 255, val);
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
# Layout of @magicmonty
|
# Layout of @magicmonty
|
||||||
|
|
||||||
[Keyboard Layout Editor File](http://www.keyboard-layout-editor.com/#/gists/f869b8789242a712e0f46eabbd550056)
|
[Keyboard Layout Editor File]
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
This layout is a combination of the `mouse_keys` and the `win_optimized` layouts.
|
This layout is a combination of the `mouse_keys` and the `win_optimized` layouts.
|
||||||
This layout is optimized for an ISO layout.
|
This layout is optimized for an ISO layout.
|
||||||
@@ -14,7 +14,9 @@ The Left, Down, Up and Right for the mouse movement are also VIM-Like on the HJK
|
|||||||
|
|
||||||
There is also a MIDI layer included.
|
There is also a MIDI layer included.
|
||||||
|
|
||||||
The CapsLock is disabled and works as Function key.
|
The CapsLock is disabled and works as Escape when tapped and Fn when Hold.
|
||||||
|
The Tab key works as Tab when tapped, and [Hyper] (Ctrl + Alt + Shift + Cmd) when hold
|
||||||
|
The Shift-Keys are configured as [Space Cadet Shift Parentheses]
|
||||||
|
|
||||||
There is also a separate media layer with Volume/Play controls
|
There is also a separate media layer with Volume/Play controls
|
||||||
|
|
||||||
@@ -25,3 +27,8 @@ The different layers are signalled throug setting of the underlight:
|
|||||||
- Media layer: Green
|
- Media layer: Green
|
||||||
- Mouse layer: Blue
|
- Mouse layer: Blue
|
||||||
- Control layer: Red
|
- Control layer: Red
|
||||||
|
- Midi layer: Purple
|
||||||
|
|
||||||
|
[Hyper]: http://brettterpstra.com/2012/12/08/a-useful-caps-lock-key/
|
||||||
|
[Space Cadet Shift Parentheses]: http://stevelosh.com/blog/2012/10/a-modern-space-cadet/#shift-parentheses
|
||||||
|
[Keyboard Layout Editor File]: http://www.keyboard-layout-editor.com/#/gists/f869b8789242a712e0f46eabbd550056
|
||||||
@@ -25,43 +25,90 @@
|
|||||||
#include "lcd_backlight_keyframes.h"
|
#include "lcd_backlight_keyframes.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef LED_ENABLE
|
#ifdef BACKLIGHT_ENABLE
|
||||||
#include "led_keyframes.h"
|
#include "led_keyframes.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "visualizer_keyframes.h"
|
#include "visualizer_keyframes.h"
|
||||||
|
|
||||||
|
|
||||||
#if defined(LCD_ENABLE) && defined(LCD_BACKLIGHT_ENABLE)
|
#if defined(LCD_ENABLE) || defined(LCD_BACKLIGHT_ENABLE) || defined(BACKLIGHT_ENABLE)
|
||||||
|
|
||||||
|
static bool keyframe_enable(keyframe_animation_t* animation, visualizer_state_t* state) {
|
||||||
|
#ifdef LCD_ENABLE
|
||||||
|
lcd_keyframe_enable(animation, state);
|
||||||
|
#endif
|
||||||
|
#ifdef LCD_BACKLIGHT_ENABLE
|
||||||
|
backlight_keyframe_enable(animation, state);
|
||||||
|
#endif
|
||||||
|
#ifdef BACKLIGHT_ENABLE
|
||||||
|
led_keyframe_enable(animation, state);
|
||||||
|
#endif
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
static bool keyframe_disable(keyframe_animation_t* animation, visualizer_state_t* state) {
|
||||||
|
#ifdef LCD_ENABLE
|
||||||
|
lcd_keyframe_disable(animation, state);
|
||||||
|
#endif
|
||||||
|
#ifdef LCD_BACKLIGHT_ENABLE
|
||||||
|
backlight_keyframe_disable(animation, state);
|
||||||
|
#endif
|
||||||
|
#ifdef BACKLIGHT_ENABLE
|
||||||
|
led_keyframe_disable(animation, state);
|
||||||
|
#endif
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
static bool keyframe_fade_in(keyframe_animation_t* animation, visualizer_state_t* state) {
|
||||||
|
bool ret = false;
|
||||||
|
#ifdef LCD_BACKLIGHT_ENABLE
|
||||||
|
ret |= backlight_keyframe_animate_color(animation, state);
|
||||||
|
#endif
|
||||||
|
#ifdef BACKLIGHT_ENABLE
|
||||||
|
ret |= led_keyframe_fade_in_all(animation, state);
|
||||||
|
#endif
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
static bool keyframe_fade_out(keyframe_animation_t* animation, visualizer_state_t* state) {
|
||||||
|
bool ret = false;
|
||||||
|
#ifdef LCD_BACKLIGHT_ENABLE
|
||||||
|
ret |= backlight_keyframe_animate_color(animation, state);
|
||||||
|
#endif
|
||||||
|
#ifdef BACKLIGHT_ENABLE
|
||||||
|
ret |= led_keyframe_fade_out_all(animation, state);
|
||||||
|
#endif
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// Don't worry, if the startup animation is long, you can use the keyboard like normal
|
// Don't worry, if the startup animation is long, you can use the keyboard like normal
|
||||||
// during that time
|
// during that time
|
||||||
keyframe_animation_t default_startup_animation = {
|
keyframe_animation_t default_startup_animation = {
|
||||||
.num_frames = 4,
|
.num_frames = 3,
|
||||||
.loop = false,
|
.loop = false,
|
||||||
.frame_lengths = {0, 0, 0, gfxMillisecondsToTicks(5000), 0},
|
.frame_lengths = {0, 0, gfxMillisecondsToTicks(5000)},
|
||||||
.frame_functions = {
|
.frame_functions = {
|
||||||
lcd_keyframe_enable,
|
keyframe_enable,
|
||||||
backlight_keyframe_enable,
|
|
||||||
lcd_keyframe_draw_logo,
|
lcd_keyframe_draw_logo,
|
||||||
backlight_keyframe_animate_color,
|
keyframe_fade_in,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
keyframe_animation_t default_suspend_animation = {
|
keyframe_animation_t default_suspend_animation = {
|
||||||
.num_frames = 4,
|
.num_frames = 3,
|
||||||
.loop = false,
|
.loop = false,
|
||||||
.frame_lengths = {0, gfxMillisecondsToTicks(1000), 0, 0},
|
.frame_lengths = {0, gfxMillisecondsToTicks(1000), 0},
|
||||||
.frame_functions = {
|
.frame_functions = {
|
||||||
lcd_keyframe_display_layer_text,
|
lcd_keyframe_display_layer_text,
|
||||||
backlight_keyframe_animate_color,
|
keyframe_fade_out,
|
||||||
lcd_keyframe_disable,
|
keyframe_disable,
|
||||||
backlight_keyframe_disable,
|
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(LED_ENABLE)
|
#if defined(BACKLIGHT_ENABLE)
|
||||||
#define CROSSFADE_TIME 1000
|
#define CROSSFADE_TIME 1000
|
||||||
#define GRADIENT_TIME 3000
|
#define GRADIENT_TIME 3000
|
||||||
|
|
||||||
|
|||||||
@@ -43,7 +43,7 @@ extern const uint8_t CIE1931_CURVE[];
|
|||||||
#define GDISP_INITIAL_CONTRAST 0
|
#define GDISP_INITIAL_CONTRAST 0
|
||||||
#endif
|
#endif
|
||||||
#ifndef GDISP_INITIAL_BACKLIGHT
|
#ifndef GDISP_INITIAL_BACKLIGHT
|
||||||
#define GDISP_INITIAL_BACKLIGHT 100
|
#define GDISP_INITIAL_BACKLIGHT 0
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define GDISP_FLG_NEEDFLUSH (GDISP_FLG_DRIVER<<0)
|
#define GDISP_FLG_NEEDFLUSH (GDISP_FLG_DRIVER<<0)
|
||||||
@@ -173,7 +173,7 @@ LLDSPEC bool_t gdisp_lld_init(GDisplay *g) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// software shutdown disable (i.e. turn stuff on)
|
// software shutdown disable (i.e. turn stuff on)
|
||||||
write_register(g, IS31_FUNCTIONREG, IS31_REG_SHUTDOWN, IS31_REG_SHUTDOWN_ON);
|
write_register(g, IS31_FUNCTIONREG, IS31_REG_SHUTDOWN, IS31_REG_SHUTDOWN_OFF);
|
||||||
gfxSleepMilliseconds(10);
|
gfxSleepMilliseconds(10);
|
||||||
|
|
||||||
// Finish Init
|
// Finish Init
|
||||||
@@ -183,7 +183,7 @@ LLDSPEC bool_t gdisp_lld_init(GDisplay *g) {
|
|||||||
g->g.Width = GDISP_SCREEN_WIDTH;
|
g->g.Width = GDISP_SCREEN_WIDTH;
|
||||||
g->g.Height = GDISP_SCREEN_HEIGHT;
|
g->g.Height = GDISP_SCREEN_HEIGHT;
|
||||||
g->g.Orientation = GDISP_ROTATE_0;
|
g->g.Orientation = GDISP_ROTATE_0;
|
||||||
g->g.Powermode = powerOn;
|
g->g.Powermode = powerOff;
|
||||||
g->g.Backlight = GDISP_INITIAL_BACKLIGHT;
|
g->g.Backlight = GDISP_INITIAL_BACKLIGHT;
|
||||||
g->g.Contrast = GDISP_INITIAL_CONTRAST;
|
g->g.Contrast = GDISP_INITIAL_CONTRAST;
|
||||||
return TRUE;
|
return TRUE;
|
||||||
@@ -204,7 +204,8 @@ LLDSPEC bool_t gdisp_lld_init(GDisplay *g) {
|
|||||||
uint8_t* src = PRIV(g)->frame_buffer;
|
uint8_t* src = PRIV(g)->frame_buffer;
|
||||||
for (int y=0;y<GDISP_SCREEN_HEIGHT;y++) {
|
for (int y=0;y<GDISP_SCREEN_HEIGHT;y++) {
|
||||||
for (int x=0;x<GDISP_SCREEN_WIDTH;x++) {
|
for (int x=0;x<GDISP_SCREEN_WIDTH;x++) {
|
||||||
PRIV(g)->write_buffer[get_led_address(g, x, y)]=CIE1931_CURVE[*src];
|
uint8_t val = (uint16_t)*src * g->g.Backlight / 100;
|
||||||
|
PRIV(g)->write_buffer[get_led_address(g, x, y)]=CIE1931_CURVE[val];
|
||||||
++src;
|
++src;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -297,8 +298,13 @@ LLDSPEC bool_t gdisp_lld_init(GDisplay *g) {
|
|||||||
g->g.Orientation = (orientation_t)g->p.ptr;
|
g->g.Orientation = (orientation_t)g->p.ptr;
|
||||||
return;
|
return;
|
||||||
|
|
||||||
case GDISP_CONTROL_CONTRAST:
|
case GDISP_CONTROL_BACKLIGHT:
|
||||||
return;
|
if (g->g.Backlight == (unsigned)g->p.ptr)
|
||||||
|
return;
|
||||||
|
unsigned val = (unsigned)g->p.ptr;
|
||||||
|
g->g.Backlight = val > 100 ? 100 : val;
|
||||||
|
g->flags |= GDISP_FLG_NEEDFLUSH;
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif // GDISP_NEED_CONTROL
|
#endif // GDISP_NEED_CONTROL
|
||||||
|
|||||||
@@ -62,15 +62,10 @@ CUSTOM_MATRIX ?= yes # Custom matrix file
|
|||||||
SERIAL_LINK_ENABLE = yes
|
SERIAL_LINK_ENABLE = yes
|
||||||
VISUALIZER_ENABLE ?= yes
|
VISUALIZER_ENABLE ?= yes
|
||||||
LCD_ENABLE ?= yes
|
LCD_ENABLE ?= yes
|
||||||
LED_ENABLE ?= no
|
BACKLIGHT_ENABLE ?= yes
|
||||||
LCD_BACKLIGHT_ENABLE ?= yes
|
LCD_BACKLIGHT_ENABLE ?= yes
|
||||||
MIDI_ENABLE = no
|
MIDI_ENABLE = no
|
||||||
RGBLIGHT_ENABLE = no
|
RGBLIGHT_ENABLE = no
|
||||||
|
|
||||||
ifdef LCD_ENABLE
|
|
||||||
include $(SUBPROJECT_PATH)/drivers/gdisp/st7565ergodox/driver.mk
|
include $(SUBPROJECT_PATH)/drivers/gdisp/st7565ergodox/driver.mk
|
||||||
endif
|
include $(SUBPROJECT_PATH)/drivers/gdisp/IS31FL3731C/driver.mk
|
||||||
|
|
||||||
ifdef LED_ENABLE
|
|
||||||
include $(SUBPROJECT_PATH)/drivers/gdisp/IS31FL3731C/driver.mk
|
|
||||||
endif
|
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
SUBPROJECT_DEFAULT = infinity
|
SUBPROJECT_DEFAULT = infinity
|
||||||
LCD_BACKLIGHT_ENABLE = yes
|
LCD_BACKLIGHT_ENABLE = yes
|
||||||
LCD_ENABLE = yes
|
LCD_ENABLE = yes
|
||||||
LED_ENABLE = yes
|
BACKLIGHT_ENABLE = yes
|
||||||
BACKLIGHT_ENABLE = yes
|
BACKLIGHT_ENABLE = yes
|
||||||
NKRO_ENABLE = yes
|
NKRO_ENABLE = yes
|
||||||
TAP_DANCE_ENABLE = yes
|
TAP_DANCE_ENABLE = yes
|
||||||
|
|||||||
@@ -0,0 +1,21 @@
|
|||||||
|
MIT License
|
||||||
|
|
||||||
|
Copyright (c) 2016 Kaleb Elwert
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
TAP_DANCE_ENABLE=yes
|
||||||
|
UNICODE_ENABLE=yes
|
||||||
|
|
||||||
|
ifndef QUANTUM_DIR
|
||||||
|
include ../../../../Makefile
|
||||||
|
endif
|
||||||
@@ -0,0 +1,79 @@
|
|||||||
|
# Belak's Ergodox Layout
|
||||||
|
|
||||||
|
This has been based off of [emacs\_osx\_dk](https://github.com/jackhumbert/qmk_firmware/tree/master/keyboards/ergodox/keymaps/emacs_osx_dk)
|
||||||
|
from the main qmk repo. However, I've taken some of the ideas for the thumbs
|
||||||
|
from [dvorak\_emacs](https://github.com/jackhumbert/qmk_firmware/tree/master/keyboards/ergodox/keymaps/dvorak_emacs)
|
||||||
|
and tweaked it a bit based on the keycaps I have.
|
||||||
|
|
||||||
|
This keyboard is intended for use in emacs (one of the main reasons for easy
|
||||||
|
access to modifiers) but it could be useful in other instances as well.
|
||||||
|
|
||||||
|
The main repo is used as a testbed, so sometimes the layout may be in a strange
|
||||||
|
state. The qmk version should be relatively stable.
|
||||||
|
|
||||||
|
## Instructions
|
||||||
|
|
||||||
|
This is currently being used on a regular ergodox, but it should work fine on
|
||||||
|
the infinity as well. Though, you may have to modify the commands to build and
|
||||||
|
flash the firmware to match the separate halves as defined in the infinity
|
||||||
|
documentation.
|
||||||
|
|
||||||
|
If you are using this keymap in the qmk repo, you should be able to just run
|
||||||
|
`make ergodox-belak-teensy`. If you're using this externally (I sometimes make
|
||||||
|
changes before syncing them to qmk), use the following instructions:
|
||||||
|
|
||||||
|
1. Clone the main qmk repo
|
||||||
|
2. Clone this to `$QMK/keyboards/ergodox/keymaps/belak-external`
|
||||||
|
3. Run `make ergodox-belak-external-teensy` from the root of the qmk repo.
|
||||||
|
|
||||||
|
## Changelog
|
||||||
|
|
||||||
|
Fifth Revision
|
||||||
|
|
||||||
|
* Change layer keys to tap-dance keys which cycle through additional layers
|
||||||
|
* Add a few emoji keys (in preparation for an emoji layer)
|
||||||
|
|
||||||
|
Fourth Revision
|
||||||
|
|
||||||
|
* Remove media layer
|
||||||
|
* Add a layer which swaps control and gui on the thumb keys.
|
||||||
|
* Add some basic code to save settings to the eeprom
|
||||||
|
* Save the state of the keys swapped in the thumb in the eeprom
|
||||||
|
|
||||||
|
Third Revision
|
||||||
|
|
||||||
|
* Add numpad layer and remove numpad from symbols layer
|
||||||
|
* Disable media layer
|
||||||
|
* Add arrow keys on ijkl to the symbols layer
|
||||||
|
* Replace ALT on held enter and held delete with GUI (for better OSX
|
||||||
|
compatibility, as there's already an ALT key relatively close)
|
||||||
|
* Replace keys above enter and delete with temporary layer switch buttons not
|
||||||
|
matching the other layer switch for that hand.
|
||||||
|
* Reindent and space out most of the layer definitions
|
||||||
|
|
||||||
|
Second Revision
|
||||||
|
|
||||||
|
* Clean up definitions to make differences between layers easier to see
|
||||||
|
* Remove old LCD code
|
||||||
|
* Add new LCD code based on fredizzimo's branch
|
||||||
|
|
||||||
|
First Revision
|
||||||
|
|
||||||
|
* Reverse grave and escape
|
||||||
|
|
||||||
|
Initial Version
|
||||||
|
|
||||||
|
* Copy from emacs\_osx\_dk
|
||||||
|
* "Fix" right alt
|
||||||
|
* Change thumb keys to match default layout (backspace, delete, enter, space)
|
||||||
|
* Add modifiers to thumb keys (ctrl to backspace and space, alt to delete and
|
||||||
|
enter)
|
||||||
|
* Replace the RAlt below the brackets with LGui and RGui
|
||||||
|
* Remove LCtrl and RCtrl from the keys above shift
|
||||||
|
* Add browser forward, and move browser back
|
||||||
|
* "Fix" the order of volume keys
|
||||||
|
|
||||||
|
## Repository
|
||||||
|
|
||||||
|
The original code for this is kept at https://github.com/belak/ergodox-layout and
|
||||||
|
is synced to qmk every few main revisions.
|
||||||
@@ -0,0 +1,368 @@
|
|||||||
|
#include "ergodox.h"
|
||||||
|
#include "debug.h"
|
||||||
|
#include "action_layer.h"
|
||||||
|
#include "eeconfig.h"
|
||||||
|
#include "eeprom.h"
|
||||||
|
|
||||||
|
#define LAYER_ON(pos) ((layer_state) & (1<<(pos)))
|
||||||
|
#define _______ KC_TRNS
|
||||||
|
|
||||||
|
#define EECONFIG_BELAK_MAGIC (uint16_t)0xBE42
|
||||||
|
|
||||||
|
// NOTE: This is just a number that's a bit beyond the end of what's already
|
||||||
|
// defined. As there is no other define we can base this on, it may need to be
|
||||||
|
// changed in the future. The initial value here is used as a placeholder with a
|
||||||
|
// magic word, similar to the normal eeconfig. Note that all the storage being
|
||||||
|
// used needs to fit inside the 32 bytes of the Ergodox Infinity.
|
||||||
|
#define EECONFIG_BELAK (uint16_t *)16
|
||||||
|
|
||||||
|
// The correct way to do this would be how the normal eeconfig handles it and
|
||||||
|
// use a bitfield. However, the eeprom has a ton of space which isn't being
|
||||||
|
// used so I don't really care and have a separate byte for every setting.
|
||||||
|
#define EECONFIG_BELAK_SWAP_GUI_CTRL (uint8_t *)18
|
||||||
|
|
||||||
|
static uint8_t swap_gui_ctrl = 0;
|
||||||
|
static uint8_t td_led_override = 0;
|
||||||
|
|
||||||
|
enum belak_keycodes {
|
||||||
|
// Function codes
|
||||||
|
BEL_F0 = SAFE_RANGE,
|
||||||
|
BEL_F1,
|
||||||
|
|
||||||
|
E_SHRUG,
|
||||||
|
E_TFLIP,
|
||||||
|
E_TSET,
|
||||||
|
};
|
||||||
|
|
||||||
|
inline void tap(uint16_t keycode) {
|
||||||
|
register_code(keycode);
|
||||||
|
unregister_code(keycode);
|
||||||
|
};
|
||||||
|
|
||||||
|
// TODO: Add LED support to the tap dance by using the advanced macro
|
||||||
|
#define LTOGGLE TD(TD_LAYER_TOGGLE)
|
||||||
|
|
||||||
|
#define BASE 0 // default layer
|
||||||
|
#define SYMB 1 // symbols
|
||||||
|
#define NUMP 2 // numpad
|
||||||
|
#define SWPH 3 // swap gui/ctrl on the hands
|
||||||
|
|
||||||
|
enum belak_td {
|
||||||
|
TD_LAYER_TOGGLE = 0,
|
||||||
|
};
|
||||||
|
|
||||||
|
void belak_td_each(qk_tap_dance_state_t *state, void *user_data);
|
||||||
|
void belak_td_finished(qk_tap_dance_state_t *state, void *user_data);
|
||||||
|
void belak_td_reset(qk_tap_dance_state_t *state, void *user_data);
|
||||||
|
|
||||||
|
qk_tap_dance_action_t tap_dance_actions[] = {
|
||||||
|
[TD_LAYER_TOGGLE] = ACTION_TAP_DANCE_FN_ADVANCED(belak_td_each, belak_td_finished, belak_td_reset),
|
||||||
|
};
|
||||||
|
|
||||||
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
/* Keymap 0: Basic layer
|
||||||
|
*
|
||||||
|
* ,--------------------------------------------------. ,--------------------------------------------------.
|
||||||
|
* | Esc | 1 | 2 | 3 | 4 | 5 | L1 | | L2 | 6 | 7 | 8 | 9 | 0 | = |
|
||||||
|
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
|
||||||
|
* | Tab | Q | W | E | R | T | [ | | ] | Y | U | I | O | P | - |
|
||||||
|
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||||
|
* | \ | A | S | D | F | G |------| |------| H | J | K | L | ; | ' |
|
||||||
|
* |--------+------+------+------+------+------| LGui | | RGui |------+------+------+------+------+--------|
|
||||||
|
* | LShift | Z | X | C | V | B | | | | N | M | , | . | / | RShift |
|
||||||
|
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
|
||||||
|
* |Layers| LCtrl| Left | Right| LAlt | | RAlt | Up | Down | RCtrl|Layers|
|
||||||
|
* `----------------------------------' `----------------------------------'
|
||||||
|
* ,-------------. ,--------------.
|
||||||
|
* | ~L2 | Ins | | Grv | ~L1 |
|
||||||
|
* ,-------|------|------| |------+-------+-------.
|
||||||
|
* | Back | | Home | | PgUp | | |
|
||||||
|
* | Space | Del |------| |------| Enter | Space |
|
||||||
|
* | | | End | | PgDn | | |
|
||||||
|
* `---------------------' `----------------------'
|
||||||
|
*/
|
||||||
|
[BASE] = KEYMAP( // layer 0 : default
|
||||||
|
// left hand
|
||||||
|
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, TG(SYMB),
|
||||||
|
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_LBRC,
|
||||||
|
CTL_T(KC_BSLS), KC_A, KC_S, KC_D, KC_F, KC_G,
|
||||||
|
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_LGUI,
|
||||||
|
LTOGGLE, KC_LCTRL, KC_LEFT,KC_RGHT,KC_LALT,
|
||||||
|
MO(NUMP),KC_INS,
|
||||||
|
KC_HOME,
|
||||||
|
CTL_T(KC_BSPC),GUI_T(KC_DEL),KC_END,
|
||||||
|
// right hand
|
||||||
|
TG(NUMP), KC_6, KC_7, KC_8, KC_9, KC_0, KC_EQL,
|
||||||
|
KC_RBRC, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_MINS,
|
||||||
|
KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
|
||||||
|
KC_RGUI, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_RSFT,
|
||||||
|
KC_RALT,KC_UP, KC_DOWN,KC_RCTRL, LTOGGLE,
|
||||||
|
KC_GRV, MO(SYMB),
|
||||||
|
KC_PGUP,
|
||||||
|
KC_PGDN, GUI_T(KC_ENT), CTL_T(KC_SPC)
|
||||||
|
),
|
||||||
|
/* Keymap 1: Symbol Layer
|
||||||
|
*
|
||||||
|
* ,--------------------------------------------------. ,--------------------------------------------------.
|
||||||
|
* | | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | F11 |
|
||||||
|
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
|
||||||
|
* | | ! | @ | { | } | | | | | | Up | | Up | | | F12 |
|
||||||
|
* |--------+------+------+------+------+------| TFLIP| | TSET |------+------+------+------+------+--------|
|
||||||
|
* | | # | $ | ( | ) | ` |------| |------| Down | Left | Down | Rght | | |
|
||||||
|
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||||
|
* | | % | ^ | [ | ] | ~ | SHRUG| | | & | | | | | |
|
||||||
|
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
|
||||||
|
* |LClear| | | | | | | | | |LClear|
|
||||||
|
* `----------------------------------' `----------------------------------'
|
||||||
|
* ,-------------. ,-------------.
|
||||||
|
* | TOGL | | | | TOGL |
|
||||||
|
* ,------|------|------| |------+------+------.
|
||||||
|
* | | | | | | | |
|
||||||
|
* | | |------| |------| | |
|
||||||
|
* | | | | | | | |
|
||||||
|
* `--------------------' `--------------------'
|
||||||
|
*/
|
||||||
|
[SYMB] = KEYMAP(
|
||||||
|
// left hand
|
||||||
|
_______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, E_TFLIP,
|
||||||
|
_______, KC_EXLM, KC_AT, KC_LCBR, KC_RCBR, KC_PIPE, E_TSET,
|
||||||
|
_______, KC_HASH, KC_DLR, KC_LPRN, KC_RPRN, KC_GRV,
|
||||||
|
_______, KC_PERC, KC_CIRC, KC_LBRC, KC_RBRC, KC_TILD, E_SHRUG,
|
||||||
|
BEL_F1, _______, _______, _______, _______,
|
||||||
|
BEL_F0, _______,
|
||||||
|
_______,
|
||||||
|
_______, _______, _______,
|
||||||
|
// right hand
|
||||||
|
_______, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
|
||||||
|
_______, KC_UP, _______, KC_UP, _______, _______, KC_F12,
|
||||||
|
KC_DOWN, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______,
|
||||||
|
_______, KC_AMPR, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, BEL_F1,
|
||||||
|
_______, BEL_F0,
|
||||||
|
_______,
|
||||||
|
_______, _______, _______
|
||||||
|
),
|
||||||
|
/* Keymap 2: Numpad Layer
|
||||||
|
*
|
||||||
|
* ,--------------------------------------------------. ,--------------------------------------------------.
|
||||||
|
* | | | | | | | | | | | | | | | |
|
||||||
|
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
|
||||||
|
* | | | | | | | | | | | 7 | 8 | 9 | * | |
|
||||||
|
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||||
|
* | | | | | | |------| |------| | 4 | 5 | 6 | + | |
|
||||||
|
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||||
|
* | | | | | | | | | | | 1 | 2 | 3 | \ | |
|
||||||
|
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
|
||||||
|
* |LClear| | | | | | 0 | 0 | . | = |LClear|
|
||||||
|
* `----------------------------------' `----------------------------------'
|
||||||
|
* ,-------------. ,-------------.
|
||||||
|
* | TOGL | | | | TOGL |
|
||||||
|
* ,------|------|------| |------+------+------.
|
||||||
|
* | | | | | | | |
|
||||||
|
* | | |------| |------| | |
|
||||||
|
* | | | | | | | |
|
||||||
|
* `--------------------' `--------------------'
|
||||||
|
*/
|
||||||
|
[NUMP] = KEYMAP(
|
||||||
|
// left hand
|
||||||
|
_______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______,
|
||||||
|
BEL_F1, _______, _______, _______, _______,
|
||||||
|
BEL_F0, _______,
|
||||||
|
_______,
|
||||||
|
_______, _______, _______,
|
||||||
|
// right hand
|
||||||
|
_______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, KC_7, KC_8, KC_9, KC_ASTR, _______,
|
||||||
|
_______, KC_4, KC_5, KC_6, KC_PLUS, _______,
|
||||||
|
_______, _______, KC_1, KC_2, KC_3, KC_BSLS, _______,
|
||||||
|
KC_0, KC_0, KC_DOT, KC_EQL, BEL_F1,
|
||||||
|
_______, BEL_F0,
|
||||||
|
_______,
|
||||||
|
_______, _______, _______
|
||||||
|
),
|
||||||
|
/* Keymap 3: Swap control and gui on the thumb */
|
||||||
|
[SWPH] = KEYMAP(
|
||||||
|
// left hand
|
||||||
|
_______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______,
|
||||||
|
_______, _______,
|
||||||
|
_______,
|
||||||
|
GUI_T(KC_BSPC), CTL_T(KC_DEL), _______,
|
||||||
|
// right hand
|
||||||
|
_______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______,
|
||||||
|
_______, _______,
|
||||||
|
_______,
|
||||||
|
_______, CTL_T(KC_ENT), GUI_T(KC_SPC)
|
||||||
|
),
|
||||||
|
};
|
||||||
|
|
||||||
|
// Runs just one time when the keyboard initializes.
|
||||||
|
void matrix_init_user(void) {
|
||||||
|
// If our magic word wasn't set properly, we need to zero out the settings.
|
||||||
|
if (eeprom_read_word(EECONFIG_BELAK) != EECONFIG_BELAK_MAGIC) {
|
||||||
|
eeprom_update_word(EECONFIG_BELAK, EECONFIG_BELAK_MAGIC);
|
||||||
|
eeprom_update_byte(EECONFIG_BELAK_SWAP_GUI_CTRL, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (eeprom_read_byte(EECONFIG_BELAK_SWAP_GUI_CTRL)) {
|
||||||
|
layer_on(SWPH);
|
||||||
|
swap_gui_ctrl = 1;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// Runs constantly in the background, in a loop.
|
||||||
|
void matrix_scan_user(void) {
|
||||||
|
ergodox_board_led_off();
|
||||||
|
ergodox_right_led_1_off();
|
||||||
|
ergodox_right_led_2_off();
|
||||||
|
ergodox_right_led_3_off();
|
||||||
|
|
||||||
|
switch (td_led_override) {
|
||||||
|
case 1:
|
||||||
|
ergodox_right_led_1_on();
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
ergodox_right_led_2_on();
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
// Layer 1 and 2 are both overlay layers, so they could both be on. This
|
||||||
|
// means we can't use the lazy check of checking for the first significant
|
||||||
|
// bit.
|
||||||
|
if (LAYER_ON(SYMB)) {
|
||||||
|
ergodox_right_led_1_on();
|
||||||
|
}
|
||||||
|
if (LAYER_ON(NUMP)) {
|
||||||
|
ergodox_right_led_2_on();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||||
|
switch (keycode) {
|
||||||
|
case BEL_F0:
|
||||||
|
if(record->event.pressed){
|
||||||
|
swap_gui_ctrl = !swap_gui_ctrl;
|
||||||
|
eeprom_update_byte(EECONFIG_BELAK_SWAP_GUI_CTRL, swap_gui_ctrl);
|
||||||
|
|
||||||
|
if (swap_gui_ctrl) {
|
||||||
|
layer_on(SWPH);
|
||||||
|
} else {
|
||||||
|
layer_off(SWPH);
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case BEL_F1:
|
||||||
|
if(record->event.pressed){
|
||||||
|
layer_off(SYMB);
|
||||||
|
layer_off(NUMP);
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case E_SHRUG: // ¯\_(ツ)_/¯
|
||||||
|
if (record->event.pressed) {
|
||||||
|
process_unicode((0x00AF|QK_UNICODE), record); // Hand
|
||||||
|
tap(KC_BSLS); // Arm
|
||||||
|
register_code(KC_RSFT);
|
||||||
|
tap(KC_UNDS); // Arm
|
||||||
|
tap(KC_LPRN); // Head
|
||||||
|
unregister_code(KC_RSFT);
|
||||||
|
process_unicode((0x30C4|QK_UNICODE), record); // Face
|
||||||
|
register_code(KC_RSFT);
|
||||||
|
tap(KC_RPRN); // Head
|
||||||
|
tap(KC_UNDS); // Arm
|
||||||
|
unregister_code(KC_RSFT);
|
||||||
|
tap(KC_SLSH); // Arm
|
||||||
|
process_unicode((0x00AF|QK_UNICODE), record); // Hand
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
break;
|
||||||
|
case E_TFLIP: // (╯°□°)╯ ︵ ┻━┻
|
||||||
|
if (record->event.pressed) {
|
||||||
|
register_code(KC_RSFT);
|
||||||
|
tap(KC_9);
|
||||||
|
unregister_code(KC_RSFT);
|
||||||
|
process_unicode((0x256F|QK_UNICODE), record); // Arm
|
||||||
|
process_unicode((0x00B0|QK_UNICODE), record); // Eye
|
||||||
|
process_unicode((0x25A1|QK_UNICODE), record); // Mouth
|
||||||
|
process_unicode((0x00B0|QK_UNICODE), record); // Eye
|
||||||
|
register_code(KC_RSFT);
|
||||||
|
tap(KC_0);
|
||||||
|
unregister_code(KC_RSFT);
|
||||||
|
process_unicode((0x256F|QK_UNICODE), record); // Arm
|
||||||
|
tap(KC_SPC);
|
||||||
|
process_unicode((0x0361|QK_UNICODE), record); // Flippy
|
||||||
|
tap(KC_SPC);
|
||||||
|
process_unicode((0x253B|QK_UNICODE), record); // Table
|
||||||
|
process_unicode((0x2501|QK_UNICODE), record); // Table
|
||||||
|
process_unicode((0x253B|QK_UNICODE), record); // Table
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
break;
|
||||||
|
case E_TSET: // ┬──┬ ノ( ゜-゜ノ)
|
||||||
|
if (record->event.pressed) {
|
||||||
|
process_unicode((0x252C|QK_UNICODE), record); // Table
|
||||||
|
process_unicode((0x2500|QK_UNICODE), record); // Table
|
||||||
|
process_unicode((0x2500|QK_UNICODE), record); // Table
|
||||||
|
process_unicode((0x252C|QK_UNICODE), record); // Table
|
||||||
|
tap(KC_SPC);
|
||||||
|
process_unicode((0x30CE|QK_UNICODE), record); // Arm
|
||||||
|
register_code(KC_RSFT);
|
||||||
|
tap(KC_9);
|
||||||
|
unregister_code(KC_RSFT);
|
||||||
|
tap(KC_SPC);
|
||||||
|
process_unicode((0x309C|QK_UNICODE), record); // Eye
|
||||||
|
tap(KC_MINS);
|
||||||
|
process_unicode((0x309C|QK_UNICODE), record); // Eye
|
||||||
|
process_unicode((0x30CE|QK_UNICODE), record); // Arm
|
||||||
|
register_code(KC_RSFT);
|
||||||
|
tap(KC_0);
|
||||||
|
unregister_code(KC_RSFT);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void belak_td_each(qk_tap_dance_state_t *state, void *user_data) {
|
||||||
|
switch (state->count) {
|
||||||
|
case 1:
|
||||||
|
td_led_override = 1;
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
td_led_override = 2;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
reset_tap_dance(state);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void belak_td_finished(qk_tap_dance_state_t *state, void *user_data) {
|
||||||
|
switch (state->count) {
|
||||||
|
case 1:
|
||||||
|
layer_on(SYMB);
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
layer_on(NUMP);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
td_led_override = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void belak_td_reset(qk_tap_dance_state_t *state, void *user_data) {
|
||||||
|
td_led_override = 0;
|
||||||
|
}
|
||||||
@@ -0,0 +1,49 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2017 Fred Sundvik
|
||||||
|
|
||||||
|
This program is free software: you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation, either version 2 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Currently we are assuming that both the backlight and LCD are enabled
|
||||||
|
// But it's entirely possible to write a custom visualizer that use only
|
||||||
|
// one of them
|
||||||
|
#ifndef LCD_BACKLIGHT_ENABLE
|
||||||
|
#error This visualizer needs that LCD backlight is enabled
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef LCD_ENABLE
|
||||||
|
#error This visualizer needs that LCD is enabled
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "simple_visualizer.h"
|
||||||
|
|
||||||
|
static void get_visualizer_layer_and_color(visualizer_state_t* state) {
|
||||||
|
uint8_t saturation = 60;
|
||||||
|
if (state->status.leds & (1u << USB_LED_CAPS_LOCK)) {
|
||||||
|
saturation = 255;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (state->status.layer & 0x4) {
|
||||||
|
state->target_lcd_color = LCD_COLOR(0, saturation, 0xFF);
|
||||||
|
state->layer_text = "Media";
|
||||||
|
}
|
||||||
|
else if (state->status.layer & 0x2) {
|
||||||
|
state->target_lcd_color = LCD_COLOR(168, saturation, 0xFF);
|
||||||
|
state->layer_text = "Symbols";
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
state->target_lcd_color = LCD_COLOR(84, saturation, 0xFF);
|
||||||
|
state->layer_text = "Base";
|
||||||
|
}
|
||||||
|
}
|
||||||
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
@@ -54,7 +54,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||||||
//#define INFINITY_PROTOTYPE
|
//#define INFINITY_PROTOTYPE
|
||||||
|
|
||||||
/* Keymap for Infinity 1.1a (first revision with LED support) */
|
/* Keymap for Infinity 1.1a (first revision with LED support) */
|
||||||
//#define INFINITY_LED
|
#define INFINITY_LED
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Feature disable options
|
* Feature disable options
|
||||||
|
|||||||
@@ -76,7 +76,7 @@
|
|||||||
* @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 TRUE
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -139,7 +139,7 @@
|
|||||||
* @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 TRUE
|
#define HAL_USE_SERIAL_USB FALSE
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -0,0 +1,4 @@
|
|||||||
|
|
||||||
|
ifndef QUANTUM_DIR
|
||||||
|
include ../../../../Makefile
|
||||||
|
endif
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
#ifndef CONFIG_USER_H
|
||||||
|
#define CONFIG_USER_H
|
||||||
|
|
||||||
|
|
||||||
|
#include "../../config.h"
|
||||||
|
|
||||||
|
//overrides
|
||||||
|
#undef TAPPING_TOGGLE
|
||||||
|
#define TAPPING_TOGGLE 2
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -0,0 +1,304 @@
|
|||||||
|
#include "infinity60.h"
|
||||||
|
#include "led_controller.h"
|
||||||
|
|
||||||
|
//Helpful Defines
|
||||||
|
#define _______ KC_TRNS
|
||||||
|
|
||||||
|
//Define Layer Names
|
||||||
|
#define _BASE 0
|
||||||
|
#define _NUMPAD 1
|
||||||
|
#define _FNAV 2
|
||||||
|
#define _MEDIA 3
|
||||||
|
#define _TILDE 4
|
||||||
|
|
||||||
|
//IS31 chip has 8 available led pages, using 0 for all leds and 7 for single toggles
|
||||||
|
#define max_pages 6
|
||||||
|
|
||||||
|
enum ic60_keycodes {
|
||||||
|
NUMPAD,
|
||||||
|
FNAV,
|
||||||
|
MEDIA,
|
||||||
|
TILDE,
|
||||||
|
CTLALTDEL,
|
||||||
|
BACKLIGHT,
|
||||||
|
BRIGHT,
|
||||||
|
DIM,
|
||||||
|
ALL,
|
||||||
|
GAME,
|
||||||
|
MODE_SINGLE,
|
||||||
|
MODE_PAGE,
|
||||||
|
MODE_FLASH
|
||||||
|
};
|
||||||
|
|
||||||
|
uint8_t current_layer_global = 0;
|
||||||
|
uint8_t led_mode_global = MODE_SINGLE;
|
||||||
|
uint8_t backlight_status_global = 1; //init on/off state of backlight
|
||||||
|
uint32_t led_layer_state = 0;
|
||||||
|
|
||||||
|
/* ==================================
|
||||||
|
* KEYMAPS
|
||||||
|
* ==================================*/
|
||||||
|
|
||||||
|
const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
/* Layer 0: Default Layer
|
||||||
|
* ,-----------------------------------------------------------.
|
||||||
|
* |Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| Backs|
|
||||||
|
* |-----------------------------------------------------------|
|
||||||
|
* |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \|
|
||||||
|
* |-----------------------------------------------------------|
|
||||||
|
* |CapsLo| A| S| D| F| G| H| J| K| L| ;| '|Enter |
|
||||||
|
* |-----------------------------------------------------------|
|
||||||
|
* |Shif| | Z| X| C| V| B| N| M| ,| .| /|Shift |
|
||||||
|
* |-----------------------------------------------------------|
|
||||||
|
* |Ctrl|Gui |Alt | Space |Alt |Gui | FN | Ctrl |
|
||||||
|
* `-----------------------------------------------------------'
|
||||||
|
*/
|
||||||
|
/* default */
|
||||||
|
[_BASE] = KEYMAP( \
|
||||||
|
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,KC_EQL, KC_BSLS,KC_NO,\
|
||||||
|
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC,KC_RBRC,KC_BSPC, \
|
||||||
|
TT(_FNAV), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_QUOT,KC_ENT, \
|
||||||
|
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH,F(TILDE),KC_NO, \
|
||||||
|
KC_LCTL, KC_LGUI,KC_LALT, LT(_FNAV, KC_SPC), KC_RALT,TG(_NUMPAD),MO(_MEDIA), KC_RCTL \
|
||||||
|
),
|
||||||
|
|
||||||
|
/* numpad */
|
||||||
|
[_NUMPAD] = KEYMAP( \
|
||||||
|
_______,_______,_______,_______,_______,_______,_______, KC_P7, KC_P8, KC_P9, KC_PSLS, _______,_______,_______,KC_NO,\
|
||||||
|
_______,_______,_______,_______,_______,_______,_______, KC_P4, KC_P5, KC_P6, KC_PAST, _______,_______,_______, \
|
||||||
|
MO(_FNAV),_______,_______,_______,_______,_______,_______, KC_P1, KC_P2, KC_P3, KC_PMNS, _______,_______, \
|
||||||
|
_______,_______,_______,_______,_______,_______,_______, KC_P0,KC_COMM,KC_PDOT,KC_PPLS, _______,KC_NO, \
|
||||||
|
_______,_______,_______, TO(_BASE), _______,_______,_______,_______ \
|
||||||
|
),
|
||||||
|
|
||||||
|
/* F-, arrow, and media keys */
|
||||||
|
[_FNAV] = KEYMAP( \
|
||||||
|
KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______,KC_NO,\
|
||||||
|
KC_CAPS,_______,_______,_______,_______,_______,_______,KC_PGUP,KC_UP,KC_PGDN,KC_PSCR,_______,_______,KC_DEL, \
|
||||||
|
_______,_______,KC_BTN2,_______,_______,_______,KC_HOME,KC_LEFT,KC_DOWN,KC_RGHT,KC_INS,_______,_______, \
|
||||||
|
_______,KC_APP,KC_BTN1,KC_CALC,_______,_______,KC_END,_______,_______,_______,_______,_______,KC_NO, \
|
||||||
|
_______,_______,_______, _______, F(CTLALTDEL),KC_NLCK,_______,_______ \
|
||||||
|
),
|
||||||
|
|
||||||
|
/* media */
|
||||||
|
[_MEDIA] = KEYMAP( \
|
||||||
|
_______,F(MODE_SINGLE),F(MODE_PAGE),F(MODE_FLASH),_______,_______,_______, _______, _______, _______,KC_MUTE, KC_VOLD, KC_VOLU,_______,KC_NO,\
|
||||||
|
_______,_______,_______,_______,_______,_______,_______, _______, _______, _______,_______, _______,_______,_______,\
|
||||||
|
_______,_______,_______,_______,_______,F(GAME),_______, _______, _______, _______,_______, _______,_______, \
|
||||||
|
_______,_______,F(ALL) ,F(BRIGHT),F(DIM),F(BACKLIGHT),_______, _______, KC_MPRV, KC_MNXT,KC_MSTP, _______,KC_NO, \
|
||||||
|
_______,_______,_______, KC_MPLY, _______,_______, _______,_______ \
|
||||||
|
),
|
||||||
|
/* ~ */
|
||||||
|
[_TILDE] = KEYMAP( \
|
||||||
|
KC_GRV,_______,_______,_______,_______,_______,_______, _______, _______, _______,_______, _______,_______,_______,KC_NO,\
|
||||||
|
_______,_______,_______,_______,_______,_______,_______, _______, _______, _______,_______, _______,_______,_______,\
|
||||||
|
_______,_______,_______,_______,_______,_______,_______, _______, _______, _______,_______, _______,_______, \
|
||||||
|
_______,_______,_______,_______,_______,_______,_______, _______, _______, _______,_______, _______,KC_NO, \
|
||||||
|
_______,_______,_______, _______, _______,_______, _______,_______ \
|
||||||
|
),
|
||||||
|
/* template */
|
||||||
|
[5] = KEYMAP( \
|
||||||
|
_______,_______,_______,_______,_______,_______,_______, _______, _______, _______,_______, _______,_______,_______,KC_NO,\
|
||||||
|
_______,_______,_______,_______,_______,_______,_______, _______, _______, _______,_______, _______,_______,_______,\
|
||||||
|
_______,_______,_______,_______,_______,_______,_______, _______, _______, _______,_______, _______,_______, \
|
||||||
|
_______,_______,_______,_______,_______,_______,_______, _______, _______, _______,_______, _______,KC_NO, \
|
||||||
|
_______,_______,_______, _______, _______,_______, _______,_______ \
|
||||||
|
),
|
||||||
|
};
|
||||||
|
|
||||||
|
//id for user defined functions and macros
|
||||||
|
enum function_id {
|
||||||
|
NONE,
|
||||||
|
};
|
||||||
|
|
||||||
|
enum macro_id {
|
||||||
|
ACTION_LEDS_ALL,
|
||||||
|
ACTION_LEDS_GAME,
|
||||||
|
ACTION_LEDS_BACKLIGHT,
|
||||||
|
ACTION_LEDS_BRIGHT,
|
||||||
|
ACTION_LEDS_DIM,
|
||||||
|
ACTION_LEDS_SINGLE,
|
||||||
|
ACTION_LEDS_PAGE,
|
||||||
|
ACTION_LEDS_FLASH
|
||||||
|
};
|
||||||
|
|
||||||
|
/* ==================================
|
||||||
|
* LED MAPPING
|
||||||
|
* ==================================*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
Infinity60 LED MAP
|
||||||
|
11 12 13 14 15 16 17 18 21 22 23 24 25 26 27*
|
||||||
|
28 31 32 33 34 35 36 37 38 41 42 43 44 45
|
||||||
|
46 47 48 51 52 53 54 55 56 57 58 61 62
|
||||||
|
63 64 65 66 67 68 71 72 73 74 75 76 77*
|
||||||
|
78 81 82 83 84 85 86 87
|
||||||
|
*Unused in Alphabet Layout
|
||||||
|
*/
|
||||||
|
|
||||||
|
//======== full page arrays =========
|
||||||
|
//any change in array size needs to be mirrored in matrix_init_user
|
||||||
|
uint8_t led_numpad[16] = {
|
||||||
|
18,21,22,23,
|
||||||
|
37,38,41,42,
|
||||||
|
55,56,57,58,
|
||||||
|
72,73,74,75
|
||||||
|
};
|
||||||
|
//LED Page 2 - _Nav
|
||||||
|
uint8_t led_nav[12] = {
|
||||||
|
38,
|
||||||
|
47,48, 55,56,57,
|
||||||
|
64,65,66
|
||||||
|
};
|
||||||
|
//LED Page 3 - _Media
|
||||||
|
uint8_t led_media[15] = {
|
||||||
|
12,13,14, 23,24,25,
|
||||||
|
65,66,67,68, 73,74,75,
|
||||||
|
83, 86
|
||||||
|
};
|
||||||
|
//LED Page 4 - _Game "WASD"
|
||||||
|
uint8_t led_game[5] = {
|
||||||
|
11,
|
||||||
|
32,
|
||||||
|
47,48,51
|
||||||
|
};
|
||||||
|
|
||||||
|
//======== qmk functions =========
|
||||||
|
const uint16_t fn_actions[] = {
|
||||||
|
[CTLALTDEL] = ACTION_KEY(LALT(LCTL(KC_DEL))),
|
||||||
|
[TILDE] = ACTION_LAYER_MODS(_TILDE, MOD_LSFT),
|
||||||
|
[ALL] = ACTION_FUNCTION(ACTION_LEDS_ALL),
|
||||||
|
[GAME] = ACTION_FUNCTION(ACTION_LEDS_GAME),
|
||||||
|
[BACKLIGHT] = ACTION_FUNCTION(ACTION_LEDS_BACKLIGHT),
|
||||||
|
[BRIGHT] = ACTION_FUNCTION(ACTION_LEDS_BRIGHT),
|
||||||
|
[DIM] = ACTION_FUNCTION(ACTION_LEDS_DIM),
|
||||||
|
[MODE_SINGLE] = ACTION_FUNCTION(ACTION_LEDS_SINGLE),
|
||||||
|
[MODE_PAGE] = ACTION_FUNCTION(ACTION_LEDS_PAGE),
|
||||||
|
[MODE_FLASH] = ACTION_FUNCTION(ACTION_LEDS_FLASH),
|
||||||
|
};
|
||||||
|
|
||||||
|
/* custom action function */
|
||||||
|
void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) {
|
||||||
|
msg_t msg;
|
||||||
|
|
||||||
|
switch(id) {
|
||||||
|
case ACTION_LEDS_ALL:
|
||||||
|
if(record->event.pressed) {
|
||||||
|
led_mode_global = led_mode_global == ALL ? MODE_SINGLE : ALL;
|
||||||
|
msg=TOGGLE_ALL;
|
||||||
|
chMBPost(&led_mailbox, msg, TIME_IMMEDIATE);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case ACTION_LEDS_BACKLIGHT:
|
||||||
|
if(record->event.pressed) {
|
||||||
|
backlight_status_global ^= 1;
|
||||||
|
msg=(backlight_status_global << 8) | TOGGLE_BACKLIGHT;
|
||||||
|
chMBPost(&led_mailbox, msg, TIME_IMMEDIATE);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case ACTION_LEDS_GAME:
|
||||||
|
if(record->event.pressed) {
|
||||||
|
led_mode_global = led_mode_global == GAME ? MODE_SINGLE : GAME;
|
||||||
|
|
||||||
|
msg=(4 << 8) | DISPLAY_PAGE;
|
||||||
|
chMBPost(&led_mailbox, msg, TIME_IMMEDIATE);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case ACTION_LEDS_BRIGHT:
|
||||||
|
if(record->event.pressed) {
|
||||||
|
msg=(1 << 8) | STEP_BRIGHTNESS;
|
||||||
|
chMBPost(&led_mailbox, msg, TIME_IMMEDIATE);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case ACTION_LEDS_DIM:
|
||||||
|
if(record->event.pressed) {
|
||||||
|
msg=(0 << 8) | STEP_BRIGHTNESS;
|
||||||
|
chMBPost(&led_mailbox, msg, TIME_IMMEDIATE);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
//set led_mode for matrix_scan to toggle leds
|
||||||
|
case ACTION_LEDS_SINGLE:
|
||||||
|
led_mode_global = MODE_SINGLE;
|
||||||
|
break;
|
||||||
|
case ACTION_LEDS_PAGE:
|
||||||
|
led_mode_global = MODE_PAGE;
|
||||||
|
break;
|
||||||
|
case ACTION_LEDS_FLASH:
|
||||||
|
led_mode_global = MODE_FLASH;
|
||||||
|
break;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
|
||||||
|
{
|
||||||
|
return MACRO_NONE;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
bool process_record_user (uint16_t keycode, keyrecord_t *record) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Runs just one time when the keyboard initializes.
|
||||||
|
void matrix_init_user(void) {
|
||||||
|
|
||||||
|
led_controller_init();
|
||||||
|
|
||||||
|
// Write predefined led pages.
|
||||||
|
write_led_page(_NUMPAD, led_numpad, 16);
|
||||||
|
chThdSleepMilliseconds(10);
|
||||||
|
|
||||||
|
write_led_page(_FNAV, led_nav, 12);
|
||||||
|
chThdSleepMilliseconds(10);
|
||||||
|
|
||||||
|
write_led_page(_MEDIA, led_media, 15);
|
||||||
|
chThdSleepMilliseconds(10);
|
||||||
|
|
||||||
|
write_led_page(4, led_game, 5);
|
||||||
|
chThdSleepMilliseconds(1000);
|
||||||
|
};
|
||||||
|
|
||||||
|
// Loops constantly in the background.
|
||||||
|
void matrix_scan_user(void) {
|
||||||
|
uint8_t page;
|
||||||
|
uint8_t led_pin_byte;
|
||||||
|
msg_t msg;
|
||||||
|
|
||||||
|
if (backlight_status_global == 0) {//backlight is off, skip the rest
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (led_layer_state != layer_state && led_mode_global != GAME && led_mode_global != ALL) {
|
||||||
|
//check mode
|
||||||
|
//Turn on layer indicator or page depending on mode
|
||||||
|
switch(led_mode_global) {
|
||||||
|
case MODE_FLASH: //flash preset page leds then single indicator
|
||||||
|
page = biton32(layer_state) > max_pages ? 7 : biton32(layer_state);
|
||||||
|
msg=(page << 8) | DISPLAY_PAGE;
|
||||||
|
chMBPost(&led_mailbox, msg, TIME_IMMEDIATE);
|
||||||
|
chThdSleepMilliseconds(500);
|
||||||
|
//flow to display single layer leds
|
||||||
|
|
||||||
|
case MODE_SINGLE: //light layer indicators for all active layers
|
||||||
|
led_pin_byte = layer_state & 0xFF;
|
||||||
|
msg=(7 << 8) | DISPLAY_PAGE;
|
||||||
|
chMBPost(&led_mailbox, msg, TIME_IMMEDIATE);
|
||||||
|
msg=(1 << 16) | (led_pin_byte << 8) | SET_FULL_ROW;
|
||||||
|
chMBPost(&led_mailbox, msg, TIME_IMMEDIATE);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case MODE_PAGE: //display pre-defined led page
|
||||||
|
page = biton32(layer_state) > max_pages ? 7 : biton32(layer_state);
|
||||||
|
msg=(page << 8) | DISPLAY_PAGE;
|
||||||
|
chMBPost(&led_mailbox, msg, TIME_IMMEDIATE);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
led_layer_state = layer_state;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,87 @@
|
|||||||
|
Backlight for Infinity60
|
||||||
|
========================
|
||||||
|
|
||||||
|
## Led Controller Specs
|
||||||
|
|
||||||
|
The Infinity60 (revision 1.1a) pcb uses the IS31FL3731C matrix LED driver from ISSI [(datasheet)](http://www.issi.com/WW/pdf/31FL3731C.pdf). The IS31 has the ability to control two led matrices (A & B), each matrix controlling 9 pins, each pin controlling 8 leds. The Infinity only utilizes matrix A.
|
||||||
|
|
||||||
|
Infinity60 LED Map:
|
||||||
|
digits mean "row" and "col", i.e. 45 means pin 4, column 5 in the IS31 datasheet
|
||||||
|
```c
|
||||||
|
11 12 13 14 15 16 17 18 21 22 23 24 25 26 27*
|
||||||
|
28 31 32 33 34 35 36 37 38 41 42 43 44 45
|
||||||
|
46 47 48 51 52 53 54 55 56 57 58 61 62
|
||||||
|
63 64 65 66 67 68 71 72 73 74 75 76 77*
|
||||||
|
78 81 82 83 84 85 86 87
|
||||||
|
```
|
||||||
|
*Unused in Alphabet Layout
|
||||||
|
|
||||||
|
The IS31 includes 8 led pages (or frames) 0-7 than can be displayed, and each page consists of 144 bytes.
|
||||||
|
- **bytes 0 - 17** - LED control (on/off).
|
||||||
|
* 18 pins which alternate between A and B matrices (A1, B1, A2, B2, ..).
|
||||||
|
* Each byte controls the 8 leds on that pin with bits (8 to 1).
|
||||||
|
- **bytes 8 - 35** - Blink control.
|
||||||
|
* Same as LED control above, but sets blink on/off.
|
||||||
|
- **bytes 36 - 143** - PWM control.
|
||||||
|
* One byte per LED, sets PWM from 0 to 255.
|
||||||
|
* Same as above, the register alternates, every 8 *bytes* (not bits) between the A & B matrices.
|
||||||
|
|
||||||
|
## Led Controller Code
|
||||||
|
In the Infinity60 project folder, led_controller.c sets up ability to write led layers at startup or control leds on demand as part of fn_actions. By default led_controller.c assumes page 0 will be used for full on/off. The remaining 7 pages (1-7) are free for preset led maps or single led actions at init or on demand. Communication with the IS31 is primarily done through the led_mailbox using chMBPost described further below under "Sending messages in Keymap.c". This code is based on work matt3o and flabbergast did for tmk firmware on the [whitefox](https://github.com/tmk/whitefox).
|
||||||
|
|
||||||
|
One function is available to directly set leds without the mailbox:
|
||||||
|
```
|
||||||
|
write_led_page(page#, array of leds by address, # of addresses in array)
|
||||||
|
```
|
||||||
|
This function saves a full page to the controller using a supplied array of led locations such as:
|
||||||
|
```c
|
||||||
|
uint8_t led_numpad[16] = {
|
||||||
|
18,21,22,23,
|
||||||
|
37,38,41,42,
|
||||||
|
55,56,57,58,
|
||||||
|
72,73,74,75
|
||||||
|
}
|
||||||
|
write_led_page(5, led_numpad, 16);
|
||||||
|
```
|
||||||
|
|
||||||
|
Remaining led control is done through the led mailbox using these message types:
|
||||||
|
- **SET_FULL_ROW** (3 bytes) - message type, 8-bit mask, and row#. Sets all leds on one pin per the bit mask.
|
||||||
|
- **OFF_LED, ON_LED, TOGGLE_LED** (3 bytes) - message type, led address, and page#. Off/on/toggle specific led.
|
||||||
|
- **BLINK_OFF_LED, BLINK_ON_LED, BLINK_OFF_LED** (3 bytes) - message type, led address, and page#. Set blink Off/on/toggle for specific led.
|
||||||
|
- **TOGGLE_ALL** (1 byte) - Turn on/off full backlight.
|
||||||
|
- **TOGGLE_BACKLIGHT** (2 bytes) - message type, on/off. Sets backlight completely off, no leds will display.
|
||||||
|
- **DISPLAY_PAGE** (2 bytes) - message type, page to display. Switch to specific pre-set page.
|
||||||
|
- **RESET_PAGE** (2 bytes) - message type, page to reset. Reset/erase specific page.
|
||||||
|
- **TOGGLE_NUM_LOCK** (2 bytes) - message type, on/off (NUM_LOCK_LED_ADDRESS). Toggle numlock on/off. Usually run with the `set_leds` function to check state of numlock or capslock. If all leds are on (e.i. TOGGLE_ALL) then this sets numlock to blink instead (this is still a little buggy if toggling on/off quickly).
|
||||||
|
- **TOGGLE_CAPS_LOCK** (2 bytes) - message type, on/off (CAPS_LOCK_LED_ADDRESS). Same as numlock.
|
||||||
|
- **STEP_BRIGHTNESS** (2 bytes) - message type, and step up (1) or step down (0). Increase or decrease led brightness.
|
||||||
|
|
||||||
|
## Sending messages in Keymap.c
|
||||||
|
Sending an action to the led mailbox is done using chMBPost:
|
||||||
|
```
|
||||||
|
chMBPost(&led_mailbox, message, timeout);
|
||||||
|
```
|
||||||
|
- &led_mailbox - pointer to led mailbox
|
||||||
|
- message - up to 4 bytes but most messages use only 2. First byte (LSB) is the message type, the remaining three bytes are the message to process.
|
||||||
|
- timeout is TIME_IMMEDIATE
|
||||||
|
|
||||||
|
An example:
|
||||||
|
```c
|
||||||
|
//set the message to be sent. First byte (LSB) is the led address, and second is the message type
|
||||||
|
msg=(42 << 8) | ON_LED;
|
||||||
|
|
||||||
|
//send msg to the led mailbox
|
||||||
|
chMBPost(&led_mailbox, msg, TIME_IMMEDIATE);
|
||||||
|
```
|
||||||
|
|
||||||
|
Another:
|
||||||
|
```c
|
||||||
|
msg=(46 << 8) | BLINK_TOGGLE_LED;
|
||||||
|
chMBPost(&led_mailbox, msg, TIME_IMMEDIATE);
|
||||||
|
```
|
||||||
|
|
||||||
|
Finally, SET_FULL_ROW requires an extra byte with row information in the message so sending this message looks like:
|
||||||
|
```c
|
||||||
|
msg=(row<<16) | (led_pin_byte << 8) | SET_FULL_ROW;
|
||||||
|
chMBPost(&led_mailbox, msg, TIME_IMMEDIATE);
|
||||||
|
```
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
Copyright 2012 Jun Wako <[email protected]>
|
Copyright 2015 Jun Wako <[email protected]>
|
||||||
|
|
||||||
This program is free software: you can redistribute it and/or modify
|
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
|
it under the terms of the GNU General Public License as published by
|
||||||
@@ -19,6 +19,35 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||||||
|
|
||||||
#include "led.h"
|
#include "led.h"
|
||||||
|
|
||||||
|
#include "led_controller.h"
|
||||||
|
|
||||||
|
/* WARNING! This function needs to be callable from
|
||||||
|
* both regular threads and ISRs, unlocked (during resume-from-sleep).
|
||||||
|
* In particular, I2C functions (interrupt-driven) should NOT be called from here.
|
||||||
|
*/
|
||||||
void led_set(uint8_t usb_led) {
|
void led_set(uint8_t usb_led) {
|
||||||
|
msg_t msg;
|
||||||
|
|
||||||
|
if (usb_led & (1<<USB_LED_NUM_LOCK)) {
|
||||||
|
chSysUnconditionalLock();
|
||||||
|
msg=(1 << 8) | TOGGLE_NUM_LOCK;
|
||||||
|
chMBPostI(&led_mailbox, msg);
|
||||||
|
chSysUnconditionalUnlock();
|
||||||
|
} else {
|
||||||
|
chSysUnconditionalLock();
|
||||||
|
msg=(0 << 8) | TOGGLE_NUM_LOCK;
|
||||||
|
chMBPostI(&led_mailbox, msg);
|
||||||
|
chSysUnconditionalUnlock();
|
||||||
|
}
|
||||||
|
if (usb_led & (1<<USB_LED_CAPS_LOCK)) {
|
||||||
|
chSysUnconditionalLock();
|
||||||
|
msg=(1 << 8) | TOGGLE_CAPS_LOCK;
|
||||||
|
chMBPostI(&led_mailbox, msg);
|
||||||
|
chSysUnconditionalUnlock();
|
||||||
|
} else {
|
||||||
|
chSysUnconditionalLock();
|
||||||
|
msg=(0 << 8) | TOGGLE_CAPS_LOCK;
|
||||||
|
chMBPostI(&led_mailbox, msg);
|
||||||
|
chSysUnconditionalUnlock();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,486 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2016 flabbergast <[email protected]>
|
||||||
|
|
||||||
|
This program is free software: you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation, either version 2 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* LED controller code
|
||||||
|
* IS31FL3731C matrix LED driver from ISSI
|
||||||
|
* datasheet: http://www.issi.com/WW/pdf/31FL3731C.pdf
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "ch.h"
|
||||||
|
#include "hal.h"
|
||||||
|
#include "print.h"
|
||||||
|
#include "led.h"
|
||||||
|
#include "host.h"
|
||||||
|
|
||||||
|
#include "led_controller.h"
|
||||||
|
|
||||||
|
#include "suspend.h"
|
||||||
|
|
||||||
|
#include "usb_main.h"
|
||||||
|
|
||||||
|
/* Infinity60 LED MAP
|
||||||
|
- digits mean "row" and "col", i.e. 45 means C4-5 in the IS31 datasheet, matrix A
|
||||||
|
|
||||||
|
11 12 13 14 15 16 17 18 21 22 23 24 25 26 27*
|
||||||
|
28 31 32 33 34 35 36 37 38 41 42 43 44 45
|
||||||
|
46 47 48 51 52 53 54 55 56 57 58 61 62
|
||||||
|
63 64 65 66 67 68 71 72 73 74 75 76 77*
|
||||||
|
78 81 82 83 84 85 86 87
|
||||||
|
|
||||||
|
*Unused in Alphabet Layout
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
each page has 0xB4 bytes
|
||||||
|
0 - 0x11: LED control (on/off):
|
||||||
|
order: CA1, CB1, CA2, CB2, .... (CA - matrix A, CB - matrix B)
|
||||||
|
CAn controls Cn-8 .. Cn-1 (LSbit)
|
||||||
|
0x12 - 0x23: blink control (like "LED control")
|
||||||
|
0x24 - 0xB3: PWM control: byte per LED, 0xFF max on
|
||||||
|
order same as above (CA 1st row (8bytes), CB 1st row (8bytes), ...)
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Which LED should be used for CAPS LOCK indicator
|
||||||
|
#if !defined(CAPS_LOCK_LED_ADDRESS)
|
||||||
|
#define CAPS_LOCK_LED_ADDRESS 46
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if !defined(NUM_LOCK_LED_ADDRESS)
|
||||||
|
#define NUM_LOCK_LED_ADDRESS 85
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Which LED should breathe during sleep */
|
||||||
|
#if !defined(BREATHE_LED_ADDRESS)
|
||||||
|
#define BREATHE_LED_ADDRESS CAPS_LOCK_LED_ADDRESS
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* =================
|
||||||
|
* ChibiOS I2C setup
|
||||||
|
* ================= */
|
||||||
|
static const I2CConfig i2ccfg = {
|
||||||
|
400000 // clock speed (Hz); 400kHz max for IS31
|
||||||
|
};
|
||||||
|
|
||||||
|
/* ==============
|
||||||
|
* variables
|
||||||
|
* ============== */
|
||||||
|
// internal communication buffers
|
||||||
|
uint8_t tx[2] __attribute__((aligned(2)));
|
||||||
|
uint8_t rx[1] __attribute__((aligned(2)));
|
||||||
|
|
||||||
|
// buffer for sending the whole page at once (used also as a temp buffer)
|
||||||
|
uint8_t full_page[0xB4+1] = {0};
|
||||||
|
|
||||||
|
// LED mask (which LEDs are present, selected by bits)
|
||||||
|
// IC60 pcb uses only CA matrix.
|
||||||
|
// Each byte is a control pin for 8 leds ordered 8-1
|
||||||
|
const uint8_t all_on_leds_mask[0x12] = {
|
||||||
|
0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF,
|
||||||
|
0x00, 0xFF, 0x00, 0xFF, 0x00, 0x7F, 0x00, 0x00, 0x00
|
||||||
|
};
|
||||||
|
|
||||||
|
// array to hold brightness pwm steps
|
||||||
|
const uint8_t pwm_levels[5] = {
|
||||||
|
0x00, 0x16, 0x4E, 0xA1, 0xFF
|
||||||
|
};
|
||||||
|
|
||||||
|
// array to write to pwm register
|
||||||
|
uint8_t pwm_register_array[9] = {0};
|
||||||
|
|
||||||
|
|
||||||
|
/* ============================
|
||||||
|
* communication functions
|
||||||
|
* ============================ */
|
||||||
|
msg_t is31_select_page(uint8_t page) {
|
||||||
|
tx[0] = IS31_COMMANDREGISTER;
|
||||||
|
tx[1] = page;
|
||||||
|
return i2cMasterTransmitTimeout(&I2CD1, IS31_ADDR_DEFAULT, tx, 2, NULL, 0, US2ST(IS31_TIMEOUT));
|
||||||
|
}
|
||||||
|
|
||||||
|
msg_t is31_write_data(uint8_t page, uint8_t *buffer, uint8_t size) {
|
||||||
|
is31_select_page(page);
|
||||||
|
return i2cMasterTransmitTimeout(&I2CD1, IS31_ADDR_DEFAULT, buffer, size, NULL, 0, US2ST(IS31_TIMEOUT));
|
||||||
|
}
|
||||||
|
|
||||||
|
msg_t is31_write_register(uint8_t page, uint8_t reg, uint8_t data) {
|
||||||
|
is31_select_page(page);
|
||||||
|
tx[0] = reg;
|
||||||
|
tx[1] = data;
|
||||||
|
return i2cMasterTransmitTimeout(&I2CD1, IS31_ADDR_DEFAULT, tx, 2, NULL, 0, US2ST(IS31_TIMEOUT));
|
||||||
|
}
|
||||||
|
|
||||||
|
msg_t is31_read_register(uint8_t page, uint8_t reg, uint8_t *result) {
|
||||||
|
is31_select_page(page);
|
||||||
|
|
||||||
|
tx[0] = reg;
|
||||||
|
return i2cMasterTransmitTimeout(&I2CD1, IS31_ADDR_DEFAULT, tx, 1, result, 1, US2ST(IS31_TIMEOUT));
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ========================
|
||||||
|
* initialise the IS31 chip
|
||||||
|
* ======================== */
|
||||||
|
void is31_init(void) {
|
||||||
|
// just to be sure that it's all zeroes
|
||||||
|
__builtin_memset(full_page,0,0xB4+1);
|
||||||
|
// zero function page, all registers (assuming full_page is all zeroes)
|
||||||
|
is31_write_data(IS31_FUNCTIONREG, full_page, 0xD + 1);
|
||||||
|
// disable hardware shutdown
|
||||||
|
palSetPadMode(GPIOB, 16, PAL_MODE_OUTPUT_PUSHPULL);
|
||||||
|
palSetPad(GPIOB, 16);
|
||||||
|
chThdSleepMilliseconds(10);
|
||||||
|
// software shutdown
|
||||||
|
is31_write_register(IS31_FUNCTIONREG, IS31_REG_SHUTDOWN, IS31_REG_SHUTDOWN_ON);
|
||||||
|
chThdSleepMilliseconds(10);
|
||||||
|
// zero function page, all registers
|
||||||
|
is31_write_data(IS31_FUNCTIONREG, full_page, 0xD + 1);
|
||||||
|
chThdSleepMilliseconds(10);
|
||||||
|
// software shutdown disable (i.e. turn stuff on)
|
||||||
|
is31_write_register(IS31_FUNCTIONREG, IS31_REG_SHUTDOWN, IS31_REG_SHUTDOWN_OFF);
|
||||||
|
chThdSleepMilliseconds(10);
|
||||||
|
// zero all LED registers on all 8 pages
|
||||||
|
uint8_t i;
|
||||||
|
for(i=0; i<8; i++) {
|
||||||
|
is31_write_data(i, full_page, 0xB4 + 1);
|
||||||
|
chThdSleepMilliseconds(5);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ==================
|
||||||
|
* LED control thread
|
||||||
|
* ================== */
|
||||||
|
#define LED_MAILBOX_NUM_MSGS 5
|
||||||
|
static msg_t led_mailbox_queue[LED_MAILBOX_NUM_MSGS];
|
||||||
|
mailbox_t led_mailbox;
|
||||||
|
static THD_WORKING_AREA(waLEDthread, 256);
|
||||||
|
static THD_FUNCTION(LEDthread, arg) {
|
||||||
|
(void)arg;
|
||||||
|
chRegSetThreadName("LEDthread");
|
||||||
|
|
||||||
|
uint8_t i;
|
||||||
|
uint8_t control_register_word[2] = {0};//2 bytes: register address, byte to write
|
||||||
|
uint8_t led_control_reg[0x13] = {0};//led control register start address + 0x12 bytes
|
||||||
|
|
||||||
|
//persistent status variables
|
||||||
|
uint8_t pwm_step_status, page_status, capslock_status, numlock_status;
|
||||||
|
|
||||||
|
//mailbox variables
|
||||||
|
uint8_t temp, msg_type;
|
||||||
|
uint8_t msg_args[3];
|
||||||
|
msg_t msg;
|
||||||
|
|
||||||
|
// initialize persistent variables
|
||||||
|
pwm_step_status = 4; //full brightness
|
||||||
|
page_status = 0; //start frame 0 (all off/on)
|
||||||
|
numlock_status = (host_keyboard_leds() & (1<<USB_LED_NUM_LOCK)) ? 1 : 0;
|
||||||
|
capslock_status = (host_keyboard_leds() & (1<<USB_LED_CAPS_LOCK)) ? 1 : 0;
|
||||||
|
|
||||||
|
while(true) {
|
||||||
|
// wait for a message (asynchronous)
|
||||||
|
// (messages are queued (up to LED_MAILBOX_NUM_MSGS) if they can't
|
||||||
|
// be processed right away
|
||||||
|
chMBFetch(&led_mailbox, &msg, TIME_INFINITE);
|
||||||
|
msg_type = msg & 0xFF; //first byte is action information
|
||||||
|
msg_args[0] = (msg >> 8) & 0xFF;
|
||||||
|
msg_args[1] = (msg >> 16) & 0XFF;
|
||||||
|
msg_args[2] = (msg >> 24) & 0xFF;
|
||||||
|
|
||||||
|
|
||||||
|
switch (msg_type){
|
||||||
|
case SET_FULL_ROW:
|
||||||
|
//write full byte to pin address, msg_args[1] = pin #, msg_args[0] = 8 bits to write
|
||||||
|
//writes only to currently displayed page
|
||||||
|
write_led_byte(page_status, msg_args[1], msg_args[0]);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case OFF_LED:
|
||||||
|
//on/off/toggle single led, msg_args[0] = row/col of led, msg_args[1] = page
|
||||||
|
set_led_bit(msg_args[1], control_register_word, msg_args[0], 0);
|
||||||
|
break;
|
||||||
|
case ON_LED:
|
||||||
|
set_led_bit(msg_args[1], control_register_word, msg_args[0], 1);
|
||||||
|
break;
|
||||||
|
case TOGGLE_LED:
|
||||||
|
set_led_bit(msg_args[1], control_register_word, msg_args[0], 2);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case BLINK_OFF_LED:
|
||||||
|
//on/off/toggle single led, msg_args[0] = row/col of led
|
||||||
|
set_led_bit(msg_args[1], control_register_word, msg_args[0], 4);
|
||||||
|
break;
|
||||||
|
case BLINK_ON_LED:
|
||||||
|
set_led_bit(msg_args[1], control_register_word, msg_args[0], 5);
|
||||||
|
break;
|
||||||
|
case BLINK_TOGGLE_LED:
|
||||||
|
set_led_bit(msg_args[1], control_register_word, msg_args[0], 6);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case TOGGLE_ALL:
|
||||||
|
//turn on/off all leds, msg_args = unused
|
||||||
|
is31_write_register(IS31_FUNCTIONREG, IS31_REG_SHUTDOWN, IS31_REG_SHUTDOWN_ON);
|
||||||
|
chThdSleepMilliseconds(5);
|
||||||
|
is31_read_register(0, 0x00, &temp);
|
||||||
|
is31_write_register(IS31_FUNCTIONREG, IS31_REG_SHUTDOWN, IS31_REG_SHUTDOWN_OFF);
|
||||||
|
|
||||||
|
led_control_reg[0] = 0;
|
||||||
|
|
||||||
|
//toggle led mask based on current state (temp)
|
||||||
|
if (temp==0 || page_status > 0) {
|
||||||
|
__builtin_memcpy(led_control_reg+1, all_on_leds_mask, 0x12);
|
||||||
|
} else {
|
||||||
|
__builtin_memset(led_control_reg+1, 0, 0x12);
|
||||||
|
}
|
||||||
|
is31_write_data(0, led_control_reg, 0x13);
|
||||||
|
|
||||||
|
if (page_status > 0) {
|
||||||
|
is31_write_register(IS31_FUNCTIONREG, IS31_REG_PICTDISP, 0);
|
||||||
|
|
||||||
|
page_status=0;
|
||||||
|
|
||||||
|
//maintain lock leds, reset to off and force recheck to blink of all leds toggled on
|
||||||
|
numlock_status = 0;
|
||||||
|
capslock_status = 0;
|
||||||
|
led_set(host_keyboard_leds());
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case TOGGLE_BACKLIGHT:
|
||||||
|
//msg_args[0] = on/off
|
||||||
|
|
||||||
|
//populate 9 byte rows to be written to each pin, first byte is register (pin) address
|
||||||
|
if (msg_args[0] == 1) {
|
||||||
|
__builtin_memset(pwm_register_array+1, pwm_levels[pwm_step_status], 8);
|
||||||
|
} else {
|
||||||
|
__builtin_memset(pwm_register_array+1, 0, 8);
|
||||||
|
}
|
||||||
|
|
||||||
|
for(i=0; i<8; i++) {
|
||||||
|
//first byte is register address, every 0x10 9 bytes is A-matrix pwm pins
|
||||||
|
pwm_register_array[0] = 0x24 + (i * 0x10);
|
||||||
|
is31_write_data(0,pwm_register_array,9);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case DISPLAY_PAGE:
|
||||||
|
//msg_args[0] = page to toggle on
|
||||||
|
if (page_status != msg_args[0]) {
|
||||||
|
is31_write_register(IS31_FUNCTIONREG, IS31_REG_PICTDISP, msg_args[0]);
|
||||||
|
page_status = msg_args[0];
|
||||||
|
|
||||||
|
//maintain lock leds, reset to off and force recheck for new page
|
||||||
|
numlock_status = 0;
|
||||||
|
capslock_status = 0;
|
||||||
|
led_set(host_keyboard_leds());
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case RESET_PAGE:
|
||||||
|
//led_args[0] = page to reset
|
||||||
|
led_control_reg[0] = 0;
|
||||||
|
__builtin_memset(led_control_reg+1, 0, 0x12);
|
||||||
|
is31_write_data(msg_args[0], led_control_reg, 0x13);
|
||||||
|
|
||||||
|
//repeat for blink register
|
||||||
|
led_control_reg[0] = 0x12;
|
||||||
|
is31_write_data(msg_args[0], led_control_reg, 0x13);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case TOGGLE_NUM_LOCK:
|
||||||
|
//msg_args[0] = 0 or 1, off/on
|
||||||
|
if (numlock_status != msg_args[0]) {
|
||||||
|
set_lock_leds(NUM_LOCK_LED_ADDRESS, msg_args[0], page_status);
|
||||||
|
numlock_status = msg_args[0];
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case TOGGLE_CAPS_LOCK:
|
||||||
|
//msg_args[0] = 0 or 1, off/on
|
||||||
|
if (capslock_status != msg_args[0]) {
|
||||||
|
set_lock_leds(CAPS_LOCK_LED_ADDRESS, msg_args[0], page_status);
|
||||||
|
capslock_status = msg_args[0];
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case STEP_BRIGHTNESS:
|
||||||
|
//led_args[0] = step up (1) or down (0)
|
||||||
|
switch (msg_args[0]) {
|
||||||
|
case 0:
|
||||||
|
if (pwm_step_status == 0) {
|
||||||
|
pwm_step_status = 4;
|
||||||
|
} else {
|
||||||
|
pwm_step_status--;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 1:
|
||||||
|
if (pwm_step_status == 4) {
|
||||||
|
pwm_step_status = 0;
|
||||||
|
} else {
|
||||||
|
pwm_step_status++;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
//populate 8 byte arrays to write on each pin
|
||||||
|
//first byte is register address, every 0x10 9 bytes are A-matrix pwm pins
|
||||||
|
__builtin_memset(pwm_register_array+1, pwm_levels[pwm_step_status], 8);
|
||||||
|
|
||||||
|
for(i=0; i<8; i++) {
|
||||||
|
pwm_register_array[0] = 0x24 + (i * 0x10);
|
||||||
|
is31_write_data(0,pwm_register_array,9);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ==============================
|
||||||
|
* led processing functions
|
||||||
|
* ============================== */
|
||||||
|
|
||||||
|
void set_led_bit (uint8_t page, uint8_t *led_control_word, uint8_t led_addr, uint8_t action) {
|
||||||
|
//returns 2 bytes: led control register address and byte to write
|
||||||
|
//action: 0 - off, 1 - on, 2 - toggle, 4 - blink on, 5 - blink off, 6 - toggle blink
|
||||||
|
|
||||||
|
uint8_t control_reg_addr, column_bit, column_byte, temp, blink_bit;
|
||||||
|
|
||||||
|
//check for valid led address
|
||||||
|
if (led_addr < 0 || led_addr > 87 || led_addr % 10 > 8) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
blink_bit = action>>2;//check for blink bit
|
||||||
|
action &= ~(1<<2); //strip blink bit
|
||||||
|
|
||||||
|
//led_addr tens column is pin#, ones column is bit position in 8-bit mask
|
||||||
|
control_reg_addr = ((led_addr / 10) % 10 - 1 ) * 0x02;// A-matrix is every other byte
|
||||||
|
control_reg_addr += blink_bit == 1 ? 0x12 : 0x00;//if blink_bit, shift 12 bytes to blink register
|
||||||
|
|
||||||
|
is31_write_register(IS31_FUNCTIONREG, IS31_REG_SHUTDOWN, IS31_REG_SHUTDOWN_ON);
|
||||||
|
chThdSleepMilliseconds(5);
|
||||||
|
is31_read_register(page, control_reg_addr, &temp);//maintain status of leds on this byte
|
||||||
|
is31_write_register(IS31_FUNCTIONREG, IS31_REG_SHUTDOWN, IS31_REG_SHUTDOWN_OFF);
|
||||||
|
|
||||||
|
column_bit = 1<<(led_addr % 10 - 1);
|
||||||
|
column_byte = temp;
|
||||||
|
|
||||||
|
switch(action) {
|
||||||
|
case 0:
|
||||||
|
column_byte &= ~column_bit;
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
column_byte |= column_bit;
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
column_byte ^= column_bit;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
//return word to be written in register
|
||||||
|
led_control_word[0] = control_reg_addr;
|
||||||
|
led_control_word[1] = column_byte;
|
||||||
|
is31_write_data (page, led_control_word, 0x02);
|
||||||
|
}
|
||||||
|
|
||||||
|
void write_led_byte (uint8_t page, uint8_t row, uint8_t led_byte) {
|
||||||
|
uint8_t led_control_word[2] = {0};//register address and on/off byte
|
||||||
|
|
||||||
|
led_control_word[0] = (row - 1 ) * 0x02;// A-matrix is every other byte
|
||||||
|
led_control_word[1] = led_byte;
|
||||||
|
is31_write_data(page, led_control_word, 0x02);
|
||||||
|
}
|
||||||
|
|
||||||
|
void write_led_page (uint8_t page, uint8_t *user_led_array, uint8_t led_count) {
|
||||||
|
uint8_t i;
|
||||||
|
uint8_t pin, col;
|
||||||
|
uint8_t led_control_register[0x13] = {0};
|
||||||
|
|
||||||
|
__builtin_memset(led_control_register,0,13);
|
||||||
|
|
||||||
|
for(i=0;i<led_count;i++){
|
||||||
|
//shift pin by 1 for led register 0x00 address
|
||||||
|
pin = ((user_led_array[i] / 10) % 10 - 1 ) * 2 + 1;
|
||||||
|
col = user_led_array[i] % 10 - 1;
|
||||||
|
led_control_register[pin] |= 1<<(col);
|
||||||
|
}
|
||||||
|
|
||||||
|
is31_write_data(page, led_control_register, 0x13);
|
||||||
|
}
|
||||||
|
|
||||||
|
void set_lock_leds(uint8_t led_addr, uint8_t led_action, uint8_t page) {
|
||||||
|
uint8_t temp;
|
||||||
|
uint8_t led_control_word[2] = {0};
|
||||||
|
|
||||||
|
//blink if all leds are on
|
||||||
|
if (page == 0) {
|
||||||
|
is31_write_register(IS31_FUNCTIONREG, IS31_REG_SHUTDOWN, IS31_REG_SHUTDOWN_ON);
|
||||||
|
chThdSleepMilliseconds(5);
|
||||||
|
is31_read_register(0, 0x00, &temp);
|
||||||
|
is31_write_register(IS31_FUNCTIONREG, IS31_REG_SHUTDOWN, IS31_REG_SHUTDOWN_OFF);
|
||||||
|
|
||||||
|
if (temp == 0xFF) {
|
||||||
|
led_action |= (1<<2); //set blink bit
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
set_led_bit(page,led_control_word,led_addr,led_action);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* =====================
|
||||||
|
* hook into user keymap
|
||||||
|
* ===================== */
|
||||||
|
void led_controller_init(void) {
|
||||||
|
uint8_t i;
|
||||||
|
|
||||||
|
/* initialise I2C */
|
||||||
|
/* I2C pins */
|
||||||
|
palSetPadMode(GPIOB, 0, PAL_MODE_ALTERNATIVE_2); // PTB0/I2C0/SCL
|
||||||
|
palSetPadMode(GPIOB, 1, PAL_MODE_ALTERNATIVE_2); // PTB1/I2C0/SDA
|
||||||
|
/* start I2C */
|
||||||
|
i2cStart(&I2CD1, &i2ccfg);
|
||||||
|
// try high drive (from kiibohd)
|
||||||
|
I2CD1.i2c->C2 |= I2Cx_C2_HDRS;
|
||||||
|
// try glitch fixing (from kiibohd)
|
||||||
|
I2CD1.i2c->FLT = 4;
|
||||||
|
|
||||||
|
chThdSleepMilliseconds(10);
|
||||||
|
|
||||||
|
/* initialise IS31 chip */
|
||||||
|
is31_init();
|
||||||
|
|
||||||
|
//set Display Option Register so all pwm intensity is controlled from page 0
|
||||||
|
//enable blink and set blink period to 0.27s x rate
|
||||||
|
is31_write_register(IS31_FUNCTIONREG, IS31_REG_DISPLAYOPT, IS31_REG_DISPLAYOPT_INTENSITY_SAME + IS31_REG_DISPLAYOPT_BLINK_ENABLE + 4);
|
||||||
|
|
||||||
|
/* set full pwm on page 1 */
|
||||||
|
pwm_register_array[0] = 0;
|
||||||
|
__builtin_memset(pwm_register_array+1, 0xFF, 8);
|
||||||
|
for(i=0; i<8; i++) {
|
||||||
|
pwm_register_array[0] = 0x24 + (i * 0x10);//first byte of 9 bytes must be register address
|
||||||
|
is31_write_data(0, pwm_register_array, 9);
|
||||||
|
chThdSleepMilliseconds(5);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* enable breathing when the displayed page changes */
|
||||||
|
// Fade-in Fade-out, time = 26ms * 2^N, N=3
|
||||||
|
is31_write_register(IS31_FUNCTIONREG, IS31_REG_BREATHCTRL1, (3<<4)|3);
|
||||||
|
is31_write_register(IS31_FUNCTIONREG, IS31_REG_BREATHCTRL2, IS31_REG_BREATHCTRL2_ENABLE|3);
|
||||||
|
|
||||||
|
/* more time consuming LED processing should be offloaded into
|
||||||
|
* a thread, with asynchronous messaging. */
|
||||||
|
chMBObjectInit(&led_mailbox, led_mailbox_queue, LED_MAILBOX_NUM_MSGS);
|
||||||
|
chThdCreateStatic(waLEDthread, sizeof(waLEDthread), LOWPRIO, LEDthread, NULL);
|
||||||
|
}
|
||||||
@@ -0,0 +1,120 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2016 flabbergast <[email protected]>
|
||||||
|
|
||||||
|
This program is free software: you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation, either version 2 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _LED_CONTROLLER_H_
|
||||||
|
#define _LED_CONTROLLER_H_
|
||||||
|
|
||||||
|
/* =========================
|
||||||
|
* communication functions
|
||||||
|
* ========================= */
|
||||||
|
|
||||||
|
msg_t is31_write_data(uint8_t page, uint8_t *buffer, uint8_t size);
|
||||||
|
msg_t is31_write_register(uint8_t page, uint8_t reg, uint8_t data);
|
||||||
|
msg_t is31_read_register(uint8_t page, uint8_t reg, uint8_t *result);
|
||||||
|
|
||||||
|
/* ============================
|
||||||
|
* init functions/definitions
|
||||||
|
* ============================*/
|
||||||
|
|
||||||
|
void led_controller_init(void);
|
||||||
|
|
||||||
|
#define CAPS_LOCK_LED_ADDRESS 46 //pin matrix location
|
||||||
|
#define NUM_LOCK_LED_ADDRESS 85
|
||||||
|
|
||||||
|
/* =============================
|
||||||
|
* IS31 chip related definitions
|
||||||
|
* ============================= */
|
||||||
|
|
||||||
|
#define IS31_ADDR_DEFAULT 0x74
|
||||||
|
|
||||||
|
#define IS31_REG_CONFIG 0x00
|
||||||
|
// bits in reg
|
||||||
|
#define IS31_REG_CONFIG_PICTUREMODE 0x00
|
||||||
|
#define IS31_REG_CONFIG_AUTOPLAYMODE 0x08
|
||||||
|
#define IS31_REG_CONFIG_AUDIOPLAYMODE 0x18
|
||||||
|
// D2:D0 bits are starting frame for autoplay mode
|
||||||
|
|
||||||
|
#define IS31_REG_PICTDISP 0x01 // D2:D0 frame select for picture mode
|
||||||
|
|
||||||
|
#define IS31_REG_AUTOPLAYCTRL1 0x02
|
||||||
|
// D6:D4 number of loops (000=infty)
|
||||||
|
// D2:D0 number of frames to be used
|
||||||
|
|
||||||
|
#define IS31_REG_AUTOPLAYCTRL2 0x03 // D5:D0 delay time (*11ms)
|
||||||
|
|
||||||
|
#define IS31_REG_DISPLAYOPT 0x05
|
||||||
|
#define IS31_REG_DISPLAYOPT_INTENSITY_SAME 0x20 // same intensity for all frames
|
||||||
|
#define IS31_REG_DISPLAYOPT_BLINK_ENABLE 0x08
|
||||||
|
// D2:D0 bits blink period time (*0.27s)
|
||||||
|
|
||||||
|
#define IS31_REG_AUDIOSYNC 0x06
|
||||||
|
#define IS31_REG_AUDIOSYNC_ENABLE 0x1
|
||||||
|
|
||||||
|
#define IS31_REG_FRAMESTATE 0x07
|
||||||
|
|
||||||
|
#define IS31_REG_BREATHCTRL1 0x08
|
||||||
|
// D6:D4 fade out time (26ms*2^i)
|
||||||
|
// D2:D0 fade in time (26ms*2^i)
|
||||||
|
|
||||||
|
#define IS31_REG_BREATHCTRL2 0x09
|
||||||
|
#define IS31_REG_BREATHCTRL2_ENABLE 0x10
|
||||||
|
// D2:D0 extinguish time (3.5ms*2^i)
|
||||||
|
|
||||||
|
#define IS31_REG_SHUTDOWN 0x0A
|
||||||
|
#define IS31_REG_SHUTDOWN_OFF 0x1
|
||||||
|
#define IS31_REG_SHUTDOWN_ON 0x0
|
||||||
|
|
||||||
|
#define IS31_REG_AGCCTRL 0x0B
|
||||||
|
#define IS31_REG_ADCRATE 0x0C
|
||||||
|
|
||||||
|
#define IS31_COMMANDREGISTER 0xFD
|
||||||
|
#define IS31_FUNCTIONREG 0x0B // helpfully called 'page nine'
|
||||||
|
|
||||||
|
#define IS31_TIMEOUT 10000 // needs to be long enough to write a whole page
|
||||||
|
|
||||||
|
/* ========================================
|
||||||
|
* LED Thread related items
|
||||||
|
* ========================================*/
|
||||||
|
|
||||||
|
extern mailbox_t led_mailbox;
|
||||||
|
|
||||||
|
void set_led_bit (uint8_t page, uint8_t *led_control_reg, uint8_t led_addr, uint8_t action);
|
||||||
|
void set_lock_leds (uint8_t led_addr, uint8_t led_action, uint8_t page);
|
||||||
|
void write_led_byte (uint8_t page, uint8_t row, uint8_t led_byte);
|
||||||
|
void write_led_page (uint8_t page, uint8_t *led_array, uint8_t led_count);
|
||||||
|
|
||||||
|
// constants for signaling the LED controller thread
|
||||||
|
enum led_msg_t {
|
||||||
|
KEY_LIGHT,
|
||||||
|
SET_FULL_ROW,
|
||||||
|
OFF_LED,
|
||||||
|
ON_LED,
|
||||||
|
TOGGLE_LED,
|
||||||
|
BLINK_OFF_LED,
|
||||||
|
BLINK_ON_LED,
|
||||||
|
BLINK_TOGGLE_LED,
|
||||||
|
TOGGLE_ALL,
|
||||||
|
TOGGLE_BACKLIGHT,
|
||||||
|
DISPLAY_PAGE,
|
||||||
|
RESET_PAGE,
|
||||||
|
TOGGLE_NUM_LOCK,
|
||||||
|
TOGGLE_CAPS_LOCK,
|
||||||
|
TOGGLE_BREATH,
|
||||||
|
STEP_BRIGHTNESS
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif /* _LED_CONTROLLER_H_ */
|
||||||
@@ -47,9 +47,12 @@
|
|||||||
* 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 */
|
#define KINETIS_USB_USB0_IRQ_PRIORITY 5
|
||||||
/* This is for Teensy LC; you should comment it out (or change to 5)
|
|
||||||
* for Teensy 3.x */
|
/*
|
||||||
#define KINETIS_USB_USB0_IRQ_PRIORITY 2
|
* I2C driver settings
|
||||||
|
*/
|
||||||
|
#define KINETIS_I2C_USE_I2C0 TRUE
|
||||||
|
#define KINETIS_I2C_I2C0_PRIORITY 4
|
||||||
|
|
||||||
#endif /* _MCUCONF_H_ */
|
#endif /* _MCUCONF_H_ */
|
||||||
@@ -1,6 +1,7 @@
|
|||||||
# project specific files
|
# project specific files
|
||||||
SRC = matrix.c \
|
SRC = matrix.c \
|
||||||
led.c
|
led.c \
|
||||||
|
led_controller.c
|
||||||
|
|
||||||
## chip/board settings
|
## chip/board settings
|
||||||
# - the next two should match the directories in
|
# - the next two should match the directories in
|
||||||
@@ -55,7 +56,7 @@ OPT_DEFS = -DCORTEX_VTOR_INIT=0x00001000
|
|||||||
# Build Options
|
# Build Options
|
||||||
# comment out to disable the options.
|
# comment out to disable the options.
|
||||||
#
|
#
|
||||||
BOOTMAGIC_ENABLE ?= yes # Virtual DIP switch configuration
|
BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration
|
||||||
## (Note that for BOOTMAGIC on Teensy LC you have to use a custom .ld script.)
|
## (Note that for BOOTMAGIC on Teensy LC you have to use a custom .ld script.)
|
||||||
MOUSEKEY_ENABLE ?= yes # Mouse keys
|
MOUSEKEY_ENABLE ?= yes # Mouse keys
|
||||||
EXTRAKEY_ENABLE ?= yes # Audio control and System control
|
EXTRAKEY_ENABLE ?= yes # Audio control and System control
|
||||||
@@ -63,4 +64,4 @@ CONSOLE_ENABLE ?= yes # Console for debug
|
|||||||
COMMAND_ENABLE ?= yes # Commands for debug and configuration
|
COMMAND_ENABLE ?= yes # Commands for debug and configuration
|
||||||
SLEEP_LED_ENABLE ?= yes # Breathing sleep LED during USB suspend
|
SLEEP_LED_ENABLE ?= yes # Breathing sleep LED during USB suspend
|
||||||
NKRO_ENABLE ?= yes # USB Nkey Rollover
|
NKRO_ENABLE ?= yes # USB Nkey Rollover
|
||||||
CUSTOM_MATRIX ?= yes # Custom matrix file
|
CUSTOM_MATRIX ?= yes # Custom matrix file
|
||||||
@@ -15,13 +15,13 @@
|
|||||||
|
|
||||||
|
|
||||||
# QMK Build Options
|
# QMK Build Options
|
||||||
# change to "no" to disable the options, or define them in the Makefile in
|
# change to "no" to disable the options, or define them in the Makefile in
|
||||||
# the appropriate keymap folder that will get included automatically
|
# the appropriate keymap folder that will get included automatically
|
||||||
#
|
#
|
||||||
BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000)
|
BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000)
|
||||||
MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
|
MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
|
||||||
EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
|
EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
|
||||||
CONSOLE_ENABLE = yes # Console for debug(+400)
|
CONSOLE_ENABLE = no # 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
|
||||||
@@ -29,9 +29,9 @@ MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config)
|
|||||||
AUDIO_ENABLE = no # Audio output on port C6
|
AUDIO_ENABLE = no # Audio output on port C6
|
||||||
UNICODE_ENABLE = no # Unicode
|
UNICODE_ENABLE = no # Unicode
|
||||||
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
|
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
|
||||||
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
|
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
|
||||||
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
|
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
|
||||||
|
|
||||||
ifndef QUANTUM_DIR
|
ifndef QUANTUM_DIR
|
||||||
include ../../../../Makefile
|
include ../../../../Makefile
|
||||||
endif
|
endif
|
||||||
@@ -26,22 +26,22 @@
|
|||||||
#define _FL 1
|
#define _FL 1
|
||||||
|
|
||||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
[_BL] = KEYMAP(
|
[_BL] = KEYMAP(
|
||||||
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_BRK, \
|
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_BRK, \
|
||||||
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, \
|
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, \
|
||||||
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN, \
|
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_END, KC_PGDN, \
|
||||||
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, \
|
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_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, \
|
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, \
|
||||||
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, MO(_FL), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT \
|
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, MO(_FL), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT \
|
||||||
),
|
),
|
||||||
[_FL] = KEYMAP(
|
[_FL] = KEYMAP(
|
||||||
BL_STEP, M(0), M(1), M(2), M(3), M(4), M(5), M(6), M(7), M(8), M(9), M(10), M(11), _______, _______, _______, \
|
BL_STEP, M(0), M(1), M(2), M(3), M(4), M(5), M(6), M(7), M(8), M(9), M(10), M(11), _______, _______, _______, \
|
||||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
|
||||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
|
||||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
|
||||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
|
||||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
|
||||||
),
|
),
|
||||||
};
|
};
|
||||||
|
|
||||||
const uint16_t PROGMEM fn_actions[] = {
|
const uint16_t PROGMEM fn_actions[] = {
|
||||||
@@ -50,32 +50,32 @@ const uint16_t PROGMEM fn_actions[] = {
|
|||||||
|
|
||||||
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
|
||||||
switch(id) {
|
switch(id) {
|
||||||
case 0:
|
case 0:
|
||||||
if (record->event.pressed) {
|
if (record->event.pressed) {
|
||||||
SEND_STRING("The");
|
SEND_STRING("The");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
if (record->event.pressed) {
|
if (record->event.pressed) {
|
||||||
SEND_STRING("Custom");
|
SEND_STRING("Custom");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
if (record->event.pressed) {
|
if (record->event.pressed) {
|
||||||
SEND_STRING("Keyboard");
|
SEND_STRING("Keyboard");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
if (record->event.pressed) {
|
if (record->event.pressed) {
|
||||||
return MACRO( D(LCTL), T(C), U(LCTL), T(RGHT), D(LCTL), T(V), U(LCTL), END );
|
return MACRO( D(LCTL), T(C), U(LCTL), T(RGHT), D(LCTL), T(V), U(LCTL), END );
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
return MACRO_NONE;
|
return MACRO_NONE;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -89,7 +89,7 @@ void matrix_scan_user(void) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void led_set_user(uint8_t usb_led) {
|
void led_set_user(uint8_t usb_led) {
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ See [keymap.c](keymap.c) for details.
|
|||||||
|
|
||||||
## Layers
|
## Layers
|
||||||
|
|
||||||
The keymap have two layers. To access the functions on the second layer, hold down caps lock and press the corresponding key.
|
The keymap have two layers. To access the functions on the second layer, hold down `Fn` and press the corresponding key.
|
||||||
|
|
||||||
### Layer 1: Default Layer
|
### Layer 1: Default Layer
|
||||||
,---. ,---------------. ,---------------. ,---------------. ,-----------.
|
,---. ,---------------. ,---------------. ,---------------. ,-----------.
|
||||||
|
|||||||
@@ -15,13 +15,13 @@
|
|||||||
|
|
||||||
|
|
||||||
# QMK Build Options
|
# QMK Build Options
|
||||||
# change to "no" to disable the options, or define them in the Makefile in
|
# change to "no" to disable the options, or define them in the Makefile in
|
||||||
# the appropriate keymap folder that will get included automatically
|
# the appropriate keymap folder that will get included automatically
|
||||||
#
|
#
|
||||||
BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000)
|
BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000)
|
||||||
MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
|
MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
|
||||||
EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
|
EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
|
||||||
CONSOLE_ENABLE = yes # Console for debug(+400)
|
CONSOLE_ENABLE = no # 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
|
||||||
@@ -29,9 +29,9 @@ MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config)
|
|||||||
AUDIO_ENABLE = no # Audio output on port C6
|
AUDIO_ENABLE = no # Audio output on port C6
|
||||||
UNICODE_ENABLE = no # Unicode
|
UNICODE_ENABLE = no # Unicode
|
||||||
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
|
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
|
||||||
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
|
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
|
||||||
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
|
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
|
||||||
|
|
||||||
ifndef QUANTUM_DIR
|
ifndef QUANTUM_DIR
|
||||||
include ../../../../Makefile
|
include ../../../../Makefile
|
||||||
endif
|
endif
|
||||||
@@ -26,22 +26,22 @@
|
|||||||
#define _FL 1
|
#define _FL 1
|
||||||
|
|
||||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
[_BL] = KEYMAP_WINKEYLESS(
|
[_BL] = KEYMAP_WINKEYLESS(
|
||||||
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_BRK, \
|
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_BRK, \
|
||||||
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, \
|
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, \
|
||||||
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN, \
|
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_END, KC_PGDN, \
|
||||||
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, \
|
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_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, \
|
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, \
|
||||||
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(_FL), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT \
|
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(_FL), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT \
|
||||||
),
|
),
|
||||||
[_FL] = KEYMAP_WINKEYLESS(
|
[_FL] = KEYMAP_WINKEYLESS(
|
||||||
BL_STEP, M(0), M(1), M(2), M(3), M(4), M(5), M(6), M(7), M(8), M(9), M(10), M(11), _______, _______, _______, \
|
BL_STEP, M(0), M(1), M(2), M(3), M(4), M(5), M(6), M(7), M(8), M(9), M(10), M(11), _______, _______, _______, \
|
||||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
|
||||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
|
||||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
|
||||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
|
||||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
|
||||||
),
|
),
|
||||||
};
|
};
|
||||||
|
|
||||||
const uint16_t PROGMEM fn_actions[] = {
|
const uint16_t PROGMEM fn_actions[] = {
|
||||||
@@ -50,32 +50,32 @@ const uint16_t PROGMEM fn_actions[] = {
|
|||||||
|
|
||||||
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
|
||||||
switch(id) {
|
switch(id) {
|
||||||
case 0:
|
case 0:
|
||||||
if (record->event.pressed) {
|
if (record->event.pressed) {
|
||||||
SEND_STRING("The");
|
SEND_STRING("The");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
if (record->event.pressed) {
|
if (record->event.pressed) {
|
||||||
SEND_STRING("Custom");
|
SEND_STRING("Custom");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
if (record->event.pressed) {
|
if (record->event.pressed) {
|
||||||
SEND_STRING("Keyboard");
|
SEND_STRING("Keyboard");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
if (record->event.pressed) {
|
if (record->event.pressed) {
|
||||||
return MACRO( D(LCTL), T(C), U(LCTL), T(RGHT), D(LCTL), T(V), U(LCTL), END );
|
return MACRO( D(LCTL), T(C), U(LCTL), T(RGHT), D(LCTL), T(V), U(LCTL), END );
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
return MACRO_NONE;
|
return MACRO_NONE;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -89,7 +89,7 @@ void matrix_scan_user(void) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void led_set_user(uint8_t usb_led) {
|
void led_set_user(uint8_t usb_led) {
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ See [keymap.c](keymap.c) for details.
|
|||||||
|
|
||||||
## Layers
|
## Layers
|
||||||
|
|
||||||
The keymap have two layers. To access the functions on the second layer, hold down caps lock and press the corresponding key.
|
The keymap have two layers. To access the functions on the second layer, hold down `Fn` and press the corresponding key.
|
||||||
|
|
||||||
### Layer 1: Default Layer
|
### Layer 1: Default Layer
|
||||||
,---. ,---------------. ,---------------. ,---------------. ,-----------.
|
,---. ,---------------. ,---------------. ,---------------. ,-----------.
|
||||||
|
|||||||
+13
-13
@@ -16,24 +16,24 @@
|
|||||||
#include "kmac.h"
|
#include "kmac.h"
|
||||||
|
|
||||||
void matrix_init_kb(void) {
|
void matrix_init_kb(void) {
|
||||||
// put your keyboard start-up code here
|
// put your keyboard start-up code here
|
||||||
// runs once when the firmware starts up
|
// runs once when the firmware starts up
|
||||||
led_init_ports();
|
led_init_ports();
|
||||||
matrix_init_user();
|
matrix_init_user();
|
||||||
}
|
}
|
||||||
|
|
||||||
void matrix_scan_kb(void) {
|
void matrix_scan_kb(void) {
|
||||||
// put your looping keyboard code here
|
// put your looping keyboard code here
|
||||||
// runs every cycle (a lot)
|
// runs every cycle (a lot)
|
||||||
|
|
||||||
matrix_scan_user();
|
matrix_scan_user();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
|
bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
|
||||||
// put your per-action keyboard code here
|
// put your per-action keyboard code here
|
||||||
// runs for every action, just before processing by the firmware
|
// runs for every action, just before processing by the firmware
|
||||||
|
|
||||||
return process_record_user(keycode, record);
|
return process_record_user(keycode, record);
|
||||||
}
|
}
|
||||||
|
|
||||||
void led_init_ports(void) {
|
void led_init_ports(void) {
|
||||||
@@ -64,12 +64,12 @@ void led_set_kb(uint8_t usb_led) {
|
|||||||
PORTE |= (1<<6); // HI
|
PORTE |= (1<<6); // HI
|
||||||
}
|
}
|
||||||
|
|
||||||
led_set_user(usb_led);
|
led_set_user(usb_led);
|
||||||
}
|
}
|
||||||
|
|
||||||
void backlight_init_ports(void) {
|
void backlight_init_ports(void) {
|
||||||
DDRB |= (1<<1) | (1<<2) | (1<<3) | (1<<4); // OUT
|
DDRB |= (1<<1) | (1<<2) | (1<<3) | (1<<4); // OUT
|
||||||
DDRD |= (1<<7); // OUT
|
DDRD |= (1<<7); // OUT
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Backlight pin configuration
|
/* Backlight pin configuration
|
||||||
|
|||||||
@@ -103,7 +103,7 @@ bool matrix_is_on(uint8_t row, uint8_t col)
|
|||||||
inline
|
inline
|
||||||
matrix_row_t matrix_get_row(uint8_t row)
|
matrix_row_t matrix_get_row(uint8_t row)
|
||||||
{
|
{
|
||||||
return matrix[row];
|
return matrix[row];
|
||||||
}
|
}
|
||||||
|
|
||||||
void matrix_print(void)
|
void matrix_print(void)
|
||||||
|
|||||||
@@ -57,14 +57,14 @@ OPT_DEFS += -DBOOTLOADER_SIZE=4096
|
|||||||
BOOTMAGIC_ENABLE ?= yes # Virtual DIP switch configuration(+1000)
|
BOOTMAGIC_ENABLE ?= yes # Virtual DIP switch configuration(+1000)
|
||||||
MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700)
|
MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700)
|
||||||
EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450)
|
EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450)
|
||||||
CONSOLE_ENABLE ?= yes # Console for debug(+400)
|
CONSOLE_ENABLE ?= no # Console for debug(+400)
|
||||||
COMMAND_ENABLE ?= yes # Commands for debug and configuration
|
COMMAND_ENABLE ?= yes # Commands for debug and configuration
|
||||||
CUSTOM_MATRIX ?= yes # Custom matrix file
|
CUSTOM_MATRIX ?= yes # Custom matrix file
|
||||||
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
|
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
|
||||||
SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend
|
SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend
|
||||||
# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
|
# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
|
||||||
NKRO_ENABLE ?= yes # USB Nkey Rollover
|
NKRO_ENABLE ?= yes # USB Nkey Rollover
|
||||||
BACKLIGHT_ENABLE ?= no # Enable keyboard backlight functionality
|
BACKLIGHT_ENABLE ?= yes # Enable keyboard backlight functionality
|
||||||
MIDI_ENABLE ?= no # MIDI support (+2400 to 4200, depending on config)
|
MIDI_ENABLE ?= no # MIDI support (+2400 to 4200, depending on config)
|
||||||
UNICODE_ENABLE ?= no # Unicode
|
UNICODE_ENABLE ?= no # Unicode
|
||||||
BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID
|
BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID
|
||||||
|
|||||||
Binary file not shown.
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
|
Before Width: | Height: | Size: 753 KiB |
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,7 @@
|
|||||||
|
TAP_DANCE_ENABLE = yes
|
||||||
|
RGBLIGHT_ENABLE = yes
|
||||||
|
USE_I2C = no
|
||||||
|
|
||||||
|
ifndef QUANTUM_DIR
|
||||||
|
include ../../../../Makefile
|
||||||
|
endif
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2012 Jun Wako <[email protected]>
|
||||||
|
|
||||||
|
This program is free software: you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation, either version 2 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define TAPPING_TERM 150
|
||||||
|
|
||||||
|
#define USE_SERIAL
|
||||||
|
#define EE_HANDS
|
||||||
|
|
||||||
|
#define RGBLIGHT_ANIMATIONS
|
||||||
|
|
||||||
|
#ifdef SUBPROJECT_rev1
|
||||||
|
#include "../../rev1/config.h"
|
||||||
|
#endif
|
||||||
|
#ifdef SUBPROJECT_rev2
|
||||||
|
#include "../../rev2/config.h"
|
||||||
|
#endif
|
||||||
|
#ifdef SUBPROJECT_rev2fliphalf
|
||||||
|
#include "../../rev2fliphalf/config.h"
|
||||||
|
#endif
|
||||||
@@ -0,0 +1,235 @@
|
|||||||
|
#include "lets_split.h"
|
||||||
|
#include "action_layer.h"
|
||||||
|
#include "eeconfig.h"
|
||||||
|
|
||||||
|
extern keymap_config_t keymap_config;
|
||||||
|
|
||||||
|
// Each layer gets a name for readability, which is then used in the keymap matrix below.
|
||||||
|
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
|
||||||
|
// Layer names don't all need to be of the same length, obviously, and you can also skip them
|
||||||
|
// entirely and just use numbers.
|
||||||
|
#define _QWERTY 0
|
||||||
|
#define _COLEMAK 1
|
||||||
|
#define _DVORAK 2
|
||||||
|
#define _LOWER 3
|
||||||
|
#define _RAISE 4
|
||||||
|
#define _ADJUST 16
|
||||||
|
|
||||||
|
enum custom_keycodes {
|
||||||
|
QWERTY = SAFE_RANGE,
|
||||||
|
COLEMAK,
|
||||||
|
DVORAK,
|
||||||
|
LOWER,
|
||||||
|
RAISE,
|
||||||
|
ADJUST,
|
||||||
|
};
|
||||||
|
|
||||||
|
// Fillers to make layering more clear
|
||||||
|
#define _______ KC_TRNS
|
||||||
|
#define XXXXXXX KC_NO
|
||||||
|
|
||||||
|
// Tap Dance Declarations
|
||||||
|
enum {
|
||||||
|
SFT_CAP = 0,
|
||||||
|
LFT_HOM,
|
||||||
|
DWN_PDN,
|
||||||
|
UPP_PUP,
|
||||||
|
RGT_END
|
||||||
|
};
|
||||||
|
|
||||||
|
// Dylan's additions
|
||||||
|
#define C_A_DEL LALT(LCTL(KC_DEL))
|
||||||
|
#define C_A_INS LALT(LCTL(KC_INS))
|
||||||
|
|
||||||
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
|
||||||
|
/* Qwerty
|
||||||
|
* ,-----------------------------------------------------------------------------------.
|
||||||
|
* | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp |
|
||||||
|
* |------+------+------+------+------+-------------+------+------+------+------+------|
|
||||||
|
* | Esc | A | S | D | F | G | H | J | K | L | ; | " |
|
||||||
|
* |------+------+------+------+------+------|------+------+------+------+------+------|
|
||||||
|
* | Shift| Z | X | C | V | B | N | M | , | . | / |Enter |
|
||||||
|
* |------+------+------+------+------+------+------+------+------+------+------+------|
|
||||||
|
* |Adjust| Ctrl | Alt | GUI |Lower |Space |Space |Raise | Left | Down | Up |Right |
|
||||||
|
* `-----------------------------------------------------------------------------------'
|
||||||
|
*/
|
||||||
|
[_QWERTY] = KEYMAP( \
|
||||||
|
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, \
|
||||||
|
CTL_T(KC_ESC), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, \
|
||||||
|
TD(SFT_CAP), KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SFT_T(KC_ENT), \
|
||||||
|
ADJUST, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \
|
||||||
|
),
|
||||||
|
|
||||||
|
/* Colemak
|
||||||
|
* ,-----------------------------------------------------------------------------------.
|
||||||
|
* | Tab | Q | W | F | P | G | J | L | U | Y | ; | Bksp |
|
||||||
|
* |------+------+------+------+------+-------------+------+------+------+------+------|
|
||||||
|
* | Esc | A | R | S | T | D | H | N | E | I | O | " |
|
||||||
|
* |------+------+------+------+------+------|------+------+------+------+------+------|
|
||||||
|
* | Shift| Z | X | C | V | B | K | M | , | . | / |Enter |
|
||||||
|
* |------+------+------+------+------+------+------+------+------+------+------+------|
|
||||||
|
* |Adjust| Ctrl | Alt | GUI |Lower |Space |Space |Raise | Left | Down | Up |Right |
|
||||||
|
* `-----------------------------------------------------------------------------------'
|
||||||
|
*/
|
||||||
|
[_COLEMAK] = KEYMAP( \
|
||||||
|
KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC, \
|
||||||
|
KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, \
|
||||||
|
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT , \
|
||||||
|
ADJUST, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \
|
||||||
|
),
|
||||||
|
|
||||||
|
/* Dvorak
|
||||||
|
* ,-----------------------------------------------------------------------------------.
|
||||||
|
* | Tab | " | , | . | P | Y | F | G | C | R | L | Bksp |
|
||||||
|
* |------+------+------+------+------+-------------+------+------+------+------+------|
|
||||||
|
* | Esc | A | O | E | U | I | D | H | T | N | S | / |
|
||||||
|
* |------+------+------+------+------+------|------+------+------+------+------+------|
|
||||||
|
* | Shift| ; | Q | J | K | X | B | M | W | V | Z |Enter |
|
||||||
|
* |------+------+------+------+------+------+------+------+------+------+------+------|
|
||||||
|
* |Adjust| Ctrl | Alt | GUI |Lower |Space |Space |Raise | Left | Down | Up |Right |
|
||||||
|
* `-----------------------------------------------------------------------------------'
|
||||||
|
*/
|
||||||
|
[_DVORAK] = KEYMAP( \
|
||||||
|
KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC, \
|
||||||
|
KC_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_SLSH, \
|
||||||
|
KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_ENT , \
|
||||||
|
ADJUST, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \
|
||||||
|
),
|
||||||
|
|
||||||
|
/* Lower
|
||||||
|
* ,-----------------------------------------------------------------------------------.
|
||||||
|
* | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Bksp |
|
||||||
|
* |------+------+------+------+------+-------------+------+------+------+------+------|
|
||||||
|
* | Del | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | |
|
||||||
|
* |------+------+------+------+------+------|------+------+------+------+------+------|
|
||||||
|
* | | F7 | F8 | F9 | F10 | F11 | F12 |ISO ~ |ISO | | END | HOME |Enter |
|
||||||
|
* |------+------+------+------+------+------+------+------+------+------+------+------|
|
||||||
|
* | | | | | | | | Next | Vol- | Vol+ | Play |
|
||||||
|
* `-----------------------------------------------------------------------------------'
|
||||||
|
*/
|
||||||
|
[_LOWER] = KEYMAP( \
|
||||||
|
KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC, \
|
||||||
|
KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, \
|
||||||
|
_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,S(KC_NUHS),S(KC_NUBS),KC_END, KC_HOME, _______, \
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \
|
||||||
|
),
|
||||||
|
|
||||||
|
/* Raise
|
||||||
|
* ,-----------------------------------------------------------------------------------.
|
||||||
|
* | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
|
||||||
|
* |------+------+------+------+------+-------------+------+------+------+------+------|
|
||||||
|
* | Del | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ |
|
||||||
|
* |------+------+------+------+------+------|------+------+------+------+------+------|
|
||||||
|
* | | F7 | F8 | F9 | F10 | F11 | F12 |ISO # |ISO / |PG DN |PG UP |Enter |
|
||||||
|
* |------+------+------+------+------+------+------+------+------+------+------+------|
|
||||||
|
* | | | | | | | | Next | Vol- | Vol+ | Play |
|
||||||
|
* `-----------------------------------------------------------------------------------'
|
||||||
|
*/
|
||||||
|
[_RAISE] = KEYMAP( \
|
||||||
|
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, \
|
||||||
|
KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, \
|
||||||
|
_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NUHS, KC_NUBS, KC_PGDN, KC_PGUP, _______, \
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \
|
||||||
|
),
|
||||||
|
|
||||||
|
/* Adjust (Lower + Raise)
|
||||||
|
* ,-----------------------------------------------------------------------------------.
|
||||||
|
* | | Reset| | | | | | | | | | Del |
|
||||||
|
* |------+------+------+------+------+-------------+------+------+------+------+------|
|
||||||
|
* | | | |Aud on|Audoff|AGnorm|AGswap|Qwerty|Colemk|Dvorak| | |
|
||||||
|
* |------+------+------+------+------+------|------+------+------+------+------+------|
|
||||||
|
* | | | | | | | | | | | | |
|
||||||
|
* |------+------+------+------+------+------+------+------+------+------+------+------|
|
||||||
|
* | | | | | | | | | | | |
|
||||||
|
* `-----------------------------------------------------------------------------------'
|
||||||
|
*/
|
||||||
|
[_ADJUST] = KEYMAP( \
|
||||||
|
_______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL, \
|
||||||
|
_______, _______, _______, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, _______, _______, \
|
||||||
|
_______, RGB_TOG, RGB_MOD, RGB_HUD, RGB_HUI, RGB_SAD, RGB_SAI, RGB_VAD, RGB_VAI, _______, _______, C_A_INS, \
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, C_A_DEL \
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
qk_tap_dance_action_t tap_dance_actions[] = {
|
||||||
|
[SFT_CAP] = ACTION_TAP_DANCE_DOUBLE(KC_LSFT, KC_CAPS),
|
||||||
|
[LFT_HOM] = ACTION_TAP_DANCE_DOUBLE(KC_LEFT, KC_HOME),
|
||||||
|
[DWN_PDN] = ACTION_TAP_DANCE_DOUBLE(KC_DOWN, KC_PGDN),
|
||||||
|
[UPP_PUP] = ACTION_TAP_DANCE_DOUBLE(KC_UP, KC_PGUP),
|
||||||
|
[RGT_END] = ACTION_TAP_DANCE_DOUBLE(KC_RGHT, KC_END)
|
||||||
|
};
|
||||||
|
|
||||||
|
#ifdef AUDIO_ENABLE
|
||||||
|
float tone_qwerty[][2] = SONG(QWERTY_SOUND);
|
||||||
|
float tone_dvorak[][2] = SONG(DVORAK_SOUND);
|
||||||
|
float tone_colemak[][2] = SONG(COLEMAK_SOUND);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
void persistent_default_layer_set(uint16_t default_layer) {
|
||||||
|
eeconfig_update_default_layer(default_layer);
|
||||||
|
default_layer_set(default_layer);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||||
|
switch (keycode) {
|
||||||
|
case QWERTY:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
#ifdef AUDIO_ENABLE
|
||||||
|
PLAY_NOTE_ARRAY(tone_qwerty, false, 0);
|
||||||
|
#endif
|
||||||
|
persistent_default_layer_set(1UL<<_QWERTY);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
break;
|
||||||
|
case COLEMAK:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
#ifdef AUDIO_ENABLE
|
||||||
|
PLAY_NOTE_ARRAY(tone_colemak, false, 0);
|
||||||
|
#endif
|
||||||
|
persistent_default_layer_set(1UL<<_COLEMAK);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
break;
|
||||||
|
case DVORAK:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
#ifdef AUDIO_ENABLE
|
||||||
|
PLAY_NOTE_ARRAY(tone_dvorak, false, 0);
|
||||||
|
#endif
|
||||||
|
persistent_default_layer_set(1UL<<_DVORAK);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
break;
|
||||||
|
case LOWER:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
layer_on(_LOWER);
|
||||||
|
update_tri_layer(_LOWER, _RAISE, _ADJUST);
|
||||||
|
} else {
|
||||||
|
layer_off(_LOWER);
|
||||||
|
update_tri_layer(_LOWER, _RAISE, _ADJUST);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
break;
|
||||||
|
case RAISE:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
layer_on(_RAISE);
|
||||||
|
update_tri_layer(_LOWER, _RAISE, _ADJUST);
|
||||||
|
} else {
|
||||||
|
layer_off(_RAISE);
|
||||||
|
update_tri_layer(_LOWER, _RAISE, _ADJUST);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
break;
|
||||||
|
case ADJUST:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
layer_on(_ADJUST);
|
||||||
|
} else {
|
||||||
|
layer_off(_ADJUST);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
@@ -6,6 +6,7 @@ This readme and most of the code are from https://github.com/ahtn/tmk_keyboard/
|
|||||||
Split keyboard firmware for Arduino Pro Micro or other ATmega32u4
|
Split keyboard firmware for Arduino Pro Micro or other ATmega32u4
|
||||||
based boards.
|
based boards.
|
||||||
|
|
||||||
|
**Hardware files for the Let's Split are now stored at http://qmk.fm/lets_split/**
|
||||||
|
|
||||||
## Build Guide
|
## Build Guide
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,6 @@
|
|||||||
|
RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
|
||||||
|
AUDIO_ENABLE = no
|
||||||
|
|
||||||
|
ifndef QUANTUM_DIR
|
||||||
|
include ../../../../Makefile
|
||||||
|
endif
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
#ifndef CONFIG_USER_H
|
||||||
|
#define CONFIG_USER_H
|
||||||
|
|
||||||
|
#include "../../config.h"
|
||||||
|
|
||||||
|
#define TAPPING_TERM 165
|
||||||
|
|
||||||
|
/* ws2812 RGB LED */
|
||||||
|
#define RGB_DI_PIN D3
|
||||||
|
#define RGBLIGHT_ANIMATIONS
|
||||||
|
#define RGBLED_NUM 10 // Number of LEDs
|
||||||
|
#define RGBLIGHT_HUE_STEP 10
|
||||||
|
#define RGBLIGHT_SAT_STEP 17
|
||||||
|
#define RGBLIGHT_VAL_STEP 17
|
||||||
|
//#define BACKLIGHT_ENABLE
|
||||||
|
#endif
|
||||||
@@ -0,0 +1,386 @@
|
|||||||
|
// This is the canonical layout file for the Quantum project. If you want to add another keyboard,
|
||||||
|
// this is the style you want to emulate.
|
||||||
|
|
||||||
|
#include "planck.h"
|
||||||
|
#include "action_layer.h"
|
||||||
|
#ifdef AUDIO_ENABLE
|
||||||
|
#include "audio.h"
|
||||||
|
#endif
|
||||||
|
#ifdef BACKLIGHT_ENABLE
|
||||||
|
#include "backlight.h"
|
||||||
|
#endif
|
||||||
|
#include "eeconfig.h"
|
||||||
|
|
||||||
|
extern keymap_config_t keymap_config;
|
||||||
|
|
||||||
|
// Each layer gets a name for readability, which is then used in the keymap matrix below.
|
||||||
|
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
|
||||||
|
// Layer names don't all need to be of the same length, obviously, and you can also skip them
|
||||||
|
// entirely and just use numbers.
|
||||||
|
#define _QWERTY 0
|
||||||
|
#define _COLEMAK 1
|
||||||
|
#define _DVORAK 2
|
||||||
|
#define _LOWER 3
|
||||||
|
#define _RAISE 4
|
||||||
|
#define _PLOVER 5
|
||||||
|
#define _NUMPAD 6
|
||||||
|
#define _ADJUST 16
|
||||||
|
|
||||||
|
enum planck_keycodes {
|
||||||
|
QWERTY = SAFE_RANGE,
|
||||||
|
NUMPAD,
|
||||||
|
EXT_NUM,
|
||||||
|
COLEMAK,
|
||||||
|
DVORAK,
|
||||||
|
PLOVER,
|
||||||
|
LOWER,
|
||||||
|
RAISE,
|
||||||
|
BACKLIT,
|
||||||
|
EXT_PLV
|
||||||
|
};
|
||||||
|
|
||||||
|
// Fillers to make layering more clear
|
||||||
|
#define _______ KC_TRNS
|
||||||
|
#define XXXXXXX KC_NO
|
||||||
|
|
||||||
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
|
||||||
|
/* Qwerty
|
||||||
|
* ,-----------------------------------------------------------------------------------.
|
||||||
|
* | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp |
|
||||||
|
* |------+------+------+------+------+-------------+------+------+------+------+------|
|
||||||
|
* | Esc | A | S | D | F | G | H | J | K | L | ; | " |
|
||||||
|
* |------+------+------+------+------+------|------+------+------+------+------+------|
|
||||||
|
* | Shift| Z | X | C | V | B | N | M | , | . | / |En/sh |
|
||||||
|
* |------+------+------+------+------+------+------+------+------+------+------+------|
|
||||||
|
* | Ctrl | Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right |
|
||||||
|
* `-----------------------------------------------------------------------------------'
|
||||||
|
*/
|
||||||
|
[_QWERTY] = {
|
||||||
|
{KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC},
|
||||||
|
{KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT},
|
||||||
|
{KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, F(0) },
|
||||||
|
{KC_LCTRL,KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT}
|
||||||
|
},
|
||||||
|
|
||||||
|
/* Colemak
|
||||||
|
* ,-----------------------------------------------------------------------------------.
|
||||||
|
* | Tab | Q | W | F | P | G | J | L | U | Y | ; | Bksp |
|
||||||
|
* |------+------+------+------+------+-------------+------+------+------+------+------|
|
||||||
|
* | Esc | A | R | S | T | D | H | N | E | I | O | " |
|
||||||
|
* |------+------+------+------+------+------|------+------+------+------+------+------|
|
||||||
|
* | Shift| Z | X | C | V | B | K | M | , | . | / |Enter |
|
||||||
|
* |------+------+------+------+------+------+------+------+------+------+------+------|
|
||||||
|
* | Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right |
|
||||||
|
* `-----------------------------------------------------------------------------------'
|
||||||
|
*/
|
||||||
|
[_COLEMAK] = {
|
||||||
|
{KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC},
|
||||||
|
{KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT},
|
||||||
|
{KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT },
|
||||||
|
{BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT}
|
||||||
|
},
|
||||||
|
|
||||||
|
/* Dvorak
|
||||||
|
* ,-----------------------------------------------------------------------------------.
|
||||||
|
* | Tab | " | , | . | P | Y | F | G | C | R | L | Bksp |
|
||||||
|
* |------+------+------+------+------+-------------+------+------+------+------+------|
|
||||||
|
* | Esc | A | O | E | U | I | D | H | T | N | S | / |
|
||||||
|
* |------+------+------+------+------+------|------+------+------+------+------+------|
|
||||||
|
* | Shift| ; | Q | J | K | X | B | M | W | V | Z |Enter |
|
||||||
|
* |------+------+------+------+------+------+------+------+------+------+------+------|
|
||||||
|
* | Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right |
|
||||||
|
* `-----------------------------------------------------------------------------------'
|
||||||
|
*/
|
||||||
|
[_DVORAK] = {
|
||||||
|
{KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC},
|
||||||
|
{KC_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_SLSH},
|
||||||
|
{KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_ENT },
|
||||||
|
{BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT}
|
||||||
|
},
|
||||||
|
|
||||||
|
/* Lower
|
||||||
|
* ,-----------------------------------------------------------------------------------.
|
||||||
|
* | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Bksp |
|
||||||
|
* |------+------+------+------+------+-------------+------+------+------+------+------|
|
||||||
|
* | Del | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | |
|
||||||
|
* |------+------+------+------+------+------|------+------+------+------+------+------|
|
||||||
|
* | Shift | F7 | F8 | F9 | F10 | F11 | F12 | | | Home | End |Enter |
|
||||||
|
* |------+------+------+------+------+------+------+------+------+------+------+------|
|
||||||
|
* | Brite| | | | | | | Play | Vol- | Vol+ | Next |
|
||||||
|
* `-----------------------------------------------------------------------------------'
|
||||||
|
*/
|
||||||
|
[_LOWER] = {
|
||||||
|
{KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC},
|
||||||
|
{KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE},
|
||||||
|
{_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______,KC_HOME, KC_END, _______},
|
||||||
|
{BACKLIT, _______, _______, _______, _______, _______, _______, _______, KC_MPLY, KC_VOLD, KC_VOLU, KC_MNXT}
|
||||||
|
},
|
||||||
|
\
|
||||||
|
/* Raise
|
||||||
|
* ,-----------------------------------------------------------------------------------.
|
||||||
|
* | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
|
||||||
|
* |------+------+------+------+------+-------------+------+------+------+------+------|
|
||||||
|
* | Del | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ |
|
||||||
|
* |------+------+------+------+------+------|------+------+------+------+------+------|
|
||||||
|
* | Shift | F7 | F8 | F9 | F10 | F11 | F12 | | | PgUp | PgDn |Enter |
|
||||||
|
* |------+------+------+------+------+------+------+------+------+------+------+------|
|
||||||
|
* | Brite| | | | | | | Play | Vol- | Vol+ | Next |
|
||||||
|
* `-----------------------------------------------------------------------------------'
|
||||||
|
*/
|
||||||
|
[_RAISE] = {
|
||||||
|
{KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC},
|
||||||
|
{KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS},
|
||||||
|
{_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, KC_PGUP, KC_PGDN, _______},
|
||||||
|
{BACKLIT, _______, _______, _______, _______, _______, _______, _______, KC_MPLY, KC_VOLD, KC_VOLU, KC_MNXT}
|
||||||
|
},
|
||||||
|
|
||||||
|
/* Plover layer (http://opensteno.org)
|
||||||
|
* ,-----------------------------------------------------------------------------------.
|
||||||
|
* | # | # | # | # | # | # | # | # | # | # | # | # |
|
||||||
|
* |------+------+------+------+------+-------------+------+------+------+------+------|
|
||||||
|
* | | S | T | P | H | * | * | F | P | L | T | D |
|
||||||
|
* |------+------+------+------+------+------|------+------+------+------+------+------|
|
||||||
|
* |TogOut| S | K | W | R | * | * | R | B | G | S | Z |
|
||||||
|
* |------+------+------+------+------+------+------+------+------+------+------+------|
|
||||||
|
* | Exit | | | A | O | | E | U | | | |
|
||||||
|
* `-----------------------------------------------------------------------------------'
|
||||||
|
*/
|
||||||
|
|
||||||
|
[_PLOVER] = {
|
||||||
|
{KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1 },
|
||||||
|
{XXXXXXX, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC},
|
||||||
|
{XXXXXXX, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT},
|
||||||
|
{EXT_PLV, XXXXXXX, XXXXXXX, KC_C, KC_V, XXXXXXX, XXXXXXX, KC_N, KC_M, XXXXXXX, XXXXXXX, XXXXXXX}
|
||||||
|
},
|
||||||
|
|
||||||
|
/* Numpad
|
||||||
|
* ,-----------------------------------------------------------------------------------.
|
||||||
|
* | Tab | | | ^ | / | 7 | 8 | 9 | - | = | | Bksp |
|
||||||
|
* |------+------+------+------+------+-------------+------+------+------+------+------|
|
||||||
|
* | Esc | | | % | * | 4 | 5 | 6 | + | ( | ) | |
|
||||||
|
* |------+------+------+------+------+------|------+------+------+------+------+------|
|
||||||
|
* | Shft | | | $ | Del | 1 | 2 | 3 |Enter | [ | ] |Enter |
|
||||||
|
* |------+------+------+------+------+------+------+------+------+------+------+------|
|
||||||
|
* | Exit | Ctrl | Alt | Gui | | 0 | . | Left | Down | Up |Right |
|
||||||
|
* `-----------------------------------------------------------------------------------'
|
||||||
|
*/
|
||||||
|
[_NUMPAD] = {
|
||||||
|
{KC_TAB, XXXXXXX, XXXXXXX, KC_CIRC, KC_PSLS, KC_P7, KC_P8, KC_P9, KC_PMNS, KC_EQL, XXXXXXX, KC_BSPC},
|
||||||
|
{KC_ESC, XXXXXXX, XXXXXXX, KC_PERC, KC_PAST, KC_P4, KC_P5, KC_P6, KC_PPLS, KC_LPRN, KC_RPRN, XXXXXXX},
|
||||||
|
{KC_LSFT, XXXXXXX, XXXXXXX, KC_DLR, KC_DEL, KC_P1, KC_P2, KC_P3, KC_PENT, KC_LBRC, KC_RBRC, KC_ENT },
|
||||||
|
{EXT_NUM, KC_LCTL, KC_LALT, KC_LGUI, XXXXXXX, KC_P0, KC_P0, KC_PDOT, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT}
|
||||||
|
},
|
||||||
|
|
||||||
|
/* Adjust (Lower + Raise)
|
||||||
|
* ,-----------------------------------------------------------------------------------.
|
||||||
|
* | | Reset| | | | | | | | | | Del |
|
||||||
|
* |------+------+------+------+------+-------------+------+------+------+------+------|
|
||||||
|
* | Login| | | | | | Num |Qwerty|Colemk|Dvorak|Plover| |
|
||||||
|
* |------+------+------+------+------+------|------+------+------+------+------+------|
|
||||||
|
* | Caps |RGBTOG|RGBMOD| Hue+ | Hue- | Sat+ | Sat- | Val+ | Val- | | | |
|
||||||
|
* |------+------+------+------+------+------+------+------+------+------+------+------|
|
||||||
|
* | | | | | | | | | | | |
|
||||||
|
* `-----------------------------------------------------------------------------------'
|
||||||
|
*/
|
||||||
|
[_ADJUST] = {
|
||||||
|
{_______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL },
|
||||||
|
{ M(1) , _______, _______, _______, _______, _______, NUMPAD, QWERTY, COLEMAK, DVORAK, PLOVER, _______},
|
||||||
|
{KC_CAPS, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, _______, _______},
|
||||||
|
{_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
const uint16_t PROGMEM fn_actions[] = {
|
||||||
|
[0] = ACTION_MODS_TAP_KEY(MOD_RSFT, KC_ENT),
|
||||||
|
};
|
||||||
|
|
||||||
|
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);
|
||||||
|
register_code(KC_RCTL);
|
||||||
|
register_code(KC_ESC);
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
clear_keyboard();
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
register_code(KC_LCTL);
|
||||||
|
register_code(KC_LALT);
|
||||||
|
register_code(KC_DEL);
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
clear_keyboard();
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return MACRO_NONE;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef AUDIO_ENABLE
|
||||||
|
|
||||||
|
float tone_startup[][2] = SONG(STARTUP_SOUND);
|
||||||
|
float tone_qwerty[][2] = SONG(QWERTY_SOUND);
|
||||||
|
float tone_dvorak[][2] = SONG(DVORAK_SOUND);
|
||||||
|
float tone_colemak[][2] = SONG(COLEMAK_SOUND);
|
||||||
|
float tone_plover[][2] = SONG(PLOVER_SOUND);
|
||||||
|
float tone_plover_gb[][2] = SONG(PLOVER_GOODBYE_SOUND);
|
||||||
|
float music_scale[][2] = SONG(MUSIC_SCALE_SOUND);
|
||||||
|
|
||||||
|
float tone_goodbye[][2] = SONG(GOODBYE_SOUND);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
void persistant_default_layer_set(uint16_t default_layer) {
|
||||||
|
eeconfig_update_default_layer(default_layer);
|
||||||
|
default_layer_set(default_layer);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||||
|
switch (keycode) {
|
||||||
|
case QWERTY:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
#ifdef AUDIO_ENABLE
|
||||||
|
PLAY_NOTE_ARRAY(tone_qwerty, false, 0);
|
||||||
|
#endif
|
||||||
|
persistant_default_layer_set(1UL<<_QWERTY);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
break;
|
||||||
|
case NUMPAD:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
layer_off(_RAISE);
|
||||||
|
layer_off(_LOWER);
|
||||||
|
layer_off(_ADJUST);
|
||||||
|
layer_on(_NUMPAD);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
break;
|
||||||
|
case EXT_NUM:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
layer_off(_NUMPAD);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
break;
|
||||||
|
case COLEMAK:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
#ifdef AUDIO_ENABLE
|
||||||
|
PLAY_NOTE_ARRAY(tone_colemak, false, 0);
|
||||||
|
#endif
|
||||||
|
persistant_default_layer_set(1UL<<_COLEMAK);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
break;
|
||||||
|
case DVORAK:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
#ifdef AUDIO_ENABLE
|
||||||
|
PLAY_NOTE_ARRAY(tone_dvorak, false, 0);
|
||||||
|
#endif
|
||||||
|
persistant_default_layer_set(1UL<<_DVORAK);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
break;
|
||||||
|
case LOWER:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
layer_on(_LOWER);
|
||||||
|
update_tri_layer(_LOWER, _RAISE, _ADJUST);
|
||||||
|
} else {
|
||||||
|
layer_off(_LOWER);
|
||||||
|
update_tri_layer(_LOWER, _RAISE, _ADJUST);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
break;
|
||||||
|
case RAISE:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
layer_on(_RAISE);
|
||||||
|
update_tri_layer(_LOWER, _RAISE, _ADJUST);
|
||||||
|
} else {
|
||||||
|
layer_off(_RAISE);
|
||||||
|
update_tri_layer(_LOWER, _RAISE, _ADJUST);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
break;
|
||||||
|
case BACKLIT:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
register_code(KC_RSFT);
|
||||||
|
#ifdef BACKLIGHT_ENABLE
|
||||||
|
backlight_step();
|
||||||
|
#endif
|
||||||
|
} else {
|
||||||
|
unregister_code(KC_RSFT);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
break;
|
||||||
|
case PLOVER:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
#ifdef AUDIO_ENABLE
|
||||||
|
stop_all_notes();
|
||||||
|
PLAY_NOTE_ARRAY(tone_plover, false, 0);
|
||||||
|
#endif
|
||||||
|
layer_off(_RAISE);
|
||||||
|
layer_off(_LOWER);
|
||||||
|
layer_off(_ADJUST);
|
||||||
|
layer_on(_PLOVER);
|
||||||
|
if (!eeconfig_is_enabled()) {
|
||||||
|
eeconfig_init();
|
||||||
|
}
|
||||||
|
keymap_config.raw = eeconfig_read_keymap();
|
||||||
|
keymap_config.nkro = 1;
|
||||||
|
eeconfig_update_keymap(keymap_config.raw);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
break;
|
||||||
|
case EXT_PLV:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
#ifdef AUDIO_ENABLE
|
||||||
|
PLAY_NOTE_ARRAY(tone_plover_gb, false, 0);
|
||||||
|
#endif
|
||||||
|
layer_off(_PLOVER);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void matrix_init_user(void) {
|
||||||
|
#ifdef AUDIO_ENABLE
|
||||||
|
startup_user();
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef AUDIO_ENABLE
|
||||||
|
|
||||||
|
void startup_user()
|
||||||
|
{
|
||||||
|
_delay_ms(20); // gets rid of tick
|
||||||
|
PLAY_NOTE_ARRAY(tone_startup, false, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
void shutdown_user()
|
||||||
|
{
|
||||||
|
PLAY_NOTE_ARRAY(tone_goodbye, false, 0);
|
||||||
|
_delay_ms(150);
|
||||||
|
stop_all_notes();
|
||||||
|
}
|
||||||
|
|
||||||
|
void music_on_user(void)
|
||||||
|
{
|
||||||
|
music_scale_user();
|
||||||
|
}
|
||||||
|
|
||||||
|
void music_scale_user(void)
|
||||||
|
{
|
||||||
|
PLAY_NOTE_ARRAY(music_scale, false, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -37,6 +37,7 @@
|
|||||||
#define TD_DOT TD(TDK_DOT)
|
#define TD_DOT TD(TDK_DOT)
|
||||||
#define TD_SLSH TD(TDK_SLSH)
|
#define TD_SLSH TD(TDK_SLSH)
|
||||||
|
|
||||||
|
// macros
|
||||||
#define ACTION_TAP_DANCE_FN_KEYCODE(user_fn, kc) { \
|
#define ACTION_TAP_DANCE_FN_KEYCODE(user_fn, kc) { \
|
||||||
.fn = { NULL, user_fn, NULL }, \
|
.fn = { NULL, user_fn, NULL }, \
|
||||||
.user_data = (void *)&((qk_tap_dance_pair_t) { kc, 0 }) \
|
.user_data = (void *)&((qk_tap_dance_pair_t) { kc, 0 }) \
|
||||||
@@ -47,6 +48,7 @@
|
|||||||
.user_data = (void *)&((qk_tap_dance_pair_t) { kc1, kc2 }) \
|
.user_data = (void *)&((qk_tap_dance_pair_t) { kc1, kc2 }) \
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define TAP(keycode) register_code16(keycode); unregister_code16(keycode)
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -25,10 +25,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|||||||
* `-----------------------------------------------------------------------------------'
|
* `-----------------------------------------------------------------------------------'
|
||||||
*/
|
*/
|
||||||
[DEF] = {
|
[DEF] = {
|
||||||
{KC_Q, KC_W, KC_E, KC_R, KC_T, KC_ESC, KC_BSPC, KC_Y, KC_U, KC_I, KC_O, KC_P},
|
{KC_Q, KC_W, KC_E, KC_R, KC_T, KC_ESC, KC_BSPC, KC_Y, KC_U, KC_I, KC_O, KC_P },
|
||||||
{KC_A, KC_S, KC_D, KC_F, KC_G, KC_TAB, KC_ENT, KC_H, KC_J, KC_K, KC_L, TD_SCLN},
|
{KC_A, KC_S, KC_D, KC_F, KC_G, KC_TAB, KC_ENT, KC_H, KC_J, KC_K, KC_L, TD_SCLN},
|
||||||
{KC_Z, KC_X, KC_C, KC_V, KC_B, OSM_SFT, DM_PLAY, KC_N, KC_M, TD_COMM, TD_DOT, TD_SLSH},
|
{KC_Z, KC_X, KC_C, KC_V, KC_B, OSM_SFT, DM_PLAY, KC_N, KC_M, TD_COMM, TD_DOT, TD_SLSH},
|
||||||
{OSM_CTL, KC_LGUI, OSM_ALT, OSL_FUN, OSL_LWR, KC_SPC, KC_SPC, OSL_RSE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT}
|
{OSM_CTL, KC_LGUI, OSM_ALT, OSL_FUN, OSL_LWR, KC_SPC, KC_SPC, OSL_RSE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT}
|
||||||
},
|
},
|
||||||
/* Lower
|
/* Lower
|
||||||
* ,-----------------------------------------------------------------------------------.
|
* ,-----------------------------------------------------------------------------------.
|
||||||
@@ -45,7 +45,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|||||||
{KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, _______, _______, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN},
|
{KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, _______, _______, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN},
|
||||||
{KC_TILD, _______, _______, _______, _______, _______, _______, KC_UNDS, KC_PLUS, _______, KC_LCBR, KC_RCBR},
|
{KC_TILD, _______, _______, _______, _______, _______, _______, KC_UNDS, KC_PLUS, _______, KC_LCBR, KC_RCBR},
|
||||||
{_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DQUO, KC_PIPE},
|
{_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DQUO, KC_PIPE},
|
||||||
{_______, _______, _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END}
|
{_______, _______, _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END }
|
||||||
},
|
},
|
||||||
/* Raise
|
/* Raise
|
||||||
* ,-----------------------------------------------------------------------------------.
|
* ,-----------------------------------------------------------------------------------.
|
||||||
@@ -59,10 +59,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|||||||
* `-----------------------------------------------------------------------------------'
|
* `-----------------------------------------------------------------------------------'
|
||||||
*/
|
*/
|
||||||
[RSE] = {
|
[RSE] = {
|
||||||
{KC_1, KC_2, KC_3, KC_4, KC_5, _______, _______, KC_6, KC_7, KC_8, KC_9, KC_0},
|
{KC_1, KC_2, KC_3, KC_4, KC_5, _______, _______, KC_6, KC_7, KC_8, KC_9, KC_0 },
|
||||||
{KC_GRV, _______, _______, _______, _______, _______, _______, KC_MINS, KC_EQL, _______, KC_LBRC, KC_RBRC},
|
{KC_GRV, _______, _______, _______, _______, _______, _______, KC_MINS, KC_EQL, _______, KC_LBRC, KC_RBRC},
|
||||||
{_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_QUOT, KC_BSLS},
|
{_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_QUOT, KC_BSLS},
|
||||||
{_______, _______, _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END}
|
{_______, _______, _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END }
|
||||||
},
|
},
|
||||||
/* Function
|
/* Function
|
||||||
* ,-----------------------------------------------------------------------------------.
|
* ,-----------------------------------------------------------------------------------.
|
||||||
@@ -76,17 +76,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|||||||
* `-----------------------------------------------------------------------------------'
|
* `-----------------------------------------------------------------------------------'
|
||||||
*/
|
*/
|
||||||
[FUN] = {
|
[FUN] = {
|
||||||
{KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, RESET, KC_DEL, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10},
|
{KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, RESET, KC_DEL, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10 },
|
||||||
{KC_F11, KC_F12, KC_F13, KC_F14, KC_F15, _______, _______, _______, KC_WH_L, KC_WH_D, KC_WH_U, KC_WH_R},
|
{KC_F11, KC_F12, KC_F13, KC_F14, KC_F15, _______, _______, _______, KC_WH_L, KC_WH_D, KC_WH_U, KC_WH_R},
|
||||||
{BL_TOGG, BL_STEP, _______, _______, _______, DM_STRT, DM_STOP, _______, _______, KC_BTN1, KC_BTN2, KC_BTN3},
|
{BL_TOGG, BL_STEP, _______, _______, _______, DM_STRT, DM_STOP, _______, _______, KC_BTN1, KC_BTN2, KC_BTN3},
|
||||||
{_______, _______, _______, _______, _______, _______, _______, _______, KC_MS_L, KC_MS_D, KC_MS_U, KC_MS_R}
|
{_______, _______, _______, _______, _______, _______, _______, _______, KC_MS_L, KC_MS_D, KC_MS_U, KC_MS_R}
|
||||||
},
|
},
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
void tap(uint16_t keycode) {
|
|
||||||
register_code16(keycode);
|
|
||||||
unregister_code16(keycode);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
void tap_dance_triple(qk_tap_dance_state_t *state, void *user_data) {
|
void tap_dance_triple(qk_tap_dance_state_t *state, void *user_data) {
|
||||||
@@ -96,25 +90,22 @@ void tap_dance_triple(qk_tap_dance_state_t *state, void *user_data) {
|
|||||||
switch(state->count) {
|
switch(state->count) {
|
||||||
case 2:
|
case 2:
|
||||||
register_code(KC_LSFT);
|
register_code(KC_LSFT);
|
||||||
tap(keycode);
|
TAP(keycode);
|
||||||
unregister_code(KC_LSFT);
|
unregister_code(KC_LSFT);
|
||||||
break;
|
break;
|
||||||
case 3:
|
case 3: // fall through
|
||||||
if (pair->kc2) {
|
if (pair->kc2) {
|
||||||
keycode = pair->kc2;
|
keycode = pair->kc2;
|
||||||
}
|
}
|
||||||
tap(keycode);
|
TAP(keycode);
|
||||||
tap(keycode);
|
|
||||||
break;
|
|
||||||
default:
|
default:
|
||||||
tap(keycode);
|
TAP(keycode);
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
qk_tap_dance_action_t tap_dance_actions[] = {
|
qk_tap_dance_action_t tap_dance_actions[] = {
|
||||||
[TDK_SCLN] = ACTION_TAP_DANCE_FN_KEYCODE2(tap_dance_triple, KC_SCLN, KC_COLN),
|
[TDK_SCLN] = ACTION_TAP_DANCE_FN_KEYCODE2(tap_dance_triple, KC_SCLN, KC_COLN),
|
||||||
[TDK_COMM] = ACTION_TAP_DANCE_FN_KEYCODE (tap_dance_triple, KC_COMM),
|
[TDK_COMM] = ACTION_TAP_DANCE_FN_KEYCODE2(tap_dance_triple, KC_COMM, KC_LABK),
|
||||||
[TDK_DOT] = ACTION_TAP_DANCE_FN_KEYCODE (tap_dance_triple, KC_DOT),
|
[TDK_DOT] = ACTION_TAP_DANCE_FN_KEYCODE (tap_dance_triple, KC_DOT),
|
||||||
[TDK_SLSH] = ACTION_TAP_DANCE_FN_KEYCODE (tap_dance_triple, KC_SLSH)
|
[TDK_SLSH] = ACTION_TAP_DANCE_FN_KEYCODE (tap_dance_triple, KC_SLSH)
|
||||||
};
|
};
|
||||||
@@ -126,6 +117,3 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void matrix_init_user(void) {
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -47,7 +47,7 @@ enum planck_keycodes {
|
|||||||
#define M_BRDFT M(MACRO_BREATH_DEFAULT)
|
#define M_BRDFT M(MACRO_BREATH_DEFAULT)
|
||||||
// Tap Dance Declarations
|
// Tap Dance Declarations
|
||||||
enum {
|
enum {
|
||||||
ESC_CAP = 0,
|
SFT_CAP = 0,
|
||||||
LFT_HOM,
|
LFT_HOM,
|
||||||
DWN_PDN,
|
DWN_PDN,
|
||||||
UPP_PUP,
|
UPP_PUP,
|
||||||
@@ -72,10 +72,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|||||||
* `-----------------------------------------------------------------------------------'
|
* `-----------------------------------------------------------------------------------'
|
||||||
*/
|
*/
|
||||||
[_QWERTY] = {
|
[_QWERTY] = {
|
||||||
{KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC },
|
{KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC },
|
||||||
{TD(ESC_CAP), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT },
|
{CTL_T(KC_ESC), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT },
|
||||||
{KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SFT_T(KC_ENT)},
|
{TD(SFT_CAP), KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SFT_T(KC_ENT)},
|
||||||
{BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT }
|
{BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT }
|
||||||
},
|
},
|
||||||
|
|
||||||
/* Colemak
|
/* Colemak
|
||||||
@@ -192,7 +192,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|||||||
|
|
||||||
|
|
||||||
qk_tap_dance_action_t tap_dance_actions[] = {
|
qk_tap_dance_action_t tap_dance_actions[] = {
|
||||||
[ESC_CAP] = ACTION_TAP_DANCE_DOUBLE(KC_ESC, KC_CAPS),
|
[SFT_CAP] = ACTION_TAP_DANCE_DOUBLE(KC_LSFT, KC_CAPS),
|
||||||
[LFT_HOM] = ACTION_TAP_DANCE_DOUBLE(KC_LEFT, KC_HOME),
|
[LFT_HOM] = ACTION_TAP_DANCE_DOUBLE(KC_LEFT, KC_HOME),
|
||||||
[DWN_PDN] = ACTION_TAP_DANCE_DOUBLE(KC_DOWN, KC_PGDN),
|
[DWN_PDN] = ACTION_TAP_DANCE_DOUBLE(KC_DOWN, KC_PGDN),
|
||||||
[UPP_PUP] = ACTION_TAP_DANCE_DOUBLE(KC_UP, KC_PGUP),
|
[UPP_PUP] = ACTION_TAP_DANCE_DOUBLE(KC_UP, KC_PGUP),
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|||||||
|
|
||||||
/* 0: ANSI qwerty */
|
/* 0: ANSI qwerty */
|
||||||
[_BL] = ANSI_KEYMAP(
|
[_BL] = ANSI_KEYMAP(
|
||||||
F(3), KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_DEL, \
|
F(4), KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_DEL, \
|
||||||
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_END, \
|
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_END, \
|
||||||
F(2), 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_PGUP, \
|
F(2), 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_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_UP, KC_PGDN, \
|
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_PGDN, \
|
||||||
@@ -52,74 +52,58 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|||||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
|
||||||
|
|
||||||
/* 2: Fn layer
|
/* 2: Fn layer
|
||||||
* ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐
|
* ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐
|
||||||
* │GRAVE│ F1 │ F2 │ F3 │ F4 │ F5 │ F6 │ F7 │ F8 │ F9 │ F10 │ F11 │ F12 │▒▒▒▒▒│▒▒▒▒▒│ │
|
* │GRAVE│ F1 │ F2 │ F3 │ F4 │ F5 │ F6 │ F7 │ F8 │ F9 │ F10 │ F11 │ F12 │▒▒▒▒▒│▒▒▒▒▒│ │
|
||||||
* ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
|
* ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
|
||||||
* │ │ _AL │ Up │ │ │ │ │ │PGUP │PGDWN│PRTSC│SCLCK│PAUSE│ │▒▒▒▒▒│ │
|
* │ │ _AL │ Up │ │ │ │ │ │PGUP │PGDWN│PRTSC│SCLCK│PAUSE│ │▒▒▒▒▒│ │
|
||||||
* ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
|
* ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
|
||||||
* │ │Left │Down │Right│ │ │Left │Down │ Up │Right│ │ │▒▒▒▒▒│ │▒▒▒▒▒│ │
|
* │ │Left │Down │Right│ │ │Left │Down │ Up │Right│ │ │▒▒▒▒▒│ │▒▒▒▒▒│ │
|
||||||
* ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
|
* ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
|
||||||
* │ │▒▒▒▒▒│_UL │ │ │ │ │ │ │Home │ End │ │▒▒▒▒▒│ │Vol+ │ │
|
* │ │▒▒▒▒▒│_UL │ │ │ │ │ │ │ │Home │End │▒▒▒▒▒│ │Vol+ │ │
|
||||||
* ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
|
* ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
|
||||||
* │ │ │ │█████│█████│█████│ │█████│█████│█████│ │ │ │Mute │Vol- │Play │
|
* │ │ │ │█████│█████│█████│ │█████│█████│█████│ │ │ │Mute │Vol- │Play │
|
||||||
* └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
|
* └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
|
||||||
*/
|
*/
|
||||||
|
|
||||||
[_FL] = ANSI_KEYMAP(
|
[_FL] = ANSI_KEYMAP(
|
||||||
KC_GRAVE, 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_TRNS, KC_TRNS, \
|
KC_GRAVE, 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_TRNS, KC_TRNS, \
|
||||||
KC_TRNS, F(1), KC_UP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PGUP, KC_PGDN, KC_PSCR, KC_SLCK, KC_PAUS, KC_TRNS, KC_TRNS, \
|
KC_TRNS, F(1), KC_UP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PGUP, KC_PGDN, KC_PSCR, KC_SLCK, KC_PAUS, KC_TRNS, KC_TRNS, \
|
||||||
KC_TRNS, KC_LEFT, KC_DOWN, KC_RIGHT, KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, KC_TRNS, KC_TRNS, KC_TRNS, \
|
KC_TRNS, KC_LEFT, KC_DOWN, KC_RIGHT, KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
|
||||||
KC_TRNS, KC_TRNS, F(3), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_END, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLU, KC_TRNS, \
|
KC_TRNS, F(3), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_END, KC_TRNS, KC_TRNS, KC_VOLU, KC_TRNS, \
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MUTE, KC_VOLD, KC_MPLY),
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MUTE, KC_VOLD, KC_MPLY),
|
||||||
|
|
||||||
/* 3: Locking layer for controlling the underglow
|
/* 3: Locking layer for controlling the underglow
|
||||||
* ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐
|
* ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐
|
||||||
* │ │ │ │ │ │ │ │ │ │ │ │ │ │▒▒▒▒▒│▒▒▒▒▒│ │
|
* │ │ │ │ │ │ │ │ │ │ │ │ │ │▒▒▒▒▒│▒▒▒▒▒│ │
|
||||||
* ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
|
* ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
|
||||||
* │ │ │ │ │ │ │ │ │ │ │ │ │ │ │▒▒▒▒▒│ │
|
* │ │BL On│BL St│ │ │ │ │ │ │ │ │ │ │ │▒▒▒▒▒│ │
|
||||||
* ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
|
* ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
|
||||||
* │ │ On │Mode │ │ │ │ │ │ │ │ │ │▒▒▒▒▒│ │▒▒▒▒▒│ │
|
* │ │ On │Mode │ │ │ │ │ │ │ │ │ │▒▒▒▒▒│ │▒▒▒▒▒│ │
|
||||||
* ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
|
* ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
|
||||||
* │ │▒▒▒▒▒│ │Hue+ │Hue- │Sat+ │Sat- │Val+ │Val- │ │ │ │▒▒▒▒▒│ │▒▒▒▒▒│ │
|
* │ │▒▒▒▒▒│ │Hue+ │Hue- │Sat+ │Sat- │Val+ │Val- │ │ │ │▒▒▒▒▒│ │▒▒▒▒▒│ │
|
||||||
* ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
|
* ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
|
||||||
* │ │ │ │█████│█████│█████│ │█████│█████│█████│ │ │ │ │ │ │
|
* │ │ │ │█████│█████│█████│ │█████│█████│█████│ │ │ │ │ │ │
|
||||||
* └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
|
* └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
|
||||||
*/
|
*/
|
||||||
|
|
||||||
[_UL] = ANSI_KEYMAP(
|
[_UL] = ANSI_KEYMAP(
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
|
KC_TRNS, BL_TOGG, BL_STEP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
|
||||||
KC_TRNS, F(4), F(5), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
|
KC_TRNS, RGB_TOG, RGB_MOD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
|
||||||
KC_TRNS, KC_TRNS, F(6), F(7), F(8), F(9), F(10), F(11), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
|
KC_TRNS, KC_TRNS, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
|
||||||
};
|
};
|
||||||
|
|
||||||
enum function_id {
|
enum function_id {
|
||||||
RGBLED_TOGGLE,
|
|
||||||
RGBLED_STEP_MODE,
|
|
||||||
RGBLED_INCREASE_HUE,
|
|
||||||
RGBLED_DECREASE_HUE,
|
|
||||||
RGBLED_INCREASE_SAT,
|
|
||||||
RGBLED_DECREASE_SAT,
|
|
||||||
RGBLED_INCREASE_VAL,
|
|
||||||
RGBLED_DECREASE_VAL,
|
|
||||||
SHIFT_ESC,
|
SHIFT_ESC,
|
||||||
};
|
};
|
||||||
|
|
||||||
const uint16_t PROGMEM fn_actions[] = {
|
const uint16_t PROGMEM fn_actions[] = {
|
||||||
[0] = ACTION_LAYER_MOMENTARY(_FL), // Momentary Fn overlay
|
[0] = ACTION_LAYER_MOMENTARY(_FL), // Momentary Fn overlay
|
||||||
[1] = ACTION_LAYER_TOGGLE(_AL), // Toggle Arrow Layer overlay
|
[1] = ACTION_LAYER_TOGGLE(_AL), // Toggle Arrow Layer overlay
|
||||||
[2] = ACTION_LAYER_TAP_KEY(_FL, KC_CAPS),// Tap to toggle caps lock and hold to activate function layer
|
[2] = ACTION_LAYER_TAP_KEY(_FL, KC_CAPS),// Tap to toggle caps lock and hold to activate function layer
|
||||||
[3] = ACTION_LAYER_TOGGLE(_UL), // Toggle Underglow Layer overlay
|
[3] = ACTION_LAYER_TOGGLE(_UL), // Toggle Underglow Layer overlay
|
||||||
[4] = ACTION_FUNCTION(RGBLED_TOGGLE), // Turn on/off underglow
|
[4] = ACTION_FUNCTION(SHIFT_ESC),
|
||||||
[5] = ACTION_FUNCTION(RGBLED_STEP_MODE), // Change underglow mode
|
|
||||||
[6] = ACTION_FUNCTION(RGBLED_INCREASE_HUE),
|
|
||||||
[7] = ACTION_FUNCTION(RGBLED_DECREASE_HUE),
|
|
||||||
[8] = ACTION_FUNCTION(RGBLED_INCREASE_SAT),
|
|
||||||
[9] = ACTION_FUNCTION(RGBLED_DECREASE_SAT),
|
|
||||||
[10] = ACTION_FUNCTION(RGBLED_INCREASE_VAL),
|
|
||||||
[11] = ACTION_FUNCTION(RGBLED_DECREASE_VAL),
|
|
||||||
[12] = ACTION_FUNCTION(SHIFT_ESC),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
void matrix_scan_user(void) {
|
void matrix_scan_user(void) {
|
||||||
@@ -157,49 +141,8 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
|
|||||||
#define MODS_CTRL_MASK (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT))
|
#define MODS_CTRL_MASK (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT))
|
||||||
void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) {
|
void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) {
|
||||||
switch (id) {
|
switch (id) {
|
||||||
case RGBLED_TOGGLE:
|
static uint8_t shift_esc_shift_mask;
|
||||||
//led operations
|
// Shift + ESC = ~
|
||||||
if (record->event.pressed) {
|
|
||||||
rgblight_toggle();
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case RGBLED_INCREASE_HUE:
|
|
||||||
if (record->event.pressed) {
|
|
||||||
rgblight_increase_hue();
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case RGBLED_DECREASE_HUE:
|
|
||||||
if (record->event.pressed) {
|
|
||||||
rgblight_decrease_hue();
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case RGBLED_INCREASE_SAT:
|
|
||||||
if (record->event.pressed) {
|
|
||||||
rgblight_increase_sat();
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case RGBLED_DECREASE_SAT:
|
|
||||||
if (record->event.pressed) {
|
|
||||||
rgblight_decrease_sat();
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case RGBLED_INCREASE_VAL:
|
|
||||||
if (record->event.pressed) {
|
|
||||||
rgblight_increase_val();
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case RGBLED_DECREASE_VAL:
|
|
||||||
if (record->event.pressed) {
|
|
||||||
rgblight_decrease_val();
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case RGBLED_STEP_MODE:
|
|
||||||
if (record->event.pressed) {
|
|
||||||
rgblight_step();
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
static uint8_t shift_esc_shift_mask;
|
|
||||||
// Shift + ESC = ~
|
|
||||||
case SHIFT_ESC:
|
case SHIFT_ESC:
|
||||||
shift_esc_shift_mask = get_mods()&MODS_CTRL_MASK;
|
shift_esc_shift_mask = get_mods()&MODS_CTRL_MASK;
|
||||||
if (record->event.pressed) {
|
if (record->event.pressed) {
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|||||||
|
|
||||||
/* 0: ISO qwerty */
|
/* 0: ISO qwerty */
|
||||||
[_BL] = ISO_KEYMAP(
|
[_BL] = ISO_KEYMAP(
|
||||||
F(3), KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_DEL, \
|
F(4), KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_DEL, \
|
||||||
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_END, \
|
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_END, \
|
||||||
F(2), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_GRAVE, KC_ENT, KC_PGUP, \
|
F(2), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_GRAVE, KC_ENT, KC_PGUP, \
|
||||||
KC_LSFT, KC_BSLS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_PGDN, \
|
KC_LSFT, KC_BSLS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_PGDN, \
|
||||||
@@ -59,7 +59,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|||||||
* ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
|
* ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
|
||||||
* │ │Left │Down │Right│ │ │Left │Down │ Up │Right│ │ │ │▒▒▒▒▒│▒▒▒▒▒│ │
|
* │ │Left │Down │Right│ │ │Left │Down │ Up │Right│ │ │ │▒▒▒▒▒│▒▒▒▒▒│ │
|
||||||
* ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
|
* ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
|
||||||
* │ │ │_UL │ │ │ │ │ │ │Home │ End │ │▒▒▒▒▒│ │Vol+ │ │
|
* │ │ │_UL │ │ │ │ │ │ │ │ Home│ End │▒▒▒▒▒│ │Vol+ │ │
|
||||||
* ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
|
* ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
|
||||||
* │ │ │ │█████│█████│█████│ │█████│█████│█████│ │ │ │Mute │Vol- │Play │
|
* │ │ │ │█████│█████│█████│ │█████│█████│█████│ │ │ │Mute │Vol- │Play │
|
||||||
* └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
|
* └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
|
||||||
@@ -69,14 +69,14 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|||||||
KC_GRAVE, 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_TRNS, KC_TRNS, \
|
KC_GRAVE, 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_TRNS, KC_TRNS, \
|
||||||
KC_TRNS, F(1), KC_UP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PGUP, KC_PGDN, KC_PSCR, KC_SLCK, KC_PAUS, KC_TRNS, KC_TRNS, \
|
KC_TRNS, F(1), KC_UP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PGUP, KC_PGDN, KC_PSCR, KC_SLCK, KC_PAUS, KC_TRNS, KC_TRNS, \
|
||||||
KC_TRNS, KC_LEFT, KC_DOWN, KC_RIGHT, KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
|
KC_TRNS, KC_LEFT, KC_DOWN, KC_RIGHT, KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
|
||||||
KC_TRNS, KC_TRNS, F(3), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_END, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLU, KC_TRNS, \
|
KC_TRNS, KC_TRNS, F(3), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_END, KC_TRNS, KC_TRNS, KC_VOLU, KC_TRNS, \
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MUTE, KC_VOLD, KC_MPLY),
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MUTE, KC_VOLD, KC_MPLY),
|
||||||
|
|
||||||
/* 3: Locking layer for controlling the underglow
|
/* 3: Locking layer for controlling the underglow
|
||||||
* ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐
|
* ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐
|
||||||
* │ │ │ │ │ │ │ │ │ │ │ │ │ │▒▒▒▒▒│▒▒▒▒▒│ │
|
* │ │ │ │ │ │ │ │ │ │ │ │ │ │▒▒▒▒▒│▒▒▒▒▒│ │
|
||||||
* ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
|
* ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
|
||||||
* │ │ │ │ │ │ │ │ │ │ │ │ │ │▒▒▒▒▒│▒▒▒▒▒│ │
|
* │ │BL On│BL St│ │ │ │ │ │ │ │ │ │ │▒▒▒▒▒│▒▒▒▒▒│ │
|
||||||
* ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
|
* ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
|
||||||
* │ │ On │Mode │ │ │ │ │ │ │ │ │ │ │▒▒▒▒▒│▒▒▒▒▒│ │
|
* │ │ On │Mode │ │ │ │ │ │ │ │ │ │ │▒▒▒▒▒│▒▒▒▒▒│ │
|
||||||
* ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
|
* ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
|
||||||
@@ -88,22 +88,14 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|||||||
|
|
||||||
[_UL] = ISO_KEYMAP(
|
[_UL] = ISO_KEYMAP(
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
|
KC_TRNS, BL_TOGG, BL_STEP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
|
||||||
KC_TRNS, F(4), F(5), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
|
KC_TRNS, RGB_TOG, RGB_MOD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, F(6), F(7), F(8), F(9), F(10), F(11), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
|
KC_TRNS, KC_TRNS, KC_TRNS, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
enum function_id {
|
enum function_id {
|
||||||
RGBLED_TOGGLE,
|
|
||||||
RGBLED_STEP_MODE,
|
|
||||||
RGBLED_INCREASE_HUE,
|
|
||||||
RGBLED_DECREASE_HUE,
|
|
||||||
RGBLED_INCREASE_SAT,
|
|
||||||
RGBLED_DECREASE_SAT,
|
|
||||||
RGBLED_INCREASE_VAL,
|
|
||||||
RGBLED_DECREASE_VAL,
|
|
||||||
SHIFT_ESC,
|
SHIFT_ESC,
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -112,14 +104,6 @@ const uint16_t PROGMEM fn_actions[] = {
|
|||||||
[1] = ACTION_LAYER_TOGGLE(_AL), // Toggle Arrow Layer overlay
|
[1] = ACTION_LAYER_TOGGLE(_AL), // Toggle Arrow Layer overlay
|
||||||
[2] = ACTION_LAYER_TAP_KEY(_FL, KC_CAPS),// Tap to toggle caps lock and hold to activate function layer
|
[2] = ACTION_LAYER_TAP_KEY(_FL, KC_CAPS),// Tap to toggle caps lock and hold to activate function layer
|
||||||
[3] = ACTION_LAYER_TOGGLE(_UL), // Toggle Underglow Layer overlay
|
[3] = ACTION_LAYER_TOGGLE(_UL), // Toggle Underglow Layer overlay
|
||||||
[4] = ACTION_FUNCTION(RGBLED_TOGGLE), // Turn on/off underglow
|
|
||||||
[5] = ACTION_FUNCTION(RGBLED_STEP_MODE), // Change underglow mode
|
|
||||||
[6] = ACTION_FUNCTION(RGBLED_INCREASE_HUE),
|
|
||||||
[7] = ACTION_FUNCTION(RGBLED_DECREASE_HUE),
|
|
||||||
[8] = ACTION_FUNCTION(RGBLED_INCREASE_SAT),
|
|
||||||
[9] = ACTION_FUNCTION(RGBLED_DECREASE_SAT),
|
|
||||||
[10] = ACTION_FUNCTION(RGBLED_INCREASE_VAL),
|
|
||||||
[11] = ACTION_FUNCTION(RGBLED_DECREASE_VAL),
|
|
||||||
[12] = ACTION_FUNCTION(SHIFT_ESC),
|
[12] = ACTION_FUNCTION(SHIFT_ESC),
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -158,49 +142,8 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
|
|||||||
#define MODS_CTRL_MASK (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT))
|
#define MODS_CTRL_MASK (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT))
|
||||||
void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) {
|
void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) {
|
||||||
switch (id) {
|
switch (id) {
|
||||||
case RGBLED_TOGGLE:
|
static uint8_t shift_esc_shift_mask;
|
||||||
//led operations
|
// Shift + ESC = ~
|
||||||
if (record->event.pressed) {
|
|
||||||
rgblight_toggle();
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case RGBLED_INCREASE_HUE:
|
|
||||||
if (record->event.pressed) {
|
|
||||||
rgblight_increase_hue();
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case RGBLED_DECREASE_HUE:
|
|
||||||
if (record->event.pressed) {
|
|
||||||
rgblight_decrease_hue();
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case RGBLED_INCREASE_SAT:
|
|
||||||
if (record->event.pressed) {
|
|
||||||
rgblight_increase_sat();
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case RGBLED_DECREASE_SAT:
|
|
||||||
if (record->event.pressed) {
|
|
||||||
rgblight_decrease_sat();
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case RGBLED_INCREASE_VAL:
|
|
||||||
if (record->event.pressed) {
|
|
||||||
rgblight_increase_val();
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case RGBLED_DECREASE_VAL:
|
|
||||||
if (record->event.pressed) {
|
|
||||||
rgblight_decrease_val();
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case RGBLED_STEP_MODE:
|
|
||||||
if (record->event.pressed) {
|
|
||||||
rgblight_step();
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
static uint8_t shift_esc_shift_mask;
|
|
||||||
// Shift + ESC = ~
|
|
||||||
case SHIFT_ESC:
|
case SHIFT_ESC:
|
||||||
shift_esc_shift_mask = get_mods()&MODS_CTRL_MASK;
|
shift_esc_shift_mask = get_mods()&MODS_CTRL_MASK;
|
||||||
if (record->event.pressed) {
|
if (record->event.pressed) {
|
||||||
|
|||||||
@@ -5,7 +5,6 @@ void matrix_init_kb(void) {
|
|||||||
// put your keyboard start-up code here
|
// put your keyboard start-up code here
|
||||||
// runs once when the firmware starts up
|
// runs once when the firmware starts up
|
||||||
matrix_init_user();
|
matrix_init_user();
|
||||||
led_init_ports();
|
|
||||||
};
|
};
|
||||||
|
|
||||||
void matrix_scan_kb(void) {
|
void matrix_scan_kb(void) {
|
||||||
@@ -14,11 +13,6 @@ void matrix_scan_kb(void) {
|
|||||||
matrix_scan_user();
|
matrix_scan_user();
|
||||||
};
|
};
|
||||||
|
|
||||||
void led_init_ports(void) {
|
|
||||||
// * Set our LED pins as output
|
|
||||||
DDRB |= (1<<7);
|
|
||||||
}
|
|
||||||
|
|
||||||
void led_set_kb(uint8_t usb_led) {
|
void led_set_kb(uint8_t usb_led) {
|
||||||
if (usb_led & (1<<USB_LED_CAPS_LOCK)) {
|
if (usb_led & (1<<USB_LED_CAPS_LOCK)) {
|
||||||
// Turn capslock on
|
// Turn capslock on
|
||||||
|
|||||||
@@ -9,13 +9,13 @@
|
|||||||
K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K014, K015, \
|
K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K014, K015, \
|
||||||
K100, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, K115, \
|
K100, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, K115, \
|
||||||
K200, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K214, K215, \
|
K200, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K214, K215, \
|
||||||
K300, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K314, K315, \
|
K300, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K313, K314, K315, \
|
||||||
K400, K401, K402, K408, K410, K411, K412, K413, K414, K415 \
|
K400, K401, K402, K408, K410, K411, K412, K413, K414, K415 \
|
||||||
) { \
|
) { \
|
||||||
{ KC_NO, KC_NO, K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, KC_NO, K014, K015 }, \
|
{ KC_NO, KC_NO, K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, KC_NO, K014, K015 }, \
|
||||||
{ KC_NO, KC_NO, K100, KC_NO, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, K115 }, \
|
{ KC_NO, KC_NO, K100, KC_NO, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, K115 }, \
|
||||||
{ KC_NO, KC_NO, K200, KC_NO, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, KC_NO, K214, K215 }, \
|
{ KC_NO, KC_NO, K200, KC_NO, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, KC_NO, K214, K215 }, \
|
||||||
{ KC_NO, KC_NO, KC_NO, K300, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, KC_NO, K314, K315 }, \
|
{ KC_NO, KC_NO, KC_NO, K300, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, KC_NO, K313, K314, K315 }, \
|
||||||
{ KC_NO, KC_NO, K400, K401, K402, KC_NO, KC_NO, KC_NO, K408, KC_NO, KC_NO, KC_NO, K410, K411, K412, K413, K414, K415 } \
|
{ KC_NO, KC_NO, K400, K401, K402, KC_NO, KC_NO, KC_NO, K408, KC_NO, KC_NO, KC_NO, K410, K411, K412, K413, K414, K415 } \
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,12 @@
|
|||||||
|
#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)
|
||||||
|
#DEBUG_ENABLE = yes
|
||||||
|
#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
|
||||||
|
TAP_DANCE_ENABLE = yes
|
||||||
|
|
||||||
|
ifndef QUANTUM_DIR
|
||||||
|
include ../../../../Makefile
|
||||||
|
endif
|
||||||
@@ -0,0 +1,105 @@
|
|||||||
|
#include "tv44.h"
|
||||||
|
#include "action_layer.h"
|
||||||
|
#include "debug.h"
|
||||||
|
#include "eeconfig.h"
|
||||||
|
|
||||||
|
// Layer names. We stick to 3 letters if possible so MO(NAME) fits in 7
|
||||||
|
// characters and doesn't mess with the grid.
|
||||||
|
#define _QW 0
|
||||||
|
#define _L1 1
|
||||||
|
#define _L2 2
|
||||||
|
#define _L3 3
|
||||||
|
|
||||||
|
// Curly braces have their own keys. These are defined so they don't mess up the
|
||||||
|
// grid in layer 2.
|
||||||
|
#define L_CURBR LSFT(KC_LBRC)
|
||||||
|
#define R_CURBR LSFT(KC_RBRC)
|
||||||
|
|
||||||
|
#define L1_TAB LT(_L1, KC_TAB)
|
||||||
|
#define L2_ESC LT(_L2, KC_ESC)
|
||||||
|
#define L2_SLSH LT(_L2, KC_SLSH)
|
||||||
|
#define L3_QUOT LT(_L3, KC_QUOT)
|
||||||
|
|
||||||
|
// Tap dance magic
|
||||||
|
#define TD_LGUI TD(BE_TD_GUI)
|
||||||
|
#define TD_LCTL TD(BE_TD_CTL)
|
||||||
|
#define TD_LALT TD(BE_TD_ALT)
|
||||||
|
|
||||||
|
enum belak_td {
|
||||||
|
BE_TD_GUI = 0,
|
||||||
|
BE_TD_CTL,
|
||||||
|
BE_TD_ALT,
|
||||||
|
};
|
||||||
|
|
||||||
|
void mod_tap_fn(qk_tap_dance_state_t *state, void *user_data);
|
||||||
|
void mod_reset_fn(qk_tap_dance_state_t *state, void *user_data);
|
||||||
|
|
||||||
|
qk_tap_dance_action_t tap_dance_actions[] = {
|
||||||
|
[BE_TD_GUI] = ACTION_TAP_DANCE_FN_ADVANCED(mod_tap_fn, NULL, mod_reset_fn),
|
||||||
|
[BE_TD_CTL] = ACTION_TAP_DANCE_FN_ADVANCED(mod_tap_fn, NULL, mod_reset_fn),
|
||||||
|
[BE_TD_ALT] = ACTION_TAP_DANCE_FN_ADVANCED(mod_tap_fn, NULL, mod_reset_fn),
|
||||||
|
};
|
||||||
|
|
||||||
|
uint16_t tap_dance_keys[] = {
|
||||||
|
[BE_TD_GUI] = KC_LGUI,
|
||||||
|
[BE_TD_CTL] = KC_LCTL,
|
||||||
|
[BE_TD_ALT] = KC_LALT,
|
||||||
|
};
|
||||||
|
|
||||||
|
// Fillers to make layering more clear
|
||||||
|
#define _______ KC_TRNS
|
||||||
|
|
||||||
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
[_QW] = KEYMAP_ARROW_COMMAND( /* Qwerty */
|
||||||
|
L2_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
|
||||||
|
L1_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, L3_QUOT,
|
||||||
|
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_UP, L2_SLSH,
|
||||||
|
TD_LCTL, MO(_L3), TD_LALT, TD_LGUI, KC_ENT, KC_SPC, MO(_L1), KC_LEFT, KC_DOWN, KC_RGHT
|
||||||
|
),
|
||||||
|
[_L1] = KEYMAP_ARROW_COMMAND( /* LAYER 1 */
|
||||||
|
KC_GRV, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL,
|
||||||
|
_______, KC_BSLS, KC_QUOT, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_DOWN, KC_UP, KC_LEFT, KC_RGHT, _______,
|
||||||
|
_______, KC_ESC, _______, KC_PSCR, _______, _______, _______, KC_MSTP, KC_MPLY, KC_MPRV, KC_MNXT, KC_RSFT,
|
||||||
|
_______, KC_LGUI, _______, _______, _______, _______, _______, _______, _______, _______
|
||||||
|
),
|
||||||
|
[_L2] = KEYMAP_ARROW_COMMAND( /* LAYER 2 */
|
||||||
|
_______, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, _______,
|
||||||
|
KC_ESC, KC_PIPE, KC_DQUO, KC_UNDS, KC_PLUS, L_CURBR, R_CURBR, KC_4, KC_5, KC_6, KC_VOLU, KC_ENT,
|
||||||
|
_______, _______, _______, _______, _______, _______, KC_0, KC_1, KC_2, KC_3, KC_VOLD, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______
|
||||||
|
),
|
||||||
|
[_L3] = KEYMAP_ARROW_COMMAND( /* LAYER 3 */
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, KC_F1, KC_F2, KC_F3, KC_F4, _______,
|
||||||
|
KC_ESC, _______, _______, _______, _______, _______, _______, KC_F5, KC_F6, KC_F7, KC_F8, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, KC_F9, KC_F10, KC_F11, KC_F12, _______,
|
||||||
|
_______, KC_LGUI, _______, _______, _______, _______, _______, _______, _______, _______
|
||||||
|
)
|
||||||
|
};
|
||||||
|
|
||||||
|
const uint16_t PROGMEM fn_actions[] = {};
|
||||||
|
|
||||||
|
// Tap dance functions
|
||||||
|
void mod_tap_fn(qk_tap_dance_state_t *state, void *user_data) {
|
||||||
|
switch (state->count) {
|
||||||
|
case 1:
|
||||||
|
register_mods(MOD_BIT(tap_dance_keys[state->keycode - QK_TAP_DANCE]));
|
||||||
|
send_keyboard_report();
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
layer_on(_L2);
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
layer_off(_L2);
|
||||||
|
layer_on(_L1);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
reset_tap_dance(state);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void mod_reset_fn(qk_tap_dance_state_t *state, void *user_data) {
|
||||||
|
layer_off(_L1);
|
||||||
|
layer_off(_L2);
|
||||||
|
unregister_mods(MOD_BIT(tap_dance_keys[state->keycode - QK_TAP_DANCE]));
|
||||||
|
send_keyboard_report();
|
||||||
|
}
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
# Belak's TV44 (TV46?) layout
|
||||||
|
|
||||||
|
This layout is roughly based on the low-rider arrow-southpaw layout from [the
|
||||||
|
configurator](http://minivan.config.thevankeyboards.com) with a number of
|
||||||
|
changes to make it easier to use and add in missing keys (like adding / and '
|
||||||
|
to the main layer)
|
||||||
@@ -21,48 +21,52 @@ extern keymap_config_t keymap_config;
|
|||||||
#define DVORAK M(_DV)
|
#define DVORAK M(_DV)
|
||||||
#define COLEMAK M(_CM)
|
#define COLEMAK M(_CM)
|
||||||
|
|
||||||
|
// Curly braces have their own keys. These are defined to make them not mess up
|
||||||
|
// the grid in layer 2.
|
||||||
|
#define L_CURBR LSFT(KC_LBRC)
|
||||||
|
#define R_CURBR LSFT(KC_RBRC)
|
||||||
|
|
||||||
// Fillers to make layering more clear
|
// Fillers to make layering more clear
|
||||||
#define _______ KC_TRNS
|
#define _______ KC_TRNS
|
||||||
#define XXXXXXX KC_NO
|
|
||||||
|
|
||||||
|
|
||||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
[_QW] = { /* Qwerty */
|
[_QW] = KEYMAP( /* Qwerty */
|
||||||
{KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC },
|
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
|
||||||
{MO(_L1), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, MO(_L1) },
|
MO(_L1), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, MO(_L1),
|
||||||
{KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, MO(_L2) },
|
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, MO(_L2),
|
||||||
{KC_LCTL, MO(_L2), KC_LGUI, KC_ENT, XXXXXXX, XXXXXXX, XXXXXXX, KC_SPC, KC_RALT, KC_ESC, XXXXXXX, TG(_L3) }
|
KC_LCTL, MO(_L2), KC_LGUI, KC_ENT, KC_SPC, KC_RALT, KC_ESC, TG(_L3)
|
||||||
},
|
),
|
||||||
[_DV] = { /* Dvorak */
|
[_DV] = KEYMAP( /* Dvorak */
|
||||||
{KC_TAB, KC_SLSH, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC },
|
KC_TAB, KC_SLSH, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC,
|
||||||
{MO(_L1), KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, MO(_L1) },
|
MO(_L1), KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, MO(_L1),
|
||||||
{KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, MO(_L2) },
|
KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, MO(_L2),
|
||||||
{KC_LCTL, MO(_L2), KC_LGUI, KC_ENT, XXXXXXX, XXXXXXX, XXXXXXX, KC_SPC, KC_RALT, KC_ESC, XXXXXXX, TG(_L3) }
|
KC_LCTL, MO(_L2), KC_LGUI, KC_ENT, KC_SPC, KC_RALT, KC_ESC, TG(_L3)
|
||||||
},
|
),
|
||||||
[_CM] = { /* Colemak */
|
[_CM] = KEYMAP( /* Colemak */
|
||||||
{KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC },
|
KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC,
|
||||||
{MO(_L1), KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, MO(_L1) },
|
MO(_L1), KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, MO(_L1),
|
||||||
{KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, MO(_L2) },
|
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, MO(_L2),
|
||||||
{KC_LCTL, MO(_L2), KC_LGUI, KC_ENT, XXXXXXX, XXXXXXX, XXXXXXX, KC_SPC, KC_RALT, KC_ESC, XXXXXXX, TG(_L3) }
|
KC_LCTL, MO(_L2), KC_LGUI, KC_ENT, KC_SPC, KC_RALT, KC_ESC, TG(_L3)
|
||||||
},
|
),
|
||||||
[_L1] = { /* LAYER 1 */
|
[_L1] = KEYMAP( /* LAYER 1 */
|
||||||
{KC_GRV, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL },
|
KC_GRV, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL,
|
||||||
{_______, KC_BSLS, KC_QUOT, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_DOWN, KC_UP, KC_LEFT, KC_RGHT, _______ },
|
_______, KC_BSLS, KC_QUOT, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_DOWN, KC_UP, KC_LEFT, KC_RGHT, _______,
|
||||||
{_______, KC_ESC, _______, KC_PSCR, _______, _______, _______, KC_MSTP, KC_MPLY, KC_MPRV, KC_MNXT, KC_RSFT },
|
_______, KC_ESC, _______, KC_PSCR, _______, _______, _______, KC_MSTP, KC_MPLY, KC_MPRV, KC_MNXT, KC_RSFT,
|
||||||
{_______, KC_LGUI, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, _______, XXXXXXX, _______ }
|
_______, KC_LGUI, _______, _______, _______, _______, _______, _______
|
||||||
},
|
),
|
||||||
[_L2] = { /* LAYER 2 */
|
[_L2] = KEYMAP( /* LAYER 2 */
|
||||||
{_______, QWERTY, DVORAK, COLEMAK, _______, _______, _______, KC_7, KC_8, KC_9, KC_0, _______ },
|
_______, QWERTY, DVORAK, COLEMAK, _______, _______, _______, KC_7, KC_8, KC_9, KC_0, _______,
|
||||||
{KC_ESC, KC_PIPE, KC_DQUO, KC_UNDS, KC_PLUS, LSFT(KC_LBRC), LSFT(KC_RBRC), KC_4, KC_5, KC_6, KC_VOLU, KC_ENT },
|
KC_ESC, KC_PIPE, KC_DQUO, KC_UNDS, KC_PLUS, L_CURBR, R_CURBR, KC_4, KC_5, KC_6, KC_VOLU, KC_ENT,
|
||||||
{_______, _______, _______, _______, _______, _______, KC_0, KC_1, KC_2, KC_3, KC_VOLD, _______ },
|
_______, _______, _______, _______, _______, _______, KC_0, KC_1, KC_2, KC_3, KC_VOLD, _______,
|
||||||
{_______, _______, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, _______, XXXXXXX, _______ }
|
_______, _______, _______, _______, _______, _______, _______, _______
|
||||||
},
|
),
|
||||||
[_L3] = { /* LAYER 3 */
|
[_L3] = KEYMAP( /* LAYER 3 */
|
||||||
{_______, _______, _______, _______, _______, _______, _______, KC_F1, KC_F2, KC_F3, KC_F4, _______ },
|
_______, _______, _______, _______, _______, _______, _______, KC_F1, KC_F2, KC_F3, KC_F4, _______,
|
||||||
{KC_ESC, _______, _______, _______, _______, _______, _______, KC_F5, KC_F6, KC_F7, KC_F8, _______ },
|
KC_ESC, _______, _______, _______, _______, _______, _______, KC_F5, KC_F6, KC_F7, KC_F8, _______,
|
||||||
{KC_LSFT, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_F9, KC_F10, KC_F11, KC_F12, _______ },
|
KC_LSFT, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_F9, KC_F10, KC_F11, KC_F12, _______,
|
||||||
{_______, KC_LSFT, KC_B, KC_SPC, XXXXXXX, XXXXXXX, XXXXXXX, KC_C, _______, _______, XXXXXXX, _______ }
|
_______, KC_LSFT, KC_B, KC_SPC, KC_C, _______, _______, _______
|
||||||
}
|
)
|
||||||
};
|
};
|
||||||
|
|
||||||
const uint16_t PROGMEM fn_actions[] = {
|
const uint16_t PROGMEM fn_actions[] = {
|
||||||
|
|||||||
@@ -1,21 +0,0 @@
|
|||||||
#ifndef CONFIG_USER_H
|
|
||||||
#define CONFIG_USER_H
|
|
||||||
|
|
||||||
#include "../../config.h"
|
|
||||||
|
|
||||||
/**
|
|
||||||
*TV44 keymap definition macro
|
|
||||||
*/
|
|
||||||
#define KEYMAP_TV44( \
|
|
||||||
K01, K02, K03, K04, K05, K06, K07, K08, K09, K10, K11, K12, \
|
|
||||||
K13, K14, K15, K16, K17, K18, K19, K20, K21, K22, K23, K24, \
|
|
||||||
K25, K26, K27, K28, K29, K30, K31, K32, K33, K34, K35, K36, \
|
|
||||||
K37, K38, K39, K40, K41, K42, K43, K44 \
|
|
||||||
) { \
|
|
||||||
{ K01, K02, K03, K04, K05, K06, K07, K08, K09, K10, K11, K12, }, \
|
|
||||||
{ K13, K14, K15, K16, K17, K18, K19, K20, K21, K22, K23, K24, }, \
|
|
||||||
{ K25, K26, K27, K28, K29, K30, K31, K32, K33, K34, K35, K36, }, \
|
|
||||||
{ K37, K38, K39, K40, KC_NO, KC_NO, KC_NO, K41, K42, K43, KC_NO, K44 } \
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
|
||||||
@@ -91,7 +91,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|||||||
* | Alt | GUI | Lower | TC/Space | TC/Space | Raise | Vol+ | Play |
|
* | Alt | GUI | Lower | TC/Space | TC/Space | Raise | Vol+ | Play |
|
||||||
* `--------+---------+---------+------^^^-------+-----^^^--------+---------+---------+---------'
|
* `--------+---------+---------+------^^^-------+-----^^^--------+---------+---------+---------'
|
||||||
*/
|
*/
|
||||||
[_QWERTY] = KEYMAP_TV44(
|
[_QWERTY] = KEYMAP(
|
||||||
/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------.*/
|
/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------.*/
|
||||||
HPR_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC ,
|
HPR_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC ,
|
||||||
/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`-----------------|*/
|
/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`-----------------|*/
|
||||||
@@ -113,7 +113,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|||||||
* | Alt | GUI | Lower | TC/Space | TC/Space | Raise | Vol+ | Play |
|
* | Alt | GUI | Lower | TC/Space | TC/Space | Raise | Vol+ | Play |
|
||||||
* `--------+---------+---------+------^^^-------+-----^^^--------+---------+---------+---------'
|
* `--------+---------+---------+------^^^-------+-----^^^--------+---------+---------+---------'
|
||||||
*/
|
*/
|
||||||
[_COLEMAK] = KEYMAP_TV44(
|
[_COLEMAK] = KEYMAP(
|
||||||
/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------.*/
|
/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------.*/
|
||||||
HPR_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC ,
|
HPR_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC ,
|
||||||
/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`-----------------|*/
|
/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`-----------------|*/
|
||||||
@@ -135,7 +135,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|||||||
* | Alt | GUI | Lower | TC/Space | TC/Space | Raise | Vol+ | Play |
|
* | Alt | GUI | Lower | TC/Space | TC/Space | Raise | Vol+ | Play |
|
||||||
* `--------+---------+---------+------^^^-------+-----^^^--------+---------+---------+---------'
|
* `--------+---------+---------+------^^^-------+-----^^^--------+---------+---------+---------'
|
||||||
*/
|
*/
|
||||||
[_DVORAK] = KEYMAP_TV44(
|
[_DVORAK] = KEYMAP(
|
||||||
/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------.*/
|
/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------.*/
|
||||||
HPR_TAB,KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC ,
|
HPR_TAB,KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC ,
|
||||||
/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`-----------------|*/
|
/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`-----------------|*/
|
||||||
@@ -157,7 +157,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|||||||
* | Brite | | | | | | Vol- | Mute |
|
* | Brite | | | | | | Vol- | Mute |
|
||||||
* `--------+---------+---------+------^^^-------+-----^^^--------+---------+---------+---------'
|
* `--------+---------+---------+------^^^-------+-----^^^--------+---------+---------+---------'
|
||||||
*/
|
*/
|
||||||
[_LOWER] = KEYMAP_TV44(
|
[_LOWER] = KEYMAP(
|
||||||
/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------.*/
|
/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------.*/
|
||||||
KC_TILD,KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC ,
|
KC_TILD,KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC ,
|
||||||
/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`-----------------|*/
|
/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`-----------------|*/
|
||||||
@@ -179,7 +179,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|||||||
* | Brite | | | | | | Vol- | Mute |
|
* | Brite | | | | | | Vol- | Mute |
|
||||||
* `--------+---------+---------+------^^^-------+-----^^^--------+---------+---------+---------'
|
* `--------+---------+---------+------^^^-------+-----^^^--------+---------+---------+---------'
|
||||||
*/
|
*/
|
||||||
[_RAISE] = KEYMAP_TV44(
|
[_RAISE] = KEYMAP(
|
||||||
/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------.*/
|
/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------.*/
|
||||||
KC_0 , KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC ,
|
KC_0 , KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC ,
|
||||||
/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`-----------------|*/
|
/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`-----------------|*/
|
||||||
@@ -205,7 +205,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|||||||
* seem to work on Mac. Presumably they'll work under Windows.
|
* seem to work on Mac. Presumably they'll work under Windows.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
[_TOUCHCURSOR] = KEYMAP_TV44(
|
[_TOUCHCURSOR] = KEYMAP(
|
||||||
/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------.*/
|
/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------.*/
|
||||||
ALT_TAB,CMD_TAB, CTL_TAB, KC_LGUI, KC_LSFT, KC_TILD, KC_INS, KC_HOME, KC_UP, KC_END, KC_BSPC, _______ ,
|
ALT_TAB,CMD_TAB, CTL_TAB, KC_LGUI, KC_LSFT, KC_TILD, KC_INS, KC_HOME, KC_UP, KC_END, KC_BSPC, _______ ,
|
||||||
/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`-----------------|*/
|
/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`-----------------|*/
|
||||||
@@ -228,7 +228,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|||||||
* `--------+---------+---------+------^^^-------+-----^^^--------+---------+---------+---------'
|
* `--------+---------+---------+------^^^-------+-----^^^--------+---------+---------+---------'
|
||||||
*/
|
*/
|
||||||
|
|
||||||
[_MOUSECURSOR] = KEYMAP_TV44(
|
[_MOUSECURSOR] = KEYMAP(
|
||||||
/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------.*/
|
/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------.*/
|
||||||
_______,_______, KC_ACL0, _______, _______, _______, _______, KC_WH_L, KC_MS_U, KC_WH_R, KC_BTN2, _______ ,
|
_______,_______, KC_ACL0, _______, _______, _______, _______, KC_WH_L, KC_MS_U, KC_WH_R, KC_BTN2, _______ ,
|
||||||
/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`-----------------|*/
|
/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`-----------------|*/
|
||||||
@@ -251,7 +251,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|||||||
* `--------+---------+---------+------^^^-------+-----^^^--------+---------+---------+---------'
|
* `--------+---------+---------+------^^^-------+-----^^^--------+---------+---------+---------'
|
||||||
*/
|
*/
|
||||||
|
|
||||||
[_PLOVER] = KEYMAP_TV44(
|
[_PLOVER] = KEYMAP(
|
||||||
/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------.*/
|
/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------.*/
|
||||||
KC_1 , KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1 ,
|
KC_1 , KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1 ,
|
||||||
/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`-----------------|*/
|
/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`-----------------|*/
|
||||||
@@ -273,7 +273,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|||||||
* | | | | | | | | Reset |
|
* | | | | | | | | Reset |
|
||||||
* `--------+---------+---------+------^^^-------+-----^^^--------+---------+---------+---------'
|
* `--------+---------+---------+------^^^-------+-----^^^--------+---------+---------+---------'
|
||||||
*/
|
*/
|
||||||
[_ADJUST] = KEYMAP_TV44(
|
[_ADJUST] = KEYMAP(
|
||||||
/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------.*/
|
/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------.*/
|
||||||
_______,_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL ,
|
_______,_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL ,
|
||||||
/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`-----------------|*/
|
/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`-----------------|*/
|
||||||
|
|||||||
@@ -1,36 +0,0 @@
|
|||||||
#ifndef CONFIG_USER_H
|
|
||||||
#define CONFIG_USER_H
|
|
||||||
|
|
||||||
#include "../../config.h"
|
|
||||||
|
|
||||||
/**
|
|
||||||
*TV44 keymap definition macro
|
|
||||||
*/
|
|
||||||
#define KEYMAP_TV44( \
|
|
||||||
K01, K02, K03, K04, K05, K06, K07, K08, K09, K10, K11, K12, \
|
|
||||||
K13, K14, K15, K16, K17, K18, K19, K20, K21, K22, K23, K24, \
|
|
||||||
K25, K26, K27, K28, K29, K30, K31, K32, K33, K34, K35, K36, \
|
|
||||||
K37, K38, K39, K40, K41, K42, K43, K44 \
|
|
||||||
) { \
|
|
||||||
{ K01, K02, K03, K04, K05, K06, K07, K08, K09, K10, K11, K12, }, \
|
|
||||||
{ K13, K14, K15, K16, K17, K18, K19, K20, K21, K22, K23, K24, }, \
|
|
||||||
{ K25, K26, K27, K28, K29, K30, K31, K32, K33, K34, K35, K36, }, \
|
|
||||||
{ K37, K38, K39, K40, KC_NO, KC_NO, KC_NO, K41, K42, K43, KC_NO, K44 } \
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
*TV45 keymap definition macro (arrows layout)
|
|
||||||
*/
|
|
||||||
#define KEYMAP_TV45( \
|
|
||||||
K01, K02, K03, K04, K05, K06, K07, K08, K09, K10, K11, K12, \
|
|
||||||
K13, K14, K15, K16, K17, K18, K19, K20, K21, K22, K23, K24, \
|
|
||||||
K25, K26, K27, K28, K29, K30, K31, K32, K33, K34, K35, K36, \
|
|
||||||
K37, K38, K39, K40, K41, K42, K43, K44, K45 \
|
|
||||||
) { \
|
|
||||||
{ K01, K02, K03, K04, K05, K06, K07, K08, K09, K10, K11, K12, }, \
|
|
||||||
{ K13, K14, K15, K16, K17, K18, K19, K20, K21, K22, K23, K24, }, \
|
|
||||||
{ K25, K26, K27, K28, K29, K30, K31, K32, K33, K34, K35, K36, }, \
|
|
||||||
{ K37, K38, K39, K40, KC_NO, KC_NO, KC_NO, K41, K42, K43, K44, K45 } \
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
|
||||||
@@ -49,7 +49,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|||||||
* | Alt/` | GUI | Lower | Space | Space | Raise | GUI | Alt | Ctrl |
|
* | Alt/` | GUI | Lower | Space | Space | Raise | GUI | Alt | Ctrl |
|
||||||
* `-------+---------+--------+-----^^^------+-----^^^------+---------+------+------+-------'
|
* `-------+---------+--------+-----^^^------+-----^^^------+---------+------+------+-------'
|
||||||
*/
|
*/
|
||||||
[_QWERTY] = KEYMAP_TV45(
|
[_QWERTY] = KEYMAP_ARROW(
|
||||||
/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------.*/
|
/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------.*/
|
||||||
HPR_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC ,
|
HPR_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC ,
|
||||||
/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`-----------------|*/
|
/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`-----------------|*/
|
||||||
@@ -71,7 +71,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|||||||
* | Alt/` | GUI | Lower | Space | Space | Raise | GUI | Alt | Ctrl |
|
* | Alt/` | GUI | Lower | Space | Space | Raise | GUI | Alt | Ctrl |
|
||||||
* `-------+---------+--------+-----^^^------+-----^^^------+---------+------+------+-------'
|
* `-------+---------+--------+-----^^^------+-----^^^------+---------+------+------+-------'
|
||||||
*/
|
*/
|
||||||
[_COLEMAK] = KEYMAP_TV45(
|
[_COLEMAK] = KEYMAP_ARROW(
|
||||||
/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------.*/
|
/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------.*/
|
||||||
HPR_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC ,
|
HPR_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC ,
|
||||||
/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`-----------------|*/
|
/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`-----------------|*/
|
||||||
@@ -93,7 +93,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|||||||
* | Alt/` | GUI | Lower | Space | Space | Raise | GUI | Alt | Ctrl |
|
* | Alt/` | GUI | Lower | Space | Space | Raise | GUI | Alt | Ctrl |
|
||||||
* `-------+---------+--------+-----^^^------+-----^^^------+---------+------+------+-------'
|
* `-------+---------+--------+-----^^^------+-----^^^------+---------+------+------+-------'
|
||||||
*/
|
*/
|
||||||
[_DVORAK] = KEYMAP_TV45(
|
[_DVORAK] = KEYMAP_ARROW(
|
||||||
/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------.*/
|
/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------.*/
|
||||||
HPR_TAB,KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC ,
|
HPR_TAB,KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC ,
|
||||||
/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`-----------------|*/
|
/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`-----------------|*/
|
||||||
@@ -115,7 +115,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|||||||
* | Brite | | | Home | End | | Left | Down | Right |
|
* | Brite | | | Home | End | | Left | Down | Right |
|
||||||
* `-------+---------+--------+-----^^^------+-----^^^------+---------+------+------+-------'
|
* `-------+---------+--------+-----^^^------+-----^^^------+---------+------+------+-------'
|
||||||
*/
|
*/
|
||||||
[_LOWER] = KEYMAP_TV45(
|
[_LOWER] = KEYMAP_ARROW(
|
||||||
/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------.*/
|
/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------.*/
|
||||||
ALL_T(KC_0), KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL ,
|
ALL_T(KC_0), KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL ,
|
||||||
/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`-----------------|*/
|
/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`-----------------|*/
|
||||||
@@ -137,7 +137,7 @@ ALT_T(BACKLIT), _______ , _______ , KC_HOME , KC_END , _____
|
|||||||
* | Brite | | | Play | Next | | Mute | Vol- | Vol+ |
|
* | Brite | | | Play | Next | | Mute | Vol- | Vol+ |
|
||||||
* `-------+---------+--------+-----^^^------+-----^^^------+---------+------+------+-------'
|
* `-------+---------+--------+-----^^^------+-----^^^------+---------+------+------+-------'
|
||||||
*/
|
*/
|
||||||
[_RAISE] = KEYMAP_TV45(
|
[_RAISE] = KEYMAP_ARROW(
|
||||||
/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------.*/
|
/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------.*/
|
||||||
ALL_T(KC_TILD),KC_EXLM,KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL ,
|
ALL_T(KC_TILD),KC_EXLM,KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL ,
|
||||||
/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`-----------------|*/
|
/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`-----------------|*/
|
||||||
@@ -159,7 +159,7 @@ ALT_T(BACKLIT), _______ , _______ , KC_MPLY , KC_MNXT , _____
|
|||||||
* | | | | | | | | | |
|
* | | | | | | | | | |
|
||||||
* `-------+---------+--------+-----^^^------+-----^^^------+---------+------+------+-------'
|
* `-------+---------+--------+-----^^^------+-----^^^------+---------+------+------+-------'
|
||||||
*/
|
*/
|
||||||
[_ADJUST] = KEYMAP_TV45(
|
[_ADJUST] = KEYMAP_ARROW(
|
||||||
/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------.*/
|
/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------.*/
|
||||||
_______, RESET , _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET ,
|
_______, RESET , _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET ,
|
||||||
/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`-----------------|*/
|
/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`-----------------|*/
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ This keymap is based on a combination of my Planck keymap and [jeebak's TV44 lay
|
|||||||
|
|
||||||
I had been using something close to the default Minivan layout, but after spending a bit of time with the Planck and Preonic, I decided it would be better for me to try to standardize to some degree, where possible.
|
I had been using something close to the default Minivan layout, but after spending a bit of time with the Planck and Preonic, I decided it would be better for me to try to standardize to some degree, where possible.
|
||||||
|
|
||||||
Also, it's worth noting that my Minivan is one with the "arrows" layout, which has a 45th key, so I had to define a new KEYMAP_TV45 macro in config.h. In spite of this, the 45-key Minivan is still technically considered a "TV44" as far as I know.
|
Also, it's worth noting that my Minivan is one with the "arrows" layout, which has a 45th key. In spite of this, the 45-key Minivan is still technically considered a "TV44" as far as I know.
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
@@ -21,9 +21,9 @@ Also, it's worth noting that my Minivan is one with the "arrows" layout, which h
|
|||||||
This key modifies with "Hyper" (see [Brett Terpstra's post](http://brettterpstra.com/2012/12/08/a-useful-caps-lock-key/) on this) when held, and outputs the code for Tab when tapped. On the Mac, I use KeyboardMaestro to remap my hyper-keys to do a lot of crazy things.
|
This key modifies with "Hyper" (see [Brett Terpstra's post](http://brettterpstra.com/2012/12/08/a-useful-caps-lock-key/) on this) when held, and outputs the code for Tab when tapped. On the Mac, I use KeyboardMaestro to remap my hyper-keys to do a lot of crazy things.
|
||||||
|
|
||||||
3. **Ctrl/Escape**
|
3. **Ctrl/Escape**
|
||||||
|
|
||||||
I set up another mod-tap, this time for the Escape key that would act as a Control modifier when held.
|
I set up another mod-tap, this time for the Escape key that would act as a Control modifier when held.
|
||||||
|
|
||||||
4. **Alt/Backtick**
|
4. **Alt/Backtick**
|
||||||
|
|
||||||
I don't currently have LEDs on most of my keyboards, and I certainly don't want LED controls on the base layer of a 40%.
|
I don't currently have LEDs on most of my keyboards, and I certainly don't want LED controls on the base layer of a 40%.
|
||||||
|
|||||||
@@ -31,12 +31,12 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|||||||
* | Ftn1 | GUI | Alt | Space/LOWER | Space/RAISE | ' | [ | ] | Alt |
|
* | Ftn1 | GUI | Alt | Space/LOWER | Space/RAISE | ' | [ | ] | Alt |
|
||||||
* `--------------------------------------------------------------------------'
|
* `--------------------------------------------------------------------------'
|
||||||
*/
|
*/
|
||||||
[0] = {
|
[0] = KEYMAP_ARROW(
|
||||||
{KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC},
|
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
|
||||||
{KC_LCTL,KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_ENT},
|
KC_LCTL,KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_ENT,
|
||||||
{KC_LSFT,KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT,KC_SLSH,KC_RSFT },
|
KC_LSFT,KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH,KC_RSFT,
|
||||||
{FTN ,KC_LGUI,KC_LALT,LOWER,XXXXXXX,XXXXXXX,XXXXXXX,RAISE,KC_QUOT,KC_LBRC,KC_RBRC,KC_RALT}
|
FTN, KC_LGUI,KC_LALT, LOWER, RAISE, KC_QUOT,KC_LBRC,KC_RBRC,KC_RALT
|
||||||
},
|
),
|
||||||
/* LOWER
|
/* LOWER
|
||||||
* ,--------------------------------------------------------------------------.
|
* ,--------------------------------------------------------------------------.
|
||||||
* | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | |
|
* | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | |
|
||||||
@@ -48,12 +48,12 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|||||||
* | | | | | | END | LEFT| Down|RIGHT|
|
* | | | | | | END | LEFT| Down|RIGHT|
|
||||||
* `--------------------------------------------------------------------------'
|
* `--------------------------------------------------------------------------'
|
||||||
*/
|
*/
|
||||||
[1] = {
|
[1] = KEYMAP_ARROW(
|
||||||
{KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, _______},
|
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, _______,
|
||||||
{_______,KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS,KC_PLUS,KC_LBRC,KC_RBRC,KC_BSLS },
|
_______,KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS,KC_PLUS,KC_LBRC,KC_RBRC,KC_BSLS,
|
||||||
{_______,KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, XXXXXXX,KC_HOME,KC_PGUP,KC_UP ,KC_PGDN },
|
_______,KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, XXXXXXX,KC_HOME,KC_PGUP,KC_UP ,KC_PGDN,
|
||||||
{XXXXXXX,_______,_______,_______,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,KC_END, KC_LEFT,KC_DOWN,KC_RIGHT}
|
XXXXXXX,_______,_______, _______,XXXXXXX, KC_END, KC_LEFT,KC_DOWN,KC_RIGHT
|
||||||
},
|
),
|
||||||
/* RAISE
|
/* RAISE
|
||||||
* ,--------------------------------------------------------------------------.
|
* ,--------------------------------------------------------------------------.
|
||||||
* | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | |
|
* | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | |
|
||||||
@@ -65,12 +65,12 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|||||||
* | | | | | | END | LEFT| Down|RIGHT|
|
* | | | | | | END | LEFT| Down|RIGHT|
|
||||||
* `--------------------------------------------------------------------------'
|
* `--------------------------------------------------------------------------'
|
||||||
*/
|
*/
|
||||||
[2] ={
|
[2] = KEYMAP_ARROW(
|
||||||
{KC_TILD,KC_EXLM,KC_AT, KC_HASH,KC_DLR, KC_PERC,KC_CIRC,KC_AMPR,KC_ASTR,KC_LPRN,KC_RPRN,_______ },
|
KC_TILD,KC_EXLM,KC_AT, KC_HASH,KC_DLR, KC_PERC,KC_CIRC,KC_AMPR,KC_ASTR,KC_LPRN,KC_RPRN,_______,
|
||||||
{_______,KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS,KC_EQL, KC_LCBR,KC_RCBR,KC_PIPE },
|
_______,KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS,KC_EQL, KC_LCBR,KC_RCBR,KC_PIPE,
|
||||||
{_______,KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______,KC_HOME,KC_PGUP,KC_UP ,KC_PGDN },
|
_______,KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______,KC_HOME,KC_PGUP,KC_UP ,KC_PGDN,
|
||||||
{XXXXXXX,_______,_______,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,_______,KC_END, KC_LEFT,KC_DOWN,KC_RIGHT}
|
XXXXXXX,_______,_______, _______,_______, KC_END, KC_LEFT,KC_DOWN,KC_RIGHT
|
||||||
},
|
),
|
||||||
/* FTN
|
/* FTN
|
||||||
* ,--------------------------------------------------------------------------.
|
* ,--------------------------------------------------------------------------.
|
||||||
* | ESC |WinOf|WinUp| | |Sh+Ca| | PgUp| UP | PgDo|PrtSc| DELET |
|
* | ESC |WinOf|WinUp| | |Sh+Ca| | PgUp| UP | PgDo|PrtSc| DELET |
|
||||||
@@ -82,12 +82,12 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|||||||
* | | DeskL | DeskR| Task Manager| DeskX | MOUSE| | | LED |
|
* | | DeskL | DeskR| Task Manager| DeskX | MOUSE| | | LED |
|
||||||
* `--------------------------------------------------------------------------'
|
* `--------------------------------------------------------------------------'
|
||||||
*/
|
*/
|
||||||
[4] = {
|
[4] = KEYMAP_ARROW(
|
||||||
{KC_ESC ,LALT(KC_F4) ,LGUI(KC_UP) ,XXXXXXX ,XXXXXXX ,S(KC_CAPS) ,XXXXXXX,KC_PGUP,KC_UP,KC_PGDN,KC_PSCR,KC_DELT},
|
KC_ESC ,LALT(KC_F4) ,LGUI(KC_UP) ,XXXXXXX ,XXXXXXX,S(KC_CAPS) ,XXXXXXX ,KC_PGUP,KC_UP ,KC_PGDN ,KC_PSCR,KC_DELT,
|
||||||
{_______,LGUI(KC_LEFT) ,LGUI(KC_DOWN) ,LGUI(KC_RIGHT) ,XXXXXXX ,LALT(KC_CAPS),KC_CAPS,KC_LEFT,KC_DOWN,KC_RIGHT,XXXXXXX,XXXXXXX},
|
_______,LGUI(KC_LEFT) ,LGUI(KC_DOWN) ,LGUI(KC_RIGHT),XXXXXXX,LALT(KC_CAPS) ,KC_CAPS ,KC_LEFT,KC_DOWN,KC_RIGHT,XXXXXXX,XXXXXXX,
|
||||||
{_______,LGUI(LSFT(KC_LEFT)),LGUI(LSFT(KC_RIGHT)),XXXXXXX ,XXXXXXX ,LCTL(KC_CAPS),KC_SLCK,KC_HOME,XXXXXXX,KC_END,XXXXXXX,KC_RCTL},
|
_______,LGUI(LSFT(KC_LEFT)),LGUI(LSFT(KC_RIGHT)),XXXXXXX ,XXXXXXX,LCTL(KC_CAPS) ,KC_SLCK ,KC_HOME,XXXXXXX,KC_END ,XXXXXXX,KC_RCTL,
|
||||||
{_______,LGUI(LCTL(KC_LEFT)),LGUI(LCTL(KC_RIGHT)),LCTL(LALT(KC_DELT)),XXXXXXX,XXXXXXX,XXXXXXX,LGUI(LCTL(KC_F4)),MOUSE,XXXXXXX,XXXXXXX,M(0)}
|
_______,LGUI(LCTL(KC_LEFT)),LGUI(LCTL(KC_RIGHT)), LCTL(LALT(KC_DELT)),LGUI(LCTL(KC_F4)), MOUSE ,XXXXXXX ,XXXXXXX,M(0)
|
||||||
},
|
),
|
||||||
/* MOUSE
|
/* MOUSE
|
||||||
* ,--------------------------------------------------------------------------.
|
* ,--------------------------------------------------------------------------.
|
||||||
* | | | |Mo_Up| | | |M_WhL|M_WhU|M_WhR| | RESET |
|
* | | | |Mo_Up| | | |M_WhL|M_WhU|M_WhR| | RESET |
|
||||||
@@ -99,12 +99,12 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|||||||
* | | | | GO_DEFAULT | GO_DEFAULT | | | | |
|
* | | | | GO_DEFAULT | GO_DEFAULT | | | | |
|
||||||
* `--------------------------------------------------------------------------'
|
* `--------------------------------------------------------------------------'
|
||||||
*/
|
*/
|
||||||
[10] ={
|
[10] = KEYMAP_ARROW(
|
||||||
{XXXXXXX,XXXXXXX,XXXXXXX,KC_MS_U,XXXXXXX,XXXXXXX,XXXXXXX,KC_WH_L,KC_WH_U,KC_WH_R,XXXXXXX,RESET},
|
XXXXXXX,XXXXXXX,XXXXXXX,KC_MS_U,XXXXXXX,XXXXXXX,XXXXXXX,KC_WH_L,KC_WH_U,KC_WH_R,XXXXXXX,RESET,
|
||||||
{XXXXXXX,XXXXXXX,KC_MS_L,KC_MS_D,KC_MS_R,XXXXXXX,XXXXXXX,KC_BTN1,KC_WH_D,KC_BTN2,XXXXXXX,XXXXXXX},
|
XXXXXXX,XXXXXXX,KC_MS_L,KC_MS_D,KC_MS_R,XXXXXXX,XXXXXXX,KC_BTN1,KC_WH_D,KC_BTN2,XXXXXXX,XXXXXXX,
|
||||||
{XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,KC_ACL0,KC_ACL1,KC_ACL2,XXXXXXX,XXXXXXX},
|
XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,KC_ACL0,KC_ACL1,KC_ACL2,XXXXXXX,XXXXXXX,
|
||||||
{XXXXXXX,XXXXXXX,XXXXXXX,GO_DEFT,XXXXXXX,XXXXXXX,XXXXXXX,GO_DEFT,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX}
|
XXXXXXX,XXXXXXX,XXXXXXX, GO_DEFT,GO_DEFT, XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX
|
||||||
}
|
)
|
||||||
};
|
};
|
||||||
|
|
||||||
const uint16_t PROGMEM fn_actions[] = {
|
const uint16_t PROGMEM fn_actions[] = {
|
||||||
@@ -135,4 +135,4 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
return MACRO_NONE;
|
return MACRO_NONE;
|
||||||
};
|
};
|
||||||
@@ -28,47 +28,47 @@ enum planck_keycodes {
|
|||||||
|
|
||||||
|
|
||||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
[_DVORAK] = { /* 0: Dvorak */
|
[_DVORAK] = KEYMAP( /* 0: Dvorak */
|
||||||
{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_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_SLSH,
|
||||||
{KC_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS},
|
KC_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS,
|
||||||
{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_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_RSFT,
|
||||||
{KC_LCTL, KC_LALT, LOWER, KC_BSPC, XXXXXXX, XXXXXXX, XXXXXXX, KC_SPC, RAISE, KC_LGUI, XXXXXXX, KC_ENT }
|
KC_LCTL, KC_LALT, LOWER, KC_BSPC, KC_SPC, RAISE, KC_LGUI, KC_ENT
|
||||||
},
|
),
|
||||||
|
|
||||||
[_QWERTY] = { /* 1: Qwerty */
|
[_QWERTY] = KEYMAP( /* 1: Qwerty */
|
||||||
{KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC},
|
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
|
||||||
{KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT},
|
KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
|
||||||
{KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT},
|
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_LCTL, KC_LALT, LOWER, KC_BSPC, XXXXXXX, XXXXXXX, XXXXXXX, KC_SPC, RAISE, KC_LGUI, XXXXXXX, KC_ENT }
|
KC_LCTL, KC_LALT, LOWER, KC_BSPC, KC_SPC, RAISE, KC_LGUI, KC_ENT
|
||||||
},
|
),
|
||||||
|
|
||||||
[_COLEMAK] = { /* 2: Colemak */
|
[_COLEMAK] = KEYMAP( /* 2: Colemak */
|
||||||
{KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC},
|
KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC,
|
||||||
{KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT},
|
KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT,
|
||||||
{KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT},
|
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_LCTL, KC_LALT, LOWER, KC_BSPC, XXXXXXX, XXXXXXX, XXXXXXX, KC_SPC, RAISE, KC_LGUI, XXXXXXX, KC_ENT }
|
KC_LCTL, KC_LALT, LOWER, KC_BSPC, KC_SPC, RAISE, KC_LGUI, KC_ENT
|
||||||
},
|
),
|
||||||
|
|
||||||
[_LOWER] = {/* 1: FN 1 */
|
[_LOWER] = KEYMAP( /* 1: FN 1 */
|
||||||
{KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_PIPE},
|
KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_PIPE,
|
||||||
{_______, _______, _______, _______, _______, _______, _______, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE},
|
_______, _______, _______, _______, _______, _______, _______, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE,
|
||||||
{KC_CAPS, _______, _______, _______, _______, _______, _______, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______},
|
KC_CAPS, _______, _______, _______, _______, _______, _______, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______,
|
||||||
{KC_LEFT, KC_RGHT, _______, KC_DEL, XXXXXXX, XXXXXXX, XXXXXXX, KC_INS, _______, KC_UP, XXXXXXX, KC_DOWN}
|
KC_LEFT, KC_RGHT, _______, KC_DEL, KC_INS, _______, KC_UP, KC_DOWN
|
||||||
},
|
),
|
||||||
|
|
||||||
[_RAISE] = { /* 2: FN 2 */
|
[_RAISE] = KEYMAP( /* 2: FN 2 */
|
||||||
{KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSLS},
|
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSLS,
|
||||||
{_______, _______, _______, _______, _______, _______, _______, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS},
|
_______, _______, _______, _______, _______, _______, _______, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS,
|
||||||
{KC_CAPS, _______, _______, _______, _______, _______, _______, KC_MPRV, KC_MPLY, KC_MNXT, _______, _______},
|
KC_CAPS, _______, _______, _______, _______, _______, _______, KC_MPRV, KC_MPLY, KC_MNXT, _______, _______,
|
||||||
{KC_LEFT, KC_RGHT, _______, KC_DEL, XXXXXXX, XXXXXXX, XXXXXXX, KC_INS, _______, KC_UP, XXXXXXX, KC_DOWN}
|
KC_LEFT, KC_RGHT, _______, KC_DEL, KC_INS, _______, KC_UP, KC_DOWN
|
||||||
},
|
),
|
||||||
|
|
||||||
[_ADJUST] = {
|
[_ADJUST] = KEYMAP(
|
||||||
{KC_F11, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F12 },
|
KC_F11, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F12,
|
||||||
{_______, RESET, _______, _______, _______, _______, _______, QWERTY, COLEMAK, DVORAK, _______, _______},
|
_______, RESET, _______, _______, _______, _______, _______, QWERTY, COLEMAK, DVORAK, _______, _______,
|
||||||
{_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______},
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
{KC_HOME, KC_END, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, KC_PGUP, XXXXXXX, KC_PGDN}
|
KC_HOME, KC_END, _______, _______, _______, _______, KC_PGUP, KC_PGDN
|
||||||
}
|
)
|
||||||
};
|
};
|
||||||
|
|
||||||
void persistent_default_layer_set(uint16_t default_layer) {
|
void persistent_default_layer_set(uint16_t default_layer) {
|
||||||
|
|||||||
+49
-4
@@ -4,19 +4,64 @@
|
|||||||
#include "quantum.h"
|
#include "quantum.h"
|
||||||
|
|
||||||
// This a shortcut to help you visually see your layout.
|
// This a shortcut to help you visually see your layout.
|
||||||
// The following is an example using the Planck MIT layout
|
// There are a number of variations depending on the layout of your bottom row.
|
||||||
// The first section contains all of the arguements
|
// The arrow variant adds an additional key on the bottom-right, while the
|
||||||
// The second converts the arguments into a two-dimensional array
|
// command variant adds an additional key on the bottom-left. arrow-command is a
|
||||||
|
// combination of both of those, having an additional key on both sides.
|
||||||
|
//
|
||||||
|
// Please note that the numbering of the macro arguments are based on the
|
||||||
|
// numbers of the keys on the PCB.
|
||||||
|
|
||||||
#define KEYMAP( \
|
#define KEYMAP( \
|
||||||
K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, \
|
K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, \
|
||||||
K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, \
|
K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, \
|
||||||
K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, \
|
K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, \
|
||||||
K30, K31, K32, K33, K37, K38, K39, K3A, K3B \
|
K30, K31, K32, K33, K37, K38, K39, K3B \
|
||||||
|
) \
|
||||||
|
{ \
|
||||||
|
{ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B }, \
|
||||||
|
{ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B }, \
|
||||||
|
{ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B }, \
|
||||||
|
{ K30, K31, K32, K33, KC_NO, KC_NO, KC_NO, K37, K38, K39, KC_NO, K3B } \
|
||||||
|
}
|
||||||
|
|
||||||
|
#define KEYMAP_ARROW( \
|
||||||
|
K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, \
|
||||||
|
K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, \
|
||||||
|
K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, \
|
||||||
|
K30, K31, K32, K33, K37, K38, K39, K3A, K3B \
|
||||||
) \
|
) \
|
||||||
{ \
|
{ \
|
||||||
{ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B }, \
|
{ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B }, \
|
||||||
{ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B }, \
|
{ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B }, \
|
||||||
{ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B }, \
|
{ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B }, \
|
||||||
{ K30, K31, K32, K33, KC_NO, KC_NO, KC_NO, K37, K38, K39, K3A, K3B } \
|
{ K30, K31, K32, K33, KC_NO, KC_NO, KC_NO, K37, K38, K39, K3A, K3B } \
|
||||||
|
}
|
||||||
|
|
||||||
|
#define KEYMAP_COMMAND( \
|
||||||
|
K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, \
|
||||||
|
K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, \
|
||||||
|
K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, \
|
||||||
|
K30, K31, K34, K32, K33, K37, K38, K39, K3B \
|
||||||
|
) \
|
||||||
|
{ \
|
||||||
|
{ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B }, \
|
||||||
|
{ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B }, \
|
||||||
|
{ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B }, \
|
||||||
|
{ K30, K31, K32, K33, K34, KC_NO, KC_NO, K37, K38, K39, KC_NO, K3B } \
|
||||||
|
}
|
||||||
|
|
||||||
|
#define KEYMAP_ARROW_COMMAND( \
|
||||||
|
K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, \
|
||||||
|
K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, \
|
||||||
|
K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, \
|
||||||
|
K30, K31, K34, K32, K33, K37, K38, K39, K3A, K3B \
|
||||||
|
) \
|
||||||
|
{ \
|
||||||
|
{ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B }, \
|
||||||
|
{ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B }, \
|
||||||
|
{ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B }, \
|
||||||
|
{ K30, K31, K32, K33, K34, KC_NO, KC_NO, K37, K38, K39, K3A, K3B } \
|
||||||
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
@@ -437,6 +437,14 @@ bool process_record_quantum(keyrecord_t *record) {
|
|||||||
return false;
|
return false;
|
||||||
// break;
|
// break;
|
||||||
}
|
}
|
||||||
|
case GRAVE_ESC: {
|
||||||
|
void (*method)(uint8_t) = (record->event.pressed) ? &add_key : &del_key;
|
||||||
|
uint8_t shifted = get_mods() & ((MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT)
|
||||||
|
|MOD_BIT(KC_LGUI)|MOD_BIT(KC_RGUI)));
|
||||||
|
|
||||||
|
method(shifted ? KC_GRAVE : KC_ESCAPE);
|
||||||
|
send_keyboard_report();
|
||||||
|
}
|
||||||
default: {
|
default: {
|
||||||
shift_interrupted[0] = true;
|
shift_interrupted[0] = true;
|
||||||
shift_interrupted[1] = true;
|
shift_interrupted[1] = true;
|
||||||
|
|||||||
@@ -104,6 +104,7 @@ enum quantum_keycodes {
|
|||||||
MAGIC_UNHOST_NKRO,
|
MAGIC_UNHOST_NKRO,
|
||||||
MAGIC_UNSWAP_ALT_GUI,
|
MAGIC_UNSWAP_ALT_GUI,
|
||||||
MAGIC_TOGGLE_NKRO,
|
MAGIC_TOGGLE_NKRO,
|
||||||
|
GRAVE_ESC,
|
||||||
|
|
||||||
// Leader key
|
// Leader key
|
||||||
#ifndef DISABLE_LEADER
|
#ifndef DISABLE_LEADER
|
||||||
@@ -514,6 +515,8 @@ enum quantum_keycodes {
|
|||||||
#define MACROTAP(kc) (kc | QK_MACRO | FUNC_TAP<<8)
|
#define MACROTAP(kc) (kc | QK_MACRO | FUNC_TAP<<8)
|
||||||
#define MACRODOWN(...) (record->event.pressed ? MACRO(__VA_ARGS__) : MACRO_NONE)
|
#define MACRODOWN(...) (record->event.pressed ? MACRO(__VA_ARGS__) : MACRO_NONE)
|
||||||
|
|
||||||
|
#define KC_GESC GRAVE_ESC
|
||||||
|
|
||||||
|
|
||||||
// L-ayer, T-ap - 256 keycode max, 16 layer max
|
// L-ayer, T-ap - 256 keycode max, 16 layer max
|
||||||
#define LT(layer, kc) (kc | QK_LAYER_TAP | ((layer & 0xF) << 8))
|
#define LT(layer, kc) (kc | QK_LAYER_TAP | ((layer & 0xF) << 8))
|
||||||
|
|||||||
@@ -127,3 +127,17 @@ bool led_keyframe_normal_orientation(keyframe_animation_t* animation, visualizer
|
|||||||
gdispGSetOrientation(LED_DISPLAY, GDISP_ROTATE_0);
|
gdispGSetOrientation(LED_DISPLAY, GDISP_ROTATE_0);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool led_keyframe_disable(keyframe_animation_t* animation, visualizer_state_t* state) {
|
||||||
|
(void)state;
|
||||||
|
(void)animation;
|
||||||
|
gdispGSetPowerMode(LED_DISPLAY, powerOff);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool led_keyframe_enable(keyframe_animation_t* animation, visualizer_state_t* state) {
|
||||||
|
(void)state;
|
||||||
|
(void)animation;
|
||||||
|
gdispGSetPowerMode(LED_DISPLAY, powerOn);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
@@ -35,6 +35,9 @@ bool led_keyframe_crossfade(keyframe_animation_t* animation, visualizer_state_t*
|
|||||||
bool led_keyframe_mirror_orientation(keyframe_animation_t* animation, visualizer_state_t* state);
|
bool led_keyframe_mirror_orientation(keyframe_animation_t* animation, visualizer_state_t* state);
|
||||||
bool led_keyframe_normal_orientation(keyframe_animation_t* animation, visualizer_state_t* state);
|
bool led_keyframe_normal_orientation(keyframe_animation_t* animation, visualizer_state_t* state);
|
||||||
|
|
||||||
|
bool led_keyframe_disable(keyframe_animation_t* animation, visualizer_state_t* state);
|
||||||
|
bool led_keyframe_enable(keyframe_animation_t* animation, visualizer_state_t* state);
|
||||||
|
|
||||||
extern keyframe_animation_t led_test_animation;
|
extern keyframe_animation_t led_test_animation;
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -58,8 +58,11 @@ SOFTWARE.
|
|||||||
static visualizer_keyboard_status_t current_status = {
|
static visualizer_keyboard_status_t current_status = {
|
||||||
.layer = 0xFFFFFFFF,
|
.layer = 0xFFFFFFFF,
|
||||||
.default_layer = 0xFFFFFFFF,
|
.default_layer = 0xFFFFFFFF,
|
||||||
.mods = 0xFF,
|
|
||||||
.leds = 0xFFFFFFFF,
|
.leds = 0xFFFFFFFF,
|
||||||
|
#ifdef BACKLIGHT_ENABLE
|
||||||
|
.backlight_level = 0,
|
||||||
|
#endif
|
||||||
|
.mods = 0xFF,
|
||||||
.suspended = false,
|
.suspended = false,
|
||||||
#ifdef VISUALIZER_USER_DATA_SIZE
|
#ifdef VISUALIZER_USER_DATA_SIZE
|
||||||
.user_data = {0}
|
.user_data = {0}
|
||||||
@@ -72,6 +75,9 @@ static bool same_status(visualizer_keyboard_status_t* status1, visualizer_keyboa
|
|||||||
status1->mods == status2->mods &&
|
status1->mods == status2->mods &&
|
||||||
status1->leds == status2->leds &&
|
status1->leds == status2->leds &&
|
||||||
status1->suspended == status2->suspended
|
status1->suspended == status2->suspended
|
||||||
|
#ifdef BACKLIGHT_ENABLE
|
||||||
|
&& status1->backlight_level == status2->backlight_level
|
||||||
|
#endif
|
||||||
#ifdef VISUALIZER_USER_DATA_SIZE
|
#ifdef VISUALIZER_USER_DATA_SIZE
|
||||||
&& memcmp(status1->user_data, status2->user_data, VISUALIZER_USER_DATA_SIZE) == 0
|
&& memcmp(status1->user_data, status2->user_data, VISUALIZER_USER_DATA_SIZE) == 0
|
||||||
#endif
|
#endif
|
||||||
@@ -279,6 +285,18 @@ static DECLARE_THREAD_FUNCTION(visualizerThread, arg) {
|
|||||||
bool enabled = visualizer_enabled;
|
bool enabled = visualizer_enabled;
|
||||||
if (force_update || !same_status(&state.status, ¤t_status)) {
|
if (force_update || !same_status(&state.status, ¤t_status)) {
|
||||||
force_update = false;
|
force_update = false;
|
||||||
|
#if BACKLIGHT_ENABLE
|
||||||
|
if(current_status.backlight_level != state.status.backlight_level) {
|
||||||
|
if (current_status.backlight_level != 0) {
|
||||||
|
gdispGSetPowerMode(LED_DISPLAY, powerOn);
|
||||||
|
uint16_t percent = (uint16_t)current_status.backlight_level * 100 / BACKLIGHT_LEVELS;
|
||||||
|
gdispGSetBacklight(LED_DISPLAY, percent);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
gdispGSetPowerMode(LED_DISPLAY, powerOff);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
if (visualizer_enabled) {
|
if (visualizer_enabled) {
|
||||||
if (current_status.suspended) {
|
if (current_status.suspended) {
|
||||||
stop_all_keyframe_animations();
|
stop_all_keyframe_animations();
|
||||||
@@ -309,7 +327,7 @@ static DECLARE_THREAD_FUNCTION(visualizerThread, arg) {
|
|||||||
update_keyframe_animation(animations[i], &state, delta, &sleep_time);
|
update_keyframe_animation(animations[i], &state, delta, &sleep_time);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#ifdef LED_ENABLE
|
#ifdef BACKLIGHT_ENABLE
|
||||||
gdispGFlush(LED_DISPLAY);
|
gdispGFlush(LED_DISPLAY);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -372,7 +390,7 @@ void visualizer_init(void) {
|
|||||||
#ifdef LCD_ENABLE
|
#ifdef LCD_ENABLE
|
||||||
LCD_DISPLAY = get_lcd_display();
|
LCD_DISPLAY = get_lcd_display();
|
||||||
#endif
|
#endif
|
||||||
#ifdef LED_ENABLE
|
#ifdef BACKLIGHT_ENABLE
|
||||||
LED_DISPLAY = get_led_display();
|
LED_DISPLAY = get_led_display();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -445,6 +463,9 @@ void visualizer_update(uint32_t default_state, uint32_t state, uint8_t mods, uin
|
|||||||
.default_layer = default_state,
|
.default_layer = default_state,
|
||||||
.mods = mods,
|
.mods = mods,
|
||||||
.leds = leds,
|
.leds = leds,
|
||||||
|
#ifdef BACKLIGHT_ENABLE
|
||||||
|
.backlight_level = current_status.backlight_level,
|
||||||
|
#endif
|
||||||
.suspended = current_status.suspended,
|
.suspended = current_status.suspended,
|
||||||
};
|
};
|
||||||
#ifdef VISUALIZER_USER_DATA_SIZE
|
#ifdef VISUALIZER_USER_DATA_SIZE
|
||||||
@@ -467,3 +488,10 @@ void visualizer_resume(void) {
|
|||||||
current_status.suspended = false;
|
current_status.suspended = false;
|
||||||
update_status(true);
|
update_status(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef BACKLIGHT_ENABLE
|
||||||
|
void backlight_set(uint8_t level) {
|
||||||
|
current_status.backlight_level = level;
|
||||||
|
update_status(true);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
@@ -34,6 +34,10 @@ SOFTWARE.
|
|||||||
#include "lcd_backlight.h"
|
#include "lcd_backlight.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef BACKLIGHT_ENABLE
|
||||||
|
#include "backlight.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
// use this function to merge both real_mods and oneshot_mods in a uint16_t
|
// use this function to merge both real_mods and oneshot_mods in a uint16_t
|
||||||
uint8_t visualizer_get_mods(void);
|
uint8_t visualizer_get_mods(void);
|
||||||
|
|
||||||
@@ -65,9 +69,12 @@ struct keyframe_animation_t;
|
|||||||
typedef struct {
|
typedef struct {
|
||||||
uint32_t layer;
|
uint32_t layer;
|
||||||
uint32_t default_layer;
|
uint32_t default_layer;
|
||||||
uint8_t mods;
|
|
||||||
uint32_t leds; // See led.h for available statuses
|
uint32_t leds; // See led.h for available statuses
|
||||||
|
uint8_t mods;
|
||||||
bool suspended;
|
bool suspended;
|
||||||
|
#ifdef BACKLIGHT_ENABLE
|
||||||
|
uint8_t backlight_level;
|
||||||
|
#endif
|
||||||
#ifdef VISUALIZER_USER_DATA_SIZE
|
#ifdef VISUALIZER_USER_DATA_SIZE
|
||||||
uint8_t user_data[VISUALIZER_USER_DATA_SIZE];
|
uint8_t user_data[VISUALIZER_USER_DATA_SIZE];
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -42,9 +42,8 @@ SRC += $(VISUALIZER_DIR)/resources/lcd_logo.c
|
|||||||
OPT_DEFS += -DLCD_BACKLIGHT_ENABLE
|
OPT_DEFS += -DLCD_BACKLIGHT_ENABLE
|
||||||
endif
|
endif
|
||||||
|
|
||||||
ifeq ($(strip $(LED_ENABLE)), yes)
|
ifeq ($(strip $(BACKLIGHT_ENABLE)), yes)
|
||||||
SRC += $(VISUALIZER_DIR)/led_keyframes.c
|
SRC += $(VISUALIZER_DIR)/led_keyframes.c
|
||||||
OPT_DEFS += -DLED_ENABLE
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
include $(GFXLIB)/gfx.mk
|
include $(GFXLIB)/gfx.mk
|
||||||
|
|||||||
@@ -1,3 +1,6 @@
|
|||||||
|
TEST_LIST = $(notdir $(patsubst %/rules.mk,%,$(wildcard $(ROOT_DIR)/tests/*/rules.mk)))
|
||||||
|
FULL_TESTS := $(TEST_LIST)
|
||||||
|
|
||||||
include $(ROOT_DIR)/quantum/serial_link/tests/testlist.mk
|
include $(ROOT_DIR)/quantum/serial_link/tests/testlist.mk
|
||||||
|
|
||||||
define VALIDATE_TEST_LIST
|
define VALIDATE_TEST_LIST
|
||||||
@@ -10,4 +13,5 @@ define VALIDATE_TEST_LIST
|
|||||||
endif
|
endif
|
||||||
endef
|
endef
|
||||||
|
|
||||||
|
|
||||||
$(eval $(call VALIDATE_TEST_LIST,$(firstword $(TEST_LIST)),$(wordlist 2,9999,$(TEST_LIST))))
|
$(eval $(call VALIDATE_TEST_LIST,$(firstword $(TEST_LIST)),$(wordlist 2,9999,$(TEST_LIST))))
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
/* Copyright 2017 Fred Sundvik
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef TESTS_BASIC_CONFIG_H_
|
||||||
|
#define TESTS_BASIC_CONFIG_H_
|
||||||
|
|
||||||
|
#define MATRIX_ROWS 2
|
||||||
|
#define MATRIX_COLS 2
|
||||||
|
|
||||||
|
|
||||||
|
#endif /* TESTS_BASIC_CONFIG_H_ */
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
# Copyright 2017 Fred Sundvik
|
||||||
|
#
|
||||||
|
# This program is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation, either version 2 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
CUSTOM_MATRIX=yes
|
||||||
@@ -0,0 +1,60 @@
|
|||||||
|
/* Copyright 2017 Fred Sundvik
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "gtest/gtest.h"
|
||||||
|
#include "gmock/gmock.h"
|
||||||
|
|
||||||
|
#include "quantum.h"
|
||||||
|
#include "test_driver.h"
|
||||||
|
#include "test_matrix.h"
|
||||||
|
#include "keyboard_report_util.h"
|
||||||
|
#include "test_fixture.h"
|
||||||
|
|
||||||
|
using testing::_;
|
||||||
|
using testing::Return;
|
||||||
|
|
||||||
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
[0] = {
|
||||||
|
{KC_A, KC_B},
|
||||||
|
{KC_C, KC_D}
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
class KeyPress : public TestFixture {};
|
||||||
|
|
||||||
|
TEST_F(KeyPress, SendKeyboardIsNotCalledWhenNoKeyIsPressed) {
|
||||||
|
TestDriver driver;
|
||||||
|
EXPECT_CALL(driver, send_keyboard_mock(_)).Times(0);
|
||||||
|
keyboard_task();
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_F(KeyPress, CorrectKeyIsReportedWhenPressed) {
|
||||||
|
TestDriver driver;
|
||||||
|
press_key(0, 0);
|
||||||
|
EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_A)));
|
||||||
|
keyboard_task();
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_F(KeyPress, CorrectKeysAreReportedWhenTwoKeysArePressed) {
|
||||||
|
TestDriver driver;
|
||||||
|
press_key(1, 0);
|
||||||
|
press_key(0, 1);
|
||||||
|
//Note that QMK only processes one key at a time
|
||||||
|
EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_B)));
|
||||||
|
keyboard_task();
|
||||||
|
EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_B, KC_C)));
|
||||||
|
keyboard_task();
|
||||||
|
}
|
||||||
@@ -0,0 +1,76 @@
|
|||||||
|
/* Copyright 2017 Fred Sundvik
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "keyboard_report_util.h"
|
||||||
|
#include <vector>
|
||||||
|
#include <algorithm>
|
||||||
|
using namespace testing;
|
||||||
|
|
||||||
|
namespace
|
||||||
|
{
|
||||||
|
std::vector<uint8_t> get_keys(const report_keyboard_t& report) {
|
||||||
|
std::vector<uint8_t> result;
|
||||||
|
#if defined(NKRO_ENABLE)
|
||||||
|
#error NKRO support not implemented yet
|
||||||
|
#elif defined(USB_6KRO_ENABLE)
|
||||||
|
#error 6KRO support not implemented yet
|
||||||
|
#else
|
||||||
|
for(size_t i=0; i<KEYBOARD_REPORT_KEYS; i++) {
|
||||||
|
if (report.keys[i]) {
|
||||||
|
result.emplace_back(report.keys[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
std::sort(result.begin(), result.end());
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool operator==(const report_keyboard_t& lhs, const report_keyboard_t& rhs) {
|
||||||
|
auto lhskeys = get_keys(lhs);
|
||||||
|
auto rhskeys = get_keys(rhs);
|
||||||
|
return lhs.mods == rhs.mods && lhskeys == rhskeys;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::ostream& operator<<(std::ostream& stream, const report_keyboard_t& value) {
|
||||||
|
stream << "Keyboard report:" << std::endl;
|
||||||
|
stream << "Mods: " << value.mods << std::endl;
|
||||||
|
// TODO: This should probably print friendly names for the keys
|
||||||
|
for (uint32_t k: get_keys(value)) {
|
||||||
|
stream << k << std::endl;
|
||||||
|
}
|
||||||
|
return stream;
|
||||||
|
}
|
||||||
|
|
||||||
|
KeyboardReportMatcher::KeyboardReportMatcher(const std::vector<uint8_t>& keys) {
|
||||||
|
// TODO: Support modifiers
|
||||||
|
memset(m_report.raw, 0, sizeof(m_report.raw));
|
||||||
|
for (auto k: keys) {
|
||||||
|
add_key_to_report(&m_report, k);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool KeyboardReportMatcher::MatchAndExplain(report_keyboard_t& report, MatchResultListener* listener) const {
|
||||||
|
return m_report == report;
|
||||||
|
}
|
||||||
|
|
||||||
|
void KeyboardReportMatcher::DescribeTo(::std::ostream* os) const {
|
||||||
|
*os << "is equal to " << m_report;
|
||||||
|
}
|
||||||
|
|
||||||
|
void KeyboardReportMatcher::DescribeNegationTo(::std::ostream* os) const {
|
||||||
|
*os << "is not equal to " << m_report;
|
||||||
|
}
|
||||||
Loaded 100 of 121 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user