diff --git a/.github/workflows/ci_builds.yml b/.github/workflows/ci_builds.yml
index 81151d689877..7fa07fe09d90 100644
--- a/.github/workflows/ci_builds.yml
+++ b/.github/workflows/ci_builds.yml
@@ -53,7 +53,7 @@ jobs:
[ ! -f .failed ] || exit 1
- name: 'Upload artifacts'
- uses: actions/upload-artifact@v3
+ uses: actions/upload-artifact@v4
if: always()
with:
name: artifacts-${{ github.event.inputs.branch || github.ref_name }}-${{ matrix.keymap }}
diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml
index a6944e1816ff..fc0ed11c43ff 100644
--- a/.github/workflows/docs.yml
+++ b/.github/workflows/docs.yml
@@ -37,7 +37,7 @@ jobs:
qmk --verbose generate-docs
- name: Deploy
- uses: JamesIves/github-pages-deploy-action@v4.4.3
+ uses: JamesIves/github-pages-deploy-action@v4.5.0
with:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
BASE_BRANCH: master
diff --git a/.github/workflows/format.yml b/.github/workflows/format.yml
index 9e8b80c883e3..81da72046c84 100644
--- a/.github/workflows/format.yml
+++ b/.github/workflows/format.yml
@@ -35,7 +35,7 @@ jobs:
- name: Get changed files
id: file_changes
- uses: tj-actions/changed-files@v39
+ uses: tj-actions/changed-files@v42
- name: Run qmk formatters
shell: 'bash {0}'
diff --git a/.github/workflows/labeler.yml b/.github/workflows/labeler.yml
index 95f58ff003f1..fa4b8981add9 100644
--- a/.github/workflows/labeler.yml
+++ b/.github/workflows/labeler.yml
@@ -12,7 +12,7 @@ jobs:
triage:
runs-on: ubuntu-latest
steps:
- - uses: actions/labeler@main
+ - uses: actions/labeler@v4
with:
repo-token: "${{ secrets.GITHUB_TOKEN }}"
configuration-path: '.github/labeler.yml'
diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml
index 9862ff502c53..67823103f1bb 100644
--- a/.github/workflows/lint.yml
+++ b/.github/workflows/lint.yml
@@ -27,7 +27,7 @@ jobs:
- name: Get changed files
id: file_changes
- uses: tj-actions/changed-files@v39
+ uses: tj-actions/changed-files@v42
- name: Print info
run: |
@@ -74,31 +74,10 @@ jobs:
fi
exit $exit_code
- - name: Verify at most one added keyboard
+ - name: Verify keyboard aliases
if: always()
shell: 'bash {0}'
run: |
git reset --hard
git clean -xfd
-
- # Get the keyboard list and count for the target branch
- git checkout -f ${{ github.base_ref }}
- git pull --ff-only
- QMK_KEYBOARDS_BASE=$(qmk list-keyboards)
- QMK_KEYBOARDS_BASE_COUNT=$(qmk list-keyboards | wc -l)
-
- # Get the keyboard list and count for the PR
- git checkout -f ${{ github.head_ref }}
- git merge --no-commit --squash ${{ github.base_ref }}
- QMK_KEYBOARDS_PR=$(qmk list-keyboards)
- QMK_KEYBOARDS_PR_COUNT=$(qmk list-keyboards | wc -l)
-
- echo "::group::Keyboards changes in this PR"
- diff -d -U 0 <(echo "$QMK_KEYBOARDS_BASE") <(echo "$QMK_KEYBOARDS_PR") | grep -vE '^(---|\+\+\+|@@)' | sed -e 's@^-@Removed: @g' -e 's@^+@ Added: @g'
- echo "::endgroup::"
-
- if [[ $QMK_KEYBOARDS_PR_COUNT -gt $(($QMK_KEYBOARDS_BASE_COUNT + 1)) ]]; then
- echo "More than one keyboard added in this PR -- see the PR Checklist."
- echo "::error::More than one keyboard added in this PR -- see the PR Checklist."
- exit 1
- fi
+ qmk ci-validate-aliases
diff --git a/.github/workflows/stale.yml b/.github/workflows/stale.yml
index f011fb5460d2..ce9bd0f3161e 100644
--- a/.github/workflows/stale.yml
+++ b/.github/workflows/stale.yml
@@ -3,6 +3,7 @@ name: 'Close stale issues and PRs'
permissions:
issues: write
pull-requests: write
+ actions: write
on:
schedule:
@@ -13,7 +14,7 @@ jobs:
stale:
runs-on: ubuntu-latest
steps:
- - uses: actions/stale@v8
+ - uses: actions/stale@main
with:
repo-token: ${{ secrets.GITHUB_TOKEN }}
diff --git a/.gitignore b/.gitignore
index e9e7b27e6c61..ca9f00a73308 100644
--- a/.gitignore
+++ b/.gitignore
@@ -18,6 +18,11 @@
*.lst
*.map
*.o
+*.a
+*.so
+*.dylib
+*.dll
+*.la
*.stackdump
*.sym
@@ -108,5 +113,6 @@ compile_commands.json
.clangd/
.cache/
-# VIA(L) json files that don't belong in QMK repo
+# VIA(L) files that don't belong in QMK repo
via*.json
+/keyboards/**/keymaps/vial/*
diff --git a/Makefile b/Makefile
index 9f2e4636a4b4..ab30a17f58af 100644
--- a/Makefile
+++ b/Makefile
@@ -38,6 +38,11 @@ $(info QMK Firmware $(QMK_VERSION))
endif
endif
+# Try to determine userspace from qmk config, if set.
+ifeq ($(QMK_USERSPACE),)
+ QMK_USERSPACE = $(shell qmk config -ro user.overlay_dir | cut -d= -f2 | sed -e 's@^None$$@@g')
+endif
+
# Determine which qmk cli to use
QMK_BIN := qmk
@@ -191,9 +196,20 @@ define PARSE_KEYBOARD
KEYMAPS += $$(notdir $$(patsubst %/.,%,$$(wildcard $(ROOT_DIR)/keyboards/$$(KEYBOARD_FOLDER_PATH_4)/keymaps/*/.)))
KEYMAPS += $$(notdir $$(patsubst %/.,%,$$(wildcard $(ROOT_DIR)/keyboards/$$(KEYBOARD_FOLDER_PATH_5)/keymaps/*/.)))
+ ifneq ($(QMK_USERSPACE),)
+ KEYMAPS += $$(notdir $$(patsubst %/.,%,$$(wildcard $(QMK_USERSPACE)/keyboards/$$(KEYBOARD_FOLDER_PATH_1)/keymaps/*/.)))
+ KEYMAPS += $$(notdir $$(patsubst %/.,%,$$(wildcard $(QMK_USERSPACE)/keyboards/$$(KEYBOARD_FOLDER_PATH_2)/keymaps/*/.)))
+ KEYMAPS += $$(notdir $$(patsubst %/.,%,$$(wildcard $(QMK_USERSPACE)/keyboards/$$(KEYBOARD_FOLDER_PATH_3)/keymaps/*/.)))
+ KEYMAPS += $$(notdir $$(patsubst %/.,%,$$(wildcard $(QMK_USERSPACE)/keyboards/$$(KEYBOARD_FOLDER_PATH_4)/keymaps/*/.)))
+ KEYMAPS += $$(notdir $$(patsubst %/.,%,$$(wildcard $(QMK_USERSPACE)/keyboards/$$(KEYBOARD_FOLDER_PATH_5)/keymaps/*/.)))
+ endif
+
KEYBOARD_LAYOUTS := $(shell $(QMK_BIN) list-layouts --keyboard $1)
LAYOUT_KEYMAPS :=
$$(foreach LAYOUT,$$(KEYBOARD_LAYOUTS),$$(eval LAYOUT_KEYMAPS += $$(notdir $$(patsubst %/.,%,$$(wildcard $(ROOT_DIR)/layouts/*/$$(LAYOUT)/*/.)))))
+ ifneq ($(QMK_USERSPACE),)
+ $$(foreach LAYOUT,$$(KEYBOARD_LAYOUTS),$$(eval LAYOUT_KEYMAPS += $$(notdir $$(patsubst %/.,%,$$(wildcard $(QMK_USERSPACE)/layouts/$$(LAYOUT)/*/.)))))
+ endif
KEYMAPS := $$(sort $$(KEYMAPS) $$(LAYOUT_KEYMAPS))
@@ -300,17 +316,18 @@ endef
define BUILD_TEST
TEST_PATH := $1
TEST_NAME := $$(notdir $$(TEST_PATH))
+ TEST_FULL_NAME := $$(subst /,_,$$(patsubst $$(ROOT_DIR)tests/%,%,$$(TEST_PATH)))
MAKE_TARGET := $2
COMMAND := $1
MAKE_CMD := $$(MAKE) -r -R -C $(ROOT_DIR) -f $(BUILDDEFS_PATH)/build_test.mk $$(MAKE_TARGET)
- MAKE_VARS := TEST=$$(TEST_NAME) TEST_PATH=$$(TEST_PATH) FULL_TESTS="$$(FULL_TESTS)"
+ MAKE_VARS := TEST=$$(TEST_NAME) TEST_OUTPUT=$$(TEST_FULL_NAME) TEST_PATH=$$(TEST_PATH) FULL_TESTS="$$(FULL_TESTS)"
MAKE_MSG := $$(MSG_MAKE_TEST)
$$(eval $$(call BUILD))
ifneq ($$(MAKE_TARGET),clean)
- TEST_EXECUTABLE := $$(TEST_OUTPUT_DIR)/$$(TEST_NAME).elf
- TESTS += $$(TEST_NAME)
+ TEST_EXECUTABLE := $$(TEST_OUTPUT_DIR)/$$(TEST_FULL_NAME).elf
+ TESTS += $$(TEST_FULL_NAME)
TEST_MSG := $$(MSG_TEST)
- $$(TEST_NAME)_COMMAND := \
+ $$(TEST_FULL_NAME)_COMMAND := \
printf "$$(TEST_MSG)\n"; \
$$(TEST_EXECUTABLE); \
if [ $$$$? -gt 0 ]; \
@@ -322,15 +339,22 @@ endef
define PARSE_TEST
TESTS :=
- TEST_NAME := $$(firstword $$(subst :, ,$$(RULE)))
- TEST_TARGET := $$(subst $$(TEST_NAME),,$$(subst $$(TEST_NAME):,,$$(RULE)))
+ # list of possible targets, colon-delimited, to reassign to MAKE_TARGET and remove
+ TARGETS := :clean:
+ ifneq (,$$(findstring :$$(lastword $$(subst :, ,$$(RULE))):, $$(TARGETS)))
+ MAKE_TARGET := $$(lastword $$(subst :, ,$$(RULE)))
+ TEST_SUBPATH := $$(subst $$(eval) ,/,$$(wordlist 2, $$(words $$(subst :, ,$$(RULE))), _ $$(subst :, ,$$(RULE))))
+ else
+ MAKE_TARGET :=
+ TEST_SUBPATH := $$(subst :,/,$$(RULE))
+ endif
include $(BUILDDEFS_PATH)/testlist.mk
- ifeq ($$(TEST_NAME),all)
+ ifeq ($$(RULE),all)
MATCHED_TESTS := $$(TEST_LIST)
else
- MATCHED_TESTS := $$(foreach TEST, $$(TEST_LIST),$$(if $$(findstring x$$(TEST_NAME)x, x$$(notdir $$(TEST))x), $$(TEST),))
+ MATCHED_TESTS := $$(foreach TEST, $$(TEST_LIST),$$(if $$(findstring /$$(TEST_SUBPATH)/, $$(patsubst %,%/,$$(TEST))), $$(TEST),))
endif
- $$(foreach TEST,$$(MATCHED_TESTS),$$(eval $$(call BUILD_TEST,$$(TEST),$$(TEST_TARGET))))
+ $$(foreach TEST,$$(MATCHED_TESTS),$$(eval $$(call BUILD_TEST,$$(TEST),$$(MAKE_TARGET))))
endef
@@ -423,8 +447,18 @@ clean:
rm -rf $(BUILD_DIR)
echo 'done.'
-.PHONY: distclean
-distclean: clean
+.PHONY: distclean distclean_qmk
+distclean: distclean_qmk
+distclean_qmk: clean
echo -n 'Deleting *.bin, *.hex, and *.uf2 ... '
rm -f *.bin *.hex *.uf2
echo 'done.'
+
+ifneq ($(QMK_USERSPACE),)
+.PHONY: distclean_userspace
+distclean: distclean_userspace
+distclean_userspace: clean
+ echo -n 'Deleting userspace *.bin, *.hex, and *.uf2 ... '
+ rm -f $(QMK_USERSPACE)/*.bin $(QMK_USERSPACE)/*.hex $(QMK_USERSPACE)/*.uf2
+ echo 'done.'
+endif
diff --git a/builddefs/build_full_test.mk b/builddefs/build_full_test.mk
index 85ee0898ec2d..63f9fea915db 100644
--- a/builddefs/build_full_test.mk
+++ b/builddefs/build_full_test.mk
@@ -13,10 +13,10 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see .
-$(TEST)_INC := \
+$(TEST_OUTPUT)_INC := \
tests/test_common/common_config.h
-$(TEST)_SRC := \
+$(TEST_OUTPUT)_SRC := \
$(QUANTUM_SRC) \
$(SRC) \
$(QUANTUM_PATH)/keymap_introspection.c \
@@ -30,8 +30,8 @@ $(TEST)_SRC := \
tests/test_common/test_logger.cpp \
$(patsubst $(ROOTDIR)/%,%,$(wildcard $(TEST_PATH)/*.cpp))
-$(TEST)_DEFS := $(OPT_DEFS) "-DKEYMAP_C=\"keymap.c\""
+$(TEST_OUTPUT)_DEFS := $(OPT_DEFS) "-DKEYMAP_C=\"keymap.c\""
-$(TEST)_CONFIG := $(TEST_PATH)/config.h
+$(TEST_OUTPUT)_CONFIG := $(TEST_PATH)/config.h
VPATH += $(TOP_DIR)/tests/test_common
diff --git a/builddefs/build_json.mk b/builddefs/build_json.mk
index 0c034eb2aea0..e9d1420f3639 100644
--- a/builddefs/build_json.mk
+++ b/builddefs/build_json.mk
@@ -1,17 +1,36 @@
# Look for a json keymap file
ifneq ("$(wildcard $(MAIN_KEYMAP_PATH_5)/keymap.json)","")
KEYMAP_JSON := $(MAIN_KEYMAP_PATH_5)/keymap.json
- KEYMAP_PATH := $(MAIN_KEYMAP_PATH_5)
+ KEYMAP_JSON_PATH := $(MAIN_KEYMAP_PATH_5)
else ifneq ("$(wildcard $(MAIN_KEYMAP_PATH_4)/keymap.json)","")
KEYMAP_JSON := $(MAIN_KEYMAP_PATH_4)/keymap.json
- KEYMAP_PATH := $(MAIN_KEYMAP_PATH_4)
+ KEYMAP_JSON_PATH := $(MAIN_KEYMAP_PATH_4)
else ifneq ("$(wildcard $(MAIN_KEYMAP_PATH_3)/keymap.json)","")
KEYMAP_JSON := $(MAIN_KEYMAP_PATH_3)/keymap.json
- KEYMAP_PATH := $(MAIN_KEYMAP_PATH_3)
+ KEYMAP_JSON_PATH := $(MAIN_KEYMAP_PATH_3)
else ifneq ("$(wildcard $(MAIN_KEYMAP_PATH_2)/keymap.json)","")
KEYMAP_JSON := $(MAIN_KEYMAP_PATH_2)/keymap.json
- KEYMAP_PATH := $(MAIN_KEYMAP_PATH_2)
+ KEYMAP_JSON_PATH := $(MAIN_KEYMAP_PATH_2)
else ifneq ("$(wildcard $(MAIN_KEYMAP_PATH_1)/keymap.json)","")
KEYMAP_JSON := $(MAIN_KEYMAP_PATH_1)/keymap.json
- KEYMAP_PATH := $(MAIN_KEYMAP_PATH_1)
+ KEYMAP_JSON_PATH := $(MAIN_KEYMAP_PATH_1)
+endif
+
+ifneq ($(QMK_USERSPACE),)
+ ifneq ("$(wildcard $(QMK_USERSPACE)/$(MAIN_KEYMAP_PATH_5)/keymap.json)","")
+ KEYMAP_JSON := $(QMK_USERSPACE)/$(MAIN_KEYMAP_PATH_5)/keymap.json
+ KEYMAP_PATH := $(QMK_USERSPACE)/$(MAIN_KEYMAP_PATH_5)
+ else ifneq ("$(wildcard $(QMK_USERSPACE)/$(MAIN_KEYMAP_PATH_4)/keymap.json)","")
+ KEYMAP_JSON := $(QMK_USERSPACE)/$(MAIN_KEYMAP_PATH_4)/keymap.json
+ KEYMAP_PATH := $(QMK_USERSPACE)/$(MAIN_KEYMAP_PATH_4)
+ else ifneq ("$(wildcard $(QMK_USERSPACE)/$(MAIN_KEYMAP_PATH_3)/keymap.json)","")
+ KEYMAP_JSON := $(QMK_USERSPACE)/$(MAIN_KEYMAP_PATH_3)/keymap.json
+ KEYMAP_PATH := $(QMK_USERSPACE)/$(MAIN_KEYMAP_PATH_3)
+ else ifneq ("$(wildcard $(QMK_USERSPACE)/$(MAIN_KEYMAP_PATH_2)/keymap.json)","")
+ KEYMAP_JSON := $(QMK_USERSPACE)/$(MAIN_KEYMAP_PATH_2)/keymap.json
+ KEYMAP_PATH := $(QMK_USERSPACE)/$(MAIN_KEYMAP_PATH_2)
+ else ifneq ("$(wildcard $(QMK_USERSPACE)/$(MAIN_KEYMAP_PATH_1)/keymap.json)","")
+ KEYMAP_JSON := $(QMK_USERSPACE)/$(MAIN_KEYMAP_PATH_1)/keymap.json
+ KEYMAP_PATH := $(QMK_USERSPACE)/$(MAIN_KEYMAP_PATH_1)
+ endif
endif
diff --git a/builddefs/build_keyboard.mk b/builddefs/build_keyboard.mk
index e93ab97cc134..f17171fe209b 100644
--- a/builddefs/build_keyboard.mk
+++ b/builddefs/build_keyboard.mk
@@ -129,37 +129,68 @@ include $(BUILDDEFS_PATH)/build_json.mk
# Pull in keymap level rules.mk
ifeq ("$(wildcard $(KEYMAP_PATH))", "")
# Look through the possible keymap folders until we find a matching keymap.c
- ifneq ("$(wildcard $(MAIN_KEYMAP_PATH_1)/keymap.c)","")
- -include $(MAIN_KEYMAP_PATH_1)/rules.mk
- KEYMAP_C := $(MAIN_KEYMAP_PATH_1)/keymap.c
- KEYMAP_PATH := $(MAIN_KEYMAP_PATH_1)
- else ifneq ("$(wildcard $(MAIN_KEYMAP_PATH_2)/keymap.c)","")
- -include $(MAIN_KEYMAP_PATH_2)/rules.mk
- KEYMAP_C := $(MAIN_KEYMAP_PATH_2)/keymap.c
- KEYMAP_PATH := $(MAIN_KEYMAP_PATH_2)
- else ifneq ("$(wildcard $(MAIN_KEYMAP_PATH_3)/keymap.c)","")
- -include $(MAIN_KEYMAP_PATH_3)/rules.mk
- KEYMAP_C := $(MAIN_KEYMAP_PATH_3)/keymap.c
- KEYMAP_PATH := $(MAIN_KEYMAP_PATH_3)
- else ifneq ("$(wildcard $(MAIN_KEYMAP_PATH_4)/keymap.c)","")
- -include $(MAIN_KEYMAP_PATH_4)/rules.mk
- KEYMAP_C := $(MAIN_KEYMAP_PATH_4)/keymap.c
- KEYMAP_PATH := $(MAIN_KEYMAP_PATH_4)
- else ifneq ("$(wildcard $(MAIN_KEYMAP_PATH_5)/keymap.c)","")
- -include $(MAIN_KEYMAP_PATH_5)/rules.mk
- KEYMAP_C := $(MAIN_KEYMAP_PATH_5)/keymap.c
- KEYMAP_PATH := $(MAIN_KEYMAP_PATH_5)
- else ifneq ($(LAYOUTS),)
- # If we haven't found a keymap yet fall back to community layouts
- include $(BUILDDEFS_PATH)/build_layout.mk
- else
- $(call CATASTROPHIC_ERROR,Invalid keymap,Could not find keymap)
- # this state should never be reached
+ ifneq ($(QMK_USERSPACE),)
+ ifneq ("$(wildcard $(QMK_USERSPACE)/$(MAIN_KEYMAP_PATH_1)/keymap.c)","")
+ -include $(QMK_USERSPACE)/$(MAIN_KEYMAP_PATH_1)/rules.mk
+ KEYMAP_C := $(QMK_USERSPACE)/$(MAIN_KEYMAP_PATH_1)/keymap.c
+ KEYMAP_PATH := $(QMK_USERSPACE)/$(MAIN_KEYMAP_PATH_1)
+ else ifneq ("$(wildcard $(QMK_USERSPACE)/$(MAIN_KEYMAP_PATH_2)/keymap.c)","")
+ -include $(QMK_USERSPACE)/$(MAIN_KEYMAP_PATH_2)/rules.mk
+ KEYMAP_C := $(QMK_USERSPACE)/$(MAIN_KEYMAP_PATH_2)/keymap.c
+ KEYMAP_PATH := $(QMK_USERSPACE)/$(MAIN_KEYMAP_PATH_2)
+ else ifneq ("$(wildcard $(QMK_USERSPACE)/$(MAIN_KEYMAP_PATH_3)/keymap.c)","")
+ -include $(QMK_USERSPACE)/$(MAIN_KEYMAP_PATH_3)/rules.mk
+ KEYMAP_C := $(QMK_USERSPACE)/$(MAIN_KEYMAP_PATH_3)/keymap.c
+ KEYMAP_PATH := $(QMK_USERSPACE)/$(MAIN_KEYMAP_PATH_3)
+ else ifneq ("$(wildcard $(QMK_USERSPACE)/$(MAIN_KEYMAP_PATH_4)/keymap.c)","")
+ -include $(QMK_USERSPACE)/$(MAIN_KEYMAP_PATH_4)/rules.mk
+ KEYMAP_C := $(QMK_USERSPACE)/$(MAIN_KEYMAP_PATH_4)/keymap.c
+ KEYMAP_PATH := $(QMK_USERSPACE)/$(MAIN_KEYMAP_PATH_4)
+ else ifneq ("$(wildcard $(QMK_USERSPACE)/$(MAIN_KEYMAP_PATH_5)/keymap.c)","")
+ -include $(QMK_USERSPACE)/$(MAIN_KEYMAP_PATH_5)/rules.mk
+ KEYMAP_C := $(QMK_USERSPACE)/$(MAIN_KEYMAP_PATH_5)/keymap.c
+ KEYMAP_PATH := $(QMK_USERSPACE)/$(MAIN_KEYMAP_PATH_5)
+ endif
+ endif
+ ifeq ($(KEYMAP_PATH),)
+ ifneq ("$(wildcard $(MAIN_KEYMAP_PATH_1)/keymap.c)","")
+ -include $(MAIN_KEYMAP_PATH_1)/rules.mk
+ KEYMAP_C := $(MAIN_KEYMAP_PATH_1)/keymap.c
+ KEYMAP_PATH := $(MAIN_KEYMAP_PATH_1)
+ else ifneq ("$(wildcard $(MAIN_KEYMAP_PATH_2)/keymap.c)","")
+ -include $(MAIN_KEYMAP_PATH_2)/rules.mk
+ KEYMAP_C := $(MAIN_KEYMAP_PATH_2)/keymap.c
+ KEYMAP_PATH := $(MAIN_KEYMAP_PATH_2)
+ else ifneq ("$(wildcard $(MAIN_KEYMAP_PATH_3)/keymap.c)","")
+ -include $(MAIN_KEYMAP_PATH_3)/rules.mk
+ KEYMAP_C := $(MAIN_KEYMAP_PATH_3)/keymap.c
+ KEYMAP_PATH := $(MAIN_KEYMAP_PATH_3)
+ else ifneq ("$(wildcard $(MAIN_KEYMAP_PATH_4)/keymap.c)","")
+ -include $(MAIN_KEYMAP_PATH_4)/rules.mk
+ KEYMAP_C := $(MAIN_KEYMAP_PATH_4)/keymap.c
+ KEYMAP_PATH := $(MAIN_KEYMAP_PATH_4)
+ else ifneq ("$(wildcard $(MAIN_KEYMAP_PATH_5)/keymap.c)","")
+ -include $(MAIN_KEYMAP_PATH_5)/rules.mk
+ KEYMAP_C := $(MAIN_KEYMAP_PATH_5)/keymap.c
+ KEYMAP_PATH := $(MAIN_KEYMAP_PATH_5)
+ else ifneq ($(LAYOUTS),)
+ # If we haven't found a keymap yet fall back to community layouts
+ include $(BUILDDEFS_PATH)/build_layout.mk
+ else ifeq ("$(wildcard $(KEYMAP_JSON_PATH))", "") # Not finding keymap.c is fine if we found a keymap.json
+ $(call CATASTROPHIC_ERROR,Invalid keymap,Could not find keymap)
+ # this state should never be reached
+ endif
endif
endif
# Have we found a keymap.json?
ifneq ("$(wildcard $(KEYMAP_JSON))", "")
+ ifneq ("$(wildcard $(KEYMAP_C))", "")
+ $(call WARNING_MESSAGE,Keymap is specified as both keymap.json and keymap.c -- keymap.json file wins.)
+ endif
+
+ KEYMAP_PATH := $(KEYMAP_JSON_PATH)
+
KEYMAP_C := $(INTERMEDIATE_OUTPUT)/src/keymap.c
KEYMAP_H := $(INTERMEDIATE_OUTPUT)/src/config.h
@@ -359,6 +390,16 @@ ifeq ("$(USER_NAME)","")
endif
USER_PATH := users/$(USER_NAME)
+# If we have userspace, then add it to the lookup VPATH
+ifneq ($(wildcard $(QMK_USERSPACE)),)
+ VPATH += $(QMK_USERSPACE)
+endif
+
+# If the equivalent users directory exists in userspace, use that in preference to anything currently in the main repo
+ifneq ($(wildcard $(QMK_USERSPACE)/$(USER_PATH)),)
+ USER_PATH := $(QMK_USERSPACE)/$(USER_PATH)
+endif
+
# Pull in user level rules.mk
-include $(USER_PATH)/rules.mk
ifneq ("$(wildcard $(USER_PATH)/config.h)","")
@@ -399,6 +440,10 @@ ifneq ("$(KEYMAP_H)","")
CONFIG_H += $(KEYMAP_H)
endif
+ifeq ($(KEYMAP_C),)
+ $(call CATASTROPHIC_ERROR,Invalid keymap,Could not find keymap)
+endif
+
OPT_DEFS += -DKEYMAP_C=\"$(KEYMAP_C)\"
# If a keymap or userspace places their keymap array in another file instead, allow for it to be included
@@ -450,6 +495,7 @@ $(eval $(call add_qmk_prefix_defs,MCU_PORT_NAME,MCU_PORT_NAME))
$(eval $(call add_qmk_prefix_defs,MCU_FAMILY,MCU_FAMILY))
$(eval $(call add_qmk_prefix_defs,MCU_SERIES,MCU_SERIES))
$(eval $(call add_qmk_prefix_defs,BOARD,BOARD))
+$(eval $(call add_qmk_prefix_defs,OPT,OPT))
# Control whether intermediate file listings are generated
# e.g.:
@@ -495,10 +541,10 @@ check-size: top-symbols
top-symbols: build
echo "###########################################"
echo "# Highest flash usage:"
- $(NM) -Crtd --size-sort $(BUILD_DIR)/$(TARGET).elf | grep -i ' [t] ' | head -n$(NUM_TOP_SYMBOLS) | sed -e 's#^0000000# #g' -e 's#^000000# #g' -e 's#^00000# #g' -e 's#^0000# #g' -e 's#^000# #g' -e 's#^00# #g' -e 's#^0# #g'
+ $(NM) -Crtd --size-sort $(BUILD_DIR)/$(TARGET).elf | grep ' [RrTt] ' | head -n$(NUM_TOP_SYMBOLS) | sed -e 's#^0000000# #g' -e 's#^000000# #g' -e 's#^00000# #g' -e 's#^0000# #g' -e 's#^000# #g' -e 's#^00# #g' -e 's#^0# #g'
echo "###########################################"
echo "# Highest RAM usage:"
- $(NM) -Crtd --size-sort $(BUILD_DIR)/$(TARGET).elf | grep -i ' [dbv] ' | head -n$(NUM_TOP_SYMBOLS) | sed -e 's#^0000000# #g' -e 's#^000000# #g' -e 's#^00000# #g' -e 's#^0000# #g' -e 's#^000# #g' -e 's#^00# #g' -e 's#^0# #g'
+ $(NM) -Crtd --size-sort $(BUILD_DIR)/$(TARGET).elf | grep ' [BbCDdGgSs] ' | head -n$(NUM_TOP_SYMBOLS) | sed -e 's#^0000000# #g' -e 's#^000000# #g' -e 's#^00000# #g' -e 's#^0000# #g' -e 's#^000# #g' -e 's#^00# #g' -e 's#^0# #g'
echo "###########################################"
endif
diff --git a/builddefs/build_layout.mk b/builddefs/build_layout.mk
index 6166bd847c59..9ff99cc2218e 100644
--- a/builddefs/build_layout.mk
+++ b/builddefs/build_layout.mk
@@ -1,6 +1,10 @@
LAYOUTS_PATH := layouts
LAYOUTS_REPOS := $(patsubst %/,%,$(sort $(dir $(wildcard $(LAYOUTS_PATH)/*/))))
+ifneq ($(QMK_USERSPACE),)
+ LAYOUTS_REPOS += $(patsubst %/,%,$(QMK_USERSPACE)/$(LAYOUTS_PATH))
+endif
+
define SEARCH_LAYOUTS_REPO
LAYOUT_KEYMAP_PATH := $$(LAYOUTS_REPO)/$$(LAYOUT)/$$(KEYMAP)
LAYOUT_KEYMAP_JSON := $$(LAYOUT_KEYMAP_PATH)/keymap.json
diff --git a/builddefs/build_test.mk b/builddefs/build_test.mk
index 9eead77beabd..2cc1134da5b3 100644
--- a/builddefs/build_test.mk
+++ b/builddefs/build_test.mk
@@ -9,13 +9,13 @@ OPT = g
include paths.mk
include $(BUILDDEFS_PATH)/message.mk
-TARGET=test/$(TEST)
+TARGET=test/$(TEST_OUTPUT)
GTEST_OUTPUT = $(BUILD_DIR)/gtest
TEST_OBJ = $(BUILD_DIR)/test_obj
-OUTPUTS := $(TEST_OBJ)/$(TEST) $(GTEST_OUTPUT)
+OUTPUTS := $(TEST_OBJ)/$(TEST_OUTPUT) $(GTEST_OUTPUT)
GTEST_INC := \
$(LIB_PATH)/googletest/googletest/include \
@@ -71,18 +71,18 @@ ifneq ($(filter $(FULL_TESTS),$(TEST)),)
include $(BUILDDEFS_PATH)/build_full_test.mk
endif
-$(TEST)_SRC += \
+$(TEST_OUTPUT)_SRC += \
tests/test_common/main.cpp \
$(QUANTUM_PATH)/logging/print.c
ifneq ($(strip $(INTROSPECTION_KEYMAP_C)),)
-$(TEST)_DEFS += -DINTROSPECTION_KEYMAP_C=\"$(strip $(INTROSPECTION_KEYMAP_C))\"
+$(TEST_OUTPUT)_DEFS += -DINTROSPECTION_KEYMAP_C=\"$(strip $(INTROSPECTION_KEYMAP_C))\"
endif
-$(TEST_OBJ)/$(TEST)_SRC := $($(TEST)_SRC)
-$(TEST_OBJ)/$(TEST)_INC := $($(TEST)_INC) $(VPATH) $(GTEST_INC)
-$(TEST_OBJ)/$(TEST)_DEFS := $($(TEST)_DEFS)
-$(TEST_OBJ)/$(TEST)_CONFIG := $($(TEST)_CONFIG)
+$(TEST_OBJ)/$(TEST_OUTPUT)_SRC := $($(TEST_OUTPUT)_SRC)
+$(TEST_OBJ)/$(TEST_OUTPUT)_INC := $($(TEST_OUTPUT)_INC) $(VPATH) $(GTEST_INC)
+$(TEST_OBJ)/$(TEST_OUTPUT)_DEFS := $($(TEST_OUTPUT)_DEFS)
+$(TEST_OBJ)/$(TEST_OUTPUT)_CONFIG := $($(TEST_OUTPUT)_CONFIG)
include $(PLATFORM_PATH)/$(PLATFORM_KEY)/platform.mk
include $(BUILDDEFS_PATH)/common_rules.mk
diff --git a/builddefs/common_features.mk b/builddefs/common_features.mk
index 094eda6fef64..60f1cbd837fa 100644
--- a/builddefs/common_features.mk
+++ b/builddefs/common_features.mk
@@ -75,10 +75,7 @@ ifeq ($(strip $(AUDIO_ENABLE)), yes)
endif
ifeq ($(strip $(SEQUENCER_ENABLE)), yes)
- OPT_DEFS += -DSEQUENCER_ENABLE
MUSIC_ENABLE = yes
- SRC += $(QUANTUM_DIR)/sequencer/sequencer.c
- SRC += $(QUANTUM_DIR)/process_keycode/process_sequencer.c
endif
ifeq ($(strip $(MIDI_ENABLE)), yes)
@@ -94,11 +91,6 @@ ifeq ($(strip $(MIDI_ENABLE)), yes)
SRC += $(QUANTUM_DIR)/process_keycode/process_midi.c
endif
-MUSIC_ENABLE ?= no
-ifeq ($(MUSIC_ENABLE), yes)
- SRC += $(QUANTUM_DIR)/process_keycode/process_music.c
-endif
-
VALID_STENO_PROTOCOL_TYPES := geminipr txbolt all
STENO_PROTOCOL ?= all
ifeq ($(strip $(STENO_ENABLE)), yes)
@@ -124,17 +116,11 @@ ifeq ($(strip $(STENO_ENABLE)), yes)
endif
endif
-ifeq ($(strip $(VIRTSER_ENABLE)), yes)
- OPT_DEFS += -DVIRTSER_ENABLE
-endif
-
ifeq ($(strip $(MOUSEKEY_ENABLE)), yes)
- OPT_DEFS += -DMOUSEKEY_ENABLE
MOUSE_ENABLE := yes
- SRC += $(QUANTUM_DIR)/mousekey.c
endif
-VALID_POINTING_DEVICE_DRIVER_TYPES := adns5050 adns9800 analog_joystick cirque_pinnacle_i2c cirque_pinnacle_spi paw3204 pmw3320 pmw3360 pmw3389 pimoroni_trackball custom
+VALID_POINTING_DEVICE_DRIVER_TYPES := adns5050 adns9800 analog_joystick azoteq_iqs5xx cirque_pinnacle_i2c cirque_pinnacle_spi paw3204 pmw3320 pmw3360 pmw3389 pimoroni_trackball custom
ifeq ($(strip $(POINTING_DEVICE_ENABLE)), yes)
ifeq ($(filter $(POINTING_DEVICE_DRIVER),$(VALID_POINTING_DEVICE_DRIVER_TYPES)),)
$(call CATASTROPHIC_ERROR,Invalid POINTING_DEVICE_DRIVER,POINTING_DEVICE_DRIVER="$(POINTING_DEVICE_DRIVER)" is not a valid pointing device type)
@@ -151,30 +137,26 @@ ifeq ($(strip $(POINTING_DEVICE_ENABLE)), yes)
endif
OPT_DEFS += -DPOINTING_DEVICE_DRIVER_$(strip $(POINTING_DEVICE_DRIVER))
ifeq ($(strip $(POINTING_DEVICE_DRIVER)), adns9800)
- OPT_DEFS += -DSTM32_SPI -DHAL_USE_SPI=TRUE
- QUANTUM_LIB_SRC += spi_master.c
+ SPI_DRIVER_REQUIRED = yes
else ifeq ($(strip $(POINTING_DEVICE_DRIVER)), analog_joystick)
- OPT_DEFS += -DSTM32_ADC -DHAL_USE_ADC=TRUE
- LIB_SRC += analog.c
+ ANALOG_DRIVER_REQUIRED = yes
+ else ifeq ($(strip $(POINTING_DEVICE_DRIVER)), azoteq_iqs5xx)
+ I2C_DRIVER_REQUIRED = yes
else ifeq ($(strip $(POINTING_DEVICE_DRIVER)), cirque_pinnacle_i2c)
- OPT_DEFS += -DSTM32_I2C -DHAL_USE_I2C=TRUE
+ I2C_DRIVER_REQUIRED = yes
SRC += drivers/sensors/cirque_pinnacle.c
SRC += drivers/sensors/cirque_pinnacle_gestures.c
SRC += $(QUANTUM_DIR)/pointing_device/pointing_device_gestures.c
- QUANTUM_LIB_SRC += i2c_master.c
else ifeq ($(strip $(POINTING_DEVICE_DRIVER)), cirque_pinnacle_spi)
- OPT_DEFS += -DSTM32_SPI -DHAL_USE_SPI=TRUE
+ SPI_DRIVER_REQUIRED = yes
SRC += drivers/sensors/cirque_pinnacle.c
SRC += drivers/sensors/cirque_pinnacle_gestures.c
SRC += $(QUANTUM_DIR)/pointing_device/pointing_device_gestures.c
- QUANTUM_LIB_SRC += spi_master.c
else ifeq ($(strip $(POINTING_DEVICE_DRIVER)), pimoroni_trackball)
- OPT_DEFS += -DSTM32_SPI -DHAL_USE_I2C=TRUE
- QUANTUM_LIB_SRC += i2c_master.c
+ I2C_DRIVER_REQUIRED = yes
else ifneq ($(filter $(strip $(POINTING_DEVICE_DRIVER)),pmw3360 pmw3389),)
- OPT_DEFS += -DSTM32_SPI -DHAL_USE_SPI=TRUE
+ SPI_DRIVER_REQUIRED = yes
SRC += drivers/sensors/pmw33xx_common.c
- QUANTUM_LIB_SRC += spi_master.c
endif
endif
endif
@@ -204,12 +186,12 @@ else
else ifeq ($(strip $(EEPROM_DRIVER)), i2c)
# External I2C EEPROM implementation
OPT_DEFS += -DEEPROM_DRIVER -DEEPROM_I2C
- QUANTUM_LIB_SRC += i2c_master.c
+ I2C_DRIVER_REQUIRED = yes
SRC += eeprom_driver.c eeprom_i2c.c
else ifeq ($(strip $(EEPROM_DRIVER)), spi)
# External SPI EEPROM implementation
OPT_DEFS += -DEEPROM_DRIVER -DEEPROM_SPI
- QUANTUM_LIB_SRC += spi_master.c
+ SPI_DRIVER_REQUIRED = yes
SRC += eeprom_driver.c eeprom_spi.c
else ifeq ($(strip $(EEPROM_DRIVER)), legacy_stm32_flash)
# STM32 Emulated EEPROM, backed by MCU flash (soon to be deprecated)
@@ -308,10 +290,10 @@ ifneq ($(strip $(FLASH_DRIVER)), none)
else
OPT_DEFS += -DFLASH_ENABLE
ifeq ($(strip $(FLASH_DRIVER)),spi)
+ SPI_DRIVER_REQUIRED = yes
OPT_DEFS += -DFLASH_DRIVER -DFLASH_SPI
COMMON_VPATH += $(DRIVER_PATH)/flash
SRC += flash_spi.c
- QUANTUM_LIB_SRC += spi_master.c
endif
endif
endif
@@ -328,6 +310,7 @@ ifeq ($(strip $(RGBLIGHT_ENABLE)), yes)
COMMON_VPATH += $(QUANTUM_DIR)/rgblight
POST_CONFIG_H += $(QUANTUM_DIR)/rgblight/rgblight_post_config.h
OPT_DEFS += -DRGBLIGHT_ENABLE
+ OPT_DEFS += -DRGBLIGHT_$(strip $(shell echo $(RGBLIGHT_DRIVER) | tr '[:lower:]' '[:upper:]'))
SRC += $(QUANTUM_DIR)/color.c
SRC += $(QUANTUM_DIR)/rgblight/rgblight.c
CIE1931_CURVE := yes
@@ -342,24 +325,29 @@ ifeq ($(strip $(RGBLIGHT_ENABLE)), yes)
APA102_DRIVER_REQUIRED := yes
endif
- ifeq ($(strip $(RGBLIGHT_DRIVER)), custom)
- OPT_DEFS += -DRGBLIGHT_CUSTOM_DRIVER
+ ifeq ($(strip $(VELOCIKEY_ENABLE)), yes)
+ OPT_DEFS += -DVELOCIKEY_ENABLE
endif
endif
+# Deprecated driver names - do not use
+ifeq ($(strip $(LED_MATRIX_DRIVER)), aw20216)
+LED_MATRIX_DRIVER := aw20216s
+endif
+ifeq ($(strip $(LED_MATRIX_DRIVER)), ckled2001)
+LED_MATRIX_DRIVER := snled27351
+endif
+
LED_MATRIX_ENABLE ?= no
-VALID_LED_MATRIX_TYPES := is31fl3731 is31fl3742a is31fl3743a is31fl3745 is31fl3746a ckled2001 custom
-# TODO: is31fl3733 is31fl3737 is31fl3741
+VALID_LED_MATRIX_TYPES := is31fl3218 is31fl3731 is31fl3733 is31fl3736 is31fl3737 is31fl3741 is31fl3742a is31fl3743a is31fl3745 is31fl3746a snled27351 custom
ifeq ($(strip $(LED_MATRIX_ENABLE)), yes)
ifeq ($(filter $(LED_MATRIX_DRIVER),$(VALID_LED_MATRIX_TYPES)),)
$(call CATASTROPHIC_ERROR,Invalid LED_MATRIX_DRIVER,LED_MATRIX_DRIVER="$(LED_MATRIX_DRIVER)" is not a valid matrix type)
endif
OPT_DEFS += -DLED_MATRIX_ENABLE
-ifneq (,$(filter $(MCU), atmega16u2 atmega32u2 at90usb162))
- # ATmegaxxU2 does not have hardware MUL instruction - lib8tion must be told to use software multiplication routines
- OPT_DEFS += -DLIB8_ATTINY
-endif
+ OPT_DEFS += -DLED_MATRIX_$(strip $(shell echo $(LED_MATRIX_DRIVER) | tr '[:lower:]' '[:upper:]'))
+
COMMON_VPATH += $(QUANTUM_DIR)/led_matrix
COMMON_VPATH += $(QUANTUM_DIR)/led_matrix/animations
COMMON_VPATH += $(QUANTUM_DIR)/led_matrix/animations/runners
@@ -367,65 +355,99 @@ endif
SRC += $(QUANTUM_DIR)/process_keycode/process_backlight.c
SRC += $(QUANTUM_DIR)/led_matrix/led_matrix.c
SRC += $(QUANTUM_DIR)/led_matrix/led_matrix_drivers.c
- SRC += $(LIB_PATH)/lib8tion/lib8tion.c
+ LIB8TION_ENABLE := yes
CIE1931_CURVE := yes
+ ifeq ($(strip $(LED_MATRIX_DRIVER)), is31fl3218)
+ I2C_DRIVER_REQUIRED = yes
+ COMMON_VPATH += $(DRIVER_PATH)/led/issi
+ SRC += is31fl3218-simple.c
+ endif
+
ifeq ($(strip $(LED_MATRIX_DRIVER)), is31fl3731)
- OPT_DEFS += -DIS31FL3731 -DSTM32_I2C -DHAL_USE_I2C=TRUE
+ I2C_DRIVER_REQUIRED = yes
COMMON_VPATH += $(DRIVER_PATH)/led/issi
SRC += is31fl3731-simple.c
- QUANTUM_LIB_SRC += i2c_master.c
endif
- ifeq ($(strip $(LED_MATRIX_DRIVER)), is31fl3742a)
- OPT_DEFS += -DIS31FLCOMMON -DIS31FL3742A -DSTM32_I2C -DHAL_USE_I2C=TRUE
+ ifeq ($(strip $(LED_MATRIX_DRIVER)), is31fl3733)
+ I2C_DRIVER_REQUIRED = yes
+ COMMON_VPATH += $(DRIVER_PATH)/led/issi
+ SRC += is31fl3733-simple.c
+ endif
+
+ ifeq ($(strip $(LED_MATRIX_DRIVER)), is31fl3736)
+ I2C_DRIVER_REQUIRED = yes
+ COMMON_VPATH += $(DRIVER_PATH)/led/issi
+ SRC += is31fl3736-simple.c
+ endif
+
+ ifeq ($(strip $(LED_MATRIX_DRIVER)), is31fl3737)
+ I2C_DRIVER_REQUIRED = yes
+ COMMON_VPATH += $(DRIVER_PATH)/led/issi
+ SRC += is31fl3737-simple.c
+ endif
+
+ ifeq ($(strip $(LED_MATRIX_DRIVER)), is31fl3741)
+ I2C_DRIVER_REQUIRED = yes
+ COMMON_VPATH += $(DRIVER_PATH)/led/issi
+ SRC += is31fl3741-simple.c
+ endif
+
+ ifeq ($(strip $(LED_MATRIX_DRIVER)), is31fl3742a)
+ OPT_DEFS += -DIS31FLCOMMON
+ I2C_DRIVER_REQUIRED = yes
COMMON_VPATH += $(DRIVER_PATH)/led/issi
SRC += is31flcommon.c
- QUANTUM_LIB_SRC += i2c_master.c
endif
- ifeq ($(strip $(LED_MATRIX_DRIVER)), is31fl3743a)
- OPT_DEFS += -DIS31FLCOMMON -DIS31FL3743A -DSTM32_I2C -DHAL_USE_I2C=TRUE
+ ifeq ($(strip $(LED_MATRIX_DRIVER)), is31fl3743a)
+ OPT_DEFS += -DIS31FLCOMMON
+ I2C_DRIVER_REQUIRED = yes
COMMON_VPATH += $(DRIVER_PATH)/led/issi
SRC += is31flcommon.c
- QUANTUM_LIB_SRC += i2c_master.c
endif
- ifeq ($(strip $(LED_MATRIX_DRIVER)), is31fl3745)
- OPT_DEFS += -DIS31FLCOMMON -DIS31FL3745 -DSTM32_I2C -DHAL_USE_I2C=TRUE
+ ifeq ($(strip $(LED_MATRIX_DRIVER)), is31fl3745)
+ OPT_DEFS += -DIS31FLCOMMON
+ I2C_DRIVER_REQUIRED = yes
COMMON_VPATH += $(DRIVER_PATH)/led/issi
SRC += is31flcommon.c
- QUANTUM_LIB_SRC += i2c_master.c
endif
- ifeq ($(strip $(LED_MATRIX_DRIVER)), is31fl3746a)
- OPT_DEFS += -DIS31FLCOMMON -DIS31FL3746A -DSTM32_I2C -DHAL_USE_I2C=TRUE
+ ifeq ($(strip $(LED_MATRIX_DRIVER)), is31fl3746a)
+ OPT_DEFS += -DIS31FLCOMMON
+ I2C_DRIVER_REQUIRED = yes
COMMON_VPATH += $(DRIVER_PATH)/led/issi
SRC += is31flcommon.c
- QUANTUM_LIB_SRC += i2c_master.c
endif
- ifeq ($(strip $(LED_MATRIX_DRIVER)), ckled2001)
- OPT_DEFS += -DCKLED2001 -DSTM32_I2C -DHAL_USE_I2C=TRUE
+ ifeq ($(strip $(LED_MATRIX_DRIVER)), snled27351)
+ I2C_DRIVER_REQUIRED = yes
COMMON_VPATH += $(DRIVER_PATH)/led
- SRC += ckled2001-simple.c
- QUANTUM_LIB_SRC += i2c_master.c
+ SRC += snled27351-simple.c
endif
endif
+# Deprecated driver names - do not use
+ifeq ($(strip $(RGB_MATRIX_DRIVER)), aw20216)
+RGB_MATRIX_DRIVER := aw20216s
+endif
+ifeq ($(strip $(RGB_MATRIX_DRIVER)), ckled2001)
+RGB_MATRIX_DRIVER := snled27351
+endif
+
RGB_MATRIX_ENABLE ?= no
-VALID_RGB_MATRIX_TYPES := aw20216 is31fl3731 is31fl3733 is31fl3736 is31fl3737 is31fl3741 is31fl3742a is31fl3743a is31fl3745 is31fl3746a ckled2001 ws2812 custom
+VALID_RGB_MATRIX_TYPES := aw20216s is31fl3218 is31fl3731 is31fl3733 is31fl3736 is31fl3737 is31fl3741 is31fl3742a is31fl3743a is31fl3745 is31fl3746a snled27351 ws2812 custom
ifeq ($(strip $(RGB_MATRIX_ENABLE)), yes)
ifeq ($(filter $(RGB_MATRIX_DRIVER),$(VALID_RGB_MATRIX_TYPES)),)
$(call CATASTROPHIC_ERROR,Invalid RGB_MATRIX_DRIVER,RGB_MATRIX_DRIVER="$(RGB_MATRIX_DRIVER)" is not a valid matrix type)
endif
OPT_DEFS += -DRGB_MATRIX_ENABLE
-ifneq (,$(filter $(MCU), atmega16u2 atmega32u2 at90usb162))
- # ATmegaxxU2 does not have hardware MUL instruction - lib8tion must be told to use software multiplication routines
- OPT_DEFS += -DLIB8_ATTINY
-endif
+ OPT_DEFS += -DRGB_MATRIX_$(strip $(shell echo $(RGB_MATRIX_DRIVER) | tr '[:lower:]' '[:upper:]'))
+
COMMON_VPATH += $(QUANTUM_DIR)/rgb_matrix
COMMON_VPATH += $(QUANTUM_DIR)/rgb_matrix/animations
COMMON_VPATH += $(QUANTUM_DIR)/rgb_matrix/animations/runners
@@ -433,94 +455,91 @@ endif
SRC += $(QUANTUM_DIR)/color.c
SRC += $(QUANTUM_DIR)/rgb_matrix/rgb_matrix.c
SRC += $(QUANTUM_DIR)/rgb_matrix/rgb_matrix_drivers.c
- SRC += $(LIB_PATH)/lib8tion/lib8tion.c
+ LIB8TION_ENABLE := yes
CIE1931_CURVE := yes
RGB_KEYCODES_ENABLE := yes
- ifeq ($(strip $(RGB_MATRIX_DRIVER)), aw20216)
- OPT_DEFS += -DAW20216 -DSTM32_SPI -DHAL_USE_SPI=TRUE
+ ifeq ($(strip $(RGB_MATRIX_DRIVER)), aw20216s)
+ SPI_DRIVER_REQUIRED = yes
COMMON_VPATH += $(DRIVER_PATH)/led
- SRC += aw20216.c
- QUANTUM_LIB_SRC += spi_master.c
+ SRC += aw20216s.c
+ endif
+
+ ifeq ($(strip $(RGB_MATRIX_DRIVER)), is31fl3218)
+ I2C_DRIVER_REQUIRED = yes
+ COMMON_VPATH += $(DRIVER_PATH)/led/issi
+ SRC += is31fl3218.c
endif
ifeq ($(strip $(RGB_MATRIX_DRIVER)), is31fl3731)
- OPT_DEFS += -DIS31FL3731 -DSTM32_I2C -DHAL_USE_I2C=TRUE
+ I2C_DRIVER_REQUIRED = yes
COMMON_VPATH += $(DRIVER_PATH)/led/issi
SRC += is31fl3731.c
- QUANTUM_LIB_SRC += i2c_master.c
endif
ifeq ($(strip $(RGB_MATRIX_DRIVER)), is31fl3733)
- OPT_DEFS += -DIS31FL3733 -DSTM32_I2C -DHAL_USE_I2C=TRUE
+ I2C_DRIVER_REQUIRED = yes
COMMON_VPATH += $(DRIVER_PATH)/led/issi
SRC += is31fl3733.c
- QUANTUM_LIB_SRC += i2c_master.c
endif
ifeq ($(strip $(RGB_MATRIX_DRIVER)), is31fl3736)
- OPT_DEFS += -DIS31FL3736 -DSTM32_I2C -DHAL_USE_I2C=TRUE
+ I2C_DRIVER_REQUIRED = yes
COMMON_VPATH += $(DRIVER_PATH)/led/issi
SRC += is31fl3736.c
- QUANTUM_LIB_SRC += i2c_master.c
endif
ifeq ($(strip $(RGB_MATRIX_DRIVER)), is31fl3737)
- OPT_DEFS += -DIS31FL3737 -DSTM32_I2C -DHAL_USE_I2C=TRUE
+ I2C_DRIVER_REQUIRED = yes
COMMON_VPATH += $(DRIVER_PATH)/led/issi
SRC += is31fl3737.c
- QUANTUM_LIB_SRC += i2c_master.c
endif
ifeq ($(strip $(RGB_MATRIX_DRIVER)), is31fl3741)
- OPT_DEFS += -DIS31FL3741 -DSTM32_I2C -DHAL_USE_I2C=TRUE
+ I2C_DRIVER_REQUIRED = yes
COMMON_VPATH += $(DRIVER_PATH)/led/issi
SRC += is31fl3741.c
- QUANTUM_LIB_SRC += i2c_master.c
endif
- ifeq ($(strip $(RGB_MATRIX_DRIVER)), is31fl3742a)
- OPT_DEFS += -DIS31FLCOMMON -DIS31FL3742A -DSTM32_I2C -DHAL_USE_I2C=TRUE
+ ifeq ($(strip $(RGB_MATRIX_DRIVER)), is31fl3742a)
+ OPT_DEFS += -DIS31FLCOMMON
+ I2C_DRIVER_REQUIRED = yes
COMMON_VPATH += $(DRIVER_PATH)/led/issi
SRC += is31flcommon.c
- QUANTUM_LIB_SRC += i2c_master.c
endif
- ifeq ($(strip $(RGB_MATRIX_DRIVER)), is31fl3743a)
- OPT_DEFS += -DIS31FLCOMMON -DIS31FL3743A -DSTM32_I2C -DHAL_USE_I2C=TRUE
+ ifeq ($(strip $(RGB_MATRIX_DRIVER)), is31fl3743a)
+ OPT_DEFS += -DIS31FLCOMMON
+ I2C_DRIVER_REQUIRED = yes
COMMON_VPATH += $(DRIVER_PATH)/led/issi
SRC += is31flcommon.c
- QUANTUM_LIB_SRC += i2c_master.c
endif
- ifeq ($(strip $(RGB_MATRIX_DRIVER)), is31fl3745)
- OPT_DEFS += -DIS31FLCOMMON -DIS31FL3745 -DSTM32_I2C -DHAL_USE_I2C=TRUE
+ ifeq ($(strip $(RGB_MATRIX_DRIVER)), is31fl3745)
+ OPT_DEFS += -DIS31FLCOMMON
+ I2C_DRIVER_REQUIRED = yes
COMMON_VPATH += $(DRIVER_PATH)/led/issi
SRC += is31flcommon.c
- QUANTUM_LIB_SRC += i2c_master.c
endif
- ifeq ($(strip $(RGB_MATRIX_DRIVER)), is31fl3746a)
- OPT_DEFS += -DIS31FLCOMMON -DIS31FL3746A -DSTM32_I2C -DHAL_USE_I2C=TRUE
+ ifeq ($(strip $(RGB_MATRIX_DRIVER)), is31fl3746a)
+ OPT_DEFS += -DIS31FLCOMMON
+ I2C_DRIVER_REQUIRED = yes
COMMON_VPATH += $(DRIVER_PATH)/led/issi
SRC += is31flcommon.c
- QUANTUM_LIB_SRC += i2c_master.c
endif
- ifeq ($(strip $(RGB_MATRIX_DRIVER)), ckled2001)
- OPT_DEFS += -DCKLED2001 -DSTM32_I2C -DHAL_USE_I2C=TRUE
+ ifeq ($(strip $(RGB_MATRIX_DRIVER)), snled27351)
+ I2C_DRIVER_REQUIRED = yes
COMMON_VPATH += $(DRIVER_PATH)/led
- SRC += ckled2001.c
- QUANTUM_LIB_SRC += i2c_master.c
+ SRC += snled27351.c
endif
ifeq ($(strip $(RGB_MATRIX_DRIVER)), ws2812)
- OPT_DEFS += -DWS2812
WS2812_DRIVER_REQUIRED := yes
endif
ifeq ($(strip $(RGB_MATRIX_DRIVER)), apa102)
- OPT_DEFS += -DAPA102
APA102_DRIVER_REQUIRED := yes
endif
@@ -567,6 +586,7 @@ ifeq ($(strip $(BACKLIGHT_ENABLE)), yes)
SRC += $(QUANTUM_DIR)/backlight/backlight.c
SRC += $(QUANTUM_DIR)/process_keycode/process_backlight.c
OPT_DEFS += -DBACKLIGHT_ENABLE
+ OPT_DEFS += -DBACKLIGHT_$(strip $(shell echo $(BACKLIGHT_DRIVER) | tr '[:lower:]' '[:upper:]'))
ifneq ($(strip $(BACKLIGHT_DRIVER)), custom)
SRC += $(QUANTUM_DIR)/backlight/backlight_driver_common.c
@@ -579,35 +599,6 @@ ifeq ($(strip $(BACKLIGHT_ENABLE)), yes)
endif
endif
-VALID_WS2812_DRIVER_TYPES := bitbang custom i2c pwm spi vendor
-
-WS2812_DRIVER ?= bitbang
-ifeq ($(strip $(WS2812_DRIVER_REQUIRED)), yes)
- ifeq ($(filter $(WS2812_DRIVER),$(VALID_WS2812_DRIVER_TYPES)),)
- $(call CATASTROPHIC_ERROR,Invalid WS2812_DRIVER,WS2812_DRIVER="$(WS2812_DRIVER)" is not a valid WS2812 driver)
- endif
-
- OPT_DEFS += -DWS2812_DRIVER_$(strip $(shell echo $(WS2812_DRIVER) | tr '[:lower:]' '[:upper:]'))
-
- SRC += ws2812_$(strip $(WS2812_DRIVER)).c
-
- ifeq ($(strip $(PLATFORM)), CHIBIOS)
- ifeq ($(strip $(WS2812_DRIVER)), pwm)
- OPT_DEFS += -DSTM32_DMA_REQUIRED=TRUE
- endif
- endif
-
- # add extra deps
- ifeq ($(strip $(WS2812_DRIVER)), i2c)
- QUANTUM_LIB_SRC += i2c_master.c
- endif
-endif
-
-ifeq ($(strip $(APA102_DRIVER_REQUIRED)), yes)
- COMMON_VPATH += $(DRIVER_PATH)/led
- SRC += apa102.c
-endif
-
ifeq ($(strip $(CIE1931_CURVE)), yes)
OPT_DEFS += -DUSE_CIE1931_CURVE
LED_TABLES := yes
@@ -622,8 +613,6 @@ ifeq ($(strip $(VIA_ENABLE)), yes)
RAW_ENABLE := yes
BOOTMAGIC_ENABLE := yes
TRI_LAYER_ENABLE := yes
- SRC += $(QUANTUM_DIR)/via.c
- OPT_DEFS += -DVIA_ENABLE
endif
VALID_MAGIC_TYPES := yes
@@ -708,33 +697,35 @@ ifeq ($(strip $(SPLIT_KEYBOARD)), yes)
COMMON_VPATH += $(QUANTUM_PATH)/split_common
endif
-ifeq ($(strip $(CRC_ENABLE)), yes)
- OPT_DEFS += -DCRC_ENABLE
- SRC += crc.c
-endif
-
ifeq ($(strip $(FNV_ENABLE)), yes)
OPT_DEFS += -DFNV_ENABLE
VPATH += $(LIB_PATH)/fnv
SRC += qmk_fnv_type_validation.c hash_32a.c hash_64a.c
endif
+ifeq ($(strip $(LIB8TION_ENABLE)), yes)
+ ifneq (,$(filter $(MCU), atmega16u2 atmega32u2 at90usb162))
+ # ATmegaxxU2 does not have hardware MUL instruction - lib8tion must be told to use software multiplication routines
+ OPT_DEFS += -DLIB8_ATTINY
+ endif
+ SRC += $(LIB_PATH)/lib8tion/lib8tion.c
+endif
+
VALID_HAPTIC_DRIVER_TYPES := drv2605l solenoid
ifeq ($(strip $(HAPTIC_ENABLE)),yes)
ifeq ($(filter $(HAPTIC_DRIVER),$(VALID_HAPTIC_DRIVER_TYPES)),)
$(call CATASTROPHIC_ERROR,Invalid HAPTIC_DRIVER,HAPTIC_DRIVER="$(HAPTIC_DRIVER)" is not a valid Haptic driver)
else
+ OPT_DEFS += -DHAPTIC_$(strip $(shell echo $(HAPTIC_DRIVER) | tr '[:lower:]' '[:upper:]'))
COMMON_VPATH += $(DRIVER_PATH)/haptic
ifeq ($(strip $(HAPTIC_DRIVER)), drv2605l)
+ I2C_DRIVER_REQUIRED = yes
SRC += drv2605l.c
- QUANTUM_LIB_SRC += i2c_master.c
- OPT_DEFS += -DHAPTIC_DRV2605L
endif
ifeq ($(strip $(HAPTIC_DRIVER)), solenoid)
SRC += solenoid.c
- OPT_DEFS += -DHAPTIC_SOLENOID
endif
endif
endif
@@ -757,6 +748,7 @@ ifeq ($(strip $(OLED_ENABLE)), yes)
$(call CATASTROPHIC_ERROR,Invalid OLED_TRANSPORT,OLED_TRANSPORT="$(OLED_TRANSPORT)" is not a valid OLED transport)
else
OPT_DEFS += -DOLED_ENABLE
+ OPT_DEFS += -DOLED_$(strip $(shell echo $(OLED_DRIVER) | tr '[:lower:]' '[:upper:]'))
COMMON_VPATH += $(DRIVER_PATH)/oled
ifneq ($(strip $(OLED_DRIVER)), custom)
SRC += oled_driver.c
@@ -764,10 +756,10 @@ ifeq ($(strip $(OLED_ENABLE)), yes)
OPT_DEFS += -DOLED_TRANSPORT_$(strip $(shell echo $(OLED_TRANSPORT) | tr '[:lower:]' '[:upper:]'))
ifeq ($(strip $(OLED_TRANSPORT)), i2c)
- QUANTUM_LIB_SRC += i2c_master.c
+ I2C_DRIVER_REQUIRED = yes
endif
ifeq ($(strip $(OLED_TRANSPORT)), spi)
- QUANTUM_LIB_SRC += spi_master.c
+ SPI_DRIVER_REQUIRED = yes
endif
endif
endif
@@ -775,9 +767,9 @@ endif
ifeq ($(strip $(ST7565_ENABLE)), yes)
OPT_DEFS += -DST7565_ENABLE
+ SPI_DRIVER_REQUIRED = yes
COMMON_VPATH += $(DRIVER_PATH)/oled # For glcdfont.h
COMMON_VPATH += $(DRIVER_PATH)/lcd
- QUANTUM_LIB_SRC += spi_master.c
SRC += st7565.c
endif
@@ -809,27 +801,6 @@ ifeq ($(strip $(UNICODE_COMMON)), yes)
$(QUANTUM_DIR)/unicode/utf8.c
endif
-MAGIC_ENABLE ?= yes
-ifeq ($(strip $(MAGIC_ENABLE)), yes)
- SRC += $(QUANTUM_DIR)/process_keycode/process_magic.c
- OPT_DEFS += -DMAGIC_KEYCODE_ENABLE
-endif
-
-SEND_STRING_ENABLE ?= yes
-ifeq ($(strip $(SEND_STRING_ENABLE)), yes)
- OPT_DEFS += -DSEND_STRING_ENABLE
- COMMON_VPATH += $(QUANTUM_DIR)/send_string
- SRC += $(QUANTUM_DIR)/send_string/send_string.c
-endif
-
-ifeq ($(strip $(AUTO_SHIFT_ENABLE)), yes)
- SRC += $(QUANTUM_DIR)/process_keycode/process_auto_shift.c
- OPT_DEFS += -DAUTO_SHIFT_ENABLE
- ifeq ($(strip $(AUTO_SHIFT_MODIFIERS)), yes)
- OPT_DEFS += -DAUTO_SHIFT_MODIFIERS
- endif
-endif
-
ifeq ($(strip $(PS2_MOUSE_ENABLE)), yes)
PS2_ENABLE := yes
MOUSE_ENABLE := yes
@@ -870,8 +841,8 @@ ifeq ($(strip $(JOYSTICK_ENABLE)), yes)
SRC += $(QUANTUM_DIR)/joystick.c
ifeq ($(strip $(JOYSTICK_DRIVER)), analog)
+ ANALOG_DRIVER_REQUIRED = yes
OPT_DEFS += -DANALOG_JOYSTICK_ENABLE
- SRC += analog.c
endif
ifeq ($(strip $(JOYSTICK_DRIVER)), digital)
OPT_DEFS += -DDIGITAL_JOYSTICK_ENABLE
@@ -909,23 +880,22 @@ ifeq ($(strip $(BLUETOOTH_ENABLE)), yes)
$(call CATASTROPHIC_ERROR,Invalid BLUETOOTH_DRIVER,BLUETOOTH_DRIVER="$(BLUETOOTH_DRIVER)" is not a valid Bluetooth driver type)
endif
OPT_DEFS += -DBLUETOOTH_ENABLE
+ OPT_DEFS += -DBLUETOOTH_$(strip $(shell echo $(BLUETOOTH_DRIVER) | tr '[:lower:]' '[:upper:]'))
NO_USB_STARTUP_CHECK := yes
COMMON_VPATH += $(DRIVER_PATH)/bluetooth
SRC += outputselect.c
ifeq ($(strip $(BLUETOOTH_DRIVER)), bluefruit_le)
- OPT_DEFS += -DBLUETOOTH_BLUEFRUIT_LE -DHAL_USE_SPI=TRUE
+ SPI_DRIVER_REQUIRED = yes
+ ANALOG_DRIVER_REQUIRED = yes
SRC += $(DRIVER_PATH)/bluetooth/bluetooth.c
SRC += $(DRIVER_PATH)/bluetooth/bluefruit_le.cpp
- QUANTUM_LIB_SRC += analog.c
- QUANTUM_LIB_SRC += spi_master.c
endif
ifeq ($(strip $(BLUETOOTH_DRIVER)), rn42)
- OPT_DEFS += -DBLUETOOTH_RN42 -DHAL_USE_SERIAL=TRUE
+ UART_DRIVER_REQUIRED = yes
SRC += $(DRIVER_PATH)/bluetooth/bluetooth.c
SRC += $(DRIVER_PATH)/bluetooth/rn42.c
- QUANTUM_LIB_SRC += uart.c
endif
endif
@@ -937,10 +907,51 @@ ifeq ($(strip $(ENCODER_ENABLE)), yes)
endif
endif
-ifeq ($(strip $(OS_DETECTION_ENABLE)), yes)
- SRC += $(QUANTUM_DIR)/os_detection.c
- OPT_DEFS += -DOS_DETECTION_ENABLE
- ifeq ($(strip $(OS_DETECTION_DEBUG_ENABLE)), yes)
- OPT_DEFS += -DOS_DETECTION_DEBUG_ENABLE
+VALID_WS2812_DRIVER_TYPES := bitbang custom i2c pwm spi vendor
+
+WS2812_DRIVER ?= bitbang
+ifeq ($(strip $(WS2812_DRIVER_REQUIRED)), yes)
+ ifeq ($(filter $(WS2812_DRIVER),$(VALID_WS2812_DRIVER_TYPES)),)
+ $(call CATASTROPHIC_ERROR,Invalid WS2812_DRIVER,WS2812_DRIVER="$(WS2812_DRIVER)" is not a valid WS2812 driver)
endif
+
+ OPT_DEFS += -DWS2812_$(strip $(shell echo $(WS2812_DRIVER) | tr '[:lower:]' '[:upper:]'))
+
+ SRC += ws2812_$(strip $(WS2812_DRIVER)).c
+
+ ifeq ($(strip $(PLATFORM)), CHIBIOS)
+ ifeq ($(strip $(WS2812_DRIVER)), pwm)
+ OPT_DEFS += -DSTM32_DMA_REQUIRED=TRUE
+ endif
+ endif
+
+ # add extra deps
+ ifeq ($(strip $(WS2812_DRIVER)), i2c)
+ I2C_DRIVER_REQUIRED = yes
+ endif
+endif
+
+ifeq ($(strip $(APA102_DRIVER_REQUIRED)), yes)
+ COMMON_VPATH += $(DRIVER_PATH)/led
+ SRC += apa102.c
+endif
+
+ifeq ($(strip $(ANALOG_DRIVER_REQUIRED)), yes)
+ OPT_DEFS += -DHAL_USE_ADC=TRUE
+ QUANTUM_LIB_SRC += analog.c
+endif
+
+ifeq ($(strip $(I2C_DRIVER_REQUIRED)), yes)
+ OPT_DEFS += -DHAL_USE_I2C=TRUE
+ QUANTUM_LIB_SRC += i2c_master.c
+endif
+
+ifeq ($(strip $(SPI_DRIVER_REQUIRED)), yes)
+ OPT_DEFS += -DHAL_USE_SPI=TRUE
+ QUANTUM_LIB_SRC += spi_master.c
+endif
+
+ifeq ($(strip $(UART_DRIVER_REQUIRED)), yes)
+ OPT_DEFS += -DHAL_USE_SERIAL=TRUE
+ QUANTUM_LIB_SRC += uart.c
endif
diff --git a/builddefs/common_rules.mk b/builddefs/common_rules.mk
index d20e9ad74d2c..cfd261737c06 100644
--- a/builddefs/common_rules.mk
+++ b/builddefs/common_rules.mk
@@ -12,6 +12,9 @@ vpath %.hpp $(VPATH_SRC)
vpath %.S $(VPATH_SRC)
VPATH :=
+# Helper to return the distinct elements of a list
+uniq = $(if $1,$(firstword $1) $(call uniq,$(filter-out $(firstword $1),$1)))
+
# Convert all SRC to OBJ
define OBJ_FROM_SRC
$(patsubst %.c,$1/%.o,$(patsubst %.cpp,$1/%.o,$(patsubst %.cc,$1/%.o,$(patsubst %.S,$1/%.o,$(patsubst %.clib,$1/%.a,$($1_SRC))))))
@@ -188,7 +191,7 @@ DFU_SUFFIX_ARGS ?=
elf: $(BUILD_DIR)/$(TARGET).elf
hex: $(BUILD_DIR)/$(TARGET).hex
uf2: $(BUILD_DIR)/$(TARGET).uf2
-cpfirmware: $(FIRMWARE_FORMAT)
+cpfirmware_qmk: $(FIRMWARE_FORMAT)
$(SILENT) || printf "Copying $(TARGET).$(FIRMWARE_FORMAT) to qmk_firmware folder" | $(AWK_CMD)
$(COPY) $(BUILD_DIR)/$(TARGET).$(FIRMWARE_FORMAT) $(TARGET).$(FIRMWARE_FORMAT) && $(PRINT_OK)
eep: $(BUILD_DIR)/$(TARGET).eep
@@ -197,6 +200,15 @@ sym: $(BUILD_DIR)/$(TARGET).sym
LIBNAME=lib$(TARGET).a
lib: $(LIBNAME)
+cpfirmware: cpfirmware_qmk
+
+ifneq ($(QMK_USERSPACE),)
+cpfirmware: cpfirmware_userspace
+cpfirmware_userspace: cpfirmware_qmk
+ $(SILENT) || printf "Copying $(TARGET).$(FIRMWARE_FORMAT) to userspace folder" | $(AWK_CMD)
+ $(COPY) $(BUILD_DIR)/$(TARGET).$(FIRMWARE_FORMAT) $(QMK_USERSPACE)/$(TARGET).$(FIRMWARE_FORMAT) && $(PRINT_OK)
+endif
+
# Display size of file, modifying the output so people don't mistakenly grab the hex output
BINARY_SIZE = $(SIZE) --target=$(FORMAT) $(BUILD_DIR)/$(TARGET).hex | $(SED) -e 's/\.build\/.*$$/$(TARGET).$(FIRMWARE_FORMAT)/g'
@@ -264,7 +276,7 @@ BEGIN = gccversion sizebefore
# Note the obj.txt depeendency is there to force linking if a source file is deleted
%.elf: $(OBJ) $(MASTER_OUTPUT)/cflags.txt $(MASTER_OUTPUT)/ldflags.txt $(MASTER_OUTPUT)/obj.txt | $(BEGIN)
@$(SILENT) || printf "$(MSG_LINKING) $@" | $(AWK_CMD)
- $(eval CMD=MAKE=$(MAKE) $(CC) $(ALL_CFLAGS) $(filter-out %.txt,$^) --output $@ $(LDFLAGS))
+ $(eval CMD=MAKE=$(MAKE) $(CC) $(ALL_CFLAGS) $(call uniq,$(OBJ)) --output $@ $(LDFLAGS))
@$(BUILD_CMD)
@@ -380,33 +392,9 @@ dump_vars:
objs-size:
for i in $(OBJ); do echo $$i; done | sort | xargs $(SIZE)
-ifeq ($(findstring avr-gcc,$(CC)),avr-gcc)
-SIZE_MARGIN = 1024
+# size check optionally implemented in its platform.mk
check-size:
- $(eval MAX_SIZE=$(shell n=`$(CC) -E -mmcu=$(MCU) -D__ASSEMBLER__ $(CFLAGS) $(OPT_DEFS) platforms/avr/bootloader_size.c 2> /dev/null | $(SED) -ne 's/\r//;/^#/n;/^AVR_SIZE:/,$${s/^AVR_SIZE: //;p;}'` && echo $$(($$n)) || echo 0))
- $(eval CURRENT_SIZE=$(shell if [ -f $(BUILD_DIR)/$(TARGET).hex ]; then $(SIZE) --target=$(FORMAT) $(BUILD_DIR)/$(TARGET).hex | $(AWK) 'NR==2 {print $$4}'; else printf 0; fi))
- $(eval FREE_SIZE=$(shell expr $(MAX_SIZE) - $(CURRENT_SIZE)))
- $(eval OVER_SIZE=$(shell expr $(CURRENT_SIZE) - $(MAX_SIZE)))
- $(eval PERCENT_SIZE=$(shell expr $(CURRENT_SIZE) \* 100 / $(MAX_SIZE)))
- if [ $(MAX_SIZE) -gt 0 ] && [ $(CURRENT_SIZE) -gt 0 ]; then \
- $(SILENT) || printf "$(MSG_CHECK_FILESIZE)" | $(AWK_CMD); \
- if [ $(CURRENT_SIZE) -gt $(MAX_SIZE) ]; then \
- $(REMOVE) $(TARGET).$(FIRMWARE_FORMAT); \
- $(REMOVE) $(BUILD_DIR)/$(TARGET).{hex,bin,uf2}; \
- printf "\n * $(MSG_FILE_TOO_BIG)"; $(PRINT_ERROR_PLAIN); \
- else \
- if [ $(FREE_SIZE) -lt $(SIZE_MARGIN) ]; then \
- $(PRINT_WARNING_PLAIN); printf " * $(MSG_FILE_NEAR_LIMIT)"; \
- else \
- $(PRINT_OK); $(SILENT) || printf " * $(MSG_FILE_JUST_RIGHT)"; \
- fi ; \
- fi ; \
- fi
-else
-check-size:
- $(SILENT) || echo "$(MSG_CHECK_FILESIZE_SKIPPED)"
-endif
check-md5:
$(MD5SUM) $(BUILD_DIR)/$(TARGET).$(FIRMWARE_FORMAT)
diff --git a/builddefs/converters.mk b/builddefs/converters.mk
index a3548afd609f..96c8656b253f 100644
--- a/builddefs/converters.mk
+++ b/builddefs/converters.mk
@@ -25,7 +25,9 @@ ifneq ($(CONVERT_TO),)
-include $(CONVERTER)/pre_converter.mk
PLATFORM_KEY = $(shell echo $(CONVERTER) | cut -d "/" -f2)
- TARGET := $(TARGET)_$(CONVERT_TO)
+
+ # force setting as value can be from environment
+ override TARGET := $(TARGET)_$(CONVERT_TO)
# Configure any defaults
OPT_DEFS += -DCONVERT_TO_$(shell echo $(CONVERT_TO) | tr '[:lower:]' '[:upper:]')
diff --git a/builddefs/generic_features.mk b/builddefs/generic_features.mk
index 4e058dcd2659..9c8695862554 100644
--- a/builddefs/generic_features.mk
+++ b/builddefs/generic_features.mk
@@ -13,39 +13,52 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see .
-SPACE_CADET_ENABLE ?= yes
GRAVE_ESC_ENABLE ?= yes
+MAGIC_ENABLE ?= yes
+SEND_STRING_ENABLE ?= yes
+SPACE_CADET_ENABLE ?= yes
GENERIC_FEATURES = \
+ AUTO_SHIFT \
AUTOCORRECT \
CAPS_WORD \
COMBO \
COMMAND \
+ CRC \
DEFERRED_EXEC \
DIGITIZER \
DIP_SWITCH \
DYNAMIC_KEYMAP \
DYNAMIC_MACRO \
+ DYNAMIC_TAPPING_TERM \
GRAVE_ESC \
HAPTIC \
KEY_LOCK \
KEY_OVERRIDE \
LEADER \
+ MAGIC \
+ MOUSEKEY \
+ MUSIC \
+ OS_DETECTION \
PROGRAMMABLE_BUTTON \
REPEAT_KEY \
SECURE \
+ SEND_STRING \
+ SEQUENCER \
SPACE_CADET \
SWAP_HANDS \
TAP_DANCE \
- VELOCIKEY \
+ TRI_LAYER \
+ VIA \
+ VIRTSER \
WPM \
- DYNAMIC_TAPPING_TERM \
- TRI_LAYER
define HANDLE_GENERIC_FEATURE
# $$(info "Processing: $1_ENABLE $2.c")
SRC += $$(wildcard $$(QUANTUM_DIR)/process_keycode/process_$2.c)
+ SRC += $$(wildcard $$(QUANTUM_DIR)/$2/$2.c)
SRC += $$(wildcard $$(QUANTUM_DIR)/$2.c)
+ VPATH += $$(wildcard $$(QUANTUM_DIR)/$2/)
OPT_DEFS += -D$1_ENABLE
endef
diff --git a/builddefs/message.mk b/builddefs/message.mk
index bf39554dab77..7c8f87f99006 100644
--- a/builddefs/message.mk
+++ b/builddefs/message.mk
@@ -91,7 +91,6 @@ MSG_AVAILABLE_KEYMAPS = $(eval $(call GENERATE_MSG_AVAILABLE_KEYMAPS))$(MSG_AVAI
MSG_BOOTLOADER_NOT_FOUND_BASE = Bootloader not found. Make sure the board is in bootloader mode. See https://docs.qmk.fm/\#/newbs_flashing\n
MSG_CHECK_FILESIZE = Checking file size of $(TARGET).$(FIRMWARE_FORMAT)
-MSG_CHECK_FILESIZE_SKIPPED = (Firmware size check does not yet support $(MCU_ORIG); skipping)
MSG_FILE_TOO_BIG = $(ERROR_COLOR)The firmware is too large!$(NO_COLOR) $(CURRENT_SIZE)/$(MAX_SIZE) ($(OVER_SIZE) bytes over)\n
MSG_FILE_TOO_SMALL = The firmware is too small! $(CURRENT_SIZE)/$(MAX_SIZE)\n
MSG_FILE_JUST_RIGHT = The firmware size is fine - $(CURRENT_SIZE)/$(MAX_SIZE) ($(PERCENT_SIZE)%%, $(FREE_SIZE) bytes free)\n
@@ -104,6 +103,10 @@ MSG_BOOTLOADER_NOT_FOUND = $(ERROR_COLOR)ERROR:$(NO_COLOR) $(MSG_BOOTLOADER_NOT_
BOOTLOADER_RETRY_TIME ?= 0.5
MSG_BOOTLOADER_NOT_FOUND_QUICK_RETRY = $(MSG_BOOTLOADER_NOT_FOUND_BASE) Trying again every $(BOOTLOADER_RETRY_TIME)s (Ctrl+C to cancel)
+define WARNING_MESSAGE
+ $(shell printf "\n %-99s $(WARN_STRING)\n" "$1" >&2)
+endef
+
define CATASTROPHIC_ERROR
$(shell printf "\n * %-99s $(ERROR_STRING)\n" "$2" >&2)
$(error $1)
diff --git a/builddefs/show_options.mk b/builddefs/show_options.mk
index 563d08988036..81d8400a8064 100644
--- a/builddefs/show_options.mk
+++ b/builddefs/show_options.mk
@@ -37,7 +37,6 @@ OTHER_OPTION_NAMES = \
UNICODEMAP_ENABLE \
UNICODE_COMMON \
AUTO_SHIFT_ENABLE \
- AUTO_SHIFT_MODIFIERS \
DYNAMIC_TAPPING_TERM_ENABLE \
COMBO_ENABLE \
KEY_LOCK_ENABLE \
@@ -60,7 +59,6 @@ OTHER_OPTION_NAMES = \
ENCODER_ENABLE_CUSTOM \
GERMAN_ENABLE \
HAPTIC_ENABLE \
- ISSI_ENABLE \
KEYLOGGER_ENABLE \
LCD_BACKLIGHT_ENABLE \
MACROS_ENABLED \
diff --git a/data/constants/keycodes/extras/keycodes_russian_typewriter_0.0.1.hjson b/data/constants/keycodes/extras/keycodes_russian_typewriter_0.0.1.hjson
new file mode 100644
index 000000000000..6ad03c58e555
--- /dev/null
+++ b/data/constants/keycodes/extras/keycodes_russian_typewriter_0.0.1.hjson
@@ -0,0 +1,291 @@
+{
+ "aliases": {
+/*
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
+ * │ | │ № │ - │ / │ " │ : │ , │ . │ _ │ ? │ % │ ! │ ; │ │
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
+ * │ │ Й │ Ц │ У │ К │ Е │ Н │ Г │ Ш │ Щ │ З │ Х │ Ъ │ ) │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤
+ * │ │ Ф │ Ы │ В │ А │ П │ Р │ О │ Л │ Д │ Ж │ Э │ │
+ * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────────┤
+ * │ │ Я │ Ч │ С │ М │ И │ Т │ Ь │ Б │ Ю │ Ё │ │
+ * ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
+ * │ │ │ │ │ │ │ │ │
+ * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
+ */
+ "KC_GRV": {
+ "key": "RU_PIPE",
+ "label": "|",
+ }
+ "KC_1": {
+ "key": "RU_NUM",
+ "label": "№",
+ }
+ "KC_2": {
+ "key": "RU_MINS",
+ "label": "-",
+ }
+ "KC_3": {
+ "key": "RU_SLSH",
+ "label": "/",
+ }
+ "KC_4": {
+ "key": "RU_DQUO",
+ "label": "\"",
+ }
+ "KC_5": {
+ "key": "RU_COLN",
+ "label": ":",
+ }
+ "KC_6": {
+ "key": "RU_COMM",
+ "label": ",",
+ }
+ "KC_7": {
+ "key": "RU_DOT",
+ "label": ".",
+ }
+ "KC_8": {
+ "key": "RU_UNDS",
+ "label": "_",
+ }
+ "KC_9": {
+ "key": "RU_QUES",
+ "label": "?",
+ }
+ "KC_0": {
+ "key": "RU_PERC",
+ "label": "%",
+ }
+ "KC_MINS": {
+ "key": "RU_EXLM",
+ "label": "!",
+ }
+ "KC_EQL": {
+ "key": "RU_SCLN",
+ "label": ";",
+ }
+ "KC_Q": {
+ "key": "RU_SHTI",
+ "label": "Й",
+ }
+ "KC_W": {
+ "key": "RU_TSE",
+ "label": "Ц",
+ }
+ "KC_E": {
+ "key": "RU_U",
+ "label": "У",
+ }
+ "KC_R": {
+ "key": "RU_KA",
+ "label": "К",
+ }
+ "KC_T": {
+ "key": "RU_IE",
+ "label": "Е",
+ }
+ "KC_Y": {
+ "key": "RU_EN",
+ "label": "Н",
+ }
+ "KC_U": {
+ "key": "RU_GHE",
+ "label": "Г",
+ }
+ "KC_I": {
+ "key": "RU_SHA",
+ "label": "Ш",
+ }
+ "KC_O": {
+ "key": "RU_SHCH",
+ "label": "Щ",
+ }
+ "KC_P": {
+ "key": "RU_ZE",
+ "label": "З",
+ }
+ "KC_LBRC": {
+ "key": "RU_HA",
+ "label": "Х",
+ }
+ "KC_RBRC": {
+ "key": "RU_HARD",
+ "label": "Ъ",
+ }
+ "KC_BSLS": {
+ "key": "RU_RPRN",
+ "label": ")",
+ }
+ "KC_A": {
+ "key": "RU_EF",
+ "label": "Ф",
+ }
+ "KC_S": {
+ "key": "RU_YERU",
+ "label": "Ы",
+ }
+ "KC_D": {
+ "key": "RU_VE",
+ "label": "В",
+ }
+ "KC_F": {
+ "key": "RU_A",
+ "label": "А",
+ }
+ "KC_G": {
+ "key": "RU_PE",
+ "label": "П",
+ }
+ "KC_H": {
+ "key": "RU_ER",
+ "label": "Р",
+ }
+ "KC_J": {
+ "key": "RU_O",
+ "label": "О",
+ }
+ "KC_K": {
+ "key": "RU_EL",
+ "label": "Л",
+ }
+ "KC_L": {
+ "key": "RU_DE",
+ "label": "Д",
+ }
+ "KC_SCLN": {
+ "key": "RU_ZHE",
+ "label": "Ж",
+ }
+ "KC_QUOT": {
+ "key": "RU_E",
+ "label": "Э",
+ }
+ "KC_Z": {
+ "key": "RU_YA",
+ "label": "Я",
+ }
+ "KC_X": {
+ "key": "RU_CHE",
+ "label": "Ч",
+ }
+ "KC_C": {
+ "key": "RU_ES",
+ "label": "С",
+ }
+ "KC_V": {
+ "key": "RU_EM",
+ "label": "М",
+ }
+ "KC_B": {
+ "key": "RU_I",
+ "label": "И",
+ }
+ "KC_N": {
+ "key": "RU_TE",
+ "label": "Т",
+ }
+ "KC_M": {
+ "key": "RU_SOFT",
+ "label": "Ь",
+ }
+ "KC_COMM": {
+ "key": "RU_BE",
+ "label": "Б",
+ }
+ "KC_DOT": {
+ "key": "RU_YU",
+ "label": "Ю",
+ }
+ "KC_SLSH": {
+ "key": "RU_YO",
+ "label": "Ё",
+ }
+/* Shifted symbols
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
+ * │ + │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ = │ \ │ │
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
+ * │ │ │ │ │ │ │ │ │ │ │ │ │ │ ( │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤
+ * │ │ │ │ │ │ │ │ │ │ │ │ │ │
+ * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────────┤
+ * │ │ │ │ │ │ │ │ │ │ │ │ │
+ * ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
+ * │ │ │ │ │ │ │ │ │
+ * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
+ */
+ "S(RU_PIPE)": {
+ "key": "RU_PLUS",
+ "label": "+",
+ }
+ "S(RU_NUM)": {
+ "key": "RU_1",
+ "label": "1",
+ }
+ "S(RU_MINS)": {
+ "key": "RU_2",
+ "label": "2",
+ }
+ "S(RU_SLSH)": {
+ "key": "RU_3",
+ "label": "3",
+ }
+ "S(RU_DQUO)": {
+ "key": "RU_4",
+ "label": "4",
+ }
+ "S(RU_COLN)": {
+ "key": "RU_5",
+ "label": "5",
+ }
+ "S(RU_COMM)": {
+ "key": "RU_6",
+ "label": "6",
+ }
+ "S(RU_DOT)": {
+ "key": "RU_7",
+ "label": "7",
+ }
+ "S(RU_UNDS)": {
+ "key": "RU_8",
+ "label": "8",
+ }
+ "S(RU_QUES)": {
+ "key": "RU_9",
+ "label": "9",
+ }
+ "S(RU_PERC)": {
+ "key": "RU_0",
+ "label": "0",
+ }
+ "S(RU_EXLM)": {
+ "key": "RU_EQL",
+ "label": "=",
+ }
+ "S(RU_SCLN)": {
+ "key": "RU_BSLS",
+ "label": "\\",
+ }
+ "S(RU_RPRN)": {
+ "key": "RU_LPRN",
+ "label": "(",
+ }
+/* AltGr symbols
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
+ * │ │ │ │ │ │ │ │ │ ₽ │ │ │ │ │ │
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
+ * │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤
+ * │ │ │ │ │ │ │ │ │ │ │ │ │ │
+ * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────────┤
+ * │ │ │ │ │ │ │ │ │ │ │ │ │
+ * ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
+ * │ │ │ │ │ │ │ │ │
+ * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
+ */
+ "ALGR(RU_UNDS)": {
+ "key": "RU_RUBL",
+ "label": "₽",
+ }
+ }
+}
diff --git a/data/mappings/defaults.hjson b/data/mappings/defaults.hjson
index 2bb00da22362..4a9f06c0da58 100644
--- a/data/mappings/defaults.hjson
+++ b/data/mappings/defaults.hjson
@@ -1,84 +1,84 @@
{
"development_board": {
- "promicro": {
- "processor": "atmega32u4",
- "bootloader": "caterina",
- "pin_compatible": "promicro"
+ "bit_c_pro": {
+ "board": "QMK_PM2040",
+ "bootloader": "rp2040",
+ "processor": "RP2040"
},
- "elite_c": {
- "processor": "atmega32u4",
- "bootloader": "atmel-dfu",
- "pin_compatible": "promicro"
+ "blackpill_f401": {
+ "board": "BLACKPILL_STM32_F401",
+ "bootloader": "stm32-dfu",
+ "processor": "STM32F401"
},
- "elite_pi": {
- "processor": "RP2040",
+ "blackpill_f411": {
+ "board": "BLACKPILL_STM32_F411",
+ "bootloader": "stm32-dfu",
+ "processor": "STM32F411"
+ },
+ "blok": {
+ "board": "QMK_BLOK",
"bootloader": "rp2040",
- "board": "QMK_PM2040"
+ "processor": "RP2040"
},
- "proton_c": {
- "processor": "STM32F303",
+ "bluepill": {
+ "board": "STM32_F103_STM32DUINO",
+ "bootloader": "stm32duino",
+ "processor": "STM32F103"
+ },
+ "bonsai_c4": {
+ "board": "BONSAI_C4",
"bootloader": "stm32-dfu",
- "board": "QMK_PROTON_C"
+ "processor": "STM32F411"
},
- "kb2040": {
- "processor": "RP2040",
+ "elite_c": {
+ "bootloader": "atmel-dfu",
+ "pin_compatible": "promicro",
+ "processor": "atmega32u4"
+ },
+ "elite_pi": {
+ "board": "QMK_PM2040",
"bootloader": "rp2040",
- "board": "QMK_PM2040"
+ "processor": "RP2040"
},
- "promicro_rp2040": {
- "processor": "RP2040",
+ "helios": {
+ "board": "QMK_PM2040",
"bootloader": "rp2040",
- "board": "QMK_PM2040"
+ "processor": "RP2040"
},
- "blok": {
- "processor": "RP2040",
+ "kb2040": {
+ "board": "QMK_PM2040",
"bootloader": "rp2040",
- "board": "QMK_BLOK"
+ "processor": "RP2040"
},
- "michi": {
- "processor": "RP2040",
+ "liatris": {
+ "board": "QMK_PM2040",
"bootloader": "rp2040",
- "board": "QMK_PM2040"
+ "processor": "RP2040"
},
- "bit_c_pro": {
- "processor": "RP2040",
+ "michi": {
+ "board": "QMK_PM2040",
"bootloader": "rp2040",
- "board": "QMK_PM2040"
+ "processor": "RP2040"
},
- "bluepill": {
- "processor": "STM32F103",
- "bootloader": "stm32duino",
- "board": "STM32_F103_STM32DUINO"
+ "promicro": {
+ "bootloader": "caterina",
+ "pin_compatible": "promicro",
+ "processor": "atmega32u4"
},
- "blackpill_f401": {
- "processor": "STM32F401",
- "bootloader": "stm32-dfu",
- "board": "BLACKPILL_STM32_F401"
+ "promicro_rp2040": {
+ "board": "QMK_PM2040",
+ "bootloader": "rp2040",
+ "processor": "RP2040"
},
- "blackpill_f411": {
- "processor": "STM32F411",
+ "proton_c": {
+ "board": "QMK_PROTON_C",
"bootloader": "stm32-dfu",
- "board": "BLACKPILL_STM32_F411"
+ "processor": "STM32F303"
},
"stemcell": {
- "processor": "STM32F411",
+ "board": "STEMCELL",
"bootloader": "tinyuf2",
- "board": "STEMCELL"
- },
- "bonsai_c4": {
- "processor": "STM32F411",
- "bootloader": "stm32-dfu",
- "board": "BONSAI_C4"
- },
- "helios": {
- "processor": "RP2040",
- "bootloader": "rp2040",
- "board": "QMK_PM2040"
- },
- "liatris": {
- "processor": "RP2040",
- "bootloader": "rp2040",
- "board": "QMK_PM2040"
+ "processor": "STM32F411"
}
}
}
diff --git a/data/mappings/info_config.hjson b/data/mappings/info_config.hjson
index ab9a4a0e4527..26b437b51335 100644
--- a/data/mappings/info_config.hjson
+++ b/data/mappings/info_config.hjson
@@ -29,6 +29,9 @@
"BACKLIGHT_PIN": {"info_key": "backlight.pin"},
"BACKLIGHT_PINS": {"info_key": "backlight.pins", "value_type": "array"},
"BREATHING_PERIOD": {"info_key": "backlight.breathing_period", "value_type": "int"},
+ "BACKLIGHT_DEFAULT_ON": {"info_key": "backlight.default.on", "value_type": "bool"},
+ "BACKLIGHT_DEFAULT_BREATHING": {"info_key": "backlight.default.breathing", "value_type": "bool"},
+ "BACKLIGHT_DEFAULT_LEVEL": {"info_key": "backlight.default.brightness", "value_type": "int"},
// Bootmagic
"BOOTMAGIC_LITE_COLUMN": {"info_key": "bootmagic.matrix.1", "value_type": "int"},
@@ -45,10 +48,18 @@
// Combos
"COMBO_TERM": {"info_key": "combo.term", "value_type": "int"},
+ "DIP_SWITCH_MATRIX_GRID": {"info_key": "dip_switch.matrix_grid", "value_type": "array.array.int", "to_json": false},
+ "DIP_SWITCH_PINS": {"info_key": "dip_switch.pins", "value_type": "array"},
+ "DIP_SWITCH_PINS_RIGHT": {"info_key": "split.dip_switch.right.pins", "value_type": "array"},
+
// Dynamic Keymap
"DYNAMIC_KEYMAP_EEPROM_MAX_ADDR": {"info_key": "dynamic_keymap.eeprom_max_addr", "value_type": "int"},
"DYNAMIC_KEYMAP_LAYER_COUNT": {"info_key": "dynamic_keymap.layer_count", "value_type": "int"},
+ // EEPROM
+ "WEAR_LEVELING_BACKING_SIZE": {"info_key": "eeprom.wear_leveling.backing_size", "value_type": "int", "to_json": false},
+ "WEAR_LEVELING_LOGICAL_SIZE": {"info_key": "eeprom.wear_leveling.logical_size", "value_type": "int", "to_json": false},
+
// Indicators
"LED_CAPS_LOCK_PIN": {"info_key": "indicators.caps_lock"},
"LED_NUM_LOCK_PIN": {"info_key": "indicators.num_lock"},
@@ -63,13 +74,24 @@
"LEADER_TIMEOUT": {"info_key": "leader_key.timeout", "value_type": "int"},
// LED Matrix
+ "LED_DISABLE_WHEN_USB_SUSPENDED": {"info_key": "led_matrix.sleep", "value_type": "bool"},
"LED_MATRIX_CENTER": {"info_key": "led_matrix.center_point", "value_type": "array.int"},
+ "LED_MATRIX_KEYRELEASES": {"info_key": "led_matrix.react_on_keyup", "value_type": "bool"},
+ "LED_MATRIX_LED_FLUSH_LIMIT": {"info_key": "led_matrix.led_flush_limit", "value_type": "int"},
+ "LED_MATRIX_LED_PROCESS_LIMIT": {"info_key": "led_matrix.led_process_limit", "value_type": "int", "to_json": false},
"LED_MATRIX_MAXIMUM_BRIGHTNESS": {"info_key": "led_matrix.max_brightness", "value_type": "int"},
"LED_MATRIX_SPD_STEP": {"info_key": "led_matrix.speed_steps", "value_type": "int"},
"LED_MATRIX_SPLIT": {"info_key": "led_matrix.split_count", "value_type": "array.int"},
"LED_MATRIX_TIMEOUT": {"info_key": "led_matrix.timeout", "value_type": "int"},
"LED_MATRIX_VAL_STEP": {"info_key": "led_matrix.val_steps", "value_type": "int"},
"LED_MATRIX_LED_COUNT": {"info_key": "led_matrix.led_count", "value_type": "int", "to_json": false},
+ "LED_MATRIX_DEFAULT_ON": {"info_key": "led_matrix.default.on", "value_type": "bool"},
+ "LED_MATRIX_DEFAULT_VAL": {"info_key": "led_matrix.default.val", "value_type": "int"},
+ "LED_MATRIX_DEFAULT_SPD": {"info_key": "led_matrix.default.speed", "value_type": "int"},
+
+ // Locking Switch
+ "LOCKING_SUPPORT_ENABLE": {"info_key": "qmk.locking.enabled", "value_type": "bool"},
+ "LOCKING_RESYNC_ENABLE": {"info_key": "qmk.locking.resync", "value_type": "bool"},
// LUFA Bootloader
"QMK_ESC_INPUT": {"info_key": "qmk_lufa_bootloader.esc_input"},
@@ -100,8 +122,12 @@
"PS2_DATA_PIN": {"info_key": "ps2.data_pin"},
// RGB Matrix
+ "RGB_DISABLE_WHEN_USB_SUSPENDED": {"info_key": "rgb_matrix.sleep", "value_type": "bool"},
"RGB_MATRIX_CENTER": {"info_key": "rgb_matrix.center_point", "value_type": "array.int"},
"RGB_MATRIX_HUE_STEP": {"info_key": "rgb_matrix.hue_steps", "value_type": "int"},
+ "RGB_MATRIX_KEYRELEASES": {"info_key": "rgb_matrix.react_on_keyup", "value_type": "bool"},
+ "RGB_MATRIX_LED_FLUSH_LIMIT": {"info_key": "rgb_matrix.led_flush_limit", "value_type": "int"},
+ "RGB_MATRIX_LED_PROCESS_LIMIT": {"info_key": "rgb_matrix.led_process_limit", "value_type": "int", "to_json": false},
"RGB_MATRIX_MAXIMUM_BRIGHTNESS": {"info_key": "rgb_matrix.max_brightness", "value_type": "int"},
"RGB_MATRIX_SAT_STEP": {"info_key": "rgb_matrix.sat_steps", "value_type": "int"},
"RGB_MATRIX_SPD_STEP": {"info_key": "rgb_matrix.speed_steps", "value_type": "int"},
@@ -109,6 +135,11 @@
"RGB_MATRIX_TIMEOUT": {"info_key": "rgb_matrix.timeout", "value_type": "int"},
"RGB_MATRIX_VAL_STEP": {"info_key": "rgb_matrix.val_steps", "value_type": "int"},
"RGB_MATRIX_LED_COUNT": {"info_key": "rgb_matrix.led_count", "value_type": "int", "to_json": false},
+ "RGB_MATRIX_DEFAULT_ON": {"info_key": "rgb_matrix.default.on", "value_type": "bool"},
+ "RGB_MATRIX_DEFAULT_HUE": {"info_key": "rgb_matrix.default.hue", "value_type": "int"},
+ "RGB_MATRIX_DEFAULT_SAT": {"info_key": "rgb_matrix.default.sat", "value_type": "int"},
+ "RGB_MATRIX_DEFAULT_VAL": {"info_key": "rgb_matrix.default.val", "value_type": "int"},
+ "RGB_MATRIX_DEFAULT_SPD": {"info_key": "rgb_matrix.default.speed", "value_type": "int"},
// RGBLight
"RGBLED_NUM": {"info_key": "rgblight.led_count", "value_type": "int"},
@@ -124,6 +155,11 @@
"RGBLIGHT_SLEEP": {"info_key": "rgblight.sleep", "value_type": "bool"},
"RGBLIGHT_SPLIT": {"info_key": "rgblight.split", "value_type": "bool"},
"RGBLIGHT_VAL_STEP": {"info_key": "rgblight.brightness_steps", "value_type": "int"},
+ "RGBLIGHT_DEFAULT_ON": {"info_key": "rgblight.default.on", "value_type": "bool"},
+ "RGBLIGHT_DEFAULT_HUE": {"info_key": "rgblight.default.hue", "value_type": "int"},
+ "RGBLIGHT_DEFAULT_SAT": {"info_key": "rgblight.default.sat", "value_type": "int"},
+ "RGBLIGHT_DEFAULT_VAL": {"info_key": "rgblight.default.val", "value_type": "int"},
+ "RGBLIGHT_DEFAULT_SPD": {"info_key": "rgblight.default.speed", "value_type": "int"},
"RGBW": {"info_key": "rgblight.rgbw", "value_type": "bool"},
// Secure
@@ -134,13 +170,23 @@
// Split Keyboard
"SOFT_SERIAL_PIN": {"info_key": "split.soft_serial_pin"},
"SOFT_SERIAL_SPEED": {"info_key": "split.soft_serial_speed"},
- "SPLIT_MODS_ENABLE": {"info_key": "split.transport.sync_modifiers", "value_type": "bool"},
- "SPLIT_TRANSPORT_MIRROR": {"info_key": "split.transport.sync_matrix_state", "value_type": "bool"},
+ "SPLIT_HAND_MATRIX_GRID": {"info_key": "split.handedness.matrix_grid", "value_type": "array", "to_c": false},
+ "SPLIT_HAND_PIN": {"info_key": "split.handedness.pin"},
"SPLIT_USB_DETECT": {"info_key": "split.usb_detect.enabled", "value_type": "bool"},
"SPLIT_USB_TIMEOUT": {"info_key": "split.usb_detect.timeout", "value_type": "int"},
"SPLIT_USB_TIMEOUT_POLL": {"info_key": "split.usb_detect.polling_interval", "value_type": "int"},
"SPLIT_WATCHDOG_ENABLE": {"info_key": "split.transport.watchdog", "value_type": "bool"},
"SPLIT_WATCHDOG_TIMEOUT": {"info_key": "split.transport.watchdog_timeout", "value_type": "int"},
+ "SPLIT_ACTIVITY_ENABLE": {"info_key": "split.transport.sync.activity", "value_type": "bool"},
+ "SPLIT_DETECTED_OS_ENABLE": {"info_key": "split.transport.sync.detected_os", "value_type": "bool"},
+ "SPLIT_HAPTIC_ENABLE": {"info_key": "split.transport.sync.haptic", "value_type": "bool"},
+ "SPLIT_LAYER_STATE_ENABLE": {"info_key": "split.transport.sync.layer_state", "value_type": "bool"},
+ "SPLIT_LED_STATE_ENABLE": {"info_key": "split.transport.sync.indicators", "value_type": "bool"},
+ "SPLIT_TRANSPORT_MIRROR": {"info_key": "split.transport.sync.matrix_state", "value_type": "bool"},
+ "SPLIT_MODS_ENABLE": {"info_key": "split.transport.sync.modifiers", "value_type": "bool"},
+ "SPLIT_OLED_ENABLE": {"info_key": "split.transport.sync.oled", "value_type": "bool"},
+ "SPLIT_ST7565_ENABLE": {"info_key": "split.transport.sync.st7565", "value_type": "bool"},
+ "SPLIT_WPM_ENABLE": {"info_key": "split.transport.sync.wpm", "value_type": "bool"},
// Tapping
"HOLD_ON_OTHER_KEY_PRESS": {"info_key": "tapping.hold_on_other_key_press", "value_type": "bool"},
@@ -190,4 +236,9 @@
"PRODUCT": {"info_key": "keyboard_name", "warn_duplicate": false, "value_type": "str", "deprecated": true, "replace_with": "`keyboard_name` in info.json"},
"PRODUCT_ID": {"info_key": "usb.pid", "value_type": "hex", "deprecated": true, "replace_with": "`usb.pid` in info.json"},
"VENDOR_ID": {"info_key": "usb.vid", "value_type": "hex", "deprecated": true, "replace_with": "`usb.vid` in info.json"},
+
+ // Items we want flagged in lint
+ "VIAL_KEYBOARD_UID": {"info_key": "_invalid.vial_uid", "invalid": true},
+ "VIAL_UNLOCK_COMBO_COLS": {"info_key": "_invalid.vial_unlock_cols", "invalid": true},
+ "VIAL_UNLOCK_COMBO_ROWS": {"info_key": "_invalid.vial_unlock_rows", "invalid": true}
}
diff --git a/data/mappings/info_rules.hjson b/data/mappings/info_rules.hjson
index 07191551da8f..02fc2bee9de6 100644
--- a/data/mappings/info_rules.hjson
+++ b/data/mappings/info_rules.hjson
@@ -17,6 +17,7 @@
"BOOTLOADER": {"info_key": "bootloader", "warn_duplicate": false},
"BOOTMAGIC_ENABLE": {"info_key": "bootmagic.enabled", "value_type": "bool"},
"CAPS_WORD_ENABLE": {"info_key": "caps_word.enabled", "value_type": "bool"},
+ "DIP_SWITCH_ENABLE": {"info_key": "dip_switch.enabled", "value_type": "bool"},
"DEBOUNCE_TYPE": {"info_key": "build.debounce_type"},
"EEPROM_DRIVER": {"info_key": "eeprom.driver"},
"ENCODER_ENABLE": {"info_key": "encoder.enabled", "value_type": "bool"},
@@ -42,6 +43,7 @@
"STENO_ENABLE": {"info_key": "stenography.enabled", "value_type": "bool"},
"STENO_PROTOCOL": {"info_key": "stenography.protocol"},
"WAIT_FOR_USB": {"info_key": "usb.wait_for", "value_type": "bool"},
+ "WEAR_LEVELING_DRIVER": {"info_key": "eeprom.wear_leveling.driver"},
"WS2812_DRIVER": {"info_key": "ws2812.driver"},
// Items we want flagged in lint
diff --git a/data/mappings/keyboard_aliases.hjson b/data/mappings/keyboard_aliases.hjson
index 60c5deaad5e0..90f32ee6acca 100644
--- a/data/mappings/keyboard_aliases.hjson
+++ b/data/mappings/keyboard_aliases.hjson
@@ -4,6 +4,13 @@
// "target": ""
// }
//
+
+ /* This list of aliases is for testing purposes -- ensures "linked list" recursive traversal works correctly. */
+ "_test_a": { "target": "_test_b" },
+ "_test_b": { "target": "_test_c" },
+ "_test_c": { "target": "planck/rev6" },
+
+ /* The main list of aliases for moved keyboards within QMK. */
"2_milk": {
"target": "spaceman/2_milk"
},
@@ -35,7 +42,7 @@
"target": "amjkeyboard/amjpad"
},
"angel64": {
- "target": "angel64/alpha"
+ "target": "kakunpc/angel64/alpha"
},
"ashpil/modelm_usbc": {
"target": "ibm/model_m/ashpil_usbc"
@@ -47,10 +54,10 @@
"target": "viktus/at101_bh"
},
"atom47/rev2": {
- "target": "maartenwut/atom47/rev2"
+ "target": "evyd13/atom47/rev2"
},
"atom47/rev3": {
- "target": "maartenwut/atom47/rev3"
+ "target": "evyd13/atom47/rev3"
},
"bakeneko60": {
"target": "kkatano/bakeneko60"
@@ -65,7 +72,7 @@
"target": "bear_face/v1"
},
"bm16a": {
- "target": "kprepublic/bm16a"
+ "target": "kprepublic/bm16a/v1"
},
"bm16s": {
"target": "kprepublic/bm16s"
@@ -77,16 +84,16 @@
"target": "kprepublic/bm43a"
},
"bm60poker": {
- "target": "kprepublic/bm60poker"
+ "target": "kprepublic/bm60hsrgb_poker/rev1"
},
"bm60rgb": {
- "target": "kprepublic/bm60rgb"
+ "target": "kprepublic/bm60hsrgb/rev1"
},
"bm60rgb_iso": {
- "target": "kprepublic/bm60rgb_iso"
+ "target": "kprepublic/bm60hsrgb_iso/rev1"
},
"bm68rgb": {
- "target": "kprepublic/bm68rgb"
+ "target": "kprepublic/bm68hsrgb/rev1"
},
"bpiphany/pegasushoof": {
"target": "bpiphany/pegasushoof/2013"
@@ -136,11 +143,17 @@
"daisy": {
"target": "ktec/daisy"
},
+ "dp3000": {
+ "target": "dp3000/rev1"
+ },
"drakon": {
"target": "jagdpietr/drakon"
},
"durgod/k320": {
- "target": "durgod/k3x0/k320"
+ "target": "durgod/k320/base"
+ },
+ "durgod/k3x0/k320": {
+ "target": "durgod/k320/base"
},
"durgod/hades": {
"target": "durgod/dgk6x/hades_ansi"
@@ -166,6 +179,9 @@
"dztech/volcano660": {
"target": "ilumkb/volcano660"
},
+ "dztech/og60": {
+ "target": "dztech/tofu60"
+ },
"eek": {
"target": "eek/silk_down"
},
@@ -199,6 +215,9 @@
"handwired/dactyl_manuform/6x6_kinesis": {
"target": "handwired/dactyl_kinesis"
},
+ "handwired/dactyl_manuform/dmote/62key": {
+ "target": "handwired/dmote"
+ },
"handwired/ferris": {
"target": "ferris/0_1"
},
@@ -269,7 +288,7 @@
"target": "idb/idb_60"
},
"idobo": {
- "target": "idobao/id75"
+ "target": "idobao/id75/v1"
},
"jacky_studio/piggy60": {
"target": "jacky_studio/piggy60/rev1"
@@ -391,6 +410,9 @@
"maartenwut/wonderland": {
"target": "evyd13/wonderland"
},
+ "matchstickworks/southpad": {
+ "target": "matchstickworks/southpad/rev2/"
+ },
"matrix/m12og": {
"target": "matrix/m12og/rev1"
},
@@ -401,7 +423,7 @@
"target": "mechlovin/adelais/rgb_led/rev1"
},
"mechlovin/adelais/standard_led": {
- "target": "mechlovin/adelais/standard_led/rev2"
+ "target": "mechlovin/adelais/standard_led/arm/rev2"
},
"mechlovin/delphine": {
"target": "mechlovin/delphine/mono_led"
@@ -455,10 +477,10 @@
"target": "pabile/p20/ver1"
},
"pancake/feather": {
- "target": "spaceman/pancake/feather"
+ "target": "spaceman/pancake/rev1/feather"
},
"pancake/promicro": {
- "target": "spaceman/pancake/promicro"
+ "target": "spaceman/pancake/rev1/promicro"
},
"peiorisboards/ixora": {
"target": "coarse/ixora"
@@ -467,7 +489,7 @@
"target": "dm9records/plaid"
},
"plain60": {
- "target": "maartenwut/plain60"
+ "target": "evyd13/plain60"
},
"ploopyco/trackball": {
"target": "ploopyco/trackball/rev1_005"
@@ -503,10 +525,10 @@
"target": "wilba_tech/rama_works_u80_a"
},
"ramonimbao/herringbone": {
- "target": "ramonimbao/herringbone/v1"
+ "target": "rmi_kb/herringbone/v1"
},
"ramonimbao/mona": {
- "target": "ramonimbao/mona/v1"
+ "target": "rmi_kb/mona/v1"
},
"rgbkb/pan": {
"target": "rgbkb/pan/rev1/32a"
@@ -542,10 +564,10 @@
"target": "tkw/stoutgat/v1"
},
"suihankey": {
- "target": "suihankey/split/alpha"
+ "target": "kakunpc/suihankey/split/alpha"
},
"ta65": {
- "target": "maartenwut/ta65"
+ "target": "evyd13/ta65"
},
"tartan": {
"target": "dm9records/tartan"
@@ -563,13 +585,13 @@
"target": "matthewdias/txuu"
},
"underscore33": {
- "target": "underscore33/rev1"
+ "target": "tominabox1/underscore33/rev1"
},
"vinta": {
"target": "coarse/vinta"
},
"wasdat": {
- "target": "maartenwut/wasdat"
+ "target": "evyd13/wasdat"
},
"westfoxtrot/cypher": {
"target": "westfoxtrot/cypher/rev1"
@@ -581,10 +603,10 @@
"target": "xiudi/xd002"
},
"xd004": {
- "target": "xiudi/xd004"
+ "target": "xiudi/xd004/v1"
},
"xd60": {
- "target": "xiudi/xd60"
+ "target": "xiudi/xd60/rev2"
},
"xd68": {
"target": "xiudi/xd68"
@@ -831,7 +853,7 @@
"target": "kagizaraya/halberd"
},
"handwired/hillside/0_1": {
- "target": "handwired/hillside/48"
+ "target": "hillside/48/0_1"
},
"hecomi/alpha": {
"target": "takashiski/hecomi/alpha"
@@ -843,10 +865,10 @@
"target": "bpiphany/hid_liber"
},
"id67/default_rgb": {
- "target": "idobao/id67/default_rgb"
+ "target": "idobao/id67"
},
"id67/rgb": {
- "target": "idobao/id67/rgb"
+ "target": "idobao/id67"
},
"id80": {
"target": "idobao/id80/v2/ansi"
@@ -884,6 +906,18 @@
"kelowna/rgb64": {
"target": "weirdo/kelowna/rgb64"
},
+ "keychron/q0": {
+ "target": "keychron/q0/base"
+ },
+ "keychron/q1": {
+ "target": "keychron/q1v1/ansi"
+ }
+ "keychron/q4": {
+ "target": "keychron/q4/ansi/v1"
+ }
+ "kprepublic/bm40hsrgb": {
+ "target": "kprepublic/bm40hsrgb/rev1"
+ },
"kprepublic/bm65hsrgb_iso": {
"target": "kprepublic/bm65hsrgb_iso/rev1"
},
@@ -1184,6 +1218,12 @@
"setta21": {
"target": "salicylic_acid3/setta21"
},
+ "soda/mango": {
+ "target": "magic_force/mf17"
+ },
+ "soda/pocket": {
+ "target": "magic_force/mf34"
+ },
"space_space/rev1": {
"target": "qpockets/space_space/rev1"
},
@@ -1208,6 +1248,9 @@
"stella": {
"target": "hnahkb/stella"
},
+ "studiokestra/line_tkl": {
+ "target": "studiokestra/line_friends_tkl"
+ },
"suihankey/alpha": {
"target": "kakunpc/suihankey/alpha"
},
@@ -1236,7 +1279,7 @@
"target": "marksard/treadstone48/rev2"
},
"tronguylabs/m122_3270": {
- "target": "ibm/model_m_122/m122_3270"
+ "target": "ibm/model_m_122/m122_3270/teensy"
},
"ua62": {
"target": "nacly/ua62"
@@ -1290,7 +1333,7 @@
"target": "ydkb/yd68"
},
"ymd75": {
- "target": "ymdk/ymd75"
+ "target": "ymdk/ymd75/rev1"
},
"ymd96": {
"target": "ymdk/ymd96"
@@ -1312,5 +1355,9 @@
},
"zinc/reva": {
"target": "25keys/zinc/reva"
+ },
+ // Moved during 2023 Q4 cycle
+ "ymdk/melody96": {
+ "target": "ymdk/melody96/soldered"
}
}
diff --git a/data/schemas/definitions.jsonschema b/data/schemas/definitions.jsonschema
index 441e6395cf6e..a1fdd2dcc680 100644
--- a/data/schemas/definitions.jsonschema
+++ b/data/schemas/definitions.jsonschema
@@ -3,10 +3,25 @@
"$id": "qmk.definitions.v1",
"title": "Common definitions used across QMK's jsonschemas.",
"type": "object",
+ "bcd_version": {
+ "type": "string",
+ "pattern": "^[0-9]{1,2}\\.[0-9]\\.[0-9]$"
+ },
+ "bit": {
+ "type": "integer",
+ "minimum": 0,
+ "maximum": 1
+ },
"boolean_array": {
"type": "object",
"additionalProperties": {"type": "boolean"}
},
+ "build_target": {
+ "oneOf": [
+ {"$ref": "#/keyboard_keymap_tuple"},
+ {"$ref": "#/json_file_path"}
+ ]
+ },
"filename": {
"type": "string",
"minLength": 1,
@@ -20,18 +35,56 @@
"type": "string",
"pattern": "^0x[0-9A-F]{4}$"
},
- "bcd_version": {
+ "json_file_path": {
"type": "string",
- "pattern": "^[0-9]{1,2}\\.[0-9]\\.[0-9]$"
+ "pattern": "^[0-9a-z_/\\-]+\\.json$"
},
- "text_identifier": {
+ "key_unit": {
+ "type": "number"
+ },
+ "keyboard": {
"type": "string",
- "minLength": 1,
- "maxLength": 250
+ "pattern": "^[0-9a-z][0-9a-z_/]*$"
},
- "snake_case": {
+ "keyboard_keymap_tuple": {
+ "type": "array",
+ "prefixItems": [
+ {"$ref": "#/keyboard"},
+ {"$ref": "#/filename"}
+ ],
+ "unevaluatedItems": false
+ },
+ "keycode": {
"type": "string",
- "pattern": "^[a-z][a-z0-9_]*$"
+ "minLength": 2,
+ "maxLength": 50,
+ "pattern": "^[A-Z][A-Zs_0-9]*$"
+ },
+ "keycode_decl": {
+ "type": "object",
+ "required": [
+ "key"
+ ],
+ "properties": {
+ "key": {"$ref": "#/keycode"},
+ "label": {"$ref": "#/text_identifier"},
+ "aliases": {
+ "type": "array",
+ "minItems": 1,
+ "items": {"$ref": "#/keycode_short"}
+ }
+ }
+ },
+ "keycode_decl_array": {
+ "type": "array",
+ "minItems": 1,
+ "items": {"$ref": "#/keycode_decl"}
+ },
+ "keycode_short": {
+ "type": "string",
+ "minLength": 2,
+ "maxLength": 7,
+ "pattern": "^[A-Z][A-Zs_0-9]*$"
},
"layout_macro": {
"oneOf": [
@@ -68,49 +121,6 @@
}
]
},
- "key_unit": {
- "type": "number"
- },
- "keyboard": {
- "type": "string",
- "pattern": "^[0-9a-z][0-9a-z_/]*$"
- },
- "keycode": {
- "type": "string",
- "minLength": 2,
- "maxLength": 50,
- "pattern": "^[A-Z][A-Zs_0-9]*$"
- },
- "keycode_short": {
- "type": "string",
- "minLength": 2,
- "maxLength": 7,
- "pattern": "^[A-Z][A-Zs_0-9]*$"
- },
- "keycode_decl": {
- "type": "object",
- "required": [
- "key"
- ],
- "properties": {
- "key": {"$ref": "#/keycode"},
- "label": {"$ref": "#/text_identifier"},
- "aliases": {
- "type": "array",
- "minItems": 1,
- "items": {"$ref": "#/keycode_short"}
- }
- }
- },
- "keycode_decl_array": {
- "type": "array",
- "minItems": 1
- "items": {"$ref": "#/keycode_decl"}
- },
- "mcu_pin_array": {
- "type": "array",
- "items": {"$ref": "#/mcu_pin"}
- },
"mcu_pin": {
"oneOf": [
{
@@ -129,14 +139,14 @@
"type": "string",
"pattern": "^GP\\d{1,2}$"
},
- {
- "type": "integer"
- },
- {
- "type": "null"
- }
+ {"type": "integer"},
+ {"type": "null"}
]
},
+ "mcu_pin_array": {
+ "type": "array",
+ "items": {"$ref": "#/mcu_pin"}
+ },
"signed_decimal": {
"type": "number"
},
@@ -148,17 +158,22 @@
"minimum": -127,
"maximum": 127
},
+ "snake_case": {
+ "type": "string",
+ "pattern": "^[a-z][a-z0-9_]*$"
+ },
"string_array": {
"type": "array",
- "items": {
- "type": "string"
- }
+ "items": {"type": "string"}
},
"string_object": {
"type": "object",
- "additionalProperties": {
- "type": "string"
- }
+ "additionalProperties": {"type": "string"}
+ },
+ "text_identifier": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 250
},
"unsigned_decimal": {
"type": "number",
@@ -172,10 +187,5 @@
"type": "integer",
"minimum": 0,
"maximum": 255
- },
- "bit": {
- "type": "integer",
- "minimum": 0,
- "maximum": 1
}
}
diff --git a/data/schemas/keyboard.jsonschema b/data/schemas/keyboard.jsonschema
index 4053387f3b42..299695808486 100644
--- a/data/schemas/keyboard.jsonschema
+++ b/data/schemas/keyboard.jsonschema
@@ -20,7 +20,15 @@
}
}
}
- }
+ },
+ "dip_switch_config": {
+ "type": "object",
+ "properties": {
+ "pins": {
+ "$ref": "qmk.definitions.v1#/mcu_pin_array"
+ }
+ }
+ },
},
"type": "object",
"not": { "required": [ "vendorId", "productId" ] }, // reject via keys...
@@ -128,6 +136,15 @@
"type": "string",
"enum": ["pwm", "software", "timer", "custom"]
},
+ "default": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "on": {"type": "boolean"},
+ "breathing": {"type": "boolean"},
+ "brightness": {"$ref": "qmk.definitions.v1#/unsigned_int_8"}
+ }
+ },
"breathing": {"type": "boolean"},
"breathing_period": {"$ref": "qmk.definitions.v1#/unsigned_int_8"},
"levels": {
@@ -245,9 +262,40 @@
"type": "array",
"items": {"$ref": "qmk.definitions.v1#/filename"}
},
+ "dip_switch": {
+ "$ref": "#/definitions/dip_switch_config",
+ "properties": {
+ "enabled": {"type": "boolean"},
+ "matrix_grid": {
+ "type": "array",
+ "minItems": 1,
+ "items": {
+ "type": "array",
+ "minItems": 2,
+ "maxItems": 2,
+ "items": {
+ "type": "integer",
+ "minimum": 0
+ }
+ }
+ }
+ }
+ },
"eeprom": {
"properties": {
- "driver": {"type": "string"}
+ "driver": {"type": "string"},
+ "wear_leveling": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "driver": {
+ "type": "string",
+ "enum": ["custom", "embedded_flash", "legacy", "rp2040_flash", "spi_flash"]
+ },
+ "backing_size": {"$ref": "qmk.definitions.v1#/unsigned_int"},
+ "logical_size": {"$ref": "qmk.definitions.v1#/unsigned_int"}
+ }
+ }
}
},
"encoder": {
@@ -300,6 +348,7 @@
"additionalProperties": false,
"required": ["x", "y"],
"properties": {
+ "encoder": {"$ref": "qmk.definitions.v1#/unsigned_int"},
"label": {
"type": "string",
"pattern": "^[^\\n]*$"
@@ -379,6 +428,16 @@
"type": "boolean"
}
},
+ "default": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "on": {"type": "boolean"},
+ "animation": {"type": "string"},
+ "val": {"$ref": "qmk.definitions.v1#/unsigned_int_8"},
+ "speed": {"$ref": "qmk.definitions.v1#/unsigned_int_8"}
+ }
+ },
"driver": {"type": "string"},
"center_point": {
"type": "array",
@@ -390,6 +449,10 @@
"timeout": {"$ref": "qmk.definitions.v1#/unsigned_int"},
"val_steps": {"$ref": "qmk.definitions.v1#/unsigned_int"},
"speed_steps": {"$ref": "qmk.definitions.v1#/unsigned_int"},
+ "led_flush_limit": {"$ref": "qmk.definitions.v1#/unsigned_int"},
+ "led_process_limit": {"$ref": "qmk.definitions.v1#/unsigned_int"},
+ "react_on_keyup": {"type": "boolean"},
+ "sleep": {"type": "boolean"},
"split_count": {
"type": "array",
"minItems": 2,
@@ -429,6 +492,18 @@
"type": "boolean"
}
},
+ "default": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "on": {"type": "boolean"},
+ "animation": {"type": "string"},
+ "hue": {"$ref": "qmk.definitions.v1#/unsigned_int_8"},
+ "sat": {"$ref": "qmk.definitions.v1#/unsigned_int_8"},
+ "val": {"$ref": "qmk.definitions.v1#/unsigned_int_8"},
+ "speed": {"$ref": "qmk.definitions.v1#/unsigned_int_8"}
+ }
+ },
"driver": {"type": "string"},
"center_point": {
"type": "array",
@@ -442,6 +517,10 @@
"sat_steps": {"$ref": "qmk.definitions.v1#/unsigned_int"},
"val_steps": {"$ref": "qmk.definitions.v1#/unsigned_int"},
"speed_steps": {"$ref": "qmk.definitions.v1#/unsigned_int"},
+ "led_flush_limit": {"$ref": "qmk.definitions.v1#/unsigned_int"},
+ "led_process_limit": {"$ref": "qmk.definitions.v1#/unsigned_int"},
+ "react_on_keyup": {"type": "boolean"},
+ "sleep": {"type": "boolean"},
"split_count": {
"type": "array",
"minItems": 2,
@@ -483,6 +562,18 @@
}
},
"brightness_steps": {"$ref": "qmk.definitions.v1#/unsigned_int"},
+ "default": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "on": {"type": "boolean"},
+ "animation": {"type": "string"},
+ "hue": {"$ref": "qmk.definitions.v1#/unsigned_int_8"},
+ "sat": {"$ref": "qmk.definitions.v1#/unsigned_int_8"},
+ "val": {"$ref": "qmk.definitions.v1#/unsigned_int_8"},
+ "speed": {"$ref": "qmk.definitions.v1#/unsigned_int_8"}
+ }
+ },
"driver": {
"type": "string",
"enum": ["apa102", "custom", "ws2812"]
@@ -593,10 +684,6 @@
}
}
},
- "matrix_grid": {
- "type": "array",
- "items": {"$ref": "qmk.definitions.v1#/mcu_pin"}
- },
"matrix_pins": {
"type": "object",
"additionalProperties": false,
@@ -616,6 +703,15 @@
}
}
},
+ "dip_switch": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "right": {
+ "$ref": "#/definitions/dip_switch_config"
+ }
+ }
+ },
"encoder": {
"type": "object",
"additionalProperties": false,
@@ -625,9 +721,17 @@
}
}
},
- "main": {
- "type": "string",
- "enum": ["eeprom", "left", "matrix_grid", "pin", "right"]
+ "handedness": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "pin": {"$ref": "qmk.definitions.v1#/mcu_pin"},
+ "matrix_grid": {
+ "$ref": "qmk.definitions.v1#/mcu_pin_array",
+ "minItems": 2,
+ "maxItems": 2
+ }
+ }
},
"soft_serial_pin": {"$ref": "qmk.definitions.v1#/mcu_pin"},
"soft_serial_speed": {
@@ -643,10 +747,32 @@
"type": "string",
"enum": ["custom", "i2c", "serial", "serial_usart"]
},
- "sync_matrix_state": {"type": "boolean"},
- "sync_modifiers": {"type": "boolean"},
+ "sync": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "activity": {"type": "boolean"},
+ "detected_os": {"type": "boolean"},
+ "haptic": {"type": "boolean"},
+ "layer_state": {"type": "boolean"},
+ "indicators": {"type": "boolean"},
+ "matrix_state": {"type": "boolean"},
+ "modifiers": {"type": "boolean"},
+ "oled": {"type": "boolean"},
+ "st7565": {"type": "boolean"},
+ "wpm": {"type": "boolean"}
+ }
+ }
"watchdog": {"type": "boolean"},
- "watchdog_timeout": {"$ref": "qmk.definitions.v1#/unsigned_int"}
+ "watchdog_timeout": {"$ref": "qmk.definitions.v1#/unsigned_int"},
+ "sync_matrix_state": {
+ "type": "boolean",
+ "$comment": "Deprecated: use sync.matrix_state instead"
+ },
+ "sync_modifiers": {
+ "type": "boolean",
+ "$comment": "Deprecated: use sync.modifiers instead"
+ }
}
},
"usb_detect": {
@@ -657,6 +783,16 @@
"polling_interval": {"$ref": "qmk.definitions.v1#/unsigned_int"},
"timeout": {"$ref": "qmk.definitions.v1#/unsigned_int"}
}
+ },
+ "main": {
+ "type": "string",
+ "enum": ["eeprom", "left", "matrix_grid", "pin", "right"],
+ "$comment": "Deprecated: use config.h options for now"
+ },
+ "matrix_grid": {
+ "type": "array",
+ "items": {"$ref": "qmk.definitions.v1#/mcu_pin"},
+ "$comment": "Deprecated: use split.handedness.matrix_grid instead"
}
}
},
@@ -714,7 +850,15 @@
"properties": {
"keys_per_scan": {"$ref": "qmk.definitions.v1#/unsigned_int_8"},
"tap_keycode_delay": {"$ref": "qmk.definitions.v1#/unsigned_int"},
- "tap_capslock_delay": {"$ref": "qmk.definitions.v1#/unsigned_int"}
+ "tap_capslock_delay": {"$ref": "qmk.definitions.v1#/unsigned_int"},
+ "locking": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "enabled": {"type": "boolean"},
+ "resync": {"type": "boolean"}
+ }
+ }
}
},
"qmk_lufa_bootloader": {
diff --git a/data/schemas/user_repo_v0.jsonschema b/data/schemas/user_repo_v0.jsonschema
new file mode 100644
index 000000000000..b18ac504284b
--- /dev/null
+++ b/data/schemas/user_repo_v0.jsonschema
@@ -0,0 +1,14 @@
+{
+ "$schema": "https://json-schema.org/draft/2020-12/schema#",
+ "$id": "qmk.user_repo.v0",
+ "title": "User Repository Information",
+ "type": "object",
+ "required": [
+ "userspace_version"
+ ],
+ "properties": {
+ "userspace_version": {
+ "type": "string",
+ },
+ }
+}
diff --git a/data/schemas/user_repo_v1.jsonschema b/data/schemas/user_repo_v1.jsonschema
new file mode 100644
index 000000000000..6cdf758685c5
--- /dev/null
+++ b/data/schemas/user_repo_v1.jsonschema
@@ -0,0 +1,22 @@
+{
+ "$schema": "https://json-schema.org/draft/2020-12/schema#",
+ "$id": "qmk.user_repo.v1",
+ "title": "User Repository Information",
+ "type": "object",
+ "required": [
+ "userspace_version",
+ "build_targets"
+ ],
+ "properties": {
+ "userspace_version": {
+ "type": "string",
+ "enum": ["1.0"]
+ },
+ "build_targets": {
+ "type": "array",
+ "items": {
+ "$ref": "qmk.definitions.v1#/build_target"
+ }
+ }
+ }
+}
diff --git a/docs/ChangeLog/20231126.md b/docs/ChangeLog/20231126.md
new file mode 100644
index 000000000000..61cff520c805
--- /dev/null
+++ b/docs/ChangeLog/20231126.md
@@ -0,0 +1,336 @@
+# QMK Breaking Changes - 2023 November 26 Changelog
+
+## Notable Features :id=notable-features
+
+As per last few breaking changes cycles, there have been _a lot_ of behind-the-scenes changes, mainly around consolidation of config into `info.json` files, cleanup of `info.json` files, cleaning up driver naming, as well as addressing technical debt.
+
+As a followup to last cycle's [notable changes](20230827.md#notable-changes), as `qmk/qmk_firmware` is no longer accepting PRs for keymaps we're pleased to announce that storing and building keymaps externally from the normal QMK Firmware repository is now possible. This is done through the new [External Userspace](newbs_external_userspace.md) feature, more details below!
+
+## Changes Requiring User Action :id=changes-requiring-user-action
+
+### Updated Keyboard Codebases :id=updated-keyboard-codebases
+
+| Old Keyboard Name | New Keyboard Name |
+|---------------------------------------|-------------------------------|
+| adm42 | adm42/rev4 |
+| dp3000 | dp3000/rev1 |
+| handwired/dactyl_manuform/dmote/62key | handwired/dmote |
+| keychron/q0/rev_0130 | keychron/q0/base |
+| keychron/q0/rev_0131 | keychron/q0/plus |
+| keychron/q1/ansi | keychron/q1v1/ansi |
+| keychron/q1/ansi_encoder | keychron/q1v1/ansi_encoder |
+| keychron/q1/iso | keychron/q1v1/iso |
+| keychron/q1/iso_encoder | keychron/q1v1/iso_encoder |
+| keychron/q4/ansi_v1 | keychron/q4/ansi |
+| kprepublic/bm40hsrgb | kprepublic/bm40hsrgb/rev1 |
+| matchstickworks/southpad | matchstickworks/southpad/rev2 |
+| soda/mango | magic_force/mf17 |
+| soda/pocket | magic_force/mf34 |
+| studiokestra/line_tkl | studiokestra/line_friends_tkl |
+| ymdk/melody96 | ymdk/melody96/soldered |
+
+## Notable core changes :id=notable-core
+
+### External Userspace ([#22222](https://github.com/qmk/qmk_firmware/pull/22222))
+
+As mentioned above, the new External Userspace feature allows for keymaps to be stored and built externally from the main QMK Firmware repository. This allows for keymaps to be stored separately -- usually in their own repository -- and for users to be able to maintain and build their keymaps without needing to fork the main QMK Firmware repository.
+
+See the [External Userspace documentation](newbs_external_userspace.md) for more details.
+
+A significant portion of user keymaps have already been removed from `qmk/qmk_firmware` and more will follow in coming weeks. You can still recover your keymap from the tag [user-keymaps-still-present](https://github.com/qmk/qmk_firmware/tree/user-keymaps-still-present) if required -- a perfect time to migrate to the new External Userspace!
+
+!> This feature is still in beta, and we're looking for feedback on it. Please try it out and let us know what you think -- a new `#help-userspace` channel has been set up on Discord.
+
+### Improve and Cleanup Shutdown callbacks ([#21060](https://github.com/qmk/qmk_firmware/pull/20160)) :id=improve-and-cleanup-shutdown-callbacks
+
+Shutdown callbacks at the keyboard level were never present, preventing safe shutdown sequencing for peripherals such as OLEDs, RGB LEDs, and other devices. This PR adds a new `shutdown_kb` function, as well as amending `shutdown_user`, allowing for safe shutdown of peripherals at both keyboard and keymap level.
+
+See the [Keyboard Shutdown/Reboot Code](custom_quantum_functions.md#keyboard-shutdown-reboot-code) documentation for more details.
+
+### OLED Force Flush ([#20953](https://github.com/qmk/qmk_firmware/pull/20953)) :id=oled-force-flush
+
+Along with the new `shutdown_kb` function, a new API `oled_render_dirty(bool)` function has been added. This allows OLED contents to be written deterministically when supplied with `true` -- that is, the OLED will be updated immediately, rather than waiting for the next OLED update cycle. This allows for OLEDs to show things such as "BOOTLOADER MODE" and the like if resetting to bootloader from QMK.
+
+### Switch statement helpers for keycode ranges ([#20059](https://github.com/qmk/qmk_firmware/pull/20059)) :id=switch-statement-helpers-for-keycode-ranges
+
+Predefined ranges usable within switch statements have been added for groups of similar keycodes, where people who wish to handle entire blocks at once can do so. This allows keymaps to be immune to changes in keycode values, and also allows for more efficient code generation.
+
+The ranges are as follows:
+
+| Name | Mapping |
+|-------------------------------------|------------------------------------------------------------------------|
+| `INTERNAL_KEYCODE_RANGE` | `KC_NO ... KC_TRANSPARENT` |
+| `BASIC_KEYCODE_RANGE` | `KC_A ... KC_EXSEL` |
+| `SYSTEM_KEYCODE_RANGE` | `KC_SYSTEM_POWER ... KC_SYSTEM_WAKE` |
+| `CONSUMER_KEYCODE_RANGE` | `KC_AUDIO_MUTE ... KC_LAUNCHPAD` |
+| `MOUSE_KEYCODE_RANGE` | `KC_MS_UP ... KC_MS_ACCEL2` |
+| `MODIFIER_KEYCODE_RANGE` | `KC_LEFT_CTRL ... KC_RIGHT_GUI` |
+| `SWAP_HANDS_KEYCODE_RANGE` | `QK_SWAP_HANDS_TOGGLE ... QK_SWAP_HANDS_ONE_SHOT` |
+| `MAGIC_KEYCODE_RANGE` | `QK_MAGIC_SWAP_CONTROL_CAPS_LOCK ... QK_MAGIC_TOGGLE_ESCAPE_CAPS_LOCK` |
+| `MIDI_KEYCODE_RANGE` | `QK_MIDI_ON ... QK_MIDI_PITCH_BEND_UP` |
+| `SEQUENCER_KEYCODE_RANGE` | `QK_SEQUENCER_ON ... QK_SEQUENCER_STEPS_CLEAR` |
+| `JOYSTICK_KEYCODE_RANGE` | `QK_JOYSTICK_BUTTON_0 ... QK_JOYSTICK_BUTTON_31` |
+| `PROGRAMMABLE_BUTTON_KEYCODE_RANGE` | `QK_PROGRAMMABLE_BUTTON_1 ... QK_PROGRAMMABLE_BUTTON_32` |
+| `AUDIO_KEYCODE_RANGE` | `QK_AUDIO_ON ... QK_AUDIO_VOICE_PREVIOUS` |
+| `STENO_KEYCODE_RANGE` | `QK_STENO_BOLT ... QK_STENO_COMB_MAX` |
+| `MACRO_KEYCODE_RANGE` | `QK_MACRO_0 ... QK_MACRO_31` |
+| `BACKLIGHT_KEYCODE_RANGE` | `QK_BACKLIGHT_ON ... QK_BACKLIGHT_TOGGLE_BREATHING` |
+| `RGB_KEYCODE_RANGE` | `RGB_TOG ... RGB_MODE_TWINKLE` |
+| `QUANTUM_KEYCODE_RANGE` | `QK_BOOTLOADER ... QK_ALT_REPEAT_KEY` |
+| `KB_KEYCODE_RANGE` | `QK_KB_0 ... QK_KB_31` |
+| `USER_KEYCODE_RANGE` | `QK_USER_0 ... QK_USER_31` |
+
+Usage:
+
+```c
+ switch (keycode) {
+ case KC_A ... KC_EXSEL:
+ case KC_LEFT_CTRL ... KC_RIGHT_GUI:
+ /* do stuff with basic and modifier keycodes */
+```
+
+Becomes:
+
+```c
+ switch (keycode) {
+ case BASIC_KEYCODE_RANGE:
+ case MODIFIER_KEYCODE_RANGE:
+ /* do stuff with basic and modifier keycodes */
+```
+
+### Quantum Painter OLED support ([#19997](https://github.com/qmk/qmk_firmware/pull/19997)) :id=quantum-painter-oled-support
+
+Quantum Painter has picked up support for SH1106 displays -- commonly seen as 128x64 OLEDs. Support for both I2C and SPI displays is available.
+
+If you're already using OLED through `OLED_DRIVER_ENABLE = yes` or equivalent in `info.json` and wish to use Quantum Painter instead, you'll need to disable the old OLED system, instead enabling Quantum Painter as well as enabling the appropriate SH1106 driver. See the [Quantum Painter driver documentation](quantum_painter.md#quantum-painter-drivers) for more details. The old OLED driver is still available, and keymaps do not require migrating to Quantum Painter if you don't want to do so.
+
+### RGB/LED lighting driver naming and cleanup ([#21890](https://github.com/qmk/qmk_firmware/pull/21890), [#21891](https://github.com/qmk/qmk_firmware/pull/21891), [#21892](https://github.com/qmk/qmk_firmware/pull/21892), [#21903](https://github.com/qmk/qmk_firmware/pull/21903), [#21904](https://github.com/qmk/qmk_firmware/pull/21904), [#21905](https://github.com/qmk/qmk_firmware/pull/21905), [#21918](https://github.com/qmk/qmk_firmware/pull/21918), [#21929](https://github.com/qmk/qmk_firmware/pull/21929), [#21938](https://github.com/qmk/qmk_firmware/pull/21938), [#22004](https://github.com/qmk/qmk_firmware/pull/22004), [#22008](https://github.com/qmk/qmk_firmware/pull/22008), [#22009](https://github.com/qmk/qmk_firmware/pull/22009), [#22071](https://github.com/qmk/qmk_firmware/pull/22071), [#22090](https://github.com/qmk/qmk_firmware/pull/22090), [#22099](https://github.com/qmk/qmk_firmware/pull/22099), [#22126](https://github.com/qmk/qmk_firmware/pull/22126), [#22133](https://github.com/qmk/qmk_firmware/pull/22133), [#22163](https://github.com/qmk/qmk_firmware/pull/22163), [#22200](https://github.com/qmk/qmk_firmware/pull/22200), [#22308](https://github.com/qmk/qmk_firmware/pull/22308), [#22309](https://github.com/qmk/qmk_firmware/pull/22309), [#22311](https://github.com/qmk/qmk_firmware/pull/22311), [#22325](https://github.com/qmk/qmk_firmware/pull/22325), [#22365](https://github.com/qmk/qmk_firmware/pull/22365), [#22379](https://github.com/qmk/qmk_firmware/pull/22379), [#22380](https://github.com/qmk/qmk_firmware/pull/22380), [#22381](https://github.com/qmk/qmk_firmware/pull/22381), [#22383](https://github.com/qmk/qmk_firmware/pull/22383), [#22436](https://github.com/qmk/qmk_firmware/pull/22436))
+
+As you can probably tell by the list of PRs just above, there has been a lot of cleanup and consolidation this cycle when it comes to RGB/LED lighting drivers. The number of changes is too large to list here, but the general theme has been focusing on consistency of naming, both of drivers themselves and their respective implementation and configuration. Most changes only affect keyboard designers -- if you find that your in-development keyboard is no longer building due to naming of defines changing, your best bet is to refer to another board already in the repository which has had the changes applied.
+
+### Peripheral subsystem enabling ([#22253](https://github.com/qmk/qmk_firmware/pull/22253), [#22448](https://github.com/qmk/qmk_firmware/pull/22448), [#22106](https://github.com/qmk/qmk_firmware/pull/22106)) :id=peripheral-subsystem-enabling
+
+When enabling peripherals such as I2C, SPI, or Analog/ADC, some required manual inclusion of source files in order to provide driver support, and in some cases, when multiple drivers were using the same underlying peripheral, files were being added to the build multiple times.
+
+Most systems requiring other peripherals now mark their respective dependencies as "required", allowing the build system to check whether peripherals are necessary before including them in the build rather than having each location enable them manually.
+
+For a concrete example, users or keyboard designers who previously added `SRC += analog.c` in order to allow for analog readings via an ADC now should specify `ANALOG_DRIVER_REQUIRED = yes` instead. The full list of added options is as follows:
+
+| New option | Old Equivalent |
+|--------------------------------|------------------------------------------------------------|
+| `ANALOG_DRIVER_REQUIRED = yes` | `SRC += analog.c` |
+| `APA102_DRIVER_REQUIRED = yes` | `SRC += apa102.c` |
+| `I2C_DRIVER_REQUIRED = yes` | `SRC += i2c_master.c` or `QUANTUM_LIB_SRC += i2c_master.c` |
+| `SPI_DRIVER_REQUIRED = yes` | `SRC += spi_master.c` or `QUANTUM_LIB_SRC += spi_master.c` |
+| `UART_DRIVER_REQUIRED = yes` | `SRC += uart.c` |
+| `WS2812_DRIVER_REQUIRED = yes` | `SRC += ws2812.c` |
+
+### NKRO on V-USB boards ([#22398](https://github.com/qmk/qmk_firmware/pull/22398)) :id=vusb-nkro
+
+NKRO is now available for ATmega32A and 328P-based keyboards (including PS2AVRGB/Bootmapper boards), thanks to some internal refactoring and cleanup. To enable it, the process is the same as always - add `NKRO_ENABLE = yes` to your `rules.mk`, then assign and press the `NK_TOGG` keycode to switch modes.
+
+## Full changelist :id=full-changelist
+
+Core:
+* Compilation warning if both `keymap.json` and `keymap.c` exist ([#19939](https://github.com/qmk/qmk_firmware/pull/19939))
+* [QP] Add support for OLED, variable framebuffer bpp ([#19997](https://github.com/qmk/qmk_firmware/pull/19997))
+* Generate switch statement helpers for keycode ranges ([#20059](https://github.com/qmk/qmk_firmware/pull/20059))
+* Chibios SPI driver: allow some SPI pins to be left unassigned ([#20315](https://github.com/qmk/qmk_firmware/pull/20315))
+* Take care of scroll divisor remainders for PS/2 drag scroll ([#20732](https://github.com/qmk/qmk_firmware/pull/20732))
+* Add `RGBLIGHT_DEFAULT_ON` macro configuration option ([#20857](https://github.com/qmk/qmk_firmware/pull/20857))
+* Allow force flush of oled display. ([#20953](https://github.com/qmk/qmk_firmware/pull/20953))
+* Improve and Cleanup Shutdown callbacks ([#21060](https://github.com/qmk/qmk_firmware/pull/21060))
+* [Enhancement] QP Getters ([#21171](https://github.com/qmk/qmk_firmware/pull/21171))
+* Russian typewriter keymap file for popular legacy layout. ([#21174](https://github.com/qmk/qmk_firmware/pull/21174))
+* Improve directional transition of overlapping mouse keys ([#21494](https://github.com/qmk/qmk_firmware/pull/21494))
+* Add full solenoid support on split keyboards ([#21583](https://github.com/qmk/qmk_firmware/pull/21583))
+* Reduce popping during audio initialization using the additive DAC ([#21642](https://github.com/qmk/qmk_firmware/pull/21642))
+* [Maintenance] USB HID control packet as struct ([#21688](https://github.com/qmk/qmk_firmware/pull/21688))
+* Bump mouse endpoint packet size to 16 bytes ([#21711](https://github.com/qmk/qmk_firmware/pull/21711))
+* Allow customizing PWM frequency ([#21717](https://github.com/qmk/qmk_firmware/pull/21717))
+* Add simpler method for relocating functions to RAM. ([#21804](https://github.com/qmk/qmk_firmware/pull/21804))
+* Clean up RGB LED type ([#21859](https://github.com/qmk/qmk_firmware/pull/21859))
+* is31fl3741: Allow changing config register ([#21861](https://github.com/qmk/qmk_firmware/pull/21861))
+* Add _DEFAULT_ON lighting configuration options ([#21865](https://github.com/qmk/qmk_firmware/pull/21865))
+* Modify split config is_keyboard_master/left checks. ([#21875](https://github.com/qmk/qmk_firmware/pull/21875))
+* Remove old `IS_LED_ON/OFF()` macros ([#21878](https://github.com/qmk/qmk_firmware/pull/21878))
+* ckled2001: driver naming cleanups ([#21890](https://github.com/qmk/qmk_firmware/pull/21890))
+* aw20216: driver naming cleanups ([#21891](https://github.com/qmk/qmk_firmware/pull/21891))
+* is31fl3218: driver naming cleanups ([#21892](https://github.com/qmk/qmk_firmware/pull/21892))
+* is31fl3736: driver naming cleanups ([#21903](https://github.com/qmk/qmk_firmware/pull/21903))
+* is31fl3737: driver naming cleanups ([#21904](https://github.com/qmk/qmk_firmware/pull/21904))
+* is31fl3733: driver naming cleanups ([#21905](https://github.com/qmk/qmk_firmware/pull/21905))
+* Enable RP2040 support for apa102 RGB LED driver ([#21908](https://github.com/qmk/qmk_firmware/pull/21908))
+* is31fl3731: driver naming cleanups ([#21918](https://github.com/qmk/qmk_firmware/pull/21918))
+* is31fl3741: driver naming cleanups ([#21929](https://github.com/qmk/qmk_firmware/pull/21929))
+* refactor: move default RGB/LED matrix #defines ([#21938](https://github.com/qmk/qmk_firmware/pull/21938))
+* Added flower blooming on RGB Matrix effect ([#21948](https://github.com/qmk/qmk_firmware/pull/21948))
+* Remove 'Firmware size check does not yet support' message ([#21977](https://github.com/qmk/qmk_firmware/pull/21977))
+* chibios: mark boot2 bootlader data readonly ([#21986](https://github.com/qmk/qmk_firmware/pull/21986))
+* Complete RGB Matrix support for IS31FL3218 ([#22004](https://github.com/qmk/qmk_firmware/pull/22004))
+* Default wear leveling logical size to half backing ([#22006](https://github.com/qmk/qmk_firmware/pull/22006))
+* chibios: disable RWX segment warning on newer GNU lds ([#22007](https://github.com/qmk/qmk_firmware/pull/22007))
+* Add and use I2C address defines for ISSI LED drivers ([#22008](https://github.com/qmk/qmk_firmware/pull/22008))
+* Add and use PWM frequency defines for ISSI LED drivers ([#22009](https://github.com/qmk/qmk_firmware/pull/22009))
+* directly use object files when linking ELF ([#22025](https://github.com/qmk/qmk_firmware/pull/22025))
+* Lvgl rate control ([#22049](https://github.com/qmk/qmk_firmware/pull/22049))
+* Rename CKLED2001 driver to SNLED27351 ([#22071](https://github.com/qmk/qmk_firmware/pull/22071))
+* Move `PACKED` define to util.h ([#22074](https://github.com/qmk/qmk_firmware/pull/22074))
+* Simplify more feature driver defines ([#22090](https://github.com/qmk/qmk_firmware/pull/22090))
+* Update ISSI LED types ([#22099](https://github.com/qmk/qmk_firmware/pull/22099))
+* Move velocikey to within rgblight ([#22123](https://github.com/qmk/qmk_firmware/pull/22123))
+* is31fl3218: Add LED Matrix support ([#22126](https://github.com/qmk/qmk_firmware/pull/22126))
+* Set default board files for uf2boot bootloader ([#22129](https://github.com/qmk/qmk_firmware/pull/22129))
+* is31fl3736: extract single-color API ([#22133](https://github.com/qmk/qmk_firmware/pull/22133))
+* is31fl3737/3741: add LED Matrix support ([#22163](https://github.com/qmk/qmk_firmware/pull/22163))
+* Rename `DRIVER_ADDR_n` defines ([#22200](https://github.com/qmk/qmk_firmware/pull/22200))
+* New RGB Animations - 4 "Starlight" Animation Variations ([#22212](https://github.com/qmk/qmk_firmware/pull/22212))
+* QMK Userspace ([#22222](https://github.com/qmk/qmk_firmware/pull/22222))
+* Dedupe I2C, SPI, UART driver inclusions ([#22253](https://github.com/qmk/qmk_firmware/pull/22253))
+* Add "AC Next Keyboard Layout Select" consumer usage entry (macOS Globe key) ([#22256](https://github.com/qmk/qmk_firmware/pull/22256))
+* Separate 6KRO and NKRO report structs ([#22267](https://github.com/qmk/qmk_firmware/pull/22267))
+* Azoteq IQS5xx support ([#22280](https://github.com/qmk/qmk_firmware/pull/22280))
+* Add `_flush()` functions to LED drivers ([#22308](https://github.com/qmk/qmk_firmware/pull/22308))
+* Add `_LED_COUNT` defines to LED drivers ([#22309](https://github.com/qmk/qmk_firmware/pull/22309))
+* Infer LED DRIVER_COUNT from configured addresses ([#22311](https://github.com/qmk/qmk_firmware/pull/22311))
+* Added gamma values for ST7735 displays ([#22313](https://github.com/qmk/qmk_firmware/pull/22313))
+* Consolidate some EEPROM Driver configuration ([#22321](https://github.com/qmk/qmk_firmware/pull/22321))
+* V-USB: Add generic `send_report()` function ([#22323](https://github.com/qmk/qmk_firmware/pull/22323))
+* V-USB: Implement `GET_PROTOCOL` and `SET_PROTOCOL` handling ([#22324](https://github.com/qmk/qmk_firmware/pull/22324))
+* RGB/LED matrix use limits size optimisation ([#22325](https://github.com/qmk/qmk_firmware/pull/22325))
+* Relocate LED driver init code ([#22365](https://github.com/qmk/qmk_firmware/pull/22365))
+* WT RGB cleanups ([#22379](https://github.com/qmk/qmk_firmware/pull/22379))
+* LED drivers: use `PACKED` define from util.h ([#22380](https://github.com/qmk/qmk_firmware/pull/22380))
+* LED drivers: clean up `SWx`/`CSy` pullup/down resistor config ([#22381](https://github.com/qmk/qmk_firmware/pull/22381))
+* LED drivers: add defines for PWM and LED control register counts ([#22383](https://github.com/qmk/qmk_firmware/pull/22383))
+* V-USB: implement NKRO ([#22398](https://github.com/qmk/qmk_firmware/pull/22398))
+* Allow generic_features to handle subdirectories ([#22400](https://github.com/qmk/qmk_firmware/pull/22400))
+* Migrate some common features to generic ([#22403](https://github.com/qmk/qmk_firmware/pull/22403))
+* Remove requirement for `keymap_steno.h` include in keymaps ([#22423](https://github.com/qmk/qmk_firmware/pull/22423))
+* LED drivers: register naming cleanups ([#22436](https://github.com/qmk/qmk_firmware/pull/22436))
+* Slight refactor of joystick axis type into typedef ([#22445](https://github.com/qmk/qmk_firmware/pull/22445))
+* Generalise analog SRC inclusion ([#22448](https://github.com/qmk/qmk_firmware/pull/22448))
+* Revert "chibios: disable RWX segment warning on newer GNU lds" ([#22469](https://github.com/qmk/qmk_firmware/pull/22469))
+* chibios: disable RWX segment warning on newer GNU lds ([#22471](https://github.com/qmk/qmk_firmware/pull/22471))
+
+CLI:
+* Implement data driven lighting defaults ([#21825](https://github.com/qmk/qmk_firmware/pull/21825))
+* Generate keymap.json config options more forcefully ([#21960](https://github.com/qmk/qmk_firmware/pull/21960))
+* Implement data driven dip switches ([#22017](https://github.com/qmk/qmk_firmware/pull/22017))
+* Improve argument handling of c2json ([#22170](https://github.com/qmk/qmk_firmware/pull/22170))
+* Support additional split sync items for info.json ([#22193](https://github.com/qmk/qmk_firmware/pull/22193))
+* CLI refactoring for common build target APIs ([#22221](https://github.com/qmk/qmk_firmware/pull/22221))
+* Add dd mapping for hardware based split handedness ([#22369](https://github.com/qmk/qmk_firmware/pull/22369))
+* CLI parallel search updates ([#22525](https://github.com/qmk/qmk_firmware/pull/22525))
+* Remove duplicates from search results ([#22528](https://github.com/qmk/qmk_firmware/pull/22528))
+
+Keyboards:
+* Add KPRepublic/BM40hsrgb rev2 ([#16689](https://github.com/qmk/qmk_firmware/pull/16689))
+* update to data driven - superseeds part of https://github.com/qmk/qmk… ([#20220](https://github.com/qmk/qmk_firmware/pull/20220))
+* Modernize `dactyl_manuform/dmote` keyboard ([#20427](https://github.com/qmk/qmk_firmware/pull/20427))
+* add Skyloong/GK61_V1 keyboard ([#21364](https://github.com/qmk/qmk_firmware/pull/21364))
+* [Refactor] Make changes to some pins ([#21380](https://github.com/qmk/qmk_firmware/pull/21380))
+* Add missing fullsize extended default layouts ([#21402](https://github.com/qmk/qmk_firmware/pull/21402))
+* Add Skyloong/Gk61 PRO keyboard ([#21450](https://github.com/qmk/qmk_firmware/pull/21450))
+* Added skyloong/Qk21 v1 Number Pad ([#21467](https://github.com/qmk/qmk_firmware/pull/21467))
+* matchstickworks/southpad - Move files to rev1, add rev2 ([#21574](https://github.com/qmk/qmk_firmware/pull/21574))
+* partially modernize `dactyl_minidox` ([#21576](https://github.com/qmk/qmk_firmware/pull/21576))
+* tominabox1/le_chiffre oled rework ([#21611](https://github.com/qmk/qmk_firmware/pull/21611))
+* Add Skyloong/Gk61_pro_48 keyboard ([#21654](https://github.com/qmk/qmk_firmware/pull/21654))
+* Adding support for new Waffling60 revision ([#21664](https://github.com/qmk/qmk_firmware/pull/21664))
+* Leeloo revision 2 updates. ([#21671](https://github.com/qmk/qmk_firmware/pull/21671))
+* rename og60 to tofu60 ([#21684](https://github.com/qmk/qmk_firmware/pull/21684))
+* add tofujr v2 keyboard ([#21740](https://github.com/qmk/qmk_firmware/pull/21740))
+* Rotary numpad ([#21744](https://github.com/qmk/qmk_firmware/pull/21744))
+* Update era/divine ([#21767](https://github.com/qmk/qmk_firmware/pull/21767))
+* 1UpKeyboards Pi60 Layout Additions ([#21874](https://github.com/qmk/qmk_firmware/pull/21874))
+* BIOI keyboards: use core UART driver ([#21879](https://github.com/qmk/qmk_firmware/pull/21879))
+* Resolve some "Layout should not contain name of keyboard" lint warnings ([#21898](https://github.com/qmk/qmk_firmware/pull/21898))
+* fc660c/fc980c: clean up actuation point adjustment code ([#21964](https://github.com/qmk/qmk_firmware/pull/21964))
+* Chromatonemini info json revised to support qmk 0.22.2 ([#21966](https://github.com/qmk/qmk_firmware/pull/21966))
+* Migrate spi_flash WEAR_LEVELING_DRIVER to info.json ([#21978](https://github.com/qmk/qmk_firmware/pull/21978))
+* Remove duplication of RP2040 EEPROM defaults ([#21979](https://github.com/qmk/qmk_firmware/pull/21979))
+* Remove duplication of STM32L432 EEPROM defaults ([#21981](https://github.com/qmk/qmk_firmware/pull/21981))
+* Migrate spi EEPROM_DRIVER to info.json ([#21991](https://github.com/qmk/qmk_firmware/pull/21991))
+* Update Keychron Q1v1 ([#21993](https://github.com/qmk/qmk_firmware/pull/21993))
+* Update Keychron Q2 ([#21994](https://github.com/qmk/qmk_firmware/pull/21994))
+* Update Keychron Q3 ([#21995](https://github.com/qmk/qmk_firmware/pull/21995))
+* Update Keychron Q4 ([#21996](https://github.com/qmk/qmk_firmware/pull/21996))
+* Migrate WEAR_LEVELING_*_SIZE to info.json ([#22010](https://github.com/qmk/qmk_firmware/pull/22010))
+* Remove duplication of EEPROM defaults ([#22011](https://github.com/qmk/qmk_firmware/pull/22011))
+* Migrate i2c EEPROM_DRIVER to info.json ([#22013](https://github.com/qmk/qmk_firmware/pull/22013))
+* Remove config.h which only set DYNAMIC_KEYMAP_LAYER_COUNT ([#22034](https://github.com/qmk/qmk_firmware/pull/22034))
+* Add community layout support to tofu60 ([#22041](https://github.com/qmk/qmk_firmware/pull/22041))
+* Update Keychron Q0 ([#22068](https://github.com/qmk/qmk_firmware/pull/22068))
+* Remove custom ISSI lighting code ([#22073](https://github.com/qmk/qmk_firmware/pull/22073))
+* add dp3000 rev2 featuring rgblight ([#22084](https://github.com/qmk/qmk_firmware/pull/22084))
+* Remove ALLOW_WARNINGS and PICO_INTRINSICS_ENABLED ([#22085](https://github.com/qmk/qmk_firmware/pull/22085))
+* Partially migrate `DYNAMIC_KEYMAP_LAYER_COUNT` ([#22087](https://github.com/qmk/qmk_firmware/pull/22087))
+* feat(eyeohdesigns/babyv): rgb matrix ([#22105](https://github.com/qmk/qmk_firmware/pull/22105))
+* input_club/infinity60: remove custom 3731 code, convert to LED Matrix ([#22117](https://github.com/qmk/qmk_firmware/pull/22117))
+* YMDK Melody96 Break-Up ([#22121](https://github.com/qmk/qmk_firmware/pull/22121))
+* Remove duplicated rgblight implementation from mxss ([#22122](https://github.com/qmk/qmk_firmware/pull/22122))
+* KC60 Layout Standardization and Cleanup ([#22125](https://github.com/qmk/qmk_firmware/pull/22125))
+* Convert adm42 to data driven ([#22144](https://github.com/qmk/qmk_firmware/pull/22144))
+* Update Drop keyboards for develop ([#22145](https://github.com/qmk/qmk_firmware/pull/22145))
+* move soda/mango and soda/pocket to magic_force/mf17 and magic_force/mf34 ([#22151](https://github.com/qmk/qmk_firmware/pull/22151))
+* GMMK2 65% ISO Community Layout Support ([#22152](https://github.com/qmk/qmk_firmware/pull/22152))
+* Leeloo v2.1 revision 3 updates. ([#22236](https://github.com/qmk/qmk_firmware/pull/22236))
+* jian/rev1: convert to DIP Switch ([#22248](https://github.com/qmk/qmk_firmware/pull/22248))
+* Enable linking of encoders to switch within layout macros ([#22264](https://github.com/qmk/qmk_firmware/pull/22264))
+* Migrate recently introduced sync items ([#22305](https://github.com/qmk/qmk_firmware/pull/22305))
+* Rename LINE FRIENDS TKL keyboard ([#22310](https://github.com/qmk/qmk_firmware/pull/22310))
+* feat(mechwild/clunker): new layouts ([#22342](https://github.com/qmk/qmk_firmware/pull/22342))
+* Remove use of broken split.main ([#22363](https://github.com/qmk/qmk_firmware/pull/22363))
+* whitefox: remove pointless file ([#22366](https://github.com/qmk/qmk_firmware/pull/22366))
+* Migrate some EEPROM config to info.json ([#22434](https://github.com/qmk/qmk_firmware/pull/22434))
+* Remove unnecessary driver counts ([#22435](https://github.com/qmk/qmk_firmware/pull/22435))
+* Migrate some dip switch config to info.json ([#22437](https://github.com/qmk/qmk_firmware/pull/22437))
+* Remove userspace keymaps ([#22544](https://github.com/qmk/qmk_firmware/pull/22544))
+* Stub out community layout directory structure ([#22545](https://github.com/qmk/qmk_firmware/pull/22545))
+* Remove symbolic linked userspace folder ([#22548](https://github.com/qmk/qmk_firmware/pull/22548))
+
+Keyboard fixes:
+* fix unxmaal for 60_iso ([#21975](https://github.com/qmk/qmk_firmware/pull/21975))
+* Fix input_club/k_type when RGB Matrix disabled ([#22021](https://github.com/qmk/qmk_firmware/pull/22021))
+* Fixup snes_macropad on develop ([#22444](https://github.com/qmk/qmk_firmware/pull/22444))
+* Fix missed shutdown callbacks ([#22549](https://github.com/qmk/qmk_firmware/pull/22549))
+
+Others:
+* Implement data driven wear leveling ([#21906](https://github.com/qmk/qmk_firmware/pull/21906))
+* More data driven RGB/LED Matrix config ([#21939](https://github.com/qmk/qmk_firmware/pull/21939))
+* Update WS2812 docs and add APA102 docs ([#22106](https://github.com/qmk/qmk_firmware/pull/22106))
+* Add DD mappings for locking switch ([#22242](https://github.com/qmk/qmk_firmware/pull/22242))
+
+Bugs:
+* Improve test invocation, fix Retro Shift bugs, and add Auto+Retro Shift test cases ([#15889](https://github.com/qmk/qmk_firmware/pull/15889))
+* [Bugfix] `qp_ellipse` overflow ([#19005](https://github.com/qmk/qmk_firmware/pull/19005))
+* Cater for ECC failures in EFL wear-leveling. ([#19749](https://github.com/qmk/qmk_firmware/pull/19749))
+* Fix OSM on a OSL activated layer ([#20410](https://github.com/qmk/qmk_firmware/pull/20410))
+* Fixed WB32 MCU remote wakeup issue ([#20863](https://github.com/qmk/qmk_firmware/pull/20863))
+* Optimize the additive DAC code, fixing performance-related hangs ([#21662](https://github.com/qmk/qmk_firmware/pull/21662))
+* [Enhancement] Improvements for debounce test coverage + bug fixes for sym_defer_g and sym_eager_pr ([#21667](https://github.com/qmk/qmk_firmware/pull/21667))
+* fix: make clicky delay silent ([#21866](https://github.com/qmk/qmk_firmware/pull/21866))
+* Add `mousekey.h` include to `quantum.h` ([#21897](https://github.com/qmk/qmk_firmware/pull/21897))
+* Fix default layer value in eeconfig_init ([#21909](https://github.com/qmk/qmk_firmware/pull/21909))
+* Add RTC IRQ Priority to RP2040 board files ([#21926](https://github.com/qmk/qmk_firmware/pull/21926))
+* Update AW20216S LED type ([#22072](https://github.com/qmk/qmk_firmware/pull/22072))
+* LED/RGB Matrix: prefix driver defines ([#22088](https://github.com/qmk/qmk_firmware/pull/22088))
+* RGBLight/Backlight: add prefixed driver defines ([#22089](https://github.com/qmk/qmk_firmware/pull/22089))
+* Fix lower cpi bound on PMW33XX ([#22108](https://github.com/qmk/qmk_firmware/pull/22108))
+* Fix parsing/validation for 21939 ([#22148](https://github.com/qmk/qmk_firmware/pull/22148))
+* is31fl3733: complete LED Matrix support ([#22149](https://github.com/qmk/qmk_firmware/pull/22149))
+* Fix memory leak in realloc failure handling ([#22188](https://github.com/qmk/qmk_firmware/pull/22188))
+* avrdude: Version 7.2 changes the text output ([#22235](https://github.com/qmk/qmk_firmware/pull/22235))
+* Resolve invalid keyboard alias targets ([#22239](https://github.com/qmk/qmk_firmware/pull/22239))
+* Prep work for NKRO report separation ([#22268](https://github.com/qmk/qmk_firmware/pull/22268))
+* ChibiOS pin defs: use only vendor if present ([#22297](https://github.com/qmk/qmk_firmware/pull/22297))
+* Fix invalid LED driver config ([#22312](https://github.com/qmk/qmk_firmware/pull/22312))
+* Fix compilation error when led/rgb process limit is zero. ([#22328](https://github.com/qmk/qmk_firmware/pull/22328))
+* V-USB: Fix `GET_IDLE/SET_IDLE` ([#22332](https://github.com/qmk/qmk_firmware/pull/22332))
+* QP getters correction ([#22357](https://github.com/qmk/qmk_firmware/pull/22357))
+* Fix 'to_c' for config.h mappings ([#22364](https://github.com/qmk/qmk_firmware/pull/22364))
+* snled27351: fix missing `i2c_init()` ([#22446](https://github.com/qmk/qmk_firmware/pull/22446))
+* Move BACKLIGHT_PWM_PERIOD to correct docs section ([#22480](https://github.com/qmk/qmk_firmware/pull/22480))
+* `qmk find`: Fix failure with multiple filters ([#22497](https://github.com/qmk/qmk_firmware/pull/22497))
+* Fix `qmk find` failure due to circular imports ([#22523](https://github.com/qmk/qmk_firmware/pull/22523))
diff --git a/docs/_summary.md b/docs/_summary.md
index 26a543aee42c..bae93da5b6c2 100644
--- a/docs/_summary.md
+++ b/docs/_summary.md
@@ -4,7 +4,7 @@
* [Building Your First Firmware](newbs_building_firmware.md)
* [Flashing Firmware](newbs_flashing.md)
* [Getting Help/Support](support.md)
- * [Building With GitHub Userspace](newbs_building_firmware_workflow.md)
+ * [External Userspace](newbs_external_userspace.md)
* [Other Resources](newbs_learn_more_resources.md)
* [Syllabus](syllabus.md)
@@ -126,7 +126,6 @@
* [PS/2 Mouse](feature_ps2_mouse.md)
* [Split Keyboard](feature_split_keyboard.md)
* [Stenography](feature_stenography.md)
- * [Velocikey](feature_velocikey.md)
* Keyboard Building
* [Easy Maker for One Offs](easy_maker.md)
@@ -139,7 +138,7 @@
* Breaking Changes
* [Overview](breaking_changes.md)
* [My Pull Request Was Flagged](breaking_changes_instructions.md)
- * [Most Recent ChangeLog](ChangeLog/20230827.md "QMK v0.22.0 - 2023 Aug 27")
+ * [Most Recent ChangeLog](ChangeLog/20231126.md "QMK v0.23.0 - 2023 Nov 26")
* [Past Breaking Changes](breaking_changes_history.md)
* C Development
@@ -148,6 +147,7 @@
* [Compatible Microcontrollers](compatible_microcontrollers.md)
* [Drivers](hardware_drivers.md)
* [ADC Driver](adc_driver.md)
+ * [APA102 Driver](apa102_driver.md)
* [Audio Driver](audio_driver.md)
* [I2C Driver](i2c_driver.md)
* [SPI Driver](spi_driver.md)
diff --git a/docs/adc_driver.md b/docs/adc_driver.md
index 494d90c94fa8..dd928e1e7f0a 100644
--- a/docs/adc_driver.md
+++ b/docs/adc_driver.md
@@ -9,7 +9,7 @@ This driver currently supports both AVR and a limited selection of ARM devices.
To use this driver, add the following to your `rules.mk`:
```make
-SRC += analog.c
+ANALOG_DRIVER_REQUIRED = yes
```
Then place this include at the top of your code:
diff --git a/docs/apa102_driver.md b/docs/apa102_driver.md
new file mode 100644
index 000000000000..1da2de6ca357
--- /dev/null
+++ b/docs/apa102_driver.md
@@ -0,0 +1,49 @@
+# APA102 Driver :id=apa102-driver
+
+This driver provides support for APA102 addressable RGB LEDs. They are similar to the [WS2812](ws2812_driver.md) LEDs, but have increased data and refresh rates.
+
+## Usage :id=usage
+
+In most cases, the APA102 driver code is automatically included if you are using either the [RGBLight](feature_rgblight.md) or [RGB Matrix](feature_rgb_matrix.md) feature with the `apa102` driver set, and you would use those APIs instead.
+
+However, if you need to use the driver standalone, add the following to your `rules.mk`:
+
+```make
+APA102_DRIVER_REQUIRED = yes
+```
+
+You can then call the APA102 API by including `apa102.h` in your code.
+
+## Basic Configuration :id=basic-configuration
+
+Add the following to your `config.h`:
+
+|Define |Default |Description |
+|---------------------------|-------------|------------------------------------------------------------------|
+|`APA102_DI_PIN` |*Not defined*|The GPIO pin connected to the DI pin of the first LED in the chain|
+|`APA102_CI_PIN` |*Not defined*|The GPIO pin connected to the CI pin of the first LED in the chain|
+|`APA102_DEFAULT_BRIGHTNESS`|`31` |The default global brightness level of the LEDs, from 0 to 31 |
+
+## API :id=api
+
+### `void apa102_setleds(rgb_led_t *start_led, uint16_t num_leds)`
+
+Send RGB data to the APA102 LED chain.
+
+#### Arguments :id=api-apa102-setleds-arguments
+
+ - `rgb_led_t *start_led`
+ A pointer to the LED array.
+ - `uint16_t num_leds`
+ The length of the LED array.
+
+---
+
+### `void apa102_set_brightness(uint8_t brightness)`
+
+Set the global brightness.
+
+#### Arguments :id=api-apa102-set-brightness-arguments
+
+ - `uint8_t brightness`
+ The brightness level to set, from 0 to 31.
diff --git a/docs/breaking_changes.md b/docs/breaking_changes.md
index fdf6ccef9c79..70a9044c8c0e 100644
--- a/docs/breaking_changes.md
+++ b/docs/breaking_changes.md
@@ -10,9 +10,9 @@ Practically, this means QMK merges the `develop` branch into the `master` branch
## What has been included in past Breaking Changes?
+* [2023 Nov 26](ChangeLog/20231126.md)
* [2023 Aug 27](ChangeLog/20230827.md)
* [2023 May 28](ChangeLog/20230528.md)
-* [2023 Feb 26](ChangeLog/20230226.md)
* [Older Breaking Changes](breaking_changes_history.md)
## When is the next Breaking Change?
@@ -21,14 +21,14 @@ The next Breaking Change is scheduled for November 26, 2023.
### Important Dates
-* 2023 Aug 27 - `develop` is tagged with a new release version. Each push to `master` is subsequently merged to `develop` by GitHub actions.
-* 2023 Oct 29 - `develop` closed to new PRs.
-* 2023 Oct 29 - Call for testers.
-* 2023 Nov 5 - Last day for merges -- after this point `develop` is locked for testing and accepts only bugfixes
-* 2023 Nov 19 - `develop` is locked, only critical bugfix PRs merged.
-* 2023 Nov 23 - `master` is locked, no PRs merged.
-* 2023 Nov 26 - Merge `develop` to `master`.
-* 2023 Nov 26 - `master` is unlocked. PRs can be merged again.
+* 2023 Nov 26 - `develop` is tagged with a new release version. Each push to `master` is subsequently merged to `develop` by GitHub actions.
+* 2024 Jan 28 - `develop` closed to new PRs.
+* 2024 Jan 28 - Call for testers.
+* 2024 Feb 4 - Last day for merges -- after this point `develop` is locked for testing and accepts only bugfixes
+* 2024 Feb 18 - `develop` is locked, only critical bugfix PRs merged.
+* 2024 Feb 22 - `master` is locked, no PRs merged.
+* 2024 Feb 25 - Merge `develop` to `master`.
+* 2024 Feb 25 - `master` is unlocked. PRs can be merged again.
## What changes will be included?
@@ -48,7 +48,7 @@ Criteria for acceptance:
Strongly suggested:
-* The PR has a ChangeLog file describing the changes under `/docs/Changelog/20231126`.
+* The PR has a ChangeLog file describing the changes under `/docs/Changelog/20240225`.
* This should be in Markdown format, with a name in the format `PR12345.md`, substituting the digits for your PRs ID.
* One strong recommendation that the ChangeLog document matches the PR description on GitHub, so as to ensure traceability.
diff --git a/docs/breaking_changes_history.md b/docs/breaking_changes_history.md
index deb3dfb99008..4ab890294bba 100644
--- a/docs/breaking_changes_history.md
+++ b/docs/breaking_changes_history.md
@@ -2,6 +2,7 @@
This page links to all previous changelogs from the QMK Breaking Changes process.
+* [2023 Nov 26](ChangeLog/20231126.md) - version 0.23.0
* [2023 Aug 27](ChangeLog/20230827.md) - version 0.22.0
* [2023 May 28](ChangeLog/20230528.md) - version 0.21.0
* [2023 Feb 26](ChangeLog/20230226.md) - version 0.20.0
diff --git a/docs/cli.md b/docs/cli.md
index 8684479d0c1d..0fa068dc7b0c 100644
--- a/docs/cli.md
+++ b/docs/cli.md
@@ -2,11 +2,11 @@
## Overview :id=overview
-The QMK CLI makes building and working with QMK keyboards easier. We have provided a number of commands to simplify and streamline tasks such as obtaining and compiling the QMK firmware, creating keymaps, and more.
+The QMK CLI (command line interface) makes building and working with QMK keyboards easier. We have provided a number of commands to simplify and streamline tasks such as obtaining and compiling the QMK firmware, creating keymaps, and more.
### Requirements :id=requirements
-QMK requires Python 3.6 or greater. We try to keep the number of requirements small but you will also need to install the packages listed in [`requirements.txt`](https://github.com/qmk/qmk_firmware/blob/master/requirements.txt). These are installed automatically when you install the QMK CLI.
+QMK requires Python 3.7 or greater. We try to keep the number of requirements small but you will also need to install the packages listed in [`requirements.txt`](https://github.com/qmk/qmk_firmware/blob/master/requirements.txt). These are installed automatically when you install the QMK CLI.
### Install Using Homebrew (macOS, some Linux) :id=install-using-homebrew
@@ -20,7 +20,7 @@ qmk setup # This will clone `qmk/qmk_firmware` and optionally set up your build
### Install Using pip :id=install-using-easy_install-or-pip
-If your system is not listed above you can install QMK manually. First ensure that you have Python 3.6 (or later) installed and have installed pip. Then install QMK with this command:
+If your system is not listed above you can install QMK manually. First ensure that you have Python 3.7 (or later) installed and have installed pip. Then install QMK with this command:
```
python3 -m pip install qmk
diff --git a/docs/cli_commands.md b/docs/cli_commands.md
index 79fd9de57576..cf174949afb1 100644
--- a/docs/cli_commands.md
+++ b/docs/cli_commands.md
@@ -362,6 +362,16 @@ This command is directory aware. It will automatically fill in KEYBOARD if you a
qmk list-keymaps -kb planck/ez
```
+## `qmk migrate`
+
+This command searches for legacy code that can be converted to the new `info.json` format and adds it to the specified keyboard's `info.json`.
+
+**Usage**:
+
+```
+qmk migrate [-h] -kb KEYBOARD [-f FILTER]
+```
+
## `qmk new-keyboard`
This command creates a new keyboard based on available templates.
@@ -482,6 +492,131 @@ $ qmk import-kbfirmware ~/Downloads/gh62.json
---
+# External Userspace Commands
+
+## `qmk userspace-add`
+
+This command adds a keyboard/keymap to the External Userspace build targets.
+
+**Usage**:
+
+```
+qmk userspace-add [-h] [-km KEYMAP] [-kb KEYBOARD] [builds ...]
+
+positional arguments:
+ builds List of builds in form :, or path to a keymap JSON file.
+
+options:
+ -h, --help show this help message and exit
+ -km KEYMAP, --keymap KEYMAP
+ The keymap to build a firmware for. Ignored when a configurator export is supplied.
+ -kb KEYBOARD, --keyboard KEYBOARD
+ The keyboard to build a firmware for. Ignored when a configurator export is supplied.
+```
+
+**Example**:
+
+```
+$ qmk userspace-add -kb planck/rev6 -km default
+Ψ Added planck/rev6:default to userspace build targets
+Ψ Saved userspace file to /home/you/qmk_userspace/qmk.json
+```
+
+## `qmk userspace-remove`
+
+This command removes a keyboard/keymap from the External Userspace build targets.
+
+**Usage**:
+
+```
+qmk userspace-remove [-h] [-km KEYMAP] [-kb KEYBOARD] [builds ...]
+
+positional arguments:
+ builds List of builds in form :, or path to a keymap JSON file.
+
+options:
+ -h, --help show this help message and exit
+ -km KEYMAP, --keymap KEYMAP
+ The keymap to build a firmware for. Ignored when a configurator export is supplied.
+ -kb KEYBOARD, --keyboard KEYBOARD
+ The keyboard to build a firmware for. Ignored when a configurator export is supplied.
+```
+
+**Example**:
+
+```
+$ qmk userspace-remove -kb planck/rev6 -km default
+Ψ Removed planck/rev6:default from userspace build targets
+Ψ Saved userspace file to /home/you/qmk_userspace/qmk.json
+```
+
+## `qmk userspace-list`
+
+This command lists the External Userspace build targets.
+
+**Usage**:
+
+```
+qmk userspace-list [-h] [-e]
+
+options:
+ -h, --help show this help message and exit
+ -e, --expand Expands any use of `all` for either keyboard or keymap.
+```
+
+**Example**:
+
+```
+$ qmk userspace-list
+Ψ Current userspace build targets:
+Ψ Keyboard: planck/rev6, keymap: you
+Ψ Keyboard: clueboard/66/rev3, keymap: you
+```
+
+## `qmk userspace-compile`
+
+This command compiles all the External Userspace build targets.
+
+**Usage**:
+
+```
+qmk userspace-compile [-h] [-e ENV] [-n] [-c] [-j PARALLEL] [-t]
+
+options:
+ -h, --help show this help message and exit
+ -e ENV, --env ENV Set a variable to be passed to make. May be passed multiple times.
+ -n, --dry-run Don't actually build, just show the commands to be run.
+ -c, --clean Remove object files before compiling.
+ -j PARALLEL, --parallel PARALLEL
+ Set the number of parallel make jobs; 0 means unlimited.
+ -t, --no-temp Remove temporary files during build.
+```
+
+**Example**:
+
+```
+$ qmk userspace-compile
+Ψ Preparing target list...
+Build planck/rev6:you [OK]
+Build clueboard/66/rev3:you [OK]
+```
+
+## `qmk userspace-doctor`
+
+This command examines your environment and alerts you to potential problems related to External Userspace.
+
+**Example**:
+
+```
+% qmk userspace-doctor
+Ψ QMK home: /home/you/qmk_userspace/qmk_firmware
+Ψ Testing userspace candidate: /home/you/qmk_userspace -- Valid `qmk.json`
+Ψ QMK userspace: /home/you/qmk_userspace
+Ψ Userspace enabled: True
+```
+
+---
+
# Developer Commands
## `qmk format-text`
diff --git a/docs/cli_development.md b/docs/cli_development.md
index d878deff17c4..8d4ee625352f 100644
--- a/docs/cli_development.md
+++ b/docs/cli_development.md
@@ -44,7 +44,7 @@ def hello(cli):
First we import the `cli` object from `milc`. This is how we interact with the user and control the script's behavior. We use `@cli.argument()` to define a command line flag, `--name`. This also creates a configuration variable named `hello.name` (and the corresponding `user.name`) which the user can set so they don't have to specify the argument. The `cli.subcommand()` decorator designates this function as a subcommand. The name of the subcommand will be taken from the name of the function.
-Once inside our function we find a typical "Hello, World!" program. We use `cli.log` to access the underlying [Logger Object](https://docs.python.org/3.6/library/logging.html#logger-objects), whose behavior is user controllable. We also access the value for name supplied by the user as `cli.config.hello.name`. The value for `cli.config.hello.name` will be determined by looking at the `--name` argument supplied by the user, if not provided it will use the value in the `qmk.ini` config file, and if neither of those is provided it will fall back to the default supplied in the `cli.argument()` decorator.
+Once inside our function we find a typical "Hello, World!" program. We use `cli.log` to access the underlying [Logger Object](https://docs.python.org/3.7/library/logging.html#logger-objects), whose behavior is user controllable. We also access the value for name supplied by the user as `cli.config.hello.name`. The value for `cli.config.hello.name` will be determined by looking at the `--name` argument supplied by the user, if not provided it will use the value in the `qmk.ini` config file, and if neither of those is provided it will fall back to the default supplied in the `cli.argument()` decorator.
# User Interaction
@@ -56,13 +56,13 @@ There are two main methods for outputting text in a subcommand- `cli.log` and `c
You can use special tokens to colorize your text, to make it easier to understand the output of your program. See [Colorizing Text](#colorizing-text) below.
-Both of these methods support built-in string formatting using python's [printf style string format operations](https://docs.python.org/3.6/library/stdtypes.html#old-string-formatting). You can use tokens such as `%s` and `%d` within your text strings then pass the values as arguments. See our Hello, World program above for an example.
+Both of these methods support built-in string formatting using python's [printf style string format operations](https://docs.python.org/3.7/library/stdtypes.html#old-string-formatting). You can use tokens such as `%s` and `%d` within your text strings then pass the values as arguments. See our Hello, World program above for an example.
You should never use the format operator (`%`) directly, always pass values as arguments.
### Logging (`cli.log`)
-The `cli.log` object gives you access to a [Logger Object](https://docs.python.org/3.6/library/logging.html#logger-objects). We have configured our log output to show the user a nice emoji for each log level (or the log level name if their terminal does not support unicode.) This way the user can tell at a glance which messages are most important when something goes wrong.
+The `cli.log` object gives you access to a [Logger Object](https://docs.python.org/3.7/library/logging.html#logger-objects). We have configured our log output to show the user a nice emoji for each log level (or the log level name if their terminal does not support unicode.) This way the user can tell at a glance which messages are most important when something goes wrong.
The default log level is `INFO`. If the user runs `qmk -v ` the default log level will be set to `DEBUG`.
diff --git a/docs/coding_conventions_python.md b/docs/coding_conventions_python.md
index 2b6870344873..1ed27ee46abb 100644
--- a/docs/coding_conventions_python.md
+++ b/docs/coding_conventions_python.md
@@ -317,7 +317,7 @@ At the time of this writing our tests are not very comprehensive. Looking at the
## Integration Tests
-Integration tests can be found in `lib/python/qmk/tests/test_cli_commands.py`. This is where CLI commands are actually run and their overall behavior is verified. We use [`subprocess`](https://docs.python.org/3.6/library/subprocess.html#module-subprocess) to launch each CLI command and a combination of checking output and returncode to determine if the right thing happened.
+Integration tests can be found in `lib/python/qmk/tests/test_cli_commands.py`. This is where CLI commands are actually run and their overall behavior is verified. We use [`subprocess`](https://docs.python.org/3.7/library/subprocess.html#module-subprocess) to launch each CLI command and a combination of checking output and returncode to determine if the right thing happened.
## Unit Tests
diff --git a/docs/contributing.md b/docs/contributing.md
index e94a63760982..8d993e3389d5 100644
--- a/docs/contributing.md
+++ b/docs/contributing.md
@@ -70,6 +70,7 @@ We have a few different types of changes in QMK, each requiring a different leve
* Keymaps: Make sure that `make keyboard:keymap` does not return any errors.
* Keyboards: Make sure that `make keyboard:all` does not return any errors.
* Core: Make sure that `make all` does not return any errors.
+* Note that user-keymap and userspace contributions are no longer accepted.
* Make sure commit messages are understandable on their own. You should put a short description (no more than 70 characters) on the first line, the second line should be empty, and on the 3rd and later lines you should describe your commit in detail, if required. Example:
```
@@ -80,8 +81,6 @@ The kerpleplork was intermittently failing with error code 23. The root cause wa
Limited experimentation on the devices I have available shows that 7 is high enough to avoid confusing the kerpleplork, but I'd like to get some feedback from people with ARM devices to be sure.
```
-!> **IMPORTANT:** If you would like to contribute a bugfix or improvement to user code, such as non-default keymaps, userspace and layouts, be sure to tag the original submitter of the code in your PR. Many users, regardless of skill level with Git and GitHub, may be confused or frustrated at their code being modified without their knowledge.
-
## Documentation
Documentation is one of the easiest ways to get started contributing to QMK. Finding places where the documentation is wrong or incomplete and fixing those is easy! We also very badly need someone to edit our documentation, so if you have editing skills but aren't sure where or how to jump in please [reach out for help](#where-can-i-go-for-help)!
diff --git a/docs/custom_quantum_functions.md b/docs/custom_quantum_functions.md
index 5d63f3cfb7d0..957633837c42 100644
--- a/docs/custom_quantum_functions.md
+++ b/docs/custom_quantum_functions.md
@@ -283,6 +283,65 @@ void suspend_wakeup_init_user(void) {
* Keyboard/Revision: `void suspend_power_down_kb(void)` and `void suspend_wakeup_init_user(void)`
* Keymap: `void suspend_power_down_kb(void)` and `void suspend_wakeup_init_user(void)`
+
+# Keyboard Shutdown/Reboot Code :id=keyboard-shutdown-reboot-code
+
+This function gets called whenever the firmware is reset, whether it's a soft reset or reset to the bootloader. This is the spot to use for any sort of cleanup, as this happens right before the actual reset. And it can be useful for turning off different systems (such as RGB, onboard screens, etc).
+
+Additionally, it differentiates between the soft reset (eg, rebooting back into the firmware) or jumping to the bootloader.
+
+Certain tasks are performed during shutdown too. The keyboard is cleared, music and midi is stopped (if enabled), the shutdown chime is triggered (if audio is enabled), and haptic is stopped.
+
+If `jump_to_bootloader` is set to `true`, this indicates that the board will be entering the bootloader for a new firmware flash, whereas `false` indicates that this is happening for a soft reset and will load the firmware agaim immediately (such as when using `QK_REBOOT` or `QK_CLEAR_EEPROM`).
+
+As there is a keyboard and user level function, returning `false` for the user function will disable the keyboard level function, allowing for customization.
+
+?> Bootmagic does not trigger `shutdown_*()` as it happens before most of the initialization process.
+
+### Example `shutdown_kb()` Implementation
+
+```c
+bool shutdown_kb(bool jump_to_bootloader) {
+ if (!shutdown_user(jump_to_bootloader)) {
+ return false;
+ }
+
+ if (jump_to_bootloader) {
+ // red for bootloader
+ rgb_matrix_set_color_all(RGB_OFF);
+ } else {
+ // off for soft reset
+ rgb_matrix_set_color_all(RGB_GREEN);
+ }
+ // force flushing -- otherwise will never happen
+ rgb_matrix_update_pwm_buffers();
+ return true;
+}
+```
+
+### Example `shutdown_user()` Implementation
+
+```c
+bool shutdown_user(bool jump_to_bootloader) {
+ if (jump_to_bootloader) {
+ // red for bootloader
+ rgb_matrix_set_color_all(RGB_RED);
+ } else {
+ // off for soft reset
+ rgb_matrix_set_color_all(RGB_OFF);
+ }
+ // force flushing -- otherwise will never happen
+ rgb_matrix_update_pwm_buffers();
+ // false to not process kb level
+ return false;
+}
+```
+
+### Keyboard shutdown/reboot Function Documentation
+
+* Keyboard/Revision: `bool shutdown_kb(bool jump_to_bootloader)`
+* Keymap: `bool shutdown_user(bool jump_to_bootloader)`
+
# Deferred Execution :id=deferred-execution
QMK has the ability to execute a callback after a specified period of time, rather than having to manually manage timers. To enable this functionality, set `DEFERRED_EXEC_ENABLE = yes` in rules.mk.
diff --git a/docs/eeprom_driver.md b/docs/eeprom_driver.md
index 50d8bcb7b328..c77d18c68df5 100644
--- a/docs/eeprom_driver.md
+++ b/docs/eeprom_driver.md
@@ -66,6 +66,14 @@ Currently QMK supports 25xx-series chips over SPI. As such, requires a working s
`#define EXTERNAL_EEPROM_PAGE_SIZE` | `32` | Page size of the EEPROM in bytes, as specified in the datasheet
`#define EXTERNAL_EEPROM_ADDRESS_SIZE` | `2` | The number of bytes to transmit for the memory location within the EEPROM
+Default values and extended descriptions can be found in `drivers/eeprom/eeprom_spi.h`.
+
+Alternatively, there are pre-defined hardware configurations for available chips/modules:
+
+Module | Equivalent `#define` | Source
+-----------------|---------------------------------|------------------------------------------
+MB85RS64V FRAM | `define EEPROM_SPI_MB85RS64V` |
+
!> There's no way to determine if there is an SPI EEPROM actually responding. Generally, this will result in reads of nothing but zero.
## Transient Driver configuration :id=transient-eeprom-driver-configuration
@@ -105,11 +113,11 @@ Configurable options in your keyboard's `config.h`:
`config.h` override | Default | Description
-----------------------------------------|-------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-`#define WEAR_LEVELING_EFL_FIRST_SECTOR` | _unset_ | The first sector on the MCU to use. By default this is not defined and calculated at runtime based on the MCU. However, different flash sizes on MCUs may require custom configuration.
-`#define WEAR_LEVELING_EFL_FLASH_SIZE` | _unset_ | Allows overriding the flash size available for use for wear-leveling. Under normal circumstances this is automatically calculated and should not need to be overridden. Specifying a size larger than the amount actually available in flash will usually prevent the MCU from booting.
-`#define WEAR_LEVELING_LOGICAL_SIZE` | `1024` | Number of bytes "exposed" to the rest of QMK and denotes the size of the usable EEPROM.
-`#define WEAR_LEVELING_BACKING_SIZE` | `2048` | Number of bytes used by the wear-leveling algorithm for its underlying storage, and needs to be a multiple of the logical size.
-`#define BACKING_STORE_WRITE_SIZE` | _automatic_ | The byte width of the underlying write used on the MCU, and is usually automatically determined from the selected MCU family. If an error occurs in the auto-detection, you'll need to consult the MCU's datasheet and determine this value, specifying it directly.
+`#define WEAR_LEVELING_EFL_FIRST_SECTOR` | _unset_ | The first sector on the MCU to use. By default this is not defined and calculated at runtime based on the MCU. However, different flash sizes on MCUs may require custom configuration.
+`#define WEAR_LEVELING_EFL_FLASH_SIZE` | _unset_ | Allows overriding the flash size available for use for wear-leveling. Under normal circumstances this is automatically calculated and should not need to be overridden. Specifying a size larger than the amount actually available in flash will usually prevent the MCU from booting.
+`#define WEAR_LEVELING_LOGICAL_SIZE` | `(backing_size/2)` | Number of bytes "exposed" to the rest of QMK and denotes the size of the usable EEPROM.
+`#define WEAR_LEVELING_BACKING_SIZE` | `2048` | Number of bytes used by the wear-leveling algorithm for its underlying storage, and needs to be a multiple of the logical size.
+`#define BACKING_STORE_WRITE_SIZE` | _automatic_ | The byte width of the underlying write used on the MCU, and is usually automatically determined from the selected MCU family. If an error occurs in the auto-detection, you'll need to consult the MCU's datasheet and determine this value, specifying it directly.
!> If your MCU does not boot after swapping to the EFL wear-leveling driver, it's likely that the flash size is incorrectly detected, usually as an MCU with larger flash and may require overriding.
@@ -139,7 +147,7 @@ Configurable options in your keyboard's `config.h`:
------------------------------------------|----------------------------|--------------------------------------------------------------------------------------------------------------------------------
`#define WEAR_LEVELING_RP2040_FLASH_SIZE` | `PICO_FLASH_SIZE_BYTES` | Number of bytes of flash on the board.
`#define WEAR_LEVELING_RP2040_FLASH_BASE` | `(flash_size-sector_size)` | The byte-wise location that the backing storage should be located.
-`#define WEAR_LEVELING_LOGICAL_SIZE` | `4096` | Number of bytes "exposed" to the rest of QMK and denotes the size of the usable EEPROM.
+`#define WEAR_LEVELING_LOGICAL_SIZE` | `(backing_size/2)` | Number of bytes "exposed" to the rest of QMK and denotes the size of the usable EEPROM.
`#define WEAR_LEVELING_BACKING_SIZE` | `8192` | Number of bytes used by the wear-leveling algorithm for its underlying storage, and needs to be a multiple of the logical size as well as the sector size.
`#define BACKING_STORE_WRITE_SIZE` | `2` | The write width used whenever a write is performed on the external flash peripheral.
diff --git a/docs/feature_auto_shift.md b/docs/feature_auto_shift.md
index 6241cbaeb158..74be33cdd47b 100644
--- a/docs/feature_auto_shift.md
+++ b/docs/feature_auto_shift.md
@@ -180,18 +180,18 @@ For more granular control, there is `get_auto_shifted_key`. The default function
bool get_auto_shifted_key(uint16_t keycode, keyrecord_t *record) {
switch (keycode) {
# ifndef NO_AUTO_SHIFT_ALPHA
- case KC_A ... KC_Z:
+ case AUTO_SHIFT_ALPHA:
# endif
# ifndef NO_AUTO_SHIFT_NUMERIC
- case KC_1 ... KC_0:
+ case AUTO_SHIFT_NUMERIC:
# endif
# ifndef NO_AUTO_SHIFT_SPECIAL
-# ifndef NO_AUTO_SHIFT_TAB
+# ifndef NO_AUTO_SHIFT_TAB
case KC_TAB:
-# endif
-# ifndef NO_AUTO_SHIFT_SYMBOLS
+# endif
+# ifndef NO_AUTO_SHIFT_SYMBOLS
case AUTO_SHIFT_SYMBOLS:
-# endif
+# endif
# endif
# ifdef AUTO_SHIFT_ENTER
case KC_ENT:
@@ -310,10 +310,16 @@ generating taps on release. For example:
#define RETRO_SHIFT 500
```
+Without a value set, holds of any length without an interrupting key will produce the shifted value.
+
This value (if set) must be greater than one's `TAPPING_TERM`, as the key press
must be designated as a 'hold' by `process_tapping` before we send the modifier.
+[Per-key tapping terms](tap_hold.md#tapping-term) can be used as a workaround.
There is no such limitation in regards to `AUTO_SHIFT_TIMEOUT` for normal keys.
+**Note:** Tap Holds must be added to Auto Shift, see [here.](feature_auto_shift.md#auto-shift-per-key)
+`IS_RETRO` may be helpful if one wants all Tap Holds retro shifted.
+
### Retro Shift and Tap Hold Configurations
Tap Hold Configurations work a little differently when using Retro Shift.
diff --git a/docs/feature_backlight.md b/docs/feature_backlight.md
index d032c33f18a1..69391fcefe99 100644
--- a/docs/feature_backlight.md
+++ b/docs/feature_backlight.md
@@ -37,8 +37,9 @@ Add the following to your `config.h`:
|`BREATHING_PERIOD` |`6` |The length of one backlight "breath" in seconds |
|`BACKLIGHT_ON_STATE` |`1` |The state of the backlight pin when the backlight is "on" - `1` for high, `0` for low |
|`BACKLIGHT_LIMIT_VAL` |`255` |The maximum duty cycle of the backlight -- `255` allows for full brightness, any lower will decrease the maximum.|
+|`BACKLIGHT_DEFAULT_ON` |`true` |Enable backlight upon clearing the EEPROM |
+|`BACKLIGHT_DEFAULT_BREATHING`|`false` |Whether to enable backlight breathing upon clearing the EEPROM |
|`BACKLIGHT_DEFAULT_LEVEL` |`BACKLIGHT_LEVELS`|The default backlight level to use upon clearing the EEPROM |
-|`BACKLIGHT_DEFAULT_BREATHING`|*Not defined* |Whether to enable backlight breathing upon clearing the EEPROM |
Unless you are designing your own keyboard, you generally should not need to change the `BACKLIGHT_PIN` or `BACKLIGHT_ON_STATE`.
@@ -172,11 +173,13 @@ Depending on the ChibiOS board configuration, you may need to enable PWM at the
The following `#define`s apply only to the `pwm` driver:
-|Define |Default |Description |
-|-----------------------|--------|-----------------------------------|
-|`BACKLIGHT_PWM_DRIVER` |`PWMD4` |The PWM driver to use |
-|`BACKLIGHT_PWM_CHANNEL`|`3` |The PWM channel to use |
-|`BACKLIGHT_PAL_MODE` |`2` |The pin alternative function to use|
+|Define |Default |Description |
+|-----------------------|-------------|---------------------------------------------------------------|
+|`BACKLIGHT_PWM_DRIVER` |`PWMD4` |The PWM driver to use |
+|`BACKLIGHT_PWM_CHANNEL`|`3` |The PWM channel to use |
+|`BACKLIGHT_PAL_MODE` |`2` |The pin alternative function to use |
+|`BACKLIGHT_PWM_PERIOD` |*Not defined*|The PWM period in counter ticks - Default is platform dependent|
+
Refer to the ST datasheet for your particular MCU to determine these values. For example, these defaults are set up for pin `B8` on a Proton-C (STM32F303) using `TIM4_CH3` on AF2. Unless you are designing your own keyboard, you generally should not need to change them.
diff --git a/docs/feature_combo.md b/docs/feature_combo.md
index fd241061fbf4..2e802446b6b4 100644
--- a/docs/feature_combo.md
+++ b/docs/feature_combo.md
@@ -345,10 +345,9 @@ is not set, all other layers will reference themselves.
}
return layer; // important if default is not in case.
}
-
```
-
- The equivalent definition using the combo macros is this:
+
+The equivalent definition using the combo macros is this:
```c
COMBO_REF_LAYER(_DVORAK, _QWERTY)
diff --git a/docs/feature_converters.md b/docs/feature_converters.md
index b1abfa373ad8..11bdbed576b5 100644
--- a/docs/feature_converters.md
+++ b/docs/feature_converters.md
@@ -1,12 +1,10 @@
# Converters
-Since many drop-in replacement controllers now exist, we've done our best to make them easy to use in existing designs.
+This page documents the automated process for converting keyboards to use drop-in replacement controllers. This process is designed to be easy to use and can be completed in a few simple steps.
-This page documents the handy automated process for converting keyboards.
+## Supported Converters
-### Supported Converters
-
-Currently the following converters are available:
+The following converters are available at this time:
| From | To |
|------------|-------------------|
@@ -28,14 +26,10 @@ Currently the following converters are available:
| `elite_c` | `helios` |
| `elite_c` | `liatris` |
-See below for more in depth information on each converter.
## Overview
-Each converter category is broken down by its declared `pin compatibility`.
-This ensures that only valid combinations are attempted.
-
-You can generate the firmware by appending `-e CONVERT_TO=` to your compile/flash command. For example:
+Each converter category is broken down by its declared `pin compatibility`. This ensures that only valid combinations are attempted. You can generate the firmware by appending `-e CONVERT_TO=` to your compile/flash command. For example:
```sh
qmk flash -c -kb keebio/bdn9/rev1 -km default -e CONVERT_TO=proton_c
@@ -59,14 +53,12 @@ Once a converter is enabled, it exposes the `CONVERT_TO_` flag
### Pin Compatibility
-To ensure compatibility, provide validation, and power future workflows, a keyboard should declare its `pin compatibility`. For legacy reasons, this is currently assumed to be `promicro`.
-
-Currently the following pin compatibility interfaces are defined:
+To ensure compatibility, provide validation, and enable future workflows, a keyboard should declare its `pin compatibility`. For legacy reasons, this is currently assumed to be `promicro`. The following pin compatibility interfaces are currently defined:
-| Pinout | Notes |
-|------------|-----------------------------------|
-| `promicro` | Includes RX/TX LEDs |
-| `elite_c` | Includes bottom row pins, no LEDs |
+| Pin Compatibility | Notes |
+|-------------------|-----------------------------------|
+| `promicro` | Includes RX/TX LEDs |
+| `elite_c` | Includes bottom row pins, no LEDs |
To declare the base for conversions, add this line to your keyboard's `rules.mk`:
@@ -140,7 +132,7 @@ The following defaults are based on what has been implemented for [RP2040](platf
### SparkFun Pro Micro - RP2040, Blok, Bit-C PRO and Michi :id=promicro_rp2040
-Currently identical to [Adafruit KB2040](#kb2040).
+Feature set is identical to [Adafruit KB2040](#kb2040).
### STeMCell :id=stemcell
@@ -150,9 +142,7 @@ There are two versions of STeMCell available, with different pinouts:
- v2.0.0 (pre-release v1.0.1, v1.0.2)
Default official firmware only supports v2.0.0 STeMCell.
-STeMCell has support to swap UART and I2C pins, to enable single-wire uart communication in STM chips.
-
-The following additional flags has to be used while compiling, based on the pin used for split communication.
+STeMCell has support to swap UART and I2C pins to enable single-wire uart communication in STM chips. The following additional flags has to be used while compiling, based on the pin used for split communication:
| Split Pin | Compile flags |
|-----------|---------------|
@@ -173,11 +163,8 @@ The Bonsai C4 only has one on-board LED (B2), and by default, both the Pro Micro
### RP2040 Community Edition - Elite-Pi, Helios, and Liatris :id=rp2040_ce
-Feature set currently identical to [Adafruit KB2040](#kb2040).
-
-Enables VBUS detection by default for superior split keyboard support.
+Feature set is identical to [Adafruit KB2040](#kb2040). VBUS detection is enabled by default for superior split keyboard support. For more information, refer to the [Community Edition pinout](platformdev_rp2040.md#rp2040_ce) docs.
-For more information, refer to the [RP2040 Community Edition](platformdev_rp2040.md#rp2040_ce) docs.
## Elite-C
@@ -202,8 +189,8 @@ Converter summary:
### STeMCell :id=stemcell_elite
-Currently identical to [STeMCell](#stemcell) with support for the additional bottom row of pins.
+Identical to [Pro Micro - STeMCell](#stemcell) with support for the additional bottom row of pins.
### RP2040 Community Edition :id=rp2040_ce_elite
-Currently identical to [RP2040 Community Edition](#rp2040_ce), with support for the additional bottom row of pins.
+Identical to [Pro Micro - RP2040 Community Edition](#rp2040_ce) with support for the additional bottom row of pins.
diff --git a/docs/feature_encoders.md b/docs/feature_encoders.md
index 891baeefa1d0..4eeb388e5776 100644
--- a/docs/feature_encoders.md
+++ b/docs/feature_encoders.md
@@ -82,10 +82,10 @@ Your `keymap.c` will then need an encoder mapping defined (for four layers and t
```c
#if defined(ENCODER_MAP_ENABLE)
const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
- [_BASE] = { ENCODER_CCW_CW(KC_MS_WH_UP, KC_MS_WH_DOWN), ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
- [_LOWER] = { ENCODER_CCW_CW(RGB_HUD, RGB_HUI), ENCODER_CCW_CW(RGB_SAD, RGB_SAI) },
- [_RAISE] = { ENCODER_CCW_CW(RGB_VAD, RGB_VAI), ENCODER_CCW_CW(RGB_SPD, RGB_SPI) },
- [_ADJUST] = { ENCODER_CCW_CW(RGB_RMOD, RGB_MOD), ENCODER_CCW_CW(KC_RIGHT, KC_LEFT) },
+ [0] = { ENCODER_CCW_CW(KC_MS_WH_UP, KC_MS_WH_DOWN), ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
+ [1] = { ENCODER_CCW_CW(RGB_HUD, RGB_HUI), ENCODER_CCW_CW(RGB_SAD, RGB_SAI) },
+ [2] = { ENCODER_CCW_CW(RGB_VAD, RGB_VAI), ENCODER_CCW_CW(RGB_SPD, RGB_SPI) },
+ [3] = { ENCODER_CCW_CW(RGB_RMOD, RGB_MOD), ENCODER_CCW_CW(KC_RIGHT, KC_LEFT) },
};
#endif
```
diff --git a/docs/feature_key_overrides.md b/docs/feature_key_overrides.md
index ec7efd4c017e..59eced95c364 100644
--- a/docs/feature_key_overrides.md
+++ b/docs/feature_key_overrides.md
@@ -21,7 +21,7 @@ Then, in your `keymap.c` file, you'll need to define the array `key_overrides`,
The `key_override_t` struct has many options that allow you to precisely tune your overrides. The full reference is shown below. Instead of manually creating a `key_override_t` value, it is recommended to use these dedicated initializers:
#### `ko_make_basic(modifiers, key, replacement)`
-Returns a `key_override_t`, which sends `replacement` (can be a key-modifer combination), when `key` and `modifiers` are all pressed down. This override still activates if any additional modifiers not specified in `modifiers` are also pressed down. See `ko_make_with_layers_and_negmods` to customize this behavior.
+Returns a `key_override_t`, which sends `replacement` (can be a key-modifier combination), when `key` and `modifiers` are all pressed down. This override still activates if any additional modifiers not specified in `modifiers` are also pressed down. See `ko_make_with_layers_and_negmods` to customize this behavior.
#### `ko_make_with_layers(modifiers, key, replacement, layers)`
Additionally takes a bitmask `layers` that defines on which layers the override is used.
@@ -224,7 +224,7 @@ The duration of the key repeat delay is controlled with the `KEY_OVERRIDE_REPEAT
## Difference to Combos :id=difference-to-combos
-Note that key overrides are very different from [combos](https://docs.qmk.fm/#/feature_combo). Combos require that you press down several keys almost _at the same time_ and can work with any combination of non-modifier keys. Key overrides work like keyboard shortcuts (e.g. `ctrl` + `z`): They take combinations of _multiple_ modifiers and _one_ non-modifier key to then perform some custom action. Key overrides are implemented with much care to behave just like normal keyboard shortcuts would in regards to the order of pressed keys, timing, and interacton with other pressed keys. There are a number of optional settings that can be used to really fine-tune the behavior of each key override as well. Using key overrides also does not delay key input for regular key presses, which inherently happens in combos and may be undesirable.
+Note that key overrides are very different from [combos](https://docs.qmk.fm/#/feature_combo). Combos require that you press down several keys almost _at the same time_ and can work with any combination of non-modifier keys. Key overrides work like keyboard shortcuts (e.g. `ctrl` + `z`): They take combinations of _multiple_ modifiers and _one_ non-modifier key to then perform some custom action. Key overrides are implemented with much care to behave just like normal keyboard shortcuts would in regards to the order of pressed keys, timing, and interaction with other pressed keys. There are a number of optional settings that can be used to really fine-tune the behavior of each key override as well. Using key overrides also does not delay key input for regular key presses, which inherently happens in combos and may be undesirable.
## Solution to the problem of flashing modifiers :id=neutralize-flashing-modifiers
diff --git a/docs/feature_led_matrix.md b/docs/feature_led_matrix.md
index fd56a457258a..b1ce09d34946 100644
--- a/docs/feature_led_matrix.md
+++ b/docs/feature_led_matrix.md
@@ -19,14 +19,13 @@ You can use between 1 and 4 IS31FL3731 IC's. Do not specify `LED_DRIVER_ADDR_
| Variable | Description | Default |
|----------|-------------|---------|
-| `ISSI_TIMEOUT` | (Optional) How long to wait for i2c messages, in milliseconds | 100 |
-| `ISSI_PERSISTENCE` | (Optional) Retry failed messages this many times | 0 |
-| `LED_DRIVER_COUNT` | (Required) How many LED driver IC's are present | |
+| `IS31FL3731_I2C_TIMEOUT` | (Optional) How long to wait for i2c messages, in milliseconds | 100 |
+| `IS31FL3731_I2C_PERSISTENCE` | (Optional) Retry failed messages this many times | 0 |
| `LED_MATRIX_LED_COUNT` | (Required) How many LED lights are present across all drivers | |
-| `LED_DRIVER_ADDR_1` | (Required) Address for the first LED driver | |
-| `LED_DRIVER_ADDR_2` | (Optional) Address for the second LED driver | |
-| `LED_DRIVER_ADDR_3` | (Optional) Address for the third LED driver | |
-| `LED_DRIVER_ADDR_4` | (Optional) Address for the fourth LED driver | |
+| `IS31FL3731_I2C_ADDRESS_1` | (Required) Address for the first LED driver | |
+| `IS31FL3731_I2C_ADDRESS_2` | (Optional) Address for the second LED driver | |
+| `IS31FL3731_I2C_ADDRESS_3` | (Optional) Address for the third LED driver | |
+| `IS31FL3731_I2C_ADDRESS_4` | (Optional) Address for the fourth LED driver | |
Here is an example using 2 drivers.
@@ -34,14 +33,15 @@ Here is an example using 2 drivers.
// This is a 7-bit address, that gets left-shifted and bit 0
// set to 0 for write, 1 for read (as per I2C protocol)
// The address will vary depending on your wiring:
-// 0b1110100 AD <-> GND
-// 0b1110111 AD <-> VCC
-// 0b1110101 AD <-> SCL
-// 0b1110110 AD <-> SDA
-#define LED_DRIVER_ADDR_1 0b1110100
-#define LED_DRIVER_ADDR_2 0b1110110
-
-#define LED_DRIVER_COUNT 2
+// 00 AD <-> GND
+// 01 AD <-> SCL
+// 10 AD <-> SDA
+// 11 AD <-> VCC
+// ADDR represents A1:A0 of the 7-bit address.
+// The result is: 0b11101(ADDR)
+#define IS31FL3731_I2C_ADDRESS_1 IS31FL3731_I2C_ADDRESS_GND
+#define IS31FL3731_I2C_ADDRESS_2 IS31FL3731_I2C_ADDRESS_SDA
+
#define LED_DRIVER_1_LED_TOTAL 25
#define LED_DRIVER_2_LED_TOTAL 24
#define LED_MATRIX_LED_COUNT (LED_DRIVER_1_LED_TOTAL + LED_DRIVER_2_LED_TOTAL)
@@ -49,12 +49,12 @@ Here is an example using 2 drivers.
!> Note the parentheses, this is so when `LED_MATRIX_LED_COUNT` is used in code and expanded, the values are added together before any additional math is applied to them. As an example, `rand() % (LED_DRIVER_1_LED_TOTAL + LED_DRIVER_2_LED_TOTAL)` will give very different results than `rand() % LED_DRIVER_1_LED_TOTAL + LED_DRIVER_2_LED_TOTAL`.
-For split keyboards using `LED_MATRIX_SPLIT` with an LED driver, you can either have the same driver address or different driver addresses. If using different addresses, use `DRIVER_ADDR_1` for one and `DRIVER_ADDR_2` for the other one. Then, in `g_is31_leds`, fill out the correct driver index (0 or 1). If using one address, use `DRIVER_ADDR_1` for both, and use index 0 for `g_is31_leds`.
+For split keyboards using `LED_MATRIX_SPLIT` with an LED driver, you can either have the same driver address or different driver addresses. If using different addresses, use `IS31FL3731_I2C_ADDRESS_1` for one and `IS31FL3731_I2C_ADDRESS_2` for the other one. Then, in `g_is31fl3731_leds`, fill out the correct driver index (0 or 1). If using one address, use `IS31FL3731_I2C_ADDRESS_1` for both, and use index 0 for `g_is31fl3731_leds`.
Define these arrays listing all the LEDs in your `.c`:
```c
-const is31_led PROGMEM g_is31_leds[LED_MATRIX_LED_COUNT] = {
+const is31fl3731_led_t PROGMEM g_is31fl3731_leds[LED_MATRIX_LED_COUNT] = {
/* Refer to IS31 manual for these locations
* driver
* | LED address
@@ -94,7 +94,6 @@ Configure the hardware via your `config.h`:
|----------|-------------|---------|
| `ISSI_TIMEOUT` | (Optional) How long to wait for i2c messages, in milliseconds | 100 |
| `ISSI_PERSISTENCE` | (Optional) Retry failed messages this many times | 0 |
-| `DRIVER_COUNT` | (Required) How many LED driver IC's are present | |
| `LED_MATRIX_LED_COUNT` | (Required) How many LED lights are present across all drivers | |
| `DRIVER_ADDR_1` | (Optional) Address for the first LED driver | |
| `DRIVER_ADDR_` | (Required) Address for the additional LED drivers | |
@@ -127,7 +126,6 @@ Here is an example using 2 drivers.
```c
#define DRIVER_ADDR_2 0b0100001
-#define DRIVER_COUNT 2
#define DRIVER_1_LED_TOTAL 66
#define DRIVER_2_LED_TOTAL 42
#define LED_MATRIX_LED_COUNT (DRIVER_1_LED_TOTAL + DRIVER_2_LED_TOTAL)
@@ -159,7 +157,7 @@ Then Define the array listing all the LEDs you want to override in your ` If using one of the above defines you can skip to gesture settings.
+
+| Setting | Description | Default |
+| -------------------------------- | ---------------------------------------------------------- | ------------- |
+| `AZOTEQ_IQS5XX_WIDTH_MM` | (Required) Width of the trackpad sensor in millimeters. | _not defined_ |
+| `AZOTEQ_IQS5XX_HEIGHT_MM` | (Required) Height of the trackpad sensor in millimeters. | _not defined_ |
+| `AZOTEQ_IQS5XX_RESOLUTION_X` | (Optional) Specify X resolution for CPI calculation. | _not defined_ |
+| `AZOTEQ_IQS5XX_RESOLUTION_Y` | (Optional) Specify Y resolution for CPI calculation. | _not defined_ |
+
+**`AZOTEQ_IQS5XX_RESOLUTION_X/Y`** fall back resolutions are provided within the driver based on controller model.
+
+| I2C Setting | Description | Default |
+| ------------------------- | ------------------------------------------------------------------------------- | ------- |
+| `AZOTEQ_IQS5XX_ADDRESS` | (Optional) Sets the I2C Address for the Azoteq trackpad | `0xE8` |
+| `AZOTEQ_IQS5XX_TIMEOUT_MS`| (Optional) The timeout for i2c communication with in milliseconds. | `10` |
+
+#### Gesture settings
+
+| Setting | Description | Default |
+| ----------------------------------------- | ------------------------------------------------------------------------------------ | ----------- |
+| `AZOTEQ_IQS5XX_TAP_ENABLE` | (Optional) Enable single finger tap. (Left click) | `true` |
+| `AZOTEQ_IQS5XX_TWO_FINGER_TAP_ENABLE` | (Optional) Enable two finger tap. (Right click) | `true` |
+| `AZOTEQ_IQS5XX_PRESS_AND_HOLD_ENABLE` | (Optional) Emulates holding left click to select text. | `false` |
+| `AZOTEQ_IQS5XX_SWIPE_X_ENABLE` | (Optional) Enable swipe gestures X+ (Mouse Button 5) / X- (Mouse Button 4) | `false` |
+| `AZOTEQ_IQS5XX_SWIPE_Y_ENABLE` | (Optional) Enable swipe gestures Y+ (Mouse Button 3) / Y- (Mouse Button 6) | `false` |
+| `AZOTEQ_IQS5XX_ZOOM_ENABLE` | (Optional) Enable zoom gestures Zoom Out (Mouse Button 7) / Zoom In (Mouse Button 8) | `false` |
+| `AZOTEQ_IQS5XX_SCROLL_ENABLE` | (Optional) Enable scrolling using two fingers. | `true` |
+| `AZOTEQ_IQS5XX_TAP_TIME` | (Optional) Maximum time in ms for tap to be registered. | `150` |
+| `AZOTEQ_IQS5XX_TAP_DISTANCE` | (Optional) Maximum deviation in pixels before single tap is no longer valid. | `25` |
+| `AZOTEQ_IQS5XX_HOLD_TIME` | (Optional) Minimum time in ms for press and hold. | `300` |
+| `AZOTEQ_IQS5XX_SWIPE_INITIAL_TIME` | (Optional) Maximum time to travel initial distance before swipe is registered. | `150` |
+| `AZOTEQ_IQS5XX_SWIPE_INITIAL_DISTANCE` | (Optional) Minimum travel in pixels before swipe is registered. | `300` |
+| `AZOTEQ_IQS5XX_SWIPE_CONSECUTIVE_TIME` | (Optional) Maximum time to travel consecutive distance before swipe is registered. | `0` |
+| `AZOTEQ_IQS5XX_SWIPE_CONSECUTIVE_DISTANCE`| (Optional) Minimum travel in pixels before a consecutive swipe is registered. | `2000` |
+| `AZOTEQ_IQS5XX_SCROLL_INITIAL_DISTANCE` | (Optional) Minimum travel in pixels before scroll is registered. | `50` |
+| `AZOTEQ_IQS5XX_ZOOM_INITIAL_DISTANCE` | (Optional) Minimum travel in pixels before zoom is registered. | `50` |
+| `AZOTEQ_IQS5XX_ZOOM_CONSECUTIVE_DISTANCE` | (Optional) Maximum time to travel zoom distance before zoom is registered. | `25` |
+
+#### Rotation settings
+
+| Setting | Description | Default |
+| ---------------------------- | ---------------------------------------------------------- | ------------- |
+| `AZOTEQ_IQS5XX_ROTATION_90` | (Optional) Configures hardware for 90 degree rotation. | _not defined_ |
+| `AZOTEQ_IQS5XX_ROTATION_180` | (Optional) Configures hardware for 180 degree rotation. | _not defined_ |
+| `AZOTEQ_IQS5XX_ROTATION_270` | (Optional) Configures hardware for 270 degree rotation. | _not defined_ |
+
### Cirque Trackpad
To use the Cirque Trackpad sensor, add this to your `rules.mk`:
@@ -735,9 +800,11 @@ layer_state_t layer_state_set_user(layer_state_t state) {
#### Set different target layer when a particular layer is active:
-The below code will change the auto mouse layer target to `_MOUSE_LAYER_2` when `_DEFAULT_LAYER_2` is highest default layer state.
-*NOTE: that `auto_mouse_layer_off` is used here instead of `remove_auto_mouse_layer` as `default_layer_state_set_*` stack is separate from the `layer_state_set_*` stack* if something similar was to be done in `layer_state_set_user `state = remove_auto_mouse_layer(state, false)` should be used instead
-*ADDITIONAL NOTE: `AUTO_MOUSE_TARGET_LAYER` is checked if already set to avoid deactivating the target layer unless needed*
+The below code will change the auto mouse layer target to `_MOUSE_LAYER_2` when `_DEFAULT_LAYER_2` is highest default layer state.
+
+*NOTE: that `auto_mouse_layer_off` is used here instead of `remove_auto_mouse_layer` as `default_layer_state_set_*` stack is separate from the `layer_state_set_*` stack*, if something similar was to be done in `layer_state_set_user`, `state = remove_auto_mouse_layer(state, false)` should be used instead.
+
+*ADDITIONAL NOTE: `AUTO_MOUSE_TARGET_LAYER` is checked if already set to avoid deactivating the target layer unless needed*.
```c
// in keymap.c
diff --git a/docs/feature_rawhid.md b/docs/feature_rawhid.md
index 094dd21c7e9a..64cb42fdfee0 100644
--- a/docs/feature_rawhid.md
+++ b/docs/feature_rawhid.md
@@ -28,7 +28,7 @@ To send data to the keyboard, you must first find a library for communicating wi
* **Node.js:** [node-hid](https://github.com/node-hid/node-hid)
* **C/C++:** [hidapi](https://github.com/libusb/hidapi)
* **Java:** [purejavahidapi](https://github.com/nyholku/purejavahidapi) and [hid4java](https://github.com/gary-rowe/hid4java)
-* **Python:** [pyhidapi](https://pypi.org/project/hid/)
+* **Python:** [pyhidapi](https://pypi.org/project/hid/) and [pywinusb](https://pypi.org/project/pywinusb)
Please refer to these libraries' own documentation for instructions on usage. Remember to close the device once you are finished with it!
diff --git a/docs/feature_rgb_matrix.md b/docs/feature_rgb_matrix.md
index 44899d70d9d2..824ff50648a2 100644
--- a/docs/feature_rgb_matrix.md
+++ b/docs/feature_rgb_matrix.md
@@ -19,15 +19,14 @@ You can use between 1 and 4 IS31FL3731 IC's. Do not specify `DRIVER_ADDR_` de
| Variable | Description | Default |
|----------|-------------|---------|
-| `ISSI_TIMEOUT` | (Optional) How long to wait for i2c messages, in milliseconds | 100 |
-| `ISSI_PERSISTENCE` | (Optional) Retry failed messages this many times | 0 |
-| `ISSI_3731_DEGHOST` | (Optional) Set this define to enable de-ghosting by halving Vcc during blanking time | |
-| `DRIVER_COUNT` | (Required) How many RGB driver IC's are present | |
+| `IS31FL3731_I2C_TIMEOUT` | (Optional) How long to wait for i2c messages, in milliseconds | 100 |
+| `IS31FL3731_I2C_PERSISTENCE` | (Optional) Retry failed messages this many times | 0 |
+| `IS31FL3731_DEGHOST` | (Optional) Set this define to enable de-ghosting by halving Vcc during blanking time | |
| `RGB_MATRIX_LED_COUNT` | (Required) How many RGB lights are present across all drivers | |
-| `DRIVER_ADDR_1` | (Required) Address for the first RGB driver | |
-| `DRIVER_ADDR_2` | (Optional) Address for the second RGB driver | |
-| `DRIVER_ADDR_3` | (Optional) Address for the third RGB driver | |
-| `DRIVER_ADDR_4` | (Optional) Address for the fourth RGB driver | |
+| `IS31FL3731_I2C_ADDRESS_1` | (Required) Address for the first RGB driver | |
+| `IS31FL3731_I2C_ADDRESS_2` | (Optional) Address for the second RGB driver | |
+| `IS31FL3731_I2C_ADDRESS_3` | (Optional) Address for the third RGB driver | |
+| `IS31FL3731_I2C_ADDRESS_4` | (Optional) Address for the fourth RGB driver | |
Here is an example using 2 drivers.
@@ -35,14 +34,15 @@ Here is an example using 2 drivers.
// This is a 7-bit address, that gets left-shifted and bit 0
// set to 0 for write, 1 for read (as per I2C protocol)
// The address will vary depending on your wiring:
-// 0b1110100 AD <-> GND
-// 0b1110111 AD <-> VCC
-// 0b1110101 AD <-> SCL
-// 0b1110110 AD <-> SDA
-#define DRIVER_ADDR_1 0b1110100
-#define DRIVER_ADDR_2 0b1110110
-
-#define DRIVER_COUNT 2
+// 00 AD <-> GND
+// 01 AD <-> SCL
+// 10 AD <-> SDA
+// 11 AD <-> VCC
+// ADDR represents A1:A0 of the 7-bit address.
+// The result is: 0b11101(ADDR)
+#define IS31FL3731_I2C_ADDRESS_1 IS31FL3731_I2C_ADDRESS_GND
+#define IS31FL3731_I2C_ADDRESS_2 IS31FL3731_I2C_ADDRESS_SDA
+
#define DRIVER_1_LED_TOTAL 25
#define DRIVER_2_LED_TOTAL 24
#define RGB_MATRIX_LED_COUNT (DRIVER_1_LED_TOTAL + DRIVER_2_LED_TOTAL)
@@ -50,12 +50,12 @@ Here is an example using 2 drivers.
!> Note the parentheses, this is so when `RGB_MATRIX_LED_COUNT` is used in code and expanded, the values are added together before any additional math is applied to them. As an example, `rand() % (DRIVER_1_LED_TOTAL + DRIVER_2_LED_TOTAL)` will give very different results than `rand() % DRIVER_1_LED_TOTAL + DRIVER_2_LED_TOTAL`.
-For split keyboards using `RGB_MATRIX_SPLIT` with an LED driver, you can either have the same driver address or different driver addresses. If using different addresses, use `DRIVER_ADDR_1` for one and `DRIVER_ADDR_2` for the other one. Then, in `g_is31_leds`, fill out the correct driver index (0 or 1). If using one address, use `DRIVER_ADDR_1` for both, and use index 0 for `g_is31_leds`.
+For split keyboards using `RGB_MATRIX_SPLIT` with an LED driver, you can either have the same driver address or different driver addresses. If using different addresses, use `IS31FL3731_I2C_ADDRESS_1` for one and `IS31FL3731_I2C_ADDRESS_2` for the other one. Then, in `g_is31fl3731_leds`, fill out the correct driver index (0 or 1). If using one address, use `IS31FL3731_I2C_ADDRESS_1` for both, and use index 0 for `g_is31fl3731_leds`.
Define these arrays listing all the LEDs in your `.c`:
```c
-const is31_led PROGMEM g_is31_leds[RGB_MATRIX_LED_COUNT] = {
+const is31fl3731_led_t PROGMEM g_is31fl3731_leds[RGB_MATRIX_LED_COUNT] = {
/* Refer to IS31 manual for these locations
* driver
* | R location
@@ -83,34 +83,33 @@ You can use between 1 and 4 IS31FL3733 IC's. Do not specify `DRIVER_ADDR_` de
| Variable | Description | Default |
|----------|-------------|---------|
-| `ISSI_TIMEOUT` | (Optional) How long to wait for i2c messages, in milliseconds | 100 |
-| `ISSI_PERSISTENCE` | (Optional) Retry failed messages this many times | 0 |
-| `ISSI_PWM_FREQUENCY` | (Optional) PWM Frequency Setting - IS31FL3733B only | 0 |
-| `ISSI_GLOBALCURRENT` | (Optional) Configuration for the Global Current Register | 0xFF |
-| `ISSI_SWPULLUP` | (Optional) Set the value of the SWx lines on-chip de-ghosting resistors | PUR_0R (Disabled) |
-| `ISSI_CSPULLUP` | (Optional) Set the value of the CSx lines on-chip de-ghosting resistors | PUR_0R (Disabled) |
-| `DRIVER_COUNT` | (Required) How many RGB driver IC's are present | |
+| `IS31FL3733_I2C_TIMEOUT` | (Optional) How long to wait for i2c messages, in milliseconds | 100 |
+| `IS31FL3733_I2C_PERSISTENCE` | (Optional) Retry failed messages this many times | 0 |
+| `IS31FL3733_PWM_FREQUENCY` | (Optional) PWM Frequency Setting - IS31FL3733B only | 0 |
+| `IS31FL3733_GLOBALCURRENT` | (Optional) Configuration for the Global Current Register | 0xFF |
+| `IS31FL3733_SWPULLUP` | (Optional) Set the value of the SWx lines on-chip de-ghosting resistors | PUR_0R (Disabled) |
+| `IS31FL3733_CSPULLUP` | (Optional) Set the value of the CSx lines on-chip de-ghosting resistors | PUR_0R (Disabled) |
| `RGB_MATRIX_LED_COUNT` | (Required) How many RGB lights are present across all drivers | |
-| `DRIVER_ADDR_1` | (Required) Address for the first RGB driver | |
-| `DRIVER_ADDR_2` | (Optional) Address for the second RGB driver | |
-| `DRIVER_ADDR_3` | (Optional) Address for the third RGB driver | |
-| `DRIVER_ADDR_4` | (Optional) Address for the fourth RGB driver | |
-| `DRIVER_SYNC_1` | (Optional) Sync configuration for the first RGB driver | 0 |
-| `DRIVER_SYNC_2` | (Optional) Sync configuration for the second RGB driver | 0 |
-| `DRIVER_SYNC_3` | (Optional) Sync configuration for the third RGB driver | 0 |
-| `DRIVER_SYNC_4` | (Optional) Sync configuration for the fourth RGB driver | 0 |
-
-The IS31FL3733 IC's have on-chip resistors that can be enabled to allow for de-ghosting of the RGB matrix. By default these resistors are not enabled (`ISSI_SWPULLUP`/`ISSI_CSPULLUP` are given the value of`PUR_0R`), the values that can be set to enable de-ghosting are as follows:
-
-| `ISSI_SWPULLUP/ISSI_CSPULLUP` | Description |
+| `IS31FL3733_I2C_ADDRESS_1` | (Required) Address for the first RGB driver | |
+| `IS31FL3733_I2C_ADDRESS_2` | (Optional) Address for the second RGB driver | |
+| `IS31FL3733_I2C_ADDRESS_3` | (Optional) Address for the third RGB driver | |
+| `IS31FL3733_I2C_ADDRESS_4` | (Optional) Address for the fourth RGB driver | |
+| `IS31FL3733_SYNC_1` | (Optional) Sync configuration for the first RGB driver | 0 |
+| `IS31FL3733_SYNC_2` | (Optional) Sync configuration for the second RGB driver | 0 |
+| `IS31FL3733_SYNC_3` | (Optional) Sync configuration for the third RGB driver | 0 |
+| `IS31FL3733_SYNC_4` | (Optional) Sync configuration for the fourth RGB driver | 0 |
+
+The IS31FL3733 IC's have on-chip resistors that can be enabled to allow for de-ghosting of the RGB matrix. By default these resistors are not enabled (`IS31FL3733_SWPULLUP`/`IS31FL3733_CSPULLUP` are given the value of `IS31FL3733_PUR_0R`), the values that can be set to enable de-ghosting are as follows:
+
+| `IS31FL3733_SWPULLUP/IS31FL3733_CSPULLUP` | Description |
|----------------------|-------------|
-| `PUR_0R` | (default) Do not use the on-chip resistors/enable de-ghosting |
-| `PUR_05KR` | The 0.5k Ohm resistor used during blanking period (t_NOL) |
-| `PUR_3KR` | The 3k Ohm resistor used at all times |
-| `PUR_4KR` | The 4k Ohm resistor used at all times |
-| `PUR_8KR` | The 8k Ohm resistor used at all times |
-| `PUR_16KR` | The 16k Ohm resistor used at all times |
-| `PUR_32KR` | The 32k Ohm resistor used during blanking period (t_NOL) |
+| `IS31FL3733_PUR_0R` | (default) Do not use the on-chip resistors/enable de-ghosting |
+| `IS31FL3733_PUR_05KR` | The 0.5k Ohm resistor used during blanking period (t_NOL) |
+| `IS31FL3733_PUR_3KR` | The 3k Ohm resistor used at all times |
+| `IS31FL3733_PUR_4KR` | The 4k Ohm resistor used at all times |
+| `IS31FL3733_PUR_8KR` | The 8k Ohm resistor used at all times |
+| `IS31FL3733_PUR_16KR` | The 16k Ohm resistor used at all times |
+| `IS31FL3733_PUR_32KR` | The 32k Ohm resistor used during blanking period (t_NOL) |
Here is an example using 2 drivers.
@@ -118,17 +117,16 @@ Here is an example using 2 drivers.
// This is a 7-bit address, that gets left-shifted and bit 0
// set to 0 for write, 1 for read (as per I2C protocol)
// The address will vary depending on your wiring:
-// 00 <-> GND
-// 01 <-> SCL
-// 10 <-> SDA
-// 11 <-> VCC
+// 00 ADDRn <-> GND
+// 01 ADDRn <-> SCL
+// 10 ADDRn <-> SDA
+// 11 ADDRn <-> VCC
// ADDR1 represents A1:A0 of the 7-bit address.
// ADDR2 represents A3:A2 of the 7-bit address.
// The result is: 0b101(ADDR2)(ADDR1)
-#define DRIVER_ADDR_1 0b1010000
-#define DRIVER_ADDR_2 0b1010011
+#define IS31FL3733_I2C_ADDRESS_1 IS31FL3733_I2C_ADDRESS_GND_GND
+#define IS31FL3733_I2C_ADDRESS_2 IS31FL3733_I2C_ADDRESS_GND_VCC
-#define DRIVER_COUNT 2
#define DRIVER_1_LED_TOTAL 58
#define DRIVER_2_LED_TOTAL 10
#define RGB_MATRIX_LED_COUNT (DRIVER_1_LED_TOTAL + DRIVER_2_LED_TOTAL)
@@ -141,7 +139,7 @@ Currently only 4 drivers are supported, but it would be trivial to support all 8
Define these arrays listing all the LEDs in your `.c`:
```c
-const is31_led PROGMEM g_is31_leds[RGB_MATRIX_LED_COUNT] = {
+const is31fl3733_led_t PROGMEM g_is31fl3733_leds[RGB_MATRIX_LED_COUNT] = {
/* Refer to IS31 manual for these locations
* driver
* | R location
@@ -170,31 +168,30 @@ Configure the hardware via your `config.h`:
| Variable | Description | Default |
|----------|-------------|---------|
-| `ISSI_TIMEOUT` | (Optional) How long to wait for i2c messages, in milliseconds | 100 |
-| `ISSI_PERSISTENCE` | (Optional) Retry failed messages this many times | 0 |
-| `ISSI_PWM_FREQUENCY` | (Optional) PWM Frequency Setting - IS31FL3736B only | 0 |
-| `ISSI_GLOBALCURRENT` | (Optional) Configuration for the Global Current Register | 0xFF |
-| `ISSI_SWPULLUP` | (Optional) Set the value of the SWx lines on-chip de-ghosting resistors | PUR_0R (Disabled) |
-| `ISSI_CSPULLUP` | (Optional) Set the value of the CSx lines on-chip de-ghosting resistors | PUR_0R (Disabled) |
-| `DRIVER_COUNT` | (Required) How many RGB driver IC's are present | |
+| `IS31FL3736_I2C_TIMEOUT` | (Optional) How long to wait for i2c messages, in milliseconds | 100 |
+| `IS31FL3736_PERSISTENCE` | (Optional) Retry failed messages this many times | 0 |
+| `IS31FL3736_PWM_FREQUENCY` | (Optional) PWM Frequency Setting - IS31FL3736B only | 0 |
+| `IS31FL3736_GLOBALCURRENT` | (Optional) Configuration for the Global Current Register | 0xFF |
+| `IS31FL3736_SWPULLUP` | (Optional) Set the value of the SWx lines on-chip de-ghosting resistors | PUR_0R (Disabled) |
+| `IS31FL3736_CSPULLUP` | (Optional) Set the value of the CSx lines on-chip de-ghosting resistors | PUR_0R (Disabled) |
| `RGB_MATRIX_LED_COUNT` | (Required) How many RGB lights are present across all drivers | |
-| `DRIVER_ADDR_1` | (Required) Address for the first RGB driver | |
-| `DRIVER_ADDR_2` | (Optional) Address for the second RGB driver | |
-| `DRIVER_ADDR_3` | (Optional) Address for the third RGB driver | |
-| `DRIVER_ADDR_4` | (Optional) Address for the fourth RGB driver | |
+| `IS31FL3736_I2C_ADDRESS_1` | (Required) Address for the first RGB driver | |
+| `IS31FL3736_I2C_ADDRESS_2` | (Optional) Address for the second RGB driver | |
+| `IS31FL3736_I2C_ADDRESS_3` | (Optional) Address for the third RGB driver | |
+| `IS31FL3736_I2C_ADDRESS_4` | (Optional) Address for the fourth RGB driver | |
-The IS31FL3736 IC's have on-chip resistors that can be enabled to allow for de-ghosting of the RGB matrix. By default these resistors are not enabled (`ISSI_SWPULLUP`/`ISSI_CSPULLUP` are given the value of`PUR_0R`), the values that can be set to enable de-ghosting are as follows:
+The IS31FL3736 IC's have on-chip resistors that can be enabled to allow for de-ghosting of the RGB matrix. By default these resistors are not enabled (`IS31FL3736_SWPULLUP`/`IS31FL3736_CSPULLUP` are given the value of `IS31FL3736_PUR_0R`), the values that can be set to enable de-ghosting are as follows:
-| `ISSI_SWPULLUP/ISSI_CSPULLUP` | Description |
+| `IS31FL3736_SWPULLUP/IS31FL3736_CSPULLUP` | Description |
|----------------------|-------------|
-| `PUR_0R` | (default) Do not use the on-chip resistors/enable de-ghosting |
-| `PUR_05KR` | The 0.5k Ohm resistor used during blanking period (t_NOL) |
-| `PUR_1KR` | The 1k Ohm resistor used during blanking period (t_NOL) |
-| `PUR_2KR` | The 2k Ohm resistor used during blanking period (t_NOL) |
-| `PUR_4KR` | The 4k Ohm resistor used during blanking period (t_NOL) |
-| `PUR_8KR` | The 8k Ohm resistor during blanking period (t_NOL) |
-| `PUR_16KR` | The 16k Ohm resistor during blanking period (t_NOL) |
-| `PUR_32KR` | The 32k Ohm resistor used during blanking period (t_NOL) |
+| `IS31FL3736_PUR_0R` | (default) Do not use the on-chip resistors/enable de-ghosting |
+| `IS31FL3736_PUR_05KR` | The 0.5k Ohm resistor used during blanking period (t_NOL) |
+| `IS31FL3736_PUR_1KR` | The 1k Ohm resistor used during blanking period (t_NOL) |
+| `IS31FL3736_PUR_2KR` | The 2k Ohm resistor used during blanking period (t_NOL) |
+| `IS31FL3736_PUR_4KR` | The 4k Ohm resistor used during blanking period (t_NOL) |
+| `IS31FL3736_PUR_8KR` | The 8k Ohm resistor during blanking period (t_NOL) |
+| `IS31FL3736_PUR_16KR` | The 16k Ohm resistor during blanking period (t_NOL) |
+| `IS31FL3736_PUR_32KR` | The 32k Ohm resistor used during blanking period (t_NOL) |
Here is an example using 2 drivers.
@@ -202,16 +199,16 @@ Here is an example using 2 drivers.
// This is a 7-bit address, that gets left-shifted and bit 0
// set to 0 for write, 1 for read (as per I2C protocol)
// The address will vary depending on your wiring:
-// 0000 <-> GND
-// 0101 <-> SCL
-// 1010 <-> SDA
-// 1111 <-> VCC
-// ADDR represents A3:A0 of the 7-bit address.
-// The result is: 0b101(ADDR)
-#define DRIVER_ADDR_1 0b1010000
-#define DRIVER_ADDR_2 0b1010001
+// 00 ADDRn <-> GND
+// 01 ADDRn <-> SCL
+// 10 ADDRn <-> SDA
+// 11 ADDRn <-> VCC
+// ADDR1 represents A1:A0 of the 7-bit address.
+// ADDR2 represents A3:A2 of the 7-bit address.
+// The result is: 0b101(ADDR2)(ADDR1)
+#define IS31FL3736_I2C_ADDRESS_1 IS31FL3736_I2C_ADDRESS_GND_GND
+#define IS31FL3736_I2C_ADDRESS_2 IS31FL3736_I2C_ADDRESS_GND_SCL
-#define DRIVER_COUNT 2
#define DRIVER_1_LED_TOTAL 30
#define DRIVER_2_LED_TOTAL 32
#define RGB_MATRIX_LED_COUNT (DRIVER_1_LED_TOTAL + DRIVER_2_LED_TOTAL)
@@ -221,7 +218,7 @@ Here is an example using 2 drivers.
Define these arrays listing all the LEDs in your `.c`:
```c
-const is31_led PROGMEM g_is31_leds[RGB_MATRIX_LED_COUNT] = {
+const is31fl3736_led_t PROGMEM g_is31fl3736_leds[RGB_MATRIX_LED_COUNT] = {
/* Refer to IS31 manual for these locations
* driver
* | R location
@@ -246,31 +243,30 @@ Configure the hardware via your `config.h`:
| Variable | Description | Default |
|----------|-------------|---------|
-| `ISSI_TIMEOUT` | (Optional) How long to wait for i2c messages, in milliseconds | 100 |
-| `ISSI_PERSISTENCE` | (Optional) Retry failed messages this many times | 0 |
-| `ISSI_PWM_FREQUENCY` | (Optional) PWM Frequency Setting - IS31FL3737B only | 0 |
-| `ISSI_GLOBALCURRENT` | (Optional) Configuration for the Global Current Register | 0xFF |
-| `ISSI_SWPULLUP` | (Optional) Set the value of the SWx lines on-chip de-ghosting resistors | PUR_0R (Disabled) |
-| `ISSI_CSPULLUP` | (Optional) Set the value of the CSx lines on-chip de-ghosting resistors | PUR_0R (Disabled) |
-| `DRIVER_COUNT` | (Required) How many RGB driver IC's are present | |
+| `IS31FL3737_I2C_TIMEOUT` | (Optional) How long to wait for i2c messages, in milliseconds | 100 |
+| `IS31FL3737_I2C_PERSISTENCE` | (Optional) Retry failed messages this many times | 0 |
+| `IS31FL3737_PWM_FREQUENCY` | (Optional) PWM Frequency Setting - IS31FL3737B only | 0 |
+| `IS31FL3737_GLOBALCURRENT` | (Optional) Configuration for the Global Current Register | 0xFF |
+| `IS31FL3737_SWPULLUP` | (Optional) Set the value of the SWx lines on-chip de-ghosting resistors | PUR_0R (Disabled) |
+| `IS31FL3737_CSPULLUP` | (Optional) Set the value of the CSx lines on-chip de-ghosting resistors | PUR_0R (Disabled) |
| `RGB_MATRIX_LED_COUNT` | (Required) How many RGB lights are present across all drivers | |
-| `DRIVER_ADDR_1` | (Required) Address for the first RGB driver | |
-| `DRIVER_ADDR_2` | (Optional) Address for the second RGB driver | |
-| `DRIVER_ADDR_3` | (Optional) Address for the third RGB driver | |
-| `DRIVER_ADDR_4` | (Optional) Address for the fourth RGB driver | |
+| `IS31FL3737_I2C_ADDRESS_1` | (Required) Address for the first RGB driver | |
+| `IS31FL3737_I2C_ADDRESS_2` | (Optional) Address for the second RGB driver | |
+| `IS31FL3737_I2C_ADDRESS_3` | (Optional) Address for the third RGB driver | |
+| `IS31FL3737_I2C_ADDRESS_4` | (Optional) Address for the fourth RGB driver | |
-The IS31FL3737 IC's have on-chip resistors that can be enabled to allow for de-ghosting of the RGB matrix. By default these resistors are not enabled (`ISSI_SWPULLUP`/`ISSI_CSPULLUP` are given the value of`PUR_0R`), the values that can be set to enable de-ghosting are as follows:
+The IS31FL3737 IC's have on-chip resistors that can be enabled to allow for de-ghosting of the RGB matrix. By default these resistors are not enabled (`IS31FL3737_SWPULLUP`/`IS31FL3737_CSPULLUP` are given the value of `IS31FL3737_PUR_0R`), the values that can be set to enable de-ghosting are as follows:
-| `ISSI_SWPULLUP/ISSI_CSPULLUP` | Description |
+| `IS31FL3737_SWPULLUP/IS31FL3737_CSPULLUP` | Description |
|----------------------|-------------|
-| `PUR_0R` | (default) Do not use the on-chip resistors/enable de-ghosting |
-| `PUR_05KR` | The 0.5k Ohm resistor used during blanking period (t_NOL) |
-| `PUR_1KR` | The 1k Ohm resistor used during blanking period (t_NOL) |
-| `PUR_2KR` | The 2k Ohm resistor used during blanking period (t_NOL) |
-| `PUR_4KR` | The 4k Ohm resistor used during blanking period (t_NOL) |
-| `PUR_8KR` | The 8k Ohm resistor during blanking period (t_NOL) |
-| `PUR_16KR` | The 16k Ohm resistor during blanking period (t_NOL) |
-| `PUR_32KR` | The 32k Ohm resistor used during blanking period (t_NOL) |
+| `IS31FL3737_PUR_0R` | (default) Do not use the on-chip resistors/enable de-ghosting |
+| `IS31FL3737_PUR_05KR` | The 0.5k Ohm resistor used during blanking period (t_NOL) |
+| `IS31FL3737_PUR_1KR` | The 1k Ohm resistor used during blanking period (t_NOL) |
+| `IS31FL3737_PUR_2KR` | The 2k Ohm resistor used during blanking period (t_NOL) |
+| `IS31FL3737_PUR_4KR` | The 4k Ohm resistor used during blanking period (t_NOL) |
+| `IS31FL3737_PUR_8KR` | The 8k Ohm resistor during blanking period (t_NOL) |
+| `IS31FL3737_PUR_16KR` | The 16k Ohm resistor during blanking period (t_NOL) |
+| `IS31FL3737_PUR_32KR` | The 32k Ohm resistor used during blanking period (t_NOL) |
Here is an example using 2 drivers.
@@ -278,16 +274,15 @@ Here is an example using 2 drivers.
// This is a 7-bit address, that gets left-shifted and bit 0
// set to 0 for write, 1 for read (as per I2C protocol)
// The address will vary depending on your wiring:
-// 0000 <-> GND
-// 0101 <-> SCL
-// 1010 <-> SDA
-// 1111 <-> VCC
+// 0000 ADDR <-> GND
+// 0101 ADDR <-> SCL
+// 1010 ADDR <-> SDA
+// 1111 ADDR <-> VCC
// ADDR represents A3:A0 of the 7-bit address.
// The result is: 0b101(ADDR)
-#define DRIVER_ADDR_1 0b1010000
-#define DRIVER_ADDR_2 0b1010001
+#define IS31FL3737_I2C_ADDRESS_1 IS31FL3737_I2C_ADDRESS_GND
+#define IS31FL3737_I2C_ADDRESS_2 IS31FL3737_I2C_ADDRESS_SCL
-#define DRIVER_COUNT 2
#define DRIVER_1_LED_TOTAL 30
#define DRIVER_2_LED_TOTAL 36
#define RGB_MATRIX_LED_COUNT (DRIVER_1_LED_TOTAL + DRIVER_2_LED_TOTAL)
@@ -297,7 +292,7 @@ Here is an example using 2 drivers.
Define these arrays listing all the LEDs in your `.c`:
```c
-const is31_led PROGMEM g_is31_leds[RGB_MATRIX_LED_COUNT] = {
+const is31fl3737_led_t PROGMEM g_is31fl3737_leds[RGB_MATRIX_LED_COUNT] = {
/* Refer to IS31 manual for these locations
* driver
* | R location
@@ -338,7 +333,6 @@ Configure the hardware via your `config.h`:
|----------|-------------|---------|
| `ISSI_TIMEOUT` | (Optional) How long to wait for i2c messages, in milliseconds | 100 |
| `ISSI_PERSISTENCE` | (Optional) Retry failed messages this many times | 0 |
-| `DRIVER_COUNT` | (Required) How many RGB driver IC's are present | |
| `RGB_MATRIX_LED_COUNT` | (Required) How many RGB lights are present across all drivers | |
| `DRIVER_ADDR_1` | (Optional) Address for the first RGB driver | |
| `DRIVER_ADDR_` | (Required) Address for the additional RGB drivers | |
@@ -373,7 +367,6 @@ Here is an example using 2 drivers.
```c
#define DRIVER_ADDR_2 0b0100001
-#define DRIVER_COUNT 2
#define DRIVER_1_LED_TOTAL 66
#define DRIVER_2_LED_TOTAL 42
#define RGB_MATRIX_LED_COUNT (DRIVER_1_LED_TOTAL + DRIVER_2_LED_TOTAL)
@@ -407,7 +400,7 @@ Then Define the array listing all the LEDs you want to override in your `_xxx` defines for IC's that are not present on your keyboard. You can define the following items in `config.h`:
+You can use up to 2 AW20216S IC's. Do not specify `DRIVER__xxx` defines for IC's that are not present on your keyboard. You can define the following items in `config.h`:
| Variable | Description | Default |
|----------|-------------|---------|
-| `DRIVER_1_CS` | (Required) MCU pin connected to first RGB driver chip select line | B13 |
-| `DRIVER_2_CS` | (Optional) MCU pin connected to second RGB driver chip select line | |
-| `DRIVER_1_EN` | (Required) MCU pin connected to first RGB driver hardware enable line | C13 |
-| `DRIVER_2_EN` | (Optional) MCU pin connected to second RGB driver hardware enable line | |
+| `AW20216S_CS_PIN_1` | (Required) MCU pin connected to first RGB driver chip select line | B13 |
+| `AW20216S_CS_PIN_2` | (Optional) MCU pin connected to second RGB driver chip select line | |
+| `AW20216S_EN_PIN_1` | (Required) MCU pin connected to first RGB driver hardware enable line | C13 |
+| `AW20216S_EN_PIN_2` | (Optional) MCU pin connected to second RGB driver hardware enable line | |
| `DRIVER_1_LED_TOTAL` | (Required) How many RGB lights are connected to first RGB driver | |
| `DRIVER_2_LED_TOTAL` | (Optional) How many RGB lights are connected to second RGB driver | |
-| `DRIVER_COUNT` | (Required) How many RGB driver IC's are present | |
| `RGB_MATRIX_LED_COUNT` | (Required) How many RGB lights are present across all drivers | |
-| `AW_SCALING_MAX` | (Optional) LED current scaling value (0-255, higher values mean LED is brighter at full PWM) | 150 |
-| `AW_GLOBAL_CURRENT_MAX` | (Optional) Driver global current limit (0-255, higher values means the driver may consume more power) | 150 |
-| `AW_SPI_MODE` | (Optional) Mode for SPI communication (0-3, defines polarity and phase of the clock) | 3 |
-| `AW_SPI_DIVISOR` | (Optional) Clock divisor for SPI communication (powers of 2, smaller numbers means faster communication, should not be less than 4) | 4 |
+| `AW20216S_SCALING_MAX` | (Optional) LED current scaling value (0-255, higher values mean LED is brighter at full PWM) | 150 |
+| `AW20216S_GLOBAL_CURRENT_MAX` | (Optional) Driver global current limit (0-255, higher values means the driver may consume more power) | 150 |
+| `AW20216S_SPI_MODE` | (Optional) Mode for SPI communication (0-3, defines polarity and phase of the clock) | 3 |
+| `AW20216S_SPI_DIVISOR` | (Optional) Clock divisor for SPI communication (powers of 2, smaller numbers means faster communication, should not be less than 4) | 4 |
Here is an example using 2 drivers.
```c
-#define DRIVER_1_CS B13
-#define DRIVER_2_CS B14
+#define AW20216S_CS_PIN_1 B13
+#define AW20216S_CS_PIN_2 B14
// Hardware enable lines may be connected to the same pin
-#define DRIVER_1_EN C13
-#define DRIVER_2_EN C13
+#define AW20216S_EN_PIN_1 C13
+#define AW20216S_EN_PIN_2 C13
-#define DRIVER_COUNT 2
#define DRIVER_1_LED_TOTAL 66
#define DRIVER_2_LED_TOTAL 32
#define RGB_MATRIX_LED_COUNT (DRIVER_1_LED_TOTAL + DRIVER_2_LED_TOTAL)
@@ -510,10 +501,10 @@ Here is an example using 2 drivers.
Define these arrays listing all the LEDs in your `.c`:
```c
-const aw_led PROGMEM g_aw_leds[RGB_MATRIX_LED_COUNT] = {
-/* Each AW20216 channel is controlled by a register at some offset between 0x00
+const aw20216s_led_t PROGMEM g_aw20216s_leds[RGB_MATRIX_LED_COUNT] = {
+/* Each AW20216S channel is controlled by a register at some offset between 0x00
* and 0xD7 inclusive.
- * See drivers/awinic/aw20216.h for the mapping between register offsets and
+ * See drivers/led/aw20216s.h for the mapping between register offsets and
* driver pin locations.
* driver
* | R location
@@ -642,6 +633,7 @@ enum rgb_matrix_effects {
RGB_MATRIX_DUAL_BEACON, // Full gradient spinning around center of keyboard
RGB_MATRIX_RAINBOW_BEACON, // Full tighter gradient spinning around center of keyboard
RGB_MATRIX_RAINBOW_PINWHEELS, // Full dual gradients spinning two halfs of keyboard
+ RGB_MATRIX_FLOWER_BLOOMING, // Full tighter gradient of first half scrolling left to right and second half scrolling right to left
RGB_MATRIX_RAINDROPS, // Randomly changes a single key's hue
RGB_MATRIX_JELLYBEAN_RAINDROPS, // Randomly changes a single key's hue and saturation
RGB_MATRIX_HUE_BREATHING, // Hue shifts up a slight ammount at the same time, then shifts back
@@ -654,16 +646,20 @@ enum rgb_matrix_effects {
RGB_MATRIX_DIGITAL_RAIN, // That famous computer simulation
RGB_MATRIX_SOLID_REACTIVE_SIMPLE, // Pulses keys hit to hue & value then fades value out
RGB_MATRIX_SOLID_REACTIVE, // Static single hue, pulses keys hit to shifted hue then fades to current hue
- RGB_MATRIX_SOLID_REACTIVE_WIDE // Hue & value pulse near a single key hit then fades value out
- RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE // Hue & value pulse near multiple key hits then fades value out
- RGB_MATRIX_SOLID_REACTIVE_CROSS // Hue & value pulse the same column and row of a single key hit then fades value out
- RGB_MATRIX_SOLID_REACTIVE_MULTICROSS // Hue & value pulse the same column and row of multiple key hits then fades value out
- RGB_MATRIX_SOLID_REACTIVE_NEXUS // Hue & value pulse away on the same column and row of a single key hit then fades value out
- RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS // Hue & value pulse away on the same column and row of multiple key hits then fades value out
+ RGB_MATRIX_SOLID_REACTIVE_WIDE, // Hue & value pulse near a single key hit then fades value out
+ RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE, // Hue & value pulse near multiple key hits then fades value out
+ RGB_MATRIX_SOLID_REACTIVE_CROSS, // Hue & value pulse the same column and row of a single key hit then fades value out
+ RGB_MATRIX_SOLID_REACTIVE_MULTICROSS, // Hue & value pulse the same column and row of multiple key hits then fades value out
+ RGB_MATRIX_SOLID_REACTIVE_NEXUS, // Hue & value pulse away on the same column and row of a single key hit then fades value out
+ RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS, // Hue & value pulse away on the same column and row of multiple key hits then fades value out
RGB_MATRIX_SPLASH, // Full gradient & value pulse away from a single key hit then fades value out
RGB_MATRIX_MULTISPLASH, // Full gradient & value pulse away from multiple key hits then fades value out
RGB_MATRIX_SOLID_SPLASH, // Hue & value pulse away from a single key hit then fades value out
RGB_MATRIX_SOLID_MULTISPLASH, // Hue & value pulse away from multiple key hits then fades value out
+ RGB_MATRIX_STARLIGHT, // LEDs turn on and off at random at varying brightness, maintaining user set color
+ RGB_MATRIX_STARLIGHT_DUAL_HUE, // LEDs turn on and off at random at varying brightness, modifies user set hue by +- 30
+ RGB_MATRIX_STARLIGHT_DUAL_SAT, // LEDs turn on and off at random at varying brightness, modifies user set saturation by +- 30
+ RGB_MATRIX_RIVERFLOW, // Modification to breathing animation, offset's animation depending on key location to simulate a river flowing
RGB_MATRIX_EFFECT_MAX
};
```
@@ -694,6 +690,7 @@ You can enable a single effect by defining `ENABLE_[EFFECT_NAME]` in your `confi
|`#define ENABLE_RGB_MATRIX_DUAL_BEACON` |Enables `RGB_MATRIX_DUAL_BEACON` |
|`#define ENABLE_RGB_MATRIX_RAINBOW_BEACON` |Enables `RGB_MATRIX_RAINBOW_BEACON` |
|`#define ENABLE_RGB_MATRIX_RAINBOW_PINWHEELS` |Enables `RGB_MATRIX_RAINBOW_PINWHEELS` |
+|`#define ENABLE_RGB_MATRIX_FLOWER_BLOOMING` |Enables `RGB_MATRIX_FLOWER_BLOOMING` |
|`#define ENABLE_RGB_MATRIX_RAINDROPS` |Enables `RGB_MATRIX_RAINDROPS` |
|`#define ENABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS` |Enables `RGB_MATRIX_JELLYBEAN_RAINDROPS` |
|`#define ENABLE_RGB_MATRIX_HUE_BREATHING` |Enables `RGB_MATRIX_HUE_BREATHING` |
@@ -702,6 +699,10 @@ You can enable a single effect by defining `ENABLE_[EFFECT_NAME]` in your `confi
|`#define ENABLE_RGB_MATRIX_PIXEL_FRACTAL` |Enables `RGB_MATRIX_PIXEL_FRACTAL` |
|`#define ENABLE_RGB_MATRIX_PIXEL_FLOW` |Enables `RGB_MATRIX_PIXEL_FLOW` |
|`#define ENABLE_RGB_MATRIX_PIXEL_RAIN` |Enables `RGB_MATRIX_PIXEL_RAIN` |
+|`#define ENABLE_RGB_MATRIX_STARLIGHT` |Enables `RGB_MATRIX_STARLIGHT` |
+|`#define ENABLE_RGB_MATRIX_STARLIGHT_DUAL_HUE` |Enables `RGB_MATRIX_STARLIGHT_DUAL_HUE` |
+|`#define ENABLE_RGB_MATRIX_STARLIGHT_DUAL_SAT` |Enables `RGB_MATRIX_STARLIGHT_DUAL_SAT` |
+|`#define ENABLE_RGB_MATRIX_RIVERFLOW` |Enables `RGB_MATRIX_RIVERFLOW` |
|Framebuffer Defines |Description |
|------------------------------------------------------|----------------------------------------------|
@@ -875,6 +876,7 @@ These are defined in [`color.h`](https://github.com/qmk/qmk_firmware/blob/master
#define RGB_MATRIX_DEFAULT_MODE RGB_MATRIX_CYCLE_LEFT_RIGHT // Sets the default mode, if none has been set
#define RGB_MATRIX_DEFAULT_HUE 0 // Sets the default hue value, if none has been set
#define RGB_MATRIX_DEFAULT_SAT 255 // Sets the default saturation value, if none has been set
+#define RGB_MATRIX_DEFAULT_ON true // Sets the default enabled state, if none has been set
#define RGB_MATRIX_DEFAULT_VAL RGB_MATRIX_MAXIMUM_BRIGHTNESS // Sets the default brightness value, if none has been set
#define RGB_MATRIX_DEFAULT_SPD 127 // Sets the default animation speed, if none has been set
#define RGB_MATRIX_DISABLE_KEYCODES // disables control of rgb matrix by keycodes (must use code functions to control the feature)
diff --git a/docs/feature_rgblight.md b/docs/feature_rgblight.md
index 39b7e6a6f1e1..8a64454b0db5 100644
--- a/docs/feature_rgblight.md
+++ b/docs/feature_rgblight.md
@@ -102,6 +102,7 @@ Your RGB lighting can be configured by placing these `#define`s in your `config.
|`RGBLIGHT_DEFAULT_SAT` |`UINT8_MAX` (255) |The default saturation to use upon clearing the EEPROM |
|`RGBLIGHT_DEFAULT_VAL` |`RGBLIGHT_LIMIT_VAL` |The default value (brightness) to use upon clearing the EEPROM |
|`RGBLIGHT_DEFAULT_SPD` |`0` |The default speed to use upon clearing the EEPROM |
+|`RGBLIGHT_DEFAULT_ON` |`true` |Enable RGB lighting upon clearing the EEPROM |
## Effects and Animations
@@ -370,9 +371,9 @@ If you need to change your RGB lighting in code, for example in a macro to chang
Example:
```c
-sethsv(HSV_WHITE, (LED_TYPE *)&led[0]); // led 0
-sethsv(HSV_RED, (LED_TYPE *)&led[1]); // led 1
-sethsv(HSV_GREEN, (LED_TYPE *)&led[2]); // led 2
+sethsv(HSV_WHITE, (rgb_led_t *)&led[0]); // led 0
+sethsv(HSV_RED, (rgb_led_t *)&led[1]); // led 1
+sethsv(HSV_GREEN, (rgb_led_t *)&led[2]); // led 2
rgblight_set(); // Utility functions do not call rgblight_set() automatically, so they need to be called explicitly.
```
@@ -524,7 +525,6 @@ By defining `RGBLIGHT_LED_MAP` as in the example below, you can specify the LED
```
-```
## Clipping Range
Using the `rgblight_set_clipping_range()` function, you can prepare more buffers than the actual number of LEDs, and output some of the buffers to the LEDs. This is useful if you want the split keyboard to treat left and right LEDs as logically contiguous.
@@ -544,11 +544,41 @@ In addition to setting the Clipping Range, you can use `RGBLIGHT_LED_MAP` togeth
#define RGBLED_NUM 8
#define RGBLIGHT_LED_MAP { 7, 6, 5, 4, 3, 2, 1, 0 }
-// some soruce
- rgblight_set_clipping_range(3, 4);
+// some source
+rgblight_set_clipping_range(3, 4);
```
## Hardware Modification
If your keyboard lacks onboard underglow LEDs, you may often be able to solder on an RGB LED strip yourself. You will need to find an unused pin to wire to the data pin of your LED strip. Some keyboards may break out unused pins from the MCU to make soldering easier. The other two pins, VCC and GND, must also be connected to the appropriate power pins.
+
+## Velocikey
+
+Velocikey is a feature that lets you control the speed of lighting effects (like the Rainbow Swirl effect) with the speed of your typing. The faster you type, the faster the lights will go!
+
+### Usage
+For Velocikey to take effect, there are two steps. First, when compiling your keyboard, you'll need to set `VELOCIKEY_ENABLE=yes` in `rules.mk`, e.g.:
+
+```
+MOUSEKEY_ENABLE = no
+STENO_ENABLE = no
+EXTRAKEY_ENABLE = yes
+VELOCIKEY_ENABLE = yes
+```
+
+Then, while using your keyboard, you need to also turn it on with the `VK_TOGG` keycode, which toggles the feature on and off.
+
+The following light effects will all be controlled by Velocikey when it is enabled:
+ - RGB Breathing
+ - RGB Rainbow Mood
+ - RGB Rainbow Swirl
+ - RGB Snake
+ - RGB Knight
+
+Support for LED breathing effects is planned but not available yet.
+
+ As long as Velocikey is enabled, it will control the speed regardless of any other speed setting that your RGB lights are currently on.
+
+ ### Configuration
+ Velocikey doesn't currently support any configuration via keyboard settings. If you want to adjust something like the speed increase or decay rate, you would need to edit `velocikey.c` and adjust the values there to achieve the kinds of speeds that you like.
diff --git a/docs/feature_split_keyboard.md b/docs/feature_split_keyboard.md
index 1705ea922217..8f695a2b7c7d 100644
--- a/docs/feature_split_keyboard.md
+++ b/docs/feature_split_keyboard.md
@@ -205,7 +205,7 @@ This sets the pin to be used for serial communication. If you're not using seria
However, if you are using serial and I2C on the board, you will need to set this, and to something other than D0 and D1 (as these are used for I2C communication).
```c
-#define SELECT_SOFT_SERIAL_SPEED {#}`
+#define SELECT_SOFT_SERIAL_SPEED {#}
```
If you're having issues with serial communication, you can change this value, as it controls the communication speed for serial. The default is 1, and the possible values are:
@@ -298,7 +298,7 @@ This enables transmitting the pointing device status to the master side of the s
#define SPLIT_HAPTIC_ENABLE
```
-This enables triggering of haptic feedback on the slave side of the split keyboard. For DRV2605L this will send the mode, but for solenoids it is expected that the desired mode is already set up on the slave.
+This enables the triggering of haptic feedback on the slave side of the split keyboard. This will send information to the slave side such as the mode, dwell, and whether buzz is enabled.
```c
#define SPLIT_ACTIVITY_ENABLE
diff --git a/docs/feature_stenography.md b/docs/feature_stenography.md
index df4c9c6ad353..5ca3ea945fc1 100644
--- a/docs/feature_stenography.md
+++ b/docs/feature_stenography.md
@@ -104,7 +104,7 @@ After enabling stenography and optionally selecting a protocol, you may also nee
!> If you had *explicitly* set `VIRSTER_ENABLE = no`, none of the serial stenography protocols (GeminiPR, TX Bolt) will work properly. You are expected to either set it to `yes`, remove the line from your `rules.mk` or send the steno chords yourself in an alternative way using the [provided interceptable hooks](#interfacing-with-the-code).
-In your keymap, create a new layer for Plover, that you can fill in with the [steno keycodes](#keycode-reference) (you will need to include `keymap_steno.h`, see `planck/keymaps/steno/keymap.c` for an example). Remember to create a key to switch to the layer as well as a key for exiting the layer.
+In your keymap, create a new layer for Plover, that you can fill in with the [steno keycodes](#keycode-reference). Remember to create a key to switch to the layer as well as a key for exiting the layer.
Once you have your keyboard flashed, launch Plover. Click the 'Configure...' button. In the 'Machine' tab, select the Stenotype Machine that corresponds to your desired protocol. Click the 'Configure...' button on this tab and enter the serial port or click 'Scan'. Baud rate is fine at 9600 (although you should be able to set as high as 115200 with no issues). Use the default settings for everything else (Data Bits: 8, Stop Bits: 1, Parity: N, no flow control).
@@ -149,8 +149,6 @@ At the end of this scenario given as an example, `chord` would have five bits se
## Keycode Reference :id=keycode-reference
-You must include `keymap_steno.h` to your `keymap.c` with `#include "keymap_steno.h"` before you can use these keycodes
-
> Note: TX Bolt does not support the full set of keys. The TX Bolt implementation in QMK will map the GeminiPR keys to the nearest TX Bolt key so that one key map will work for both.
|GeminiPR|TX Bolt|Steno Key|
@@ -198,7 +196,7 @@ You must include `keymap_steno.h` to your `keymap.c` with `#include "keymap_sten
|`STN_RES2`||(Reset 2)|
|`STN_PWR`||(Power)|
-If you do not want to hit two keys with one finger combined keycodes can be used. These are also defined in `keymap_steno.h`, and causes both keys to be reported as pressed or released. To use these keycodes define `STENO_COMBINEDMAP` in your `config.h` file.
+If you do not want to hit two keys with one finger combined keycodes can be used. These cause both keys to be reported as pressed or released. To use these keycodes define `STENO_COMBINEDMAP` in your `config.h` file.
|Combined key | Key1 | Key 2 |
|---------------|--------|----------|
diff --git a/docs/feature_tri_layer.md b/docs/feature_tri_layer.md
index aa6c87719ca6..ade0040cc7b1 100644
--- a/docs/feature_tri_layer.md
+++ b/docs/feature_tri_layer.md
@@ -40,7 +40,7 @@ Eg, if you wanted to set the "Adjust" layer to be layer 5, you'd add this to you
| `set_tri_layer_lower_layer(layer)` | Changes the "lower" layer*. |
| `set_tri_layer_upper_layer(layer)` | Changes the "upper" layer*. |
| `set_tri_layer_adjust_layer(layer)` | Changes the "adjust" layer*. |
-| `set_tri_layer_layers(lower, upper, adjust)` | Stes the "lower", "upper" and "adjust" layers*. |
+| `set_tri_layer_layers(lower, upper, adjust)` | Sets the "lower", "upper" and "adjust" layers*. |
| `get_tri_layer_lower_layer()` | Gets the current "lower" layer. |
| `get_tri_layer_upper_layer()` | Gets the current "upper" layer. |
| `get_tri_layer_adjust_layer()` | Gets the current "adjust" layer. |
diff --git a/docs/feature_unicode.md b/docs/feature_unicode.md
index 341084f9260a..2c6d2ef002e5 100644
--- a/docs/feature_unicode.md
+++ b/docs/feature_unicode.md
@@ -140,7 +140,7 @@ To set the list of enabled input modes, add the `UNICODE_SELECTED_MODES` define
```c
#define UNICODE_SELECTED_MODES UNICODE_MODE_LINUX
// or
-#define UNICODE_SELECTED_MODES UNICODE_MODE_MAC, UNICODE_MODE_WINCOMPOSE
+#define UNICODE_SELECTED_MODES UNICODE_MODE_MACOS, UNICODE_MODE_WINCOMPOSE
```
These modes can then be cycled through using the `UC_NEXT` and `UC_PREV` keycodes. You can also switch to any input mode, even if it is not specified in `UNICODE_SELECTED_MODES`, using their respective keycodes.
@@ -151,7 +151,7 @@ If your keyboard has working EEPROM, it will remember the last used input mode a
### ** macOS **
-**Mode Name:** `UNICODE_MODE_MAC`
+**Mode Name:** `UNICODE_MODE_MACOS`
macOS has built-in support for Unicode input as its own input source. It supports all possible code points by way of surrogate pairs for code points above `U+FFFF`.
diff --git a/docs/feature_userspace.md b/docs/feature_userspace.md
index 8c617fe33a06..aabf18e393ee 100644
--- a/docs/feature_userspace.md
+++ b/docs/feature_userspace.md
@@ -1,5 +1,7 @@
# Userspace: Sharing Code Between Keymaps
+!> Please note, userspace submissions to the upstream `qmk/qmk_firmware` repository are no longer being accepted. The userspace feature itself remains functional and can be configured locally.
+
If you use more than one keyboard with a similar keymap, you might see the benefit in being able to share code between them. Create your own folder in `users/` named the same as your keymap (ideally your GitHub username, ``) with the following structure:
* `/users//` (added to the path automatically)
diff --git a/docs/feature_velocikey.md b/docs/feature_velocikey.md
deleted file mode 100644
index aeb1865e8aff..000000000000
--- a/docs/feature_velocikey.md
+++ /dev/null
@@ -1,29 +0,0 @@
-# Velocikey
-
-Velocikey is a feature that lets you control the speed of lighting effects (like the Rainbow Swirl effect) with the speed of your typing. The faster you type, the faster the lights will go!
-
-## Usage
-For Velocikey to take effect, there are two steps. First, when compiling your keyboard, you'll need to set `VELOCIKEY_ENABLE=yes` in `rules.mk`, e.g.:
-
-```
-MOUSEKEY_ENABLE = no
-STENO_ENABLE = no
-EXTRAKEY_ENABLE = yes
-VELOCIKEY_ENABLE = yes
-```
-
-Then, while using your keyboard, you need to also turn it on with the `VK_TOGG` keycode, which toggles the feature on and off.
-
-The following light effects will all be controlled by Velocikey when it is enabled:
- - RGB Breathing
- - RGB Rainbow Mood
- - RGB Rainbow Swirl
- - RGB Snake
- - RGB Knight
-
-Support for LED breathing effects is planned but not available yet.
-
- As long as Velocikey is enabled, it will control the speed regardless of any other speed setting that your RGB lights are currently on.
-
- ## Configuration
- Velocikey doesn't currently support any configuration via keyboard settings. If you want to adjust something like the speed increase or decay rate, you would need to edit `velocikey.c` and adjust the values there to achieve the kinds of speeds that you like.
diff --git a/docs/i2c_driver.md b/docs/i2c_driver.md
index 92b666b5e34a..faff0a1d7bfa 100644
--- a/docs/i2c_driver.md
+++ b/docs/i2c_driver.md
@@ -2,6 +2,18 @@
The I2C Master drivers used in QMK have a set of common functions to allow portability between MCUs.
+## Usage :id=usage
+
+In most cases, the I2C Master driver code is automatically included if you are using a feature or driver which requires it, such as [OLED](feature_oled_driver.md).
+
+However, if you need to use the driver standalone, add the following to your `rules.mk`:
+
+```make
+I2C_DRIVER_REQUIRED = yes
+```
+
+You can then call the I2C API by including `i2c_master.h` in your code.
+
## I2C Addressing :id=note-on-i2c-addresses
All of the addresses expected by this driver should be pushed to the upper 7 bits of the address byte. Setting
diff --git a/docs/ja/_summary.md b/docs/ja/_summary.md
index 4d6f2348d5cf..f26665e61431 100644
--- a/docs/ja/_summary.md
+++ b/docs/ja/_summary.md
@@ -112,7 +112,6 @@
* [分割キーボード](ja/feature_split_keyboard.md)
* [速記](ja/feature_stenography.md)
* [感熱式プリンタ](ja/feature_thermal_printer.md)
- * [Velocikey](ja/feature_velocikey.md)
* QMK の開発
* [PR チェックリスト](ja/pr_checklist.md)
diff --git a/docs/ja/contributing.md b/docs/ja/contributing.md
index 56cc4d312daa..ef1271ad160b 100644
--- a/docs/ja/contributing.md
+++ b/docs/ja/contributing.md
@@ -110,11 +110,11 @@ enum my_keycodes {
開発環境をセットアップした場合は、プルリクエストを開く前に以下のコマンドを `qmk_firmware/` フォルダから実行することで、あなたの変更をプレビューすることができます:
- ./bin/qmk docs
+ qmk docs
または、Python 3 のみがインストールされている場合:
- python3 -m http.server 8936
+ python3 -m http.server 8936 --directory docs
その後、ウェブブラウザで、`http://localhost:8936/` を表示します。
diff --git a/docs/ja/feature_velocikey.md b/docs/ja/feature_velocikey.md
deleted file mode 100644
index b13969a195e7..000000000000
--- a/docs/ja/feature_velocikey.md
+++ /dev/null
@@ -1,34 +0,0 @@
-# Velocikey
-
-
-
-Velocikey は入力の速度を使って(レインボー渦巻効果のような)ライト効果の速度を制御できる機能です。速く入力すればするほどライトが速くなります!
-
-## 使用法
-Velocikey を使うためには、2つのステップがあります。最初に、キーボードをコンパイルする時に、`rules.mk` に `VELOCIKEY_ENABLE=yes` を設定する必要があります。例えば:
-
-```
-MOUSEKEY_ENABLE = no
-STENO_ENABLE = no
-EXTRAKEY_ENABLE = yes
-VELOCIKEY_ENABLE = yes
-```
-
-次に、キーボードの使用中に、VLK_TOG キーコードを使って Velocikey を有効にする必要もあります。これは機能をオンおよびオフにします。
-
-以下の全てのライト効果が、Velocikey を有効にすることで制御されます:
-- RGB 明滅動作
-- RGB レインボームード
-- RGB レインボー渦巻
-- RGB スネーク
-- RGB ナイト
-
-LED 明滅動作の効果のサポートは計画されていますがまだ利用できません。
-
-Velocikey が有効になっている限り、現在オンになっている RGB ライトの他の全ての速度設定に関係なく、速度が制御されます。
-
-## 設定
-Velocikey は現在のところキーボード設定を介したどのような設定もサポートしません。速度の増加あるいは減少率などを調整したい場合は、`velocikey.c` を編集し、そこで値を調整して、好みの速度を実現する必要があります。
diff --git a/docs/ja/tap_hold.md b/docs/ja/tap_hold.md
index 00b80c8b22ca..c9d94d07ce2e 100644
--- a/docs/ja/tap_hold.md
+++ b/docs/ja/tap_hold.md
@@ -160,7 +160,7 @@ bool get_retro_tapping(uint16_t keycode, keyrecord_t *record) {
「キー別」の関数全てにキーレコードを含んでいることに気付いたかもしれません。そしてなぜそうしたのか不思議に思っているかもしれません。
-まぁ、それは単純に本当にカスタマイズのためです。ただし、具体的には、それはキーボードの配線方法によって異なります。例えば、各行が実際にキーボードのマトリックスの1行を使っている場合、キーコード全体をチェックする代わりに、`if (record->event.row == 3)` を使うほうが簡単かもしれません。これは、ホームキー行でタップホールドタイプのキーを使っている人にとって特に便利です。そのため、通常のタイピングを妨げないように微調整することができるのではないでしょうか。
+まぁ、それは単純に本当にカスタマイズのためです。ただし、具体的には、それはキーボードの配線方法によって異なります。例えば、各行が実際にキーボードのマトリックスの1行を使っている場合、キーコード全体をチェックする代わりに、`if (record->event.key.row == 3)` を使うほうが簡単かもしれません。これは、ホームキー行でタップホールドタイプのキーを使っている人にとって特に便利です。そのため、通常のタイピングを妨げないように微調整することができるのではないでしょうか。
## `*_kb` や `*_user` 関数が無いのはなぜですか?
diff --git a/docs/keymap.md b/docs/keymap.md
index f9d45b32676c..b9c5da6be704 100644
--- a/docs/keymap.md
+++ b/docs/keymap.md
@@ -125,7 +125,7 @@ At the top of the file you'll find this:
These are some handy definitions we can use when building our keymap and our custom function. The `GRAVE_MODS` definition will be used later in our custom function, and the following `_BL`, `_FL`, and `_CL` defines make it easier to refer to each of our layers.
-Note: You may also find some older keymap files may also have a define(s) for `_______` and/or `XXXXXXX`. These can be used in place for `KC_TRNS` and `KC_NO` respectively, making it easier to see what keys a layer is overriding. These definitions are now unecessary, as they are included by default.
+Note: You may also find some older keymap files may also have a define(s) for `_______` and/or `XXXXXXX`. These can be used in place for `KC_TRNS` and `KC_NO` respectively, making it easier to see what keys a layer is overriding. These definitions are now unnecessary, as they are included by default.
### Layers and Keymaps
diff --git a/docs/newbs_building_firmware_workflow.md b/docs/newbs_building_firmware_workflow.md
index e0cfdc77dfae..a3cc53ad8653 100644
--- a/docs/newbs_building_firmware_workflow.md
+++ b/docs/newbs_building_firmware_workflow.md
@@ -143,13 +143,13 @@ Replace `username.json` with the JSON file name that was downloaded from [QMK Co
If you have completed all steps correctly, the folder `qmk_keymap/` will contain the following files:
```
-|-- .github
-| `-- workflows
-| `-- build.yml
-|-- rules.mk
-|-- config.h
-|-- source.c
-|-- username.json
+├── .github
+│ └── workflows
+│ └── build.yml
+├── rules.mk
+├── config.h
+├── source.c
+└── username.json
```
To commit and push them into GitHub, run the following commands (replacing `gh-username` with your GitHub user name):
diff --git a/docs/newbs_external_userspace.md b/docs/newbs_external_userspace.md
new file mode 100644
index 000000000000..9bdf4b0b185c
--- /dev/null
+++ b/docs/newbs_external_userspace.md
@@ -0,0 +1,96 @@
+# External QMK Userspace
+
+QMK Firmware now officially supports storing user keymaps outside of the normal QMK Firmware repository, allowing users to maintain their own keymaps without having to fork, modify, and maintain a copy of QMK Firmware themselves.
+
+External Userspace mirrors the structure of the main QMK Firmware repository, but only contains the keymaps that you wish to build. You can still use `keyboards//keymaps/` to store your keymaps, or you can use the `layouts//` system as before -- they're just stored external to QMK Firmware.
+
+The build system will still honor the use of `users/` if you rely on the traditional QMK Firmware [userspace feature](feature_userspace.md) -- it's now supported externally too, using the same location inside the External Userspace directory.
+
+Additionally, there is first-class support for using GitHub Actions to build your keymaps, allowing you to automatically compile your keymaps whenever you push changes to your External Userspace repository.
+
+!> External Userspace is new functionality and may have issues. Tighter integration with the `qmk` command will occur over time.
+
+?> Historical keymap.json and GitHub-based firmware build instructions can be found [here](newbs_building_firmware_workflow.md). This document supersedes those instructions, but they should still function correctly.
+
+## Setting up QMK Locally
+
+If you wish to build on your local machine, you will need to set up QMK locally. This is a one-time process, and is documented in the [newbs setup guide](https://docs.qmk.fm/#/newbs).
+
+!> If you wish to use any QMK CLI commands related to manipulating External Userspace definitions, you will currently need a copy of QMK Firmware as well.
+
+!> Building locally has a much shorter turnaround time than waiting for GitHub Actions to complete.
+
+## External Userspace Repository Setup (forked on GitHub)
+
+A basic skeleton External Userspace repository can be found [here](https://github.com/qmk/qmk_userspace). If you wish to keep your keymaps on GitHub (strongly recommended!), you can fork the repository and use it as a base:
+
+![Userspace Fork](https://i.imgur.com/hcegguh.png)
+
+Going ahead with your fork will copy it to your account, at which point you can clone it to your local machine and begin adding your keymaps:
+
+![Userspace Clone](https://i.imgur.com/CWYmsk8.png)
+
+```sh
+cd $HOME
+git clone https://github.com/{myusername}/qmk_userspace.git
+qmk config user.overlay_dir="$(realpath qmk_userspace)"
+```
+
+## External Userspace Setup (locally stored only)
+
+If you don't want to use GitHub and prefer to keep everything local, you can clone a copy of the default External Userspace locally instead:
+
+```sh
+cd $HOME
+git clone https://github.com/qmk/qmk_userspace.git
+qmk config user.overlay_dir="$(realpath qmk_userspace)"
+```
+
+## Adding a Keymap
+
+_These instructions assume you have already set up QMK locally, and have a copy of the QMK Firmware repository on your machine._
+
+Keymaps within External Userspace are defined in the same way as they are in the main QMK repository. You can either use the `qmk new-keymap` command to create a new keymap, or manually create a new directory in the `keyboards` directory.
+
+Alternatively, you can use the `layouts` directory to store your keymaps, using the same layout system as the main QMK repository -- if you choose to do so you'll want to use the path `layouts///keymap.*` to store your keymap files, where `layout name` matches an existing layout in QMK, such as `tkl_ansi`.
+
+After creating your new keymap, building the keymap matches normal QMK usage:
+
+```sh
+qmk compile -kb -km
+```
+
+!> The `qmk config user.overlay_dir=...` command must have been run when cloning the External Userspace repository for this to work correctly.
+
+## Adding the keymap to External Userspace build targets
+
+Once you have created your keymap, if you want to use GitHub Actions to build your firmware, you will need to add it to the External Userspace build targets. This is done using the `qmk userspace-add` command:
+
+```sh
+# for a keyboard/keymap combo:
+qmk userspace-add -kb -km
+# or, for a json-based keymap (if kept "loose"):
+qmk userspace-add
+```
+
+This updates the `qmk.json` file in the root of your External Userspace directory. If you're using a git repository to store your keymaps, now is a great time to commit and push to your own fork.
+
+## Compiling External Userspace build targets
+
+Once you have added your keymaps to the External Userspace build targets, you can compile all of them at once using the `qmk userspace-compile` command:
+
+```sh
+qmk userspace-compile
+```
+
+All firmware builds you've added to the External Userspace build targets will be built, and the resulting firmware files will be placed in the root of your External Userspace directory.
+
+## Using GitHub Actions
+
+GitHub Actions can be used to automatically build your keymaps whenever you push changes to your External Userspace repository. If you have set up your list of build targets, this is as simple as enabling workflows in the GitHub repository settings:
+
+![Repo Settings](https://i.imgur.com/EVkxOt1.png)
+
+Any push will result in compilation of all configured builds, and once completed a new release containing the newly-minted firmware files will be created on GitHub, which you can subsequently download and flash to your keyboard:
+
+![Releases](https://i.imgur.com/zmwOL5P.png)
diff --git a/docs/newbs_getting_started.md b/docs/newbs_getting_started.md
index a16207f267b1..68e37679b80b 100644
--- a/docs/newbs_getting_started.md
+++ b/docs/newbs_getting_started.md
@@ -56,7 +56,7 @@ QMK maintains a Homebrew tap and formula which will automatically install the CL
You will need to install Homebrew. Follow the instructions on https://brew.sh.
-!> **NOTE:** If you are using Apple Silicon, such as the M1, you will need to install a rosetta compatible version of Homebrew. This version does not override the base Homebrew. This can be done by running `arch -x86_64 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"`. See here: [Rosetta-compatible Homebrew](https://stackoverflow.com/questions/64882584/how-to-run-the-homebrew-installer-under-rosetta-2-on-m1-macbook)
+?> If you are using an Apple Silicon machine, the installation process will take significantly longer because GitHub actions do not have native runners to build binary packages for the ARM and AVR toolchains.
#### Installation
@@ -64,10 +64,6 @@ Install the QMK CLI by running:
brew install qmk/qmk/qmk
-Install the QMK CLI on an Apple Silicon Mac by running:
-
- arch -x86_64 brew install qmk/qmk/qmk
-
### ** Linux/WSL **
?> **Note for WSL users**: By default, the installation process will clone the QMK repository into your WSL home directory, but if you have cloned manually, ensure that it is located inside the WSL instance instead of the Windows filesystem (ie. not in `/mnt`), as accessing it is currently [extremely slow](https://github.com/microsoft/WSL/issues/4197).
diff --git a/docs/pr_checklist.md b/docs/pr_checklist.md
index 9bf1b8d0056c..6a0ae3159768 100644
--- a/docs/pr_checklist.md
+++ b/docs/pr_checklist.md
@@ -39,12 +39,13 @@ If there are any inconsistencies with these recommendations, you're best off [cr
## Keymap PRs
-Note that personal keymap submissions will no longer be accepted. This section applies to manufacturer-supported keymaps.
+!> Note that personal keymap submissions will no longer be accepted. This section applies to manufacturer-supported keymaps. Please see this [issue](https://github.com/qmk/qmk_firmware/issues/22724) for more information.
-- `#include QMK_KEYBOARD_H` preferred to including specific board files
-- prefer layer `enum`s to `#define`s
-- custom keycode `enum`s must have first entry `= SAFE_RANGE`
-- terminating backslash (`\`) in lines of LAYOUT macro parameters is superfluous and should be removed
+- PRs for vendor specific keymaps will be permitted. The naming convention for these should be `default_${vendor}`, `via_${vendor}` i.e. `via_clueboard`.
+ - vendor specific keymaps do not necessarily need to be "vanilla" and can be more richly featured than `default` or `via` stock keymaps.
+- #include QMK_KEYBOARD_H preferred to including specific board files
+- prefer layer enums to #defines
+- custom keycode enums must have first entry = SAFE_RANGE
- some care with spacing (e.g., alignment on commas or first char of keycodes) makes for a much nicer-looking keymap
## Keyboard PRs
@@ -103,7 +104,7 @@ https://github.com/qmk/qmk_firmware/pulls?q=is%3Apr+is%3Aclosed+label%3Akeyboard
- keyboard `config.h`
- no `#define DESCRIPTION`
- no Magic Key Options, MIDI Options or HD44780 configuration
- - user preference configurable `#define`s need to be moved to keymap `config.h`
+ - user preference configurable `#define`s should not be placed at the keyboard level
- default values should not be redefined, such as `DEBOUNCE`, RGB related settings, etc.
- feature specific documentation contains most default values
- `grep` or alternative tool can be used to search for default values in core directories (e.g. `grep -r "define DEBOUNCE" quantum`)
@@ -117,8 +118,7 @@ https://github.com/qmk/qmk_firmware/pulls?q=is%3Apr+is%3Aclosed+label%3Akeyboard
- mirroring existing functionality of a commercial board (like custom keycodes and special animations etc.) should be handled through non-`default` keymaps
- Vial-related files or changes will not be accepted, as they are not used by QMK firmware (no Vial-specific core code has been submitted or merged)
- `.c`
- - empty `xxxx_xxxx_kb()` or other weak-defined default implemented functions removed
- - empty `xxxx_xxxx_user()` or other user-level functions are disallowed at the keyboard level and must be moved to keymaps
+ - empty `xxxx_xxxx_kb()`, `xxxx_xxxx_user()`, or other weak-defined default implemented functions removed
- commented-out functions removed too
- `matrix_init_board()` etc. migrated to `keyboard_pre_init_kb()`, see: [keyboard_pre_init*](custom_quantum_functions.md?id=keyboard_pre_init_-function-documentation)
- prefer `CUSTOM_MATRIX = lite` if custom matrix used, allows for standard debounce, see [custom matrix 'lite'](custom_matrix.md?id=lite)
@@ -138,7 +138,7 @@ https://github.com/qmk/qmk_firmware/pulls?q=is%3Apr+is%3Aclosed+label%3Akeyboard
- standard layouts preferred in these keymaps, if possible
- should use [encoder map feature](https://docs.qmk.fm/#/feature_encoders?id=encoder-map), rather than `encoder_update_user()`
- default keymap should not enable VIA -- the VIA integration documentation requires a keymap called `via`
-- submitters can have a personal (or bells-and-whistles) keymap showcasing capabilities in the same PR but it shouldn't be embedded in the 'default' keymap
+- submitters can add an example (or bells-and-whistles) keymap showcasing capabilities in the same PR but it shouldn't be embedded in the 'default' keymap
- submitters can also have a "manufacturer-matching" keymap that mirrors existing functionality of the commercial product, if porting an existing board
- Do not include VIA json files in the PR. These do not belong in the QMK repository as they are not used by QMK firmware -- they belong in the [VIA Keyboard Repo](https://github.com/the-via/keyboards)
- Do not include KLE json files in the PR. These have no use within QMK.
diff --git a/docs/quantum_painter.md b/docs/quantum_painter.md
index 5e399183f8b2..181abf8bb37b 100644
--- a/docs/quantum_painter.md
+++ b/docs/quantum_painter.md
@@ -13,22 +13,24 @@ QUANTUM_PAINTER_DRIVERS += ......
You will also likely need to select an appropriate driver in `rules.mk`, which is listed below.
-!> Quantum Painter is not currently integrated with system-level operations such as disabling displays after a configurable timeout, or when the keyboard goes into suspend. Users will need to handle this manually at the current time.
+!> Quantum Painter is not currently integrated with system-level operations such as when the keyboard goes into suspend. Users will need to handle this manually at the current time.
The QMK CLI can be used to convert from normal images such as PNG files or animated GIFs, as well as fonts from TTF files.
Supported devices:
-| Display Panel | Panel Type | Size | Comms Transport | Driver |
-|----------------|--------------------|------------------|-----------------|---------------------------------------------|
-| GC9A01 | RGB LCD (circular) | 240x240 | SPI + D/C + RST | `QUANTUM_PAINTER_DRIVERS += gc9a01_spi` |
-| ILI9163 | RGB LCD | 128x128 | SPI + D/C + RST | `QUANTUM_PAINTER_DRIVERS += ili9163_spi` |
-| ILI9341 | RGB LCD | 240x320 | SPI + D/C + RST | `QUANTUM_PAINTER_DRIVERS += ili9341_spi` |
-| ILI9488 | RGB LCD | 320x480 | SPI + D/C + RST | `QUANTUM_PAINTER_DRIVERS += ili9488_spi` |
-| SSD1351 | RGB OLED | 128x128 | SPI + D/C + RST | `QUANTUM_PAINTER_DRIVERS += ssd1351_spi` |
-| ST7735 | RGB LCD | 132x162, 80x160 | SPI + D/C + RST | `QUANTUM_PAINTER_DRIVERS += st7735_spi` |
-| ST7789 | RGB LCD | 240x320, 240x240 | SPI + D/C + RST | `QUANTUM_PAINTER_DRIVERS += st7789_spi` |
-| RGB565 Surface | Virtual | User-defined | None | `QUANTUM_PAINTER_DRIVERS += rgb565_surface` |
+| Display Panel | Panel Type | Size | Comms Transport | Driver |
+|---------------|--------------------|------------------|-----------------|------------------------------------------|
+| GC9A01 | RGB LCD (circular) | 240x240 | SPI + D/C + RST | `QUANTUM_PAINTER_DRIVERS += gc9a01_spi` |
+| ILI9163 | RGB LCD | 128x128 | SPI + D/C + RST | `QUANTUM_PAINTER_DRIVERS += ili9163_spi` |
+| ILI9341 | RGB LCD | 240x320 | SPI + D/C + RST | `QUANTUM_PAINTER_DRIVERS += ili9341_spi` |
+| ILI9488 | RGB LCD | 320x480 | SPI + D/C + RST | `QUANTUM_PAINTER_DRIVERS += ili9488_spi` |
+| SSD1351 | RGB OLED | 128x128 | SPI + D/C + RST | `QUANTUM_PAINTER_DRIVERS += ssd1351_spi` |
+| ST7735 | RGB LCD | 132x162, 80x160 | SPI + D/C + RST | `QUANTUM_PAINTER_DRIVERS += st7735_spi` |
+| ST7789 | RGB LCD | 240x320, 240x240 | SPI + D/C + RST | `QUANTUM_PAINTER_DRIVERS += st7789_spi` |
+| SH1106 (SPI) | Monochrome OLED | 128x64 | SPI + D/C + RST | `QUANTUM_PAINTER_DRIVERS += sh1106_spi` |
+| SH1106 (I2C) | Monochrome OLED | 128x64 | I2C | `QUANTUM_PAINTER_DRIVERS += sh1106_i2c` |
+| Surface | Virtual | User-defined | None | `QUANTUM_PAINTER_DRIVERS += surface` |
## Quantum Painter Configuration :id=quantum-painter-config
@@ -188,7 +190,8 @@ Writing /home/qmk/qmk_firmware/keyboards/my_keeb/generated/noto11.qff.c...
-### ** Common: Standard TFT (SPI + D/C + RST) **
+
+### ** LCD **
Most TFT display panels use a 5-pin interface -- SPI SCK, SPI MOSI, SPI CS, D/C, and RST pins.
@@ -302,32 +305,6 @@ The maximum number of displays can be configured by changing the following in yo
Native color format rgb888 is compatible with ILI9488
-#### ** SSD1351 **
-
-Enabling support for the SSD1351 in Quantum Painter is done by adding the following to `rules.mk`:
-
-```make
-QUANTUM_PAINTER_ENABLE = yes
-QUANTUM_PAINTER_DRIVERS += ssd1351_spi
-```
-
-Creating a SSD1351 device in firmware can then be done with the following API:
-
-```c
-painter_device_t qp_ssd1351_make_spi_device(uint16_t panel_width, uint16_t panel_height, pin_t chip_select_pin, pin_t dc_pin, pin_t reset_pin, uint16_t spi_divisor, int spi_mode);
-```
-
-The device handle returned from the `qp_ssd1351_make_spi_device` function can be used to perform all other drawing operations.
-
-The maximum number of displays can be configured by changing the following in your `config.h` (default is 1):
-
-```c
-// 3 displays:
-#define SSD1351_NUM_DEVICES 3
-```
-
-Native color format rgb565 is compatible with SSD1351
-
#### ** ST7735 **
Enabling support for the ST7735 in Quantum Painter is done by adding the following to `rules.mk`:
@@ -386,62 +363,139 @@ Native color format rgb565 is compatible with ST7789
-### ** Common: Surfaces **
+### ** OLED **
-Quantum Painter has surface drivers which are able to target a buffer in RAM. In general, surfaces keep track of the "dirty" region -- the area that has been drawn to since the last flush -- so that when transferring to the display they can transfer the minimal amount of data to achieve the end result.
+OLED displays tend to use 5-pin SPI when at larger resolutions, or when using color -- SPI SCK, SPI MOSI, SPI CS, D/C, and RST pins. Smaller OLEDs may use I2C instead.
-!> These generally require significant amounts of RAM, so at large sizes and/or higher bit depths, they may not be usable on all MCUs.
+When using these displays, either `spi_master` or `i2c_master` must already be correctly configured for both the platform and panel you're building for.
+
+For SPI, the pin assignments for SPI CS, D/C, and RST are specified during device construction -- for I2C the panel's address is specified instead.
-#### ** RGB565 Surface **
+#### ** SSD1351 **
+
+Enabling support for the SSD1351 in Quantum Painter is done by adding the following to `rules.mk`:
+
+```make
+QUANTUM_PAINTER_ENABLE = yes
+QUANTUM_PAINTER_DRIVERS += ssd1351_spi
+```
+
+Creating a SSD1351 device in firmware can then be done with the following API:
+
+```c
+painter_device_t qp_ssd1351_make_spi_device(uint16_t panel_width, uint16_t panel_height, pin_t chip_select_pin, pin_t dc_pin, pin_t reset_pin, uint16_t spi_divisor, int spi_mode);
+```
+
+The device handle returned from the `qp_ssd1351_make_spi_device` function can be used to perform all other drawing operations.
+
+The maximum number of displays can be configured by changing the following in your `config.h` (default is 1):
+
+```c
+// 3 displays:
+#define SSD1351_NUM_DEVICES 3
+```
+
+Native color format rgb565 is compatible with SSD1351
+
+#### ** SH1106 **
-Enabling support for RGB565 surfaces in Quantum Painter is done by adding the following to `rules.mk`:
+Enabling support for the SH1106 in Quantum Painter is done by adding the following to `rules.mk`:
```make
QUANTUM_PAINTER_ENABLE = yes
-QUANTUM_PAINTER_DRIVERS += rgb565_surface
+# For SPI:
+QUANTUM_PAINTER_DRIVERS += sh1106_spi
+# For I2C:
+QUANTUM_PAINTER_DRIVERS += sh1106_i2c
```
-Creating a RGB565 surface in firmware can then be done with the following API:
+Creating a SH1106 device in firmware can then be done with the following APIs:
```c
-painter_device_t qp_rgb565_make_surface(uint16_t panel_width, uint16_t panel_height, void *buffer);
+// SPI-based SH1106:
+painter_device_t qp_sh1106_make_spi_device(uint16_t panel_width, uint16_t panel_height, pin_t chip_select_pin, pin_t dc_pin, pin_t reset_pin, uint16_t spi_divisor, int spi_mode);
+// I2C-based SH1106:
+painter_device_t qp_sh1106_make_i2c_device(uint16_t panel_width, uint16_t panel_height, uint8_t i2c_address);
```
-The `buffer` is a user-supplied area of memory, and is assumed to be of the size `sizeof(uint16_t) * panel_width * panel_height`.
+The device handle returned from the `qp_sh1106_make_???_device` function can be used to perform all other drawing operations.
+
+The maximum number of displays of each type can be configured by changing the following in your `config.h` (default is 1):
+
+```c
+// 3 SPI displays:
+#define SH1106_NUM_SPI_DEVICES 3
+// 3 I2C displays:
+#define SH1106_NUM_I2C_DEVICES 3
+```
+
+Native color format mono2 is compatible with SH1106
+
+
+
+### ** Surface **
-The device handle returned from the `qp_rgb565_make_surface` function can be used to perform all other drawing operations.
+Quantum Painter has a surface driver which is able to target a buffer in RAM. In general, surfaces keep track of the "dirty" region -- the area that has been drawn to since the last flush -- so that when transferring to the display they can transfer the minimal amount of data to achieve the end result.
+
+!> These generally require significant amounts of RAM, so at large sizes and/or higher bit depths, they may not be usable on all MCUs.
+
+Enabling support for surfaces in Quantum Painter is done by adding the following to `rules.mk`:
+
+```make
+QUANTUM_PAINTER_ENABLE = yes
+QUANTUM_PAINTER_DRIVERS += surface
+```
+
+Creating a surface in firmware can then be done with the following APIs:
+
+```c
+// 16bpp RGB565 surface:
+painter_device_t qp_make_rgb565_surface(uint16_t panel_width, uint16_t panel_height, void *buffer);
+// 1bpp monochrome surface:
+painter_device_t qp_make_mono1bpp_surface(uint16_t panel_width, uint16_t panel_height, void *buffer);
+```
+
+The `buffer` is a user-supplied area of memory, which can be statically allocated using `SURFACE_REQUIRED_BUFFER_BYTE_SIZE`:
+
+```c
+// Buffer required for a 240x80 16bpp surface:
+uint8_t framebuffer[SURFACE_REQUIRED_BUFFER_BYTE_SIZE(240, 80, 16)];
+```
+
+The device handle returned from the `qp_make_?????_surface` function can be used to perform all other drawing operations.
Example:
```c
static painter_device_t my_surface;
-static uint16_t my_framebuffer[320 * 240]; // Allocate a buffer for a 320x240 RGB565 display
+static uint8_t my_framebuffer[SURFACE_REQUIRED_BUFFER_BYTE_SIZE(240, 80, 16)]; // Allocate a buffer for a 16bpp 240x80 RGB565 display
void keyboard_post_init_kb(void) {
- my_surface = qp_rgb565_make_surface(320, 240, my_framebuffer);
+ my_surface = qp_rgb565_make_surface(240, 80, my_framebuffer);
qp_init(my_surface, QP_ROTATION_0);
+ keyboard_post_init_user();
}
```
-The maximum number of RGB565 surfaces can be configured by changing the following in your `config.h` (default is 1):
+The maximum number of surfaces can be configured by changing the following in your `config.h` (default is 1):
```c
// 3 surfaces:
-#define RGB565_SURFACE_NUM_DEVICES 3
+#define SURFACE_NUM_DEVICES 3
```
-To transfer the contents of the RGB565 surface to another display, the following API can be invoked:
+To transfer the contents of the surface to another display of the same pixel format, the following API can be invoked:
```c
-bool qp_rgb565_surface_draw(painter_device_t surface, painter_device_t display, uint16_t x, uint16_t y);
+bool qp_surface_draw(painter_device_t surface, painter_device_t display, uint16_t x, uint16_t y, bool entire_surface);
```
-The `surface` is the surface to copy out from. The `display` is the target display to draw into. `x` and `y` are the target location to draw the surface pixel data. Under normal circumstances, the location should be consistent, as the dirty region is calculated with respect to the `x` and `y` coordinates -- changing those will result in partial, overlapping draws.
+The `surface` is the surface to copy out from. The `display` is the target display to draw into. `x` and `y` are the target location to draw the surface pixel data. Under normal circumstances, the location should be consistent, as the dirty region is calculated with respect to the `x` and `y` coordinates -- changing those will result in partial, overlapping draws. `entire_surface` whether the entire surface should be drawn, instead of just the dirty region.
-?> Calling `qp_flush()` on the surface resets its dirty region. Copying the surface contents to the display also automatically resets the dirty region.
+!> The surface and display panel must have the same native pixel format.
-
+?> Calling `qp_flush()` on the surface resets its dirty region. Copying the surface contents to the display also automatically resets the dirty region.
@@ -857,13 +911,52 @@ void keyboard_post_init_kb(void) {
-#### ** Get Geometry **
+#### ** Gettters **
+
+These functions allow external code to retrieve the current width, height, rotation, and drawing offsets.
+
+
+
+#### ** Width **
+
+```c
+uint16_t qp_get_width(painter_device_t device);
+```
+
+#### ** Height **
+
+```c
+uint16_t qp_get_height(painter_device_t device);
+```
+
+#### ** Rotation **
+
+```c
+painter_rotation_t qp_get_rotation(painter_device_t device);
+```
+
+#### ** Offset X **
+
+```c
+uint16_t qp_get_offset_x(painter_device_t device);
+```
+
+#### ** Offset Y **
+
+```c
+uint16_t qp_get_offset_y(painter_device_t device);
+```
+
+##### ** Everything **
+
+Convenience function to call all the previous ones at once.
+Note: You can pass `NULL` for the values you are not interested in.
```c
void qp_get_geometry(painter_device_t device, uint16_t *width, uint16_t *height, painter_rotation_t *rotation, uint16_t *offset_x, uint16_t *offset_y);
```
-The `qp_get_geometry` function allows external code to retrieve the current width, height, rotation, and drawing offsets.
+
#### ** Set Viewport Offsets **
diff --git a/docs/quantum_painter_lvgl.md b/docs/quantum_painter_lvgl.md
index 4d10160baf4b..b4f31ad4af8a 100644
--- a/docs/quantum_painter_lvgl.md
+++ b/docs/quantum_painter_lvgl.md
@@ -53,3 +53,11 @@ The `qp_lvgl_detach` function stops the internal LVGL ticks and releases resourc
## Enabling/Disabling LVGL features :id=lvgl-configuring
You can overwrite LVGL specific features in your `lv_conf.h` file.
+
+## Changing the LVGL task frequency
+
+When LVGL is running, your keyboard's responsiveness may decrease, causing missing keystrokes or encoder rotations, especially during the animation of dynamically-generated content. This occurs because LVGL operates as a scheduled task with a default task rate of five milliseconds. While a fast task rate is advantageous when LVGL is responsible for detecting and processing inputs, it can lead to excessive recalculations of displayed content, which may slow down QMK's matrix scanning. If you rely on QMK instead of LVGL for processing inputs, it can be beneficial to increase the time between calls to the LVGL task handler to better match your preferred display update rate. To do this, add this to your `config.h`:
+
+```c
+#define QP_LVGL_TASK_PERIOD 40
+```
diff --git a/docs/reference_info_json.md b/docs/reference_info_json.md
index 91581afc73ba..e102b9bfb94e 100644
--- a/docs/reference_info_json.md
+++ b/docs/reference_info_json.md
@@ -60,6 +60,13 @@ You can create `info.json` files at every level under `qmk_firmware/keyboards/event.row == 3)` instead of checking a whole bunch of keycodes. Which is especially good for those people using the Tap Hold type keys on the home row. So you could fine-tune those to not interfere with your normal typing.
+Well, it's simple really: customization. But specifically, it depends on how your keyboard is wired up. For instance, if each row is actually using a row in the keyboard's matrix, then it may be simpler to use `if (record->event.key.row == 3)` instead of checking a whole bunch of keycodes. Which is especially good for those people using the Tap Hold type keys on the home row. So you could fine-tune those to not interfere with your normal typing.
## Why are there no `*_kb` or `*_user` functions?!
diff --git a/docs/uart_driver.md b/docs/uart_driver.md
index a44f2c28d993..a88278d5438b 100644
--- a/docs/uart_driver.md
+++ b/docs/uart_driver.md
@@ -4,6 +4,18 @@ The UART drivers used in QMK have a set of common functions to allow portability
Currently, this driver does not support enabling hardware flow control (the `RTS` and `CTS` pins) if available, but may do so in future.
+## Usage :id=usage
+
+In most cases, the UART driver code is automatically included if you are using a feature or driver which requires it.
+
+However, if you need to use the driver standalone, add the following to your `rules.mk`:
+
+```make
+UART_DRIVER_REQUIRED = yes
+```
+
+You can then call the UART API by including `uart.h` in your code.
+
## AVR Configuration :id=avr-configuration
No special setup is required - just connect the `RX` and `TX` pins of your UART device to the opposite pins on the MCU:
diff --git a/docs/unit_testing.md b/docs/unit_testing.md
index 47a105579643..60787fdffcf2 100644
--- a/docs/unit_testing.md
+++ b/docs/unit_testing.md
@@ -36,7 +36,9 @@ Note how there's several different tests, each mocking out a separate part. Also
## Running the Tests
-To run all the tests in the codebase, type `make test:all`. You can also run test matching a substring by typing `make test:matchingsubstring` Note that the tests are always compiled with the native compiler of your platform, so they are also run like any other program on your computer.
+To run all the tests in the codebase, type `make test:all`. You can also run test matching a substring by typing `make test:matchingsubstring`. `matchingsubstring` can contain colons to be more specific; `make test:tap_hold_configurations` will run the `tap_hold_configurations` tests for all features while `make test:retro_shift:tap_hold_configurations` will run the `tap_hold_configurations` tests for only the Retro Shift feature.
+
+Note that the tests are always compiled with the native compiler of your platform, so they are also run like any other program on your computer.
## Debugging the Tests
diff --git a/docs/ws2812_driver.md b/docs/ws2812_driver.md
index f8cad20ce0c0..244d39dbe06d 100644
--- a/docs/ws2812_driver.md
+++ b/docs/ws2812_driver.md
@@ -1,189 +1,229 @@
-# WS2812 Driver
-This driver powers the [RGB Lighting](feature_rgblight.md) and [RGB Matrix](feature_rgb_matrix.md) features.
+# WS2812 Driver :id=ws2812-driver
-Currently QMK supports the following addressable LEDs (however, the white LED in RGBW variants is not supported):
+This driver provides support for WorldSemi addressable RGB(W) LEDs, and compatible equivalents:
- WS2811, WS2812, WS2812B, WS2812C, etc.
- SK6812, SK6812MINI, SK6805
+ * WS2811, WS2812, WS2812B, WS2812C, etc.
+ * SK6812, SK6812MINI, SK6805
-These LEDs are called "addressable" because instead of using a wire per color, each LED contains a small microchip that understands a special protocol sent over a single wire. The chip passes on the remaining data to the next LED, allowing them to be chained together. In this way, you can easily control the color of the individual LEDs.
+These LEDs are often called "addressable" because instead of using a wire per color (and per LED), each LED contains a small microchip that understands a special protocol sent over a single wire.
+The LEDs can be chained together, and the remaining data is passed on to the next. In this way, you can easily control the color of many LEDs using a single GPIO.
-## Supported Driver Types
+## Usage :id=usage
-| | AVR | ARM |
-| -------- | ------------------ | ------------------ |
-| bit bang | :heavy_check_mark: | :heavy_check_mark: |
-| I2C | :heavy_check_mark: | |
-| SPI | | :heavy_check_mark: |
-| PWM | | :heavy_check_mark: |
-| PIO | | :heavy_check_mark: |
+In most cases, the WS2812 driver code is automatically included if you are using either the [RGBLight](feature_rgblight.md) or [RGB Matrix](feature_rgb_matrix.md) feature with the `ws2812` driver set, and you would use those APIs instead.
-## Driver configuration
+However, if you need to use the driver standalone, add the following to your `rules.mk`:
-### All drivers
+```make
+WS2812_DRIVER_REQUIRED = yes
+```
+
+You can then call the WS2812 API by including `ws2812.h` in your code.
+
+## Basic Configuration :id=basic-configuration
+
+Add the following to your `config.h`:
+
+|Define |Default |Description |
+|-------------------|-----------------------|------------------------------------------------------------------------------------------------|
+|`WS2812_DI_PIN` |*Not defined* |The GPIO pin connected to the DI pin of the first LED in the chain |
+|`WS2812_LED_COUNT` |*Not defined* |Number of LEDs in the WS2812 chain - automatically set when RGBLight or RGB Matrix is configured|
+|`WS2812_TIMING` |`1250` |The total length of a bit (TH+TL) in nanoseconds |
+|`WS2812_T1H` |`900` |The length of a "1" bit's high phase in nanoseconds |
+|`WS2812_T0H` |`350` |The length of a "0" bit's high phase in nanoseconds |
+|`WS2812_TRST_US` |`280` |The length of the reset phase in microseconds |
+|`WS2812_BYTE_ORDER`|`WS2812_BYTE_ORDER_GRB`|The byte order of the RGB data |
+
+### Timing Adjustment :id=timing-adjustment
-Different versions of the addressable LEDs have differing requirements for the TRST period between frames.
-The default setting is 280 µs, which should work for most cases, but this can be overridden in your config.h. e.g.:
+The WS2812 LED communication protocol works by encoding a "1" bit with a long high pulse (T1H), and a "0" bit with a shorter pulse (T0H). The total cycle length of a bit is the same.
+The "reset" pulse (TRST) latches the sent RGB data to all of the LEDs and denotes a completed "frame".
+
+Some WS2812 variants have slightly different timing parameter requirements, which can be accounted for if necessary using the above `#define`s in your `config.h`.
+
+### Byte Order :id=byte-order
+
+Some WS2812 variants may have their color components in a different physical or logical order. For example, the WS2812B-2020 has physically swapped red and green LEDs, which causes the wrong color to be displayed, because the default order of the bytes sent over the wire is defined as GRB.
+If you find your LED colors are consistently swapped, you may need to change the byte order by adding the following to your `config.h`:
```c
-#define WS2812_TRST_US 80
+#define WS2812_BYTE_ORDER WS2812_BYTE_ORDER_GRB
```
-#### Byte Order
+Where the byte order may be one of:
+
+|Byte Order|Known Devices |
+|----------|----------------------------|
+|`GRB` |Most WS2812s, SK6812, SK6805|
+|`RGB` |WS2812B-2020 |
+|`BGR` |TM1812 |
-Some variants of the WS2812 may have their color components in a different physical or logical order. For example, the WS2812B-2020 has physically swapped red and green LEDs, which causes the wrong color to be displayed, because the default order of the bytes sent over the wire is defined as GRB.
-In this case, you can change the byte order by defining `WS2812_BYTE_ORDER` as one of the following values:
+## Driver Configuration :id=driver-configuration
-| Byte order | Known devices |
-| --------------------------------- | ----------------------------- |
-| `WS2812_BYTE_ORDER_GRB` (default) | Most WS2812's, SK6812, SK6805 |
-| `WS2812_BYTE_ORDER_RGB` | WS2812B-2020 |
-| `WS2812_BYTE_ORDER_BGR` | TM1812 |
+Driver selection can be configured in `rules.mk` as `WS2812_DRIVER`, or in `info.json` as `ws2812.driver`. Valid values are `bitbang` (default), `i2c`, `spi`, `pwm`, `vendor`, or `custom`. See below for information on individual drivers.
+### Bitbang Driver :id=bitbang-driver
-### Bitbang
-Default driver, the absence of configuration assumes this driver. To configure it, add this to your rules.mk:
+This is the default WS2812 driver. It operates by "bit-banging" ie. directly toggling the GPIO.
+
+Please note that on AVR devices, due to the tight timing requirements longer chains and/or heavy CPU loads may cause visible lag. Unfortunately this driver is usually the only option for AVR.
```make
WS2812_DRIVER = bitbang
```
-!> This driver is not hardware accelerated and may not be performant on heavily loaded systems.
+### I2C Driver :id=i2c-driver
+
+A specialized driver mainly used for PS2AVRGB (Bootmapper Client) boards, which possess an ATtiny85 that handles the WS2812 LEDs.
+
+```make
+WS2812_DRIVER = i2c
+```
+
+The following `#define`s apply only to the `i2c` driver:
-#### Adjusting bit timings
+|Define |Default|Description |
+|--------------------|-------|---------------------------------|
+|`WS2812_I2C_ADDRESS`|`0xB0` |The I2C address of the ATtiny85. |
+|`WS2812_I2C_TIMEOUT`|`100` |The I2C timeout, in milliseconds.|
-The WS2812 LED communication topology depends on a serialized timed window. Different versions of the addressable LEDs have differing requirements for the timing parameters, for instance, of the SK6812.
-You can tune these parameters through the definition of the following macros:
+### PIO Driver :id=pio-driver
-| Macro | Default | AVR | ARM |
-| --------------- | ---------------------------- | ------------------ | ------------------ |
-| `WS2812_TIMING` | `1250` | :heavy_check_mark: | :heavy_check_mark: |
-| `WS2812_T0H` | `350` | :heavy_check_mark: | :heavy_check_mark: |
-| `WS2812_T0L` | `WS2812_TIMING - WS2812_T0H` | | :heavy_check_mark: |
-| `WS2812_T1H` | `900` | :heavy_check_mark: | :heavy_check_mark: |
-| `WS2812_T1L` | `WS2812_TIMING - WS2812_T1H` | | :heavy_check_mark: |
+This driver is RP2040-only, and leverages the onboard PIO (programmable I/O) system and DMA to offload processing from the CPU.
-### I2C
-Targeting boards where WS2812 support is offloaded to a 2nd MCU. Currently the driver is limited to AVR given the known consumers are ps2avrGB/BMC. To configure it, add this to your rules.mk:
+The WS2812 PIO program uses one state machine, six instructions and one DMA interrupt handler callback. Due to the implementation the time resolution for this driver is 50 ns - any value not specified in this interval will be rounded to the next matching interval.
```make
-WS2812_DRIVER = i2c
+WS2812_DRIVER = vendor
```
-Configure the hardware via your config.h:
-```c
-#define WS2812_I2C_ADDRESS 0xB0 // default: 0xB0
-#define WS2812_I2C_TIMEOUT 100 // default: 100
+### PWM Driver :id=pwm-driver
+
+This driver is ARM-only, and leverages the onboard PWM peripheral and DMA to offload processing from the CPU.
+
+```make
+WS2812_DRIVER = pwm
```
-### SPI
-Targeting STM32 boards where WS2812 support is offloaded to an SPI hardware device. The advantage is that the use of DMA offloads processing of the WS2812 protocol from the MCU. `WS2812_DI_PIN` for this driver is the configured SPI MOSI pin. Due to the nature of repurposing SPI to drive the LEDs, the other SPI pins, MISO and SCK, **must** remain unused. To configure it, add this to your rules.mk:
+### SPI Driver :id=spi-driver
+
+This driver is ARM-only, and leverages the onboard SPI peripheral and DMA to offload processing from the CPU. The DI pin **must** be connected to the MOSI pin on the MCU, and all other SPI pins **must** be left unused. This is also very dependent on your MCU's SPI peripheral clock speed, and may or may not be possible depending on the MCU selected.
```make
WS2812_DRIVER = spi
```
-Configure the hardware via your config.h:
-```c
-#define WS2812_SPI SPID1 // default: SPID1
-#define WS2812_SPI_MOSI_PAL_MODE 5 // MOSI pin "alternate function", see the respective datasheet for the appropriate values for your MCU. default: 5
-#define WS2812_SPI_SCK_PIN B3 // Required for F072, may be for others -- SCK pin, see the respective datasheet for the appropriate values for your MCU. default: unspecified
-#define WS2812_SPI_SCK_PAL_MODE 5 // SCK pin "alternate function", see the respective datasheet for the appropriate values for your MCU. default: 5
-```
+## ChibiOS/ARM Configuration :id=arm-configuration
-You must also turn on the SPI feature in your halconf.h and mcuconf.h
+The following defines apply only to ARM devices:
-#### Circular Buffer Mode
-Some boards may flicker while in the normal buffer mode. To fix this issue, circular buffer mode may be used to rectify the issue.
+|Define |Default |Description |
+|------------|------------------------------|---------------------------------------------------------------------------------|
+|`WS2812_T1L`|`(WS2812_TIMING - WS2812_T1H)`|The length of a "1" bit's low phase in nanoseconds (bitbang and PIO drivers only)|
+|`WS2812_T0L`|`(WS2812_TIMING - WS2812_T0H)`|The length of a "0" bit's low phase in nanoseconds (bitbang and PIO drivers only)|
-By default, the circular buffer mode is disabled.
+### Push-Pull and Open Drain :id=push-pull-open-drain
-To enable this alternative buffer mode, place this into your `config.h` file:
-```c
-#define WS2812_SPI_USE_CIRCULAR_BUFFER
-```
+By default, the GPIO used for data transmission is configured as a *push-pull* output, meaning the pin is effectively always driven either to VCC or to ground.
-#### Setting baudrate with divisor
-To adjust the baudrate at which the SPI peripheral is configured, users will need to derive the target baudrate from the clock tree provided by STM32CubeMX.
+For situations where the logic level voltage is lower than the power supply voltage, however, this can pose an issue. The solution is to configure the pin for *open drain* mode instead, and use a pullup resistor between the DI pin and VCC. In this mode, the MCU can only pull the GPIO *low*, or leave it floating. The pullup resistor is then responsible for pulling the line high, when the MCU is not driving the GPIO.
-Only divisors of 2, 4, 8, 16, 32, 64, 128 and 256 are supported by hardware.
+To configure the DI pin for open drain configuration, add the following to your `config.h`:
-| Define | Default | Description |
-| -------------------- | ------- | ----------------------------------- |
-| `WS2812_SPI_DIVISOR` | `16` | SPI source clock peripheral divisor |
+```c
+#define WS2812_EXTERNAL_PULLUP
+```
-#### Testing Notes
+### SPI Driver :id=arm-spi-driver
-While not an exhaustive list, the following table provides the scenarios that have been partially validated:
+Depending on the ChibiOS board configuration, you may need to enable SPI at the keyboard level. For STM32, this would look like:
-| | SPI1 | SPI2 | SPI3 |
-| ---- | ------------------------------------------- | --------------------------------------- | --------------------- |
-| f072 | ? | B15 :heavy_check_mark: (needs SCK: B13) | N/A |
-| f103 | A7 :heavy_check_mark: | B15 :heavy_check_mark: | N/A |
-| f303 | A7 :heavy_check_mark: B5 :heavy_check_mark: | B15 :heavy_check_mark: | B5 :heavy_check_mark: |
+`halconf.h`:
+```c
+#define HAL_USE_SPI TRUE
+```
+`mcuconf.h`:
+```c
+#undef STM32_SPI_USE_SPI1
+#define STM32_SPI_USE_SPI1 TRUE
+```
-*Other supported ChibiOS boards and/or pins may function, it will be highly chip and configuration dependent.*
+The following `define`s apply only to the `spi` driver:
-### PWM
+|Define |Default |Description |
+|--------------------------------|-------------|-------------------------------------------------------------------------------|
+|`WS2812_SPI_DRIVER` |`SPID1` |The SPI driver to use |
+|`WS2812_SPI_MOSI_PAL_MODE` |`5` |The MOSI pin alternative function to use |
+|`WS2812_SPI_SCK_PIN` |*Not defined*|The SCK pin - required for F072 and possibly others |
+|`WS2812_SPI_SCK_PAL_MODE` |`5` |The SCK pin alternative function to use - required for F072 and possibly others|
+|`WS2812_SPI_DIVISOR` |`16` |The divisor used to adjust the baudrate |
+|`WS2812_SPI_USE_CIRCULAR_BUFFER`|*Not defined*|Enable a circular buffer for improved rendering |
-Targeting STM32 boards where WS2812 support is offloaded to an PWM timer and DMA stream. The advantage is that the use of DMA offloads processing of the WS2812 protocol from the MCU. To configure it, add this to your rules.mk:
+#### Setting the Baudrate :id=arm-spi-baudrate
-```make
-WS2812_DRIVER = pwm
-```
+To adjust the SPI baudrate, you will need to derive the target baudrate from the clock tree provided by STM32CubeMX, and add the following to your `config.h`:
-Configure the hardware via your config.h:
```c
-#define WS2812_PWM_DRIVER PWMD2 // default: PWMD2
-#define WS2812_PWM_CHANNEL 2 // default: 2
-#define WS2812_PWM_PAL_MODE 2 // Pin "alternate function", see the respective datasheet for the appropriate values for your MCU. default: 2
-//#define WS2812_PWM_COMPLEMENTARY_OUTPUT // Define for a complementary timer output (TIMx_CHyN); omit for a normal timer output (TIMx_CHy).
-#define WS2812_DMA_STREAM STM32_DMA1_STREAM2 // DMA Stream for TIMx_UP, see the respective reference manual for the appropriate values for your MCU.
-#define WS2812_DMA_CHANNEL 2 // DMA Channel for TIMx_UP, see the respective reference manual for the appropriate values for your MCU.
-#define WS2812_DMAMUX_ID STM32_DMAMUX1_TIM2_UP // DMAMUX configuration for TIMx_UP -- only required if your MCU has a DMAMUX peripheral, see the respective reference manual for the appropriate values for your MCU.
+#define WS2812_SPI_DIVISOR 16
```
-Note that using a complementary timer output (TIMx_CHyN) is possible only for advanced-control timers (TIM1, TIM8, TIM20 on STM32), and the `STM32_PWM_USE_ADVANCED` option in mcuconf.h must be set to `TRUE`. Complementary outputs of general-purpose timers are not supported due to ChibiOS limitations.
+Only divisors of 2, 4, 8, 16, 32, 64, 128 and 256 are supported on STM32 devices. Other MCUs may have similar constraints -- check the reference manual for your respective MCU for specifics.
+
+#### Circular Buffer :id=arm-spi-circular-buffer
-You must also turn on the PWM feature in your halconf.h and mcuconf.h
+A circular buffer can be enabled if you experience flickering.
-#### Testing Notes
+To enable the circular buffer, add the following to your `config.h`:
-While not an exhaustive list, the following table provides the scenarios that have been partially validated:
+```c
+#define WS2812_SPI_USE_CIRCULAR_BUFFER
+```
-| | Status |
-| --------- | ------------------ |
-| f072 | ? |
-| f103 | :heavy_check_mark: |
-| f303 | :heavy_check_mark: |
-| f401/f411 | :heavy_check_mark: |
+### PIO Driver :id=arm-pio-driver
-*Other supported ChibiOS boards and/or pins may function, it will be highly chip and configuration dependent.*
+The following `#define`s apply only to the PIO driver:
-### PIO
+|Define |Default |Description |
+|---------------------|-------------|---------------------------------------|
+|`WS2812_PIO_USE_PIO1`|*Not defined*|Use the PIO1 peripheral instead of PIO0|
-Targeting Raspberry Pi RP2040 boards only where WS2812 support is offloaded to an dedicated PIO implementation. This offloads processing of the WS2812 protocol from the MCU to a dedicated PIO program using DMA transfers.
+### PWM Driver :id=arm-pwm-driver
-To configure it, add this to your rules.mk:
+Depending on the ChibiOS board configuration, you may need to enable PWM at the keyboard level. For STM32, this would look like:
-```make
-WS2812_DRIVER = vendor
+`halconf.h`:
+```c
+#define HAL_USE_PWM TRUE
```
-
-Configure the hardware via your config.h:
+`mcuconf.h`:
```c
-#define WS2812_PIO_USE_PIO1 // Force the usage of PIO1 peripheral, by default the WS2812 implementation uses the PIO0 peripheral
+#undef STM32_PWM_USE_TIM2
+#define STM32_PWM_USE_TIM2 TRUE
```
-The WS2812 PIO programm uses 1 state machine, 6 instructions and one DMA interrupt handler callback. Due to the implementation the time resolution for this drivers is 50ns, any value not specified in this interval will be rounded to the next matching interval.
+The following `#define`s apply only to the `pwm` driver:
-### Push Pull and Open Drain Configuration
-The default configuration is a push pull on the defined pin.
-This can be configured for bitbang, PWM and SPI.
+|Define |Default |Description |
+|---------------------------------|--------------------|------------------------------------------------------------------------------------------|
+|`WS2812_PWM_DRIVER` |`PWMD2` |The PWM driver to use |
+|`WS2812_PWM_CHANNEL` |`2` |The PWM channel to use |
+|`WS2812_PWM_PAL_MODE` |`2` |The pin alternative function to use |
+|`WS2812_DMA_STREAM` |`STM32_DMA1_STREAM2`|The DMA Stream for `TIMx_UP` |
+|`WS2812_DMA_CHANNEL` |`2` |The DMA Channel for `TIMx_UP` |
+|`WS2812_DMAMUX_ID` |*Not defined* |The DMAMUX configuration for `TIMx_UP` - only required if your MCU has a DMAMUX peripheral|
+|`WS2812_PWM_COMPLEMENTARY_OUTPUT`|*Not defined* |Whether the PWM output is complementary (`TIMx_CHyN`) |
-Note: This only applies to STM32 boards.
+?> Using a complementary timer output (`TIMx_CHyN`) is possible only for advanced-control timers (1, 8 and 20 on STM32), and the `STM32_PWM_USE_ADVANCED` option in `mcuconf.h` must be set to `TRUE`. Complementary outputs of general-purpose timers are not supported due to ChibiOS limitations.
- To configure the `WS2812_DI_PIN` to open drain configuration add this to your config.h file:
-```c
-#define WS2812_EXTERNAL_PULLUP
-```
+## API :id=api
+
+### `void ws2812_setleds(rgb_led_t *ledarray, uint16_t number_of_leds)` :id=api-ws2812-setleds
+
+Send RGB data to the WS2812 LED chain.
+
+#### Arguments :id=api-ws2812-setleds-arguments
+
+ - `rgb_led_t *ledarray`
+ A pointer to the LED array.
+ - `uint16_t number_of_leds`
+ The length of the LED array.
diff --git a/docs/zh-cn/_summary.md b/docs/zh-cn/_summary.md
index 0fc92e33d3ae..a076f1a8c672 100644
--- a/docs/zh-cn/_summary.md
+++ b/docs/zh-cn/_summary.md
@@ -121,7 +121,6 @@
* [分体式键盘](zh-cn/feature_split_keyboard.md)
* [速记](zh-cn/feature_stenography.md)
* [热敏打印机](zh-cn/feature_thermal_printer.md)
- * [Velocikey](zh-cn/feature_velocikey.md)
* QMK开发
* [PR Checklist](zh-cn/pr_checklist.md)
diff --git a/drivers/eeprom/eeprom_spi.h b/drivers/eeprom/eeprom_spi.h
index 282c603565f6..6a21d5516bb5 100644
--- a/drivers/eeprom/eeprom_spi.h
+++ b/drivers/eeprom/eeprom_spi.h
@@ -16,6 +16,18 @@
#pragma once
+/*
+ Default device configurations:
+
+ For the Adafruit SPI Non-Volatile FRAM Breakout: https://www.adafruit.com/product/1897
+ #define EEPROM_SPI_MB85RS64V
+*/
+#if defined(EEPROM_SPI_MB85RS64V)
+# define EXTERNAL_EEPROM_BYTE_COUNT 8192
+# define EXTERNAL_EEPROM_PAGE_SIZE 64 // it's FRAM, so it doesn't actually matter, this just sets the RAM buffer
+# define EXTERNAL_EEPROM_ADDRESS_SIZE 2
+#endif
+
/*
The slave select pin of the EEPROM.
This needs to be a normal GPIO pin_t value, such as A7.
diff --git a/drivers/haptic/solenoid.c b/drivers/haptic/solenoid.c
index 4e4390325527..da4095cda4d2 100644
--- a/drivers/haptic/solenoid.c
+++ b/drivers/haptic/solenoid.c
@@ -23,7 +23,6 @@
#include "util.h"
#include
-uint8_t solenoid_dwell = SOLENOID_DEFAULT_DWELL;
static pin_t solenoid_pads[] = SOLENOID_PINS;
#define NUMBER_OF_SOLENOIDS ARRAY_SIZE(solenoid_pads)
bool solenoid_on[NUMBER_OF_SOLENOIDS] = {false};
@@ -53,7 +52,7 @@ void solenoid_set_buzz(uint8_t buzz) {
}
void solenoid_set_dwell(uint8_t dwell) {
- solenoid_dwell = dwell;
+ haptic_set_dwell(dwell);
}
/**
@@ -119,7 +118,7 @@ void solenoid_check(void) {
elapsed[i] = timer_elapsed(solenoid_start[i]);
// Check if it's time to finish this solenoid click cycle
- if (elapsed[i] > solenoid_dwell) {
+ if (elapsed[i] > haptic_config.dwell) {
solenoid_stop(i);
continue;
}
diff --git a/drivers/led/apa102.c b/drivers/led/apa102.c
index 766d8cd2eb7e..527519eb8a95 100644
--- a/drivers/led/apa102.c
+++ b/drivers/led/apa102.c
@@ -24,7 +24,7 @@
# elif defined(PROTOCOL_CHIBIOS)
# include "hal.h"
# include "chibios_config.h"
-# if defined(STM32F0XX) || defined(STM32F1XX) || defined(STM32F3XX) || defined(STM32F4XX) || defined(STM32L0XX) || defined(GD32VF103)
+# if defined(STM32F0XX) || defined(STM32F1XX) || defined(STM32F3XX) || defined(STM32F4XX) || defined(STM32L0XX) || defined(GD32VF103) || defined(MCU_RP)
# define APA102_NOPS (100 / (1000000000L / (CPU_CLOCK / 4))) // This calculates how many loops of 4 nops to run to delay 100 ns
# else
# error APA102_NOPS configuration required
@@ -61,18 +61,18 @@ void static apa102_end_frame(uint16_t num_leds);
void static apa102_send_frame(uint8_t red, uint8_t green, uint8_t blue, uint8_t brightness);
void static apa102_send_byte(uint8_t byte);
-void apa102_setleds(LED_TYPE *start_led, uint16_t num_leds) {
- LED_TYPE *end = start_led + num_leds;
+void apa102_setleds(rgb_led_t *start_led, uint16_t num_leds) {
+ rgb_led_t *end = start_led + num_leds;
apa102_start_frame();
- for (LED_TYPE *led = start_led; led < end; led++) {
+ for (rgb_led_t *led = start_led; led < end; led++) {
apa102_send_frame(led->r, led->g, led->b, apa102_led_brightness);
}
apa102_end_frame(num_leds);
}
// Overwrite the default rgblight_call_driver to use apa102 driver
-void rgblight_call_driver(LED_TYPE *start_led, uint8_t num_leds) {
+void rgblight_call_driver(rgb_led_t *start_led, uint8_t num_leds) {
apa102_setleds(start_led, num_leds);
}
diff --git a/drivers/led/apa102.h b/drivers/led/apa102.h
index 58cf020c1e16..cd0a19d44547 100644
--- a/drivers/led/apa102.h
+++ b/drivers/led/apa102.h
@@ -37,5 +37,5 @@ extern uint8_t apa102_led_brightness;
* - Set the data-out pin as output
* - Send out the LED data
*/
-void apa102_setleds(LED_TYPE *start_led, uint16_t num_leds);
+void apa102_setleds(rgb_led_t *start_led, uint16_t num_leds);
void apa102_set_brightness(uint8_t brightness);
diff --git a/drivers/led/aw20216.c b/drivers/led/aw20216.c
deleted file mode 100644
index 479643add483..000000000000
--- a/drivers/led/aw20216.c
+++ /dev/null
@@ -1,168 +0,0 @@
-/* Copyright 2021 Jasper Chan
- * 2023 Huckies
- *
- * 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 .
- */
-
-#include "aw20216.h"
-#include "wait.h"
-#include "spi_master.h"
-
-/* The AW20216 appears to be somewhat similar to the IS31FL743, although quite
- * a few things are different, such as the command byte format and page ordering.
- * The LED addresses start from 0x00 instead of 0x01.
- */
-#define AWINIC_ID 0b1010 << 4
-
-#define AW_PAGE_FUNCTION 0x00 << 1 // PG0, Function registers
-#define AW_PAGE_PWM 0x01 << 1 // PG1, LED PWM control
-#define AW_PAGE_SCALING 0x02 << 1 // PG2, LED current scaling control
-#define AW_PAGE_PATCHOICE 0x03 << 1 // PG3, Pattern choice?
-#define AW_PAGE_PWMSCALING 0x04 << 1 // PG4, LED PWM + Scaling control?
-
-#define AW_WRITE 0
-#define AW_READ 1
-
-#define AW_REG_CONFIGURATION 0x00 // PG0
-#define AW_REG_GLOBALCURRENT 0x01 // PG0
-#define AW_REG_RESET 0x2F // PG0
-#define AW_REG_MIXFUNCTION 0x46 // PG0
-
-// Default value of AW_REG_CONFIGURATION
-// D7:D4 = 1011, SWSEL (SW1~SW12 active)
-// D3 = 0?, reserved (apparently this should be 1 but it doesn't seem to matter)
-// D2:D1 = 00, OSDE (open/short detection enable)
-// D0 = 0, CHIPEN (write 1 to enable LEDs when hardware enable pulled high)
-#define AW_CONFIG_DEFAULT 0b10110000
-#define AW_MIXCR_DEFAULT 0b00000000
-#define AW_RESET_CMD 0xAE
-#define AW_CHIPEN 1
-#define AW_LPEN (0x01 << 1)
-
-#define AW_PWM_REGISTER_COUNT 216
-
-#ifndef AW_SCALING_MAX
-# define AW_SCALING_MAX 150
-#endif
-
-#ifndef AW_GLOBAL_CURRENT_MAX
-# define AW_GLOBAL_CURRENT_MAX 150
-#endif
-
-#ifndef AW_SPI_MODE
-# define AW_SPI_MODE 0
-#endif
-
-#ifndef AW_SPI_DIVISOR
-# define AW_SPI_DIVISOR 4
-#endif
-
-uint8_t g_pwm_buffer[DRIVER_COUNT][AW_PWM_REGISTER_COUNT];
-bool g_pwm_buffer_update_required[DRIVER_COUNT] = {false};
-
-bool aw20216_write(pin_t cs_pin, uint8_t page, uint8_t reg, uint8_t* data, uint8_t len) {
- static uint8_t s_spi_transfer_buffer[2] = {0};
-
- if (!spi_start(cs_pin, false, AW_SPI_MODE, AW_SPI_DIVISOR)) {
- spi_stop();
- return false;
- }
-
- s_spi_transfer_buffer[0] = (AWINIC_ID | page | AW_WRITE);
- s_spi_transfer_buffer[1] = reg;
-
- if (spi_transmit(s_spi_transfer_buffer, 2) != SPI_STATUS_SUCCESS) {
- spi_stop();
- return false;
- }
-
- if (spi_transmit(data, len) != SPI_STATUS_SUCCESS) {
- spi_stop();
- return false;
- }
-
- spi_stop();
- return true;
-}
-
-static inline bool aw20216_write_register(pin_t cs_pin, uint8_t page, uint8_t reg, uint8_t value) {
- // Little wrapper so callers need not care about sending a buffer
- return aw20216_write(cs_pin, page, reg, &value, 1);
-}
-
-void aw20216_soft_reset(pin_t cs_pin) {
- aw20216_write_register(cs_pin, AW_PAGE_FUNCTION, AW_REG_RESET, AW_RESET_CMD);
-}
-
-static void aw20216_init_scaling(pin_t cs_pin) {
- // Set constant current to the max, control brightness with PWM
- for (uint8_t i = 0; i < AW_PWM_REGISTER_COUNT; i++) {
- aw20216_write_register(cs_pin, AW_PAGE_SCALING, i, AW_SCALING_MAX);
- }
-}
-
-static inline void aw20216_init_current_limit(pin_t cs_pin) {
- // Push config
- aw20216_write_register(cs_pin, AW_PAGE_FUNCTION, AW_REG_GLOBALCURRENT, AW_GLOBAL_CURRENT_MAX);
-}
-
-static inline void aw20216_soft_enable(pin_t cs_pin) {
- // Push config
- aw20216_write_register(cs_pin, AW_PAGE_FUNCTION, AW_REG_CONFIGURATION, AW_CONFIG_DEFAULT | AW_CHIPEN);
-}
-
-static inline void aw20216_auto_lowpower(pin_t cs_pin) {
- aw20216_write_register(cs_pin, AW_PAGE_FUNCTION, AW_REG_MIXFUNCTION, AW_MIXCR_DEFAULT | AW_LPEN);
-}
-
-void aw20216_init(pin_t cs_pin, pin_t en_pin) {
- setPinOutput(en_pin);
- writePinHigh(en_pin);
-
- aw20216_soft_reset(cs_pin);
- wait_ms(2);
-
- // Drivers should start with all scaling and PWM registers as off
- aw20216_init_current_limit(cs_pin);
- aw20216_init_scaling(cs_pin);
-
- aw20216_soft_enable(cs_pin);
- aw20216_auto_lowpower(cs_pin);
-}
-
-void aw20216_set_color(int index, uint8_t red, uint8_t green, uint8_t blue) {
- aw_led led;
- memcpy_P(&led, (&g_aw_leds[index]), sizeof(led));
-
- if (g_pwm_buffer[led.driver][led.r] == red && g_pwm_buffer[led.driver][led.g] == green && g_pwm_buffer[led.driver][led.b] == blue) {
- return;
- }
- g_pwm_buffer[led.driver][led.r] = red;
- g_pwm_buffer[led.driver][led.g] = green;
- g_pwm_buffer[led.driver][led.b] = blue;
- g_pwm_buffer_update_required[led.driver] = true;
-}
-
-void aw20216_set_color_all(uint8_t red, uint8_t green, uint8_t blue) {
- for (uint8_t i = 0; i < RGB_MATRIX_LED_COUNT; i++) {
- aw20216_set_color(i, red, green, blue);
- }
-}
-
-void aw20216_update_pwm_buffers(pin_t cs_pin, uint8_t index) {
- if (g_pwm_buffer_update_required[index]) {
- aw20216_write(cs_pin, AW_PAGE_PWM, 0, g_pwm_buffer[index], AW_PWM_REGISTER_COUNT);
- }
- g_pwm_buffer_update_required[index] = false;
-}
diff --git a/drivers/led/aw20216.h b/drivers/led/aw20216.h
deleted file mode 100644
index e342cb6bacdf..000000000000
--- a/drivers/led/aw20216.h
+++ /dev/null
@@ -1,253 +0,0 @@
-/* Copyright 2021 Jasper Chan (Gigahawk)
- *
- * 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 .
- */
-
-#pragma once
-
-#include
-#include
-#include "progmem.h"
-#include "gpio.h"
-
-typedef struct aw_led {
- uint8_t driver : 2;
- uint8_t r;
- uint8_t g;
- uint8_t b;
-} aw_led;
-
-extern const aw_led PROGMEM g_aw_leds[RGB_MATRIX_LED_COUNT];
-
-void aw20216_init(pin_t cs_pin, pin_t en_pin);
-void aw20216_set_color(int index, uint8_t red, uint8_t green, uint8_t blue);
-void aw20216_set_color_all(uint8_t red, uint8_t green, uint8_t blue);
-void aw20216_update_pwm_buffers(pin_t cs_pin, uint8_t index);
-
-#define CS1_SW1 0x00
-#define CS2_SW1 0x01
-#define CS3_SW1 0x02
-#define CS4_SW1 0x03
-#define CS5_SW1 0x04
-#define CS6_SW1 0x05
-#define CS7_SW1 0x06
-#define CS8_SW1 0x07
-#define CS9_SW1 0x08
-#define CS10_SW1 0x09
-#define CS11_SW1 0x0A
-#define CS12_SW1 0x0B
-#define CS13_SW1 0x0C
-#define CS14_SW1 0x0D
-#define CS15_SW1 0x0E
-#define CS16_SW1 0x0F
-#define CS17_SW1 0x10
-#define CS18_SW1 0x11
-#define CS1_SW2 0x12
-#define CS2_SW2 0x13
-#define CS3_SW2 0x14
-#define CS4_SW2 0x15
-#define CS5_SW2 0x16
-#define CS6_SW2 0x17
-#define CS7_SW2 0x18
-#define CS8_SW2 0x19
-#define CS9_SW2 0x1A
-#define CS10_SW2 0x1B
-#define CS11_SW2 0x1C
-#define CS12_SW2 0x1D
-#define CS13_SW2 0x1E
-#define CS14_SW2 0x1F
-#define CS15_SW2 0x20
-#define CS16_SW2 0x21
-#define CS17_SW2 0x22
-#define CS18_SW2 0x23
-#define CS1_SW3 0x24
-#define CS2_SW3 0x25
-#define CS3_SW3 0x26
-#define CS4_SW3 0x27
-#define CS5_SW3 0x28
-#define CS6_SW3 0x29
-#define CS7_SW3 0x2A
-#define CS8_SW3 0x2B
-#define CS9_SW3 0x2C
-#define CS10_SW3 0x2D
-#define CS11_SW3 0x2E
-#define CS12_SW3 0x2F
-#define CS13_SW3 0x30
-#define CS14_SW3 0x31
-#define CS15_SW3 0x32
-#define CS16_SW3 0x33
-#define CS17_SW3 0x34
-#define CS18_SW3 0x35
-#define CS1_SW4 0x36
-#define CS2_SW4 0x37
-#define CS3_SW4 0x38
-#define CS4_SW4 0x39
-#define CS5_SW4 0x3A
-#define CS6_SW4 0x3B
-#define CS7_SW4 0x3C
-#define CS8_SW4 0x3D
-#define CS9_SW4 0x3E
-#define CS10_SW4 0x3F
-#define CS11_SW4 0x40
-#define CS12_SW4 0x41
-#define CS13_SW4 0x42
-#define CS14_SW4 0x43
-#define CS15_SW4 0x44
-#define CS16_SW4 0x45
-#define CS17_SW4 0x46
-#define CS18_SW4 0x47
-#define CS1_SW5 0x48
-#define CS2_SW5 0x49
-#define CS3_SW5 0x4A
-#define CS4_SW5 0x4B
-#define CS5_SW5 0x4C
-#define CS6_SW5 0x4D
-#define CS7_SW5 0x4E
-#define CS8_SW5 0x4F
-#define CS9_SW5 0x50
-#define CS10_SW5 0x51
-#define CS11_SW5 0x52
-#define CS12_SW5 0x53
-#define CS13_SW5 0x54
-#define CS14_SW5 0x55
-#define CS15_SW5 0x56
-#define CS16_SW5 0x57
-#define CS17_SW5 0x58
-#define CS18_SW5 0x59
-#define CS1_SW6 0x5A
-#define CS2_SW6 0x5B
-#define CS3_SW6 0x5C
-#define CS4_SW6 0x5D
-#define CS5_SW6 0x5E
-#define CS6_SW6 0x5F
-#define CS7_SW6 0x60
-#define CS8_SW6 0x61
-#define CS9_SW6 0x62
-#define CS10_SW6 0x63
-#define CS11_SW6 0x64
-#define CS12_SW6 0x65
-#define CS13_SW6 0x66
-#define CS14_SW6 0x67
-#define CS15_SW6 0x68
-#define CS16_SW6 0x69
-#define CS17_SW6 0x6A
-#define CS18_SW6 0x6B
-#define CS1_SW7 0x6C
-#define CS2_SW7 0x6D
-#define CS3_SW7 0x6E
-#define CS4_SW7 0x6F
-#define CS5_SW7 0x70
-#define CS6_SW7 0x71
-#define CS7_SW7 0x72
-#define CS8_SW7 0x73
-#define CS9_SW7 0x74
-#define CS10_SW7 0x75
-#define CS11_SW7 0x76
-#define CS12_SW7 0x77
-#define CS13_SW7 0x78
-#define CS14_SW7 0x79
-#define CS15_SW7 0x7A
-#define CS16_SW7 0x7B
-#define CS17_SW7 0x7C
-#define CS18_SW7 0x7D
-#define CS1_SW8 0x7E
-#define CS2_SW8 0x7F
-#define CS3_SW8 0x80
-#define CS4_SW8 0x81
-#define CS5_SW8 0x82
-#define CS6_SW8 0x83
-#define CS7_SW8 0x84
-#define CS8_SW8 0x85
-#define CS9_SW8 0x86
-#define CS10_SW8 0x87
-#define CS11_SW8 0x88
-#define CS12_SW8 0x89
-#define CS13_SW8 0x8A
-#define CS14_SW8 0x8B
-#define CS15_SW8 0x8C
-#define CS16_SW8 0x8D
-#define CS17_SW8 0x8E
-#define CS18_SW8 0x8F
-#define CS1_SW9 0x90
-#define CS2_SW9 0x91
-#define CS3_SW9 0x92
-#define CS4_SW9 0x93
-#define CS5_SW9 0x94
-#define CS6_SW9 0x95
-#define CS7_SW9 0x96
-#define CS8_SW9 0x97
-#define CS9_SW9 0x98
-#define CS10_SW9 0x99
-#define CS11_SW9 0x9A
-#define CS12_SW9 0x9B
-#define CS13_SW9 0x9C
-#define CS14_SW9 0x9D
-#define CS15_SW9 0x9E
-#define CS16_SW9 0x9F
-#define CS17_SW9 0xA0
-#define CS18_SW9 0xA1
-#define CS1_SW10 0xA2
-#define CS2_SW10 0xA3
-#define CS3_SW10 0xA4
-#define CS4_SW10 0xA5
-#define CS5_SW10 0xA6
-#define CS6_SW10 0xA7
-#define CS7_SW10 0xA8
-#define CS8_SW10 0xA9
-#define CS9_SW10 0xAA
-#define CS10_SW10 0xAB
-#define CS11_SW10 0xAC
-#define CS12_SW10 0xAD
-#define CS13_SW10 0xAE
-#define CS14_SW10 0xAF
-#define CS15_SW10 0xB0
-#define CS16_SW10 0xB1
-#define CS17_SW10 0xB2
-#define CS18_SW10 0xB3
-#define CS1_SW11 0xB4
-#define CS2_SW11 0xB5
-#define CS3_SW11 0xB6
-#define CS4_SW11 0xB7
-#define CS5_SW11 0xB8
-#define CS6_SW11 0xB9
-#define CS7_SW11 0xBA
-#define CS8_SW11 0xBB
-#define CS9_SW11 0xBC
-#define CS10_SW11 0xBD
-#define CS11_SW11 0xBE
-#define CS12_SW11 0xBF
-#define CS13_SW11 0xC0
-#define CS14_SW11 0xC1
-#define CS15_SW11 0xC2
-#define CS16_SW11 0xC3
-#define CS17_SW11 0xC4
-#define CS18_SW11 0xC5
-#define CS1_SW12 0xC6
-#define CS2_SW12 0xC7
-#define CS3_SW12 0xC8
-#define CS4_SW12 0xC9
-#define CS5_SW12 0xCA
-#define CS6_SW12 0xCB
-#define CS7_SW12 0xCC
-#define CS8_SW12 0xCD
-#define CS9_SW12 0xCE
-#define CS10_SW12 0xCF
-#define CS11_SW12 0xD0
-#define CS12_SW12 0xD1
-#define CS13_SW12 0xD2
-#define CS14_SW12 0xD3
-#define CS15_SW12 0xD4
-#define CS16_SW12 0xD5
-#define CS17_SW12 0xD6
-#define CS18_SW12 0xD7
diff --git a/drivers/led/aw20216s.c b/drivers/led/aw20216s.c
new file mode 100644
index 000000000000..ab7f3ccb42d7
--- /dev/null
+++ b/drivers/led/aw20216s.c
@@ -0,0 +1,161 @@
+/* Copyright 2021 Jasper Chan
+ * 2023 Huckies
+ *
+ * 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 .
+ */
+
+#include "aw20216s.h"
+#include "wait.h"
+#include "spi_master.h"
+
+#define AW20216S_PWM_REGISTER_COUNT 216
+
+#ifndef AW20216S_CONFIGURATION
+# define AW20216S_CONFIGURATION (AW20216S_CONFIGURATION_SWSEL_1_12 | AW20216S_CONFIGURATION_CHIPEN)
+#endif
+
+#ifndef AW20216S_MIX_FUNCTION
+# define AW20216S_MIX_FUNCTION (AW20216S_MIX_FUNCTION_LPEN)
+#endif
+
+#ifndef AW20216S_SCALING_MAX
+# define AW20216S_SCALING_MAX 150
+#endif
+
+#ifndef AW20216S_GLOBAL_CURRENT_MAX
+# define AW20216S_GLOBAL_CURRENT_MAX 150
+#endif
+
+#ifndef AW20216S_SPI_MODE
+# define AW20216S_SPI_MODE 0
+#endif
+
+#ifndef AW20216S_SPI_DIVISOR
+# define AW20216S_SPI_DIVISOR 4
+#endif
+
+uint8_t g_pwm_buffer[AW20216S_DRIVER_COUNT][AW20216S_PWM_REGISTER_COUNT];
+bool g_pwm_buffer_update_required[AW20216S_DRIVER_COUNT] = {false};
+
+bool aw20216s_write(pin_t cs_pin, uint8_t page, uint8_t reg, uint8_t* data, uint8_t len) {
+ static uint8_t s_spi_transfer_buffer[2] = {0};
+
+ if (!spi_start(cs_pin, false, AW20216S_SPI_MODE, AW20216S_SPI_DIVISOR)) {
+ spi_stop();
+ return false;
+ }
+
+ s_spi_transfer_buffer[0] = (AW20216S_ID | page | AW20216S_WRITE);
+ s_spi_transfer_buffer[1] = reg;
+
+ if (spi_transmit(s_spi_transfer_buffer, 2) != SPI_STATUS_SUCCESS) {
+ spi_stop();
+ return false;
+ }
+
+ if (spi_transmit(data, len) != SPI_STATUS_SUCCESS) {
+ spi_stop();
+ return false;
+ }
+
+ spi_stop();
+ return true;
+}
+
+static inline bool aw20216s_write_register(pin_t cs_pin, uint8_t page, uint8_t reg, uint8_t value) {
+ // Little wrapper so callers need not care about sending a buffer
+ return aw20216s_write(cs_pin, page, reg, &value, 1);
+}
+
+void aw20216s_soft_reset(pin_t cs_pin) {
+ aw20216s_write_register(cs_pin, AW20216S_PAGE_FUNCTION, AW20216S_FUNCTION_REG_RESET, AW20216S_RESET_MAGIC);
+}
+
+static void aw20216s_init_scaling(pin_t cs_pin) {
+ // Set constant current to the max, control brightness with PWM
+ for (uint8_t i = 0; i < AW20216S_PWM_REGISTER_COUNT; i++) {
+ aw20216s_write_register(cs_pin, AW20216S_PAGE_SCALING, i, AW20216S_SCALING_MAX);
+ }
+}
+
+static inline void aw20216s_init_current_limit(pin_t cs_pin) {
+ // Push config
+ aw20216s_write_register(cs_pin, AW20216S_PAGE_FUNCTION, AW20216S_FUNCTION_REG_GLOBAL_CURRENT, AW20216S_GLOBAL_CURRENT_MAX);
+}
+
+static inline void aw20216s_soft_enable(pin_t cs_pin) {
+ // Push config
+ aw20216s_write_register(cs_pin, AW20216S_PAGE_FUNCTION, AW20216S_FUNCTION_REG_CONFIGURATION, AW20216S_CONFIGURATION);
+}
+
+static inline void aw20216s_auto_lowpower(pin_t cs_pin) {
+ aw20216s_write_register(cs_pin, AW20216S_PAGE_FUNCTION, AW20216S_FUNCTION_REG_MIX_FUNCTION, AW20216S_MIX_FUNCTION);
+}
+
+void aw20216s_init_drivers(void) {
+ spi_init();
+
+ aw20216s_init(AW20216S_CS_PIN_1, AW20216S_EN_PIN_1);
+#if defined(AW20216S_CS_PIN_2)
+ aw20216s_init(AW20216S_CS_PIN_2, AW20216S_EN_PIN_2);
+#endif
+}
+
+void aw20216s_init(pin_t cs_pin, pin_t en_pin) {
+ setPinOutput(en_pin);
+ writePinHigh(en_pin);
+
+ aw20216s_soft_reset(cs_pin);
+ wait_ms(2);
+
+ // Drivers should start with all scaling and PWM registers as off
+ aw20216s_init_current_limit(cs_pin);
+ aw20216s_init_scaling(cs_pin);
+
+ aw20216s_soft_enable(cs_pin);
+ aw20216s_auto_lowpower(cs_pin);
+}
+
+void aw20216s_set_color(int index, uint8_t red, uint8_t green, uint8_t blue) {
+ aw20216s_led_t led;
+ memcpy_P(&led, (&g_aw20216s_leds[index]), sizeof(led));
+
+ if (g_pwm_buffer[led.driver][led.r] == red && g_pwm_buffer[led.driver][led.g] == green && g_pwm_buffer[led.driver][led.b] == blue) {
+ return;
+ }
+ g_pwm_buffer[led.driver][led.r] = red;
+ g_pwm_buffer[led.driver][led.g] = green;
+ g_pwm_buffer[led.driver][led.b] = blue;
+ g_pwm_buffer_update_required[led.driver] = true;
+}
+
+void aw20216s_set_color_all(uint8_t red, uint8_t green, uint8_t blue) {
+ for (uint8_t i = 0; i < AW20216S_LED_COUNT; i++) {
+ aw20216s_set_color(i, red, green, blue);
+ }
+}
+
+void aw20216s_update_pwm_buffers(pin_t cs_pin, uint8_t index) {
+ if (g_pwm_buffer_update_required[index]) {
+ aw20216s_write(cs_pin, AW20216S_PAGE_PWM, 0, g_pwm_buffer[index], AW20216S_PWM_REGISTER_COUNT);
+ }
+ g_pwm_buffer_update_required[index] = false;
+}
+
+void aw20216s_flush(void) {
+ aw20216s_update_pwm_buffers(AW20216S_CS_PIN_1, 0);
+#if defined(AW20216S_CS_PIN_2)
+ aw20216s_update_pwm_buffers(AW20216S_CS_PIN_2, 1);
+#endif
+}
diff --git a/drivers/led/aw20216s.h b/drivers/led/aw20216s.h
new file mode 100644
index 000000000000..38a0c92b2f4c
--- /dev/null
+++ b/drivers/led/aw20216s.h
@@ -0,0 +1,319 @@
+/* Copyright 2021 Jasper Chan (Gigahawk)
+ *
+ * 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 .
+ */
+
+#pragma once
+
+#include
+#include
+#include "progmem.h"
+#include "gpio.h"
+#include "util.h"
+
+// ======== DEPRECATED DEFINES - DO NOT USE ========
+#ifdef AW_SCALING_MAX
+# define AW20216S_SCALING_MAX AW_SCALING_MAX
+#endif
+#ifdef AW_GLOBAL_CURRENT_MAX
+# define AW20216S_GLOBAL_CURRENT_MAX AW_GLOBAL_CURRENT_MAX
+#endif
+#ifdef AW_SPI_MODE
+# define AW20216S_SPI_MODE AW_SPI_MODE
+#endif
+#ifdef AW_SPI_DIVISOR
+# define AW20216S_SPI_DIVISOR AW_SPI_DIVISOR
+#endif
+#ifdef DRIVER_1_CS
+# define AW20216S_CS_PIN_1 DRIVER_1_CS
+#endif
+#ifdef DRIVER_2_CS
+# define AW20216S_CS_PIN_2 DRIVER_2_CS
+#endif
+#ifdef DRIVER_1_EN
+# define AW20216S_EN_PIN_1 DRIVER_1_EN
+#endif
+#ifdef DRIVER_2_EN
+# define AW20216S_EN_PIN_2 DRIVER_2_EN
+#endif
+
+#define aw_led aw20216s_led_t
+#define g_aw_leds g_aw20216s_leds
+// ========
+
+#define AW20216S_ID (0b1010 << 4)
+#define AW20216S_WRITE 0
+#define AW20216S_READ 1
+
+#define AW20216S_PAGE_FUNCTION (0x00 << 1)
+#define AW20216S_PAGE_PWM (0x01 << 1)
+#define AW20216S_PAGE_SCALING (0x02 << 1)
+#define AW20216S_PAGE_PATTERN_CHOICE (0x03 << 1)
+#define AW20216S_PAGE_PWM_SCALING (0x04 << 1)
+
+#define AW20216S_FUNCTION_REG_CONFIGURATION 0x00
+#define AW20216S_CONFIGURATION_SWSEL_1_12 (0b1011 << 4)
+#define AW20216S_CONFIGURATION_CHIPEN (0b1 << 0)
+
+#define AW20216S_FUNCTION_REG_GLOBAL_CURRENT 0x01
+
+#define AW20216S_FUNCTION_REG_RESET 0x2F
+#define AW20216S_RESET_MAGIC 0xAE
+
+#define AW20216S_FUNCTION_REG_MIX_FUNCTION 0x46
+#define AW20216S_MIX_FUNCTION_LPEN (0b1 << 1)
+
+#if defined(RGB_MATRIX_AW20216S)
+# define AW20216S_LED_COUNT RGB_MATRIX_LED_COUNT
+#endif
+
+#if defined(AW20216S_CS_PIN_2)
+# define AW20216S_DRIVER_COUNT 2
+#elif defined(AW20216S_CS_PIN_1)
+# define AW20216S_DRIVER_COUNT 1
+#endif
+
+typedef struct aw20216s_led_t {
+ uint8_t driver : 2;
+ uint8_t r;
+ uint8_t g;
+ uint8_t b;
+} PACKED aw20216s_led_t;
+
+extern const aw20216s_led_t PROGMEM g_aw20216s_leds[AW20216S_LED_COUNT];
+
+void aw20216s_init_drivers(void);
+void aw20216s_init(pin_t cs_pin, pin_t en_pin);
+void aw20216s_set_color(int index, uint8_t red, uint8_t green, uint8_t blue);
+void aw20216s_set_color_all(uint8_t red, uint8_t green, uint8_t blue);
+void aw20216s_update_pwm_buffers(pin_t cs_pin, uint8_t index);
+
+void aw20216s_flush(void);
+
+#define CS1_SW1 0x00
+#define CS2_SW1 0x01
+#define CS3_SW1 0x02
+#define CS4_SW1 0x03
+#define CS5_SW1 0x04
+#define CS6_SW1 0x05
+#define CS7_SW1 0x06
+#define CS8_SW1 0x07
+#define CS9_SW1 0x08
+#define CS10_SW1 0x09
+#define CS11_SW1 0x0A
+#define CS12_SW1 0x0B
+#define CS13_SW1 0x0C
+#define CS14_SW1 0x0D
+#define CS15_SW1 0x0E
+#define CS16_SW1 0x0F
+#define CS17_SW1 0x10
+#define CS18_SW1 0x11
+#define CS1_SW2 0x12
+#define CS2_SW2 0x13
+#define CS3_SW2 0x14
+#define CS4_SW2 0x15
+#define CS5_SW2 0x16
+#define CS6_SW2 0x17
+#define CS7_SW2 0x18
+#define CS8_SW2 0x19
+#define CS9_SW2 0x1A
+#define CS10_SW2 0x1B
+#define CS11_SW2 0x1C
+#define CS12_SW2 0x1D
+#define CS13_SW2 0x1E
+#define CS14_SW2 0x1F
+#define CS15_SW2 0x20
+#define CS16_SW2 0x21
+#define CS17_SW2 0x22
+#define CS18_SW2 0x23
+#define CS1_SW3 0x24
+#define CS2_SW3 0x25
+#define CS3_SW3 0x26
+#define CS4_SW3 0x27
+#define CS5_SW3 0x28
+#define CS6_SW3 0x29
+#define CS7_SW3 0x2A
+#define CS8_SW3 0x2B
+#define CS9_SW3 0x2C
+#define CS10_SW3 0x2D
+#define CS11_SW3 0x2E
+#define CS12_SW3 0x2F
+#define CS13_SW3 0x30
+#define CS14_SW3 0x31
+#define CS15_SW3 0x32
+#define CS16_SW3 0x33
+#define CS17_SW3 0x34
+#define CS18_SW3 0x35
+#define CS1_SW4 0x36
+#define CS2_SW4 0x37
+#define CS3_SW4 0x38
+#define CS4_SW4 0x39
+#define CS5_SW4 0x3A
+#define CS6_SW4 0x3B
+#define CS7_SW4 0x3C
+#define CS8_SW4 0x3D
+#define CS9_SW4 0x3E
+#define CS10_SW4 0x3F
+#define CS11_SW4 0x40
+#define CS12_SW4 0x41
+#define CS13_SW4 0x42
+#define CS14_SW4 0x43
+#define CS15_SW4 0x44
+#define CS16_SW4 0x45
+#define CS17_SW4 0x46
+#define CS18_SW4 0x47
+#define CS1_SW5 0x48
+#define CS2_SW5 0x49
+#define CS3_SW5 0x4A
+#define CS4_SW5 0x4B
+#define CS5_SW5 0x4C
+#define CS6_SW5 0x4D
+#define CS7_SW5 0x4E
+#define CS8_SW5 0x4F
+#define CS9_SW5 0x50
+#define CS10_SW5 0x51
+#define CS11_SW5 0x52
+#define CS12_SW5 0x53
+#define CS13_SW5 0x54
+#define CS14_SW5 0x55
+#define CS15_SW5 0x56
+#define CS16_SW5 0x57
+#define CS17_SW5 0x58
+#define CS18_SW5 0x59
+#define CS1_SW6 0x5A
+#define CS2_SW6 0x5B
+#define CS3_SW6 0x5C
+#define CS4_SW6 0x5D
+#define CS5_SW6 0x5E
+#define CS6_SW6 0x5F
+#define CS7_SW6 0x60
+#define CS8_SW6 0x61
+#define CS9_SW6 0x62
+#define CS10_SW6 0x63
+#define CS11_SW6 0x64
+#define CS12_SW6 0x65
+#define CS13_SW6 0x66
+#define CS14_SW6 0x67
+#define CS15_SW6 0x68
+#define CS16_SW6 0x69
+#define CS17_SW6 0x6A
+#define CS18_SW6 0x6B
+#define CS1_SW7 0x6C
+#define CS2_SW7 0x6D
+#define CS3_SW7 0x6E
+#define CS4_SW7 0x6F
+#define CS5_SW7 0x70
+#define CS6_SW7 0x71
+#define CS7_SW7 0x72
+#define CS8_SW7 0x73
+#define CS9_SW7 0x74
+#define CS10_SW7 0x75
+#define CS11_SW7 0x76
+#define CS12_SW7 0x77
+#define CS13_SW7 0x78
+#define CS14_SW7 0x79
+#define CS15_SW7 0x7A
+#define CS16_SW7 0x7B
+#define CS17_SW7 0x7C
+#define CS18_SW7 0x7D
+#define CS1_SW8 0x7E
+#define CS2_SW8 0x7F
+#define CS3_SW8 0x80
+#define CS4_SW8 0x81
+#define CS5_SW8 0x82
+#define CS6_SW8 0x83
+#define CS7_SW8 0x84
+#define CS8_SW8 0x85
+#define CS9_SW8 0x86
+#define CS10_SW8 0x87
+#define CS11_SW8 0x88
+#define CS12_SW8 0x89
+#define CS13_SW8 0x8A
+#define CS14_SW8 0x8B
+#define CS15_SW8 0x8C
+#define CS16_SW8 0x8D
+#define CS17_SW8 0x8E
+#define CS18_SW8 0x8F
+#define CS1_SW9 0x90
+#define CS2_SW9 0x91
+#define CS3_SW9 0x92
+#define CS4_SW9 0x93
+#define CS5_SW9 0x94
+#define CS6_SW9 0x95
+#define CS7_SW9 0x96
+#define CS8_SW9 0x97
+#define CS9_SW9 0x98
+#define CS10_SW9 0x99
+#define CS11_SW9 0x9A
+#define CS12_SW9 0x9B
+#define CS13_SW9 0x9C
+#define CS14_SW9 0x9D
+#define CS15_SW9 0x9E
+#define CS16_SW9 0x9F
+#define CS17_SW9 0xA0
+#define CS18_SW9 0xA1
+#define CS1_SW10 0xA2
+#define CS2_SW10 0xA3
+#define CS3_SW10 0xA4
+#define CS4_SW10 0xA5
+#define CS5_SW10 0xA6
+#define CS6_SW10 0xA7
+#define CS7_SW10 0xA8
+#define CS8_SW10 0xA9
+#define CS9_SW10 0xAA
+#define CS10_SW10 0xAB
+#define CS11_SW10 0xAC
+#define CS12_SW10 0xAD
+#define CS13_SW10 0xAE
+#define CS14_SW10 0xAF
+#define CS15_SW10 0xB0
+#define CS16_SW10 0xB1
+#define CS17_SW10 0xB2
+#define CS18_SW10 0xB3
+#define CS1_SW11 0xB4
+#define CS2_SW11 0xB5
+#define CS3_SW11 0xB6
+#define CS4_SW11 0xB7
+#define CS5_SW11 0xB8
+#define CS6_SW11 0xB9
+#define CS7_SW11 0xBA
+#define CS8_SW11 0xBB
+#define CS9_SW11 0xBC
+#define CS10_SW11 0xBD
+#define CS11_SW11 0xBE
+#define CS12_SW11 0xBF
+#define CS13_SW11 0xC0
+#define CS14_SW11 0xC1
+#define CS15_SW11 0xC2
+#define CS16_SW11 0xC3
+#define CS17_SW11 0xC4
+#define CS18_SW11 0xC5
+#define CS1_SW12 0xC6
+#define CS2_SW12 0xC7
+#define CS3_SW12 0xC8
+#define CS4_SW12 0xC9
+#define CS5_SW12 0xCA
+#define CS6_SW12 0xCB
+#define CS7_SW12 0xCC
+#define CS8_SW12 0xCD
+#define CS9_SW12 0xCE
+#define CS10_SW12 0xCF
+#define CS11_SW12 0xD0
+#define CS12_SW12 0xD1
+#define CS13_SW12 0xD2
+#define CS14_SW12 0xD3
+#define CS15_SW12 0xD4
+#define CS16_SW12 0xD5
+#define CS17_SW12 0xD6
+#define CS18_SW12 0xD7
diff --git a/drivers/led/ckled2001-simple.c b/drivers/led/ckled2001-simple.c
deleted file mode 100644
index c4d4c0a4cc27..000000000000
--- a/drivers/led/ckled2001-simple.c
+++ /dev/null
@@ -1,221 +0,0 @@
-/* Copyright 2021 @ Keychron (https://www.keychron.com)
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- */
-
-#include "ckled2001-simple.h"
-#include "i2c_master.h"
-#include "wait.h"
-
-#ifndef CKLED2001_TIMEOUT
-# define CKLED2001_TIMEOUT 100
-#endif
-
-#ifndef CKLED2001_PERSISTENCE
-# define CKLED2001_PERSISTENCE 0
-#endif
-
-#ifndef PHASE_CHANNEL
-# define PHASE_CHANNEL MSKPHASE_12CHANNEL
-#endif
-
-#ifndef CKLED2001_CURRENT_TUNE
-# define CKLED2001_CURRENT_TUNE \
- { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }
-#endif
-
-// Transfer buffer for TWITransmitData()
-uint8_t g_twi_transfer_buffer[20];
-
-// These buffers match the CKLED2001 PWM registers.
-// The control buffers match the PG0 LED On/Off registers.
-// Storing them like this is optimal for I2C transfers to the registers.
-// We could optimize this and take out the unused registers from these
-// buffers and the transfers in ckled2001_write_pwm_buffer() but it's
-// probably not worth the extra complexity.
-uint8_t g_pwm_buffer[DRIVER_COUNT][192];
-bool g_pwm_buffer_update_required[DRIVER_COUNT] = {false};
-
-uint8_t g_led_control_registers[DRIVER_COUNT][24] = {0};
-bool g_led_control_registers_update_required[DRIVER_COUNT] = {false};
-
-bool ckled2001_write_register(uint8_t addr, uint8_t reg, uint8_t data) {
- // If the transaction fails function returns false.
- g_twi_transfer_buffer[0] = reg;
- g_twi_transfer_buffer[1] = data;
-
-#if CKLED2001_PERSISTENCE > 0
- for (uint8_t i = 0; i < CKLED2001_PERSISTENCE; i++) {
- if (i2c_transmit(addr << 1, g_twi_transfer_buffer, 2, CKLED2001_TIMEOUT) != 0) {
- return false;
- }
- }
-#else
- if (i2c_transmit(addr << 1, g_twi_transfer_buffer, 2, CKLED2001_TIMEOUT) != 0) {
- return false;
- }
-#endif
- return true;
-}
-
-bool ckled2001_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer) {
- // Assumes PG1 is already selected.
- // If any of the transactions fails function returns false.
- // Transmit PWM registers in 12 transfers of 16 bytes.
- // g_twi_transfer_buffer[] is 20 bytes
-
- // Iterate over the pwm_buffer contents at 16 byte intervals.
- for (int i = 0; i < 192; i += 16) {
- g_twi_transfer_buffer[0] = i;
- // Copy the data from i to i+15.
- // Device will auto-increment register for data after the first byte
- // Thus this sets registers 0x00-0x0F, 0x10-0x1F, etc. in one transfer.
- for (int j = 0; j < 16; j++) {
- g_twi_transfer_buffer[1 + j] = pwm_buffer[i + j];
- }
-
-#if CKLED2001_PERSISTENCE > 0
- for (uint8_t i = 0; i < CKLED2001_PERSISTENCE; i++) {
- if (i2c_transmit(addr << 1, g_twi_transfer_buffer, 17, CKLED2001_TIMEOUT) != 0) {
- return false;
- }
- }
-#else
- if (i2c_transmit(addr << 1, g_twi_transfer_buffer, 17, CKLED2001_TIMEOUT) != 0) {
- return false;
- }
-#endif
- }
- return true;
-}
-
-void ckled2001_init(uint8_t addr) {
- // Select to function page
- ckled2001_write_register(addr, CONFIGURE_CMD_PAGE, FUNCTION_PAGE);
- // Setting LED driver to shutdown mode
- ckled2001_write_register(addr, CONFIGURATION_REG, MSKSW_SHUT_DOWN_MODE);
- // Setting internal channel pulldown/pullup
- ckled2001_write_register(addr, PDU_REG, MSKSET_CA_CB_CHANNEL);
- // Select number of scan phase
- ckled2001_write_register(addr, SCAN_PHASE_REG, PHASE_CHANNEL);
- // Setting PWM Delay Phase
- ckled2001_write_register(addr, SLEW_RATE_CONTROL_MODE1_REG, MSKPWM_DELAY_PHASE_ENABLE);
- // Setting Driving/Sinking Channel Slew Rate
- ckled2001_write_register(addr, SLEW_RATE_CONTROL_MODE2_REG, MSKDRIVING_SINKING_CHHANNEL_SLEWRATE_ENABLE);
- // Setting Iref
- ckled2001_write_register(addr, SOFTWARE_SLEEP_REG, MSKSLEEP_DISABLE);
- // Set LED CONTROL PAGE (Page 0)
- ckled2001_write_register(addr, CONFIGURE_CMD_PAGE, LED_CONTROL_PAGE);
- for (int i = 0; i < LED_CONTROL_ON_OFF_LENGTH; i++) {
- ckled2001_write_register(addr, i, 0x00);
- }
-
- // Set PWM PAGE (Page 1)
- ckled2001_write_register(addr, CONFIGURE_CMD_PAGE, LED_PWM_PAGE);
- for (int i = 0; i < LED_CURRENT_TUNE_LENGTH; i++) {
- ckled2001_write_register(addr, i, 0x00);
- }
-
- // Set CURRENT PAGE (Page 4)
- uint8_t current_tuen_reg_list[LED_CURRENT_TUNE_LENGTH] = CKLED2001_CURRENT_TUNE;
- ckled2001_write_register(addr, CONFIGURE_CMD_PAGE, CURRENT_TUNE_PAGE);
- for (int i = 0; i < LED_CURRENT_TUNE_LENGTH; i++) {
- ckled2001_write_register(addr, i, current_tuen_reg_list[i]);
- }
-
- // Enable LEDs ON/OFF
- ckled2001_write_register(addr, CONFIGURE_CMD_PAGE, LED_CONTROL_PAGE);
- for (int i = 0; i < LED_CONTROL_ON_OFF_LENGTH; i++) {
- ckled2001_write_register(addr, i, 0xFF);
- }
-
- // Select to function page
- ckled2001_write_register(addr, CONFIGURE_CMD_PAGE, FUNCTION_PAGE);
- // Setting LED driver to normal mode
- ckled2001_write_register(addr, CONFIGURATION_REG, MSKSW_NORMAL_MODE);
-}
-
-void ckled2001_set_value(int index, uint8_t value) {
- ckled2001_led led;
- if (index >= 0 && index < LED_MATRIX_LED_COUNT) {
- memcpy_P(&led, (&g_ckled2001_leds[index]), sizeof(led));
-
- if (g_pwm_buffer[led.driver][led.v] == value) {
- return;
- }
- g_pwm_buffer[led.driver][led.v] = value;
- g_pwm_buffer_update_required[led.driver] = true;
- }
-}
-
-void ckled2001_set_value_all(uint8_t value) {
- for (int i = 0; i < LED_MATRIX_LED_COUNT; i++) {
- ckled2001_set_value(i, value);
- }
-}
-
-void ckled2001_set_led_control_register(uint8_t index, bool value) {
- ckled2001_led led;
- memcpy_P(&led, (&g_ckled2001_leds[index]), sizeof(led));
-
- uint8_t control_register = led.v / 8;
- uint8_t bit_value = led.v % 8;
-
- if (value) {
- g_led_control_registers[led.driver][control_register] |= (1 << bit_value);
- } else {
- g_led_control_registers[led.driver][control_register] &= ~(1 << bit_value);
- }
-
- g_led_control_registers_update_required[led.driver] = true;
-}
-
-void ckled2001_update_pwm_buffers(uint8_t addr, uint8_t index) {
- if (g_pwm_buffer_update_required[index]) {
- ckled2001_write_register(addr, CONFIGURE_CMD_PAGE, LED_PWM_PAGE);
-
- // If any of the transactions fail we risk writing dirty PG0,
- // refresh page 0 just in case.
- if (!ckled2001_write_pwm_buffer(addr, g_pwm_buffer[index])) {
- g_led_control_registers_update_required[index] = true;
- }
- }
- g_pwm_buffer_update_required[index] = false;
-}
-
-void ckled2001_update_led_control_registers(uint8_t addr, uint8_t index) {
- if (g_led_control_registers_update_required[index]) {
- ckled2001_write_register(addr, CONFIGURE_CMD_PAGE, LED_CONTROL_PAGE);
- for (int i = 0; i < 24; i++) {
- ckled2001_write_register(addr, i, g_led_control_registers[index][i]);
- }
- }
- g_led_control_registers_update_required[index] = false;
-}
-
-void ckled2001_sw_return_normal(uint8_t addr) {
- // Select to function page
- ckled2001_write_register(addr, CONFIGURE_CMD_PAGE, FUNCTION_PAGE);
- // Setting LED driver to normal mode
- ckled2001_write_register(addr, CONFIGURATION_REG, MSKSW_NORMAL_MODE);
-}
-
-void ckled2001_sw_shutdown(uint8_t addr) {
- // Select to function page
- ckled2001_write_register(addr, CONFIGURE_CMD_PAGE, FUNCTION_PAGE);
- // Setting LED driver to shutdown mode
- ckled2001_write_register(addr, CONFIGURATION_REG, MSKSW_SHUT_DOWN_MODE);
- // Write SW Sleep Register
- ckled2001_write_register(addr, SOFTWARE_SLEEP_REG, MSKSLEEP_ENABLE);
-}
diff --git a/drivers/led/ckled2001-simple.h b/drivers/led/ckled2001-simple.h
deleted file mode 100644
index c94df62dd2ee..000000000000
--- a/drivers/led/ckled2001-simple.h
+++ /dev/null
@@ -1,337 +0,0 @@
-/* Copyright 2021 @ Keychron (https://www.keychron.com)
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- */
-
-#pragma once
-
-#include
-#include
-#include "progmem.h"
-
-typedef struct ckled2001_led {
- uint8_t driver : 2;
- uint8_t v;
-} __attribute__((packed)) ckled2001_led;
-
-extern const ckled2001_led PROGMEM g_ckled2001_leds[LED_MATRIX_LED_COUNT];
-
-void ckled2001_init(uint8_t addr);
-bool ckled2001_write_register(uint8_t addr, uint8_t reg, uint8_t data);
-bool ckled2001_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer);
-
-void ckled2001_set_value(int index, uint8_t value);
-void ckled2001_set_value_all(uint8_t value);
-
-void ckled2001_set_led_control_register(uint8_t index, bool value);
-
-// This should not be called from an interrupt
-// (eg. from a timer interrupt).
-// Call this while idle (in between matrix scans).
-// If the buffer is dirty, it will update the driver with the buffer.
-void ckled2001_update_pwm_buffers(uint8_t addr, uint8_t index);
-void ckled2001_update_led_control_registers(uint8_t addr, uint8_t index);
-
-void ckled2001_sw_return_normal(uint8_t addr);
-void ckled2001_sw_shutdown(uint8_t addr);
-
-// Registers Page Define
-#define CONFIGURE_CMD_PAGE 0xFD
-#define LED_CONTROL_PAGE 0x00
-#define LED_PWM_PAGE 0x01
-#define FUNCTION_PAGE 0x03
-#define CURRENT_TUNE_PAGE 0x04
-
-// Function Register: address 0x00
-#define CONFIGURATION_REG 0x00
-#define MSKSW_SHUT_DOWN_MODE (0x0 << 0)
-#define MSKSW_NORMAL_MODE (0x1 << 0)
-
-#define DRIVER_ID_REG 0x11
-#define CKLED2001_ID 0x8A
-
-#define PDU_REG 0x13
-#define MSKSET_CA_CB_CHANNEL 0xAA
-#define MSKCLR_CA_CB_CHANNEL 0x00
-
-#define SCAN_PHASE_REG 0x14
-#define MSKPHASE_12CHANNEL 0x00
-#define MSKPHASE_11CHANNEL 0x01
-#define MSKPHASE_10CHANNEL 0x02
-#define MSKPHASE_9CHANNEL 0x03
-#define MSKPHASE_8CHANNEL 0x04
-#define MSKPHASE_7CHANNEL 0x05
-#define MSKPHASE_6CHANNEL 0x06
-#define MSKPHASE_5CHANNEL 0x07
-#define MSKPHASE_4CHANNEL 0x08
-#define MSKPHASE_3CHANNEL 0x09
-#define MSKPHASE_2CHANNEL 0x0A
-#define MSKPHASE_1CHANNEL 0x0B
-
-#define SLEW_RATE_CONTROL_MODE1_REG 0x15
-#define MSKPWM_DELAY_PHASE_ENABLE 0x04
-#define MSKPWM_DELAY_PHASE_DISABLE 0x00
-
-#define SLEW_RATE_CONTROL_MODE2_REG 0x16
-#define MSKDRIVING_SINKING_CHHANNEL_SLEWRATE_ENABLE 0xC0
-#define MSKDRIVING_SINKING_CHHANNEL_SLEWRATE_DISABLE 0x00
-
-#define OPEN_SHORT_ENABLE_REG 0x17
-#define MSKOPEN_DETECTION_ENABLE (0x01 << 7)
-#define MSKOPEN_DETECTION_DISABLE (0x00)
-
-#define MSKSHORT_DETECTION_ENABLE (0x01 << 6)
-#define MSKSHORT_DETECTION_DISABLE (0x00)
-
-#define OPEN_SHORT_DUTY_REG 0x18
-#define OPEN_SHORT_FLAG_REG 0x19
-
-#define MSKOPEN_DETECTION_INTERRUPT_ENABLE (0x01 << 7)
-#define MSKOPEN_DETECTION_INTERRUPT_DISABLE (0x00)
-
-#define MSKSHORT_DETECTION_INTERRUPT_ENABLE (0x01 << 6)
-#define MSKSHORT_DETECTION_INTERRUPT_DISABLE (0x00)
-
-#define SOFTWARE_SLEEP_REG 0x1A
-#define MSKSLEEP_ENABLE 0x02
-#define MSKSLEEP_DISABLE 0x00
-
-// LED Control Registers
-#define LED_CONTROL_ON_OFF_FIRST_ADDR 0x0
-#define LED_CONTROL_ON_OFF_LAST_ADDR 0x17
-#define LED_CONTROL_ON_OFF_LENGTH ((LED_CONTROL_ON_OFF_LAST_ADDR - LED_CONTROL_ON_OFF_FIRST_ADDR) + 1)
-
-#define LED_CONTROL_OPEN_FIRST_ADDR 0x18
-#define LED_CONTROL_OPEN_LAST_ADDR 0x2F
-#define LED_CONTROL_OPEN_LENGTH ((LED_CONTROL_OPEN_LAST_ADDR - LED_CONTROL_OPEN_FIRST_ADDR) + 1)
-
-#define LED_CONTROL_SHORT_FIRST_ADDR 0x30
-#define LED_CONTROL_SHORT_LAST_ADDR 0x47
-#define LED_CONTROL_SHORT_LENGTH ((LED_CONTROL_SHORT_LAST_ADDR - LED_CONTROL_SHORT_FIRST_ADDR) + 1)
-
-#define LED_CONTROL_PAGE_LENGTH 0x48
-
-// LED Control Registers
-#define LED_PWM_FIRST_ADDR 0x00
-#define LED_PWM_LAST_ADDR 0xBF
-#define LED_PWM_LENGTH 0xC0
-
-// Current Tune Registers
-#define LED_CURRENT_TUNE_FIRST_ADDR 0x00
-#define LED_CURRENT_TUNE_LAST_ADDR 0x0B
-#define LED_CURRENT_TUNE_LENGTH 0x0C
-
-#define A_1 0x00
-#define A_2 0x01
-#define A_3 0x02
-#define A_4 0x03
-#define A_5 0x04
-#define A_6 0x05
-#define A_7 0x06
-#define A_8 0x07
-#define A_9 0x08
-#define A_10 0x09
-#define A_11 0x0A
-#define A_12 0x0B
-#define A_13 0x0C
-#define A_14 0x0D
-#define A_15 0x0E
-#define A_16 0x0F
-
-#define B_1 0x10
-#define B_2 0x11
-#define B_3 0x12
-#define B_4 0x13
-#define B_5 0x14
-#define B_6 0x15
-#define B_7 0x16
-#define B_8 0x17
-#define B_9 0x18
-#define B_10 0x19
-#define B_11 0x1A
-#define B_12 0x1B
-#define B_13 0x1C
-#define B_14 0x1D
-#define B_15 0x1E
-#define B_16 0x1F
-
-#define C_1 0x20
-#define C_2 0x21
-#define C_3 0x22
-#define C_4 0x23
-#define C_5 0x24
-#define C_6 0x25
-#define C_7 0x26
-#define C_8 0x27
-#define C_9 0x28
-#define C_10 0x29
-#define C_11 0x2A
-#define C_12 0x2B
-#define C_13 0x2C
-#define C_14 0x2D
-#define C_15 0x2E
-#define C_16 0x2F
-
-#define D_1 0x30
-#define D_2 0x31
-#define D_3 0x32
-#define D_4 0x33
-#define D_5 0x34
-#define D_6 0x35
-#define D_7 0x36
-#define D_8 0x37
-#define D_9 0x38
-#define D_10 0x39
-#define D_11 0x3A
-#define D_12 0x3B
-#define D_13 0x3C
-#define D_14 0x3D
-#define D_15 0x3E
-#define D_16 0x3F
-
-#define E_1 0x40
-#define E_2 0x41
-#define E_3 0x42
-#define E_4 0x43
-#define E_5 0x44
-#define E_6 0x45
-#define E_7 0x46
-#define E_8 0x47
-#define E_9 0x48
-#define E_10 0x49
-#define E_11 0x4A
-#define E_12 0x4B
-#define E_13 0x4C
-#define E_14 0x4D
-#define E_15 0x4E
-#define E_16 0x4F
-
-#define F_1 0x50
-#define F_2 0x51
-#define F_3 0x52
-#define F_4 0x53
-#define F_5 0x54
-#define F_6 0x55
-#define F_7 0x56
-#define F_8 0x57
-#define F_9 0x58
-#define F_10 0x59
-#define F_11 0x5A
-#define F_12 0x5B
-#define F_13 0x5C
-#define F_14 0x5D
-#define F_15 0x5E
-#define F_16 0x5F
-
-#define G_1 0x60
-#define G_2 0x61
-#define G_3 0x62
-#define G_4 0x63
-#define G_5 0x64
-#define G_6 0x65
-#define G_7 0x66
-#define G_8 0x67
-#define G_9 0x68
-#define G_10 0x69
-#define G_11 0x6A
-#define G_12 0x6B
-#define G_13 0x6C
-#define G_14 0x6D
-#define G_15 0x6E
-#define G_16 0x6F
-
-#define H_1 0x70
-#define H_2 0x71
-#define H_3 0x72
-#define H_4 0x73
-#define H_5 0x74
-#define H_6 0x75
-#define H_7 0x76
-#define H_8 0x77
-#define H_9 0x78
-#define H_10 0x79
-#define H_11 0x7A
-#define H_12 0x7B
-#define H_13 0x7C
-#define H_14 0x7D
-#define H_15 0x7E
-#define H_16 0x7F
-
-#define I_1 0x80
-#define I_2 0x81
-#define I_3 0x82
-#define I_4 0x83
-#define I_5 0x84
-#define I_6 0x85
-#define I_7 0x86
-#define I_8 0x87
-#define I_9 0x88
-#define I_10 0x89
-#define I_11 0x8A
-#define I_12 0x8B
-#define I_13 0x8C
-#define I_14 0x8D
-#define I_15 0x8E
-#define I_16 0x8F
-
-#define J_1 0x90
-#define J_2 0x91
-#define J_3 0x92
-#define J_4 0x93
-#define J_5 0x94
-#define J_6 0x95
-#define J_7 0x96
-#define J_8 0x97
-#define J_9 0x98
-#define J_10 0x99
-#define J_11 0x9A
-#define J_12 0x9B
-#define J_13 0x9C
-#define J_14 0x9D
-#define J_15 0x9E
-#define J_16 0x9F
-
-#define K_1 0xA0
-#define K_2 0xA1
-#define K_3 0xA2
-#define K_4 0xA3
-#define K_5 0xA4
-#define K_6 0xA5
-#define K_7 0xA6
-#define K_8 0xA7
-#define K_9 0xA8
-#define K_10 0xA9
-#define K_11 0xAA
-#define K_12 0xAB
-#define K_13 0xAC
-#define K_14 0xAD
-#define K_15 0xAE
-#define K_16 0xAF
-
-#define L_1 0xB0
-#define L_2 0xB1
-#define L_3 0xB2
-#define L_4 0xB3
-#define L_5 0xB4
-#define L_6 0xB5
-#define L_7 0xB6
-#define L_8 0xB7
-#define L_9 0xB8
-#define L_10 0xB9
-#define L_11 0xBA
-#define L_12 0xBB
-#define L_13 0xBC
-#define L_14 0xBD
-#define L_15 0xBE
-#define L_16 0xBF
\ No newline at end of file
diff --git a/drivers/led/ckled2001.c b/drivers/led/ckled2001.c
deleted file mode 100644
index 6ababf55e906..000000000000
--- a/drivers/led/ckled2001.c
+++ /dev/null
@@ -1,236 +0,0 @@
-/* Copyright 2021 @ Keychron (https://www.keychron.com)
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- */
-
-#include "ckled2001.h"
-#include "i2c_master.h"
-#include "wait.h"
-
-#ifndef CKLED2001_TIMEOUT
-# define CKLED2001_TIMEOUT 100
-#endif
-
-#ifndef CKLED2001_PERSISTENCE
-# define CKLED2001_PERSISTENCE 0
-#endif
-
-#ifndef PHASE_CHANNEL
-# define PHASE_CHANNEL MSKPHASE_12CHANNEL
-#endif
-
-#ifndef CKLED2001_CURRENT_TUNE
-# define CKLED2001_CURRENT_TUNE \
- { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }
-#endif
-
-// Transfer buffer for TWITransmitData()
-uint8_t g_twi_transfer_buffer[65];
-
-// These buffers match the CKLED2001 PWM registers.
-// The control buffers match the PG0 LED On/Off registers.
-// Storing them like this is optimal for I2C transfers to the registers.
-// We could optimize this and take out the unused registers from these
-// buffers and the transfers in ckled2001_write_pwm_buffer() but it's
-// probably not worth the extra complexity.
-uint8_t g_pwm_buffer[DRIVER_COUNT][192];
-bool g_pwm_buffer_update_required[DRIVER_COUNT] = {false};
-
-uint8_t g_led_control_registers[DRIVER_COUNT][24] = {0};
-bool g_led_control_registers_update_required[DRIVER_COUNT] = {false};
-
-bool ckled2001_write_register(uint8_t addr, uint8_t reg, uint8_t data) {
- // If the transaction fails function returns false.
- g_twi_transfer_buffer[0] = reg;
- g_twi_transfer_buffer[1] = data;
-
-#if CKLED2001_PERSISTENCE > 0
- for (uint8_t i = 0; i < CKLED2001_PERSISTENCE; i++) {
- if (i2c_transmit(addr << 1, g_twi_transfer_buffer, 2, CKLED2001_TIMEOUT) != 0) {
- return false;
- }
- }
-#else
- if (i2c_transmit(addr << 1, g_twi_transfer_buffer, 2, CKLED2001_TIMEOUT) != 0) {
- return false;
- }
-#endif
- return true;
-}
-
-bool ckled2001_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer) {
- // Assumes PG1 is already selected.
- // If any of the transactions fails function returns false.
- // Transmit PWM registers in 3 transfers of 64 bytes.
-
- // Iterate over the pwm_buffer contents at 64 byte intervals.
- for (uint8_t i = 0; i < 192; i += 64) {
- g_twi_transfer_buffer[0] = i;
- // Copy the data from i to i+63.
- // Device will auto-increment register for data after the first byte
- // Thus this sets registers 0x00-0x0F, 0x10-0x1F, etc. in one transfer.
- for (uint8_t j = 0; j < 64; j++) {
- g_twi_transfer_buffer[1 + j] = pwm_buffer[i + j];
- }
-
-#if CKLED2001_PERSISTENCE > 0
- for (uint8_t i = 0; i < CKLED2001_PERSISTENCE; i++) {
- if (i2c_transmit(addr << 1, g_twi_transfer_buffer, 65, CKLED2001_TIMEOUT) != 0) {
- return false;
- }
- }
-#else
- if (i2c_transmit(addr << 1, g_twi_transfer_buffer, 65, CKLED2001_TIMEOUT) != 0) {
- return false;
- }
-#endif
- }
- return true;
-}
-
-void ckled2001_init(uint8_t addr) {
- // Select to function page
- ckled2001_write_register(addr, CONFIGURE_CMD_PAGE, FUNCTION_PAGE);
- // Setting LED driver to shutdown mode
- ckled2001_write_register(addr, CONFIGURATION_REG, MSKSW_SHUT_DOWN_MODE);
- // Setting internal channel pulldown/pullup
- ckled2001_write_register(addr, PDU_REG, MSKSET_CA_CB_CHANNEL);
- // Select number of scan phase
- ckled2001_write_register(addr, SCAN_PHASE_REG, PHASE_CHANNEL);
- // Setting PWM Delay Phase
- ckled2001_write_register(addr, SLEW_RATE_CONTROL_MODE1_REG, MSKPWM_DELAY_PHASE_ENABLE);
- // Setting Driving/Sinking Channel Slew Rate
- ckled2001_write_register(addr, SLEW_RATE_CONTROL_MODE2_REG, MSKDRIVING_SINKING_CHHANNEL_SLEWRATE_ENABLE);
- // Setting Iref
- ckled2001_write_register(addr, SOFTWARE_SLEEP_REG, MSKSLEEP_DISABLE);
- // Set LED CONTROL PAGE (Page 0)
- ckled2001_write_register(addr, CONFIGURE_CMD_PAGE, LED_CONTROL_PAGE);
- for (int i = 0; i < LED_CONTROL_ON_OFF_LENGTH; i++) {
- ckled2001_write_register(addr, i, 0x00);
- }
-
- // Set PWM PAGE (Page 1)
- ckled2001_write_register(addr, CONFIGURE_CMD_PAGE, LED_PWM_PAGE);
- for (int i = 0; i < LED_CURRENT_TUNE_LENGTH; i++) {
- ckled2001_write_register(addr, i, 0x00);
- }
-
- // Set CURRENT PAGE (Page 4)
- uint8_t current_tuen_reg_list[LED_CURRENT_TUNE_LENGTH] = CKLED2001_CURRENT_TUNE;
- ckled2001_write_register(addr, CONFIGURE_CMD_PAGE, CURRENT_TUNE_PAGE);
- for (int i = 0; i < LED_CURRENT_TUNE_LENGTH; i++) {
- ckled2001_write_register(addr, i, current_tuen_reg_list[i]);
- }
-
- // Enable LEDs ON/OFF
- ckled2001_write_register(addr, CONFIGURE_CMD_PAGE, LED_CONTROL_PAGE);
- for (int i = 0; i < LED_CONTROL_ON_OFF_LENGTH; i++) {
- ckled2001_write_register(addr, i, 0xFF);
- }
-
- // Select to function page
- ckled2001_write_register(addr, CONFIGURE_CMD_PAGE, FUNCTION_PAGE);
- // Setting LED driver to normal mode
- ckled2001_write_register(addr, CONFIGURATION_REG, MSKSW_NORMAL_MODE);
-}
-
-void ckled2001_set_color(int index, uint8_t red, uint8_t green, uint8_t blue) {
- ckled2001_led led;
- if (index >= 0 && index < RGB_MATRIX_LED_COUNT) {
- memcpy_P(&led, (&g_ckled2001_leds[index]), sizeof(led));
-
- if (g_pwm_buffer[led.driver][led.r] == red && g_pwm_buffer[led.driver][led.g] == green && g_pwm_buffer[led.driver][led.b] == blue) {
- return;
- }
- g_pwm_buffer[led.driver][led.r] = red;
- g_pwm_buffer[led.driver][led.g] = green;
- g_pwm_buffer[led.driver][led.b] = blue;
- g_pwm_buffer_update_required[led.driver] = true;
- }
-}
-
-void ckled2001_set_color_all(uint8_t red, uint8_t green, uint8_t blue) {
- for (int i = 0; i < RGB_MATRIX_LED_COUNT; i++) {
- ckled2001_set_color(i, red, green, blue);
- }
-}
-
-void ckled2001_set_led_control_register(uint8_t index, bool red, bool green, bool blue) {
- ckled2001_led led;
- memcpy_P(&led, (&g_ckled2001_leds[index]), sizeof(led));
-
- uint8_t control_register_r = led.r / 8;
- uint8_t control_register_g = led.g / 8;
- uint8_t control_register_b = led.b / 8;
- uint8_t bit_r = led.r % 8;
- uint8_t bit_g = led.g % 8;
- uint8_t bit_b = led.b % 8;
-
- if (red) {
- g_led_control_registers[led.driver][control_register_r] |= (1 << bit_r);
- } else {
- g_led_control_registers[led.driver][control_register_r] &= ~(1 << bit_r);
- }
- if (green) {
- g_led_control_registers[led.driver][control_register_g] |= (1 << bit_g);
- } else {
- g_led_control_registers[led.driver][control_register_g] &= ~(1 << bit_g);
- }
- if (blue) {
- g_led_control_registers[led.driver][control_register_b] |= (1 << bit_b);
- } else {
- g_led_control_registers[led.driver][control_register_b] &= ~(1 << bit_b);
- }
-
- g_led_control_registers_update_required[led.driver] = true;
-}
-
-void ckled2001_update_pwm_buffers(uint8_t addr, uint8_t index) {
- if (g_pwm_buffer_update_required[index]) {
- ckled2001_write_register(addr, CONFIGURE_CMD_PAGE, LED_PWM_PAGE);
-
- // If any of the transactions fail we risk writing dirty PG0,
- // refresh page 0 just in case.
- if (!ckled2001_write_pwm_buffer(addr, g_pwm_buffer[index])) {
- g_led_control_registers_update_required[index] = true;
- }
- }
- g_pwm_buffer_update_required[index] = false;
-}
-
-void ckled2001_update_led_control_registers(uint8_t addr, uint8_t index) {
- if (g_led_control_registers_update_required[index]) {
- ckled2001_write_register(addr, CONFIGURE_CMD_PAGE, LED_CONTROL_PAGE);
- for (int i = 0; i < 24; i++) {
- ckled2001_write_register(addr, i, g_led_control_registers[index][i]);
- }
- }
- g_led_control_registers_update_required[index] = false;
-}
-
-void ckled2001_sw_return_normal(uint8_t addr) {
- // Select to function page
- ckled2001_write_register(addr, CONFIGURE_CMD_PAGE, FUNCTION_PAGE);
- // Setting LED driver to normal mode
- ckled2001_write_register(addr, CONFIGURATION_REG, MSKSW_NORMAL_MODE);
-}
-
-void ckled2001_sw_shutdown(uint8_t addr) {
- // Select to function page
- ckled2001_write_register(addr, CONFIGURE_CMD_PAGE, FUNCTION_PAGE);
- // Setting LED driver to shutdown mode
- ckled2001_write_register(addr, CONFIGURATION_REG, MSKSW_SHUT_DOWN_MODE);
- // Write SW Sleep Register
- ckled2001_write_register(addr, SOFTWARE_SLEEP_REG, MSKSLEEP_ENABLE);
-}
diff --git a/drivers/led/ckled2001.h b/drivers/led/ckled2001.h
deleted file mode 100644
index 32da137fb7ac..000000000000
--- a/drivers/led/ckled2001.h
+++ /dev/null
@@ -1,339 +0,0 @@
-/* Copyright 2021 @ Keychron (https://www.keychron.com)
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- */
-
-#pragma once
-
-#include
-#include
-#include "progmem.h"
-
-typedef struct ckled2001_led {
- uint8_t driver : 2;
- uint8_t r;
- uint8_t g;
- uint8_t b;
-} __attribute__((packed)) ckled2001_led;
-
-extern const ckled2001_led PROGMEM g_ckled2001_leds[RGB_MATRIX_LED_COUNT];
-
-void ckled2001_init(uint8_t addr);
-bool ckled2001_write_register(uint8_t addr, uint8_t reg, uint8_t data);
-bool ckled2001_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer);
-
-void ckled2001_set_color(int index, uint8_t red, uint8_t green, uint8_t blue);
-void ckled2001_set_color_all(uint8_t red, uint8_t green, uint8_t blue);
-
-void ckled2001_set_led_control_register(uint8_t index, bool red, bool green, bool blue);
-
-// This should not be called from an interrupt
-// (eg. from a timer interrupt).
-// Call this while idle (in between matrix scans).
-// If the buffer is dirty, it will update the driver with the buffer.
-void ckled2001_update_pwm_buffers(uint8_t addr, uint8_t index);
-void ckled2001_update_led_control_registers(uint8_t addr, uint8_t index);
-
-void ckled2001_sw_return_normal(uint8_t addr);
-void ckled2001_sw_shutdown(uint8_t addr);
-
-// Registers Page Define
-#define CONFIGURE_CMD_PAGE 0xFD
-#define LED_CONTROL_PAGE 0x00
-#define LED_PWM_PAGE 0x01
-#define FUNCTION_PAGE 0x03
-#define CURRENT_TUNE_PAGE 0x04
-
-// Function Register: address 0x00
-#define CONFIGURATION_REG 0x00
-#define MSKSW_SHUT_DOWN_MODE (0x0 << 0)
-#define MSKSW_NORMAL_MODE (0x1 << 0)
-
-#define DRIVER_ID_REG 0x11
-#define CKLED2001_ID 0x8A
-
-#define PDU_REG 0x13
-#define MSKSET_CA_CB_CHANNEL 0xAA
-#define MSKCLR_CA_CB_CHANNEL 0x00
-
-#define SCAN_PHASE_REG 0x14
-#define MSKPHASE_12CHANNEL 0x00
-#define MSKPHASE_11CHANNEL 0x01
-#define MSKPHASE_10CHANNEL 0x02
-#define MSKPHASE_9CHANNEL 0x03
-#define MSKPHASE_8CHANNEL 0x04
-#define MSKPHASE_7CHANNEL 0x05
-#define MSKPHASE_6CHANNEL 0x06
-#define MSKPHASE_5CHANNEL 0x07
-#define MSKPHASE_4CHANNEL 0x08
-#define MSKPHASE_3CHANNEL 0x09
-#define MSKPHASE_2CHANNEL 0x0A
-#define MSKPHASE_1CHANNEL 0x0B
-
-#define SLEW_RATE_CONTROL_MODE1_REG 0x15
-#define MSKPWM_DELAY_PHASE_ENABLE 0x04
-#define MSKPWM_DELAY_PHASE_DISABLE 0x00
-
-#define SLEW_RATE_CONTROL_MODE2_REG 0x16
-#define MSKDRIVING_SINKING_CHHANNEL_SLEWRATE_ENABLE 0xC0
-#define MSKDRIVING_SINKING_CHHANNEL_SLEWRATE_DISABLE 0x00
-
-#define OPEN_SHORT_ENABLE_REG 0x17
-#define MSKOPEN_DETECTION_ENABLE (0x01 << 7)
-#define MSKOPEN_DETECTION_DISABLE (0x00)
-
-#define MSKSHORT_DETECTION_ENABLE (0x01 << 6)
-#define MSKSHORT_DETECTION_DISABLE (0x00)
-
-#define OPEN_SHORT_DUTY_REG 0x18
-#define OPEN_SHORT_FLAG_REG 0x19
-
-#define MSKOPEN_DETECTION_INTERRUPT_ENABLE (0x01 << 7)
-#define MSKOPEN_DETECTION_INTERRUPT_DISABLE (0x00)
-
-#define MSKSHORT_DETECTION_INTERRUPT_ENABLE (0x01 << 6)
-#define MSKSHORT_DETECTION_INTERRUPT_DISABLE (0x00)
-
-#define SOFTWARE_SLEEP_REG 0x1A
-#define MSKSLEEP_ENABLE 0x02
-#define MSKSLEEP_DISABLE 0x00
-
-// LED Control Registers
-#define LED_CONTROL_ON_OFF_FIRST_ADDR 0x0
-#define LED_CONTROL_ON_OFF_LAST_ADDR 0x17
-#define LED_CONTROL_ON_OFF_LENGTH ((LED_CONTROL_ON_OFF_LAST_ADDR - LED_CONTROL_ON_OFF_FIRST_ADDR) + 1)
-
-#define LED_CONTROL_OPEN_FIRST_ADDR 0x18
-#define LED_CONTROL_OPEN_LAST_ADDR 0x2F
-#define LED_CONTROL_OPEN_LENGTH ((LED_CONTROL_OPEN_LAST_ADDR - LED_CONTROL_OPEN_FIRST_ADDR) + 1)
-
-#define LED_CONTROL_SHORT_FIRST_ADDR 0x30
-#define LED_CONTROL_SHORT_LAST_ADDR 0x47
-#define LED_CONTROL_SHORT_LENGTH ((LED_CONTROL_SHORT_LAST_ADDR - LED_CONTROL_SHORT_FIRST_ADDR) + 1)
-
-#define LED_CONTROL_PAGE_LENGTH 0x48
-
-// LED Control Registers
-#define LED_PWM_FIRST_ADDR 0x00
-#define LED_PWM_LAST_ADDR 0xBF
-#define LED_PWM_LENGTH 0xC0
-
-// Current Tune Registers
-#define LED_CURRENT_TUNE_FIRST_ADDR 0x00
-#define LED_CURRENT_TUNE_LAST_ADDR 0x0B
-#define LED_CURRENT_TUNE_LENGTH 0x0C
-
-#define A_1 0x00
-#define A_2 0x01
-#define A_3 0x02
-#define A_4 0x03
-#define A_5 0x04
-#define A_6 0x05
-#define A_7 0x06
-#define A_8 0x07
-#define A_9 0x08
-#define A_10 0x09
-#define A_11 0x0A
-#define A_12 0x0B
-#define A_13 0x0C
-#define A_14 0x0D
-#define A_15 0x0E
-#define A_16 0x0F
-
-#define B_1 0x10
-#define B_2 0x11
-#define B_3 0x12
-#define B_4 0x13
-#define B_5 0x14
-#define B_6 0x15
-#define B_7 0x16
-#define B_8 0x17
-#define B_9 0x18
-#define B_10 0x19
-#define B_11 0x1A
-#define B_12 0x1B
-#define B_13 0x1C
-#define B_14 0x1D
-#define B_15 0x1E
-#define B_16 0x1F
-
-#define C_1 0x20
-#define C_2 0x21
-#define C_3 0x22
-#define C_4 0x23
-#define C_5 0x24
-#define C_6 0x25
-#define C_7 0x26
-#define C_8 0x27
-#define C_9 0x28
-#define C_10 0x29
-#define C_11 0x2A
-#define C_12 0x2B
-#define C_13 0x2C
-#define C_14 0x2D
-#define C_15 0x2E
-#define C_16 0x2F
-
-#define D_1 0x30
-#define D_2 0x31
-#define D_3 0x32
-#define D_4 0x33
-#define D_5 0x34
-#define D_6 0x35
-#define D_7 0x36
-#define D_8 0x37
-#define D_9 0x38
-#define D_10 0x39
-#define D_11 0x3A
-#define D_12 0x3B
-#define D_13 0x3C
-#define D_14 0x3D
-#define D_15 0x3E
-#define D_16 0x3F
-
-#define E_1 0x40
-#define E_2 0x41
-#define E_3 0x42
-#define E_4 0x43
-#define E_5 0x44
-#define E_6 0x45
-#define E_7 0x46
-#define E_8 0x47
-#define E_9 0x48
-#define E_10 0x49
-#define E_11 0x4A
-#define E_12 0x4B
-#define E_13 0x4C
-#define E_14 0x4D
-#define E_15 0x4E
-#define E_16 0x4F
-
-#define F_1 0x50
-#define F_2 0x51
-#define F_3 0x52
-#define F_4 0x53
-#define F_5 0x54
-#define F_6 0x55
-#define F_7 0x56
-#define F_8 0x57
-#define F_9 0x58
-#define F_10 0x59
-#define F_11 0x5A
-#define F_12 0x5B
-#define F_13 0x5C
-#define F_14 0x5D
-#define F_15 0x5E
-#define F_16 0x5F
-
-#define G_1 0x60
-#define G_2 0x61
-#define G_3 0x62
-#define G_4 0x63
-#define G_5 0x64
-#define G_6 0x65
-#define G_7 0x66
-#define G_8 0x67
-#define G_9 0x68
-#define G_10 0x69
-#define G_11 0x6A
-#define G_12 0x6B
-#define G_13 0x6C
-#define G_14 0x6D
-#define G_15 0x6E
-#define G_16 0x6F
-
-#define H_1 0x70
-#define H_2 0x71
-#define H_3 0x72
-#define H_4 0x73
-#define H_5 0x74
-#define H_6 0x75
-#define H_7 0x76
-#define H_8 0x77
-#define H_9 0x78
-#define H_10 0x79
-#define H_11 0x7A
-#define H_12 0x7B
-#define H_13 0x7C
-#define H_14 0x7D
-#define H_15 0x7E
-#define H_16 0x7F
-
-#define I_1 0x80
-#define I_2 0x81
-#define I_3 0x82
-#define I_4 0x83
-#define I_5 0x84
-#define I_6 0x85
-#define I_7 0x86
-#define I_8 0x87
-#define I_9 0x88
-#define I_10 0x89
-#define I_11 0x8A
-#define I_12 0x8B
-#define I_13 0x8C
-#define I_14 0x8D
-#define I_15 0x8E
-#define I_16 0x8F
-
-#define J_1 0x90
-#define J_2 0x91
-#define J_3 0x92
-#define J_4 0x93
-#define J_5 0x94
-#define J_6 0x95
-#define J_7 0x96
-#define J_8 0x97
-#define J_9 0x98
-#define J_10 0x99
-#define J_11 0x9A
-#define J_12 0x9B
-#define J_13 0x9C
-#define J_14 0x9D
-#define J_15 0x9E
-#define J_16 0x9F
-
-#define K_1 0xA0
-#define K_2 0xA1
-#define K_3 0xA2
-#define K_4 0xA3
-#define K_5 0xA4
-#define K_6 0xA5
-#define K_7 0xA6
-#define K_8 0xA7
-#define K_9 0xA8
-#define K_10 0xA9
-#define K_11 0xAA
-#define K_12 0xAB
-#define K_13 0xAC
-#define K_14 0xAD
-#define K_15 0xAE
-#define K_16 0xAF
-
-#define L_1 0xB0
-#define L_2 0xB1
-#define L_3 0xB2
-#define L_4 0xB3
-#define L_5 0xB4
-#define L_6 0xB5
-#define L_7 0xB6
-#define L_8 0xB7
-#define L_9 0xB8
-#define L_10 0xB9
-#define L_11 0xBA
-#define L_12 0xBB
-#define L_13 0xBC
-#define L_14 0xBD
-#define L_15 0xBE
-#define L_16 0xBF
\ No newline at end of file
diff --git a/drivers/led/issi/is31fl3218-simple.c b/drivers/led/issi/is31fl3218-simple.c
new file mode 100644
index 000000000000..ce28c51d189f
--- /dev/null
+++ b/drivers/led/issi/is31fl3218-simple.c
@@ -0,0 +1,147 @@
+/* Copyright 2018 Jason Williams (Wilba)
+ *
+ * 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 .
+ */
+#include "is31fl3218.h"
+#include
+#include "i2c_master.h"
+
+#define IS31FL3218_PWM_REGISTER_COUNT 18
+#define IS31FL3218_LED_CONTROL_REGISTER_COUNT 3
+
+#ifndef IS31FL3218_I2C_TIMEOUT
+# define IS31FL3218_I2C_TIMEOUT 100
+#endif
+
+#ifndef IS31FL3218_I2C_PERSISTENCE
+# define IS31FL3218_I2C_PERSISTENCE 0
+#endif
+
+// Reusable buffer for transfers
+uint8_t g_twi_transfer_buffer[20];
+
+// IS31FL3218 has 18 PWM outputs and a fixed I2C address, so no chaining.
+uint8_t g_pwm_buffer[IS31FL3218_PWM_REGISTER_COUNT];
+bool g_pwm_buffer_update_required = false;
+
+uint8_t g_led_control_registers[IS31FL3218_LED_CONTROL_REGISTER_COUNT] = {0};
+bool g_led_control_registers_update_required = false;
+
+void is31fl3218_write_register(uint8_t reg, uint8_t data) {
+ g_twi_transfer_buffer[0] = reg;
+ g_twi_transfer_buffer[1] = data;
+#if IS31FL3218_I2C_PERSISTENCE > 0
+ for (uint8_t i = 0; i < IS31FL3218_I2C_PERSISTENCE; i++) {
+ if (i2c_transmit(IS31FL3218_I2C_ADDRESS << 1, g_twi_transfer_buffer, 2, IS31FL3218_I2C_TIMEOUT) == 0) break;
+ }
+#else
+ i2c_transmit(IS31FL3218_I2C_ADDRESS << 1, g_twi_transfer_buffer, 2, IS31FL3218_I2C_TIMEOUT);
+#endif
+}
+
+void is31fl3218_write_pwm_buffer(uint8_t *pwm_buffer) {
+ g_twi_transfer_buffer[0] = IS31FL3218_REG_PWM;
+ memcpy(g_twi_transfer_buffer + 1, pwm_buffer, 18);
+
+#if IS31FL3218_I2C_PERSISTENCE > 0
+ for (uint8_t i = 0; i < IS31FL3218_I2C_PERSISTENCE; i++) {
+ i2c_transmit(IS31FL3218_I2C_ADDRESS << 1, g_twi_transfer_buffer, 19, IS31FL3218_I2C_TIMEOUT);
+ }
+#else
+ i2c_transmit(IS31FL3218_I2C_ADDRESS << 1, g_twi_transfer_buffer, 19, IS31FL3218_I2C_TIMEOUT);
+#endif
+}
+
+void is31fl3218_init(void) {
+ i2c_init();
+
+ // In case we ever want to reinitialize (?)
+ is31fl3218_write_register(IS31FL3218_REG_RESET, 0x00);
+
+ // Turn off software shutdown
+ is31fl3218_write_register(IS31FL3218_REG_SHUTDOWN, 0x01);
+
+ // Set all PWM values to zero
+ for (uint8_t i = 0; i < IS31FL3218_PWM_REGISTER_COUNT; i++) {
+ is31fl3218_write_register(IS31FL3218_REG_PWM + i, 0x00);
+ }
+
+ // turn off all LEDs in the LED control register
+ for (uint8_t i = 0; i < IS31FL3218_LED_CONTROL_REGISTER_COUNT; i++) {
+ is31fl3218_write_register(IS31FL3218_REG_LED_CONTROL_1 + i, 0x00);
+ }
+
+ // Load PWM registers and LED Control register data
+ is31fl3218_write_register(IS31FL3218_REG_UPDATE, 0x01);
+
+ for (int i = 0; i < IS31FL3218_LED_COUNT; i++) {
+ is31fl3218_set_led_control_register(i, true);
+ }
+
+ is31fl3218_update_led_control_registers();
+}
+
+void is31fl3218_set_value(int index, uint8_t value) {
+ is31fl3218_led_t led;
+ if (index >= 0 && index < IS31FL3218_LED_COUNT) {
+ memcpy_P(&led, (&g_is31fl3218_leds[index]), sizeof(led));
+ }
+ if (g_pwm_buffer[led.v - IS31FL3218_REG_PWM] == value) {
+ return;
+ }
+ g_pwm_buffer[led.v - IS31FL3218_REG_PWM] = value;
+ g_pwm_buffer_update_required = true;
+}
+
+void is31fl3218_set_value_all(uint8_t value) {
+ for (int i = 0; i < IS31FL3218_LED_COUNT; i++) {
+ is31fl3218_set_value(i, value);
+ }
+}
+
+void is31fl3218_set_led_control_register(uint8_t index, bool value) {
+ is31fl3218_led_t led;
+ memcpy_P(&led, (&g_is31fl3218_leds[index]), sizeof(led));
+
+ uint8_t control_register = (led.v - IS31FL3218_REG_PWM) / 6;
+ uint8_t bit_value = (led.v - IS31FL3218_REG_PWM) % 6;
+
+ if (value) {
+ g_led_control_registers[control_register] |= (1 << bit_value);
+ } else {
+ g_led_control_registers[control_register] &= ~(1 << bit_value);
+ }
+
+ g_led_control_registers_update_required = true;
+}
+
+void is31fl3218_update_pwm_buffers(void) {
+ if (g_pwm_buffer_update_required) {
+ is31fl3218_write_pwm_buffer(g_pwm_buffer);
+ // Load PWM registers and LED Control register data
+ is31fl3218_write_register(IS31FL3218_REG_UPDATE, 0x01);
+
+ g_pwm_buffer_update_required = false;
+ }
+}
+
+void is31fl3218_update_led_control_registers(void) {
+ if (g_led_control_registers_update_required) {
+ for (int i = 0; i < IS31FL3218_LED_CONTROL_REGISTER_COUNT; i++) {
+ is31fl3218_write_register(IS31FL3218_REG_LED_CONTROL_1 + i, g_led_control_registers[i]);
+ }
+
+ g_led_control_registers_update_required = false;
+ }
+}
diff --git a/drivers/led/issi/is31fl3218-simple.h b/drivers/led/issi/is31fl3218-simple.h
new file mode 100644
index 000000000000..94928178092d
--- /dev/null
+++ b/drivers/led/issi/is31fl3218-simple.h
@@ -0,0 +1,73 @@
+/* Copyright 2018 Jason Williams (Wilba)
+ *
+ * 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 .
+ */
+
+#pragma once
+
+#include
+#include
+#include "progmem.h"
+#include "util.h"
+
+#define IS31FL3218_REG_SHUTDOWN 0x00
+#define IS31FL3218_REG_PWM 0x01
+#define IS31FL3218_REG_LED_CONTROL_1 0x13
+#define IS31FL3218_REG_LED_CONTROL_2 0x14
+#define IS31FL3218_REG_LED_CONTROL_3 0x15
+#define IS31FL3218_REG_UPDATE 0x16
+#define IS31FL3218_REG_RESET 0x17
+
+#define IS31FL3218_I2C_ADDRESS 0x54
+
+#if defined(LED_MATRIX_IS31FL3218)
+# define IS31FL3218_LED_COUNT LED_MATRIX_LED_COUNT
+#endif
+
+typedef struct is31fl3218_led_t {
+ uint8_t v;
+} PACKED is31fl3218_led_t;
+
+extern const is31fl3218_led_t PROGMEM g_is31fl3218_leds[IS31FL3218_LED_COUNT];
+
+void is31fl3218_init(void);
+
+void is31fl3218_set_value(int index, uint8_t value);
+
+void is31fl3218_set_value_all(uint8_t value);
+
+void is31fl3218_set_led_control_register(uint8_t index, bool value);
+
+void is31fl3218_update_pwm_buffers(void);
+
+void is31fl3218_update_led_control_registers(void);
+
+#define OUT1 0x01
+#define OUT2 0x02
+#define OUT3 0x03
+#define OUT4 0x04
+#define OUT5 0x05
+#define OUT6 0x06
+#define OUT7 0x07
+#define OUT8 0x08
+#define OUT9 0x09
+#define OUT10 0x0A
+#define OUT11 0x0B
+#define OUT12 0x0C
+#define OUT13 0x0D
+#define OUT14 0x0E
+#define OUT15 0x0F
+#define OUT16 0x10
+#define OUT17 0x11
+#define OUT18 0x12
diff --git a/drivers/led/issi/is31fl3218.c b/drivers/led/issi/is31fl3218.c
index 970e9a0be98a..39db09d51864 100644
--- a/drivers/led/issi/is31fl3218.c
+++ b/drivers/led/issi/is31fl3218.c
@@ -14,84 +14,150 @@
* along with this program. If not, see .
*/
#include "is31fl3218.h"
+#include
#include "i2c_master.h"
-// This is the full 8-bit address
-#define ISSI_ADDRESS 0b10101000
+#define IS31FL3218_PWM_REGISTER_COUNT 18
+#define IS31FL3218_LED_CONTROL_REGISTER_COUNT 3
-// These are the register addresses
-#define ISSI_REG_SHUTDOWN 0x00
-#define ISSI_REG_PWM 0x01
-#define ISSI_REG_CONTROL 0x13
-#define ISSI_REG_UPDATE 0x16
-#define ISSI_REG_RESET 0x17
+#ifndef IS31FL3218_I2C_TIMEOUT
+# define IS31FL3218_I2C_TIMEOUT 100
+#endif
-// Default timeout if no I2C response
-#define ISSI_TIMEOUT 100
+#ifndef IS31FL3218_I2C_PERSISTENCE
+# define IS31FL3218_I2C_PERSISTENCE 0
+#endif
// Reusable buffer for transfers
uint8_t g_twi_transfer_buffer[20];
// IS31FL3218 has 18 PWM outputs and a fixed I2C address, so no chaining.
-// If used as RGB LED driver, LEDs are assigned RGB,RGB,RGB,RGB,RGB,RGB
-uint8_t g_pwm_buffer[18];
+uint8_t g_pwm_buffer[IS31FL3218_PWM_REGISTER_COUNT];
bool g_pwm_buffer_update_required = false;
+uint8_t g_led_control_registers[IS31FL3218_LED_CONTROL_REGISTER_COUNT] = {0};
+bool g_led_control_registers_update_required = false;
+
void is31fl3218_write_register(uint8_t reg, uint8_t data) {
g_twi_transfer_buffer[0] = reg;
g_twi_transfer_buffer[1] = data;
- i2c_transmit(ISSI_ADDRESS, g_twi_transfer_buffer, 2, ISSI_TIMEOUT);
+#if IS31FL3218_I2C_PERSISTENCE > 0
+ for (uint8_t i = 0; i < IS31FL3218_I2C_PERSISTENCE; i++) {
+ if (i2c_transmit(IS31FL3218_I2C_ADDRESS << 1, g_twi_transfer_buffer, 2, IS31FL3218_I2C_TIMEOUT) == 0) break;
+ }
+#else
+ i2c_transmit(IS31FL3218_I2C_ADDRESS << 1, g_twi_transfer_buffer, 2, IS31FL3218_I2C_TIMEOUT);
+#endif
}
void is31fl3218_write_pwm_buffer(uint8_t *pwm_buffer) {
- g_twi_transfer_buffer[0] = ISSI_REG_PWM;
+ g_twi_transfer_buffer[0] = IS31FL3218_REG_PWM;
memcpy(g_twi_transfer_buffer + 1, pwm_buffer, 18);
- i2c_transmit(ISSI_ADDRESS, g_twi_transfer_buffer, 19, ISSI_TIMEOUT);
+#if IS31FL3218_I2C_PERSISTENCE > 0
+ for (uint8_t i = 0; i < IS31FL3218_I2C_PERSISTENCE; i++) {
+ i2c_transmit(IS31FL3218_I2C_ADDRESS << 1, g_twi_transfer_buffer, 19, IS31FL3218_I2C_TIMEOUT);
+ }
+#else
+ i2c_transmit(IS31FL3218_I2C_ADDRESS << 1, g_twi_transfer_buffer, 19, IS31FL3218_I2C_TIMEOUT);
+#endif
}
void is31fl3218_init(void) {
+ i2c_init();
+
// In case we ever want to reinitialize (?)
- is31fl3218_write_register(ISSI_REG_RESET, 0x00);
+ is31fl3218_write_register(IS31FL3218_REG_RESET, 0x00);
// Turn off software shutdown
- is31fl3218_write_register(ISSI_REG_SHUTDOWN, 0x01);
+ is31fl3218_write_register(IS31FL3218_REG_SHUTDOWN, 0x01);
// Set all PWM values to zero
- for (uint8_t i = 0; i < 18; i++) {
- is31fl3218_write_register(ISSI_REG_PWM + i, 0x00);
+ for (uint8_t i = 0; i < IS31FL3218_PWM_REGISTER_COUNT; i++) {
+ is31fl3218_write_register(IS31FL3218_REG_PWM + i, 0x00);
}
- // Enable all channels
- for (uint8_t i = 0; i < 3; i++) {
- is31fl3218_write_register(ISSI_REG_CONTROL + i, 0b00111111);
+ // turn off all LEDs in the LED control register
+ for (uint8_t i = 0; i < IS31FL3218_LED_CONTROL_REGISTER_COUNT; i++) {
+ is31fl3218_write_register(IS31FL3218_REG_LED_CONTROL_1 + i, 0x00);
}
// Load PWM registers and LED Control register data
- is31fl3218_write_register(ISSI_REG_UPDATE, 0x01);
+ is31fl3218_write_register(IS31FL3218_REG_UPDATE, 0x01);
+
+ for (int i = 0; i < IS31FL3218_LED_COUNT; i++) {
+ is31fl3218_set_led_control_register(i, true, true, true);
+ }
+
+ is31fl3218_update_led_control_registers();
}
void is31fl3218_set_color(int index, uint8_t red, uint8_t green, uint8_t blue) {
- if (g_pwm_buffer[index * 3 + 0] == red && g_pwm_buffer[index * 3 + 1] == green && g_pwm_buffer[index * 3 + 2] == blue) {
+ is31fl3218_led_t led;
+ if (index >= 0 && index < IS31FL3218_LED_COUNT) {
+ memcpy_P(&led, (&g_is31fl3218_leds[index]), sizeof(led));
+ }
+ if (g_pwm_buffer[led.r - IS31FL3218_REG_PWM] == red && g_pwm_buffer[led.g - IS31FL3218_REG_PWM] == green && g_pwm_buffer[led.b - IS31FL3218_REG_PWM] == blue) {
return;
}
- g_pwm_buffer[index * 3 + 0] = red;
- g_pwm_buffer[index * 3 + 1] = green;
- g_pwm_buffer[index * 3 + 2] = blue;
- g_pwm_buffer_update_required = true;
+ g_pwm_buffer[led.r - IS31FL3218_REG_PWM] = red;
+ g_pwm_buffer[led.g - IS31FL3218_REG_PWM] = green;
+ g_pwm_buffer[led.b - IS31FL3218_REG_PWM] = blue;
+ g_pwm_buffer_update_required = true;
}
void is31fl3218_set_color_all(uint8_t red, uint8_t green, uint8_t blue) {
- for (int i = 0; i < 6; i++) {
+ for (int i = 0; i < IS31FL3218_LED_COUNT; i++) {
is31fl3218_set_color(i, red, green, blue);
}
}
+void is31fl3218_set_led_control_register(uint8_t index, bool red, bool green, bool blue) {
+ is31fl3218_led_t led;
+ memcpy_P(&led, (&g_is31fl3218_leds[index]), sizeof(led));
+
+ uint8_t control_register_r = (led.r - IS31FL3218_REG_PWM) / 6;
+ uint8_t control_register_g = (led.g - IS31FL3218_REG_PWM) / 6;
+ uint8_t control_register_b = (led.b - IS31FL3218_REG_PWM) / 6;
+ uint8_t bit_r = (led.r - IS31FL3218_REG_PWM) % 6;
+ uint8_t bit_g = (led.g - IS31FL3218_REG_PWM) % 6;
+ uint8_t bit_b = (led.b - IS31FL3218_REG_PWM) % 6;
+
+ if (red) {
+ g_led_control_registers[control_register_r] |= (1 << bit_r);
+ } else {
+ g_led_control_registers[control_register_r] &= ~(1 << bit_r);
+ }
+ if (green) {
+ g_led_control_registers[control_register_g] |= (1 << bit_g);
+ } else {
+ g_led_control_registers[control_register_g] &= ~(1 << bit_g);
+ }
+ if (blue) {
+ g_led_control_registers[control_register_b] |= (1 << bit_b);
+ } else {
+ g_led_control_registers[control_register_b] &= ~(1 << bit_b);
+ }
+
+ g_led_control_registers_update_required = true;
+}
+
void is31fl3218_update_pwm_buffers(void) {
if (g_pwm_buffer_update_required) {
is31fl3218_write_pwm_buffer(g_pwm_buffer);
// Load PWM registers and LED Control register data
- is31fl3218_write_register(ISSI_REG_UPDATE, 0x01);
+ is31fl3218_write_register(IS31FL3218_REG_UPDATE, 0x01);
+
+ g_pwm_buffer_update_required = false;
+ }
+}
+
+void is31fl3218_update_led_control_registers(void) {
+ if (g_led_control_registers_update_required) {
+ for (int i = 0; i < IS31FL3218_LED_CONTROL_REGISTER_COUNT; i++) {
+ is31fl3218_write_register(IS31FL3218_REG_LED_CONTROL_1 + i, g_led_control_registers[i]);
+ }
+
+ g_led_control_registers_update_required = false;
}
- g_pwm_buffer_update_required = false;
}
diff --git a/drivers/led/issi/is31fl3218.h b/drivers/led/issi/is31fl3218.h
index 2fe37684320f..ffa7f36d6159 100644
--- a/drivers/led/issi/is31fl3218.h
+++ b/drivers/led/issi/is31fl3218.h
@@ -18,9 +18,58 @@
#include
#include
-#include
+#include "progmem.h"
+#include "util.h"
+
+#define IS31FL3218_REG_SHUTDOWN 0x00
+#define IS31FL3218_REG_PWM 0x01
+#define IS31FL3218_REG_LED_CONTROL_1 0x13
+#define IS31FL3218_REG_LED_CONTROL_2 0x14
+#define IS31FL3218_REG_LED_CONTROL_3 0x15
+#define IS31FL3218_REG_UPDATE 0x16
+#define IS31FL3218_REG_RESET 0x17
+
+#define IS31FL3218_I2C_ADDRESS 0x54
+
+#if defined(RGB_MATRIX_IS31FL3218)
+# define IS31FL3218_LED_COUNT RGB_MATRIX_LED_COUNT
+#endif
+
+typedef struct is31fl3218_led_t {
+ uint8_t r;
+ uint8_t g;
+ uint8_t b;
+} PACKED is31fl3218_led_t;
+
+extern const is31fl3218_led_t PROGMEM g_is31fl3218_leds[IS31FL3218_LED_COUNT];
void is31fl3218_init(void);
+
void is31fl3218_set_color(int index, uint8_t red, uint8_t green, uint8_t blue);
+
void is31fl3218_set_color_all(uint8_t red, uint8_t green, uint8_t blue);
+
+void is31fl3218_set_led_control_register(uint8_t index, bool red, bool green, bool blue);
+
void is31fl3218_update_pwm_buffers(void);
+
+void is31fl3218_update_led_control_registers(void);
+
+#define OUT1 0x01
+#define OUT2 0x02
+#define OUT3 0x03
+#define OUT4 0x04
+#define OUT5 0x05
+#define OUT6 0x06
+#define OUT7 0x07
+#define OUT8 0x08
+#define OUT9 0x09
+#define OUT10 0x0A
+#define OUT11 0x0B
+#define OUT12 0x0C
+#define OUT13 0x0D
+#define OUT14 0x0E
+#define OUT15 0x0F
+#define OUT16 0x10
+#define OUT17 0x11
+#define OUT18 0x12
diff --git a/drivers/led/issi/is31fl3731-simple.c b/drivers/led/issi/is31fl3731-simple.c
index f7f6980a3b68..8dbfc3cd31e1 100644
--- a/drivers/led/issi/is31fl3731-simple.c
+++ b/drivers/led/issi/is31fl3731-simple.c
@@ -18,44 +18,19 @@
*/
#include "is31fl3731-simple.h"
+#include
#include "i2c_master.h"
#include "wait.h"
-// This is a 7-bit address, that gets left-shifted and bit 0
-// set to 0 for write, 1 for read (as per I2C protocol)
-// The address will vary depending on your wiring:
-// 0b1110100 AD <-> GND
-// 0b1110111 AD <-> VCC
-// 0b1110101 AD <-> SCL
-// 0b1110110 AD <-> SDA
-#define ISSI_ADDR_DEFAULT 0x74
+#define IS31FL3731_PWM_REGISTER_COUNT 144
+#define IS31FL3731_LED_CONTROL_REGISTER_COUNT 18
-#define ISSI_REG_CONFIG 0x00
-#define ISSI_REG_CONFIG_PICTUREMODE 0x00
-#define ISSI_REG_CONFIG_AUTOPLAYMODE 0x08
-#define ISSI_REG_CONFIG_AUDIOPLAYMODE 0x18
-
-#define ISSI_CONF_PICTUREMODE 0x00
-#define ISSI_CONF_AUTOFRAMEMODE 0x04
-#define ISSI_CONF_AUDIOMODE 0x08
-
-#define ISSI_REG_PICTUREFRAME 0x01
-
-// Not defined in the datasheet -- See AN for IC
-#define ISSI_REG_GHOST_IMAGE_PREVENTION 0xC2 // Set bit 4 to enable de-ghosting
-
-#define ISSI_REG_SHUTDOWN 0x0A
-#define ISSI_REG_AUDIOSYNC 0x06
-
-#define ISSI_COMMANDREGISTER 0xFD
-#define ISSI_BANK_FUNCTIONREG 0x0B // helpfully called 'page nine'
-
-#ifndef ISSI_TIMEOUT
-# define ISSI_TIMEOUT 100
+#ifndef IS31FL3731_I2C_TIMEOUT
+# define IS31FL3731_I2C_TIMEOUT 100
#endif
-#ifndef ISSI_PERSISTENCE
-# define ISSI_PERSISTENCE 0
+#ifndef IS31FL3731_I2C_PERSISTENCE
+# define IS31FL3731_I2C_PERSISTENCE 0
#endif
// Transfer buffer for TWITransmitData()
@@ -66,47 +41,24 @@ uint8_t g_twi_transfer_buffer[20];
// We could optimize this and take out the unused registers from these
// buffers and the transfers in is31fl3731_write_pwm_buffer() but it's
// probably not worth the extra complexity.
-uint8_t g_pwm_buffer[LED_DRIVER_COUNT][144];
-bool g_pwm_buffer_update_required[LED_DRIVER_COUNT] = {false};
-
-/* There's probably a better way to init this... */
-#if LED_DRIVER_COUNT == 1
-uint8_t g_led_control_registers[LED_DRIVER_COUNT][18] = {{0}};
-#elif LED_DRIVER_COUNT == 2
-uint8_t g_led_control_registers[LED_DRIVER_COUNT][18] = {{0}, {0}};
-#elif LED_DRIVER_COUNT == 3
-uint8_t g_led_control_registers[LED_DRIVER_COUNT][18] = {{0}, {0}, {0}};
-#elif LED_DRIVER_COUNT == 4
-uint8_t g_led_control_registers[LED_DRIVER_COUNT][18] = {{0}, {0}, {0}, {0}};
-#endif
-bool g_led_control_registers_update_required[LED_DRIVER_COUNT] = {false};
-
-// This is the bit pattern in the LED control registers
-// (for matrix A, add one to register for matrix B)
-//
-// reg - b7 b6 b5 b4 b3 b2 b1 b0
-// 0x00 - R08,R07,R06,R05,R04,R03,R02,R01
-// 0x02 - G08,G07,G06,G05,G04,G03,G02,R00
-// 0x04 - B08,B07,B06,B05,B04,B03,G01,G00
-// 0x06 - - , - , - , - , - ,B02,B01,B00
-// 0x08 - - , - , - , - , - , - , - , -
-// 0x0A - B17,B16,B15, - , - , - , - , -
-// 0x0C - G17,G16,B14,B13,B12,B11,B10,B09
-// 0x0E - R17,G15,G14,G13,G12,G11,G10,G09
-// 0x10 - R16,R15,R14,R13,R12,R11,R10,R09
+uint8_t g_pwm_buffer[IS31FL3731_DRIVER_COUNT][IS31FL3731_PWM_REGISTER_COUNT];
+bool g_pwm_buffer_update_required[IS31FL3731_DRIVER_COUNT] = {false};
+
+uint8_t g_led_control_registers[IS31FL3731_DRIVER_COUNT][IS31FL3731_LED_CONTROL_REGISTER_COUNT] = {0};
+bool g_led_control_registers_update_required[IS31FL3731_DRIVER_COUNT] = {false};
void is31fl3731_write_register(uint8_t addr, uint8_t reg, uint8_t data) {
g_twi_transfer_buffer[0] = reg;
g_twi_transfer_buffer[1] = data;
-#if ISSI_PERSISTENCE > 0
- for (uint8_t i = 0; i < ISSI_PERSISTENCE; i++) {
- if (i2c_transmit(addr << 1, g_twi_transfer_buffer, 2, ISSI_TIMEOUT) == 0) {
+#if IS31FL3731_I2C_PERSISTENCE > 0
+ for (uint8_t i = 0; i < IS31FL3731_I2C_PERSISTENCE; i++) {
+ if (i2c_transmit(addr << 1, g_twi_transfer_buffer, 2, IS31FL3731_I2C_TIMEOUT) == 0) {
break;
}
}
#else
- i2c_transmit(addr << 1, g_twi_transfer_buffer, 2, ISSI_TIMEOUT);
+ i2c_transmit(addr << 1, g_twi_transfer_buffer, 2, IS31FL3731_I2C_TIMEOUT);
#endif
}
@@ -117,7 +69,7 @@ void is31fl3731_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer) {
// g_twi_transfer_buffer[] is 20 bytes
// iterate over the pwm_buffer contents at 16 byte intervals
- for (int i = 0; i < 144; i += 16) {
+ for (int i = 0; i < IS31FL3731_PWM_REGISTER_COUNT; i += 16) {
// set the first register, e.g. 0x24, 0x34, 0x44, etc.
g_twi_transfer_buffer[0] = 0x24 + i;
// copy the data from i to i+15
@@ -125,14 +77,44 @@ void is31fl3731_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer) {
// thus this sets registers 0x24-0x33, 0x34-0x43, etc. in one transfer
memcpy(g_twi_transfer_buffer + 1, pwm_buffer + i, 16);
-#if ISSI_PERSISTENCE > 0
- for (uint8_t i = 0; i < ISSI_PERSISTENCE; i++) {
- if (i2c_transmit(addr << 1, g_twi_transfer_buffer, 17, ISSI_TIMEOUT) == 0) break;
+#if IS31FL3731_I2C_PERSISTENCE > 0
+ for (uint8_t i = 0; i < IS31FL3731_I2C_PERSISTENCE; i++) {
+ if (i2c_transmit(addr << 1, g_twi_transfer_buffer, 17, IS31FL3731_I2C_TIMEOUT) == 0) break;
}
#else
- i2c_transmit(addr << 1, g_twi_transfer_buffer, 17, ISSI_TIMEOUT);
+ i2c_transmit(addr << 1, g_twi_transfer_buffer, 17, IS31FL3731_I2C_TIMEOUT);
+#endif
+ }
+}
+
+void is31fl3731_init_drivers(void) {
+ i2c_init();
+
+ is31fl3731_init(IS31FL3731_I2C_ADDRESS_1);
+#if defined(IS31FL3731_I2C_ADDRESS_2)
+ is31fl3731_init(IS31FL3731_I2C_ADDRESS_2);
+# if defined(IS31FL3731_I2C_ADDRESS_3)
+ is31fl3731_init(IS31FL3731_I2C_ADDRESS_3);
+# if defined(IS31FL3731_I2C_ADDRESS_4)
+ is31fl3731_init(IS31FL3731_I2C_ADDRESS_4);
+# endif
+# endif
#endif
+
+ for (int i = 0; i < IS31FL3731_LED_COUNT; i++) {
+ is31fl3731_set_led_control_register(i, true);
}
+
+ is31fl3731_update_led_control_registers(IS31FL3731_I2C_ADDRESS_1, 0);
+#if defined(IS31FL3731_I2C_ADDRESS_2)
+ is31fl3731_update_led_control_registers(IS31FL3731_I2C_ADDRESS_2, 1);
+# if defined(IS31FL3731_I2C_ADDRESS_3)
+ is31fl3731_update_led_control_registers(IS31FL3731_I2C_ADDRESS_3, 2);
+# if defined(IS31FL3731_I2C_ADDRESS_4)
+ is31fl3731_update_led_control_registers(IS31FL3731_I2C_ADDRESS_4, 3);
+# endif
+# endif
+#endif
}
void is31fl3731_init(uint8_t addr) {
@@ -142,29 +124,29 @@ void is31fl3731_init(uint8_t addr) {
// then disable software shutdown.
// select "function register" bank
- is31fl3731_write_register(addr, ISSI_COMMANDREGISTER, ISSI_BANK_FUNCTIONREG);
+ is31fl3731_write_register(addr, IS31FL3731_REG_COMMAND, IS31FL3731_COMMAND_FUNCTION);
// enable software shutdown
- is31fl3731_write_register(addr, ISSI_REG_SHUTDOWN, 0x00);
-#ifdef ISSI_3731_DEGHOST // set to enable de-ghosting of the array
- is31fl3731_write_register(addr, ISSI_REG_GHOST_IMAGE_PREVENTION, 0x10);
+ is31fl3731_write_register(addr, IS31FL3731_FUNCTION_REG_SHUTDOWN, 0x00);
+#ifdef IS31FL3731_DEGHOST // set to enable de-ghosting of the array
+ is31fl3731_write_register(addr, IS31FL3731_FUNCTION_REG_GHOST_IMAGE_PREVENTION, IS31FL3731_GHOST_IMAGE_PREVENTION_GEN);
#endif
// this delay was copied from other drivers, might not be needed
wait_ms(10);
// picture mode
- is31fl3731_write_register(addr, ISSI_REG_CONFIG, ISSI_REG_CONFIG_PICTUREMODE);
+ is31fl3731_write_register(addr, IS31FL3731_FUNCTION_REG_CONFIG, IS31FL3731_CONFIG_MODE_PICTURE);
// display frame 0
- is31fl3731_write_register(addr, ISSI_REG_PICTUREFRAME, 0x00);
+ is31fl3731_write_register(addr, IS31FL3731_FUNCTION_REG_PICTURE_DISPLAY, 0x00);
// audio sync off
- is31fl3731_write_register(addr, ISSI_REG_AUDIOSYNC, 0x00);
+ is31fl3731_write_register(addr, IS31FL3731_FUNCTION_REG_AUDIO_SYNC, 0x00);
// select bank 0
- is31fl3731_write_register(addr, ISSI_COMMANDREGISTER, 0);
+ is31fl3731_write_register(addr, IS31FL3731_REG_COMMAND, IS31FL3731_COMMAND_FRAME_1);
// turn off all LEDs in the LED control register
- for (int i = 0x00; i <= 0x11; i++) {
+ for (int i = 0; i < IS31FL3731_LED_CONTROL_REGISTER_COUNT; i++) {
is31fl3731_write_register(addr, i, 0x00);
}
@@ -179,21 +161,21 @@ void is31fl3731_init(uint8_t addr) {
}
// select "function register" bank
- is31fl3731_write_register(addr, ISSI_COMMANDREGISTER, ISSI_BANK_FUNCTIONREG);
+ is31fl3731_write_register(addr, IS31FL3731_REG_COMMAND, IS31FL3731_COMMAND_FUNCTION);
// disable software shutdown
- is31fl3731_write_register(addr, ISSI_REG_SHUTDOWN, 0x01);
+ is31fl3731_write_register(addr, IS31FL3731_FUNCTION_REG_SHUTDOWN, 0x01);
// select bank 0 and leave it selected.
// most usage after initialization is just writing PWM buffers in bank 0
// as there's not much point in double-buffering
- is31fl3731_write_register(addr, ISSI_COMMANDREGISTER, 0);
+ is31fl3731_write_register(addr, IS31FL3731_REG_COMMAND, IS31FL3731_COMMAND_FRAME_1);
}
void is31fl3731_set_value(int index, uint8_t value) {
- is31_led led;
- if (index >= 0 && index < LED_MATRIX_LED_COUNT) {
- memcpy_P(&led, (&g_is31_leds[index]), sizeof(led));
+ is31fl3731_led_t led;
+ if (index >= 0 && index < IS31FL3731_LED_COUNT) {
+ memcpy_P(&led, (&g_is31fl3731_leds[index]), sizeof(led));
// Subtract 0x24 to get the second index of g_pwm_buffer
@@ -206,14 +188,14 @@ void is31fl3731_set_value(int index, uint8_t value) {
}
void is31fl3731_set_value_all(uint8_t value) {
- for (int i = 0; i < LED_MATRIX_LED_COUNT; i++) {
+ for (int i = 0; i < IS31FL3731_LED_COUNT; i++) {
is31fl3731_set_value(i, value);
}
}
void is31fl3731_set_led_control_register(uint8_t index, bool value) {
- is31_led led;
- memcpy_P(&led, (&g_is31_leds[index]), sizeof(led));
+ is31fl3731_led_t led;
+ memcpy_P(&led, (&g_is31fl3731_leds[index]), sizeof(led));
uint8_t control_register = (led.v - 0x24) / 8;
uint8_t bit_value = (led.v - 0x24) % 8;
@@ -236,9 +218,22 @@ void is31fl3731_update_pwm_buffers(uint8_t addr, uint8_t index) {
void is31fl3731_update_led_control_registers(uint8_t addr, uint8_t index) {
if (g_led_control_registers_update_required[index]) {
- for (int i = 0; i < 18; i++) {
+ for (int i = 0; i < IS31FL3731_LED_CONTROL_REGISTER_COUNT; i++) {
is31fl3731_write_register(addr, i, g_led_control_registers[index][i]);
}
g_led_control_registers_update_required[index] = false;
}
}
+
+void is31fl3731_flush(void) {
+ is31fl3731_update_pwm_buffers(IS31FL3731_I2C_ADDRESS_1, 0);
+#if defined(IS31FL3731_I2C_ADDRESS_2)
+ is31fl3731_update_pwm_buffers(IS31FL3731_I2C_ADDRESS_2, 1);
+# if defined(IS31FL3731_I2C_ADDRESS_3)
+ is31fl3731_update_pwm_buffers(IS31FL3731_I2C_ADDRESS_3, 2);
+# if defined(IS31FL3731_I2C_ADDRESS_4)
+ is31fl3731_update_pwm_buffers(IS31FL3731_I2C_ADDRESS_4, 3);
+# endif
+# endif
+#endif
+}
diff --git a/drivers/led/issi/is31fl3731-simple.h b/drivers/led/issi/is31fl3731-simple.h
index 69fba14a0b38..4d173847dd9d 100644
--- a/drivers/led/issi/is31fl3731-simple.h
+++ b/drivers/led/issi/is31fl3731-simple.h
@@ -20,16 +20,87 @@
#include
#include
-#include
#include "progmem.h"
+#include "util.h"
-typedef struct is31_led {
+// ======== DEPRECATED DEFINES - DO NOT USE ========
+#ifdef LED_DRIVER_ADDR_1
+# define IS31FL3731_I2C_ADDRESS_1 LED_DRIVER_ADDR_1
+#endif
+#ifdef LED_DRIVER_ADDR_2
+# define IS31FL3731_I2C_ADDRESS_2 LED_DRIVER_ADDR_2
+#endif
+#ifdef LED_DRIVER_ADDR_3
+# define IS31FL3731_I2C_ADDRESS_3 LED_DRIVER_ADDR_3
+#endif
+#ifdef LED_DRIVER_ADDR_4
+# define IS31FL3731_I2C_ADDRESS_4 LED_DRIVER_ADDR_4
+#endif
+#ifdef ISSI_TIMEOUT
+# define IS31FL3731_I2C_TIMEOUT ISSI_TIMEOUT
+#endif
+#ifdef ISSI_PERSISTENCE
+# define IS31FL3731_I2C_PERSISTENCE ISSI_PERSISTENCE
+#endif
+#ifdef ISSI_3731_DEGHOST
+# define IS31FL3731_DEGHOST ISSI_3731_DEGHOST
+#endif
+
+#define is31_led is31fl3731_led_t
+#define g_is31_leds g_is31fl3731_leds
+// ========
+
+#define IS31FL3731_REG_COMMAND 0xFD
+#define IS31FL3731_COMMAND_FRAME_1 0x00
+#define IS31FL3731_COMMAND_FRAME_2 0x01
+#define IS31FL3731_COMMAND_FRAME_3 0x02
+#define IS31FL3731_COMMAND_FRAME_4 0x03
+#define IS31FL3731_COMMAND_FRAME_5 0x04
+#define IS31FL3731_COMMAND_FRAME_6 0x05
+#define IS31FL3731_COMMAND_FRAME_7 0x06
+#define IS31FL3731_COMMAND_FRAME_8 0x07
+#define IS31FL3731_COMMAND_FUNCTION 0x0B
+
+#define IS31FL3731_FUNCTION_REG_CONFIG 0x00
+#define IS31FL3731_CONFIG_MODE_PICTURE 0x00
+#define IS31FL3731_CONFIG_MODE_AUTO_PLAY 0x08
+#define IS31FL3731_CONFIG_MODE_AUDIO_PLAY 0x18
+
+#define IS31FL3731_FUNCTION_REG_PICTURE_DISPLAY 0x01
+#define IS31FL3731_FUNCTION_REG_AUDIO_SYNC 0x06
+#define IS31FL3731_FUNCTION_REG_SHUTDOWN 0x0A
+
+// Not defined in the datasheet -- See AN for IC
+#define IS31FL3731_FUNCTION_REG_GHOST_IMAGE_PREVENTION 0xC2
+#define IS31FL3731_GHOST_IMAGE_PREVENTION_GEN 0x10
+
+#define IS31FL3731_I2C_ADDRESS_GND 0x74
+#define IS31FL3731_I2C_ADDRESS_SCL 0x75
+#define IS31FL3731_I2C_ADDRESS_SDA 0x76
+#define IS31FL3731_I2C_ADDRESS_VCC 0x77
+
+#if defined(LED_MATRIX_IS31FL3731)
+# define IS31FL3731_LED_COUNT LED_MATRIX_LED_COUNT
+#endif
+
+#if defined IS31FL3731_I2C_ADDRESS_4
+# define IS31FL3731_DRIVER_COUNT 4
+#elif defined IS31FL3731_I2C_ADDRESS_3
+# define IS31FL3731_DRIVER_COUNT 3
+#elif defined IS31FL3731_I2C_ADDRESS_2
+# define IS31FL3731_DRIVER_COUNT 2
+#elif defined IS31FL3731_I2C_ADDRESS_1
+# define IS31FL3731_DRIVER_COUNT 1
+#endif
+
+typedef struct is31fl3731_led_t {
uint8_t driver : 2;
uint8_t v;
-} __attribute__((packed)) is31_led;
+} PACKED is31fl3731_led_t;
-extern const is31_led PROGMEM g_is31_leds[LED_MATRIX_LED_COUNT];
+extern const is31fl3731_led_t PROGMEM g_is31fl3731_leds[IS31FL3731_LED_COUNT];
+void is31fl3731_init_drivers(void);
void is31fl3731_init(uint8_t addr);
void is31fl3731_write_register(uint8_t addr, uint8_t reg, uint8_t data);
void is31fl3731_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer);
@@ -46,6 +117,8 @@ void is31fl3731_set_led_control_register(uint8_t index, bool value);
void is31fl3731_update_pwm_buffers(uint8_t addr, uint8_t index);
void is31fl3731_update_led_control_registers(uint8_t addr, uint8_t index);
+void is31fl3731_flush(void);
+
#define C1_1 0x24
#define C1_2 0x25
#define C1_3 0x26
diff --git a/drivers/led/issi/is31fl3731.c b/drivers/led/issi/is31fl3731.c
index 15a01b6d75c6..1ab8997731f7 100644
--- a/drivers/led/issi/is31fl3731.c
+++ b/drivers/led/issi/is31fl3731.c
@@ -17,44 +17,19 @@
*/
#include "is31fl3731.h"
+#include
#include "i2c_master.h"
#include "wait.h"
-// This is a 7-bit address, that gets left-shifted and bit 0
-// set to 0 for write, 1 for read (as per I2C protocol)
-// The address will vary depending on your wiring:
-// 0b1110100 AD <-> GND
-// 0b1110111 AD <-> VCC
-// 0b1110101 AD <-> SCL
-// 0b1110110 AD <-> SDA
-#define ISSI_ADDR_DEFAULT 0x74
+#define IS31FL3731_PWM_REGISTER_COUNT 144
+#define IS31FL3731_LED_CONTROL_REGISTER_COUNT 18
-#define ISSI_REG_CONFIG 0x00
-#define ISSI_REG_CONFIG_PICTUREMODE 0x00
-#define ISSI_REG_CONFIG_AUTOPLAYMODE 0x08
-#define ISSI_REG_CONFIG_AUDIOPLAYMODE 0x18
-
-#define ISSI_CONF_PICTUREMODE 0x00
-#define ISSI_CONF_AUTOFRAMEMODE 0x04
-#define ISSI_CONF_AUDIOMODE 0x08
-
-#define ISSI_REG_PICTUREFRAME 0x01
-
-// Not defined in the datasheet -- See AN for IC
-#define ISSI_REG_GHOST_IMAGE_PREVENTION 0xC2 // Set bit 4 to enable de-ghosting
-
-#define ISSI_REG_SHUTDOWN 0x0A
-#define ISSI_REG_AUDIOSYNC 0x06
-
-#define ISSI_COMMANDREGISTER 0xFD
-#define ISSI_BANK_FUNCTIONREG 0x0B // helpfully called 'page nine'
-
-#ifndef ISSI_TIMEOUT
-# define ISSI_TIMEOUT 100
+#ifndef IS31FL3731_I2C_TIMEOUT
+# define IS31FL3731_I2C_TIMEOUT 100
#endif
-#ifndef ISSI_PERSISTENCE
-# define ISSI_PERSISTENCE 0
+#ifndef IS31FL3731_I2C_PERSISTENCE
+# define IS31FL3731_I2C_PERSISTENCE 0
#endif
// Transfer buffer for TWITransmitData()
@@ -65,36 +40,22 @@ uint8_t g_twi_transfer_buffer[20];
// We could optimize this and take out the unused registers from these
// buffers and the transfers in is31fl3731_write_pwm_buffer() but it's
// probably not worth the extra complexity.
-uint8_t g_pwm_buffer[DRIVER_COUNT][144];
-bool g_pwm_buffer_update_required[DRIVER_COUNT] = {false};
-
-uint8_t g_led_control_registers[DRIVER_COUNT][18] = {{0}};
-bool g_led_control_registers_update_required[DRIVER_COUNT] = {false};
-
-// This is the bit pattern in the LED control registers
-// (for matrix A, add one to register for matrix B)
-//
-// reg - b7 b6 b5 b4 b3 b2 b1 b0
-// 0x00 - R08,R07,R06,R05,R04,R03,R02,R01
-// 0x02 - G08,G07,G06,G05,G04,G03,G02,R00
-// 0x04 - B08,B07,B06,B05,B04,B03,G01,G00
-// 0x06 - - , - , - , - , - ,B02,B01,B00
-// 0x08 - - , - , - , - , - , - , - , -
-// 0x0A - B17,B16,B15, - , - , - , - , -
-// 0x0C - G17,G16,B14,B13,B12,B11,B10,B09
-// 0x0E - R17,G15,G14,G13,G12,G11,G10,G09
-// 0x10 - R16,R15,R14,R13,R12,R11,R10,R09
+uint8_t g_pwm_buffer[IS31FL3731_DRIVER_COUNT][IS31FL3731_PWM_REGISTER_COUNT];
+bool g_pwm_buffer_update_required[IS31FL3731_DRIVER_COUNT] = {false};
+
+uint8_t g_led_control_registers[IS31FL3731_DRIVER_COUNT][IS31FL3731_LED_CONTROL_REGISTER_COUNT] = {0};
+bool g_led_control_registers_update_required[IS31FL3731_DRIVER_COUNT] = {false};
void is31fl3731_write_register(uint8_t addr, uint8_t reg, uint8_t data) {
g_twi_transfer_buffer[0] = reg;
g_twi_transfer_buffer[1] = data;
-#if ISSI_PERSISTENCE > 0
- for (uint8_t i = 0; i < ISSI_PERSISTENCE; i++) {
- if (i2c_transmit(addr << 1, g_twi_transfer_buffer, 2, ISSI_TIMEOUT) == 0) break;
+#if IS31FL3731_I2C_PERSISTENCE > 0
+ for (uint8_t i = 0; i < IS31FL3731_I2C_PERSISTENCE; i++) {
+ if (i2c_transmit(addr << 1, g_twi_transfer_buffer, 2, IS31FL3731_I2C_TIMEOUT) == 0) break;
}
#else
- i2c_transmit(addr << 1, g_twi_transfer_buffer, 2, ISSI_TIMEOUT);
+ i2c_transmit(addr << 1, g_twi_transfer_buffer, 2, IS31FL3731_I2C_TIMEOUT);
#endif
}
@@ -105,7 +66,7 @@ void is31fl3731_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer) {
// g_twi_transfer_buffer[] is 20 bytes
// iterate over the pwm_buffer contents at 16 byte intervals
- for (int i = 0; i < 144; i += 16) {
+ for (int i = 0; i < IS31FL3731_PWM_REGISTER_COUNT; i += 16) {
// set the first register, e.g. 0x24, 0x34, 0x44, etc.
g_twi_transfer_buffer[0] = 0x24 + i;
// copy the data from i to i+15
@@ -113,16 +74,46 @@ void is31fl3731_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer) {
// thus this sets registers 0x24-0x33, 0x34-0x43, etc. in one transfer
memcpy(g_twi_transfer_buffer + 1, pwm_buffer + i, 16);
-#if ISSI_PERSISTENCE > 0
- for (uint8_t i = 0; i < ISSI_PERSISTENCE; i++) {
- if (i2c_transmit(addr << 1, g_twi_transfer_buffer, 17, ISSI_TIMEOUT) == 0) break;
+#if IS31FL3731_I2C_PERSISTENCE > 0
+ for (uint8_t i = 0; i < IS31FL3731_I2C_PERSISTENCE; i++) {
+ if (i2c_transmit(addr << 1, g_twi_transfer_buffer, 17, IS31FL3731_I2C_TIMEOUT) == 0) break;
}
#else
- i2c_transmit(addr << 1, g_twi_transfer_buffer, 17, ISSI_TIMEOUT);
+ i2c_transmit(addr << 1, g_twi_transfer_buffer, 17, IS31FL3731_I2C_TIMEOUT);
#endif
}
}
+void is31fl3731_init_drivers(void) {
+ i2c_init();
+
+ is31fl3731_init(IS31FL3731_I2C_ADDRESS_1);
+#if defined(IS31FL3731_I2C_ADDRESS_2)
+ is31fl3731_init(IS31FL3731_I2C_ADDRESS_2);
+# if defined(IS31FL3731_I2C_ADDRESS_3)
+ is31fl3731_init(IS31FL3731_I2C_ADDRESS_3);
+# if defined(IS31FL3731_I2C_ADDRESS_4)
+ is31fl3731_init(IS31FL3731_I2C_ADDRESS_4);
+# endif
+# endif
+#endif
+
+ for (int i = 0; i < IS31FL3731_LED_COUNT; i++) {
+ is31fl3731_set_led_control_register(i, true, true, true);
+ }
+
+ is31fl3731_update_led_control_registers(IS31FL3731_I2C_ADDRESS_1, 0);
+#if defined(IS31FL3731_I2C_ADDRESS_2)
+ is31fl3731_update_led_control_registers(IS31FL3731_I2C_ADDRESS_2, 1);
+# if defined(IS31FL3731_I2C_ADDRESS_3)
+ is31fl3731_update_led_control_registers(IS31FL3731_I2C_ADDRESS_3, 2);
+# if defined(IS31FL3731_I2C_ADDRESS_4)
+ is31fl3731_update_led_control_registers(IS31FL3731_I2C_ADDRESS_4, 3);
+# endif
+# endif
+#endif
+}
+
void is31fl3731_init(uint8_t addr) {
// In order to avoid the LEDs being driven with garbage data
// in the LED driver's PWM registers, first enable software shutdown,
@@ -130,29 +121,29 @@ void is31fl3731_init(uint8_t addr) {
// then disable software shutdown.
// select "function register" bank
- is31fl3731_write_register(addr, ISSI_COMMANDREGISTER, ISSI_BANK_FUNCTIONREG);
+ is31fl3731_write_register(addr, IS31FL3731_REG_COMMAND, IS31FL3731_COMMAND_FUNCTION);
// enable software shutdown
- is31fl3731_write_register(addr, ISSI_REG_SHUTDOWN, 0x00);
-#ifdef ISSI_3731_DEGHOST // set to enable de-ghosting of the array
- is31fl3731_write_register(addr, ISSI_REG_GHOST_IMAGE_PREVENTION, 0x10);
+ is31fl3731_write_register(addr, IS31FL3731_FUNCTION_REG_SHUTDOWN, 0x00);
+#ifdef IS31FL3731_DEGHOST // set to enable de-ghosting of the array
+ is31fl3731_write_register(addr, IS31FL3731_FUNCTION_REG_GHOST_IMAGE_PREVENTION, IS31FL3731_GHOST_IMAGE_PREVENTION_GEN);
#endif
// this delay was copied from other drivers, might not be needed
wait_ms(10);
// picture mode
- is31fl3731_write_register(addr, ISSI_REG_CONFIG, ISSI_REG_CONFIG_PICTUREMODE);
+ is31fl3731_write_register(addr, IS31FL3731_FUNCTION_REG_CONFIG, IS31FL3731_CONFIG_MODE_PICTURE);
// display frame 0
- is31fl3731_write_register(addr, ISSI_REG_PICTUREFRAME, 0x00);
+ is31fl3731_write_register(addr, IS31FL3731_FUNCTION_REG_PICTURE_DISPLAY, 0x00);
// audio sync off
- is31fl3731_write_register(addr, ISSI_REG_AUDIOSYNC, 0x00);
+ is31fl3731_write_register(addr, IS31FL3731_FUNCTION_REG_AUDIO_SYNC, 0x00);
// select bank 0
- is31fl3731_write_register(addr, ISSI_COMMANDREGISTER, 0);
+ is31fl3731_write_register(addr, IS31FL3731_REG_COMMAND, IS31FL3731_COMMAND_FRAME_1);
// turn off all LEDs in the LED control register
- for (int i = 0x00; i <= 0x11; i++) {
+ for (int i = 0; i < IS31FL3731_LED_CONTROL_REGISTER_COUNT; i++) {
is31fl3731_write_register(addr, i, 0x00);
}
@@ -167,21 +158,21 @@ void is31fl3731_init(uint8_t addr) {
}
// select "function register" bank
- is31fl3731_write_register(addr, ISSI_COMMANDREGISTER, ISSI_BANK_FUNCTIONREG);
+ is31fl3731_write_register(addr, IS31FL3731_REG_COMMAND, IS31FL3731_COMMAND_FUNCTION);
// disable software shutdown
- is31fl3731_write_register(addr, ISSI_REG_SHUTDOWN, 0x01);
+ is31fl3731_write_register(addr, IS31FL3731_FUNCTION_REG_SHUTDOWN, 0x01);
// select bank 0 and leave it selected.
// most usage after initialization is just writing PWM buffers in bank 0
// as there's not much point in double-buffering
- is31fl3731_write_register(addr, ISSI_COMMANDREGISTER, 0);
+ is31fl3731_write_register(addr, IS31FL3731_REG_COMMAND, IS31FL3731_COMMAND_FRAME_1);
}
void is31fl3731_set_color(int index, uint8_t red, uint8_t green, uint8_t blue) {
- is31_led led;
- if (index >= 0 && index < RGB_MATRIX_LED_COUNT) {
- memcpy_P(&led, (&g_is31_leds[index]), sizeof(led));
+ is31fl3731_led_t led;
+ if (index >= 0 && index < IS31FL3731_LED_COUNT) {
+ memcpy_P(&led, (&g_is31fl3731_leds[index]), sizeof(led));
// Subtract 0x24 to get the second index of g_pwm_buffer
if (g_pwm_buffer[led.driver][led.r - 0x24] == red && g_pwm_buffer[led.driver][led.g - 0x24] == green && g_pwm_buffer[led.driver][led.b - 0x24] == blue) {
@@ -195,14 +186,14 @@ void is31fl3731_set_color(int index, uint8_t red, uint8_t green, uint8_t blue) {
}
void is31fl3731_set_color_all(uint8_t red, uint8_t green, uint8_t blue) {
- for (int i = 0; i < RGB_MATRIX_LED_COUNT; i++) {
+ for (int i = 0; i < IS31FL3731_LED_COUNT; i++) {
is31fl3731_set_color(i, red, green, blue);
}
}
void is31fl3731_set_led_control_register(uint8_t index, bool red, bool green, bool blue) {
- is31_led led;
- memcpy_P(&led, (&g_is31_leds[index]), sizeof(led));
+ is31fl3731_led_t led;
+ memcpy_P(&led, (&g_is31fl3731_leds[index]), sizeof(led));
uint8_t control_register_r = (led.r - 0x24) / 8;
uint8_t control_register_g = (led.g - 0x24) / 8;
@@ -239,9 +230,22 @@ void is31fl3731_update_pwm_buffers(uint8_t addr, uint8_t index) {
void is31fl3731_update_led_control_registers(uint8_t addr, uint8_t index) {
if (g_led_control_registers_update_required[index]) {
- for (int i = 0; i < 18; i++) {
+ for (int i = 0; i < IS31FL3731_LED_CONTROL_REGISTER_COUNT; i++) {
is31fl3731_write_register(addr, i, g_led_control_registers[index][i]);
}
}
g_led_control_registers_update_required[index] = false;
}
+
+void is31fl3731_flush(void) {
+ is31fl3731_update_pwm_buffers(IS31FL3731_I2C_ADDRESS_1, 0);
+#if defined(IS31FL3731_I2C_ADDRESS_2)
+ is31fl3731_update_pwm_buffers(IS31FL3731_I2C_ADDRESS_2, 1);
+# if defined(IS31FL3731_I2C_ADDRESS_3)
+ is31fl3731_update_pwm_buffers(IS31FL3731_I2C_ADDRESS_3, 2);
+# if defined(IS31FL3731_I2C_ADDRESS_4)
+ is31fl3731_update_pwm_buffers(IS31FL3731_I2C_ADDRESS_4, 3);
+# endif
+# endif
+#endif
+}
diff --git a/drivers/led/issi/is31fl3731.h b/drivers/led/issi/is31fl3731.h
index bdf03de1ee16..b45cb2b07dc8 100644
--- a/drivers/led/issi/is31fl3731.h
+++ b/drivers/led/issi/is31fl3731.h
@@ -19,18 +19,89 @@
#include
#include
-#include
#include "progmem.h"
+#include "util.h"
-typedef struct is31_led {
+// ======== DEPRECATED DEFINES - DO NOT USE ========
+#ifdef DRIVER_ADDR_1
+# define IS31FL3731_I2C_ADDRESS_1 DRIVER_ADDR_1
+#endif
+#ifdef DRIVER_ADDR_2
+# define IS31FL3731_I2C_ADDRESS_2 DRIVER_ADDR_2
+#endif
+#ifdef DRIVER_ADDR_3
+# define IS31FL3731_I2C_ADDRESS_3 DRIVER_ADDR_3
+#endif
+#ifdef DRIVER_ADDR_4
+# define IS31FL3731_I2C_ADDRESS_4 DRIVER_ADDR_4
+#endif
+#ifdef ISSI_TIMEOUT
+# define IS31FL3731_I2C_TIMEOUT ISSI_TIMEOUT
+#endif
+#ifdef ISSI_PERSISTENCE
+# define IS31FL3731_I2C_PERSISTENCE ISSI_PERSISTENCE
+#endif
+#ifdef ISSI_3731_DEGHOST
+# define IS31FL3731_DEGHOST ISSI_3731_DEGHOST
+#endif
+
+#define is31_led is31fl3731_led_t
+#define g_is31_leds g_is31fl3731_leds
+// ========
+
+#define IS31FL3731_REG_COMMAND 0xFD
+#define IS31FL3731_COMMAND_FRAME_1 0x00
+#define IS31FL3731_COMMAND_FRAME_2 0x01
+#define IS31FL3731_COMMAND_FRAME_3 0x02
+#define IS31FL3731_COMMAND_FRAME_4 0x03
+#define IS31FL3731_COMMAND_FRAME_5 0x04
+#define IS31FL3731_COMMAND_FRAME_6 0x05
+#define IS31FL3731_COMMAND_FRAME_7 0x06
+#define IS31FL3731_COMMAND_FRAME_8 0x07
+#define IS31FL3731_COMMAND_FUNCTION 0x0B
+
+#define IS31FL3731_FUNCTION_REG_CONFIG 0x00
+#define IS31FL3731_CONFIG_MODE_PICTURE 0x00
+#define IS31FL3731_CONFIG_MODE_AUTO_PLAY 0x08
+#define IS31FL3731_CONFIG_MODE_AUDIO_PLAY 0x18
+
+#define IS31FL3731_FUNCTION_REG_PICTURE_DISPLAY 0x01
+#define IS31FL3731_FUNCTION_REG_AUDIO_SYNC 0x06
+#define IS31FL3731_FUNCTION_REG_SHUTDOWN 0x0A
+
+// Not defined in the datasheet -- See AN for IC
+#define IS31FL3731_FUNCTION_REG_GHOST_IMAGE_PREVENTION 0xC2
+#define IS31FL3731_GHOST_IMAGE_PREVENTION_GEN 0x10
+
+#define IS31FL3731_I2C_ADDRESS_GND 0x74
+#define IS31FL3731_I2C_ADDRESS_SCL 0x75
+#define IS31FL3731_I2C_ADDRESS_SDA 0x76
+#define IS31FL3731_I2C_ADDRESS_VCC 0x77
+
+#if defined(RGB_MATRIX_IS31FL3731)
+# define IS31FL3731_LED_COUNT RGB_MATRIX_LED_COUNT
+#endif
+
+#if defined(IS31FL3731_I2C_ADDRESS_4)
+# define IS31FL3731_DRIVER_COUNT 4
+#elif defined(IS31FL3731_I2C_ADDRESS_3)
+# define IS31FL3731_DRIVER_COUNT 3
+#elif defined(IS31FL3731_I2C_ADDRESS_2)
+# define IS31FL3731_DRIVER_COUNT 2
+#elif defined(IS31FL3731_I2C_ADDRESS_1)
+# define IS31FL3731_DRIVER_COUNT 1
+#endif
+
+typedef struct is31fl3731_led_t {
uint8_t driver : 2;
uint8_t r;
uint8_t g;
uint8_t b;
-} __attribute__((packed)) is31_led;
+} PACKED is31fl3731_led_t;
-extern const is31_led PROGMEM g_is31_leds[RGB_MATRIX_LED_COUNT];
+extern const is31fl3731_led_t PROGMEM g_is31fl3731_leds[IS31FL3731_LED_COUNT];
+void is31fl3731_init_drivers(void);
void is31fl3731_init(uint8_t addr);
void is31fl3731_write_register(uint8_t addr, uint8_t reg, uint8_t data);
void is31fl3731_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer);
@@ -47,6 +118,8 @@ void is31fl3731_set_led_control_register(uint8_t index, bool red, bool green, bo
void is31fl3731_update_pwm_buffers(uint8_t addr, uint8_t index);
void is31fl3731_update_led_control_registers(uint8_t addr, uint8_t index);
+void is31fl3731_flush(void);
+
#define C1_1 0x24
#define C1_2 0x25
#define C1_3 0x26
diff --git a/drivers/led/issi/is31fl3733-simple.c b/drivers/led/issi/is31fl3733-simple.c
index f9a0a271a89c..9f2444c253a5 100644
--- a/drivers/led/issi/is31fl3733-simple.c
+++ b/drivers/led/issi/is31fl3733-simple.c
@@ -19,59 +19,48 @@
*/
#include "is31fl3733-simple.h"
+#include
#include "i2c_master.h"
#include "wait.h"
-// This is a 7-bit address, that gets left-shifted and bit 0
-// set to 0 for write, 1 for read (as per I2C protocol)
-// The address will vary depending on your wiring:
-// 00 <-> GND
-// 01 <-> SCL
-// 10 <-> SDA
-// 11 <-> VCC
-// ADDR1 represents A1:A0 of the 7-bit address.
-// ADDR2 represents A3:A2 of the 7-bit address.
-// The result is: 0b101(ADDR2)(ADDR1)
-#define ISSI_ADDR_DEFAULT 0x50
-
-#define ISSI_COMMANDREGISTER 0xFD
-#define ISSI_COMMANDREGISTER_WRITELOCK 0xFE
-#define ISSI_INTERRUPTMASKREGISTER 0xF0
-#define ISSI_INTERRUPTSTATUSREGISTER 0xF1
-
-#define ISSI_PAGE_LEDCONTROL 0x00 // PG0
-#define ISSI_PAGE_PWM 0x01 // PG1
-#define ISSI_PAGE_AUTOBREATH 0x02 // PG2
-#define ISSI_PAGE_FUNCTION 0x03 // PG3
-
-#define ISSI_REG_CONFIGURATION 0x00 // PG3
-#define ISSI_REG_GLOBALCURRENT 0x01 // PG3
-#define ISSI_REG_RESET 0x11 // PG3
-#define ISSI_REG_SWPULLUP 0x0F // PG3
-#define ISSI_REG_CSPULLUP 0x10 // PG3
-
-#ifndef ISSI_TIMEOUT
-# define ISSI_TIMEOUT 100
+#define IS31FL3733_PWM_REGISTER_COUNT 192
+#define IS31FL3733_LED_CONTROL_REGISTER_COUNT 24
+
+#ifndef IS31FL3733_I2C_TIMEOUT
+# define IS31FL3733_I2C_TIMEOUT 100
#endif
-#ifndef ISSI_PERSISTENCE
-# define ISSI_PERSISTENCE 0
+#ifndef IS31FL3733_I2C_PERSISTENCE
+# define IS31FL3733_I2C_PERSISTENCE 0
#endif
-#ifndef ISSI_PWM_FREQUENCY
-# define ISSI_PWM_FREQUENCY 0b000 // PFS - IS31FL3733B only
+#ifndef IS31FL3733_PWM_FREQUENCY
+# define IS31FL3733_PWM_FREQUENCY IS31FL3733_PWM_FREQUENCY_8K4_HZ // PFS - IS31FL3733B only
#endif
-#ifndef ISSI_SWPULLUP
-# define ISSI_SWPULLUP PUR_0R
+#ifndef IS31FL3733_SW_PULLUP
+# define IS31FL3733_SW_PULLUP IS31FL3733_PUR_0_OHM
#endif
-#ifndef ISSI_CSPULLUP
-# define ISSI_CSPULLUP PUR_0R
+#ifndef IS31FL3733_CS_PULLDOWN
+# define IS31FL3733_CSPULLDOWN IS31FL3733_PDR_0_OHM
#endif
-#ifndef ISSI_GLOBALCURRENT
-# define ISSI_GLOBALCURRENT 0xFF
+#ifndef IS31FL3733_GLOBAL_CURRENT
+# define IS31FL3733_GLOBAL_CURRENT 0xFF
+#endif
+
+#ifndef IS31FL3733_SYNC_1
+# define IS31FL3733_SYNC_1 IS31FL3733_SYNC_NONE
+#endif
+#ifndef IS31FL3733_SYNC_2
+# define IS31FL3733_SYNC_2 IS31FL3733_SYNC_NONE
+#endif
+#ifndef IS31FL3733_SYNC_3
+# define IS31FL3733_SYNC_3 IS31FL3733_SYNC_NONE
+#endif
+#ifndef IS31FL3733_SYNC_4
+# define IS31FL3733_SYNC_4 IS31FL3733_SYNC_NONE
#endif
// Transfer buffer for TWITransmitData()
@@ -83,34 +72,25 @@ uint8_t g_twi_transfer_buffer[20];
// We could optimize this and take out the unused registers from these
// buffers and the transfers in is31fl3733_write_pwm_buffer() but it's
// probably not worth the extra complexity.
-uint8_t g_pwm_buffer[LED_DRIVER_COUNT][192];
-bool g_pwm_buffer_update_required[LED_DRIVER_COUNT] = {false};
-
-/* There's probably a better way to init this... */
-#if LED_DRIVER_COUNT == 1
-uint8_t g_led_control_registers[LED_DRIVER_COUNT][24] = {{0}};
-#elif LED_DRIVER_COUNT == 2
-uint8_t g_led_control_registers[LED_DRIVER_COUNT][24] = {{0}, {0}};
-#elif LED_DRIVER_COUNT == 3
-uint8_t g_led_control_registers[LED_DRIVER_COUNT][24] = {{0}, {0}, {0}};
-#elif LED_DRIVER_COUNT == 4
-uint8_t g_led_control_registers[LED_DRIVER_COUNT][24] = {{0}, {0}, {0}, {0}};
-#endif
-bool g_led_control_registers_update_required[LED_DRIVER_COUNT] = {false};
+uint8_t g_pwm_buffer[IS31FL3733_DRIVER_COUNT][IS31FL3733_PWM_REGISTER_COUNT];
+bool g_pwm_buffer_update_required[IS31FL3733_DRIVER_COUNT] = {false};
+
+uint8_t g_led_control_registers[IS31FL3733_DRIVER_COUNT][IS31FL3733_LED_CONTROL_REGISTER_COUNT] = {0};
+bool g_led_control_registers_update_required[IS31FL3733_DRIVER_COUNT] = {false};
bool is31fl3733_write_register(uint8_t addr, uint8_t reg, uint8_t data) {
// If the transaction fails function returns false.
g_twi_transfer_buffer[0] = reg;
g_twi_transfer_buffer[1] = data;
-#if ISSI_PERSISTENCE > 0
- for (uint8_t i = 0; i < ISSI_PERSISTENCE; i++) {
- if (i2c_transmit(addr << 1, g_twi_transfer_buffer, 2, ISSI_TIMEOUT) != 0) {
+#if IS31FL3733_I2C_PERSISTENCE > 0
+ for (uint8_t i = 0; i < IS31FL3733_I2C_PERSISTENCE; i++) {
+ if (i2c_transmit(addr << 1, g_twi_transfer_buffer, 2, IS31FL3733_I2C_TIMEOUT) != 0) {
return false;
}
}
#else
- if (i2c_transmit(addr << 1, g_twi_transfer_buffer, 2, ISSI_TIMEOUT) != 0) {
+ if (i2c_transmit(addr << 1, g_twi_transfer_buffer, 2, IS31FL3733_I2C_TIMEOUT) != 0) {
return false;
}
#endif
@@ -124,21 +104,21 @@ bool is31fl3733_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer) {
// g_twi_transfer_buffer[] is 20 bytes
// Iterate over the pwm_buffer contents at 16 byte intervals.
- for (int i = 0; i < 192; i += 16) {
+ for (int i = 0; i < IS31FL3733_PWM_REGISTER_COUNT; i += 16) {
g_twi_transfer_buffer[0] = i;
// Copy the data from i to i+15.
// Device will auto-increment register for data after the first byte
// Thus this sets registers 0x00-0x0F, 0x10-0x1F, etc. in one transfer.
memcpy(g_twi_transfer_buffer + 1, pwm_buffer + i, 16);
-#if ISSI_PERSISTENCE > 0
- for (uint8_t i = 0; i < ISSI_PERSISTENCE; i++) {
- if (i2c_transmit(addr << 1, g_twi_transfer_buffer, 17, ISSI_TIMEOUT) != 0) {
+#if IS31FL3733_I2C_PERSISTENCE > 0
+ for (uint8_t i = 0; i < IS31FL3733_I2C_PERSISTENCE; i++) {
+ if (i2c_transmit(addr << 1, g_twi_transfer_buffer, 17, IS31FL3733_I2C_TIMEOUT) != 0) {
return false;
}
}
#else
- if (i2c_transmit(addr << 1, g_twi_transfer_buffer, 17, ISSI_TIMEOUT) != 0) {
+ if (i2c_transmit(addr << 1, g_twi_transfer_buffer, 17, IS31FL3733_I2C_TIMEOUT) != 0) {
return false;
}
#endif
@@ -146,6 +126,36 @@ bool is31fl3733_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer) {
return true;
}
+void is31fl3733_init_drivers(void) {
+ i2c_init();
+
+ is31fl3733_init(IS31FL3733_I2C_ADDRESS_1, IS31FL3733_SYNC_1);
+#if defined(IS31FL3733_I2C_ADDRESS_2)
+ is31fl3733_init(IS31FL3733_I2C_ADDRESS_2, IS31FL3733_SYNC_2);
+# if defined(IS31FL3733_I2C_ADDRESS_3)
+ is31fl3733_init(IS31FL3733_I2C_ADDRESS_3, IS31FL3733_SYNC_3);
+# if defined(IS31FL3733_I2C_ADDRESS_4)
+ is31fl3733_init(IS31FL3733_I2C_ADDRESS_4, IS31FL3733_SYNC_4);
+# endif
+# endif
+#endif
+
+ for (int i = 0; i < IS31FL3733_LED_COUNT; i++) {
+ is31fl3733_set_led_control_register(i, true);
+ }
+
+ is31fl3733_update_led_control_registers(IS31FL3733_I2C_ADDRESS_1, 0);
+#if defined(IS31FL3733_I2C_ADDRESS_2)
+ is31fl3733_update_led_control_registers(IS31FL3733_I2C_ADDRESS_2, 1);
+# if defined(IS31FL3733_I2C_ADDRESS_3)
+ is31fl3733_update_led_control_registers(IS31FL3733_I2C_ADDRESS_3, 2);
+# if defined(IS31FL3733_I2C_ADDRESS_4)
+ is31fl3733_update_led_control_registers(IS31FL3733_I2C_ADDRESS_4, 3);
+# endif
+# endif
+#endif
+}
+
void is31fl3733_init(uint8_t addr, uint8_t sync) {
// In order to avoid the LEDs being driven with garbage data
// in the LED driver's PWM registers, shutdown is enabled last.
@@ -154,48 +164,48 @@ void is31fl3733_init(uint8_t addr, uint8_t sync) {
// Sync is passed so set it according to the datasheet.
// Unlock the command register.
- is31fl3733_write_register(addr, ISSI_COMMANDREGISTER_WRITELOCK, 0xC5);
+ is31fl3733_write_register(addr, IS31FL3733_REG_COMMAND_WRITE_LOCK, IS31FL3733_COMMAND_WRITE_LOCK_MAGIC);
// Select PG0
- is31fl3733_write_register(addr, ISSI_COMMANDREGISTER, ISSI_PAGE_LEDCONTROL);
+ is31fl3733_write_register(addr, IS31FL3733_REG_COMMAND, IS31FL3733_COMMAND_LED_CONTROL);
// Turn off all LEDs.
- for (int i = 0x00; i <= 0x17; i++) {
+ for (int i = 0; i < IS31FL3733_LED_CONTROL_REGISTER_COUNT; i++) {
is31fl3733_write_register(addr, i, 0x00);
}
// Unlock the command register.
- is31fl3733_write_register(addr, ISSI_COMMANDREGISTER_WRITELOCK, 0xC5);
+ is31fl3733_write_register(addr, IS31FL3733_REG_COMMAND_WRITE_LOCK, IS31FL3733_COMMAND_WRITE_LOCK_MAGIC);
// Select PG1
- is31fl3733_write_register(addr, ISSI_COMMANDREGISTER, ISSI_PAGE_PWM);
+ is31fl3733_write_register(addr, IS31FL3733_REG_COMMAND, IS31FL3733_COMMAND_PWM);
// Set PWM on all LEDs to 0
// No need to setup Breath registers to PWM as that is the default.
- for (int i = 0x00; i <= 0xBF; i++) {
+ for (int i = 0; i < IS31FL3733_PWM_REGISTER_COUNT; i++) {
is31fl3733_write_register(addr, i, 0x00);
}
// Unlock the command register.
- is31fl3733_write_register(addr, ISSI_COMMANDREGISTER_WRITELOCK, 0xC5);
+ is31fl3733_write_register(addr, IS31FL3733_REG_COMMAND_WRITE_LOCK, IS31FL3733_COMMAND_WRITE_LOCK_MAGIC);
// Select PG3
- is31fl3733_write_register(addr, ISSI_COMMANDREGISTER, ISSI_PAGE_FUNCTION);
+ is31fl3733_write_register(addr, IS31FL3733_REG_COMMAND, IS31FL3733_COMMAND_FUNCTION);
// Set de-ghost pull-up resistors (SWx)
- is31fl3733_write_register(addr, ISSI_REG_SWPULLUP, ISSI_SWPULLUP);
+ is31fl3733_write_register(addr, IS31FL3733_FUNCTION_REG_SW_PULLUP, IS31FL3733_SW_PULLUP);
// Set de-ghost pull-down resistors (CSx)
- is31fl3733_write_register(addr, ISSI_REG_CSPULLUP, ISSI_CSPULLUP);
+ is31fl3733_write_register(addr, IS31FL3733_FUNCTION_REG_CS_PULLDOWN, IS31FL3733_CS_PULLDOWN);
// Set global current to maximum.
- is31fl3733_write_register(addr, ISSI_REG_GLOBALCURRENT, ISSI_GLOBALCURRENT);
+ is31fl3733_write_register(addr, IS31FL3733_FUNCTION_REG_GLOBAL_CURRENT, IS31FL3733_GLOBAL_CURRENT);
// Disable software shutdown.
- is31fl3733_write_register(addr, ISSI_REG_CONFIGURATION, ((sync & 0b11) << 6) | ((ISSI_PWM_FREQUENCY & 0b111) << 3) | 0x01);
+ is31fl3733_write_register(addr, IS31FL3733_FUNCTION_REG_CONFIGURATION, ((sync & 0b11) << 6) | ((IS31FL3733_PWM_FREQUENCY & 0b111) << 3) | 0x01);
// Wait 10ms to ensure the device has woken up.
wait_ms(10);
}
void is31fl3733_set_value(int index, uint8_t value) {
- is31_led led;
- if (index >= 0 && index < LED_MATRIX_LED_COUNT) {
- memcpy_P(&led, (&g_is31_leds[index]), sizeof(led));
+ is31fl3733_led_t led;
+ if (index >= 0 && index < IS31FL3733_LED_COUNT) {
+ memcpy_P(&led, (&g_is31fl3733_leds[index]), sizeof(led));
if (g_pwm_buffer[led.driver][led.v] == value) {
return;
@@ -206,14 +216,14 @@ void is31fl3733_set_value(int index, uint8_t value) {
}
void is31fl3733_set_value_all(uint8_t value) {
- for (int i = 0; i < LED_MATRIX_LED_COUNT; i++) {
+ for (int i = 0; i < IS31FL3733_LED_COUNT; i++) {
is31fl3733_set_value(i, value);
}
}
void is31fl3733_set_led_control_register(uint8_t index, bool value) {
- is31_led led;
- memcpy_P(&led, (&g_is31_leds[index]), sizeof(led));
+ is31fl3733_led_t led;
+ memcpy_P(&led, (&g_is31fl3733_leds[index]), sizeof(led));
uint8_t control_register = led.v / 8;
uint8_t bit_value = led.v % 8;
@@ -230,8 +240,8 @@ void is31fl3733_set_led_control_register(uint8_t index, bool value) {
void is31fl3733_update_pwm_buffers(uint8_t addr, uint8_t index) {
if (g_pwm_buffer_update_required[index]) {
// Firstly we need to unlock the command register and select PG1.
- is31fl3733_write_register(addr, ISSI_COMMANDREGISTER_WRITELOCK, 0xC5);
- is31fl3733_write_register(addr, ISSI_COMMANDREGISTER, ISSI_PAGE_PWM);
+ is31fl3733_write_register(addr, IS31FL3733_REG_COMMAND_WRITE_LOCK, IS31FL3733_COMMAND_WRITE_LOCK_MAGIC);
+ is31fl3733_write_register(addr, IS31FL3733_REG_COMMAND, IS31FL3733_COMMAND_PWM);
// If any of the transactions fail we risk writing dirty PG0,
// refresh page 0 just in case.
@@ -245,11 +255,24 @@ void is31fl3733_update_pwm_buffers(uint8_t addr, uint8_t index) {
void is31fl3733_update_led_control_registers(uint8_t addr, uint8_t index) {
if (g_led_control_registers_update_required[index]) {
// Firstly we need to unlock the command register and select PG0
- is31fl3733_write_register(addr, ISSI_COMMANDREGISTER_WRITELOCK, 0xC5);
- is31fl3733_write_register(addr, ISSI_COMMANDREGISTER, ISSI_PAGE_LEDCONTROL);
- for (int i = 0; i < 24; i++) {
+ is31fl3733_write_register(addr, IS31FL3733_REG_COMMAND_WRITE_LOCK, IS31FL3733_COMMAND_WRITE_LOCK_MAGIC);
+ is31fl3733_write_register(addr, IS31FL3733_REG_COMMAND, IS31FL3733_COMMAND_LED_CONTROL);
+ for (int i = 0; i < IS31FL3733_LED_CONTROL_REGISTER_COUNT; i++) {
is31fl3733_write_register(addr, i, g_led_control_registers[index][i]);
}
g_led_control_registers_update_required[index] = false;
}
}
+
+void is31fl3733_flush(void) {
+ is31fl3733_update_pwm_buffers(IS31FL3733_I2C_ADDRESS_1, 0);
+#if defined(IS31FL3733_I2C_ADDRESS_2)
+ is31fl3733_update_pwm_buffers(IS31FL3733_I2C_ADDRESS_2, 1);
+# if defined(IS31FL3733_I2C_ADDRESS_3)
+ is31fl3733_update_pwm_buffers(IS31FL3733_I2C_ADDRESS_3, 2);
+# if defined(IS31FL3733_I2C_ADDRESS_4)
+ is31fl3733_update_pwm_buffers(IS31FL3733_I2C_ADDRESS_4, 3);
+# endif
+# endif
+#endif
+}
diff --git a/drivers/led/issi/is31fl3733-simple.h b/drivers/led/issi/is31fl3733-simple.h
index 1458f7ac8dd4..c37b1fe5f2c2 100644
--- a/drivers/led/issi/is31fl3733-simple.h
+++ b/drivers/led/issi/is31fl3733-simple.h
@@ -22,16 +22,99 @@
#include
#include
-#include
#include "progmem.h"
+#include "util.h"
-typedef struct is31_led {
+// ======== DEPRECATED DEFINES - DO NOT USE ========
+#ifdef ISSI_TIMEOUT
+# define IS31FL3733_I2C_TIMEOUT ISSI_TIMEOUT
+#endif
+#ifdef ISSI_PERSISTENCE
+# define IS31FL3733_I2C_PERSISTENCE ISSI_PERSISTENCE
+#endif
+#ifdef ISSI_PWM_FREQUENCY
+# define IS31FL3733_PWM_FREQUENCY ISSI_PWM_FREQUENCY
+#endif
+#ifdef ISSI_SWPULLUP
+# define IS31FL3733_SW_PULLUP ISSI_SWPULLUP
+#endif
+#ifdef ISSI_CSPULLUP
+# define IS31FL3733_CS_PULLDOWN ISSI_CSPULLUP
+#endif
+#ifdef ISSI_GLOBALCURRENT
+# define IS31FL3733_GLOBAL_CURRENT ISSI_GLOBALCURRENT
+#endif
+
+#define is31_led is31fl3733_led_t
+#define g_is31_leds g_is31fl3733_leds
+
+#define PUR_0R IS31FL3733_PUR_0_OHM
+#define PUR_05KR IS31FL3733_PUR_1K_OHM
+#define PUR_3KR IS31FL3733_PUR_2K_OHM
+#define PUR_4KR IS31FL3733_PUR_4K_OHM
+#define PUR_8KR IS31FL3733_PUR_8K_OHM
+#define PUR_16KR IS31FL3733_PUR_16K_OHM
+#define PUR_32KR IS31FL3733_PUR_32K_OHM
+// ========
+
+#define IS31FL3733_REG_INTERRUPT_MASK 0xF0
+#define IS31FL3733_REG_INTERRUPT_STATUS 0xF1
+
+#define IS31FL3733_REG_COMMAND 0xFD
+
+#define IS31FL3733_COMMAND_LED_CONTROL 0x00
+#define IS31FL3733_COMMAND_PWM 0x01
+#define IS31FL3733_COMMAND_AUTO_BREATH 0x02
+#define IS31FL3733_COMMAND_FUNCTION 0x03
+
+#define IS31FL3733_FUNCTION_REG_CONFIGURATION 0x00
+#define IS31FL3733_FUNCTION_REG_GLOBAL_CURRENT 0x01
+#define IS31FL3733_FUNCTION_REG_SW_PULLUP 0x0F
+#define IS31FL3733_FUNCTION_REG_CS_PULLDOWN 0x10
+#define IS31FL3733_FUNCTION_REG_RESET 0x11
+
+#define IS31FL3733_REG_COMMAND_WRITE_LOCK 0xFE
+#define IS31FL3733_COMMAND_WRITE_LOCK_MAGIC 0xC5
+
+#define IS31FL3733_I2C_ADDRESS_GND_GND 0x50
+#define IS31FL3733_I2C_ADDRESS_GND_SCL 0x51
+#define IS31FL3733_I2C_ADDRESS_GND_SDA 0x52
+#define IS31FL3733_I2C_ADDRESS_GND_VCC 0x53
+#define IS31FL3733_I2C_ADDRESS_SCL_GND 0x54
+#define IS31FL3733_I2C_ADDRESS_SCL_SCL 0x55
+#define IS31FL3733_I2C_ADDRESS_SCL_SDA 0x56
+#define IS31FL3733_I2C_ADDRESS_SCL_VCC 0x57
+#define IS31FL3733_I2C_ADDRESS_SDA_GND 0x58
+#define IS31FL3733_I2C_ADDRESS_SDA_SCL 0x59
+#define IS31FL3733_I2C_ADDRESS_SDA_SDA 0x5A
+#define IS31FL3733_I2C_ADDRESS_SDA_VCC 0x5B
+#define IS31FL3733_I2C_ADDRESS_VCC_GND 0x5C
+#define IS31FL3733_I2C_ADDRESS_VCC_SCL 0x5D
+#define IS31FL3733_I2C_ADDRESS_VCC_SDA 0x5E
+#define IS31FL3733_I2C_ADDRESS_VCC_VCC 0x5F
+
+#if defined(LED_MATRIX_IS31FL3733)
+# define IS31FL3733_LED_COUNT LED_MATRIX_LED_COUNT
+#endif
+
+#if defined(IS31FL3733_I2C_ADDRESS_4)
+# define IS31FL3733_DRIVER_COUNT 4
+#elif defined(IS31FL3733_I2C_ADDRESS_3)
+# define IS31FL3733_DRIVER_COUNT 3
+#elif defined(IS31FL3733_I2C_ADDRESS_2)
+# define IS31FL3733_DRIVER_COUNT 2
+#elif defined(IS31FL3733_I2C_ADDRESS_1)
+# define IS31FL3733_DRIVER_COUNT 1
+#endif
+
+typedef struct is31fl3733_led_t {
uint8_t driver : 2;
uint8_t v;
-} __attribute__((packed)) is31_led;
+} PACKED is31fl3733_led_t;
-extern const is31_led PROGMEM g_is31_leds[LED_MATRIX_LED_COUNT];
+extern const is31fl3733_led_t PROGMEM g_is31fl3733_leds[IS31FL3733_LED_COUNT];
+void is31fl3733_init_drivers(void);
void is31fl3733_init(uint8_t addr, uint8_t sync);
bool is31fl3733_write_register(uint8_t addr, uint8_t reg, uint8_t data);
bool is31fl3733_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer);
@@ -48,13 +131,35 @@ void is31fl3733_set_led_control_register(uint8_t index, bool value);
void is31fl3733_update_pwm_buffers(uint8_t addr, uint8_t index);
void is31fl3733_update_led_control_registers(uint8_t addr, uint8_t index);
-#define PUR_0R 0x00 // No PUR resistor
-#define PUR_05KR 0x02 // 0.5k Ohm resistor in t_NOL
-#define PUR_3KR 0x03 // 3.0k Ohm resistor on all the time
-#define PUR_4KR 0x04 // 4.0k Ohm resistor on all the time
-#define PUR_8KR 0x05 // 8.0k Ohm resistor on all the time
-#define PUR_16KR 0x06 // 16k Ohm resistor on all the time
-#define PUR_32KR 0x07 // 32k Ohm resistor in t_NOL
+void is31fl3733_flush(void);
+
+#define IS31FL3733_PDR_0_OHM 0b000 // No pull-down resistor
+#define IS31FL3733_PDR_0K5_OHM 0b001 // 0.5 kOhm resistor
+#define IS31FL3733_PDR_1K_OHM 0b010 // 1 kOhm resistor
+#define IS31FL3733_PDR_2K_OHM 0b011 // 2 kOhm resistor
+#define IS31FL3733_PDR_4K_OHM 0b100 // 4 kOhm resistor
+#define IS31FL3733_PDR_8K_OHM 0b101 // 8 kOhm resistor
+#define IS31FL3733_PDR_16K_OHM 0b110 // 16 kOhm resistor
+#define IS31FL3733_PDR_32K_OHM 0b111 // 32 kOhm resistor
+
+#define IS31FL3733_PUR_0_OHM 0b000 // No pull-up resistor
+#define IS31FL3733_PUR_0K5_OHM 0b001 // 0.5 kOhm resistor
+#define IS31FL3733_PUR_1K_OHM 0b010 // 1 kOhm resistor
+#define IS31FL3733_PUR_2K_OHM 0b011 // 2 kOhm resistor
+#define IS31FL3733_PUR_4K_OHM 0b100 // 4 kOhm resistor
+#define IS31FL3733_PUR_8K_OHM 0b101 // 8 kOhm resistor
+#define IS31FL3733_PUR_16K_OHM 0b110 // 16 kOhm resistor
+#define IS31FL3733_PUR_32K_OHM 0b111 // 32 kOhm resistor
+
+#define IS31FL3733_PWM_FREQUENCY_8K4_HZ 0b000
+#define IS31FL3733_PWM_FREQUENCY_4K2_HZ 0b001
+#define IS31FL3733_PWM_FREQUENCY_26K7_HZ 0b010
+#define IS31FL3733_PWM_FREQUENCY_2K1_HZ 0b011
+#define IS31FL3733_PWM_FREQUENCY_1K05_HZ 0b100
+
+#define IS31FL3733_SYNC_NONE 0b00
+#define IS31FL3733_SYNC_MASTER 0b01
+#define IS31FL3733_SYNC_SLAVE 0b10
#define A_1 0x00
#define A_2 0x01
diff --git a/drivers/led/issi/is31fl3733.c b/drivers/led/issi/is31fl3733.c
index ca431838ef53..5857a800d7e2 100644
--- a/drivers/led/issi/is31fl3733.c
+++ b/drivers/led/issi/is31fl3733.c
@@ -18,59 +18,48 @@
*/
#include "is31fl3733.h"
+#include
#include "i2c_master.h"
#include "wait.h"
-// This is a 7-bit address, that gets left-shifted and bit 0
-// set to 0 for write, 1 for read (as per I2C protocol)
-// The address will vary depending on your wiring:
-// 00 <-> GND
-// 01 <-> SCL
-// 10 <-> SDA
-// 11 <-> VCC
-// ADDR1 represents A1:A0 of the 7-bit address.
-// ADDR2 represents A3:A2 of the 7-bit address.
-// The result is: 0b101(ADDR2)(ADDR1)
-#define ISSI_ADDR_DEFAULT 0x50
-
-#define ISSI_COMMANDREGISTER 0xFD
-#define ISSI_COMMANDREGISTER_WRITELOCK 0xFE
-#define ISSI_INTERRUPTMASKREGISTER 0xF0
-#define ISSI_INTERRUPTSTATUSREGISTER 0xF1
-
-#define ISSI_PAGE_LEDCONTROL 0x00 // PG0
-#define ISSI_PAGE_PWM 0x01 // PG1
-#define ISSI_PAGE_AUTOBREATH 0x02 // PG2
-#define ISSI_PAGE_FUNCTION 0x03 // PG3
-
-#define ISSI_REG_CONFIGURATION 0x00 // PG3
-#define ISSI_REG_GLOBALCURRENT 0x01 // PG3
-#define ISSI_REG_RESET 0x11 // PG3
-#define ISSI_REG_SWPULLUP 0x0F // PG3
-#define ISSI_REG_CSPULLUP 0x10 // PG3
-
-#ifndef ISSI_TIMEOUT
-# define ISSI_TIMEOUT 100
+#define IS31FL3733_PWM_REGISTER_COUNT 192
+#define IS31FL3733_LED_CONTROL_REGISTER_COUNT 24
+
+#ifndef IS31FL3733_I2C_TIMEOUT
+# define IS31FL3733_I2C_TIMEOUT 100
#endif
-#ifndef ISSI_PERSISTENCE
-# define ISSI_PERSISTENCE 0
+#ifndef IS31FL3733_I2C_PERSISTENCE
+# define IS31FL3733_I2C_PERSISTENCE 0
#endif
-#ifndef ISSI_PWM_FREQUENCY
-# define ISSI_PWM_FREQUENCY 0b000 // PFS - IS31FL3733B only
+#ifndef IS31FL3733_PWM_FREQUENCY
+# define IS31FL3733_PWM_FREQUENCY IS31FL3733_PWM_FREQUENCY_8K4_HZ // PFS - IS31FL3733B only
#endif
-#ifndef ISSI_SWPULLUP
-# define ISSI_SWPULLUP PUR_0R
+#ifndef IS31FL3733_SW_PULLUP
+# define IS31FL3733_SW_PULLUP IS31FL3733_PUR_0_OHM
#endif
-#ifndef ISSI_CSPULLUP
-# define ISSI_CSPULLUP PUR_0R
+#ifndef IS31FL3733_CS_PULLDOWN
+# define IS31FL3733_CS_PULLDOWN IS31FL3733_PDR_0_OHM
#endif
-#ifndef ISSI_GLOBALCURRENT
-# define ISSI_GLOBALCURRENT 0xFF
+#ifndef IS31FL3733_GLOBAL_CURRENT
+# define IS31FL3733_GLOBAL_CURRENT 0xFF
+#endif
+
+#ifndef IS31FL3733_SYNC_1
+# define IS31FL3733_SYNC_1 IS31FL3733_SYNC_NONE
+#endif
+#ifndef IS31FL3733_SYNC_2
+# define IS31FL3733_SYNC_2 IS31FL3733_SYNC_NONE
+#endif
+#ifndef IS31FL3733_SYNC_3
+# define IS31FL3733_SYNC_3 IS31FL3733_SYNC_NONE
+#endif
+#ifndef IS31FL3733_SYNC_4
+# define IS31FL3733_SYNC_4 IS31FL3733_SYNC_NONE
#endif
// Transfer buffer for TWITransmitData()
@@ -82,25 +71,25 @@ uint8_t g_twi_transfer_buffer[20];
// We could optimize this and take out the unused registers from these
// buffers and the transfers in is31fl3733_write_pwm_buffer() but it's
// probably not worth the extra complexity.
-uint8_t g_pwm_buffer[DRIVER_COUNT][192];
-bool g_pwm_buffer_update_required[DRIVER_COUNT] = {false};
+uint8_t g_pwm_buffer[IS31FL3733_DRIVER_COUNT][IS31FL3733_PWM_REGISTER_COUNT];
+bool g_pwm_buffer_update_required[IS31FL3733_DRIVER_COUNT] = {false};
-uint8_t g_led_control_registers[DRIVER_COUNT][24] = {0};
-bool g_led_control_registers_update_required[DRIVER_COUNT] = {false};
+uint8_t g_led_control_registers[IS31FL3733_DRIVER_COUNT][IS31FL3733_LED_CONTROL_REGISTER_COUNT] = {0};
+bool g_led_control_registers_update_required[IS31FL3733_DRIVER_COUNT] = {false};
bool is31fl3733_write_register(uint8_t addr, uint8_t reg, uint8_t data) {
// If the transaction fails function returns false.
g_twi_transfer_buffer[0] = reg;
g_twi_transfer_buffer[1] = data;
-#if ISSI_PERSISTENCE > 0
- for (uint8_t i = 0; i < ISSI_PERSISTENCE; i++) {
- if (i2c_transmit(addr << 1, g_twi_transfer_buffer, 2, ISSI_TIMEOUT) != 0) {
+#if IS31FL3733_I2C_PERSISTENCE > 0
+ for (uint8_t i = 0; i < IS31FL3733_I2C_PERSISTENCE; i++) {
+ if (i2c_transmit(addr << 1, g_twi_transfer_buffer, 2, IS31FL3733_I2C_TIMEOUT) != 0) {
return false;
}
}
#else
- if (i2c_transmit(addr << 1, g_twi_transfer_buffer, 2, ISSI_TIMEOUT) != 0) {
+ if (i2c_transmit(addr << 1, g_twi_transfer_buffer, 2, IS31FL3733_I2C_TIMEOUT) != 0) {
return false;
}
#endif
@@ -114,23 +103,21 @@ bool is31fl3733_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer) {
// g_twi_transfer_buffer[] is 20 bytes
// Iterate over the pwm_buffer contents at 16 byte intervals.
- for (int i = 0; i < 192; i += 16) {
+ for (int i = 0; i < IS31FL3733_PWM_REGISTER_COUNT; i += 16) {
g_twi_transfer_buffer[0] = i;
// Copy the data from i to i+15.
// Device will auto-increment register for data after the first byte
// Thus this sets registers 0x00-0x0F, 0x10-0x1F, etc. in one transfer.
- for (int j = 0; j < 16; j++) {
- g_twi_transfer_buffer[1 + j] = pwm_buffer[i + j];
- }
+ memcpy(g_twi_transfer_buffer + 1, pwm_buffer + i, 16);
-#if ISSI_PERSISTENCE > 0
- for (uint8_t i = 0; i < ISSI_PERSISTENCE; i++) {
- if (i2c_transmit(addr << 1, g_twi_transfer_buffer, 17, ISSI_TIMEOUT) != 0) {
+#if IS31FL3733_I2C_PERSISTENCE > 0
+ for (uint8_t i = 0; i < IS31FL3733_I2C_PERSISTENCE; i++) {
+ if (i2c_transmit(addr << 1, g_twi_transfer_buffer, 17, IS31FL3733_I2C_TIMEOUT) != 0) {
return false;
}
}
#else
- if (i2c_transmit(addr << 1, g_twi_transfer_buffer, 17, ISSI_TIMEOUT) != 0) {
+ if (i2c_transmit(addr << 1, g_twi_transfer_buffer, 17, IS31FL3733_I2C_TIMEOUT) != 0) {
return false;
}
#endif
@@ -138,6 +125,36 @@ bool is31fl3733_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer) {
return true;
}
+void is31fl3733_init_drivers(void) {
+ i2c_init();
+
+ is31fl3733_init(IS31FL3733_I2C_ADDRESS_1, IS31FL3733_SYNC_1);
+#if defined(IS31FL3733_I2C_ADDRESS_2)
+ is31fl3733_init(IS31FL3733_I2C_ADDRESS_2, IS31FL3733_SYNC_2);
+# if defined(IS31FL3733_I2C_ADDRESS_3)
+ is31fl3733_init(IS31FL3733_I2C_ADDRESS_3, IS31FL3733_SYNC_3);
+# if defined(IS31FL3733_I2C_ADDRESS_4)
+ is31fl3733_init(IS31FL3733_I2C_ADDRESS_4, IS31FL3733_SYNC_4);
+# endif
+# endif
+#endif
+
+ for (int i = 0; i < IS31FL3733_LED_COUNT; i++) {
+ is31fl3733_set_led_control_register(i, true, true, true);
+ }
+
+ is31fl3733_update_led_control_registers(IS31FL3733_I2C_ADDRESS_1, 0);
+#if defined(IS31FL3733_I2C_ADDRESS_2)
+ is31fl3733_update_led_control_registers(IS31FL3733_I2C_ADDRESS_2, 1);
+# if defined(IS31FL3733_I2C_ADDRESS_3)
+ is31fl3733_update_led_control_registers(IS31FL3733_I2C_ADDRESS_3, 2);
+# if defined(IS31FL3733_I2C_ADDRESS_4)
+ is31fl3733_update_led_control_registers(IS31FL3733_I2C_ADDRESS_4, 3);
+# endif
+# endif
+#endif
+}
+
void is31fl3733_init(uint8_t addr, uint8_t sync) {
// In order to avoid the LEDs being driven with garbage data
// in the LED driver's PWM registers, shutdown is enabled last.
@@ -146,48 +163,48 @@ void is31fl3733_init(uint8_t addr, uint8_t sync) {
// Sync is passed so set it according to the datasheet.
// Unlock the command register.
- is31fl3733_write_register(addr, ISSI_COMMANDREGISTER_WRITELOCK, 0xC5);
+ is31fl3733_write_register(addr, IS31FL3733_REG_COMMAND_WRITE_LOCK, IS31FL3733_COMMAND_WRITE_LOCK_MAGIC);
// Select PG0
- is31fl3733_write_register(addr, ISSI_COMMANDREGISTER, ISSI_PAGE_LEDCONTROL);
+ is31fl3733_write_register(addr, IS31FL3733_REG_COMMAND, IS31FL3733_COMMAND_LED_CONTROL);
// Turn off all LEDs.
- for (int i = 0x00; i <= 0x17; i++) {
+ for (int i = 0; i < IS31FL3733_LED_CONTROL_REGISTER_COUNT; i++) {
is31fl3733_write_register(addr, i, 0x00);
}
// Unlock the command register.
- is31fl3733_write_register(addr, ISSI_COMMANDREGISTER_WRITELOCK, 0xC5);
+ is31fl3733_write_register(addr, IS31FL3733_REG_COMMAND_WRITE_LOCK, IS31FL3733_COMMAND_WRITE_LOCK_MAGIC);
// Select PG1
- is31fl3733_write_register(addr, ISSI_COMMANDREGISTER, ISSI_PAGE_PWM);
+ is31fl3733_write_register(addr, IS31FL3733_REG_COMMAND, IS31FL3733_COMMAND_PWM);
// Set PWM on all LEDs to 0
// No need to setup Breath registers to PWM as that is the default.
- for (int i = 0x00; i <= 0xBF; i++) {
+ for (int i = 0; i < IS31FL3733_PWM_REGISTER_COUNT; i++) {
is31fl3733_write_register(addr, i, 0x00);
}
// Unlock the command register.
- is31fl3733_write_register(addr, ISSI_COMMANDREGISTER_WRITELOCK, 0xC5);
+ is31fl3733_write_register(addr, IS31FL3733_REG_COMMAND_WRITE_LOCK, IS31FL3733_COMMAND_WRITE_LOCK_MAGIC);
// Select PG3
- is31fl3733_write_register(addr, ISSI_COMMANDREGISTER, ISSI_PAGE_FUNCTION);
+ is31fl3733_write_register(addr, IS31FL3733_REG_COMMAND, IS31FL3733_COMMAND_FUNCTION);
// Set de-ghost pull-up resistors (SWx)
- is31fl3733_write_register(addr, ISSI_REG_SWPULLUP, ISSI_SWPULLUP);
+ is31fl3733_write_register(addr, IS31FL3733_FUNCTION_REG_SW_PULLUP, IS31FL3733_SW_PULLUP);
// Set de-ghost pull-down resistors (CSx)
- is31fl3733_write_register(addr, ISSI_REG_CSPULLUP, ISSI_CSPULLUP);
+ is31fl3733_write_register(addr, IS31FL3733_FUNCTION_REG_CS_PULLDOWN, IS31FL3733_CS_PULLDOWN);
// Set global current to maximum.
- is31fl3733_write_register(addr, ISSI_REG_GLOBALCURRENT, ISSI_GLOBALCURRENT);
+ is31fl3733_write_register(addr, IS31FL3733_FUNCTION_REG_GLOBAL_CURRENT, IS31FL3733_GLOBAL_CURRENT);
// Disable software shutdown.
- is31fl3733_write_register(addr, ISSI_REG_CONFIGURATION, ((sync & 0b11) << 6) | ((ISSI_PWM_FREQUENCY & 0b111) << 3) | 0x01);
+ is31fl3733_write_register(addr, IS31FL3733_FUNCTION_REG_CONFIGURATION, ((sync & 0b11) << 6) | ((IS31FL3733_PWM_FREQUENCY & 0b111) << 3) | 0x01);
// Wait 10ms to ensure the device has woken up.
wait_ms(10);
}
void is31fl3733_set_color(int index, uint8_t red, uint8_t green, uint8_t blue) {
- is31_led led;
- if (index >= 0 && index < RGB_MATRIX_LED_COUNT) {
- memcpy_P(&led, (&g_is31_leds[index]), sizeof(led));
+ is31fl3733_led_t led;
+ if (index >= 0 && index < IS31FL3733_LED_COUNT) {
+ memcpy_P(&led, (&g_is31fl3733_leds[index]), sizeof(led));
if (g_pwm_buffer[led.driver][led.r] == red && g_pwm_buffer[led.driver][led.g] == green && g_pwm_buffer[led.driver][led.b] == blue) {
return;
@@ -200,14 +217,14 @@ void is31fl3733_set_color(int index, uint8_t red, uint8_t green, uint8_t blue) {
}
void is31fl3733_set_color_all(uint8_t red, uint8_t green, uint8_t blue) {
- for (int i = 0; i < RGB_MATRIX_LED_COUNT; i++) {
+ for (int i = 0; i < IS31FL3733_LED_COUNT; i++) {
is31fl3733_set_color(i, red, green, blue);
}
}
void is31fl3733_set_led_control_register(uint8_t index, bool red, bool green, bool blue) {
- is31_led led;
- memcpy_P(&led, (&g_is31_leds[index]), sizeof(led));
+ is31fl3733_led_t led;
+ memcpy_P(&led, (&g_is31fl3733_leds[index]), sizeof(led));
uint8_t control_register_r = led.r / 8;
uint8_t control_register_g = led.g / 8;
@@ -238,26 +255,39 @@ void is31fl3733_set_led_control_register(uint8_t index, bool red, bool green, bo
void is31fl3733_update_pwm_buffers(uint8_t addr, uint8_t index) {
if (g_pwm_buffer_update_required[index]) {
// Firstly we need to unlock the command register and select PG1.
- is31fl3733_write_register(addr, ISSI_COMMANDREGISTER_WRITELOCK, 0xC5);
- is31fl3733_write_register(addr, ISSI_COMMANDREGISTER, ISSI_PAGE_PWM);
+ is31fl3733_write_register(addr, IS31FL3733_REG_COMMAND_WRITE_LOCK, IS31FL3733_COMMAND_WRITE_LOCK_MAGIC);
+ is31fl3733_write_register(addr, IS31FL3733_REG_COMMAND, IS31FL3733_COMMAND_PWM);
// If any of the transactions fail we risk writing dirty PG0,
// refresh page 0 just in case.
if (!is31fl3733_write_pwm_buffer(addr, g_pwm_buffer[index])) {
g_led_control_registers_update_required[index] = true;
}
+ g_pwm_buffer_update_required[index] = false;
}
- g_pwm_buffer_update_required[index] = false;
}
void is31fl3733_update_led_control_registers(uint8_t addr, uint8_t index) {
if (g_led_control_registers_update_required[index]) {
// Firstly we need to unlock the command register and select PG0
- is31fl3733_write_register(addr, ISSI_COMMANDREGISTER_WRITELOCK, 0xC5);
- is31fl3733_write_register(addr, ISSI_COMMANDREGISTER, ISSI_PAGE_LEDCONTROL);
- for (int i = 0; i < 24; i++) {
+ is31fl3733_write_register(addr, IS31FL3733_REG_COMMAND_WRITE_LOCK, IS31FL3733_COMMAND_WRITE_LOCK_MAGIC);
+ is31fl3733_write_register(addr, IS31FL3733_REG_COMMAND, IS31FL3733_COMMAND_LED_CONTROL);
+ for (int i = 0; i < IS31FL3733_LED_CONTROL_REGISTER_COUNT; i++) {
is31fl3733_write_register(addr, i, g_led_control_registers[index][i]);
}
+ g_led_control_registers_update_required[index] = false;
}
- g_led_control_registers_update_required[index] = false;
+}
+
+void is31fl3733_flush(void) {
+ is31fl3733_update_pwm_buffers(IS31FL3733_I2C_ADDRESS_1, 0);
+#if defined(IS31FL3733_I2C_ADDRESS_2)
+ is31fl3733_update_pwm_buffers(IS31FL3733_I2C_ADDRESS_2, 1);
+# if defined(IS31FL3733_I2C_ADDRESS_3)
+ is31fl3733_update_pwm_buffers(IS31FL3733_I2C_ADDRESS_3, 2);
+# if defined(IS31FL3733_I2C_ADDRESS_4)
+ is31fl3733_update_pwm_buffers(IS31FL3733_I2C_ADDRESS_4, 3);
+# endif
+# endif
+#endif
}
diff --git a/drivers/led/issi/is31fl3733.h b/drivers/led/issi/is31fl3733.h
index f37a58de0f90..20804b016bd3 100644
--- a/drivers/led/issi/is31fl3733.h
+++ b/drivers/led/issi/is31fl3733.h
@@ -22,16 +22,124 @@
#include
#include
#include "progmem.h"
+#include "util.h"
-typedef struct is31_led {
+// ======== DEPRECATED DEFINES - DO NOT USE ========
+#ifdef DRIVER_ADDR_1
+# define IS31FL3733_I2C_ADDRESS_1 DRIVER_ADDR_1
+#endif
+#ifdef DRIVER_ADDR_2
+# define IS31FL3733_I2C_ADDRESS_2 DRIVER_ADDR_2
+#endif
+#ifdef DRIVER_ADDR_3
+# define IS31FL3733_I2C_ADDRESS_3 DRIVER_ADDR_3
+#endif
+#ifdef DRIVER_ADDR_4
+# define IS31FL3733_I2C_ADDRESS_4 DRIVER_ADDR_4
+#endif
+#ifdef DRIVER_SYNC_1
+# define IS31FL3733_SYNC_1 DRIVER_SYNC_1
+#endif
+#ifdef DRIVER_ADDR_2
+# define IS31FL3733_SYNC_2 DRIVER_SYNC_2
+#endif
+#ifdef DRIVER_ADDR_3
+# define IS31FL3733_SYNC_3 DRIVER_SYNC_3
+#endif
+#ifdef DRIVER_ADDR_4
+# define IS31FL3733_SYNC_4 DRIVER_SYNC_4
+#endif
+#ifdef ISSI_TIMEOUT
+# define IS31FL3733_I2C_TIMEOUT ISSI_TIMEOUT
+#endif
+#ifdef ISSI_PERSISTENCE
+# define IS31FL3733_I2C_PERSISTENCE ISSI_PERSISTENCE
+#endif
+#ifdef ISSI_PWM_FREQUENCY
+# define IS31FL3733_PWM_FREQUENCY ISSI_PWM_FREQUENCY
+#endif
+#ifdef ISSI_SWPULLUP
+# define IS31FL3733_SW_PULLUP ISSI_SWPULLUP
+#endif
+#ifdef ISSI_CSPULLUP
+# define IS31FL3733_CS_PULLDOWN ISSI_CSPULLUP
+#endif
+#ifdef ISSI_GLOBALCURRENT
+# define IS31FL3733_GLOBAL_CURRENT ISSI_GLOBALCURRENT
+#endif
+
+#define is31_led is31fl3733_led_t
+#define g_is31_leds g_is31fl3733_leds
+
+#define PUR_0R IS31FL3733_PUR_0_OHM
+#define PUR_05KR IS31FL3733_PUR_1K_OHM
+#define PUR_3KR IS31FL3733_PUR_2K_OHM
+#define PUR_4KR IS31FL3733_PUR_4K_OHM
+#define PUR_8KR IS31FL3733_PUR_8K_OHM
+#define PUR_16KR IS31FL3733_PUR_16K_OHM
+#define PUR_32KR IS31FL3733_PUR_32K_OHM
+// ========
+
+#define IS31FL3733_REG_INTERRUPT_MASK 0xF0
+#define IS31FL3733_REG_INTERRUPT_STATUS 0xF1
+
+#define IS31FL3733_REG_COMMAND 0xFD
+
+#define IS31FL3733_COMMAND_LED_CONTROL 0x00
+#define IS31FL3733_COMMAND_PWM 0x01
+#define IS31FL3733_COMMAND_AUTO_BREATH 0x02
+#define IS31FL3733_COMMAND_FUNCTION 0x03
+
+#define IS31FL3733_FUNCTION_REG_CONFIGURATION 0x00
+#define IS31FL3733_FUNCTION_REG_GLOBAL_CURRENT 0x01
+#define IS31FL3733_FUNCTION_REG_SW_PULLUP 0x0F
+#define IS31FL3733_FUNCTION_REG_CS_PULLDOWN 0x10
+#define IS31FL3733_FUNCTION_REG_RESET 0x11
+
+#define IS31FL3733_REG_COMMAND_WRITE_LOCK 0xFE
+#define IS31FL3733_COMMAND_WRITE_LOCK_MAGIC 0xC5
+
+#define IS31FL3733_I2C_ADDRESS_GND_GND 0x50
+#define IS31FL3733_I2C_ADDRESS_GND_SCL 0x51
+#define IS31FL3733_I2C_ADDRESS_GND_SDA 0x52
+#define IS31FL3733_I2C_ADDRESS_GND_VCC 0x53
+#define IS31FL3733_I2C_ADDRESS_SCL_GND 0x54
+#define IS31FL3733_I2C_ADDRESS_SCL_SCL 0x55
+#define IS31FL3733_I2C_ADDRESS_SCL_SDA 0x56
+#define IS31FL3733_I2C_ADDRESS_SCL_VCC 0x57
+#define IS31FL3733_I2C_ADDRESS_SDA_GND 0x58
+#define IS31FL3733_I2C_ADDRESS_SDA_SCL 0x59
+#define IS31FL3733_I2C_ADDRESS_SDA_SDA 0x5A
+#define IS31FL3733_I2C_ADDRESS_SDA_VCC 0x5B
+#define IS31FL3733_I2C_ADDRESS_VCC_GND 0x5C
+#define IS31FL3733_I2C_ADDRESS_VCC_SCL 0x5D
+#define IS31FL3733_I2C_ADDRESS_VCC_SDA 0x5E
+#define IS31FL3733_I2C_ADDRESS_VCC_VCC 0x5F
+
+#if defined(RGB_MATRIX_IS31FL3733)
+# define IS31FL3733_LED_COUNT RGB_MATRIX_LED_COUNT
+#endif
+
+#if defined(IS31FL3733_I2C_ADDRESS_4)
+# define IS31FL3733_DRIVER_COUNT 4
+#elif defined(IS31FL3733_I2C_ADDRESS_3)
+# define IS31FL3733_DRIVER_COUNT 3
+#elif defined(IS31FL3733_I2C_ADDRESS_2)
+# define IS31FL3733_DRIVER_COUNT 2
+#elif defined(IS31FL3733_I2C_ADDRESS_1)
+# define IS31FL3733_DRIVER_COUNT 1
+#endif
+
+typedef struct is31fl3733_led_t {
uint8_t driver : 2;
uint8_t r;
uint8_t g;
uint8_t b;
-} __attribute__((packed)) is31_led;
+} PACKED is31fl3733_led_t;
-extern const is31_led PROGMEM g_is31_leds[RGB_MATRIX_LED_COUNT];
+extern const is31fl3733_led_t PROGMEM g_is31fl3733_leds[IS31FL3733_LED_COUNT];
+void is31fl3733_init_drivers(void);
void is31fl3733_init(uint8_t addr, uint8_t sync);
bool is31fl3733_write_register(uint8_t addr, uint8_t reg, uint8_t data);
bool is31fl3733_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer);
@@ -48,13 +156,35 @@ void is31fl3733_set_led_control_register(uint8_t index, bool red, bool green, bo
void is31fl3733_update_pwm_buffers(uint8_t addr, uint8_t index);
void is31fl3733_update_led_control_registers(uint8_t addr, uint8_t index);
-#define PUR_0R 0x00 // No PUR resistor
-#define PUR_05KR 0x02 // 0.5k Ohm resistor in t_NOL
-#define PUR_3KR 0x03 // 3.0k Ohm resistor on all the time
-#define PUR_4KR 0x04 // 4.0k Ohm resistor on all the time
-#define PUR_8KR 0x05 // 8.0k Ohm resistor on all the time
-#define PUR_16KR 0x06 // 16k Ohm resistor on all the time
-#define PUR_32KR 0x07 // 32k Ohm resistor in t_NOL
+void is31fl3733_flush(void);
+
+#define IS31FL3733_PDR_0_OHM 0b000 // No pull-down resistor
+#define IS31FL3733_PDR_0K5_OHM 0b001 // 0.5 kOhm resistor
+#define IS31FL3733_PDR_1K_OHM 0b010 // 1 kOhm resistor
+#define IS31FL3733_PDR_2K_OHM 0b011 // 2 kOhm resistor
+#define IS31FL3733_PDR_4K_OHM 0b100 // 4 kOhm resistor
+#define IS31FL3733_PDR_8K_OHM 0b101 // 8 kOhm resistor
+#define IS31FL3733_PDR_16K_OHM 0b110 // 16 kOhm resistor
+#define IS31FL3733_PDR_32K_OHM 0b111 // 32 kOhm resistor
+
+#define IS31FL3733_PUR_0_OHM 0b000 // No pull-up resistor
+#define IS31FL3733_PUR_0K5_OHM 0b001 // 0.5 kOhm resistor
+#define IS31FL3733_PUR_1K_OHM 0b010 // 1 kOhm resistor
+#define IS31FL3733_PUR_2K_OHM 0b011 // 2 kOhm resistor
+#define IS31FL3733_PUR_4K_OHM 0b100 // 4 kOhm resistor
+#define IS31FL3733_PUR_8K_OHM 0b101 // 8 kOhm resistor
+#define IS31FL3733_PUR_16K_OHM 0b110 // 16 kOhm resistor
+#define IS31FL3733_PUR_32K_OHM 0b111 // 32 kOhm resistor
+
+#define IS31FL3733_PWM_FREQUENCY_8K4_HZ 0b000
+#define IS31FL3733_PWM_FREQUENCY_4K2_HZ 0b001
+#define IS31FL3733_PWM_FREQUENCY_26K7_HZ 0b010
+#define IS31FL3733_PWM_FREQUENCY_2K1_HZ 0b011
+#define IS31FL3733_PWM_FREQUENCY_1K05_HZ 0b100
+
+#define IS31FL3733_SYNC_NONE 0b00
+#define IS31FL3733_SYNC_MASTER 0b01
+#define IS31FL3733_SYNC_SLAVE 0b10
#define A_1 0x00
#define A_2 0x01
diff --git a/drivers/led/issi/is31fl3736-simple.c b/drivers/led/issi/is31fl3736-simple.c
new file mode 100644
index 000000000000..e1cce3c48a33
--- /dev/null
+++ b/drivers/led/issi/is31fl3736-simple.c
@@ -0,0 +1,252 @@
+/* Copyright 2018 Jason Williams (Wilba)
+ * Copyright 2021 Doni Crosby
+ *
+ * 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 .
+ */
+
+#include "is31fl3736-simple.h"
+#include
+#include "i2c_master.h"
+#include "wait.h"
+
+#define IS31FL3736_PWM_REGISTER_COUNT 192 // actually 96
+#define IS31FL3736_LED_CONTROL_REGISTER_COUNT 24
+
+#ifndef IS31FL3736_I2C_TIMEOUT
+# define IS31FL3736_I2C_TIMEOUT 100
+#endif
+
+#ifndef IS31FL3736_I2C_PERSISTENCE
+# define IS31FL3736_I2C_PERSISTENCE 0
+#endif
+
+#ifndef IS31FL3736_PWM_FREQUENCY
+# define IS31FL3736_PWM_FREQUENCY IS31FL3736_PWM_FREQUENCY_8K4_HZ // PFS - IS31FL3736B only
+#endif
+
+#ifndef IS31FL3736_SW_PULLUP
+# define IS31FL3736_SW_PULLUP IS31FL3736_PUR_0_OHM
+#endif
+
+#ifndef IS31FL3736_CS_PULLDOWN
+# define IS31FL3736_CS_PULLDOWN IS31FL3736_PDR_0_OHM
+#endif
+
+#ifndef IS31FL3736_GLOBAL_CURRENT
+# define IS31FL3736_GLOBAL_CURRENT 0xFF
+#endif
+
+// Transfer buffer for TWITransmitData()
+uint8_t g_twi_transfer_buffer[20];
+
+// These buffers match the IS31FL3736 PWM registers.
+// The control buffers match the PG0 LED On/Off registers.
+// Storing them like this is optimal for I2C transfers to the registers.
+// We could optimize this and take out the unused registers from these
+// buffers and the transfers in is31fl3736_write_pwm_buffer() but it's
+// probably not worth the extra complexity.
+uint8_t g_pwm_buffer[IS31FL3736_DRIVER_COUNT][IS31FL3736_PWM_REGISTER_COUNT];
+bool g_pwm_buffer_update_required[IS31FL3736_DRIVER_COUNT] = {false};
+
+uint8_t g_led_control_registers[IS31FL3736_DRIVER_COUNT][IS31FL3736_LED_CONTROL_REGISTER_COUNT] = {0};
+bool g_led_control_registers_update_required[IS31FL3736_DRIVER_COUNT] = {false};
+
+void is31fl3736_write_register(uint8_t addr, uint8_t reg, uint8_t data) {
+ g_twi_transfer_buffer[0] = reg;
+ g_twi_transfer_buffer[1] = data;
+
+#if IS31FL3736_I2C_PERSISTENCE > 0
+ for (uint8_t i = 0; i < IS31FL3736_I2C_PERSISTENCE; i++) {
+ if (i2c_transmit(addr << 1, g_twi_transfer_buffer, 2, IS31FL3736_I2C_TIMEOUT) == 0) break;
+ }
+#else
+ i2c_transmit(addr << 1, g_twi_transfer_buffer, 2, IS31FL3736_I2C_TIMEOUT);
+#endif
+}
+
+void is31fl3736_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer) {
+ // assumes PG1 is already selected
+
+ // transmit PWM registers in 12 transfers of 16 bytes
+ // g_twi_transfer_buffer[] is 20 bytes
+
+ // iterate over the pwm_buffer contents at 16 byte intervals
+ for (int i = 0; i < IS31FL3736_PWM_REGISTER_COUNT; i += 16) {
+ g_twi_transfer_buffer[0] = i;
+ // copy the data from i to i+15
+ // device will auto-increment register for data after the first byte
+ // thus this sets registers 0x00-0x0F, 0x10-0x1F, etc. in one transfer
+ memcpy(g_twi_transfer_buffer + 1, pwm_buffer + i, 16);
+
+#if IS31FL3736_I2C_PERSISTENCE > 0
+ for (uint8_t i = 0; i < IS31FL3736_I2C_PERSISTENCE; i++) {
+ if (i2c_transmit(addr << 1, g_twi_transfer_buffer, 17, IS31FL3736_I2C_TIMEOUT) == 0) break;
+ }
+#else
+ i2c_transmit(addr << 1, g_twi_transfer_buffer, 17, IS31FL3736_I2C_TIMEOUT);
+#endif
+ }
+}
+
+void is31fl3736_init_drivers(void) {
+ i2c_init();
+
+ is31fl3736_init(IS31FL3736_I2C_ADDRESS_1);
+#if defined(IS31FL3736_I2C_ADDRESS_2)
+ is31fl3736_init(IS31FL3736_I2C_ADDRESS_2);
+# if defined(IS31FL3736_I2C_ADDRESS_3)
+ is31fl3736_init(IS31FL3736_I2C_ADDRESS_3);
+# if defined(IS31FL3736_I2C_ADDRESS_4)
+ is31fl3736_init(IS31FL3736_I2C_ADDRESS_4);
+# endif
+# endif
+#endif
+
+ for (int i = 0; i < IS31FL3736_LED_COUNT; i++) {
+ is31fl3736_set_led_control_register(i, true);
+ }
+
+ is31fl3736_update_led_control_registers(IS31FL3736_I2C_ADDRESS_1, 0);
+#if defined(IS31FL3736_I2C_ADDRESS_2)
+ is31fl3736_update_led_control_registers(IS31FL3736_I2C_ADDRESS_2, 1);
+# if defined(IS31FL3736_I2C_ADDRESS_3)
+ is31fl3736_update_led_control_registers(IS31FL3736_I2C_ADDRESS_3, 2);
+# if defined(IS31FL3736_I2C_ADDRESS_4)
+ is31fl3736_update_led_control_registers(IS31FL3736_I2C_ADDRESS_4, 3);
+# endif
+# endif
+#endif
+}
+
+void is31fl3736_init(uint8_t addr) {
+ // In order to avoid the LEDs being driven with garbage data
+ // in the LED driver's PWM registers, shutdown is enabled last.
+ // Set up the mode and other settings, clear the PWM registers,
+ // then disable software shutdown.
+
+ // Unlock the command register.
+ is31fl3736_write_register(addr, IS31FL3736_REG_COMMAND_WRITE_LOCK, IS31FL3736_COMMAND_WRITE_LOCK_MAGIC);
+
+ // Select PG0
+ is31fl3736_write_register(addr, IS31FL3736_REG_COMMAND, IS31FL3736_COMMAND_LED_CONTROL);
+ // Turn off all LEDs.
+ for (int i = 0; i < IS31FL3736_LED_CONTROL_REGISTER_COUNT; i++) {
+ is31fl3736_write_register(addr, i, 0x00);
+ }
+
+ // Unlock the command register.
+ is31fl3736_write_register(addr, IS31FL3736_REG_COMMAND_WRITE_LOCK, IS31FL3736_COMMAND_WRITE_LOCK_MAGIC);
+
+ // Select PG1
+ is31fl3736_write_register(addr, IS31FL3736_REG_COMMAND, IS31FL3736_COMMAND_PWM);
+ // Set PWM on all LEDs to 0
+ // No need to setup Breath registers to PWM as that is the default.
+ for (int i = 0; i < IS31FL3736_PWM_REGISTER_COUNT; i++) {
+ is31fl3736_write_register(addr, i, 0x00);
+ }
+
+ // Unlock the command register.
+ is31fl3736_write_register(addr, IS31FL3736_REG_COMMAND_WRITE_LOCK, IS31FL3736_COMMAND_WRITE_LOCK_MAGIC);
+
+ // Select PG3
+ is31fl3736_write_register(addr, IS31FL3736_REG_COMMAND, IS31FL3736_COMMAND_FUNCTION);
+ // Set de-ghost pull-up resistors (SWx)
+ is31fl3736_write_register(addr, IS31FL3736_FUNCTION_REG_SW_PULLUP, IS31FL3736_SW_PULLUP);
+ // Set de-ghost pull-down resistors (CSx)
+ is31fl3736_write_register(addr, IS31FL3736_FUNCTION_REG_CS_PULLDOWN, IS31FL3736_CS_PULLDOWN);
+ // Set global current to maximum.
+ is31fl3736_write_register(addr, IS31FL3736_FUNCTION_REG_GLOBAL_CURRENT, IS31FL3736_GLOBAL_CURRENT);
+ // Disable software shutdown.
+ is31fl3736_write_register(addr, IS31FL3736_FUNCTION_REG_CONFIGURATION, ((IS31FL3736_PWM_FREQUENCY & 0b111) << 3) | 0x01);
+
+ // Wait 10ms to ensure the device has woken up.
+ wait_ms(10);
+}
+
+void is31fl3736_set_value(int index, uint8_t value) {
+ is31fl3736_led_t led;
+ if (index >= 0 && index < IS31FL3736_LED_COUNT) {
+ memcpy_P(&led, (&g_is31fl3736_leds[index]), sizeof(led));
+
+ if (g_pwm_buffer[led.driver][led.v] == value) {
+ return;
+ }
+ g_pwm_buffer[led.driver][led.v] = value;
+ g_pwm_buffer_update_required[led.driver] = true;
+ }
+}
+
+void is31fl3736_set_value_all(uint8_t value) {
+ for (int i = 0; i < IS31FL3736_LED_COUNT; i++) {
+ is31fl3736_set_value(i, value);
+ }
+}
+
+void is31fl3736_set_led_control_register(uint8_t index, bool value) {
+ is31fl3736_led_t led;
+ memcpy_P(&led, (&g_is31fl3736_leds[index]), sizeof(led));
+
+ // The PWM register for a matrix position (0x00 to 0xBF) is interleaved, so:
+ // A1=0x00 A2=0x02 A3=0x04 A4=0x06 A5=0x08 A6=0x0A A7=0x0C A8=0x0E
+ // B1=0x10 B2=0x12 B3=0x14
+ // But also, the LED control registers (0x00 to 0x17) are also interleaved, so:
+ // A1-A4=0x00 A5-A8=0x01
+
+ uint8_t control_register = led.v / 8;
+ uint8_t bit_value = led.v % 8;
+
+ if (value) {
+ g_led_control_registers[led.driver][control_register] |= (1 << bit_value);
+ } else {
+ g_led_control_registers[led.driver][control_register] &= ~(1 << bit_value);
+ }
+
+ g_led_control_registers_update_required[led.driver] = true;
+}
+
+void is31fl3736_update_pwm_buffers(uint8_t addr, uint8_t index) {
+ if (g_pwm_buffer_update_required[index]) {
+ // Firstly we need to unlock the command register and select PG1
+ is31fl3736_write_register(addr, IS31FL3736_REG_COMMAND_WRITE_LOCK, IS31FL3736_COMMAND_WRITE_LOCK_MAGIC);
+ is31fl3736_write_register(addr, IS31FL3736_REG_COMMAND, IS31FL3736_COMMAND_PWM);
+
+ is31fl3736_write_pwm_buffer(addr, g_pwm_buffer[index]);
+ g_pwm_buffer_update_required[index] = false;
+ }
+}
+
+void is31fl3736_update_led_control_registers(uint8_t addr, uint8_t index) {
+ if (g_led_control_registers_update_required[index]) {
+ // Firstly we need to unlock the command register and select PG0
+ is31fl3736_write_register(addr, IS31FL3736_REG_COMMAND_WRITE_LOCK, IS31FL3736_COMMAND_WRITE_LOCK_MAGIC);
+ is31fl3736_write_register(addr, IS31FL3736_REG_COMMAND, IS31FL3736_COMMAND_LED_CONTROL);
+ for (int i = 0; i < IS31FL3736_LED_CONTROL_REGISTER_COUNT; i++) {
+ is31fl3736_write_register(addr, i, g_led_control_registers[index][i]);
+ }
+ g_led_control_registers_update_required[index] = false;
+ }
+}
+
+void is31fl3736_flush(void) {
+ is31fl3736_update_pwm_buffers(IS31FL3736_I2C_ADDRESS_1, 0);
+#if defined(IS31FL3736_I2C_ADDRESS_2)
+ is31fl3736_update_pwm_buffers(IS31FL3736_I2C_ADDRESS_2, 1);
+# if defined(IS31FL3736_I2C_ADDRESS_3)
+ is31fl3736_update_pwm_buffers(IS31FL3736_I2C_ADDRESS_3, 2);
+# if defined(IS31FL3736_I2C_ADDRESS_4)
+ is31fl3736_update_pwm_buffers(IS31FL3736_I2C_ADDRESS_4, 3);
+# endif
+# endif
+#endif
+}
diff --git a/drivers/led/issi/is31fl3736-simple.h b/drivers/led/issi/is31fl3736-simple.h
new file mode 100644
index 000000000000..a73a87254590
--- /dev/null
+++ b/drivers/led/issi/is31fl3736-simple.h
@@ -0,0 +1,261 @@
+/* Copyright 2018 Jason Williams (Wilba)
+ * Copyright 2021 Doni Crosby
+ *
+ * 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 .
+ */
+
+#pragma once
+
+#include
+#include
+#include "progmem.h"
+#include "util.h"
+
+// ======== DEPRECATED DEFINES - DO NOT USE ========
+#ifdef ISSI_TIMEOUT
+# define IS31FL3736_I2C_TIMEOUT ISSI_TIMEOUT
+#endif
+#ifdef ISSI_PERSISTENCE
+# define IS31FL3736_I2C_PERSISTENCE ISSI_PERSISTENCE
+#endif
+#ifdef ISSI_SWPULLUP
+# define IS31FL3736_SW_PULLUP ISSI_SWPULLUP
+#endif
+#ifdef ISSI_CSPULLUP
+# define IS31FL3736_CS_PULLDOWN ISSI_CSPULLUP
+#endif
+#ifdef ISSI_GLOBALCURRENT
+# define IS31FL3736_GLOBAL_CURRENT ISSI_GLOBALCURRENT
+#endif
+
+#define is31_led is31fl3736_led_t
+#define g_is31_leds g_is31fl3736_leds
+
+#define PUR_0R IS31FL3736_PUR_0_OHM
+#define PUR_05KR IS31FL3736_PUR_05K_OHM
+#define PUR_1KR IS31FL3736_PUR_1K_OHM
+#define PUR_2KR IS31FL3736_PUR_2K_OHM
+#define PUR_4KR IS31FL3736_PUR_4K_OHM
+#define PUR_8KR IS31FL3736_PUR_8K_OHM
+#define PUR_16KR IS31FL3736_PUR_16K_OHM
+#define PUR_32KR IS31FL3736_PUR_32K_OHM
+// ========
+
+#define IS31FL3736_REG_INTERRUPT_MASK 0xF0
+#define IS31FL3736_REG_INTERRUPT_STATUS 0xF1
+
+#define IS31FL3736_REG_COMMAND 0xFD
+
+#define IS31FL3736_COMMAND_LED_CONTROL 0x00
+#define IS31FL3736_COMMAND_PWM 0x01
+#define IS31FL3736_COMMAND_AUTO_BREATH 0x02
+#define IS31FL3736_COMMAND_FUNCTION 0x03
+
+#define IS31FL3736_FUNCTION_REG_CONFIGURATION 0x00
+#define IS31FL3736_FUNCTION_REG_GLOBAL_CURRENT 0x01
+#define IS31FL3736_FUNCTION_REG_SW_PULLUP 0x0F
+#define IS31FL3736_FUNCTION_REG_CS_PULLDOWN 0x10
+#define IS31FL3736_FUNCTION_REG_RESET 0x11
+
+#define IS31FL3736_REG_COMMAND_WRITE_LOCK 0xFE
+#define IS31FL3736_COMMAND_WRITE_LOCK_MAGIC 0xC5
+
+#define IS31FL3736_I2C_ADDRESS_GND_GND 0x50
+#define IS31FL3736_I2C_ADDRESS_GND_SCL 0x51
+#define IS31FL3736_I2C_ADDRESS_GND_SDA 0x52
+#define IS31FL3736_I2C_ADDRESS_GND_VCC 0x53
+#define IS31FL3736_I2C_ADDRESS_SCL_GND 0x54
+#define IS31FL3736_I2C_ADDRESS_SCL_SCL 0x55
+#define IS31FL3736_I2C_ADDRESS_SCL_SDA 0x56
+#define IS31FL3736_I2C_ADDRESS_SCL_VCC 0x57
+#define IS31FL3736_I2C_ADDRESS_SDA_GND 0x58
+#define IS31FL3736_I2C_ADDRESS_SDA_SCL 0x59
+#define IS31FL3736_I2C_ADDRESS_SDA_SDA 0x5A
+#define IS31FL3736_I2C_ADDRESS_SDA_VCC 0x5B
+#define IS31FL3736_I2C_ADDRESS_VCC_GND 0x5C
+#define IS31FL3736_I2C_ADDRESS_VCC_SCL 0x5D
+#define IS31FL3736_I2C_ADDRESS_VCC_SDA 0x5E
+#define IS31FL3736_I2C_ADDRESS_VCC_VCC 0x5F
+
+#if defined(LED_MATRIX_IS31FL3736)
+# define IS31FL3736_LED_COUNT LED_MATRIX_LED_COUNT
+#endif
+
+#if defined(IS31FL3736_I2C_ADDRESS_4)
+# define IS31FL3736_DRIVER_COUNT 4
+#elif defined(IS31FL3736_I2C_ADDRESS_3)
+# define IS31FL3736_DRIVER_COUNT 3
+#elif defined(IS31FL3736_I2C_ADDRESS_2)
+# define IS31FL3736_DRIVER_COUNT 2
+#elif defined(IS31FL3736_I2C_ADDRESS_1)
+# define IS31FL3736_DRIVER_COUNT 1
+#endif
+
+typedef struct is31fl3736_led_t {
+ uint8_t driver : 2;
+ uint8_t v;
+} PACKED is31fl3736_led_t;
+
+extern const is31fl3736_led_t PROGMEM g_is31fl3736_leds[IS31FL3736_LED_COUNT];
+
+void is31fl3736_init_drivers(void);
+void is31fl3736_init(uint8_t addr);
+void is31fl3736_write_register(uint8_t addr, uint8_t reg, uint8_t data);
+void is31fl3736_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer);
+
+void is31fl3736_set_value(int index, uint8_t value);
+void is31fl3736_set_value_all(uint8_t value);
+
+void is31fl3736_set_led_control_register(uint8_t index, bool value);
+
+// This should not be called from an interrupt
+// (eg. from a timer interrupt).
+// Call this while idle (in between matrix scans).
+// If the buffer is dirty, it will update the driver with the buffer.
+void is31fl3736_update_pwm_buffers(uint8_t addr, uint8_t index);
+void is31fl3736_update_led_control_registers(uint8_t addr, uint8_t index);
+
+void is31fl3736_flush(void);
+
+#define IS31FL3736_PDR_0_OHM 0b000 // No pull-down resistor
+#define IS31FL3736_PDR_0K5_OHM 0b001 // 0.5 kOhm resistor
+#define IS31FL3736_PDR_1K_OHM 0b010 // 1 kOhm resistor
+#define IS31FL3736_PDR_2K_OHM 0b011 // 2 kOhm resistor
+#define IS31FL3736_PDR_4K_OHM 0b100 // 4 kOhm resistor
+#define IS31FL3736_PDR_8K_OHM 0b101 // 8 kOhm resistor
+#define IS31FL3736_PDR_16K_OHM 0b110 // 16 kOhm resistor
+#define IS31FL3736_PDR_32K_OHM 0b111 // 32 kOhm resistor
+
+#define IS31FL3736_PUR_0_OHM 0b000 // No pull-up resistor
+#define IS31FL3736_PUR_0K5_OHM 0b001 // 0.5 kOhm resistor
+#define IS31FL3736_PUR_1K_OHM 0b010 // 1 kOhm resistor
+#define IS31FL3736_PUR_2K_OHM 0b011 // 2 kOhm resistor
+#define IS31FL3736_PUR_4K_OHM 0b100 // 4 kOhm resistor
+#define IS31FL3736_PUR_8K_OHM 0b101 // 8 kOhm resistor
+#define IS31FL3736_PUR_16K_OHM 0b110 // 16 kOhm resistor
+#define IS31FL3736_PUR_32K_OHM 0b111 // 32 kOhm resistor
+
+#define IS31FL3736_PWM_FREQUENCY_8K4_HZ 0b000
+#define IS31FL3736_PWM_FREQUENCY_4K2_HZ 0b001
+#define IS31FL3736_PWM_FREQUENCY_26K7_HZ 0b010
+#define IS31FL3736_PWM_FREQUENCY_2K1_HZ 0b011
+#define IS31FL3736_PWM_FREQUENCY_1K05_HZ 0b100
+
+#define A_1 0x00
+#define A_2 0x02
+#define A_3 0x04
+#define A_4 0x06
+#define A_5 0x08
+#define A_6 0x0A
+#define A_7 0x0C
+#define A_8 0x0E
+
+#define B_1 0x10
+#define B_2 0x12
+#define B_3 0x14
+#define B_4 0x16
+#define B_5 0x18
+#define B_6 0x1A
+#define B_7 0x1C
+#define B_8 0x1E
+
+#define C_1 0x20
+#define C_2 0x22
+#define C_3 0x24
+#define C_4 0x26
+#define C_5 0x28
+#define C_6 0x2A
+#define C_7 0x2C
+#define C_8 0x2E
+
+#define D_1 0x30
+#define D_2 0x32
+#define D_3 0x34
+#define D_4 0x36
+#define D_5 0x38
+#define D_6 0x3A
+#define D_7 0x3C
+#define D_8 0x3E
+
+#define E_1 0x40
+#define E_2 0x42
+#define E_3 0x44
+#define E_4 0x46
+#define E_5 0x48
+#define E_6 0x4A
+#define E_7 0x4C
+#define E_8 0x4E
+
+#define F_1 0x50
+#define F_2 0x52
+#define F_3 0x54
+#define F_4 0x56
+#define F_5 0x58
+#define F_6 0x5A
+#define F_7 0x5C
+#define F_8 0x5E
+
+#define G_1 0x60
+#define G_2 0x62
+#define G_3 0x64
+#define G_4 0x66
+#define G_5 0x68
+#define G_6 0x6A
+#define G_7 0x6C
+#define G_8 0x6E
+
+#define H_1 0x70
+#define H_2 0x72
+#define H_3 0x74
+#define H_4 0x76
+#define H_5 0x78
+#define H_6 0x7A
+#define H_7 0x7C
+#define H_8 0x7E
+
+#define I_1 0x80
+#define I_2 0x82
+#define I_3 0x84
+#define I_4 0x86
+#define I_5 0x88
+#define I_6 0x8A
+#define I_7 0x8C
+#define I_8 0x8E
+
+#define J_1 0x90
+#define J_2 0x92
+#define J_3 0x94
+#define J_4 0x96
+#define J_5 0x98
+#define J_6 0x9A
+#define J_7 0x9C
+#define J_8 0x9E
+
+#define K_1 0xA0
+#define K_2 0xA2
+#define K_3 0xA4
+#define K_4 0xA6
+#define K_5 0xA8
+#define K_6 0xAA
+#define K_7 0xAC
+#define K_8 0xAE
+
+#define L_1 0xB0
+#define L_2 0xB2
+#define L_3 0xB4
+#define L_4 0xB6
+#define L_5 0xB8
+#define L_6 0xBA
+#define L_7 0xBC
+#define L_8 0xBE
diff --git a/drivers/led/issi/is31fl3736.c b/drivers/led/issi/is31fl3736.c
index 0de8b3bbaef4..30ab796f3e35 100644
--- a/drivers/led/issi/is31fl3736.c
+++ b/drivers/led/issi/is31fl3736.c
@@ -16,55 +16,35 @@
*/
#include "is31fl3736.h"
+#include
#include "i2c_master.h"
#include "wait.h"
-// This is a 7-bit address, that gets left-shifted and bit 0
-// set to 0 for write, 1 for read (as per I2C protocol)
-// The address will vary depending on your wiring:
-// 00 <-> GND
-// 01 <-> SCL
-// 10 <-> SDA
-// 11 <-> VCC
-// ADDR1 represents A1:A0 of the 7-bit address.
-// ADDR2 represents A3:A2 of the 7-bit address.
-// The result is: 0b101(ADDR2)(ADDR1)
-#define ISSI_ADDR_DEFAULT 0x50
-
-#define ISSI_COMMANDREGISTER 0xFD
-#define ISSI_COMMANDREGISTER_WRITELOCK 0xFE
-#define ISSI_INTERRUPTMASKREGISTER 0xF0
-#define ISSI_INTERRUPTSTATUSREGISTER 0xF1
-
-#define ISSI_PAGE_LEDCONTROL 0x00 // PG0
-#define ISSI_PAGE_PWM 0x01 // PG1
-#define ISSI_PAGE_AUTOBREATH 0x02 // PG2
-#define ISSI_PAGE_FUNCTION 0x03 // PG3
-
-#define ISSI_REG_CONFIGURATION 0x00 // PG3
-#define ISSI_REG_GLOBALCURRENT 0x01 // PG3
-#define ISSI_REG_RESET 0x11 // PG3
-#define ISSI_REG_SWPULLUP 0x0F // PG3
-#define ISSI_REG_CSPULLUP 0x10 // PG3
-
-#ifndef ISSI_TIMEOUT
-# define ISSI_TIMEOUT 100
+#define IS31FL3736_PWM_REGISTER_COUNT 192 // actually 96
+#define IS31FL3736_LED_CONTROL_REGISTER_COUNT 24
+
+#ifndef IS31FL3736_I2C_TIMEOUT
+# define IS31FL3736_I2C_TIMEOUT 100
+#endif
+
+#ifndef IS31FL3736_I2C_PERSISTENCE
+# define IS31FL3736_I2C_PERSISTENCE 0
#endif
-#ifndef ISSI_PERSISTENCE
-# define ISSI_PERSISTENCE 0
+#ifndef IS31FL3736_PWM_FREQUENCY
+# define IS31FL3736_PWM_FREQUENCY IS31FL3736_PWM_FREQUENCY_8K4_HZ // PFS - IS31FL3736B only
#endif
-#ifndef ISSI_SWPULLUP
-# define ISSI_SWPULLUP PUR_0R
+#ifndef IS31FL3736_SW_PULLUP
+# define IS31FL3736_SW_PULLUP IS31FL3736_PUR_0_OHM
#endif
-#ifndef ISSI_CSPULLUP
-# define ISSI_CSPULLUP PUR_0R
+#ifndef IS31FL3736_CS_PULLDOWN
+# define IS31FL3736_CS_PULLDOWN IS31FL3736_PDR_0_OHM
#endif
-#ifndef ISSI_GLOBALCURRENT
-# define ISSI_GLOBALCURRENT 0xFF
+#ifndef IS31FL3736_GLOBAL_CURRENT
+# define IS31FL3736_GLOBAL_CURRENT 0xFF
#endif
// Transfer buffer for TWITransmitData()
@@ -76,22 +56,22 @@ uint8_t g_twi_transfer_buffer[20];
// We could optimize this and take out the unused registers from these
// buffers and the transfers in is31fl3736_write_pwm_buffer() but it's
// probably not worth the extra complexity.
-uint8_t g_pwm_buffer[DRIVER_COUNT][192];
-bool g_pwm_buffer_update_required[DRIVER_COUNT] = {false};
+uint8_t g_pwm_buffer[IS31FL3736_DRIVER_COUNT][IS31FL3736_PWM_REGISTER_COUNT];
+bool g_pwm_buffer_update_required[IS31FL3736_DRIVER_COUNT] = {false};
-uint8_t g_led_control_registers[DRIVER_COUNT][24] = {{0}, {0}};
-bool g_led_control_registers_update_required = false;
+uint8_t g_led_control_registers[IS31FL3736_DRIVER_COUNT][IS31FL3736_LED_CONTROL_REGISTER_COUNT] = {0};
+bool g_led_control_registers_update_required[IS31FL3736_DRIVER_COUNT] = {false};
void is31fl3736_write_register(uint8_t addr, uint8_t reg, uint8_t data) {
g_twi_transfer_buffer[0] = reg;
g_twi_transfer_buffer[1] = data;
-#if ISSI_PERSISTENCE > 0
- for (uint8_t i = 0; i < ISSI_PERSISTENCE; i++) {
- if (i2c_transmit(addr << 1, g_twi_transfer_buffer, 2, ISSI_TIMEOUT) == 0) break;
+#if IS31FL3736_I2C_PERSISTENCE > 0
+ for (uint8_t i = 0; i < IS31FL3736_I2C_PERSISTENCE; i++) {
+ if (i2c_transmit(addr << 1, g_twi_transfer_buffer, 2, IS31FL3736_I2C_TIMEOUT) == 0) break;
}
#else
- i2c_transmit(addr << 1, g_twi_transfer_buffer, 2, ISSI_TIMEOUT);
+ i2c_transmit(addr << 1, g_twi_transfer_buffer, 2, IS31FL3736_I2C_TIMEOUT);
#endif
}
@@ -102,21 +82,51 @@ void is31fl3736_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer) {
// g_twi_transfer_buffer[] is 20 bytes
// iterate over the pwm_buffer contents at 16 byte intervals
- for (int i = 0; i < 192; i += 16) {
+ for (int i = 0; i < IS31FL3736_PWM_REGISTER_COUNT; i += 16) {
g_twi_transfer_buffer[0] = i;
// copy the data from i to i+15
// device will auto-increment register for data after the first byte
// thus this sets registers 0x00-0x0F, 0x10-0x1F, etc. in one transfer
memcpy(g_twi_transfer_buffer + 1, pwm_buffer + i, 16);
-#if ISSI_PERSISTENCE > 0
- for (uint8_t i = 0; i < ISSI_PERSISTENCE; i++) {
- if (i2c_transmit(addr << 1, g_twi_transfer_buffer, 17, ISSI_TIMEOUT) == 0) break;
+#if IS31FL3736_I2C_PERSISTENCE > 0
+ for (uint8_t i = 0; i < IS31FL3736_I2C_PERSISTENCE; i++) {
+ if (i2c_transmit(addr << 1, g_twi_transfer_buffer, 17, IS31FL3736_I2C_TIMEOUT) == 0) break;
}
#else
- i2c_transmit(addr << 1, g_twi_transfer_buffer, 17, ISSI_TIMEOUT);
+ i2c_transmit(addr << 1, g_twi_transfer_buffer, 17, IS31FL3736_I2C_TIMEOUT);
+#endif
+ }
+}
+
+void is31fl3736_init_drivers(void) {
+ i2c_init();
+
+ is31fl3736_init(IS31FL3736_I2C_ADDRESS_1);
+#if defined(IS31FL3736_I2C_ADDRESS_2)
+ is31fl3736_init(IS31FL3736_I2C_ADDRESS_2);
+# if defined(IS31FL3736_I2C_ADDRESS_3)
+ is31fl3736_init(IS31FL3736_I2C_ADDRESS_3);
+# if defined(IS31FL3736_I2C_ADDRESS_4)
+ is31fl3736_init(IS31FL3736_I2C_ADDRESS_4);
+# endif
+# endif
#endif
+
+ for (int i = 0; i < IS31FL3736_LED_COUNT; i++) {
+ is31fl3736_set_led_control_register(i, true, true, true);
}
+
+ is31fl3736_update_led_control_registers(IS31FL3736_I2C_ADDRESS_1, 0);
+#if defined(IS31FL3736_I2C_ADDRESS_2)
+ is31fl3736_update_led_control_registers(IS31FL3736_I2C_ADDRESS_2, 1);
+# if defined(IS31FL3736_I2C_ADDRESS_3)
+ is31fl3736_update_led_control_registers(IS31FL3736_I2C_ADDRESS_3, 2);
+# if defined(IS31FL3736_I2C_ADDRESS_4)
+ is31fl3736_update_led_control_registers(IS31FL3736_I2C_ADDRESS_4, 3);
+# endif
+# endif
+#endif
}
void is31fl3736_init(uint8_t addr) {
@@ -126,48 +136,48 @@ void is31fl3736_init(uint8_t addr) {
// then disable software shutdown.
// Unlock the command register.
- is31fl3736_write_register(addr, ISSI_COMMANDREGISTER_WRITELOCK, 0xC5);
+ is31fl3736_write_register(addr, IS31FL3736_REG_COMMAND_WRITE_LOCK, IS31FL3736_COMMAND_WRITE_LOCK_MAGIC);
// Select PG0
- is31fl3736_write_register(addr, ISSI_COMMANDREGISTER, ISSI_PAGE_LEDCONTROL);
+ is31fl3736_write_register(addr, IS31FL3736_REG_COMMAND, IS31FL3736_REG_LED_CONTROL);
// Turn off all LEDs.
- for (int i = 0x00; i <= 0x17; i++) {
+ for (int i = 0; i < IS31FL3736_LED_CONTROL_REGISTER_COUNT; i++) {
is31fl3736_write_register(addr, i, 0x00);
}
// Unlock the command register.
- is31fl3736_write_register(addr, ISSI_COMMANDREGISTER_WRITELOCK, 0xC5);
+ is31fl3736_write_register(addr, IS31FL3736_REG_COMMAND_WRITELOCK, IS31FL3736_COMMAND_WRITE_LOCK_MAGIC);
// Select PG1
- is31fl3736_write_register(addr, ISSI_COMMANDREGISTER, ISSI_PAGE_PWM);
+ is31fl3736_write_register(addr, IS31FL3736_REG_COMMAND, IS31FL3736_COMMAND_PWM);
// Set PWM on all LEDs to 0
// No need to setup Breath registers to PWM as that is the default.
- for (int i = 0x00; i <= 0xBF; i++) {
+ for (int i = 0; i < IS31FL3736_PWM_REGISTER_COUNT; i++) {
is31fl3736_write_register(addr, i, 0x00);
}
// Unlock the command register.
- is31fl3736_write_register(addr, ISSI_COMMANDREGISTER_WRITELOCK, 0xC5);
+ is31fl3736_write_register(addr, IS31FL3736_REG_COMMAND_WRITE_LOCK, IS31FL3736_COMMAND_WRITE_LOCK_MAGIC);
// Select PG3
- is31fl3736_write_register(addr, ISSI_COMMANDREGISTER, ISSI_PAGE_FUNCTION);
+ is31fl3736_write_register(addr, IS31FL3736_REG_COMMAND, IS31FL3736_COMMAND_FUNCTION);
// Set de-ghost pull-up resistors (SWx)
- is31fl3736_write_register(addr, ISSI_REG_SWPULLUP, ISSI_SWPULLUP);
+ is31fl3736_write_register(addr, IS31FL3736_FUNCTION_REG_SW_PULLUP, IS31FL3736_SW_PULLUP);
// Set de-ghost pull-down resistors (CSx)
- is31fl3736_write_register(addr, ISSI_REG_CSPULLUP, ISSI_CSPULLUP);
+ is31fl3736_write_register(addr, IS31FL3736_FUNCTION_REG_CS_PULLDOWN, IS31FL3736_CS_PULLDOWN);
// Set global current to maximum.
- is31fl3736_write_register(addr, ISSI_REG_GLOBALCURRENT, ISSI_GLOBALCURRENT);
+ is31fl3736_write_register(addr, IS31FL3736_FUNCTION_REG_GLOBAL_CURRENT, IS31FL3736_GLOBAL_CURRENT);
// Disable software shutdown.
- is31fl3736_write_register(addr, ISSI_REG_CONFIGURATION, 0x01);
+ is31fl3736_write_register(addr, IS31FL3736_FUNCTION_REG_CONFIGURATION, ((IS31FL3736_PWM_FREQUENCY & 0b111) << 3) | 0x01);
// Wait 10ms to ensure the device has woken up.
wait_ms(10);
}
void is31fl3736_set_color(int index, uint8_t red, uint8_t green, uint8_t blue) {
- is31_led led;
- if (index >= 0 && index < RGB_MATRIX_LED_COUNT) {
- memcpy_P(&led, (&g_is31_leds[index]), sizeof(led));
+ is31fl3736_led_t led;
+ if (index >= 0 && index < IS31FL3736_LED_COUNT) {
+ memcpy_P(&led, (&g_is31fl3736_leds[index]), sizeof(led));
if (g_pwm_buffer[led.driver][led.r] == red && g_pwm_buffer[led.driver][led.g] == green && g_pwm_buffer[led.driver][led.b] == blue) {
return;
@@ -180,27 +190,20 @@ void is31fl3736_set_color(int index, uint8_t red, uint8_t green, uint8_t blue) {
}
void is31fl3736_set_color_all(uint8_t red, uint8_t green, uint8_t blue) {
- for (int i = 0; i < RGB_MATRIX_LED_COUNT; i++) {
+ for (int i = 0; i < IS31FL3736_LED_COUNT; i++) {
is31fl3736_set_color(i, red, green, blue);
}
}
void is31fl3736_set_led_control_register(uint8_t index, bool red, bool green, bool blue) {
- is31_led led;
- memcpy_P(&led, (&g_is31_leds[index]), sizeof(led));
-
- // IS31FL3733
- // The PWM register for a matrix position (0x00 to 0xBF) can be
- // divided by 8 to get the LED control register (0x00 to 0x17),
- // then mod 8 to get the bit position within that register.
+ is31fl3736_led_t led;
+ memcpy_P(&led, (&g_is31fl3736_leds[index]), sizeof(led));
- // IS31FL3736
// The PWM register for a matrix position (0x00 to 0xBF) is interleaved, so:
// A1=0x00 A2=0x02 A3=0x04 A4=0x06 A5=0x08 A6=0x0A A7=0x0C A8=0x0E
// B1=0x10 B2=0x12 B3=0x14
// But also, the LED control registers (0x00 to 0x17) are also interleaved, so:
// A1-A4=0x00 A5-A8=0x01
- // So, the same math applies.
uint8_t control_register_r = led.r / 8;
uint8_t control_register_g = led.g / 8;
@@ -226,63 +229,41 @@ void is31fl3736_set_led_control_register(uint8_t index, bool red, bool green, bo
g_led_control_registers[led.driver][control_register_b] &= ~(1 << bit_b);
}
- g_led_control_registers_update_required = true;
-}
-
-void is31fl3736_mono_set_brightness(int index, uint8_t value) {
- if (index >= 0 && index < 96) {
- // Index in range 0..95 -> A1..A8, B1..B8, etc.
- // Map index 0..95 to registers 0x00..0xBE (interleaved)
- uint8_t pwm_register = index * 2;
- g_pwm_buffer[0][pwm_register] = value;
- g_pwm_buffer_update_required[0] = true;
- }
-}
-
-void is31fl3736_mono_set_brightness_all(uint8_t value) {
- for (int i = 0; i < 96; i++) {
- is31fl3736_mono_set_brightness(i, value);
- }
-}
-
-void is31fl3736_mono_set_led_control_register(uint8_t index, bool enabled) {
- // Index in range 0..95 -> A1..A8, B1..B8, etc.
-
- // Map index 0..95 to registers 0x00..0xBE (interleaved)
- uint8_t pwm_register = index * 2;
- // Map register 0x00..0xBE (interleaved) into control register and bit
- uint8_t control_register = pwm_register / 8;
- uint8_t bit = pwm_register % 8;
-
- if (enabled) {
- g_led_control_registers[0][control_register] |= (1 << bit);
- } else {
- g_led_control_registers[0][control_register] &= ~(1 << bit);
- }
-
- g_led_control_registers_update_required = true;
+ g_led_control_registers_update_required[led.driver] = true;
}
void is31fl3736_update_pwm_buffers(uint8_t addr, uint8_t index) {
if (g_pwm_buffer_update_required[index]) {
// Firstly we need to unlock the command register and select PG1
- is31fl3736_write_register(addr, ISSI_COMMANDREGISTER_WRITELOCK, 0xC5);
- is31fl3736_write_register(addr, ISSI_COMMANDREGISTER, ISSI_PAGE_PWM);
+ is31fl3736_write_register(addr, IS31FL3736_REG_COMMAND_WRITE_LOCK, IS31FL3736_COMMAND_WRITE_LOCK_MAGIC);
+ is31fl3736_write_register(addr, IS31FL3736_REG_COMMAND, IS31FL3736_COMMAND_PWM);
is31fl3736_write_pwm_buffer(addr, g_pwm_buffer[index]);
+ g_pwm_buffer_update_required[index] = false;
}
- g_pwm_buffer_update_required[index] = false;
}
-void is31fl3736_update_led_control_registers(uint8_t addr1, uint8_t addr2) {
- if (g_led_control_registers_update_required) {
+void is31fl3736_update_led_control_registers(uint8_t addr, uint8_t index) {
+ if (g_led_control_registers_update_required[index]) {
// Firstly we need to unlock the command register and select PG0
- is31fl3736_write_register(addr1, ISSI_COMMANDREGISTER_WRITELOCK, 0xC5);
- is31fl3736_write_register(addr1, ISSI_COMMANDREGISTER, ISSI_PAGE_LEDCONTROL);
- for (int i = 0; i < 24; i++) {
- is31fl3736_write_register(addr1, i, g_led_control_registers[0][i]);
- // is31fl3736_write_register(addr2, i, g_led_control_registers[1][i]);
+ is31fl3736_write_register(addr, IS31FL3736_REG_COMMAND_WRITE_LOCK, IS31FL3736_COMMAND_WRITE_LOCK_MAGIC);
+ is31fl3736_write_register(addr, IS31FL3736_REG_COMMAND, IS31FL3736_COMMAND_LED_CONTROL);
+ for (int i = 0; i < IS31FL3736_LED_CONTROL_REGISTER_COUNT; i++) {
+ is31fl3736_write_register(addr, i, g_led_control_registers[index][i]);
}
- g_led_control_registers_update_required = false;
+ g_led_control_registers_update_required[index] = false;
}
}
+
+void is31fl3736_flush(void) {
+ is31fl3736_update_pwm_buffers(IS31FL3736_I2C_ADDRESS_1, 0);
+#if defined(IS31FL3736_I2C_ADDRESS_2)
+ is31fl3736_update_pwm_buffers(IS31FL3736_I2C_ADDRESS_2, 1);
+# if defined(IS31FL3736_I2C_ADDRESS_3)
+ is31fl3736_update_pwm_buffers(IS31FL3736_I2C_ADDRESS_3, 2);
+# if defined(IS31FL3736_I2C_ADDRESS_4)
+ is31fl3736_update_pwm_buffers(IS31FL3736_I2C_ADDRESS_4, 3);
+# endif
+# endif
+#endif
+}
diff --git a/drivers/led/issi/is31fl3736.h b/drivers/led/issi/is31fl3736.h
index 32bdef4a8082..a5710d7ed41e 100644
--- a/drivers/led/issi/is31fl3736.h
+++ b/drivers/led/issi/is31fl3736.h
@@ -19,29 +19,111 @@
#include
#include
-#include
#include "progmem.h"
+#include "util.h"
-// Simple interface option.
-// If these aren't defined, just define them to make it compile
+// ======== DEPRECATED DEFINES - DO NOT USE ========
+#ifdef DRIVER_ADDR_1
+# define IS31FL3736_I2C_ADDRESS_1 DRIVER_ADDR_1
+#endif
+#ifdef DRIVER_ADDR_2
+# define IS31FL3736_I2C_ADDRESS_2 DRIVER_ADDR_2
+#endif
+#ifdef DRIVER_ADDR_3
+# define IS31FL3736_I2C_ADDRESS_3 DRIVER_ADDR_3
+#endif
+#ifdef DRIVER_ADDR_4
+# define IS31FL3736_I2C_ADDRESS_4 DRIVER_ADDR_4
+#endif
+#ifdef ISSI_TIMEOUT
+# define IS31FL3736_I2C_TIMEOUT ISSI_TIMEOUT
+#endif
+#ifdef ISSI_PERSISTENCE
+# define IS31FL3736_I2C_PERSISTENCE ISSI_PERSISTENCE
+#endif
+#ifdef ISSI_SWPULLUP
+# define IS31FL3736_SW_PULLUP ISSI_SWPULLUP
+#endif
+#ifdef ISSI_CSPULLUP
+# define IS31FL3736_CS_PULLDOWN ISSI_CSPULLUP
+#endif
+#ifdef ISSI_GLOBALCURRENT
+# define IS31FL3736_GLOBAL_CURRENT ISSI_GLOBALCURRENT
+#endif
+
+#define is31_led is31fl3736_led_t
+#define g_is31_leds g_is31fl3736_leds
+
+#define PUR_0R IS31FL3736_PUR_0_OHM
+#define PUR_05KR IS31FL3736_PUR_0K5_OHM
+#define PUR_1KR IS31FL3736_PUR_1K_OHM
+#define PUR_2KR IS31FL3736_PUR_2K_OHM
+#define PUR_4KR IS31FL3736_PUR_4K_OHM
+#define PUR_8KR IS31FL3736_PUR_8K_OHM
+#define PUR_16KR IS31FL3736_PUR_16K_OHM
+#define PUR_32KR IS31FL3736_PUR_32K_OHM
+// ========
-#ifndef DRIVER_COUNT
-# define DRIVER_COUNT 2
+#define IS31FL3736_REG_INTERRUPT_MASK 0xF0
+#define IS31FL3736_REG_INTERRUPT_STATUS 0xF1
+
+#define IS31FL3736_REG_COMMAND 0xFD
+
+#define IS31FL3736_COMMAND_LED_CONTROL 0x00
+#define IS31FL3736_COMMAND_PWM 0x01
+#define IS31FL3736_COMMAND_AUTO_BREATH 0x02
+#define IS31FL3736_COMMAND_FUNCTION 0x03
+
+#define IS31FL3736_FUNCTION_REG_CONFIGURATION 0x00
+#define IS31FL3736_FUNCTION_REG_GLOBAL_CURRENT 0x01
+#define IS31FL3736_FUNCTION_REG_SW_PULLUP 0x0F
+#define IS31FL3736_FUNCTION_REG_CS_PULLDOWN 0x10
+#define IS31FL3736_FUNCTION_REG_RESET 0x11
+
+#define IS31FL3736_REG_COMMAND_WRITE_LOCK 0xFE
+#define IS31FL3736_COMMAND_WRITE_LOCK_MAGIC 0xC5
+
+#define IS31FL3736_I2C_ADDRESS_GND_GND 0x50
+#define IS31FL3736_I2C_ADDRESS_GND_SCL 0x51
+#define IS31FL3736_I2C_ADDRESS_GND_SDA 0x52
+#define IS31FL3736_I2C_ADDRESS_GND_VCC 0x53
+#define IS31FL3736_I2C_ADDRESS_SCL_GND 0x54
+#define IS31FL3736_I2C_ADDRESS_SCL_SCL 0x55
+#define IS31FL3736_I2C_ADDRESS_SCL_SDA 0x56
+#define IS31FL3736_I2C_ADDRESS_SCL_VCC 0x57
+#define IS31FL3736_I2C_ADDRESS_SDA_GND 0x58
+#define IS31FL3736_I2C_ADDRESS_SDA_SCL 0x59
+#define IS31FL3736_I2C_ADDRESS_SDA_SDA 0x5A
+#define IS31FL3736_I2C_ADDRESS_SDA_VCC 0x5B
+#define IS31FL3736_I2C_ADDRESS_VCC_GND 0x5C
+#define IS31FL3736_I2C_ADDRESS_VCC_SCL 0x5D
+#define IS31FL3736_I2C_ADDRESS_VCC_SDA 0x5E
+#define IS31FL3736_I2C_ADDRESS_VCC_VCC 0x5F
+
+#if defined(RGB_MATRIX_IS31FL3736)
+# define IS31FL3736_LED_COUNT RGB_MATRIX_LED_COUNT
#endif
-#ifndef RGB_MATRIX_LED_COUNT
-# define RGB_MATRIX_LED_COUNT 96
+#if defined(IS31FL3736_I2C_ADDRESS_4)
+# define IS31FL3736_DRIVER_COUNT 4
+#elif defined(IS31FL3736_I2C_ADDRESS_3)
+# define IS31FL3736_DRIVER_COUNT 3
+#elif defined(IS31FL3736_I2C_ADDRESS_2)
+# define IS31FL3736_DRIVER_COUNT 2
+#elif defined(IS31FL3736_I2C_ADDRESS_1)
+# define IS31FL3736_DRIVER_COUNT 1
#endif
-typedef struct is31_led {
+typedef struct is31fl3736_led_t {
uint8_t driver : 2;
uint8_t r;
uint8_t g;
uint8_t b;
-} __attribute__((packed)) is31_led;
+} PACKED is31fl3736_led_t;
-extern const is31_led PROGMEM g_is31_leds[RGB_MATRIX_LED_COUNT];
+extern const is31fl3736_led_t PROGMEM g_is31fl3736_leds[IS31FL3736_LED_COUNT];
+void is31fl3736_init_drivers(void);
void is31fl3736_init(uint8_t addr);
void is31fl3736_write_register(uint8_t addr, uint8_t reg, uint8_t data);
void is31fl3736_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer);
@@ -51,10 +133,6 @@ void is31fl3736_set_color_all(uint8_t red, uint8_t green, uint8_t blue);
void is31fl3736_set_led_control_register(uint8_t index, bool red, bool green, bool blue);
-void is31fl3736_mono_set_brightness(int index, uint8_t value);
-void is31fl3736_mono_set_brightness_all(uint8_t value);
-void is31fl3736_mono_set_led_control_register(uint8_t index, bool enabled);
-
// This should not be called from an interrupt
// (eg. from a timer interrupt).
// Call this while idle (in between matrix scans).
@@ -62,14 +140,31 @@ void is31fl3736_mono_set_led_control_register(uint8_t index, bool enabled);
void is31fl3736_update_pwm_buffers(uint8_t addr, uint8_t index);
void is31fl3736_update_led_control_registers(uint8_t addr, uint8_t index);
-#define PUR_0R 0x00 // No PUR resistor
-#define PUR_05KR 0x01 // 0.5k Ohm resistor
-#define PUR_1KR 0x02 // 1.0k Ohm resistor
-#define PUR_2KR 0x03 // 2.0k Ohm resistor
-#define PUR_4KR 0x04 // 4.0k Ohm resistor
-#define PUR_8KR 0x05 // 8.0k Ohm resistor
-#define PUR_16KR 0x06 // 16k Ohm resistor
-#define PUR_32KR 0x07 // 32k Ohm resistor
+void is31fl3736_flush(void);
+
+#define IS31FL3736_PDR_0_OHM 0b000 // No pull-down resistor
+#define IS31FL3736_PDR_0K5_OHM 0b001 // 0.5 kOhm resistor
+#define IS31FL3736_PDR_1K_OHM 0b010 // 1 kOhm resistor
+#define IS31FL3736_PDR_2K_OHM 0b011 // 2 kOhm resistor
+#define IS31FL3736_PDR_4K_OHM 0b100 // 4 kOhm resistor
+#define IS31FL3736_PDR_8K_OHM 0b101 // 8 kOhm resistor
+#define IS31FL3736_PDR_16K_OHM 0b110 // 16 kOhm resistor
+#define IS31FL3736_PDR_32K_OHM 0b111 // 32 kOhm resistor
+
+#define IS31FL3736_PUR_0_OHM 0b000 // No pull-up resistor
+#define IS31FL3736_PUR_0K5_OHM 0b001 // 0.5 kOhm resistor
+#define IS31FL3736_PUR_1K_OHM 0b010 // 1 kOhm resistor
+#define IS31FL3736_PUR_2K_OHM 0b011 // 2 kOhm resistor
+#define IS31FL3736_PUR_4K_OHM 0b100 // 4 kOhm resistor
+#define IS31FL3736_PUR_8K_OHM 0b101 // 8 kOhm resistor
+#define IS31FL3736_PUR_16K_OHM 0b110 // 16 kOhm resistor
+#define IS31FL3736_PUR_32K_OHM 0b111 // 32 kOhm resistor
+
+#define IS31FL3736_PWM_FREQUENCY_8K4_HZ 0b000
+#define IS31FL3736_PWM_FREQUENCY_4K2_HZ 0b001
+#define IS31FL3736_PWM_FREQUENCY_26K7_HZ 0b010
+#define IS31FL3736_PWM_FREQUENCY_2K1_HZ 0b011
+#define IS31FL3736_PWM_FREQUENCY_1K05_HZ 0b100
#define A_1 0x00
#define A_2 0x02
diff --git a/drivers/led/issi/is31fl3737-simple.c b/drivers/led/issi/is31fl3737-simple.c
new file mode 100644
index 000000000000..7f641f4ca5d0
--- /dev/null
+++ b/drivers/led/issi/is31fl3737-simple.c
@@ -0,0 +1,249 @@
+/* Copyright 2017 Jason Williams
+ * Copyright 2018 Jack Humbert
+ * Copyright 2018 Yiancar
+ * Copyright 2021 Doni Crosby
+ *
+ * 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 .
+ */
+
+#include "is31fl3737-simple.h"
+#include
+#include "i2c_master.h"
+#include "wait.h"
+
+#define IS31FL3737_PWM_REGISTER_COUNT 192 // actually 144
+#define IS31FL3737_LED_CONTROL_REGISTER_COUNT 24
+
+#ifndef IS31FL3737_I2C_TIMEOUT
+# define IS31FL3737_I2C_TIMEOUT 100
+#endif
+
+#ifndef IS31FL3737_I2C_PERSISTENCE
+# define IS31FL3737_I2C_PERSISTENCE 0
+#endif
+
+#ifndef IS31FL3737_PWM_FREQUENCY
+# define IS31FL3737_PWM_FREQUENCY IS31FL3737_PWM_FREQUENCY_8K4_HZ // PFS - IS31FL3737B only
+#endif
+
+#ifndef IS31FL3737_SW_PULLUP
+# define IS31FL3737_SW_PULLUP IS31FL3737_PUR_0_OHM
+#endif
+
+#ifndef IS31FL3737_CS_PULLDOWN
+# define IS31FL3737_CS_PULLDOWN IS31FL3737_PDR_0_OHM
+#endif
+
+#ifndef IS31FL3737_GLOBAL_CURRENT
+# define IS31FL3737_GLOBAL_CURRENT 0xFF
+#endif
+
+// Transfer buffer for TWITransmitData()
+uint8_t g_twi_transfer_buffer[20];
+
+// These buffers match the IS31FL3737 PWM registers.
+// The control buffers match the PG0 LED On/Off registers.
+// Storing them like this is optimal for I2C transfers to the registers.
+// We could optimize this and take out the unused registers from these
+// buffers and the transfers in is31fl3737_write_pwm_buffer() but it's
+// probably not worth the extra complexity.
+
+uint8_t g_pwm_buffer[IS31FL3737_DRIVER_COUNT][IS31FL3737_PWM_REGISTER_COUNT];
+bool g_pwm_buffer_update_required[IS31FL3737_DRIVER_COUNT] = {false};
+
+uint8_t g_led_control_registers[IS31FL3737_DRIVER_COUNT][IS31FL3737_LED_CONTROL_REGISTER_COUNT] = {0};
+bool g_led_control_registers_update_required[IS31FL3737_DRIVER_COUNT] = {false};
+
+void is31fl3737_write_register(uint8_t addr, uint8_t reg, uint8_t data) {
+ g_twi_transfer_buffer[0] = reg;
+ g_twi_transfer_buffer[1] = data;
+
+#if IS31FL3737_I2C_PERSISTENCE > 0
+ for (uint8_t i = 0; i < IS31FL3737_I2C_PERSISTENCE; i++) {
+ if (i2c_transmit(addr << 1, g_twi_transfer_buffer, 2, IS31FL3737_I2C_TIMEOUT) == 0) break;
+ }
+#else
+ i2c_transmit(addr << 1, g_twi_transfer_buffer, 2, IS31FL3737_I2C_TIMEOUT);
+#endif
+}
+
+void is31fl3737_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer) {
+ // assumes PG1 is already selected
+
+ // transmit PWM registers in 12 transfers of 16 bytes
+ // g_twi_transfer_buffer[] is 20 bytes
+
+ // iterate over the pwm_buffer contents at 16 byte intervals
+ for (int i = 0; i < IS31FL3737_PWM_REGISTER_COUNT; i += 16) {
+ g_twi_transfer_buffer[0] = i;
+ // copy the data from i to i+15
+ // device will auto-increment register for data after the first byte
+ // thus this sets registers 0x00-0x0F, 0x10-0x1F, etc. in one transfer
+ memcpy(g_twi_transfer_buffer + 1, pwm_buffer + i, 16);
+
+#if IS31FL3737_I2C_PERSISTENCE > 0
+ for (uint8_t i = 0; i < IS31FL3737_I2C_PERSISTENCE; i++) {
+ if (i2c_transmit(addr << 1, g_twi_transfer_buffer, 17, IS31FL3737_I2C_TIMEOUT) == 0) break;
+ }
+#else
+ i2c_transmit(addr << 1, g_twi_transfer_buffer, 17, IS31FL3737_I2C_TIMEOUT);
+#endif
+ }
+}
+
+void is31fl3737_init_drivers(void) {
+ i2c_init();
+
+ is31fl3737_init(IS31FL3737_I2C_ADDRESS_1);
+#if defined(IS31FL3737_I2C_ADDRESS_2)
+ is31fl3737_init(IS31FL3737_I2C_ADDRESS_2);
+# if defined(IS31FL3737_I2C_ADDRESS_3)
+ is31fl3737_init(IS31FL3737_I2C_ADDRESS_3);
+# if defined(IS31FL3737_I2C_ADDRESS_4)
+ is31fl3737_init(IS31FL3737_I2C_ADDRESS_4);
+# endif
+# endif
+#endif
+
+ for (int i = 0; i < IS31FL3737_LED_COUNT; i++) {
+ is31fl3737_set_led_control_register(i, true);
+ }
+
+ is31fl3737_update_led_control_registers(IS31FL3737_I2C_ADDRESS_1, 0);
+#if defined(IS31FL3737_I2C_ADDRESS_2)
+ is31fl3737_update_led_control_registers(IS31FL3737_I2C_ADDRESS_2, 1);
+# if defined(IS31FL3737_I2C_ADDRESS_3)
+ is31fl3737_update_led_control_registers(IS31FL3737_I2C_ADDRESS_3, 2);
+# if defined(IS31FL3737_I2C_ADDRESS_4)
+ is31fl3737_update_led_control_registers(IS31FL3737_I2C_ADDRESS_4, 3);
+# endif
+# endif
+#endif
+}
+
+void is31fl3737_init(uint8_t addr) {
+ // In order to avoid the LEDs being driven with garbage data
+ // in the LED driver's PWM registers, shutdown is enabled last.
+ // Set up the mode and other settings, clear the PWM registers,
+ // then disable software shutdown.
+
+ // Unlock the command register.
+ is31fl3737_write_register(addr, IS31FL3737_REG_COMMAND_WRITE_LOCK, IS31FL3737_COMMAND_WRITE_LOCK_MAGIC);
+
+ // Select PG0
+ is31fl3737_write_register(addr, IS31FL3737_REG_COMMAND, IS31FL3737_COMMAND_LED_CONTROL);
+ // Turn off all LEDs.
+ for (int i = 0; i < IS31FL3737_LED_CONTROL_REGISTER_COUNT; i++) {
+ is31fl3737_write_register(addr, i, 0x00);
+ }
+
+ // Unlock the command register.
+ is31fl3737_write_register(addr, IS31FL3737_REG_COMMAND_WRITE_LOCK, IS31FL3737_COMMAND_WRITE_LOCK_MAGIC);
+
+ // Select PG1
+ is31fl3737_write_register(addr, IS31FL3737_REG_COMMAND, IS31FL3737_COMMAND_PWM);
+ // Set PWM on all LEDs to 0
+ // No need to setup Breath registers to PWM as that is the default.
+ for (int i = 0; i < IS31FL3737_PWM_REGISTER_COUNT; i++) {
+ is31fl3737_write_register(addr, i, 0x00);
+ }
+
+ // Unlock the command register.
+ is31fl3737_write_register(addr, IS31FL3737_REG_COMMAND_WRITE_LOCK, IS31FL3737_COMMAND_WRITE_LOCK_MAGIC);
+
+ // Select PG3
+ is31fl3737_write_register(addr, IS31FL3737_REG_COMMAND, IS31FL3737_COMMAND_FUNCTION);
+ // Set de-ghost pull-up resistors (SWx)
+ is31fl3737_write_register(addr, IS31FL3737_FUNCTION_REG_SW_PULLUP, IS31FL3737_SW_PULLUP);
+ // Set de-ghost pull-down resistors (CSx)
+ is31fl3737_write_register(addr, IS31FL3737_FUNCTION_REG_CS_PULLDOWN, IS31FL3737_CS_PULLDOWN);
+ // Set global current to maximum.
+ is31fl3737_write_register(addr, IS31FL3737_FUNCTION_REG_GLOBAL_CURRENT, IS31FL3737_GLOBAL_CURRENT);
+ // Disable software shutdown.
+ is31fl3737_write_register(addr, IS31FL3737_FUNCTION_REG_CONFIGURATION, ((IS31FL3737_PWM_FREQUENCY & 0b111) << 3) | 0x01);
+
+ // Wait 10ms to ensure the device has woken up.
+ wait_ms(10);
+}
+
+void is31fl3737_set_value(int index, uint8_t value) {
+ is31fl3737_led_t led;
+ if (index >= 0 && index < IS31FL3737_LED_COUNT) {
+ memcpy_P(&led, (&g_is31fl3737_leds[index]), sizeof(led));
+
+ if (g_pwm_buffer[led.driver][led.v] == value) {
+ return;
+ }
+ g_pwm_buffer[led.driver][led.v] = value;
+ g_pwm_buffer_update_required[led.driver] = true;
+ }
+}
+
+void is31fl3737_set_value_all(uint8_t value) {
+ for (int i = 0; i < IS31FL3737_LED_COUNT; i++) {
+ is31fl3737_set_value(i, value);
+ }
+}
+
+void is31fl3737_set_led_control_register(uint8_t index, bool value) {
+ is31fl3737_led_t led;
+ memcpy_P(&led, (&g_is31fl3737_leds[index]), sizeof(led));
+
+ uint8_t control_register = led.v / 8;
+ uint8_t bit_value = led.v % 8;
+
+ if (value) {
+ g_led_control_registers[led.driver][control_register] |= (1 << bit_value);
+ } else {
+ g_led_control_registers[led.driver][control_register] &= ~(1 << bit_value);
+ }
+
+ g_led_control_registers_update_required[led.driver] = true;
+}
+
+void is31fl3737_update_pwm_buffers(uint8_t addr, uint8_t index) {
+ if (g_pwm_buffer_update_required[index]) {
+ // Firstly we need to unlock the command register and select PG1
+ is31fl3737_write_register(addr, IS31FL3737_REG_COMMAND_WRITE_LOCK, IS31FL3737_COMMAND_WRITE_LOCK_MAGIC);
+ is31fl3737_write_register(addr, IS31FL3737_REG_COMMAND, IS31FL3737_COMMAND_PWM);
+
+ is31fl3737_write_pwm_buffer(addr, g_pwm_buffer[index]);
+ g_pwm_buffer_update_required[index] = false;
+ }
+}
+
+void is31fl3737_update_led_control_registers(uint8_t addr, uint8_t index) {
+ if (g_led_control_registers_update_required[index]) {
+ // Firstly we need to unlock the command register and select PG0
+ is31fl3737_write_register(addr, IS31FL3737_REG_COMMAND_WRITE_LOCK, IS31FL3737_COMMAND_WRITE_LOCK_MAGIC);
+ is31fl3737_write_register(addr, IS31FL3737_REG_COMMAND, IS31FL3737_COMMAND_LED_CONTROL);
+ for (int i = 0; i < IS31FL3737_LED_CONTROL_REGISTER_COUNT; i++) {
+ is31fl3737_write_register(addr, i, g_led_control_registers[index][i]);
+ }
+ g_led_control_registers_update_required[index] = false;
+ }
+}
+
+void is31fl3737_flush(void) {
+ is31fl3737_update_pwm_buffers(IS31FL3737_I2C_ADDRESS_1, 0);
+#if defined(IS31FL3737_I2C_ADDRESS_2)
+ is31fl3737_update_pwm_buffers(IS31FL3737_I2C_ADDRESS_2, 1);
+# if defined(IS31FL3737_I2C_ADDRESS_3)
+ is31fl3737_update_pwm_buffers(IS31FL3737_I2C_ADDRESS_3, 2);
+# if defined(IS31FL3737_I2C_ADDRESS_4)
+ is31fl3737_update_pwm_buffers(IS31FL3737_I2C_ADDRESS_4, 3);
+# endif
+# endif
+#endif
+}
diff --git a/drivers/led/issi/is31fl3737-simple.h b/drivers/led/issi/is31fl3737-simple.h
new file mode 100644
index 000000000000..2658702b1b58
--- /dev/null
+++ b/drivers/led/issi/is31fl3737-simple.h
@@ -0,0 +1,299 @@
+/* Copyright 2017 Jason Williams
+ * Copyright 2018 Jack Humbert
+ * Copyright 2018 Yiancar
+ * Copyright 2021 Doni Crosby
+ *
+ * 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 .
+ */
+
+#pragma once
+
+#include
+#include
+#include "progmem.h"
+#include "util.h"
+
+// ======== DEPRECATED DEFINES - DO NOT USE ========
+#ifdef ISSI_TIMEOUT
+# define IS31FL3737_I2C_TIMEOUT ISSI_TIMEOUT
+#endif
+#ifdef ISSI_PERSISTENCE
+# define IS31FL3737_I2C_PERSISTENCE ISSI_PERSISTENCE
+#endif
+#ifdef ISSI_PWM_FREQUENCY
+# define IS31FL3737_PWM_FREQUENCY ISSI_PWM_FREQUENCY
+#endif
+#ifdef ISSI_SWPULLUP
+# define IS31FL3737_SW_PULLUP ISSI_SWPULLUP
+#endif
+#ifdef ISSI_CSPULLUP
+# define IS31FL3737_CS_PULLDOWN ISSI_CSPULLUP
+#endif
+#ifdef ISSI_GLOBALCURRENT
+# define IS31FL3737_GLOBAL_CURRENT ISSI_GLOBALCURRENT
+#endif
+
+#define PUR_0R IS31FL3737_PUR_0_OHM
+#define PUR_05KR IS31FL3737_PUR_0K5_OHM
+#define PUR_1KR IS31FL3737_PUR_1K_OHM
+#define PUR_2KR IS31FL3737_PUR_2K_OHM
+#define PUR_4KR IS31FL3737_PUR_4K_OHM
+#define PUR_8KR IS31FL3737_PUR_8K_OHM
+#define PUR_16KR IS31FL3737_PUR_16K_OHM
+#define PUR_32KR IS31FL3737_PUR_32K_OHM
+// ========
+
+#define IS31FL3737_REG_INTERRUPT_MASK 0xF0
+#define IS31FL3737_REG_INTERRUPT_STATUS 0xF1
+
+#define IS31FL3737_REG_COMMAND 0xFD
+
+#define IS31FL3737_COMMAND_LED_CONTROL 0x00
+#define IS31FL3737_COMMAND_PWM 0x01
+#define IS31FL3737_COMMAND_AUTO_BREATH 0x02
+#define IS31FL3737_COMMAND_FUNCTION 0x03
+
+#define IS31FL3737_FUNCTION_REG_CONFIGURATION 0x00
+#define IS31FL3737_FUNCTION_REG_GLOBAL_CURRENT 0x01
+#define IS31FL3737_FUNCTION_REG_SW_PULLUP 0x0F
+#define IS31FL3737_FUNCTION_REG_CS_PULLDOWN 0x10
+#define IS31FL3737_FUNCTION_REG_RESET 0x11
+
+#define IS31FL3737_REG_COMMAND_WRITE_LOCK 0xFE
+#define IS31FL3737_COMMAND_WRITE_LOCK_MAGIC 0xC5
+
+#define IS31FL3737_I2C_ADDRESS_GND 0x50
+#define IS31FL3737_I2C_ADDRESS_SCL 0x55
+#define IS31FL3737_I2C_ADDRESS_SDA 0x5A
+#define IS31FL3737_I2C_ADDRESS_VCC 0x5F
+
+#if defined(LED_MATRIX_IS31FL3737)
+# define IS31FL3737_LED_COUNT LED_MATRIX_LED_COUNT
+#endif
+
+#if defined(IS31FL3737_I2C_ADDRESS_4)
+# define IS31FL3737_DRIVER_COUNT 4
+#elif defined(IS31FL3737_I2C_ADDRESS_3)
+# define IS31FL3737_DRIVER_COUNT 3
+#elif defined(IS31FL3737_I2C_ADDRESS_2)
+# define IS31FL3737_DRIVER_COUNT 2
+#elif defined(IS31FL3737_I2C_ADDRESS_1)
+# define IS31FL3737_DRIVER_COUNT 1
+#endif
+
+typedef struct is31fl3737_led_t {
+ uint8_t driver : 2;
+ uint8_t v;
+} PACKED is31fl3737_led_t;
+
+extern const is31fl3737_led_t PROGMEM g_is31fl3737_leds[IS31FL3737_LED_COUNT];
+
+void is31fl3737_init_drivers(void);
+void is31fl3737_init(uint8_t addr);
+void is31fl3737_write_register(uint8_t addr, uint8_t reg, uint8_t data);
+void is31fl3737_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer);
+
+void is31fl3737_set_value(int index, uint8_t value);
+void is31fl3737_set_value_all(uint8_t value);
+
+void is31fl3737_set_led_control_register(uint8_t index, bool value);
+
+// This should not be called from an interrupt
+// (eg. from a timer interrupt).
+// Call this while idle (in between matrix scans).
+// If the buffer is dirty, it will update the driver with the buffer.
+void is31fl3737_update_pwm_buffers(uint8_t addr, uint8_t index);
+void is31fl3737_update_led_control_registers(uint8_t addr, uint8_t index);
+
+void is31fl3737_flush(void);
+
+#define IS31FL3737_PDR_0_OHM 0b000 // No pull-down resistor
+#define IS31FL3737_PDR_0K5_OHM 0b001 // 0.5 kOhm resistor
+#define IS31FL3737_PDR_1K_OHM 0b010 // 1 kOhm resistor
+#define IS31FL3737_PDR_2K_OHM 0b011 // 2 kOhm resistor
+#define IS31FL3737_PDR_4K_OHM 0b100 // 4 kOhm resistor
+#define IS31FL3737_PDR_8K_OHM 0b101 // 8 kOhm resistor
+#define IS31FL3737_PDR_16K_OHM 0b110 // 16 kOhm resistor
+#define IS31FL3737_PDR_32K_OHM 0b111 // 32 kOhm resistor
+
+#define IS31FL3737_PUR_0_OHM 0b000 // No pull-up resistor
+#define IS31FL3737_PUR_0K5_OHM 0b001 // 0.5 kOhm resistor
+#define IS31FL3737_PUR_1K_OHM 0b010 // 1 kOhm resistor
+#define IS31FL3737_PUR_2K_OHM 0b011 // 2 kOhm resistor
+#define IS31FL3737_PUR_4K_OHM 0b100 // 4 kOhm resistor
+#define IS31FL3737_PUR_8K_OHM 0b101 // 8 kOhm resistor
+#define IS31FL3737_PUR_16K_OHM 0b110 // 16 kOhm resistor
+#define IS31FL3737_PUR_32K_OHM 0b111 // 32 kOhm resistor
+
+#define IS31FL3737_PWM_FREQUENCY_8K4_HZ 0b000
+#define IS31FL3737_PWM_FREQUENCY_4K2_HZ 0b001
+#define IS31FL3737_PWM_FREQUENCY_26K7_HZ 0b010
+#define IS31FL3737_PWM_FREQUENCY_2K1_HZ 0b011
+#define IS31FL3737_PWM_FREQUENCY_1K05_HZ 0b100
+
+#define A_1 0x00
+#define A_2 0x01
+#define A_3 0x02
+#define A_4 0x03
+#define A_5 0x04
+#define A_6 0x05
+#define A_7 0x08
+#define A_8 0x09
+#define A_9 0x0A
+#define A_10 0x0B
+#define A_11 0x0C
+#define A_12 0x0D
+
+#define B_1 0x10
+#define B_2 0x11
+#define B_3 0x12
+#define B_4 0x13
+#define B_5 0x14
+#define B_6 0x15
+#define B_7 0x18
+#define B_8 0x19
+#define B_9 0x1A
+#define B_10 0x1B
+#define B_11 0x1C
+#define B_12 0x1D
+
+#define C_1 0x20
+#define C_2 0x21
+#define C_3 0x22
+#define C_4 0x23
+#define C_5 0x24
+#define C_6 0x25
+#define C_7 0x28
+#define C_8 0x29
+#define C_9 0x2A
+#define C_10 0x2B
+#define C_11 0x2C
+#define C_12 0x2D
+
+#define D_1 0x30
+#define D_2 0x31
+#define D_3 0x32
+#define D_4 0x33
+#define D_5 0x34
+#define D_6 0x35
+#define D_7 0x38
+#define D_8 0x39
+#define D_9 0x3A
+#define D_10 0x3B
+#define D_11 0x3C
+#define D_12 0x3D
+
+#define E_1 0x40
+#define E_2 0x41
+#define E_3 0x42
+#define E_4 0x43
+#define E_5 0x44
+#define E_6 0x45
+#define E_7 0x48
+#define E_8 0x49
+#define E_9 0x4A
+#define E_10 0x4B
+#define E_11 0x4C
+#define E_12 0x4D
+
+#define F_1 0x50
+#define F_2 0x51
+#define F_3 0x52
+#define F_4 0x53
+#define F_5 0x54
+#define F_6 0x55
+#define F_7 0x58
+#define F_8 0x59
+#define F_9 0x5A
+#define F_10 0x5B
+#define F_11 0x5C
+#define F_12 0x5D
+
+#define G_1 0x60
+#define G_2 0x61
+#define G_3 0x62
+#define G_4 0x63
+#define G_5 0x64
+#define G_6 0x65
+#define G_7 0x68
+#define G_8 0x69
+#define G_9 0x6A
+#define G_10 0x6B
+#define G_11 0x6C
+#define G_12 0x6D
+
+#define H_1 0x70
+#define H_2 0x71
+#define H_3 0x72
+#define H_4 0x73
+#define H_5 0x74
+#define H_6 0x75
+#define H_7 0x78
+#define H_8 0x79
+#define H_9 0x7A
+#define H_10 0x7B
+#define H_11 0x7C
+#define H_12 0x7D
+
+#define I_1 0x80
+#define I_2 0x81
+#define I_3 0x82
+#define I_4 0x83
+#define I_5 0x84
+#define I_6 0x85
+#define I_7 0x88
+#define I_8 0x89
+#define I_9 0x8A
+#define I_10 0x8B
+#define I_11 0x8C
+#define I_12 0x8D
+
+#define J_1 0x90
+#define J_2 0x91
+#define J_3 0x92
+#define J_4 0x93
+#define J_5 0x94
+#define J_6 0x95
+#define J_7 0x98
+#define J_8 0x99
+#define J_9 0x9A
+#define J_10 0x9B
+#define J_11 0x9C
+#define J_12 0x9D
+
+#define K_1 0xA0
+#define K_2 0xA1
+#define K_3 0xA2
+#define K_4 0xA3
+#define K_5 0xA4
+#define K_6 0xA5
+#define K_7 0xA8
+#define K_8 0xA9
+#define K_9 0xAA
+#define K_10 0xAB
+#define K_11 0xAC
+#define K_12 0xAD
+
+#define L_1 0xB0
+#define L_2 0xB1
+#define L_3 0xB2
+#define L_4 0xB3
+#define L_5 0xB4
+#define L_6 0xB5
+#define L_7 0xB8
+#define L_8 0xB9
+#define L_9 0xBA
+#define L_10 0xBB
+#define L_11 0xBC
+#define L_12 0xBD
diff --git a/drivers/led/issi/is31fl3737.c b/drivers/led/issi/is31fl3737.c
index 947c0a1d1ace..a458431952cd 100644
--- a/drivers/led/issi/is31fl3737.c
+++ b/drivers/led/issi/is31fl3737.c
@@ -18,59 +18,35 @@
*/
#include "is31fl3737.h"
+#include
#include "i2c_master.h"
#include "wait.h"
-// This is a 7-bit address, that gets left-shifted and bit 0
-// set to 0 for write, 1 for read (as per I2C protocol)
-// The address will vary depending on your wiring:
-// 00 <-> GND
-// 01 <-> SCL
-// 10 <-> SDA
-// 11 <-> VCC
-// ADDR1 represents A1:A0 of the 7-bit address.
-// ADDR2 represents A3:A2 of the 7-bit address.
-// The result is: 0b101(ADDR2)(ADDR1)
-#define ISSI_ADDR_DEFAULT 0x50
-
-#define ISSI_COMMANDREGISTER 0xFD
-#define ISSI_COMMANDREGISTER_WRITELOCK 0xFE
-#define ISSI_INTERRUPTMASKREGISTER 0xF0
-#define ISSI_INTERRUPTSTATUSREGISTER 0xF1
-
-#define ISSI_PAGE_LEDCONTROL 0x00 // PG0
-#define ISSI_PAGE_PWM 0x01 // PG1
-#define ISSI_PAGE_AUTOBREATH 0x02 // PG2
-#define ISSI_PAGE_FUNCTION 0x03 // PG3
-
-#define ISSI_REG_CONFIGURATION 0x00 // PG3
-#define ISSI_REG_GLOBALCURRENT 0x01 // PG3
-#define ISSI_REG_RESET 0x11 // PG3
-#define ISSI_REG_SWPULLUP 0x0F // PG3
-#define ISSI_REG_CSPULLUP 0x10 // PG3
-
-#ifndef ISSI_TIMEOUT
-# define ISSI_TIMEOUT 100
+#define IS31FL3737_PWM_REGISTER_COUNT 192 // actually 144
+#define IS31FL3737_LED_CONTROL_REGISTER_COUNT 24
+
+#ifndef IS31FL3737_I2C_TIMEOUT
+# define IS31FL3737_I2C_TIMEOUT 100
#endif
-#ifndef ISSI_PERSISTENCE
-# define ISSI_PERSISTENCE 0
+#ifndef IS31FL3737_I2C_PERSISTENCE
+# define IS31FL3737_I2C_PERSISTENCE 0
#endif
-#ifndef ISSI_PWM_FREQUENCY
-# define ISSI_PWM_FREQUENCY 0b000 // PFS - IS31FL3737B only
+#ifndef IS31FL3737_PWM_FREQUENCY
+# define IS31FL3737_PWM_FREQUENCY IS31FL3737_PWM_FREQUENCY_8K4_HZ // PFS - IS31FL3737B only
#endif
-#ifndef ISSI_SWPULLUP
-# define ISSI_SWPULLUP PUR_0R
+#ifndef IS31FL3737_SW_PULLUP
+# define IS31FL3737_SW_PULLUP IS31FL3737_PUR_0_OHM
#endif
-#ifndef ISSI_CSPULLUP
-# define ISSI_CSPULLUP PUR_0R
+#ifndef IS31FL3737_CS_PULLDONW
+# define IS31FL3737_CS_PULLDOWN IS31FL3737_PDR_0_OHM
#endif
-#ifndef ISSI_GLOBALCURRENT
-# define ISSI_GLOBALCURRENT 0xFF
+#ifndef IS31FL3737_GLOBAL_CURRENT
+# define IS31FL3737_GLOBAL_CURRENT 0xFF
#endif
// Transfer buffer for TWITransmitData()
@@ -83,22 +59,22 @@ uint8_t g_twi_transfer_buffer[20];
// buffers and the transfers in is31fl3737_write_pwm_buffer() but it's
// probably not worth the extra complexity.
-uint8_t g_pwm_buffer[DRIVER_COUNT][192];
-bool g_pwm_buffer_update_required[DRIVER_COUNT] = {false};
+uint8_t g_pwm_buffer[IS31FL3737_DRIVER_COUNT][IS31FL3737_PWM_REGISTER_COUNT];
+bool g_pwm_buffer_update_required[IS31FL3737_DRIVER_COUNT] = {false};
-uint8_t g_led_control_registers[DRIVER_COUNT][24] = {0};
-bool g_led_control_registers_update_required[DRIVER_COUNT] = {false};
+uint8_t g_led_control_registers[IS31FL3737_DRIVER_COUNT][IS31FL3737_LED_CONTROL_REGISTER_COUNT] = {0};
+bool g_led_control_registers_update_required[IS31FL3737_DRIVER_COUNT] = {false};
void is31fl3737_write_register(uint8_t addr, uint8_t reg, uint8_t data) {
g_twi_transfer_buffer[0] = reg;
g_twi_transfer_buffer[1] = data;
-#if ISSI_PERSISTENCE > 0
- for (uint8_t i = 0; i < ISSI_PERSISTENCE; i++) {
- if (i2c_transmit(addr << 1, g_twi_transfer_buffer, 2, ISSI_TIMEOUT) == 0) break;
+#if IS31FL3737_I2C_PERSISTENCE > 0
+ for (uint8_t i = 0; i < IS31FL3737_I2C_PERSISTENCE; i++) {
+ if (i2c_transmit(addr << 1, g_twi_transfer_buffer, 2, IS31FL3737_I2C_TIMEOUT) == 0) break;
}
#else
- i2c_transmit(addr << 1, g_twi_transfer_buffer, 2, ISSI_TIMEOUT);
+ i2c_transmit(addr << 1, g_twi_transfer_buffer, 2, IS31FL3737_I2C_TIMEOUT);
#endif
}
@@ -109,23 +85,53 @@ void is31fl3737_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer) {
// g_twi_transfer_buffer[] is 20 bytes
// iterate over the pwm_buffer contents at 16 byte intervals
- for (int i = 0; i < 192; i += 16) {
+ for (int i = 0; i < IS31FL3737_PWM_REGISTER_COUNT; i += 16) {
g_twi_transfer_buffer[0] = i;
// copy the data from i to i+15
// device will auto-increment register for data after the first byte
// thus this sets registers 0x00-0x0F, 0x10-0x1F, etc. in one transfer
memcpy(g_twi_transfer_buffer + 1, pwm_buffer + i, 16);
-#if ISSI_PERSISTENCE > 0
- for (uint8_t i = 0; i < ISSI_PERSISTENCE; i++) {
- if (i2c_transmit(addr << 1, g_twi_transfer_buffer, 17, ISSI_TIMEOUT) == 0) break;
+#if IS31FL3737_I2C_PERSISTENCE > 0
+ for (uint8_t i = 0; i < IS31FL3737_I2C_PERSISTENCE; i++) {
+ if (i2c_transmit(addr << 1, g_twi_transfer_buffer, 17, IS31FL3737_I2C_TIMEOUT) == 0) break;
}
#else
- i2c_transmit(addr << 1, g_twi_transfer_buffer, 17, ISSI_TIMEOUT);
+ i2c_transmit(addr << 1, g_twi_transfer_buffer, 17, IS31FL3737_I2C_TIMEOUT);
#endif
}
}
+void is31fl3737_init_drivers(void) {
+ i2c_init();
+
+ is31fl3737_init(IS31FL3737_I2C_ADDRESS_1);
+#if defined(IS31FL3737_I2C_ADDRESS_2)
+ is31fl3737_init(IS31FL3737_I2C_ADDRESS_2);
+# if defined(IS31FL3737_I2C_ADDRESS_3)
+ is31fl3737_init(IS31FL3737_I2C_ADDRESS_3);
+# if defined(IS31FL3737_I2C_ADDRESS_4)
+ is31fl3737_init(IS31FL3737_I2C_ADDRESS_4);
+# endif
+# endif
+#endif
+
+ for (int i = 0; i < IS31FL3737_LED_COUNT; i++) {
+ is31fl3737_set_led_control_register(i, true, true, true);
+ }
+
+ is31fl3737_update_led_control_registers(IS31FL3737_I2C_ADDRESS_1, 0);
+#if defined(IS31FL3737_I2C_ADDRESS_2)
+ is31fl3737_update_led_control_registers(IS31FL3737_I2C_ADDRESS_2, 1);
+# if defined(IS31FL3737_I2C_ADDRESS_3)
+ is31fl3737_update_led_control_registers(IS31FL3737_I2C_ADDRESS_3, 2);
+# if defined(IS31FL3737_I2C_ADDRESS_4)
+ is31fl3737_update_led_control_registers(IS31FL3737_I2C_ADDRESS_4, 3);
+# endif
+# endif
+#endif
+}
+
void is31fl3737_init(uint8_t addr) {
// In order to avoid the LEDs being driven with garbage data
// in the LED driver's PWM registers, shutdown is enabled last.
@@ -133,48 +139,48 @@ void is31fl3737_init(uint8_t addr) {
// then disable software shutdown.
// Unlock the command register.
- is31fl3737_write_register(addr, ISSI_COMMANDREGISTER_WRITELOCK, 0xC5);
+ is31fl3737_write_register(addr, IS31FL3737_REG_COMMAND_WRITE_LOCK, IS31FL3737_COMMAND_WRITE_LOCK_MAGIC);
// Select PG0
- is31fl3737_write_register(addr, ISSI_COMMANDREGISTER, ISSI_PAGE_LEDCONTROL);
+ is31fl3737_write_register(addr, IS31FL3737_REG_COMMAND, IS31FL3737_COMMAND_LED_CONTROL);
// Turn off all LEDs.
- for (int i = 0x00; i <= 0x17; i++) {
+ for (int i = 0; i < IS31FL3737_LED_CONTROL_REGISTER_COUNT; i++) {
is31fl3737_write_register(addr, i, 0x00);
}
// Unlock the command register.
- is31fl3737_write_register(addr, ISSI_COMMANDREGISTER_WRITELOCK, 0xC5);
+ is31fl3737_write_register(addr, IS31FL3737_REG_COMMAND_WRITE_LOCK, IS31FL3737_COMMAND_WRITE_LOCK_MAGIC);
// Select PG1
- is31fl3737_write_register(addr, ISSI_COMMANDREGISTER, ISSI_PAGE_PWM);
+ is31fl3737_write_register(addr, IS31FL3737_REG_COMMAND, IS31FL3737_COMMAND_PWM);
// Set PWM on all LEDs to 0
// No need to setup Breath registers to PWM as that is the default.
- for (int i = 0x00; i <= 0xBF; i++) {
+ for (int i = 0; i < IS31FL3737_PWM_REGISTER_COUNT; i++) {
is31fl3737_write_register(addr, i, 0x00);
}
// Unlock the command register.
- is31fl3737_write_register(addr, ISSI_COMMANDREGISTER_WRITELOCK, 0xC5);
+ is31fl3737_write_register(addr, IS31FL3737_REG_COMMAND_WRITE_LOCK, IS31FL3737_COMMAND_WRITE_LOCK_MAGIC);
// Select PG3
- is31fl3737_write_register(addr, ISSI_COMMANDREGISTER, ISSI_PAGE_FUNCTION);
+ is31fl3737_write_register(addr, IS31FL3737_REG_COMMAND, IS31FL3737_COMMAND_FUNCTION);
// Set de-ghost pull-up resistors (SWx)
- is31fl3737_write_register(addr, ISSI_REG_SWPULLUP, ISSI_SWPULLUP);
+ is31fl3737_write_register(addr, IS31FL3737_FUNCTION_REG_SW_PULLUP, IS31FL3737_SW_PULLUP);
// Set de-ghost pull-down resistors (CSx)
- is31fl3737_write_register(addr, ISSI_REG_CSPULLUP, ISSI_CSPULLUP);
+ is31fl3737_write_register(addr, IS31FL3737_FUNCTION_REG_CS_PULLDOWN, IS31FL3737_CS_PULLDOWN);
// Set global current to maximum.
- is31fl3737_write_register(addr, ISSI_REG_GLOBALCURRENT, ISSI_GLOBALCURRENT);
+ is31fl3737_write_register(addr, IS31FL3737_FUNCTION_REG_GLOBAL_CURRENT, IS31FL3737_GLOBAL_CURRENT);
// Disable software shutdown.
- is31fl3737_write_register(addr, ISSI_REG_CONFIGURATION, ((ISSI_PWM_FREQUENCY & 0b111) << 3) | 0x01);
+ is31fl3737_write_register(addr, IS31FL3737_FUNCTION_REG_CONFIGURATION, ((IS31FL3737_PWM_FREQUENCY & 0b111) << 3) | 0x01);
// Wait 10ms to ensure the device has woken up.
wait_ms(10);
}
void is31fl3737_set_color(int index, uint8_t red, uint8_t green, uint8_t blue) {
- is31_led led;
- if (index >= 0 && index < RGB_MATRIX_LED_COUNT) {
- memcpy_P(&led, (&g_is31_leds[index]), sizeof(led));
+ is31fl3737_led_t led;
+ if (index >= 0 && index < IS31FL3737_LED_COUNT) {
+ memcpy_P(&led, (&g_is31fl3737_leds[index]), sizeof(led));
if (g_pwm_buffer[led.driver][led.r] == red && g_pwm_buffer[led.driver][led.g] == green && g_pwm_buffer[led.driver][led.b] == blue) {
return;
@@ -187,14 +193,14 @@ void is31fl3737_set_color(int index, uint8_t red, uint8_t green, uint8_t blue) {
}
void is31fl3737_set_color_all(uint8_t red, uint8_t green, uint8_t blue) {
- for (int i = 0; i < RGB_MATRIX_LED_COUNT; i++) {
+ for (int i = 0; i < IS31FL3737_LED_COUNT; i++) {
is31fl3737_set_color(i, red, green, blue);
}
}
void is31fl3737_set_led_control_register(uint8_t index, bool red, bool green, bool blue) {
- is31_led led;
- memcpy_P(&led, (&g_is31_leds[index]), sizeof(led));
+ is31fl3737_led_t led;
+ memcpy_P(&led, (&g_is31fl3737_leds[index]), sizeof(led));
uint8_t control_register_r = led.r / 8;
uint8_t control_register_g = led.g / 8;
@@ -225,22 +231,35 @@ void is31fl3737_set_led_control_register(uint8_t index, bool red, bool green, bo
void is31fl3737_update_pwm_buffers(uint8_t addr, uint8_t index) {
if (g_pwm_buffer_update_required[index]) {
// Firstly we need to unlock the command register and select PG1
- is31fl3737_write_register(addr, ISSI_COMMANDREGISTER_WRITELOCK, 0xC5);
- is31fl3737_write_register(addr, ISSI_COMMANDREGISTER, ISSI_PAGE_PWM);
+ is31fl3737_write_register(addr, IS31FL3737_REG_COMMAND_WRITE_LOCK, IS31FL3737_COMMAND_WRITE_LOCK_MAGIC);
+ is31fl3737_write_register(addr, IS31FL3737_REG_COMMAND, IS31FL3737_COMMAND_PWM);
is31fl3737_write_pwm_buffer(addr, g_pwm_buffer[index]);
+ g_pwm_buffer_update_required[index] = false;
}
- g_pwm_buffer_update_required[index] = false;
}
void is31fl3737_update_led_control_registers(uint8_t addr, uint8_t index) {
if (g_led_control_registers_update_required[index]) {
// Firstly we need to unlock the command register and select PG0
- is31fl3737_write_register(addr, ISSI_COMMANDREGISTER_WRITELOCK, 0xC5);
- is31fl3737_write_register(addr, ISSI_COMMANDREGISTER, ISSI_PAGE_LEDCONTROL);
- for (int i = 0; i < 24; i++) {
+ is31fl3737_write_register(addr, IS31FL3737_REG_COMMAND_WRITE_LOCK, IS31FL3737_COMMAND_WRITE_LOCK_MAGIC);
+ is31fl3737_write_register(addr, IS31FL3737_REG_COMMAND, IS31FL3737_COMMAND_LED_CONTROL);
+ for (int i = 0; i < IS31FL3737_LED_CONTROL_REGISTER_COUNT; i++) {
is31fl3737_write_register(addr, i, g_led_control_registers[index][i]);
}
+ g_led_control_registers_update_required[index] = false;
}
- g_led_control_registers_update_required[index] = false;
+}
+
+void is31fl3737_flush(void) {
+ is31fl3737_update_pwm_buffers(IS31FL3737_I2C_ADDRESS_1, 0);
+#if defined(IS31FL3737_I2C_ADDRESS_2)
+ is31fl3737_update_pwm_buffers(IS31FL3737_I2C_ADDRESS_2, 1);
+# if defined(IS31FL3737_I2C_ADDRESS_3)
+ is31fl3737_update_pwm_buffers(IS31FL3737_I2C_ADDRESS_3, 2);
+# if defined(IS31FL3737_I2C_ADDRESS_4)
+ is31fl3737_update_pwm_buffers(IS31FL3737_I2C_ADDRESS_4, 3);
+# endif
+# endif
+#endif
}
diff --git a/drivers/led/issi/is31fl3737.h b/drivers/led/issi/is31fl3737.h
index e7fc97872c50..8de3bf4ef52a 100644
--- a/drivers/led/issi/is31fl3737.h
+++ b/drivers/led/issi/is31fl3737.h
@@ -21,18 +21,102 @@
#include
#include
-#include
#include "progmem.h"
+#include "util.h"
-typedef struct is31_led {
+// ======== DEPRECATED DEFINES - DO NOT USE ========
+#ifdef DRIVER_ADDR_1
+# define IS31FL3737_I2C_ADDRESS_1 DRIVER_ADDR_1
+#endif
+#ifdef DRIVER_ADDR_2
+# define IS31FL3737_I2C_ADDRESS_2 DRIVER_ADDR_2
+#endif
+#ifdef DRIVER_ADDR_3
+# define IS31FL3737_I2C_ADDRESS_3 DRIVER_ADDR_3
+#endif
+#ifdef DRIVER_ADDR_4
+# define IS31FL3737_I2C_ADDRESS_4 DRIVER_ADDR_4
+#endif
+#ifdef ISSI_TIMEOUT
+# define IS31FL3737_I2C_TIMEOUT ISSI_TIMEOUT
+#endif
+#ifdef ISSI_PERSISTENCE
+# define IS31FL3737_I2C_PERSISTENCE ISSI_PERSISTENCE
+#endif
+#ifdef ISSI_PWM_FREQUENCY
+# define IS31FL3737_PWM_FREQUENCY ISSI_PWM_FREQUENCY
+#endif
+#ifdef ISSI_SWPULLUP
+# define IS31FL3737_SW_PULLUP ISSI_SWPULLUP
+#endif
+#ifdef ISSI_CSPULLUP
+# define IS31FL3737_CS_PULLDOWN ISSI_CSPULLUP
+#endif
+#ifdef ISSI_GLOBALCURRENT
+# define IS31FL3737_GLOBAL_CURRENT ISSI_GLOBALCURRENT
+#endif
+
+#define is31_led is31fl3737_led_t
+#define g_is31_leds g_is31fl3737_leds
+
+#define PUR_0R IS31FL3737_PUR_0_OHM
+#define PUR_05KR IS31FL3737_PUR_0K5_OHM
+#define PUR_1KR IS31FL3737_PUR_1K_OHM
+#define PUR_2KR IS31FL3737_PUR_2K_OHM
+#define PUR_4KR IS31FL3737_PUR_4K_OHM
+#define PUR_8KR IS31FL3737_PUR_8K_OHM
+#define PUR_16KR IS31FL3737_PUR_16K_OHM
+#define PUR_32KR IS31FL3737_PUR_32K_OHM
+// ========
+
+#define IS31FL3737_REG_INTERRUPT_MASK 0xF0
+#define IS31FL3737_REG_INTERRUPT_STATUS 0xF1
+
+#define IS31FL3737_REG_COMMAND 0xFD
+
+#define IS31FL3737_COMMAND_LED_CONTROL 0x00
+#define IS31FL3737_COMMAND_PWM 0x01
+#define IS31FL3737_COMMAND_AUTO_BREATH 0x02
+#define IS31FL3737_COMMAND_FUNCTION 0x03
+
+#define IS31FL3737_FUNCTION_REG_CONFIGURATION 0x00
+#define IS31FL3737_FUNCTION_REG_GLOBAL_CURRENT 0x01
+#define IS31FL3737_FUNCTION_REG_SW_PULLUP 0x0F
+#define IS31FL3737_FUNCTION_REG_CS_PULLDOWN 0x10
+#define IS31FL3737_FUNCTION_REG_RESET 0x11
+
+#define IS31FL3737_REG_COMMAND_WRITE_LOCK 0xFE
+#define IS31FL3737_COMMAND_WRITE_LOCK_MAGIC 0xC5
+
+#define IS31FL3737_I2C_ADDRESS_GND 0x50
+#define IS31FL3737_I2C_ADDRESS_SCL 0x55
+#define IS31FL3737_I2C_ADDRESS_SDA 0x5A
+#define IS31FL3737_I2C_ADDRESS_VCC 0x5F
+
+#if defined(RGB_MATRIX_IS31FL3737)
+# define IS31FL3737_LED_COUNT RGB_MATRIX_LED_COUNT
+#endif
+
+#if defined(IS31FL3737_I2C_ADDRESS_4)
+# define IS31FL3737_DRIVER_COUNT 4
+#elif defined(IS31FL3737_I2C_ADDRESS_3)
+# define IS31FL3737_DRIVER_COUNT 3
+#elif defined(IS31FL3737_I2C_ADDRESS_2)
+# define IS31FL3737_DRIVER_COUNT 2
+#elif defined(IS31FL3737_I2C_ADDRESS_1)
+# define IS31FL3737_DRIVER_COUNT 1
+#endif
+
+typedef struct is31fl3737_led_t {
uint8_t driver : 2;
uint8_t r;
uint8_t g;
uint8_t b;
-} __attribute__((packed)) is31_led;
+} PACKED is31fl3737_led_t;
-extern const is31_led PROGMEM g_is31_leds[RGB_MATRIX_LED_COUNT];
+extern const is31fl3737_led_t PROGMEM g_is31fl3737_leds[IS31FL3737_LED_COUNT];
+void is31fl3737_init_drivers(void);
void is31fl3737_init(uint8_t addr);
void is31fl3737_write_register(uint8_t addr, uint8_t reg, uint8_t data);
void is31fl3737_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer);
@@ -49,14 +133,31 @@ void is31fl3737_set_led_control_register(uint8_t index, bool red, bool green, bo
void is31fl3737_update_pwm_buffers(uint8_t addr, uint8_t index);
void is31fl3737_update_led_control_registers(uint8_t addr, uint8_t index);
-#define PUR_0R 0x00 // No PUR resistor
-#define PUR_05KR 0x01 // 0.5k Ohm resistor in t_NOL
-#define PUR_1KR 0x02 // 1.0k Ohm resistor in t_NOL
-#define PUR_2KR 0x03 // 2.0k Ohm resistor in t_NOL
-#define PUR_4KR 0x04 // 4.0k Ohm resistor in t_NOL
-#define PUR_8KR 0x05 // 8.0k Ohm resistor in t_NOL
-#define PUR_16KR 0x06 // 16k Ohm resistor in t_NOL
-#define PUR_32KR 0x07 // 32k Ohm resistor in t_NOL
+void is31fl3737_flush(void);
+
+#define IS31FL3737_PDR_0_OHM 0b000 // No pull-down resistor
+#define IS31FL3737_PDR_0K5_OHM 0b001 // 0.5 kOhm resistor
+#define IS31FL3737_PDR_1K_OHM 0b010 // 1 kOhm resistor
+#define IS31FL3737_PDR_2K_OHM 0b011 // 2 kOhm resistor
+#define IS31FL3737_PDR_4K_OHM 0b100 // 4 kOhm resistor
+#define IS31FL3737_PDR_8K_OHM 0b101 // 8 kOhm resistor
+#define IS31FL3737_PDR_16K_OHM 0b110 // 16 kOhm resistor
+#define IS31FL3737_PDR_32K_OHM 0b111 // 32 kOhm resistor
+
+#define IS31FL3737_PUR_0_OHM 0b000 // No pull-up resistor
+#define IS31FL3737_PUR_0K5_OHM 0b001 // 0.5 kOhm resistor
+#define IS31FL3737_PUR_1K_OHM 0b010 // 1 kOhm resistor
+#define IS31FL3737_PUR_2K_OHM 0b011 // 2 kOhm resistor
+#define IS31FL3737_PUR_4K_OHM 0b100 // 4 kOhm resistor
+#define IS31FL3737_PUR_8K_OHM 0b101 // 8 kOhm resistor
+#define IS31FL3737_PUR_16K_OHM 0b110 // 16 kOhm resistor
+#define IS31FL3737_PUR_32K_OHM 0b111 // 32 kOhm resistor
+
+#define IS31FL3737_PWM_FREQUENCY_8K4_HZ 0b000
+#define IS31FL3737_PWM_FREQUENCY_4K2_HZ 0b001
+#define IS31FL3737_PWM_FREQUENCY_26K7_HZ 0b010
+#define IS31FL3737_PWM_FREQUENCY_2K1_HZ 0b011
+#define IS31FL3737_PWM_FREQUENCY_1K05_HZ 0b100
#define A_1 0x00
#define A_2 0x01
diff --git a/drivers/led/issi/is31fl3741-simple.c b/drivers/led/issi/is31fl3741-simple.c
new file mode 100644
index 000000000000..f7009853ba62
--- /dev/null
+++ b/drivers/led/issi/is31fl3741-simple.c
@@ -0,0 +1,278 @@
+/* Copyright 2017 Jason Williams
+ * Copyright 2018 Jack Humbert
+ * Copyright 2018 Yiancar
+ * Copyright 2020 MelGeek
+ *
+ * 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 .
+ */
+
+#include "is31fl3741-simple.h"
+#include
+#include "i2c_master.h"
+#include "wait.h"
+
+#define IS31FL3741_PWM_REGISTER_COUNT 351
+
+#ifndef IS31FL3741_I2C_TIMEOUT
+# define IS31FL3741_I2C_TIMEOUT 100
+#endif
+
+#ifndef IS31FL3741_I2C_PERSISTENCE
+# define IS31FL3741_I2C_PERSISTENCE 0
+#endif
+
+#ifndef IS31FL3741_CONFIGURATION
+# define IS31FL3741_CONFIGURATION 0x01
+#endif
+
+#ifndef IS31FL3741_PWM_FREQUENCY
+# define IS31FL3741_PWM_FREQUENCY IS31FL3741_PWM_FREQUENCY_29K_HZ
+#endif
+
+#ifndef IS31FL3741_SW_PULLUP
+# define IS31FL3741_SW_PULLUP IS31FL3741_PUR_32K_OHM
+#endif
+
+#ifndef IS31FL3741_CS_PULLDOWN
+# define IS31FL3741_CS_PULLDOWN IS31FL3741_PDR_32K_OHM
+#endif
+
+#ifndef IS31FL3741_GLOBAL_CURRENT
+# define IS31FL3741_GLOBAL_CURRENT 0xFF
+#endif
+
+// Transfer buffer for TWITransmitData()
+uint8_t g_twi_transfer_buffer[20] = {0xFF};
+
+// These buffers match the IS31FL3741 and IS31FL3741A PWM registers.
+// The scaling buffers match the PG2 and PG3 LED On/Off registers.
+// Storing them like this is optimal for I2C transfers to the registers.
+// We could optimize this and take out the unused registers from these
+// buffers and the transfers in is31fl3741_write_pwm_buffer() but it's
+// probably not worth the extra complexity.
+uint8_t g_pwm_buffer[IS31FL3741_DRIVER_COUNT][IS31FL3741_PWM_REGISTER_COUNT];
+bool g_pwm_buffer_update_required[IS31FL3741_DRIVER_COUNT] = {false};
+bool g_scaling_registers_update_required[IS31FL3741_DRIVER_COUNT] = {false};
+
+uint8_t g_scaling_registers[IS31FL3741_DRIVER_COUNT][IS31FL3741_PWM_REGISTER_COUNT];
+
+void is31fl3741_write_register(uint8_t addr, uint8_t reg, uint8_t data) {
+ g_twi_transfer_buffer[0] = reg;
+ g_twi_transfer_buffer[1] = data;
+
+#if IS31FL3741_I2C_PERSISTENCE > 0
+ for (uint8_t i = 0; i < IS31FL3741_I2C_PERSISTENCE; i++) {
+ if (i2c_transmit(addr << 1, g_twi_transfer_buffer, 2, IS31FL3741_I2C_TIMEOUT) == 0) break;
+ }
+#else
+ i2c_transmit(addr << 1, g_twi_transfer_buffer, 2, IS31FL3741_I2C_TIMEOUT);
+#endif
+}
+
+bool is31fl3741_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer) {
+ // Assume PG0 is already selected
+
+ for (int i = 0; i < 342; i += 18) {
+ if (i == 180) {
+ // unlock the command register and select PG1
+ is31fl3741_write_register(addr, IS31FL3741_REG_COMMAND_WRITE_LOCK, IS31FL3741_COMMAND_WRITE_LOCK_MAGIC);
+ is31fl3741_write_register(addr, IS31FL3741_REG_COMMAND, IS31FL3741_COMMAND_PWM_1);
+ }
+
+ g_twi_transfer_buffer[0] = i % 180;
+ memcpy(g_twi_transfer_buffer + 1, pwm_buffer + i, 18);
+
+#if IS31FL3741_I2C_PERSISTENCE > 0
+ for (uint8_t i = 0; i < IS31FL3741_I2C_PERSISTENCE; i++) {
+ if (i2c_transmit(addr << 1, g_twi_transfer_buffer, 19, IS31FL3741_I2C_TIMEOUT) != 0) {
+ return false;
+ }
+ }
+#else
+ if (i2c_transmit(addr << 1, g_twi_transfer_buffer, 19, IS31FL3741_I2C_TIMEOUT) != 0) {
+ return false;
+ }
+#endif
+ }
+
+ // transfer the left cause the total number is 351
+ g_twi_transfer_buffer[0] = 162;
+ memcpy(g_twi_transfer_buffer + 1, pwm_buffer + 342, 9);
+
+#if IS31FL3741_I2C_PERSISTENCE > 0
+ for (uint8_t i = 0; i < IS31FL3741_I2C_PERSISTENCE; i++) {
+ if (i2c_transmit(addr << 1, g_twi_transfer_buffer, 10, IS31FL3741_I2C_TIMEOUT) != 0) {
+ return false;
+ }
+ }
+#else
+ if (i2c_transmit(addr << 1, g_twi_transfer_buffer, 10, IS31FL3741_I2C_TIMEOUT) != 0) {
+ return false;
+ }
+#endif
+
+ return true;
+}
+
+void is31fl3741_init_drivers(void) {
+ i2c_init();
+
+ is31fl3741_init(IS31FL3741_I2C_ADDRESS_1);
+#if defined(IS31FL3741_I2C_ADDRESS_2)
+ is31fl3741_init(IS31FL3741_I2C_ADDRESS_2);
+# if defined(IS31FL3741_I2C_ADDRESS_3)
+ is31fl3741_init(IS31FL3741_I2C_ADDRESS_3);
+# if defined(IS31FL3741_I2C_ADDRESS_4)
+ is31fl3741_init(IS31FL3741_I2C_ADDRESS_4);
+# endif
+# endif
+#endif
+
+ for (int i = 0; i < IS31FL3741_LED_COUNT; i++) {
+ is31fl3741_set_led_control_register(i, true);
+ }
+
+ is31fl3741_update_led_control_registers(IS31FL3741_I2C_ADDRESS_1, 0);
+#if defined(IS31FL3741_I2C_ADDRESS_2)
+ is31fl3741_update_led_control_registers(IS31FL3741_I2C_ADDRESS_2, 1);
+# if defined(IS31FL3741_I2C_ADDRESS_3)
+ is31fl3741_update_led_control_registers(IS31FL3741_I2C_ADDRESS_3, 2);
+# if defined(IS31FL3741_I2C_ADDRESS_4)
+ is31fl3741_update_led_control_registers(IS31FL3741_I2C_ADDRESS_4, 3);
+# endif
+# endif
+#endif
+}
+
+void is31fl3741_init(uint8_t addr) {
+ // In order to avoid the LEDs being driven with garbage data
+ // in the LED driver's PWM registers, shutdown is enabled last.
+ // Set up the mode and other settings, clear the PWM registers,
+ // then disable software shutdown.
+ // Unlock the command register.
+
+ // Unlock the command register.
+ is31fl3741_write_register(addr, IS31FL3741_REG_COMMAND_WRITE_LOCK, IS31FL3741_COMMAND_WRITE_LOCK_MAGIC);
+
+ // Select PG4
+ is31fl3741_write_register(addr, IS31FL3741_REG_COMMAND, IS31FL3741_COMMAND_FUNCTION);
+
+ // Set to Normal operation
+ is31fl3741_write_register(addr, IS31FL3741_FUNCTION_REG_CONFIGURATION, IS31FL3741_CONFIGURATION);
+
+ // Set Golbal Current Control Register
+ is31fl3741_write_register(addr, IS31FL3741_FUNCTION_REG_GLOBAL_CURRENT, IS31FL3741_GLOBAL_CURRENT);
+ // Set Pull up & Down for SWx CSy
+ is31fl3741_write_register(addr, IS31FL3741_FUNCTION_REG_PULLDOWNUP, ((IS31FL3741_CS_PULLDOWN << 4) | IS31FL3741_SW_PULLUP));
+ // Set PWM frequency
+ is31fl3741_write_register(addr, IS31FL3741_FUNCTION_REG_PWM_FREQUENCY, (IS31FL3741_PWM_FREQUENCY & 0b1111));
+
+ // is31fl3741_update_led_scaling_registers(addr, 0xFF, 0xFF, 0xFF);
+
+ // Wait 10ms to ensure the device has woken up.
+ wait_ms(10);
+}
+
+void is31fl3741_set_value(int index, uint8_t value) {
+ is31fl3741_led_t led;
+ if (index >= 0 && index < IS31FL3741_LED_COUNT) {
+ memcpy_P(&led, (&g_is31fl3741_leds[index]), sizeof(led));
+
+ if (g_pwm_buffer[led.driver][led.v] == value) {
+ return;
+ }
+ g_pwm_buffer_update_required[led.driver] = true;
+ g_pwm_buffer[led.driver][led.v] = value;
+ }
+}
+
+void is31fl3741_set_value_all(uint8_t value) {
+ for (int i = 0; i < IS31FL3741_LED_COUNT; i++) {
+ is31fl3741_set_value(i, value);
+ }
+}
+
+void is31fl3741_set_led_control_register(uint8_t index, bool value) {
+ is31fl3741_led_t led;
+ memcpy_P(&led, (&g_is31fl3741_leds[index]), sizeof(led));
+
+ if (value) {
+ g_scaling_registers[led.driver][led.v] = 0xFF;
+ } else {
+ g_scaling_registers[led.driver][led.v] = 0x00;
+ }
+
+ g_scaling_registers_update_required[led.driver] = true;
+}
+
+void is31fl3741_update_pwm_buffers(uint8_t addr, uint8_t index) {
+ if (g_pwm_buffer_update_required[index]) {
+ // unlock the command register and select PG2
+ is31fl3741_write_register(addr, IS31FL3741_REG_COMMAND_WRITE_LOCK, IS31FL3741_COMMAND_WRITE_LOCK_MAGIC);
+ is31fl3741_write_register(addr, IS31FL3741_REG_COMMAND, IS31FL3741_COMMAND_PWM_0);
+
+ is31fl3741_write_pwm_buffer(addr, g_pwm_buffer[index]);
+ }
+
+ g_pwm_buffer_update_required[index] = false;
+}
+
+void is31fl3741_set_pwm_buffer(const is31fl3741_led_t *pled, uint8_t value) {
+ g_pwm_buffer[pled->driver][pled->v] = value;
+
+ g_pwm_buffer_update_required[pled->driver] = true;
+}
+
+void is31fl3741_update_led_control_registers(uint8_t addr, uint8_t index) {
+ if (g_scaling_registers_update_required[index]) {
+ // unlock the command register and select PG2
+ is31fl3741_write_register(addr, IS31FL3741_REG_COMMAND_WRITE_LOCK, IS31FL3741_COMMAND_WRITE_LOCK_MAGIC);
+ is31fl3741_write_register(addr, IS31FL3741_REG_COMMAND, IS31FL3741_COMMAND_SCALING_0);
+
+ // CS1_SW1 to CS30_SW6 are on PG2
+ for (int i = CS1_SW1; i <= CS30_SW6; ++i) {
+ is31fl3741_write_register(addr, i, g_scaling_registers[index][i]);
+ }
+
+ // unlock the command register and select PG3
+ is31fl3741_write_register(addr, IS31FL3741_REG_COMMAND_WRITE_LOCK, IS31FL3741_COMMAND_WRITE_LOCK_MAGIC);
+ is31fl3741_write_register(addr, IS31FL3741_REG_COMMAND, IS31FL3741_COMMAND_SCALING_1);
+
+ // CS1_SW7 to CS39_SW9 are on PG3
+ for (int i = CS1_SW7; i <= CS39_SW9; ++i) {
+ is31fl3741_write_register(addr, i - CS1_SW7, g_scaling_registers[index][i]);
+ }
+
+ g_scaling_registers_update_required[index] = false;
+ }
+}
+
+void is31fl3741_set_scaling_registers(const is31fl3741_led_t *pled, uint8_t value) {
+ g_scaling_registers[pled->driver][pled->v] = value;
+
+ g_scaling_registers_update_required[pled->driver] = true;
+}
+
+void is31fl3741_flush(void) {
+ is31fl3741_update_pwm_buffers(IS31FL3741_I2C_ADDRESS_1, 0);
+#if defined(IS31FL3741_I2C_ADDRESS_2)
+ is31fl3741_update_pwm_buffers(IS31FL3741_I2C_ADDRESS_2, 1);
+# if defined(IS31FL3741_I2C_ADDRESS_3)
+ is31fl3741_update_pwm_buffers(IS31FL3741_I2C_ADDRESS_3, 2);
+# if defined(IS31FL3741_I2C_ADDRESS_4)
+ is31fl3741_update_pwm_buffers(IS31FL3741_I2C_ADDRESS_4, 3);
+# endif
+# endif
+#endif
+}
diff --git a/drivers/led/issi/is31fl3741-simple.h b/drivers/led/issi/is31fl3741-simple.h
new file mode 100644
index 000000000000..34608a37e005
--- /dev/null
+++ b/drivers/led/issi/is31fl3741-simple.h
@@ -0,0 +1,516 @@
+/* Copyright 2017 Jason Williams
+ * Copyright 2018 Jack Humbert
+ * Copyright 2018 Yiancar
+ * Copyright 2020 MelGeek
+ *
+ * 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 .
+ */
+
+#pragma once
+
+#include
+#include
+#include "progmem.h"
+#include "util.h"
+
+// ======== DEPRECATED DEFINES - DO NOT USE ========
+#ifdef ISSI_TIMEOUT
+# define IS31FL3741_I2C_TIMEOUT ISSI_TIMEOUT
+#endif
+#ifdef ISSI_PERSISTENCE
+# define IS31FL3741_I2C_PERSISTENCE ISSI_PERSISTENCE
+#endif
+#ifdef ISSI_CONFIGURATION
+# define IS31FL3741_CONFIGURATION ISSI_CONFIGURATION
+#endif
+#ifdef ISSI_SWPULLUP
+# define IS31FL3741_SW_PULLUP ISSI_SWPULLUP
+#endif
+#ifdef ISSI_CSPULLUP
+# define IS31FL3741_CS_PULLDOWN ISSI_CSPULLUP
+#endif
+#ifdef ISSI_GLOBALCURRENT
+# define IS31FL3741_GLOBAL_CURRENT ISSI_GLOBALCURRENT
+#endif
+
+#define PUR_0R IS31FL3741_PUR_0_OHM
+#define PUR_05KR IS31FL3741_PUR_0K5_OHM
+#define PUR_1KR IS31FL3741_PUR_1K_OHM
+#define PUR_2KR IS31FL3741_PUR_2K_OHM
+#define PUR_4KR IS31FL3741_PUR_4K_OHM
+#define PUR_8KR IS31FL3741_PUR_8K_OHM
+#define PUR_16KR IS31FL3741_PUR_16K_OHM
+#define PUR_32KR IS31FL3741_PUR_32K_OHM
+// ========
+
+#define IS31FL3741_REG_INTERRUPT_MASK 0xF0
+#define IS31FL3741_REG_INTERRUPT_STATUS 0xF1
+#define IS31FL3741_REG_ID 0xFC
+
+#define IS31FL3741_REG_COMMAND 0xFD
+
+#define IS31FL3741_COMMAND_PWM_0 0x00
+#define IS31FL3741_COMMAND_PWM_1 0x01
+#define IS31FL3741_COMMAND_SCALING_0 0x02
+#define IS31FL3741_COMMAND_SCALING_1 0x03
+#define IS31FL3741_COMMAND_FUNCTION 0x04
+
+#define IS31FL3741_FUNCTION_REG_CONFIGURATION 0x00
+#define IS31FL3741_FUNCTION_REG_GLOBAL_CURRENT 0x01
+#define IS31FL3741_FUNCTION_REG_PULLDOWNUP 0x02
+#define IS31FL3741_FUNCTION_REG_PWM_FREQUENCY 0x36
+#define IS31FL3741_FUNCTION_REG_RESET 0x3F
+
+#define IS31FL3741_REG_COMMAND_WRITE_LOCK 0xFE
+#define IS31FL3741_COMMAND_WRITE_LOCK_MAGIC 0xC5
+
+#define IS31FL3741_I2C_ADDRESS_GND 0x30
+#define IS31FL3741_I2C_ADDRESS_SCL 0x31
+#define IS31FL3741_I2C_ADDRESS_SDA 0x32
+#define IS31FL3741_I2C_ADDRESS_VCC 0x33
+
+#if defined(LED_MATRIX_IS31FL3741)
+# define IS31FL3741_LED_COUNT LED_MATRIX_LED_COUNT
+#endif
+
+#if defined(IS31FL3741_I2C_ADDRESS_4)
+# define IS31FL3741_DRIVER_COUNT 4
+#elif defined(IS31FL3741_I2C_ADDRESS_3)
+# define IS31FL3741_DRIVER_COUNT 3
+#elif defined(IS31FL3741_I2C_ADDRESS_2)
+# define IS31FL3741_DRIVER_COUNT 2
+#elif defined(IS31FL3741_I2C_ADDRESS_1)
+# define IS31FL3741_DRIVER_COUNT 1
+#endif
+
+typedef struct is31fl3741_led_t {
+ uint8_t driver : 2;
+ uint16_t v : 9;
+} PACKED is31fl3741_led_t;
+
+extern const is31fl3741_led_t PROGMEM g_is31fl3741_leds[IS31FL3741_LED_COUNT];
+
+void is31fl3741_init_drivers(void);
+void is31fl3741_init(uint8_t addr);
+void is31fl3741_write_register(uint8_t addr, uint8_t reg, uint8_t data);
+bool is31fl3741_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer);
+
+void is31fl3741_set_value(int index, uint8_t value);
+void is31fl3741_set_value_all(uint8_t value);
+
+void is31fl3741_set_led_control_register(uint8_t index, bool value);
+
+// This should not be called from an interrupt
+// (eg. from a timer interrupt).
+// Call this while idle (in between matrix scans).
+// If the buffer is dirty, it will update the driver with the buffer.
+void is31fl3741_update_pwm_buffers(uint8_t addr, uint8_t index);
+void is31fl3741_update_led_control_registers(uint8_t addr, uint8_t index);
+void is31fl3741_set_scaling_registers(const is31fl3741_led_t *pled, uint8_t value);
+
+void is31fl3741_set_pwm_buffer(const is31fl3741_led *pled, uint8_t value);
+
+void is31fl3741_flush(void);
+
+#define IS31FL3741_PDR_0_OHM 0b000 // No pull-down resistor
+#define IS31FL3741_PDR_0K5_OHM 0b001 // 0.5 kOhm resistor
+#define IS31FL3741_PDR_1K_OHM 0b010 // 1 kOhm resistor
+#define IS31FL3741_PDR_2K_OHM 0b011 // 2 kOhm resistor
+#define IS31FL3741_PDR_4K_OHM 0b100 // 4 kOhm resistor
+#define IS31FL3741_PDR_8K_OHM 0b101 // 8 kOhm resistor
+#define IS31FL3741_PDR_16K_OHM 0b110 // 16 kOhm resistor
+#define IS31FL3741_PDR_32K_OHM 0b111 // 32 kOhm resistor
+
+#define IS31FL3741_PUR_0_OHM 0b000 // No pull-up resistor
+#define IS31FL3741_PUR_0K5_OHM 0b001 // 0.5 kOhm resistor
+#define IS31FL3741_PUR_1K_OHM 0b010 // 1 kOhm resistor
+#define IS31FL3741_PUR_2K_OHM 0b011 // 2 kOhm resistor
+#define IS31FL3741_PUR_4K_OHM 0b100 // 4 kOhm resistor
+#define IS31FL3741_PUR_8K_OHM 0b101 // 8 kOhm resistor
+#define IS31FL3741_PUR_16K_OHM 0b110 // 16 kOhm resistor
+#define IS31FL3741_PUR_32K_OHM 0b111 // 32 kOhm resistor
+
+#define IS31FL3741_PWM_FREQUENCY_29K_HZ 0b0000
+#define IS31FL3741_PWM_FREQUENCY_3K6_HZ 0b0011
+#define IS31FL3741_PWM_FREQUENCY_1K8_HZ 0b0111
+#define IS31FL3741_PWM_FREQUENCY_900_HZ 0b1011
+
+#define CS1_SW1 0x00
+#define CS2_SW1 0x01
+#define CS3_SW1 0x02
+#define CS4_SW1 0x03
+#define CS5_SW1 0x04
+#define CS6_SW1 0x05
+#define CS7_SW1 0x06
+#define CS8_SW1 0x07
+#define CS9_SW1 0x08
+#define CS10_SW1 0x09
+#define CS11_SW1 0x0A
+#define CS12_SW1 0x0B
+#define CS13_SW1 0x0C
+#define CS14_SW1 0x0D
+#define CS15_SW1 0x0E
+#define CS16_SW1 0x0F
+#define CS17_SW1 0x10
+#define CS18_SW1 0x11
+#define CS19_SW1 0x12
+#define CS20_SW1 0x13
+#define CS21_SW1 0x14
+#define CS22_SW1 0x15
+#define CS23_SW1 0x16
+#define CS24_SW1 0x17
+#define CS25_SW1 0x18
+#define CS26_SW1 0x19
+#define CS27_SW1 0x1A
+#define CS28_SW1 0x1B
+#define CS29_SW1 0x1C
+#define CS30_SW1 0x1D
+
+#define CS1_SW2 0x1E
+#define CS2_SW2 0x1F
+#define CS3_SW2 0x20
+#define CS4_SW2 0x21
+#define CS5_SW2 0x22
+#define CS6_SW2 0x23
+#define CS7_SW2 0x24
+#define CS8_SW2 0x25
+#define CS9_SW2 0x26
+#define CS10_SW2 0x27
+#define CS11_SW2 0x28
+#define CS12_SW2 0x29
+#define CS13_SW2 0x2A
+#define CS14_SW2 0x2B
+#define CS15_SW2 0x2C
+#define CS16_SW2 0x2D
+#define CS17_SW2 0x2E
+#define CS18_SW2 0x2F
+#define CS19_SW2 0x30
+#define CS20_SW2 0x31
+#define CS21_SW2 0x32
+#define CS22_SW2 0x33
+#define CS23_SW2 0x34
+#define CS24_SW2 0x35
+#define CS25_SW2 0x36
+#define CS26_SW2 0x37
+#define CS27_SW2 0x38
+#define CS28_SW2 0x39
+#define CS29_SW2 0x3A
+#define CS30_SW2 0x3B
+
+#define CS1_SW3 0x3C
+#define CS2_SW3 0x3D
+#define CS3_SW3 0x3E
+#define CS4_SW3 0x3F
+#define CS5_SW3 0x40
+#define CS6_SW3 0x41
+#define CS7_SW3 0x42
+#define CS8_SW3 0x43
+#define CS9_SW3 0x44
+#define CS10_SW3 0x45
+#define CS11_SW3 0x46
+#define CS12_SW3 0x47
+#define CS13_SW3 0x48
+#define CS14_SW3 0x49
+#define CS15_SW3 0x4A
+#define CS16_SW3 0x4B
+#define CS17_SW3 0x4C
+#define CS18_SW3 0x4D
+#define CS19_SW3 0x4E
+#define CS20_SW3 0x4F
+#define CS21_SW3 0x50
+#define CS22_SW3 0x51
+#define CS23_SW3 0x52
+#define CS24_SW3 0x53
+#define CS25_SW3 0x54
+#define CS26_SW3 0x55
+#define CS27_SW3 0x56
+#define CS28_SW3 0x57
+#define CS29_SW3 0x58
+#define CS30_SW3 0x59
+
+#define CS1_SW4 0x5A
+#define CS2_SW4 0x5B
+#define CS3_SW4 0x5C
+#define CS4_SW4 0x5D
+#define CS5_SW4 0x5E
+#define CS6_SW4 0x5F
+#define CS7_SW4 0x60
+#define CS8_SW4 0x61
+#define CS9_SW4 0x62
+#define CS10_SW4 0x63
+#define CS11_SW4 0x64
+#define CS12_SW4 0x65
+#define CS13_SW4 0x66
+#define CS14_SW4 0x67
+#define CS15_SW4 0x68
+#define CS16_SW4 0x69
+#define CS17_SW4 0x6A
+#define CS18_SW4 0x6B
+#define CS19_SW4 0x6C
+#define CS20_SW4 0x6D
+#define CS21_SW4 0x6E
+#define CS22_SW4 0x6F
+#define CS23_SW4 0x70
+#define CS24_SW4 0x71
+#define CS25_SW4 0x72
+#define CS26_SW4 0x73
+#define CS27_SW4 0x74
+#define CS28_SW4 0x75
+#define CS29_SW4 0x76
+#define CS30_SW4 0x77
+
+#define CS1_SW5 0x78
+#define CS2_SW5 0x79
+#define CS3_SW5 0x7A
+#define CS4_SW5 0x7B
+#define CS5_SW5 0x7C
+#define CS6_SW5 0x7D
+#define CS7_SW5 0x7E
+#define CS8_SW5 0x7F
+#define CS9_SW5 0x80
+#define CS10_SW5 0x81
+#define CS11_SW5 0x82
+#define CS12_SW5 0x83
+#define CS13_SW5 0x84
+#define CS14_SW5 0x85
+#define CS15_SW5 0x86
+#define CS16_SW5 0x87
+#define CS17_SW5 0x88
+#define CS18_SW5 0x89
+#define CS19_SW5 0x8A
+#define CS20_SW5 0x8B
+#define CS21_SW5 0x8C
+#define CS22_SW5 0x8D
+#define CS23_SW5 0x8E
+#define CS24_SW5 0x8F
+#define CS25_SW5 0x90
+#define CS26_SW5 0x91
+#define CS27_SW5 0x92
+#define CS28_SW5 0x93
+#define CS29_SW5 0x94
+#define CS30_SW5 0x95
+
+#define CS1_SW6 0x96
+#define CS2_SW6 0x97
+#define CS3_SW6 0x98
+#define CS4_SW6 0x99
+#define CS5_SW6 0x9A
+#define CS6_SW6 0x9B
+#define CS7_SW6 0x9C
+#define CS8_SW6 0x9D
+#define CS9_SW6 0x9E
+#define CS10_SW6 0x9F
+#define CS11_SW6 0xA0
+#define CS12_SW6 0xA1
+#define CS13_SW6 0xA2
+#define CS14_SW6 0xA3
+#define CS15_SW6 0xA4
+#define CS16_SW6 0xA5
+#define CS17_SW6 0xA6
+#define CS18_SW6 0xA7
+#define CS19_SW6 0xA8
+#define CS20_SW6 0xA9
+#define CS21_SW6 0xAA
+#define CS22_SW6 0xAB
+#define CS23_SW6 0xAC
+#define CS24_SW6 0xAD
+#define CS25_SW6 0xAE
+#define CS26_SW6 0xAF
+#define CS27_SW6 0xB0
+#define CS28_SW6 0xB1
+#define CS29_SW6 0xB2
+#define CS30_SW6 0xB3
+
+#define CS1_SW7 0xB4
+#define CS2_SW7 0xB5
+#define CS3_SW7 0xB6
+#define CS4_SW7 0xB7
+#define CS5_SW7 0xB8
+#define CS6_SW7 0xB9
+#define CS7_SW7 0xBA
+#define CS8_SW7 0xBB
+#define CS9_SW7 0xBC
+#define CS10_SW7 0xBD
+#define CS11_SW7 0xBE
+#define CS12_SW7 0xBF
+#define CS13_SW7 0xC0
+#define CS14_SW7 0xC1
+#define CS15_SW7 0xC2
+#define CS16_SW7 0xC3
+#define CS17_SW7 0xC4
+#define CS18_SW7 0xC5
+#define CS19_SW7 0xC6
+#define CS20_SW7 0xC7
+#define CS21_SW7 0xC8
+#define CS22_SW7 0xC9
+#define CS23_SW7 0xCA
+#define CS24_SW7 0xCB
+#define CS25_SW7 0xCC
+#define CS26_SW7 0xCD
+#define CS27_SW7 0xCE
+#define CS28_SW7 0xCF
+#define CS29_SW7 0xD0
+#define CS30_SW7 0xD1
+
+#define CS1_SW8 0xD2
+#define CS2_SW8 0xD3
+#define CS3_SW8 0xD4
+#define CS4_SW8 0xD5
+#define CS5_SW8 0xD6
+#define CS6_SW8 0xD7
+#define CS7_SW8 0xD8
+#define CS8_SW8 0xD9
+#define CS9_SW8 0xDA
+#define CS10_SW8 0xDB
+#define CS11_SW8 0xDC
+#define CS12_SW8 0xDD
+#define CS13_SW8 0xDE
+#define CS14_SW8 0xDF
+#define CS15_SW8 0xE0
+#define CS16_SW8 0xE1
+#define CS17_SW8 0xE2
+#define CS18_SW8 0xE3
+#define CS19_SW8 0xE4
+#define CS20_SW8 0xE5
+#define CS21_SW8 0xE6
+#define CS22_SW8 0xE7
+#define CS23_SW8 0xE8
+#define CS24_SW8 0xE9
+#define CS25_SW8 0xEA
+#define CS26_SW8 0xEB
+#define CS27_SW8 0xEC
+#define CS28_SW8 0xED
+#define CS29_SW8 0xEE
+#define CS30_SW8 0xEF
+
+#define CS1_SW9 0xF0
+#define CS2_SW9 0xF1
+#define CS3_SW9 0xF2
+#define CS4_SW9 0xF3
+#define CS5_SW9 0xF4
+#define CS6_SW9 0xF5
+#define CS7_SW9 0xF6
+#define CS8_SW9 0xF7
+#define CS9_SW9 0xF8
+#define CS10_SW9 0xF9
+#define CS11_SW9 0xFA
+#define CS12_SW9 0xFB
+#define CS13_SW9 0xFC
+#define CS14_SW9 0xFD
+#define CS15_SW9 0xFE
+#define CS16_SW9 0xFF
+#define CS17_SW9 0x100
+#define CS18_SW9 0x101
+#define CS19_SW9 0x102
+#define CS20_SW9 0x103
+#define CS21_SW9 0x104
+#define CS22_SW9 0x105
+#define CS23_SW9 0x106
+#define CS24_SW9 0x107
+#define CS25_SW9 0x108
+#define CS26_SW9 0x109
+#define CS27_SW9 0x10A
+#define CS28_SW9 0x10B
+#define CS29_SW9 0x10C
+#define CS30_SW9 0x10D
+
+#define CS31_SW1 0x10E
+#define CS32_SW1 0x10F
+#define CS33_SW1 0x110
+#define CS34_SW1 0x111
+#define CS35_SW1 0x112
+#define CS36_SW1 0x113
+#define CS37_SW1 0x114
+#define CS38_SW1 0x115
+#define CS39_SW1 0x116
+
+#define CS31_SW2 0x117
+#define CS32_SW2 0x118
+#define CS33_SW2 0x119
+#define CS34_SW2 0x11A
+#define CS35_SW2 0x11B
+#define CS36_SW2 0x11C
+#define CS37_SW2 0x11D
+#define CS38_SW2 0x11E
+#define CS39_SW2 0x11F
+
+#define CS31_SW3 0x120
+#define CS32_SW3 0x121
+#define CS33_SW3 0x122
+#define CS34_SW3 0x123
+#define CS35_SW3 0x124
+#define CS36_SW3 0x125
+#define CS37_SW3 0x126
+#define CS38_SW3 0x127
+#define CS39_SW3 0x128
+
+#define CS31_SW4 0x129
+#define CS32_SW4 0x12A
+#define CS33_SW4 0x12B
+#define CS34_SW4 0x12C
+#define CS35_SW4 0x12D
+#define CS36_SW4 0x12E
+#define CS37_SW4 0x12F
+#define CS38_SW4 0x130
+#define CS39_SW4 0x131
+
+#define CS31_SW5 0x132
+#define CS32_SW5 0x133
+#define CS33_SW5 0x134
+#define CS34_SW5 0x135
+#define CS35_SW5 0x136
+#define CS36_SW5 0x137
+#define CS37_SW5 0x138
+#define CS38_SW5 0x139
+#define CS39_SW5 0x13A
+
+#define CS31_SW6 0x13B
+#define CS32_SW6 0x13C
+#define CS33_SW6 0x13D
+#define CS34_SW6 0x13E
+#define CS35_SW6 0x13F
+#define CS36_SW6 0x140
+#define CS37_SW6 0x141
+#define CS38_SW6 0x142
+#define CS39_SW6 0x143
+
+#define CS31_SW7 0x144
+#define CS32_SW7 0x145
+#define CS33_SW7 0x146
+#define CS34_SW7 0x147
+#define CS35_SW7 0x148
+#define CS36_SW7 0x149
+#define CS37_SW7 0x14A
+#define CS38_SW7 0x14B
+#define CS39_SW7 0x14C
+
+#define CS31_SW8 0x14D
+#define CS32_SW8 0x14E
+#define CS33_SW8 0x14F
+#define CS34_SW8 0x150
+#define CS35_SW8 0x151
+#define CS36_SW8 0x152
+#define CS37_SW8 0x153
+#define CS38_SW8 0x154
+#define CS39_SW8 0x155
+
+#define CS31_SW9 0x156
+#define CS32_SW9 0x157
+#define CS33_SW9 0x158
+#define CS34_SW9 0x159
+#define CS35_SW9 0x15A
+#define CS36_SW9 0x15B
+#define CS37_SW9 0x15C
+#define CS38_SW9 0x15D
+#define CS39_SW9 0x15E
diff --git a/drivers/led/issi/is31fl3741.c b/drivers/led/issi/is31fl3741.c
index 70671c2a40fc..efcfa77b468e 100644
--- a/drivers/led/issi/is31fl3741.c
+++ b/drivers/led/issi/is31fl3741.c
@@ -17,63 +17,40 @@
* along with this program. If not, see .
*/
-#include "wait.h"
-
#include "is31fl3741.h"
#include
#include "i2c_master.h"
-#include "progmem.h"
-
-// This is a 7-bit address, that gets left-shifted and bit 0
-// set to 0 for write, 1 for read (as per I2C protocol)
-// The address will vary depending on your wiring:
-// 00 <-> GND
-// 01 <-> SCL
-// 10 <-> SDA
-// 11 <-> VCC
-// ADDR1 represents A1:A0 of the 7-bit address.
-// ADDR2 represents A3:A2 of the 7-bit address.
-// The result is: 0b101(ADDR2)(ADDR1)
-#define ISSI_ADDR_DEFAULT 0x60
-
-#define ISSI_COMMANDREGISTER 0xFD
-#define ISSI_COMMANDREGISTER_WRITELOCK 0xFE
-#define ISSI_INTERRUPTMASKREGISTER 0xF0
-#define ISSI_INTERRUPTSTATUSREGISTER 0xF1
-#define ISSI_IDREGISTER 0xFC
-
-#define ISSI_PAGE_PWM0 0x00 // PG0
-#define ISSI_PAGE_PWM1 0x01 // PG1
-#define ISSI_PAGE_SCALING_0 0x02 // PG2
-#define ISSI_PAGE_SCALING_1 0x03 // PG3
-#define ISSI_PAGE_FUNCTION 0x04 // PG4
-
-#define ISSI_REG_CONFIGURATION 0x00 // PG4
-#define ISSI_REG_GLOBALCURRENT 0x01 // PG4
-#define ISSI_REG_PULLDOWNUP 0x02 // PG4
-#define ISSI_REG_RESET 0x3F // PG4
-
-#ifndef ISSI_TIMEOUT
-# define ISSI_TIMEOUT 100
+#include "wait.h"
+
+#define IS31FL3741_PWM_REGISTER_COUNT 351
+
+#ifndef IS31FL3741_I2C_TIMEOUT
+# define IS31FL3741_I2C_TIMEOUT 100
#endif
-#ifndef ISSI_PERSISTENCE
-# define ISSI_PERSISTENCE 0
+#ifndef IS31FL3741_I2C_PERSISTENCE
+# define IS31FL3741_I2C_PERSISTENCE 0
#endif
-#ifndef ISSI_SWPULLUP
-# define ISSI_SWPULLUP PUR_32KR
+#ifndef IS31FL3741_CONFIGURATION
+# define IS31FL3741_CONFIGURATION 0x01
#endif
-#ifndef ISSI_CSPULLUP
-# define ISSI_CSPULLUP PUR_32KR
+#ifndef IS31FL3741_PWM_FREQUENCY
+# define IS31FL3741_PWM_FREQUENCY IS31FL3741_PWM_FREQUENCY_29K_HZ
#endif
-#ifndef ISSI_GLOBALCURRENT
-# define ISSI_GLOBALCURRENT 0xFF
+#ifndef IS31FL3741_SW_PULLUP
+# define IS31FL3741_SW_PULLUP IS31FL3741_PUR_32K_OHM
#endif
-#define ISSI_MAX_LEDS 351
+#ifndef IS31FL3741_CS_PULLDOWN
+# define IS31FL3741_CS_PULLDOWN IS31FL3741_PDR_32K_OHM
+#endif
+
+#ifndef IS31FL3741_GLOBAL_CURRENT
+# define IS31FL3741_GLOBAL_CURRENT 0xFF
+#endif
// Transfer buffer for TWITransmitData()
uint8_t g_twi_transfer_buffer[20] = {0xFF};
@@ -84,22 +61,22 @@ uint8_t g_twi_transfer_buffer[20] = {0xFF};
// We could optimize this and take out the unused registers from these
// buffers and the transfers in is31fl3741_write_pwm_buffer() but it's
// probably not worth the extra complexity.
-uint8_t g_pwm_buffer[DRIVER_COUNT][ISSI_MAX_LEDS];
-bool g_pwm_buffer_update_required[DRIVER_COUNT] = {false};
-bool g_scaling_registers_update_required[DRIVER_COUNT] = {false};
+uint8_t g_pwm_buffer[IS31FL3741_DRIVER_COUNT][IS31FL3741_PWM_REGISTER_COUNT];
+bool g_pwm_buffer_update_required[IS31FL3741_DRIVER_COUNT] = {false};
+bool g_scaling_registers_update_required[IS31FL3741_DRIVER_COUNT] = {false};
-uint8_t g_scaling_registers[DRIVER_COUNT][ISSI_MAX_LEDS];
+uint8_t g_scaling_registers[IS31FL3741_DRIVER_COUNT][IS31FL3741_PWM_REGISTER_COUNT];
void is31fl3741_write_register(uint8_t addr, uint8_t reg, uint8_t data) {
g_twi_transfer_buffer[0] = reg;
g_twi_transfer_buffer[1] = data;
-#if ISSI_PERSISTENCE > 0
- for (uint8_t i = 0; i < ISSI_PERSISTENCE; i++) {
- if (i2c_transmit(addr << 1, g_twi_transfer_buffer, 2, ISSI_TIMEOUT) == 0) break;
+#if IS31FL3741_I2C_PERSISTENCE > 0
+ for (uint8_t i = 0; i < IS31FL3741_I2C_PERSISTENCE; i++) {
+ if (i2c_transmit(addr << 1, g_twi_transfer_buffer, 2, IS31FL3741_I2C_TIMEOUT) == 0) break;
}
#else
- i2c_transmit(addr << 1, g_twi_transfer_buffer, 2, ISSI_TIMEOUT);
+ i2c_transmit(addr << 1, g_twi_transfer_buffer, 2, IS31FL3741_I2C_TIMEOUT);
#endif
}
@@ -109,21 +86,21 @@ bool is31fl3741_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer) {
for (int i = 0; i < 342; i += 18) {
if (i == 180) {
// unlock the command register and select PG1
- is31fl3741_write_register(addr, ISSI_COMMANDREGISTER_WRITELOCK, 0xC5);
- is31fl3741_write_register(addr, ISSI_COMMANDREGISTER, ISSI_PAGE_PWM1);
+ is31fl3741_write_register(addr, IS31FL3741_REG_COMMAND_WRITE_LOCK, IS31FL3741_COMMAND_WRITE_LOCK_MAGIC);
+ is31fl3741_write_register(addr, IS31FL3741_REG_COMMAND, IS31FL3741_COMMAND_PWM_1);
}
g_twi_transfer_buffer[0] = i % 180;
memcpy(g_twi_transfer_buffer + 1, pwm_buffer + i, 18);
-#if ISSI_PERSISTENCE > 0
- for (uint8_t i = 0; i < ISSI_PERSISTENCE; i++) {
- if (i2c_transmit(addr << 1, g_twi_transfer_buffer, 19, ISSI_TIMEOUT) != 0) {
+#if IS31FL3741_I2C_PERSISTENCE > 0
+ for (uint8_t i = 0; i < IS31FL3741_I2C_PERSISTENCE; i++) {
+ if (i2c_transmit(addr << 1, g_twi_transfer_buffer, 19, IS31FL3741_I2C_TIMEOUT) != 0) {
return false;
}
}
#else
- if (i2c_transmit(addr << 1, g_twi_transfer_buffer, 19, ISSI_TIMEOUT) != 0) {
+ if (i2c_transmit(addr << 1, g_twi_transfer_buffer, 19, IS31FL3741_I2C_TIMEOUT) != 0) {
return false;
}
#endif
@@ -133,14 +110,14 @@ bool is31fl3741_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer) {
g_twi_transfer_buffer[0] = 162;
memcpy(g_twi_transfer_buffer + 1, pwm_buffer + 342, 9);
-#if ISSI_PERSISTENCE > 0
- for (uint8_t i = 0; i < ISSI_PERSISTENCE; i++) {
- if (i2c_transmit(addr << 1, g_twi_transfer_buffer, 10, ISSI_TIMEOUT) != 0) {
+#if IS31FL3741_I2C_PERSISTENCE > 0
+ for (uint8_t i = 0; i < IS31FL3741_I2C_PERSISTENCE; i++) {
+ if (i2c_transmit(addr << 1, g_twi_transfer_buffer, 10, IS31FL3741_I2C_TIMEOUT) != 0) {
return false;
}
}
#else
- if (i2c_transmit(addr << 1, g_twi_transfer_buffer, 10, ISSI_TIMEOUT) != 0) {
+ if (i2c_transmit(addr << 1, g_twi_transfer_buffer, 10, IS31FL3741_I2C_TIMEOUT) != 0) {
return false;
}
#endif
@@ -148,6 +125,36 @@ bool is31fl3741_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer) {
return true;
}
+void is31fl3741_init_drivers(void) {
+ i2c_init();
+
+ is31fl3741_init(IS31FL3741_I2C_ADDRESS_1);
+#if defined(IS31FL3741_I2C_ADDRESS_2)
+ is31fl3741_init(IS31FL3741_I2C_ADDRESS_2);
+# if defined(IS31FL3741_I2C_ADDRESS_3)
+ is31fl3741_init(IS31FL3741_I2C_ADDRESS_3);
+# if defined(IS31FL3741_I2C_ADDRESS_4)
+ is31fl3741_init(IS31FL3741_I2C_ADDRESS_4);
+# endif
+# endif
+#endif
+
+ for (int i = 0; i < IS31FL3741_LED_COUNT; i++) {
+ is31fl3741_set_led_control_register(i, true, true, true);
+ }
+
+ is31fl3741_update_led_control_registers(IS31FL3741_I2C_ADDRESS_1, 0);
+#if defined(IS31FL3741_I2C_ADDRESS_2)
+ is31fl3741_update_led_control_registers(IS31FL3741_I2C_ADDRESS_2, 1);
+# if defined(IS31FL3741_I2C_ADDRESS_3)
+ is31fl3741_update_led_control_registers(IS31FL3741_I2C_ADDRESS_3, 2);
+# if defined(IS31FL3741_I2C_ADDRESS_4)
+ is31fl3741_update_led_control_registers(IS31FL3741_I2C_ADDRESS_4, 3);
+# endif
+# endif
+#endif
+}
+
void is31fl3741_init(uint8_t addr) {
// In order to avoid the LEDs being driven with garbage data
// in the LED driver's PWM registers, shutdown is enabled last.
@@ -156,18 +163,20 @@ void is31fl3741_init(uint8_t addr) {
// Unlock the command register.
// Unlock the command register.
- is31fl3741_write_register(addr, ISSI_COMMANDREGISTER_WRITELOCK, 0xC5);
+ is31fl3741_write_register(addr, IS31FL3741_REG_COMMAND_WRITE_LOCK, IS31FL3741_COMMAND_WRITE_LOCK_MAGIC);
// Select PG4
- is31fl3741_write_register(addr, ISSI_COMMANDREGISTER, ISSI_PAGE_FUNCTION);
+ is31fl3741_write_register(addr, IS31FL3741_REG_COMMAND, IS31FL3741_COMMAND_FUNCTION);
// Set to Normal operation
- is31fl3741_write_register(addr, ISSI_REG_CONFIGURATION, 0x01);
+ is31fl3741_write_register(addr, IS31FL3741_FUNCTION_REG_CONFIGURATION, IS31FL3741_CONFIGURATION);
// Set Golbal Current Control Register
- is31fl3741_write_register(addr, ISSI_REG_GLOBALCURRENT, ISSI_GLOBALCURRENT);
+ is31fl3741_write_register(addr, IS31FL3741_FUNCTION_REG_GLOBAL_CURRENT, IS31FL3741_GLOBAL_CURRENT);
// Set Pull up & Down for SWx CSy
- is31fl3741_write_register(addr, ISSI_REG_PULLDOWNUP, ((ISSI_CSPULLUP << 4) | ISSI_SWPULLUP));
+ is31fl3741_write_register(addr, IS31FL3741_FUNCTION_REG_PULLDOWNUP, ((IS31FL3741_CS_PULLDOWN << 4) | IS31FL3741_SW_PULLUP));
+ // Set PWM frequency
+ is31fl3741_write_register(addr, IS31FL3741_FUNCTION_REG_PWM_FREQUENCY, (IS31FL3741_PWM_FREQUENCY & 0b1111));
// is31fl3741_update_led_scaling_registers(addr, 0xFF, 0xFF, 0xFF);
@@ -176,9 +185,9 @@ void is31fl3741_init(uint8_t addr) {
}
void is31fl3741_set_color(int index, uint8_t red, uint8_t green, uint8_t blue) {
- is31_led led;
- if (index >= 0 && index < RGB_MATRIX_LED_COUNT) {
- memcpy_P(&led, (&g_is31_leds[index]), sizeof(led));
+ is31fl3741_led_t led;
+ if (index >= 0 && index < IS31FL3741_LED_COUNT) {
+ memcpy_P(&led, (&g_is31fl3741_leds[index]), sizeof(led));
if (g_pwm_buffer[led.driver][led.r] == red && g_pwm_buffer[led.driver][led.g] == green && g_pwm_buffer[led.driver][led.b] == blue) {
return;
@@ -191,14 +200,14 @@ void is31fl3741_set_color(int index, uint8_t red, uint8_t green, uint8_t blue) {
}
void is31fl3741_set_color_all(uint8_t red, uint8_t green, uint8_t blue) {
- for (int i = 0; i < RGB_MATRIX_LED_COUNT; i++) {
+ for (int i = 0; i < IS31FL3741_LED_COUNT; i++) {
is31fl3741_set_color(i, red, green, blue);
}
}
void is31fl3741_set_led_control_register(uint8_t index, bool red, bool green, bool blue) {
- is31_led led;
- memcpy_P(&led, (&g_is31_leds[index]), sizeof(led));
+ is31fl3741_led_t led;
+ memcpy_P(&led, (&g_is31fl3741_leds[index]), sizeof(led));
if (red) {
g_scaling_registers[led.driver][led.r] = 0xFF;
@@ -224,8 +233,8 @@ void is31fl3741_set_led_control_register(uint8_t index, bool red, bool green, bo
void is31fl3741_update_pwm_buffers(uint8_t addr, uint8_t index) {
if (g_pwm_buffer_update_required[index]) {
// unlock the command register and select PG2
- is31fl3741_write_register(addr, ISSI_COMMANDREGISTER_WRITELOCK, 0xC5);
- is31fl3741_write_register(addr, ISSI_COMMANDREGISTER, ISSI_PAGE_PWM0);
+ is31fl3741_write_register(addr, IS31FL3741_REG_COMMAND_WRITE_LOCK, IS31FL3741_COMMAND_WRITE_LOCK_MAGIC);
+ is31fl3741_write_register(addr, IS31FL3741_REG_COMMAND, IS31FL3741_COMMAND_PWM_0);
is31fl3741_write_pwm_buffer(addr, g_pwm_buffer[index]);
}
@@ -233,7 +242,7 @@ void is31fl3741_update_pwm_buffers(uint8_t addr, uint8_t index) {
g_pwm_buffer_update_required[index] = false;
}
-void is31fl3741_set_pwm_buffer(const is31_led *pled, uint8_t red, uint8_t green, uint8_t blue) {
+void is31fl3741_set_pwm_buffer(const is31fl3741_led_t *pled, uint8_t red, uint8_t green, uint8_t blue) {
g_pwm_buffer[pled->driver][pled->r] = red;
g_pwm_buffer[pled->driver][pled->g] = green;
g_pwm_buffer[pled->driver][pled->b] = blue;
@@ -244,8 +253,8 @@ void is31fl3741_set_pwm_buffer(const is31_led *pled, uint8_t red, uint8_t green,
void is31fl3741_update_led_control_registers(uint8_t addr, uint8_t index) {
if (g_scaling_registers_update_required[index]) {
// unlock the command register and select PG2
- is31fl3741_write_register(addr, ISSI_COMMANDREGISTER_WRITELOCK, 0xC5);
- is31fl3741_write_register(addr, ISSI_COMMANDREGISTER, ISSI_PAGE_SCALING_0);
+ is31fl3741_write_register(addr, IS31FL3741_REG_COMMAND_WRITE_LOCK, IS31FL3741_COMMAND_WRITE_LOCK_MAGIC);
+ is31fl3741_write_register(addr, IS31FL3741_REG_COMMAND, IS31FL3741_COMMAND_SCALING_0);
// CS1_SW1 to CS30_SW6 are on PG2
for (int i = CS1_SW1; i <= CS30_SW6; ++i) {
@@ -253,8 +262,8 @@ void is31fl3741_update_led_control_registers(uint8_t addr, uint8_t index) {
}
// unlock the command register and select PG3
- is31fl3741_write_register(addr, ISSI_COMMANDREGISTER_WRITELOCK, 0xC5);
- is31fl3741_write_register(addr, ISSI_COMMANDREGISTER, ISSI_PAGE_SCALING_1);
+ is31fl3741_write_register(addr, IS31FL3741_REG_COMMAND_WRITE_LOCK, IS31FL3741_COMMAND_WRITE_LOCK_MAGIC);
+ is31fl3741_write_register(addr, IS31FL3741_REG_COMMAND, IS31FL3741_COMMAND_SCALING_1);
// CS1_SW7 to CS39_SW9 are on PG3
for (int i = CS1_SW7; i <= CS39_SW9; ++i) {
@@ -265,10 +274,23 @@ void is31fl3741_update_led_control_registers(uint8_t addr, uint8_t index) {
}
}
-void is31fl3741_set_scaling_registers(const is31_led *pled, uint8_t red, uint8_t green, uint8_t blue) {
+void is31fl3741_set_scaling_registers(const is31fl3741_led_t *pled, uint8_t red, uint8_t green, uint8_t blue) {
g_scaling_registers[pled->driver][pled->r] = red;
g_scaling_registers[pled->driver][pled->g] = green;
g_scaling_registers[pled->driver][pled->b] = blue;
g_scaling_registers_update_required[pled->driver] = true;
}
+
+void is31fl3741_flush(void) {
+ is31fl3741_update_pwm_buffers(IS31FL3741_I2C_ADDRESS_1, 0);
+#if defined(IS31FL3741_I2C_ADDRESS_2)
+ is31fl3741_update_pwm_buffers(IS31FL3741_I2C_ADDRESS_2, 1);
+# if defined(IS31FL3741_I2C_ADDRESS_3)
+ is31fl3741_update_pwm_buffers(IS31FL3741_I2C_ADDRESS_3, 2);
+# if defined(IS31FL3741_I2C_ADDRESS_4)
+ is31fl3741_update_pwm_buffers(IS31FL3741_I2C_ADDRESS_4, 3);
+# endif
+# endif
+#endif
+}
diff --git a/drivers/led/issi/is31fl3741.h b/drivers/led/issi/is31fl3741.h
index 4ae84dc3c65a..6466696b606f 100644
--- a/drivers/led/issi/is31fl3741.h
+++ b/drivers/led/issi/is31fl3741.h
@@ -22,16 +22,103 @@
#include
#include
#include "progmem.h"
+#include "util.h"
-typedef struct is31_led {
- uint32_t driver : 2;
- uint32_t r : 10;
- uint32_t g : 10;
- uint32_t b : 10;
-} __attribute__((packed)) is31_led;
+// ======== DEPRECATED DEFINES - DO NOT USE ========
+#ifdef DRIVER_ADDR_1
+# define IS31FL3741_I2C_ADDRESS_1 DRIVER_ADDR_1
+#endif
+#ifdef DRIVER_ADDR_2
+# define IS31FL3741_I2C_ADDRESS_2 DRIVER_ADDR_2
+#endif
+#ifdef DRIVER_ADDR_3
+# define IS31FL3741_I2C_ADDRESS_3 DRIVER_ADDR_3
+#endif
+#ifdef DRIVER_ADDR_4
+# define IS31FL3741_I2C_ADDRESS_4 DRIVER_ADDR_4
+#endif
+#ifdef ISSI_TIMEOUT
+# define IS31FL3741_I2C_TIMEOUT ISSI_TIMEOUT
+#endif
+#ifdef ISSI_PERSISTENCE
+# define IS31FL3741_I2C_PERSISTENCE ISSI_PERSISTENCE
+#endif
+#ifdef ISSI_CONFIGURATION
+# define IS31FL3741_CONFIGURATION ISSI_CONFIGURATION
+#endif
+#ifdef ISSI_SWPULLUP
+# define IS31FL3741_SW_PULLUP ISSI_SWPULLUP
+#endif
+#ifdef ISSI_CSPULLUP
+# define IS31FL3741_CS_PULLDOWN ISSI_CSPULLUP
+#endif
+#ifdef ISSI_GLOBALCURRENT
+# define IS31FL3741_GLOBAL_CURRENT ISSI_GLOBALCURRENT
+#endif
-extern const is31_led PROGMEM g_is31_leds[RGB_MATRIX_LED_COUNT];
+#define is31_led is31fl3741_led_t
+#define g_is31_leds g_is31fl3741_leds
+#define PUR_0R IS31FL3741_PUR_0_OHM
+#define PUR_05KR IS31FL3741_PUR_0K5_OHM
+#define PUR_1KR IS31FL3741_PUR_1K_OHM
+#define PUR_2KR IS31FL3741_PUR_2K_OHM
+#define PUR_4KR IS31FL3741_PUR_4K_OHM
+#define PUR_8KR IS31FL3741_PUR_8K_OHM
+#define PUR_16KR IS31FL3741_PUR_16K_OHM
+#define PUR_32KR IS31FL3741_PUR_32K_OHM
+// ========
+
+#define IS31FL3741_REG_INTERRUPT_MASK 0xF0
+#define IS31FL3741_REG_INTERRUPT_STATUS 0xF1
+#define IS31FL3741_REG_ID 0xFC
+
+#define IS31FL3741_REG_COMMAND 0xFD
+
+#define IS31FL3741_COMMAND_PWM_0 0x00
+#define IS31FL3741_COMMAND_PWM_1 0x01
+#define IS31FL3741_COMMAND_SCALING_0 0x02
+#define IS31FL3741_COMMAND_SCALING_1 0x03
+#define IS31FL3741_COMMAND_FUNCTION 0x04
+
+#define IS31FL3741_FUNCTION_REG_CONFIGURATION 0x00
+#define IS31FL3741_FUNCTION_REG_GLOBAL_CURRENT 0x01
+#define IS31FL3741_FUNCTION_REG_PULLDOWNUP 0x02
+#define IS31FL3741_FUNCTION_REG_PWM_FREQUENCY 0x36
+#define IS31FL3741_FUNCTION_REG_RESET 0x3F
+
+#define IS31FL3741_REG_COMMAND_WRITE_LOCK 0xFE
+#define IS31FL3741_COMMAND_WRITE_LOCK_MAGIC 0xC5
+
+#define IS31FL3741_I2C_ADDRESS_GND 0x30
+#define IS31FL3741_I2C_ADDRESS_SCL 0x31
+#define IS31FL3741_I2C_ADDRESS_SDA 0x32
+#define IS31FL3741_I2C_ADDRESS_VCC 0x33
+
+#if defined(RGB_MATRIX_IS31FL3741)
+# define IS31FL3741_LED_COUNT RGB_MATRIX_LED_COUNT
+#endif
+
+#if defined(IS31FL3741_I2C_ADDRESS_4)
+# define IS31FL3741_DRIVER_COUNT 4
+#elif defined(IS31FL3741_I2C_ADDRESS_3)
+# define IS31FL3741_DRIVER_COUNT 3
+#elif defined(IS31FL3741_I2C_ADDRESS_2)
+# define IS31FL3741_DRIVER_COUNT 2
+#elif defined(IS31FL3741_I2C_ADDRESS_1)
+# define IS31FL3741_DRIVER_COUNT 1
+#endif
+
+typedef struct is31fl3741_led_t {
+ uint8_t driver : 2;
+ uint16_t r : 9;
+ uint16_t g : 9;
+ uint16_t b : 9;
+} PACKED is31fl3741_led_t;
+
+extern const is31fl3741_led_t PROGMEM g_is31fl3741_leds[IS31FL3741_LED_COUNT];
+
+void is31fl3741_init_drivers(void);
void is31fl3741_init(uint8_t addr);
void is31fl3741_write_register(uint8_t addr, uint8_t reg, uint8_t data);
bool is31fl3741_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer);
@@ -47,18 +134,34 @@ void is31fl3741_set_led_control_register(uint8_t index, bool red, bool green, bo
// If the buffer is dirty, it will update the driver with the buffer.
void is31fl3741_update_pwm_buffers(uint8_t addr, uint8_t index);
void is31fl3741_update_led_control_registers(uint8_t addr, uint8_t index);
-void is31fl3741_set_scaling_registers(const is31_led *pled, uint8_t red, uint8_t green, uint8_t blue);
-
-void is31fl3741_set_pwm_buffer(const is31_led *pled, uint8_t red, uint8_t green, uint8_t blue);
-
-#define PUR_0R 0x00 // No PUR resistor
-#define PUR_05KR 0x01 // 0.5k Ohm resistor
-#define PUR_1KR 0x02 // 1.0k Ohm resistor
-#define PUR_2KR 0x03 // 2.0k Ohm resistor
-#define PUR_4KR 0x04 // 4.0k Ohm resistor
-#define PUR_8KR 0x05 // 8.0k Ohm resistor
-#define PUR_16KR 0x06 // 16k Ohm resistor
-#define PUR_32KR 0x07 // 32k Ohm resistor
+void is31fl3741_set_scaling_registers(const is31fl3741_led_t *pled, uint8_t red, uint8_t green, uint8_t blue);
+
+void is31fl3741_set_pwm_buffer(const is31fl3741_led_t *pled, uint8_t red, uint8_t green, uint8_t blue);
+
+void is31fl3741_flush(void);
+
+#define IS31FL3741_PDR_0_OHM 0b000 // No pull-down resistor
+#define IS31FL3741_PDR_0K5_OHM 0b001 // 0.5 kOhm resistor
+#define IS31FL3741_PDR_1K_OHM 0b010 // 1 kOhm resistor
+#define IS31FL3741_PDR_2K_OHM 0b011 // 2 kOhm resistor
+#define IS31FL3741_PDR_4K_OHM 0b100 // 4 kOhm resistor
+#define IS31FL3741_PDR_8K_OHM 0b101 // 8 kOhm resistor
+#define IS31FL3741_PDR_16K_OHM 0b110 // 16 kOhm resistor
+#define IS31FL3741_PDR_32K_OHM 0b111 // 32 kOhm resistor
+
+#define IS31FL3741_PUR_0_OHM 0b000 // No pull-up resistor
+#define IS31FL3741_PUR_0K5_OHM 0b001 // 0.5 kOhm resistor
+#define IS31FL3741_PUR_1K_OHM 0b010 // 1 kOhm resistor
+#define IS31FL3741_PUR_2K_OHM 0b011 // 2 kOhm resistor
+#define IS31FL3741_PUR_4K_OHM 0b100 // 4 kOhm resistor
+#define IS31FL3741_PUR_8K_OHM 0b101 // 8 kOhm resistor
+#define IS31FL3741_PUR_16K_OHM 0b110 // 16 kOhm resistor
+#define IS31FL3741_PUR_32K_OHM 0b111 // 32 kOhm resistor
+
+#define IS31FL3741_PWM_FREQUENCY_29K_HZ 0b0000
+#define IS31FL3741_PWM_FREQUENCY_3K6_HZ 0b0011
+#define IS31FL3741_PWM_FREQUENCY_1K8_HZ 0b0111
+#define IS31FL3741_PWM_FREQUENCY_900_HZ 0b1011
#define CS1_SW1 0x00
#define CS2_SW1 0x01
diff --git a/drivers/led/issi/is31fl3743.h b/drivers/led/issi/is31fl3743.h
index d8fcd790963b..706b27125499 100644
--- a/drivers/led/issi/is31fl3743.h
+++ b/drivers/led/issi/is31fl3743.h
@@ -36,7 +36,7 @@
// Set defaults for Spread Spectrum Register
#ifndef ISSI_SSR_1
-# if DRIVER_COUNT == 1
+# ifndef DRIVER_ADDR_2
# define ISSI_SSR_1 0x00
# else
# define ISSI_SSR_1 0xC0
diff --git a/drivers/led/issi/is31fl3745.h b/drivers/led/issi/is31fl3745.h
index ca5dd4a986a8..1e88aab4a8d9 100644
--- a/drivers/led/issi/is31fl3745.h
+++ b/drivers/led/issi/is31fl3745.h
@@ -36,7 +36,7 @@
// Set defaults for Spread Spectrum Register
#ifndef ISSI_SSR_1
-# if DRIVER_COUNT == 1
+# ifndef DRIVER_ADDR_2
# define ISSI_SSR_1 0x00
# else
# define ISSI_SSR_1 0xC0
diff --git a/drivers/led/issi/is31flcommon.c b/drivers/led/issi/is31flcommon.c
index 4b78947ada3a..d6b9bce93d7c 100644
--- a/drivers/led/issi/is31flcommon.c
+++ b/drivers/led/issi/is31flcommon.c
@@ -174,7 +174,55 @@ void IS31FL_common_update_scaling_register(uint8_t addr, uint8_t index) {
}
}
+void IS31FL_common_flush(void) {
+ IS31FL_common_update_pwm_register(DRIVER_ADDR_1, 0);
+#if defined(DRIVER_ADDR_2)
+ IS31FL_common_update_pwm_register(DRIVER_ADDR_2, 1);
+# if defined(DRIVER_ADDR_3)
+ IS31FL_common_update_pwm_register(DRIVER_ADDR_3, 2);
+# if defined(DRIVER_ADDR_4)
+ IS31FL_common_update_pwm_register(DRIVER_ADDR_4, 3);
+# endif
+# endif
+#endif
+}
+
#ifdef RGB_MATRIX_ENABLE
+void IS31FL_RGB_init_drivers(void) {
+ i2c_init();
+
+ IS31FL_common_init(DRIVER_ADDR_1, ISSI_SSR_1);
+# if defined(DRIVER_ADDR_2)
+ IS31FL_common_init(DRIVER_ADDR_2, ISSI_SSR_2);
+# if defined(DRIVER_ADDR_3)
+ IS31FL_common_init(DRIVER_ADDR_3, ISSI_SSR_3);
+# if defined(DRIVER_ADDR_4)
+ IS31FL_common_init(DRIVER_ADDR_4, ISSI_SSR_4);
+# endif
+# endif
+# endif
+
+ for (int i = 0; i < RGB_MATRIX_LED_COUNT; i++) {
+ IS31FL_RGB_set_scaling_buffer(i, true, true, true);
+ }
+
+ // This actually updates the LED drivers
+# ifdef ISSI_MANUAL_SCALING
+ IS31FL_set_manual_scaling_buffer();
+# endif
+
+ IS31FL_common_update_scaling_register(DRIVER_ADDR_1, 0);
+# if defined(DRIVER_ADDR_2)
+ IS31FL_common_update_scaling_register(DRIVER_ADDR_2, 1);
+# if defined(DRIVER_ADDR_3)
+ IS31FL_common_update_scaling_register(DRIVER_ADDR_3, 2);
+# if defined(DRIVER_ADDR_4)
+ IS31FL_common_update_scaling_register(DRIVER_ADDR_4, 3);
+# endif
+# endif
+# endif
+}
+
// Colour is set by adjusting PWM register
void IS31FL_RGB_set_color(int index, uint8_t red, uint8_t green, uint8_t blue) {
if (index >= 0 && index < RGB_MATRIX_LED_COUNT) {
@@ -218,6 +266,41 @@ void IS31FL_RGB_set_scaling_buffer(uint8_t index, bool red, bool green, bool blu
#elif defined(LED_MATRIX_ENABLE)
// LED Matrix Specific scripts
+void IS31FL_simple_init_drivers(void) {
+ i2c_init();
+
+ IS31FL_common_init(DRIVER_ADDR_1, ISSI_SSR_1);
+# if defined(DRIVER_ADDR_2)
+ IS31FL_common_init(DRIVER_ADDR_2, ISSI_SSR_2);
+# if defined(DRIVER_ADDR_3)
+ IS31FL_common_init(DRIVER_ADDR_3, ISSI_SSR_3);
+# if defined(DRIVER_ADDR_4)
+ IS31FL_common_init(DRIVER_ADDR_4, ISSI_SSR_4);
+# endif
+# endif
+# endif
+
+ for (int i = 0; i < LED_MATRIX_LED_COUNT; i++) {
+ IS31FL_simple_set_scaling_buffer(i, true);
+ }
+
+// This actually updates the LED drivers
+# ifdef ISSI_MANUAL_SCALING
+ IS31FL_set_manual_scaling_buffer();
+# endif
+
+ IS31FL_common_update_scaling_register(DRIVER_ADDR_1, 0);
+# if defined(DRIVER_ADDR_2)
+ IS31FL_common_update_scaling_register(DRIVER_ADDR_2, 1);
+# if defined(DRIVER_ADDR_3)
+ IS31FL_common_update_scaling_register(DRIVER_ADDR_3, 2);
+# if defined(DRIVER_ADDR_4)
+ IS31FL_common_update_scaling_register(DRIVER_ADDR_4, 3);
+# endif
+# endif
+# endif
+}
+
void IS31FL_simple_set_scaling_buffer(uint8_t index, bool value) {
is31_led led;
memcpy_P(&led, (&g_is31_leds[index]), sizeof(led));
diff --git a/drivers/led/issi/is31flcommon.h b/drivers/led/issi/is31flcommon.h
index 4b3add558b6b..10613a6eed80 100644
--- a/drivers/led/issi/is31flcommon.h
+++ b/drivers/led/issi/is31flcommon.h
@@ -23,33 +23,44 @@
#include
#include
#include "progmem.h"
+#include "util.h"
// Which variant header file to use
-#ifdef IS31FL3742A
+#if defined(LED_MATRIX_IS31FL3742A) || defined(RGB_MATRIX_IS31FL3742A)
# include "is31fl3742.h"
-#elif defined(IS31FL3743A)
+#elif defined(LED_MATRIX_IS31FL3743A) || defined(RGB_MATRIX_IS31FL3743A)
# include "is31fl3743.h"
-#elif defined(IS31FL3745)
+#elif defined(LED_MATRIX_IS31FL3745) || defined(RGB_MATRIX_IS31FL3745)
# include "is31fl3745.h"
-#elif defined(IS31FL3746A)
+#elif defined(LED_MATRIX_IS31FL3746A) || defined(RGB_MATRIX_IS31FL3746A)
# include "is31fl3746.h"
#endif
+#if defined DRIVER_ADDR_4
+# define DRIVER_COUNT 4
+#elif defined DRIVER_ADDR_3
+# define DRIVER_COUNT 3
+#elif defined DRIVER_ADDR_2
+# define DRIVER_COUNT 2
+#elif defined DRIVER_ADDR_1
+# define DRIVER_COUNT 1
+#endif
+
#ifdef RGB_MATRIX_ENABLE
typedef struct is31_led {
- uint8_t driver;
+ uint8_t driver : 2;
uint8_t r;
uint8_t g;
uint8_t b;
-} __attribute__((packed)) is31_led;
+} PACKED is31_led;
extern const is31_led PROGMEM g_is31_leds[RGB_MATRIX_LED_COUNT];
#elif defined(LED_MATRIX_ENABLE)
typedef struct is31_led {
- uint8_t driver;
+ uint8_t driver : 2;
uint8_t v;
-} __attribute__((packed)) is31_led;
+} PACKED is31_led;
extern const is31_led PROGMEM g_is31_leds[LED_MATRIX_LED_COUNT];
#endif
@@ -67,13 +78,17 @@ void IS31FL_common_init(uint8_t addr, uint8_t ssr);
void IS31FL_common_update_pwm_register(uint8_t addr, uint8_t index);
void IS31FL_common_update_scaling_register(uint8_t addr, uint8_t index);
+void IS31FL_common_flush(void);
+
#ifdef RGB_MATRIX_ENABLE
// RGB Matrix Specific scripts
+void IS31FL_RGB_init_drivers(void);
void IS31FL_RGB_set_color(int index, uint8_t red, uint8_t green, uint8_t blue);
void IS31FL_RGB_set_color_all(uint8_t red, uint8_t green, uint8_t blue);
void IS31FL_RGB_set_scaling_buffer(uint8_t index, bool red, bool green, bool blue);
#elif defined(LED_MATRIX_ENABLE)
// LED Matrix Specific scripts
+void IS31FL_simple_init_drivers(void);
void IS31FL_simple_set_scaling_buffer(uint8_t index, bool value);
void IS31FL_simple_set_brightness(int index, uint8_t value);
void IS31FL_simple_set_brigntness_all(uint8_t value);
diff --git a/drivers/led/snled27351-simple.c b/drivers/led/snled27351-simple.c
new file mode 100644
index 000000000000..b2054c96d54f
--- /dev/null
+++ b/drivers/led/snled27351-simple.c
@@ -0,0 +1,266 @@
+/* Copyright 2021 @ Keychron (https://www.keychron.com)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include "snled27351-simple.h"
+#include "i2c_master.h"
+
+#define SNLED27351_PWM_REGISTER_COUNT 192
+#define SNLED27351_LED_CONTROL_REGISTER_COUNT 24
+
+#ifndef SNLED27351_I2C_TIMEOUT
+# define SNLED27351_I2C_TIMEOUT 100
+#endif
+
+#ifndef SNLED27351_I2C_PERSISTENCE
+# define SNLED27351_I2C_PERSISTENCE 0
+#endif
+
+#ifndef SNLED27351_PHASE_CHANNEL
+# define SNLED27351_PHASE_CHANNEL SNLED27351_SCAN_PHASE_12_CHANNEL
+#endif
+
+#ifndef SNLED27351_CURRENT_TUNE
+# define SNLED27351_CURRENT_TUNE \
+ { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }
+#endif
+
+// Transfer buffer for TWITransmitData()
+uint8_t g_twi_transfer_buffer[20];
+
+// These buffers match the SNLED27351 PWM registers.
+// The control buffers match the PG0 LED On/Off registers.
+// Storing them like this is optimal for I2C transfers to the registers.
+// We could optimize this and take out the unused registers from these
+// buffers and the transfers in snled27351_write_pwm_buffer() but it's
+// probably not worth the extra complexity.
+uint8_t g_pwm_buffer[SNLED27351_DRIVER_COUNT][SNLED27351_PWM_REGISTER_COUNT];
+bool g_pwm_buffer_update_required[SNLED27351_DRIVER_COUNT] = {false};
+
+uint8_t g_led_control_registers[SNLED27351_DRIVER_COUNT][SNLED27351_LED_CONTROL_REGISTER_COUNT] = {0};
+bool g_led_control_registers_update_required[SNLED27351_DRIVER_COUNT] = {false};
+
+bool snled27351_write_register(uint8_t addr, uint8_t reg, uint8_t data) {
+ // If the transaction fails function returns false.
+ g_twi_transfer_buffer[0] = reg;
+ g_twi_transfer_buffer[1] = data;
+
+#if SNLED27351_I2C_PERSISTENCE > 0
+ for (uint8_t i = 0; i < SNLED27351_I2C_PERSISTENCE; i++) {
+ if (i2c_transmit(addr << 1, g_twi_transfer_buffer, 2, SNLED27351_I2C_TIMEOUT) != 0) {
+ return false;
+ }
+ }
+#else
+ if (i2c_transmit(addr << 1, g_twi_transfer_buffer, 2, SNLED27351_I2C_TIMEOUT) != 0) {
+ return false;
+ }
+#endif
+ return true;
+}
+
+bool snled27351_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer) {
+ // Assumes PG1 is already selected.
+ // If any of the transactions fails function returns false.
+ // Transmit PWM registers in 12 transfers of 16 bytes.
+ // g_twi_transfer_buffer[] is 20 bytes
+
+ // Iterate over the pwm_buffer contents at 16 byte intervals.
+ for (int i = 0; i < SNLED27351_PWM_REGISTER_COUNT; i += 16) {
+ g_twi_transfer_buffer[0] = i;
+ // Copy the data from i to i+15.
+ // Device will auto-increment register for data after the first byte
+ // Thus this sets registers 0x00-0x0F, 0x10-0x1F, etc. in one transfer.
+ for (int j = 0; j < 16; j++) {
+ g_twi_transfer_buffer[1 + j] = pwm_buffer[i + j];
+ }
+
+#if SNLED27351_I2C_PERSISTENCE > 0
+ for (uint8_t i = 0; i < SNLED27351_I2C_PERSISTENCE; i++) {
+ if (i2c_transmit(addr << 1, g_twi_transfer_buffer, 17, SNLED27351_I2C_TIMEOUT) != 0) {
+ return false;
+ }
+ }
+#else
+ if (i2c_transmit(addr << 1, g_twi_transfer_buffer, 17, SNLED27351_I2C_TIMEOUT) != 0) {
+ return false;
+ }
+#endif
+ }
+ return true;
+}
+
+void snled27351_init_drivers(void) {
+ i2c_init();
+
+ snled27351_init(SNLED27351_I2C_ADDRESS_1);
+#if defined(SNLED27351_I2C_ADDRESS_2)
+ snled27351_init(SNLED27351_I2C_ADDRESS_2);
+# if defined(SNLED27351_I2C_ADDRESS_3)
+ snled27351_init(SNLED27351_I2C_ADDRESS_3);
+# if defined(SNLED27351_I2C_ADDRESS_4)
+ snled27351_init(SNLED27351_I2C_ADDRESS_4);
+# endif
+# endif
+#endif
+
+ for (int i = 0; i < SNLED27351_LED_COUNT; i++) {
+ snled27351_set_led_control_register(i, true);
+ }
+
+ snled27351_update_led_control_registers(SNLED27351_I2C_ADDRESS_1, 0);
+#if defined(SNLED27351_I2C_ADDRESS_2)
+ snled27351_update_led_control_registers(SNLED27351_I2C_ADDRESS_2, 1);
+# if defined(SNLED27351_I2C_ADDRESS_3)
+ snled27351_update_led_control_registers(SNLED27351_I2C_ADDRESS_3, 2);
+# if defined(SNLED27351_I2C_ADDRESS_4)
+ snled27351_update_led_control_registers(SNLED27351_I2C_ADDRESS_4, 3);
+# endif
+# endif
+#endif
+}
+
+void snled27351_init(uint8_t addr) {
+ // Select to function page
+ snled27351_write_register(addr, SNLED27351_REG_COMMAND, SNLED27351_COMMAND_FUNCTION);
+ // Setting LED driver to shutdown mode
+ snled27351_write_register(addr, SNLED27351_FUNCTION_REG_SOFTWARE_SHUTDOWN, SNLED27351_SOFTWARE_SHUTDOWN_SSD_SHUTDOWN);
+ // Setting internal channel pulldown/pullup
+ snled27351_write_register(addr, SNLED27351_FUNCTION_REG_PULLDOWNUP, SNLED27351_PULLDOWNUP_ALL_ENABLED);
+ // Select number of scan phase
+ snled27351_write_register(addr, SNLED27351_FUNCTION_REG_SCAN_PHASE, SNLED27351_PHASE_CHANNEL);
+ // Setting PWM Delay Phase
+ snled27351_write_register(addr, SNLED27351_FUNCTION_REG_SLEW_RATE_CONTROL_MODE_1, SNLED27351_SLEW_RATE_CONTROL_MODE_1_PDP_ENABLE);
+ // Setting Driving/Sinking Channel Slew Rate
+ snled27351_write_register(addr, SNLED27351_FUNCTION_REG_SLEW_RATE_CONTROL_MODE_2, SNLED27351_SLEW_RATE_CONTROL_MODE_2_DSL_ENABLE | SNLED27351_SLEW_RATE_CONTROL_MODE_2_SSL_ENABLE);
+ // Setting Iref
+ snled27351_write_register(addr, SNLED27351_FUNCTION_REG_SOFTWARE_SLEEP, 0);
+ // Set LED CONTROL PAGE (Page 0)
+ snled27351_write_register(addr, SNLED27351_REG_COMMAND, SNLED27351_COMMAND_LED_CONTROL);
+ for (int i = 0; i < SNLED27351_LED_CONTROL_ON_OFF_LENGTH; i++) {
+ snled27351_write_register(addr, i, 0x00);
+ }
+
+ // Set PWM PAGE (Page 1)
+ snled27351_write_register(addr, SNLED27351_REG_COMMAND, SNLED27351_COMMAND_PWM);
+ for (int i = 0; i < SNLED27351_LED_CURRENT_TUNE_LENGTH; i++) {
+ snled27351_write_register(addr, i, 0x00);
+ }
+
+ // Set CURRENT PAGE (Page 4)
+ uint8_t current_tune_reg_list[SNLED27351_LED_CURRENT_TUNE_LENGTH] = SNLED27351_CURRENT_TUNE;
+ snled27351_write_register(addr, SNLED27351_REG_COMMAND, SNLED27351_COMMAND_CURRENT_TUNE);
+ for (int i = 0; i < SNLED27351_LED_CURRENT_TUNE_LENGTH; i++) {
+ snled27351_write_register(addr, i, current_tune_reg_list[i]);
+ }
+
+ // Enable LEDs ON/OFF
+ snled27351_write_register(addr, SNLED27351_REG_COMMAND, SNLED27351_COMMAND_LED_CONTROL);
+ for (int i = 0; i < SNLED27351_LED_CONTROL_ON_OFF_LENGTH; i++) {
+ snled27351_write_register(addr, i, 0xFF);
+ }
+
+ // Select to function page
+ snled27351_write_register(addr, SNLED27351_REG_COMMAND, SNLED27351_COMMAND_FUNCTION);
+ // Setting LED driver to normal mode
+ snled27351_write_register(addr, SNLED27351_FUNCTION_REG_SOFTWARE_SHUTDOWN, SNLED27351_SOFTWARE_SHUTDOWN_SSD_NORMAL);
+}
+
+void snled27351_set_value(int index, uint8_t value) {
+ snled27351_led_t led;
+ if (index >= 0 && index < SNLED27351_LED_COUNT) {
+ memcpy_P(&led, (&g_snled27351_leds[index]), sizeof(led));
+
+ if (g_pwm_buffer[led.driver][led.v] == value) {
+ return;
+ }
+ g_pwm_buffer[led.driver][led.v] = value;
+ g_pwm_buffer_update_required[led.driver] = true;
+ }
+}
+
+void snled27351_set_value_all(uint8_t value) {
+ for (int i = 0; i < SNLED27351_LED_COUNT; i++) {
+ snled27351_set_value(i, value);
+ }
+}
+
+void snled27351_set_led_control_register(uint8_t index, bool value) {
+ snled27351_led_t led;
+ memcpy_P(&led, (&g_snled27351_leds[index]), sizeof(led));
+
+ uint8_t control_register = led.v / 8;
+ uint8_t bit_value = led.v % 8;
+
+ if (value) {
+ g_led_control_registers[led.driver][control_register] |= (1 << bit_value);
+ } else {
+ g_led_control_registers[led.driver][control_register] &= ~(1 << bit_value);
+ }
+
+ g_led_control_registers_update_required[led.driver] = true;
+}
+
+void snled27351_update_pwm_buffers(uint8_t addr, uint8_t index) {
+ if (g_pwm_buffer_update_required[index]) {
+ snled27351_write_register(addr, SNLED27351_REG_COMMAND, SNLED27351_COMMAND_PWM);
+
+ // If any of the transactions fail we risk writing dirty PG0,
+ // refresh page 0 just in case.
+ if (!snled27351_write_pwm_buffer(addr, g_pwm_buffer[index])) {
+ g_led_control_registers_update_required[index] = true;
+ }
+ }
+ g_pwm_buffer_update_required[index] = false;
+}
+
+void snled27351_update_led_control_registers(uint8_t addr, uint8_t index) {
+ if (g_led_control_registers_update_required[index]) {
+ snled27351_write_register(addr, SNLED27351_REG_COMMAND, SNLED27351_COMMAND_LED_CONTROL);
+ for (int i = 0; i < SNLED27351_LED_CONTROL_REGISTER_COUNT; i++) {
+ snled27351_write_register(addr, i, g_led_control_registers[index][i]);
+ }
+ }
+ g_led_control_registers_update_required[index] = false;
+}
+
+void snled27351_flush(void) {
+ snled27351_update_pwm_buffers(SNLED27351_I2C_ADDRESS_1, 0);
+#if defined(SNLED27351_I2C_ADDRESS_2)
+ snled27351_update_pwm_buffers(SNLED27351_I2C_ADDRESS_2, 1);
+# if defined(SNLED27351_I2C_ADDRESS_3)
+ snled27351_update_pwm_buffers(SNLED27351_I2C_ADDRESS_3, 2);
+# if defined(SNLED27351_I2C_ADDRESS_4)
+ snled27351_update_pwm_buffers(SNLED27351_I2C_ADDRESS_4, 3);
+# endif
+# endif
+#endif
+}
+
+void snled27351_sw_return_normal(uint8_t addr) {
+ // Select to function page
+ snled27351_write_register(addr, SNLED27351_REG_COMMAND, SNLED27351_COMMAND_FUNCTION);
+ // Setting LED driver to normal mode
+ snled27351_write_register(addr, SNLED27351_FUNCTION_REG_SOFTWARE_SHUTDOWN, SNLED27351_SOFTWARE_SHUTDOWN_SSD_NORMAL);
+}
+
+void snled27351_sw_shutdown(uint8_t addr) {
+ // Select to function page
+ snled27351_write_register(addr, SNLED27351_REG_COMMAND, SNLED27351_COMMAND_FUNCTION);
+ // Setting LED driver to shutdown mode
+ snled27351_write_register(addr, SNLED27351_FUNCTION_REG_SOFTWARE_SHUTDOWN, SNLED27351_SOFTWARE_SHUTDOWN_SSD_SHUTDOWN);
+ // Write SW Sleep Register
+ snled27351_write_register(addr, SNLED27351_FUNCTION_REG_SOFTWARE_SLEEP, SNLED27351_SOFTWARE_SLEEP_ENABLE);
+}
diff --git a/drivers/led/snled27351-simple.h b/drivers/led/snled27351-simple.h
new file mode 100644
index 000000000000..2fc62a6f0a74
--- /dev/null
+++ b/drivers/led/snled27351-simple.h
@@ -0,0 +1,380 @@
+/* Copyright 2021 @ Keychron (https://www.keychron.com)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#pragma once
+
+#include
+#include
+#include "progmem.h"
+#include "util.h"
+
+// ======== DEPRECATED DEFINES - DO NOT USE ========
+#ifdef CKLED2001_TIMEOUT
+# define SNLED27351_I2C_TIMEOUT CKLED2001_TIMEOUT
+#endif
+#ifdef CKLED2001_PERSISTENCE
+# define SNLED27351_I2C_PERSISTENCE CKLED2001_PERSISTENCE
+#endif
+#ifdef PHASE_CHANNEL
+# define SNLED27351_PHASE_CHANNEL PHASE_CHANNEL
+#endif
+#ifdef CKLED2001_CURRENT_TUNE
+# define SNLED27351_CURRENT_TUNE CKLED2001_CURRENT_TUNE
+#endif
+
+#define MSKPHASE_12CHANNEL SNLED27351_SCAN_PHASE_12_CHANNEL
+#define MSKPHASE_11CHANNEL SNLED27351_SCAN_PHASE_11_CHANNEL
+#define MSKPHASE_10CHANNEL SNLED27351_SCAN_PHASE_10_CHANNEL
+#define MSKPHASE_9CHANNEL SNLED27351_SCAN_PHASE_9_CHANNEL
+#define MSKPHASE_8CHANNEL SNLED27351_SCAN_PHASE_8_CHANNEL
+#define MSKPHASE_7CHANNEL SNLED27351_SCAN_PHASE_7_CHANNEL
+#define MSKPHASE_6CHANNEL SNLED27351_SCAN_PHASE_6_CHANNEL
+#define MSKPHASE_5CHANNEL SNLED27351_SCAN_PHASE_5_CHANNEL
+#define MSKPHASE_4CHANNEL SNLED27351_SCAN_PHASE_4_CHANNEL
+#define MSKPHASE_3CHANNEL SNLED27351_SCAN_PHASE_3_CHANNEL
+#define MSKPHASE_2CHANNEL SNLED27351_SCAN_PHASE_2_CHANNEL
+#define MSKPHASE_1CHANNEL SNLED27351_SCAN_PHASE_1_CHANNEL
+
+#define ckled2001_led snled27351_led_t
+#define g_ckled2001_leds g_snled27351_leds
+// ========
+
+#define SNLED27351_REG_COMMAND 0xFD
+#define SNLED27351_COMMAND_LED_CONTROL 0x00
+#define SNLED27351_COMMAND_PWM 0x01
+#define SNLED27351_COMMAND_FUNCTION 0x03
+#define SNLED27351_COMMAND_CURRENT_TUNE 0x04
+
+#define SNLED27351_FUNCTION_REG_SOFTWARE_SHUTDOWN 0x00
+#define SNLED27351_SOFTWARE_SHUTDOWN_SSD_SHUTDOWN (0x0 << 0)
+#define SNLED27351_SOFTWARE_SHUTDOWN_SSD_NORMAL (0x1 << 0)
+
+#define SNLED27351_FUNCTION_REG_ID 0x11
+#define SNLED27351_DRIVER_ID 0x8A
+
+#define SNLED27351_FUNCTION_REG_PULLDOWNUP 0x13
+#define SNLED27351_PULLDOWNUP_ALL_ENABLED 0xAA
+
+#define SNLED27351_FUNCTION_REG_SCAN_PHASE 0x14
+#define SNLED27351_SCAN_PHASE_12_CHANNEL 0x00
+#define SNLED27351_SCAN_PHASE_11_CHANNEL 0x01
+#define SNLED27351_SCAN_PHASE_10_CHANNEL 0x02
+#define SNLED27351_SCAN_PHASE_9_CHANNEL 0x03
+#define SNLED27351_SCAN_PHASE_8_CHANNEL 0x04
+#define SNLED27351_SCAN_PHASE_7_CHANNEL 0x05
+#define SNLED27351_SCAN_PHASE_6_CHANNEL 0x06
+#define SNLED27351_SCAN_PHASE_5_CHANNEL 0x07
+#define SNLED27351_SCAN_PHASE_4_CHANNEL 0x08
+#define SNLED27351_SCAN_PHASE_3_CHANNEL 0x09
+#define SNLED27351_SCAN_PHASE_2_CHANNEL 0x0A
+#define SNLED27351_SCAN_PHASE_1_CHANNEL 0x0B
+
+#define SNLED27351_FUNCTION_REG_SLEW_RATE_CONTROL_MODE_1 0x15
+#define SNLED27351_SLEW_RATE_CONTROL_MODE_1_PDP_ENABLE (0b1 << 2)
+
+#define SNLED27351_FUNCTION_REG_SLEW_RATE_CONTROL_MODE_2 0x16
+#define SNLED27351_SLEW_RATE_CONTROL_MODE_2_SSL_ENABLE (0b1 << 6)
+#define SNLED27351_SLEW_RATE_CONTROL_MODE_2_DSL_ENABLE (0b1 << 7)
+
+#define SNLED27351_FUNCTION_REG_OPEN_SHORT_ENABLE 0x17
+#define SNLED27351_OPEN_SHORT_ENABLE_SDS_ENABLE (0b1 << 6)
+#define SNLED27351_OPEN_SHORT_ENABLE_ODS_ENABLE (0b1 << 7)
+
+#define SNLED27351_FUNCTION_REG_OPEN_SHORT_DUTY 0x18
+
+#define SNLED27351_FUNCTION_REG_OPEN_SHORT_FLAG 0x19
+#define SNLED27351_OPEN_SHORT_FLAG_OSINT_ENABLE (0b1 << 6)
+#define SNLED27351_OPEN_SHORT_FLAG_ODINT_ENABLE (0b1 << 7)
+
+#define SNLED27351_FUNCTION_REG_SOFTWARE_SLEEP 0x1A
+#define SNLED27351_SOFTWARE_SLEEP_ENABLE (0b1 << 1)
+
+// LED Control Registers
+#define SNLED27351_LED_CONTROL_ON_OFF_FIRST_ADDR 0x0
+#define SNLED27351_LED_CONTROL_ON_OFF_LAST_ADDR 0x17
+#define SNLED27351_LED_CONTROL_ON_OFF_LENGTH ((SNLED27351_LED_CONTROL_ON_OFF_LAST_ADDR - SNLED27351_LED_CONTROL_ON_OFF_FIRST_ADDR) + 1)
+
+#define SNLED27351_LED_CONTROL_OPEN_FIRST_ADDR 0x18
+#define SNLED27351_LED_CONTROL_OPEN_LAST_ADDR 0x2F
+#define SNLED27351_LED_CONTROL_OPEN_LENGTH ((SNLED27351_LED_CONTROL_OPEN_LAST_ADDR - SNLED27351_LED_CONTROL_OPEN_FIRST_ADDR) + 1)
+
+#define SNLED27351_LED_CONTROL_SHORT_FIRST_ADDR 0x30
+#define SNLED27351_LED_CONTROL_SHORT_LAST_ADDR 0x47
+#define SNLED27351_LED_CONTROL_SHORT_LENGTH ((SNLED27351_LED_CONTROL_SHORT_LAST_ADDR - SNLED27351_LED_CONTROL_SHORT_FIRST_ADDR) + 1)
+
+#define SNLED27351_LED_CONTROL_PAGE_LENGTH 0x48
+
+// LED Control Registers
+#define SNLED27351_LED_PWM_FIRST_ADDR 0x00
+#define SNLED27351_LED_PWM_LAST_ADDR 0xBF
+#define SNLED27351_LED_PWM_LENGTH 0xC0
+
+// Current Tune Registers
+#define SNLED27351_LED_CURRENT_TUNE_FIRST_ADDR 0x00
+#define SNLED27351_LED_CURRENT_TUNE_LAST_ADDR 0x0B
+#define SNLED27351_LED_CURRENT_TUNE_LENGTH 0x0C
+
+#define SNLED27351_I2C_ADDRESS_GND 0x74
+#define SNLED27351_I2C_ADDRESS_SCL 0x75
+#define SNLED27351_I2C_ADDRESS_SDA 0x76
+#define SNLED27351_I2C_ADDRESS_VDDIO 0x77
+
+#if defined(LED_MATRIX_SNLED27351)
+# define SNLED27351_LED_COUNT LED_MATRIX_LED_COUNT
+#endif
+
+#if defined(SNLED27351_I2C_ADDRESS_4)
+# define SNLED27351_DRIVER_COUNT 4
+#elif defined(SNLED27351_I2C_ADDRESS_3)
+# define SNLED27351_DRIVER_COUNT 3
+#elif defined(SNLED27351_I2C_ADDRESS_2)
+# define SNLED27351_DRIVER_COUNT 2
+#elif defined(SNLED27351_I2C_ADDRESS_1)
+# define SNLED27351_DRIVER_COUNT 1
+#endif
+
+typedef struct snled27351_led_t {
+ uint8_t driver : 2;
+ uint8_t v;
+} PACKED snled27351_led_t;
+
+extern const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT];
+
+void snled27351_init_drivers(void);
+void snled27351_init(uint8_t addr);
+bool snled27351_write_register(uint8_t addr, uint8_t reg, uint8_t data);
+bool snled27351_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer);
+
+void snled27351_set_value(int index, uint8_t value);
+void snled27351_set_value_all(uint8_t value);
+
+void snled27351_set_led_control_register(uint8_t index, bool value);
+
+// This should not be called from an interrupt
+// (eg. from a timer interrupt).
+// Call this while idle (in between matrix scans).
+// If the buffer is dirty, it will update the driver with the buffer.
+void snled27351_update_pwm_buffers(uint8_t addr, uint8_t index);
+void snled27351_update_led_control_registers(uint8_t addr, uint8_t index);
+
+void snled27351_flush(void);
+
+void snled27351_sw_return_normal(uint8_t addr);
+void snled27351_sw_shutdown(uint8_t addr);
+
+#define A_1 0x00
+#define A_2 0x01
+#define A_3 0x02
+#define A_4 0x03
+#define A_5 0x04
+#define A_6 0x05
+#define A_7 0x06
+#define A_8 0x07
+#define A_9 0x08
+#define A_10 0x09
+#define A_11 0x0A
+#define A_12 0x0B
+#define A_13 0x0C
+#define A_14 0x0D
+#define A_15 0x0E
+#define A_16 0x0F
+
+#define B_1 0x10
+#define B_2 0x11
+#define B_3 0x12
+#define B_4 0x13
+#define B_5 0x14
+#define B_6 0x15
+#define B_7 0x16
+#define B_8 0x17
+#define B_9 0x18
+#define B_10 0x19
+#define B_11 0x1A
+#define B_12 0x1B
+#define B_13 0x1C
+#define B_14 0x1D
+#define B_15 0x1E
+#define B_16 0x1F
+
+#define C_1 0x20
+#define C_2 0x21
+#define C_3 0x22
+#define C_4 0x23
+#define C_5 0x24
+#define C_6 0x25
+#define C_7 0x26
+#define C_8 0x27
+#define C_9 0x28
+#define C_10 0x29
+#define C_11 0x2A
+#define C_12 0x2B
+#define C_13 0x2C
+#define C_14 0x2D
+#define C_15 0x2E
+#define C_16 0x2F
+
+#define D_1 0x30
+#define D_2 0x31
+#define D_3 0x32
+#define D_4 0x33
+#define D_5 0x34
+#define D_6 0x35
+#define D_7 0x36
+#define D_8 0x37
+#define D_9 0x38
+#define D_10 0x39
+#define D_11 0x3A
+#define D_12 0x3B
+#define D_13 0x3C
+#define D_14 0x3D
+#define D_15 0x3E
+#define D_16 0x3F
+
+#define E_1 0x40
+#define E_2 0x41
+#define E_3 0x42
+#define E_4 0x43
+#define E_5 0x44
+#define E_6 0x45
+#define E_7 0x46
+#define E_8 0x47
+#define E_9 0x48
+#define E_10 0x49
+#define E_11 0x4A
+#define E_12 0x4B
+#define E_13 0x4C
+#define E_14 0x4D
+#define E_15 0x4E
+#define E_16 0x4F
+
+#define F_1 0x50
+#define F_2 0x51
+#define F_3 0x52
+#define F_4 0x53
+#define F_5 0x54
+#define F_6 0x55
+#define F_7 0x56
+#define F_8 0x57
+#define F_9 0x58
+#define F_10 0x59
+#define F_11 0x5A
+#define F_12 0x5B
+#define F_13 0x5C
+#define F_14 0x5D
+#define F_15 0x5E
+#define F_16 0x5F
+
+#define G_1 0x60
+#define G_2 0x61
+#define G_3 0x62
+#define G_4 0x63
+#define G_5 0x64
+#define G_6 0x65
+#define G_7 0x66
+#define G_8 0x67
+#define G_9 0x68
+#define G_10 0x69
+#define G_11 0x6A
+#define G_12 0x6B
+#define G_13 0x6C
+#define G_14 0x6D
+#define G_15 0x6E
+#define G_16 0x6F
+
+#define H_1 0x70
+#define H_2 0x71
+#define H_3 0x72
+#define H_4 0x73
+#define H_5 0x74
+#define H_6 0x75
+#define H_7 0x76
+#define H_8 0x77
+#define H_9 0x78
+#define H_10 0x79
+#define H_11 0x7A
+#define H_12 0x7B
+#define H_13 0x7C
+#define H_14 0x7D
+#define H_15 0x7E
+#define H_16 0x7F
+
+#define I_1 0x80
+#define I_2 0x81
+#define I_3 0x82
+#define I_4 0x83
+#define I_5 0x84
+#define I_6 0x85
+#define I_7 0x86
+#define I_8 0x87
+#define I_9 0x88
+#define I_10 0x89
+#define I_11 0x8A
+#define I_12 0x8B
+#define I_13 0x8C
+#define I_14 0x8D
+#define I_15 0x8E
+#define I_16 0x8F
+
+#define J_1 0x90
+#define J_2 0x91
+#define J_3 0x92
+#define J_4 0x93
+#define J_5 0x94
+#define J_6 0x95
+#define J_7 0x96
+#define J_8 0x97
+#define J_9 0x98
+#define J_10 0x99
+#define J_11 0x9A
+#define J_12 0x9B
+#define J_13 0x9C
+#define J_14 0x9D
+#define J_15 0x9E
+#define J_16 0x9F
+
+#define K_1 0xA0
+#define K_2 0xA1
+#define K_3 0xA2
+#define K_4 0xA3
+#define K_5 0xA4
+#define K_6 0xA5
+#define K_7 0xA6
+#define K_8 0xA7
+#define K_9 0xA8
+#define K_10 0xA9
+#define K_11 0xAA
+#define K_12 0xAB
+#define K_13 0xAC
+#define K_14 0xAD
+#define K_15 0xAE
+#define K_16 0xAF
+
+#define L_1 0xB0
+#define L_2 0xB1
+#define L_3 0xB2
+#define L_4 0xB3
+#define L_5 0xB4
+#define L_6 0xB5
+#define L_7 0xB6
+#define L_8 0xB7
+#define L_9 0xB8
+#define L_10 0xB9
+#define L_11 0xBA
+#define L_12 0xBB
+#define L_13 0xBC
+#define L_14 0xBD
+#define L_15 0xBE
+#define L_16 0xBF
diff --git a/drivers/led/snled27351.c b/drivers/led/snled27351.c
new file mode 100644
index 000000000000..71992b73224b
--- /dev/null
+++ b/drivers/led/snled27351.c
@@ -0,0 +1,281 @@
+/* Copyright 2021 @ Keychron (https://www.keychron.com)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include "snled27351.h"
+#include "i2c_master.h"
+
+#define SNLED27351_PWM_REGISTER_COUNT 192
+#define SNLED27351_LED_CONTROL_REGISTER_COUNT 24
+
+#ifndef SNLED27351_I2C_TIMEOUT
+# define SNLED27351_I2C_TIMEOUT 100
+#endif
+
+#ifndef SNLED27351_I2C_PERSISTENCE
+# define SNLED27351_I2C_PERSISTENCE 0
+#endif
+
+#ifndef SNLED27351_PHASE_CHANNEL
+# define SNLED27351_PHASE_CHANNEL SNLED27351_SCAN_PHASE_12_CHANNEL
+#endif
+
+#ifndef SNLED27351_CURRENT_TUNE
+# define SNLED27351_CURRENT_TUNE \
+ { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }
+#endif
+
+// Transfer buffer for TWITransmitData()
+uint8_t g_twi_transfer_buffer[65];
+
+// These buffers match the SNLED27351 PWM registers.
+// The control buffers match the PG0 LED On/Off registers.
+// Storing them like this is optimal for I2C transfers to the registers.
+// We could optimize this and take out the unused registers from these
+// buffers and the transfers in snled27351_write_pwm_buffer() but it's
+// probably not worth the extra complexity.
+uint8_t g_pwm_buffer[SNLED27351_DRIVER_COUNT][SNLED27351_PWM_REGISTER_COUNT];
+bool g_pwm_buffer_update_required[SNLED27351_DRIVER_COUNT] = {false};
+
+uint8_t g_led_control_registers[SNLED27351_DRIVER_COUNT][SNLED27351_LED_CONTROL_REGISTER_COUNT] = {0};
+bool g_led_control_registers_update_required[SNLED27351_DRIVER_COUNT] = {false};
+
+bool snled27351_write_register(uint8_t addr, uint8_t reg, uint8_t data) {
+ // If the transaction fails function returns false.
+ g_twi_transfer_buffer[0] = reg;
+ g_twi_transfer_buffer[1] = data;
+
+#if SNLED27351_I2C_PERSISTENCE > 0
+ for (uint8_t i = 0; i < SNLED27351_I2C_PERSISTENCE; i++) {
+ if (i2c_transmit(addr << 1, g_twi_transfer_buffer, 2, SNLED27351_I2C_TIMEOUT) != 0) {
+ return false;
+ }
+ }
+#else
+ if (i2c_transmit(addr << 1, g_twi_transfer_buffer, 2, SNLED27351_I2C_TIMEOUT) != 0) {
+ return false;
+ }
+#endif
+ return true;
+}
+
+bool snled27351_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer) {
+ // Assumes PG1 is already selected.
+ // If any of the transactions fails function returns false.
+ // Transmit PWM registers in 3 transfers of 64 bytes.
+
+ // Iterate over the pwm_buffer contents at 64 byte intervals.
+ for (uint8_t i = 0; i < SNLED27351_PWM_REGISTER_COUNT; i += 64) {
+ g_twi_transfer_buffer[0] = i;
+ // Copy the data from i to i+63.
+ // Device will auto-increment register for data after the first byte
+ // Thus this sets registers 0x00-0x0F, 0x10-0x1F, etc. in one transfer.
+ for (uint8_t j = 0; j < 64; j++) {
+ g_twi_transfer_buffer[1 + j] = pwm_buffer[i + j];
+ }
+
+#if SNLED27351_I2C_PERSISTENCE > 0
+ for (uint8_t i = 0; i < SNLED27351_I2C_PERSISTENCE; i++) {
+ if (i2c_transmit(addr << 1, g_twi_transfer_buffer, 65, SNLED27351_I2C_TIMEOUT) != 0) {
+ return false;
+ }
+ }
+#else
+ if (i2c_transmit(addr << 1, g_twi_transfer_buffer, 65, SNLED27351_I2C_TIMEOUT) != 0) {
+ return false;
+ }
+#endif
+ }
+ return true;
+}
+
+void snled27351_init_drivers(void) {
+ i2c_init();
+
+ snled27351_init(SNLED27351_I2C_ADDRESS_1);
+#if defined(SNLED27351_I2C_ADDRESS_2)
+ snled27351_init(SNLED27351_I2C_ADDRESS_2);
+# if defined(SNLED27351_I2C_ADDRESS_3)
+ snled27351_init(SNLED27351_I2C_ADDRESS_3);
+# if defined(SNLED27351_I2C_ADDRESS_4)
+ snled27351_init(SNLED27351_I2C_ADDRESS_4);
+# endif
+# endif
+#endif
+
+ for (int i = 0; i < SNLED27351_LED_COUNT; i++) {
+ snled27351_set_led_control_register(i, true, true, true);
+ }
+
+ snled27351_update_led_control_registers(SNLED27351_I2C_ADDRESS_1, 0);
+#if defined(SNLED27351_I2C_ADDRESS_2)
+ snled27351_update_led_control_registers(SNLED27351_I2C_ADDRESS_2, 1);
+# if defined(SNLED27351_I2C_ADDRESS_3)
+ snled27351_update_led_control_registers(SNLED27351_I2C_ADDRESS_3, 2);
+# if defined(SNLED27351_I2C_ADDRESS_4)
+ snled27351_update_led_control_registers(SNLED27351_I2C_ADDRESS_4, 3);
+# endif
+# endif
+#endif
+}
+
+void snled27351_init(uint8_t addr) {
+ // Select to function page
+ snled27351_write_register(addr, SNLED27351_REG_COMMAND, SNLED27351_COMMAND_FUNCTION);
+ // Setting LED driver to shutdown mode
+ snled27351_write_register(addr, SNLED27351_FUNCTION_REG_SOFTWARE_SHUTDOWN, SNLED27351_SOFTWARE_SHUTDOWN_SSD_SHUTDOWN);
+ // Setting internal channel pulldown/pullup
+ snled27351_write_register(addr, SNLED27351_FUNCTION_REG_PULLDOWNUP, SNLED27351_PULLDOWNUP_ALL_ENABLED);
+ // Select number of scan phase
+ snled27351_write_register(addr, SNLED27351_FUNCTION_REG_SCAN_PHASE, SNLED27351_PHASE_CHANNEL);
+ // Setting PWM Delay Phase
+ snled27351_write_register(addr, SNLED27351_FUNCTION_REG_SLEW_RATE_CONTROL_MODE_1, SNLED27351_SLEW_RATE_CONTROL_MODE_1_PDP_ENABLE);
+ // Setting Driving/Sinking Channel Slew Rate
+ snled27351_write_register(addr, SNLED27351_FUNCTION_REG_SLEW_RATE_CONTROL_MODE_2, SNLED27351_SLEW_RATE_CONTROL_MODE_2_DSL_ENABLE | SNLED27351_SLEW_RATE_CONTROL_MODE_2_SSL_ENABLE);
+ // Setting Iref
+ snled27351_write_register(addr, SNLED27351_FUNCTION_REG_SOFTWARE_SLEEP, 0);
+ // Set LED CONTROL PAGE (Page 0)
+ snled27351_write_register(addr, SNLED27351_REG_COMMAND, SNLED27351_COMMAND_LED_CONTROL);
+ for (int i = 0; i < SNLED27351_LED_CONTROL_ON_OFF_LENGTH; i++) {
+ snled27351_write_register(addr, i, 0x00);
+ }
+
+ // Set PWM PAGE (Page 1)
+ snled27351_write_register(addr, SNLED27351_REG_COMMAND, SNLED27351_COMMAND_PWM);
+ for (int i = 0; i < SNLED27351_LED_CURRENT_TUNE_LENGTH; i++) {
+ snled27351_write_register(addr, i, 0x00);
+ }
+
+ // Set CURRENT PAGE (Page 4)
+ uint8_t current_tune_reg_list[SNLED27351_LED_CURRENT_TUNE_LENGTH] = SNLED27351_CURRENT_TUNE;
+ snled27351_write_register(addr, SNLED27351_REG_COMMAND, SNLED27351_COMMAND_CURRENT_TUNE);
+ for (int i = 0; i < SNLED27351_LED_CURRENT_TUNE_LENGTH; i++) {
+ snled27351_write_register(addr, i, current_tune_reg_list[i]);
+ }
+
+ // Enable LEDs ON/OFF
+ snled27351_write_register(addr, SNLED27351_REG_COMMAND, SNLED27351_COMMAND_LED_CONTROL);
+ for (int i = 0; i < SNLED27351_LED_CONTROL_ON_OFF_LENGTH; i++) {
+ snled27351_write_register(addr, i, 0xFF);
+ }
+
+ // Select to function page
+ snled27351_write_register(addr, SNLED27351_REG_COMMAND, SNLED27351_COMMAND_FUNCTION);
+ // Setting LED driver to normal mode
+ snled27351_write_register(addr, SNLED27351_FUNCTION_REG_SOFTWARE_SHUTDOWN, SNLED27351_SOFTWARE_SHUTDOWN_SSD_NORMAL);
+}
+
+void snled27351_set_color(int index, uint8_t red, uint8_t green, uint8_t blue) {
+ snled27351_led_t led;
+ if (index >= 0 && index < SNLED27351_LED_COUNT) {
+ memcpy_P(&led, (&g_snled27351_leds[index]), sizeof(led));
+
+ if (g_pwm_buffer[led.driver][led.r] == red && g_pwm_buffer[led.driver][led.g] == green && g_pwm_buffer[led.driver][led.b] == blue) {
+ return;
+ }
+ g_pwm_buffer[led.driver][led.r] = red;
+ g_pwm_buffer[led.driver][led.g] = green;
+ g_pwm_buffer[led.driver][led.b] = blue;
+ g_pwm_buffer_update_required[led.driver] = true;
+ }
+}
+
+void snled27351_set_color_all(uint8_t red, uint8_t green, uint8_t blue) {
+ for (int i = 0; i < SNLED27351_LED_COUNT; i++) {
+ snled27351_set_color(i, red, green, blue);
+ }
+}
+
+void snled27351_set_led_control_register(uint8_t index, bool red, bool green, bool blue) {
+ snled27351_led_t led;
+ memcpy_P(&led, (&g_snled27351_leds[index]), sizeof(led));
+
+ uint8_t control_register_r = led.r / 8;
+ uint8_t control_register_g = led.g / 8;
+ uint8_t control_register_b = led.b / 8;
+ uint8_t bit_r = led.r % 8;
+ uint8_t bit_g = led.g % 8;
+ uint8_t bit_b = led.b % 8;
+
+ if (red) {
+ g_led_control_registers[led.driver][control_register_r] |= (1 << bit_r);
+ } else {
+ g_led_control_registers[led.driver][control_register_r] &= ~(1 << bit_r);
+ }
+ if (green) {
+ g_led_control_registers[led.driver][control_register_g] |= (1 << bit_g);
+ } else {
+ g_led_control_registers[led.driver][control_register_g] &= ~(1 << bit_g);
+ }
+ if (blue) {
+ g_led_control_registers[led.driver][control_register_b] |= (1 << bit_b);
+ } else {
+ g_led_control_registers[led.driver][control_register_b] &= ~(1 << bit_b);
+ }
+
+ g_led_control_registers_update_required[led.driver] = true;
+}
+
+void snled27351_update_pwm_buffers(uint8_t addr, uint8_t index) {
+ if (g_pwm_buffer_update_required[index]) {
+ snled27351_write_register(addr, SNLED27351_REG_COMMAND, SNLED27351_COMMAND_PWM);
+
+ // If any of the transactions fail we risk writing dirty PG0,
+ // refresh page 0 just in case.
+ if (!snled27351_write_pwm_buffer(addr, g_pwm_buffer[index])) {
+ g_led_control_registers_update_required[index] = true;
+ }
+ }
+ g_pwm_buffer_update_required[index] = false;
+}
+
+void snled27351_update_led_control_registers(uint8_t addr, uint8_t index) {
+ if (g_led_control_registers_update_required[index]) {
+ snled27351_write_register(addr, SNLED27351_REG_COMMAND, SNLED27351_COMMAND_LED_CONTROL);
+ for (int i = 0; i < SNLED27351_LED_CONTROL_REGISTER_COUNT; i++) {
+ snled27351_write_register(addr, i, g_led_control_registers[index][i]);
+ }
+ }
+ g_led_control_registers_update_required[index] = false;
+}
+
+void snled27351_flush(void) {
+ snled27351_update_pwm_buffers(SNLED27351_I2C_ADDRESS_1, 0);
+#if defined(SNLED27351_I2C_ADDRESS_2)
+ snled27351_update_pwm_buffers(SNLED27351_I2C_ADDRESS_2, 1);
+# if defined(SNLED27351_I2C_ADDRESS_3)
+ snled27351_update_pwm_buffers(SNLED27351_I2C_ADDRESS_3, 2);
+# if defined(SNLED27351_I2C_ADDRESS_4)
+ snled27351_update_pwm_buffers(SNLED27351_I2C_ADDRESS_4, 3);
+# endif
+# endif
+#endif
+}
+
+void snled27351_sw_return_normal(uint8_t addr) {
+ // Select to function page
+ snled27351_write_register(addr, SNLED27351_REG_COMMAND, SNLED27351_COMMAND_FUNCTION);
+ // Setting LED driver to normal mode
+ snled27351_write_register(addr, SNLED27351_FUNCTION_REG_SOFTWARE_SHUTDOWN, SNLED27351_SOFTWARE_SHUTDOWN_SSD_NORMAL);
+}
+
+void snled27351_sw_shutdown(uint8_t addr) {
+ // Select to function page
+ snled27351_write_register(addr, SNLED27351_REG_COMMAND, SNLED27351_COMMAND_FUNCTION);
+ // Setting LED driver to shutdown mode
+ snled27351_write_register(addr, SNLED27351_FUNCTION_REG_SOFTWARE_SHUTDOWN, SNLED27351_SOFTWARE_SHUTDOWN_SSD_SHUTDOWN);
+ // Write SW Sleep Register
+ snled27351_write_register(addr, SNLED27351_FUNCTION_REG_SOFTWARE_SLEEP, SNLED27351_SOFTWARE_SLEEP_ENABLE);
+}
diff --git a/drivers/led/snled27351.h b/drivers/led/snled27351.h
new file mode 100644
index 000000000000..77337f177b77
--- /dev/null
+++ b/drivers/led/snled27351.h
@@ -0,0 +1,394 @@
+/* Copyright 2021 @ Keychron (https://www.keychron.com)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#pragma once
+
+#include
+#include
+#include "progmem.h"
+#include "util.h"
+
+// ======== DEPRECATED DEFINES - DO NOT USE ========
+#ifdef DRIVER_ADDR_1
+# define SNLED27351_I2C_ADDRESS_1 DRIVER_ADDR_1
+#endif
+#ifdef DRIVER_ADDR_2
+# define SNLED27351_I2C_ADDRESS_2 DRIVER_ADDR_2
+#endif
+#ifdef DRIVER_ADDR_3
+# define SNLED27351_I2C_ADDRESS_3 DRIVER_ADDR_3
+#endif
+#ifdef DRIVER_ADDR_4
+# define SNLED27351_I2C_ADDRESS_4 DRIVER_ADDR_4
+#endif
+#ifdef CKLED2001_TIMEOUT
+# define SNLED27351_I2C_TIMEOUT CKLED2001_TIMEOUT
+#endif
+#ifdef CKLED2001_PERSISTENCE
+# define SNLED27351_I2C_PERSISTENCE CKLED2001_PERSISTENCE
+#endif
+#ifdef PHASE_CHANNEL
+# define SNLED27351_PHASE_CHANNEL PHASE_CHANNEL
+#endif
+#ifdef CKLED2001_CURRENT_TUNE
+# define SNLED27351_CURRENT_TUNE CKLED2001_CURRENT_TUNE
+#endif
+
+#define MSKPHASE_12CHANNEL SNLED27351_SCAN_PHASE_12_CHANNEL
+#define MSKPHASE_11CHANNEL SNLED27351_SCAN_PHASE_11_CHANNEL
+#define MSKPHASE_10CHANNEL SNLED27351_SCAN_PHASE_10_CHANNEL
+#define MSKPHASE_9CHANNEL SNLED27351_SCAN_PHASE_9_CHANNEL
+#define MSKPHASE_8CHANNEL SNLED27351_SCAN_PHASE_8_CHANNEL
+#define MSKPHASE_7CHANNEL SNLED27351_SCAN_PHASE_7_CHANNEL
+#define MSKPHASE_6CHANNEL SNLED27351_SCAN_PHASE_6_CHANNEL
+#define MSKPHASE_5CHANNEL SNLED27351_SCAN_PHASE_5_CHANNEL
+#define MSKPHASE_4CHANNEL SNLED27351_SCAN_PHASE_4_CHANNEL
+#define MSKPHASE_3CHANNEL SNLED27351_SCAN_PHASE_3_CHANNEL
+#define MSKPHASE_2CHANNEL SNLED27351_SCAN_PHASE_2_CHANNEL
+#define MSKPHASE_1CHANNEL SNLED27351_SCAN_PHASE_1_CHANNEL
+
+#define ckled2001_led snled27351_led_t
+#define g_ckled2001_leds g_snled27351_leds
+// ========
+
+#define SNLED27351_REG_COMMAND 0xFD
+#define SNLED27351_COMMAND_LED_CONTROL 0x00
+#define SNLED27351_COMMAND_PWM 0x01
+#define SNLED27351_COMMAND_FUNCTION 0x03
+#define SNLED27351_COMMAND_CURRENT_TUNE 0x04
+
+#define SNLED27351_FUNCTION_REG_SOFTWARE_SHUTDOWN 0x00
+#define SNLED27351_SOFTWARE_SHUTDOWN_SSD_SHUTDOWN (0x0 << 0)
+#define SNLED27351_SOFTWARE_SHUTDOWN_SSD_NORMAL (0x1 << 0)
+
+#define SNLED27351_FUNCTION_REG_ID 0x11
+#define SNLED27351_DRIVER_ID 0x8A
+
+#define SNLED27351_FUNCTION_REG_PULLDOWNUP 0x13
+#define SNLED27351_PULLDOWNUP_ALL_ENABLED 0xAA
+
+#define SNLED27351_FUNCTION_REG_SCAN_PHASE 0x14
+#define SNLED27351_SCAN_PHASE_12_CHANNEL 0x00
+#define SNLED27351_SCAN_PHASE_11_CHANNEL 0x01
+#define SNLED27351_SCAN_PHASE_10_CHANNEL 0x02
+#define SNLED27351_SCAN_PHASE_9_CHANNEL 0x03
+#define SNLED27351_SCAN_PHASE_8_CHANNEL 0x04
+#define SNLED27351_SCAN_PHASE_7_CHANNEL 0x05
+#define SNLED27351_SCAN_PHASE_6_CHANNEL 0x06
+#define SNLED27351_SCAN_PHASE_5_CHANNEL 0x07
+#define SNLED27351_SCAN_PHASE_4_CHANNEL 0x08
+#define SNLED27351_SCAN_PHASE_3_CHANNEL 0x09
+#define SNLED27351_SCAN_PHASE_2_CHANNEL 0x0A
+#define SNLED27351_SCAN_PHASE_1_CHANNEL 0x0B
+
+#define SNLED27351_FUNCTION_REG_SLEW_RATE_CONTROL_MODE_1 0x15
+#define SNLED27351_SLEW_RATE_CONTROL_MODE_1_PDP_ENABLE (0b1 << 2)
+
+#define SNLED27351_FUNCTION_REG_SLEW_RATE_CONTROL_MODE_2 0x16
+#define SNLED27351_SLEW_RATE_CONTROL_MODE_2_SSL_ENABLE (0b1 << 6)
+#define SNLED27351_SLEW_RATE_CONTROL_MODE_2_DSL_ENABLE (0b1 << 7)
+
+#define SNLED27351_FUNCTION_REG_OPEN_SHORT_ENABLE 0x17
+#define SNLED27351_OPEN_SHORT_ENABLE_SDS_ENABLE (0b1 << 6)
+#define SNLED27351_OPEN_SHORT_ENABLE_ODS_ENABLE (0b1 << 7)
+
+#define SNLED27351_FUNCTION_REG_OPEN_SHORT_DUTY 0x18
+
+#define SNLED27351_FUNCTION_REG_OPEN_SHORT_FLAG 0x19
+#define SNLED27351_OPEN_SHORT_FLAG_OSINT_ENABLE (0b1 << 6)
+#define SNLED27351_OPEN_SHORT_FLAG_ODINT_ENABLE (0b1 << 7)
+
+#define SNLED27351_FUNCTION_REG_SOFTWARE_SLEEP 0x1A
+#define SNLED27351_SOFTWARE_SLEEP_ENABLE (0b1 << 1)
+
+// LED Control Registers
+#define SNLED27351_LED_CONTROL_ON_OFF_FIRST_ADDR 0x0
+#define SNLED27351_LED_CONTROL_ON_OFF_LAST_ADDR 0x17
+#define SNLED27351_LED_CONTROL_ON_OFF_LENGTH ((SNLED27351_LED_CONTROL_ON_OFF_LAST_ADDR - SNLED27351_LED_CONTROL_ON_OFF_FIRST_ADDR) + 1)
+
+#define SNLED27351_LED_CONTROL_OPEN_FIRST_ADDR 0x18
+#define SNLED27351_LED_CONTROL_OPEN_LAST_ADDR 0x2F
+#define SNLED27351_LED_CONTROL_OPEN_LENGTH ((SNLED27351_LED_CONTROL_OPEN_LAST_ADDR - SNLED27351_LED_CONTROL_OPEN_FIRST_ADDR) + 1)
+
+#define SNLED27351_LED_CONTROL_SHORT_FIRST_ADDR 0x30
+#define SNLED27351_LED_CONTROL_SHORT_LAST_ADDR 0x47
+#define SNLED27351_LED_CONTROL_SHORT_LENGTH ((SNLED27351_LED_CONTROL_SHORT_LAST_ADDR - SNLED27351_LED_CONTROL_SHORT_FIRST_ADDR) + 1)
+
+#define SNLED27351_LED_CONTROL_PAGE_LENGTH 0x48
+
+// LED Control Registers
+#define SNLED27351_LED_PWM_FIRST_ADDR 0x00
+#define SNLED27351_LED_PWM_LAST_ADDR 0xBF
+#define SNLED27351_LED_PWM_LENGTH 0xC0
+
+// Current Tune Registers
+#define SNLED27351_LED_CURRENT_TUNE_FIRST_ADDR 0x00
+#define SNLED27351_LED_CURRENT_TUNE_LAST_ADDR 0x0B
+#define SNLED27351_LED_CURRENT_TUNE_LENGTH 0x0C
+
+#define SNLED27351_I2C_ADDRESS_GND 0x74
+#define SNLED27351_I2C_ADDRESS_SCL 0x75
+#define SNLED27351_I2C_ADDRESS_SDA 0x76
+#define SNLED27351_I2C_ADDRESS_VDDIO 0x77
+
+#if defined(RGB_MATRIX_SNLED27351)
+# define SNLED27351_LED_COUNT RGB_MATRIX_LED_COUNT
+#endif
+
+#if defined(SNLED27351_I2C_ADDRESS_4)
+# define SNLED27351_DRIVER_COUNT 4
+#elif defined(SNLED27351_I2C_ADDRESS_3)
+# define SNLED27351_DRIVER_COUNT 3
+#elif defined(SNLED27351_I2C_ADDRESS_2)
+# define SNLED27351_DRIVER_COUNT 2
+#elif defined(SNLED27351_I2C_ADDRESS_1)
+# define SNLED27351_DRIVER_COUNT 1
+#endif
+
+typedef struct snled27351_led_t {
+ uint8_t driver : 2;
+ uint8_t r;
+ uint8_t g;
+ uint8_t b;
+} PACKED snled27351_led_t;
+
+extern const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT];
+
+void snled27351_init_drivers(void);
+void snled27351_init(uint8_t addr);
+bool snled27351_write_register(uint8_t addr, uint8_t reg, uint8_t data);
+bool snled27351_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer);
+
+void snled27351_set_color(int index, uint8_t red, uint8_t green, uint8_t blue);
+void snled27351_set_color_all(uint8_t red, uint8_t green, uint8_t blue);
+
+void snled27351_set_led_control_register(uint8_t index, bool red, bool green, bool blue);
+
+// This should not be called from an interrupt
+// (eg. from a timer interrupt).
+// Call this while idle (in between matrix scans).
+// If the buffer is dirty, it will update the driver with the buffer.
+void snled27351_update_pwm_buffers(uint8_t addr, uint8_t index);
+void snled27351_update_led_control_registers(uint8_t addr, uint8_t index);
+
+void snled27351_flush(void);
+
+void snled27351_sw_return_normal(uint8_t addr);
+void snled27351_sw_shutdown(uint8_t addr);
+
+#define A_1 0x00
+#define A_2 0x01
+#define A_3 0x02
+#define A_4 0x03
+#define A_5 0x04
+#define A_6 0x05
+#define A_7 0x06
+#define A_8 0x07
+#define A_9 0x08
+#define A_10 0x09
+#define A_11 0x0A
+#define A_12 0x0B
+#define A_13 0x0C
+#define A_14 0x0D
+#define A_15 0x0E
+#define A_16 0x0F
+
+#define B_1 0x10
+#define B_2 0x11
+#define B_3 0x12
+#define B_4 0x13
+#define B_5 0x14
+#define B_6 0x15
+#define B_7 0x16
+#define B_8 0x17
+#define B_9 0x18
+#define B_10 0x19
+#define B_11 0x1A
+#define B_12 0x1B
+#define B_13 0x1C
+#define B_14 0x1D
+#define B_15 0x1E
+#define B_16 0x1F
+
+#define C_1 0x20
+#define C_2 0x21
+#define C_3 0x22
+#define C_4 0x23
+#define C_5 0x24
+#define C_6 0x25
+#define C_7 0x26
+#define C_8 0x27
+#define C_9 0x28
+#define C_10 0x29
+#define C_11 0x2A
+#define C_12 0x2B
+#define C_13 0x2C
+#define C_14 0x2D
+#define C_15 0x2E
+#define C_16 0x2F
+
+#define D_1 0x30
+#define D_2 0x31
+#define D_3 0x32
+#define D_4 0x33
+#define D_5 0x34
+#define D_6 0x35
+#define D_7 0x36
+#define D_8 0x37
+#define D_9 0x38
+#define D_10 0x39
+#define D_11 0x3A
+#define D_12 0x3B
+#define D_13 0x3C
+#define D_14 0x3D
+#define D_15 0x3E
+#define D_16 0x3F
+
+#define E_1 0x40
+#define E_2 0x41
+#define E_3 0x42
+#define E_4 0x43
+#define E_5 0x44
+#define E_6 0x45
+#define E_7 0x46
+#define E_8 0x47
+#define E_9 0x48
+#define E_10 0x49
+#define E_11 0x4A
+#define E_12 0x4B
+#define E_13 0x4C
+#define E_14 0x4D
+#define E_15 0x4E
+#define E_16 0x4F
+
+#define F_1 0x50
+#define F_2 0x51
+#define F_3 0x52
+#define F_4 0x53
+#define F_5 0x54
+#define F_6 0x55
+#define F_7 0x56
+#define F_8 0x57
+#define F_9 0x58
+#define F_10 0x59
+#define F_11 0x5A
+#define F_12 0x5B
+#define F_13 0x5C
+#define F_14 0x5D
+#define F_15 0x5E
+#define F_16 0x5F
+
+#define G_1 0x60
+#define G_2 0x61
+#define G_3 0x62
+#define G_4 0x63
+#define G_5 0x64
+#define G_6 0x65
+#define G_7 0x66
+#define G_8 0x67
+#define G_9 0x68
+#define G_10 0x69
+#define G_11 0x6A
+#define G_12 0x6B
+#define G_13 0x6C
+#define G_14 0x6D
+#define G_15 0x6E
+#define G_16 0x6F
+
+#define H_1 0x70
+#define H_2 0x71
+#define H_3 0x72
+#define H_4 0x73
+#define H_5 0x74
+#define H_6 0x75
+#define H_7 0x76
+#define H_8 0x77
+#define H_9 0x78
+#define H_10 0x79
+#define H_11 0x7A
+#define H_12 0x7B
+#define H_13 0x7C
+#define H_14 0x7D
+#define H_15 0x7E
+#define H_16 0x7F
+
+#define I_1 0x80
+#define I_2 0x81
+#define I_3 0x82
+#define I_4 0x83
+#define I_5 0x84
+#define I_6 0x85
+#define I_7 0x86
+#define I_8 0x87
+#define I_9 0x88
+#define I_10 0x89
+#define I_11 0x8A
+#define I_12 0x8B
+#define I_13 0x8C
+#define I_14 0x8D
+#define I_15 0x8E
+#define I_16 0x8F
+
+#define J_1 0x90
+#define J_2 0x91
+#define J_3 0x92
+#define J_4 0x93
+#define J_5 0x94
+#define J_6 0x95
+#define J_7 0x96
+#define J_8 0x97
+#define J_9 0x98
+#define J_10 0x99
+#define J_11 0x9A
+#define J_12 0x9B
+#define J_13 0x9C
+#define J_14 0x9D
+#define J_15 0x9E
+#define J_16 0x9F
+
+#define K_1 0xA0
+#define K_2 0xA1
+#define K_3 0xA2
+#define K_4 0xA3
+#define K_5 0xA4
+#define K_6 0xA5
+#define K_7 0xA6
+#define K_8 0xA7
+#define K_9 0xA8
+#define K_10 0xA9
+#define K_11 0xAA
+#define K_12 0xAB
+#define K_13 0xAC
+#define K_14 0xAD
+#define K_15 0xAE
+#define K_16 0xAF
+
+#define L_1 0xB0
+#define L_2 0xB1
+#define L_3 0xB2
+#define L_4 0xB3
+#define L_5 0xB4
+#define L_6 0xB5
+#define L_7 0xB6
+#define L_8 0xB7
+#define L_9 0xB8
+#define L_10 0xB9
+#define L_11 0xBA
+#define L_12 0xBB
+#define L_13 0xBC
+#define L_14 0xBD
+#define L_15 0xBE
+#define L_16 0xBF
diff --git a/drivers/oled/oled_driver.c b/drivers/oled/oled_driver.c
index b9f720781377..4a2121cd7c5c 100644
--- a/drivers/oled/oled_driver.c
+++ b/drivers/oled/oled_driver.c
@@ -451,7 +451,7 @@ static void rotate_90(const uint8_t *src, uint8_t *dest) {
}
}
-void oled_render(void) {
+void oled_render_dirty(bool all) {
// Do we have work to do?
oled_dirty &= OLED_ALL_BLOCKS_MASK;
if (!oled_dirty || !oled_initialized || oled_scrolling) {
@@ -463,7 +463,7 @@ void oled_render(void) {
uint8_t update_start = 0;
uint8_t num_processed = 0;
- while (oled_dirty && num_processed++ < OLED_UPDATE_PROCESS_LIMIT) { // render all dirty blocks (up to the configured limit)
+ while (oled_dirty && (num_processed++ < OLED_UPDATE_PROCESS_LIMIT || all)) { // render all dirty blocks (up to the configured limit)
// Find next dirty block
while (!(oled_dirty & ((OLED_BLOCK_TYPE)1 << update_start))) {
++update_start;
diff --git a/drivers/oled/oled_driver.h b/drivers/oled/oled_driver.h
index 91c376ec2731..c3db7e6d977d 100644
--- a/drivers/oled/oled_driver.h
+++ b/drivers/oled/oled_driver.h
@@ -353,20 +353,24 @@ oled_rotation_t oled_init_user(oled_rotation_t rotation);
// Clears the display buffer, resets cursor position to 0, and sets the buffer to dirty for rendering
void oled_clear(void);
-// Renders the dirty chunks of the buffer to oled display
-void oled_render(void);
+// Alias to oled_render_dirty to avoid a change in api.
+#define oled_render() oled_render_dirty(false)
+
+// Renders all dirty blocks to the display at one time or a subset depending on the value of
+// all.
+void oled_render_dirty(bool all);
// Moves cursor to character position indicated by column and line, wraps if out of bounds
// Max column denoted by 'oled_max_chars()' and max lines by 'oled_max_lines()' functions
void oled_set_cursor(uint8_t col, uint8_t line);
// Advances the cursor to the next page, writing ' ' if true
-// Wraps to the begining when out of bounds
+// Wraps to the beginning when out of bounds
void oled_advance_page(bool clearPageRemainder);
// Moves the cursor forward 1 character length
// Advance page if there is not enough room for the next character
-// Wraps to the begining when out of bounds
+// Wraps to the beginning when out of bounds
void oled_advance_char(void);
// Writes a single character to the buffer at current cursor position
@@ -433,10 +437,10 @@ bool oled_off(void);
// not
bool is_oled_on(void);
-// Sets the brightness of the display
+// Sets the brightness level of the display
uint8_t oled_set_brightness(uint8_t level);
-// Gets the current brightness of the display
+// Gets the current brightness level of the display
uint8_t oled_get_brightness(void);
// Basically it's oled_render, but with timeout management and oled_task_user calling!
@@ -458,12 +462,12 @@ void oled_scroll_set_area(uint8_t start_line, uint8_t end_line);
// 0=2, 1=3, 2=4, 3=5, 4=25, 5=64, 6=128, 7=256
void oled_scroll_set_speed(uint8_t speed);
-// Scrolls the entire display right
+// Begin scrolling the entire display right
// Returns true if the screen was scrolling or starts scrolling
// NOTE: display contents cannot be changed while scrolling
bool oled_scroll_right(void);
-// Scrolls the entire display left
+// Begin scrolling the entire display left
// Returns true if the screen was scrolling or starts scrolling
// NOTE: display contents cannot be changed while scrolling
bool oled_scroll_left(void);
diff --git a/drivers/painter/comms/qp_comms_dummy.c b/drivers/painter/comms/qp_comms_dummy.c
new file mode 100644
index 000000000000..2ed49d223277
--- /dev/null
+++ b/drivers/painter/comms/qp_comms_dummy.c
@@ -0,0 +1,34 @@
+// Copyright 2023 Nick Brassel (@tzarc)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#ifdef QUANTUM_PAINTER_DUMMY_COMMS_ENABLE
+
+# include "qp_comms_dummy.h"
+
+static bool dummy_comms_init(painter_device_t device) {
+ // No-op.
+ return true;
+}
+
+static bool dummy_comms_start(painter_device_t device) {
+ // No-op.
+ return true;
+}
+
+static void dummy_comms_stop(painter_device_t device) {
+ // No-op.
+}
+
+uint32_t dummy_comms_send(painter_device_t device, const void *data, uint32_t byte_count) {
+ // No-op.
+ return byte_count;
+}
+
+painter_comms_vtable_t dummy_comms_vtable = {
+ // These are all effective no-op's because they're not actually needed.
+ .comms_init = dummy_comms_init,
+ .comms_start = dummy_comms_start,
+ .comms_stop = dummy_comms_stop,
+ .comms_send = dummy_comms_send};
+
+#endif // QUANTUM_PAINTER_DUMMY_COMMS_ENABLE
diff --git a/drivers/painter/comms/qp_comms_dummy.h b/drivers/painter/comms/qp_comms_dummy.h
new file mode 100644
index 000000000000..b2d5d6eea5c2
--- /dev/null
+++ b/drivers/painter/comms/qp_comms_dummy.h
@@ -0,0 +1,11 @@
+// Copyright 2023 Nick Brassel (@tzarc)
+// SPDX-License-Identifier: GPL-2.0-or-later
+#pragma once
+
+#ifdef QUANTUM_PAINTER_DUMMY_COMMS_ENABLE
+
+# include "qp_internal.h"
+
+extern painter_comms_vtable_t dummy_comms_vtable;
+
+#endif // QUANTUM_PAINTER_DUMMY_COMMS_ENABLE
diff --git a/drivers/painter/comms/qp_comms_i2c.c b/drivers/painter/comms/qp_comms_i2c.c
new file mode 100644
index 000000000000..ec45ddfb3b64
--- /dev/null
+++ b/drivers/painter/comms/qp_comms_i2c.c
@@ -0,0 +1,94 @@
+// Copyright 2022 Nick Brassel (@tzarc)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#ifdef QUANTUM_PAINTER_I2C_ENABLE
+
+# include "i2c_master.h"
+# include "qp_comms_i2c.h"
+
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// Helpers
+
+static uint32_t qp_comms_i2c_send_raw(painter_device_t device, const void *data, uint32_t byte_count) {
+ painter_driver_t * driver = (painter_driver_t *)device;
+ qp_comms_i2c_config_t *comms_config = (qp_comms_i2c_config_t *)driver->comms_config;
+ i2c_status_t res = i2c_transmit(comms_config->chip_address << 1, data, byte_count, I2C_TIMEOUT);
+ if (res < 0) {
+ return 0;
+ }
+ return byte_count;
+}
+
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// Base I2C support
+
+bool qp_comms_i2c_init(painter_device_t device) {
+ i2c_init();
+ return true;
+}
+
+bool qp_comms_i2c_start(painter_device_t device) {
+ painter_driver_t * driver = (painter_driver_t *)device;
+ qp_comms_i2c_config_t *comms_config = (qp_comms_i2c_config_t *)driver->comms_config;
+ return i2c_start(comms_config->chip_address << 1) == I2C_STATUS_SUCCESS;
+}
+
+uint32_t qp_comms_i2c_send_data(painter_device_t device, const void *data, uint32_t byte_count) {
+ return qp_comms_i2c_send_raw(device, data, byte_count);
+}
+
+void qp_comms_i2c_stop(painter_device_t device) {
+ i2c_stop();
+}
+
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// Command+Data I2C support
+
+static const uint8_t cmd_byte = 0x00;
+static const uint8_t data_byte = 0x40;
+
+void qp_comms_i2c_cmddata_send_command(painter_device_t device, uint8_t cmd) {
+ uint8_t buf[2] = {cmd_byte, cmd};
+ qp_comms_i2c_send_raw(device, &buf, 2);
+}
+
+uint32_t qp_comms_i2c_cmddata_send_data(painter_device_t device, const void *data, uint32_t byte_count) {
+ uint8_t buf[1 + byte_count];
+ buf[0] = data_byte;
+ memcpy(&buf[1], data, byte_count);
+ if (qp_comms_i2c_send_raw(device, buf, sizeof(buf)) != sizeof(buf)) {
+ return 0;
+ }
+ return byte_count;
+}
+
+void qp_comms_i2c_bulk_command_sequence(painter_device_t device, const uint8_t *sequence, size_t sequence_len) {
+ uint8_t buf[32];
+ for (size_t i = 0; i < sequence_len;) {
+ uint8_t command = sequence[i];
+ uint8_t delay = sequence[i + 1];
+ uint8_t num_bytes = sequence[i + 2];
+ buf[0] = cmd_byte;
+ buf[1] = command;
+ memcpy(&buf[2], &sequence[i + 3], num_bytes);
+ qp_comms_i2c_send_raw(device, buf, num_bytes + 2);
+ if (delay > 0) {
+ wait_ms(delay);
+ }
+ i += (3 + num_bytes);
+ }
+}
+
+const painter_comms_with_command_vtable_t i2c_comms_cmddata_vtable = {
+ .base =
+ {
+ .comms_init = qp_comms_i2c_init,
+ .comms_start = qp_comms_i2c_start,
+ .comms_send = qp_comms_i2c_cmddata_send_data,
+ .comms_stop = qp_comms_i2c_stop,
+ },
+ .send_command = qp_comms_i2c_cmddata_send_command,
+ .bulk_command_sequence = qp_comms_i2c_bulk_command_sequence,
+};
+
+#endif // QUANTUM_PAINTER_I2C_ENABLE
diff --git a/drivers/painter/comms/qp_comms_i2c.h b/drivers/painter/comms/qp_comms_i2c.h
new file mode 100644
index 000000000000..70083d6526f2
--- /dev/null
+++ b/drivers/painter/comms/qp_comms_i2c.h
@@ -0,0 +1,28 @@
+// Copyright 2022 Nick Brassel (@tzarc)
+// SPDX-License-Identifier: GPL-2.0-or-later
+#pragma once
+
+#ifdef QUANTUM_PAINTER_I2C_ENABLE
+
+# include
+
+# include "gpio.h"
+# include "qp_internal.h"
+
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// Base I2C support
+
+typedef struct qp_comms_i2c_config_t {
+ uint8_t chip_address;
+} qp_comms_i2c_config_t;
+
+bool qp_comms_i2c_init(painter_device_t device);
+bool qp_comms_i2c_start(painter_device_t device);
+uint32_t qp_comms_i2c_send_data(painter_device_t device, const void* data, uint32_t byte_count);
+void qp_comms_i2c_stop(painter_device_t device);
+
+extern const painter_comms_with_command_vtable_t i2c_comms_cmddata_vtable;
+
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+#endif // QUANTUM_PAINTER_I2C_ENABLE
diff --git a/drivers/painter/comms/qp_comms_spi.c b/drivers/painter/comms/qp_comms_spi.c
index 7534e844d838..9f52bc7d1f30 100644
--- a/drivers/painter/comms/qp_comms_spi.c
+++ b/drivers/painter/comms/qp_comms_spi.c
@@ -105,13 +105,21 @@ void qp_comms_spi_dc_reset_send_command(painter_device_t device, uint8_t cmd) {
}
void qp_comms_spi_dc_reset_bulk_command_sequence(painter_device_t device, const uint8_t *sequence, size_t sequence_len) {
+ painter_driver_t * driver = (painter_driver_t *)device;
+ qp_comms_spi_dc_reset_config_t *comms_config = (qp_comms_spi_dc_reset_config_t *)driver->comms_config;
for (size_t i = 0; i < sequence_len;) {
uint8_t command = sequence[i];
uint8_t delay = sequence[i + 1];
uint8_t num_bytes = sequence[i + 2];
qp_comms_spi_dc_reset_send_command(device, command);
if (num_bytes > 0) {
- qp_comms_spi_dc_reset_send_data(device, &sequence[i + 3], num_bytes);
+ if (comms_config->command_params_uses_command_pin) {
+ for (uint8_t j = 0; j < num_bytes; j++) {
+ qp_comms_spi_dc_reset_send_command(device, sequence[i + 3 + j]);
+ }
+ } else {
+ qp_comms_spi_dc_reset_send_data(device, &sequence[i + 3], num_bytes);
+ }
}
if (delay > 0) {
wait_ms(delay);
diff --git a/drivers/painter/comms/qp_comms_spi.h b/drivers/painter/comms/qp_comms_spi.h
index b3da86d5733f..ff323c3c10e6 100644
--- a/drivers/painter/comms/qp_comms_spi.h
+++ b/drivers/painter/comms/qp_comms_spi.h
@@ -1,6 +1,5 @@
// Copyright 2021 Nick Brassel (@tzarc)
// SPDX-License-Identifier: GPL-2.0-or-later
-
#pragma once
#ifdef QUANTUM_PAINTER_SPI_ENABLE
@@ -36,6 +35,7 @@ typedef struct qp_comms_spi_dc_reset_config_t {
qp_comms_spi_config_t spi_config;
pin_t dc_pin;
pin_t reset_pin;
+ bool command_params_uses_command_pin; // keep D/C held low when sending command sequences for data bytes
} qp_comms_spi_dc_reset_config_t;
void qp_comms_spi_dc_reset_send_command(painter_device_t device, uint8_t cmd);
diff --git a/drivers/painter/gc9a01/qp_gc9a01.c b/drivers/painter/gc9a01/qp_gc9a01.c
index a2eb2cf57c03..fe6fa7a9d024 100644
--- a/drivers/painter/gc9a01/qp_gc9a01.c
+++ b/drivers/painter/gc9a01/qp_gc9a01.c
@@ -2,7 +2,6 @@
// Copyright 2023 Nick Brassel (@tzarc)
// SPDX-License-Identifier: GPL-2.0-or-later
-#include
#include "qp_internal.h"
#include "qp_comms.h"
#include "qp_gc9a01.h"
@@ -135,13 +134,14 @@ painter_device_t qp_gc9a01_make_spi_device(uint16_t panel_width, uint16_t panel_
driver->base.offset_y = 0;
// SPI and other pin configuration
- driver->base.comms_config = &driver->spi_dc_reset_config;
- driver->spi_dc_reset_config.spi_config.chip_select_pin = chip_select_pin;
- driver->spi_dc_reset_config.spi_config.divisor = spi_divisor;
- driver->spi_dc_reset_config.spi_config.lsb_first = false;
- driver->spi_dc_reset_config.spi_config.mode = spi_mode;
- driver->spi_dc_reset_config.dc_pin = dc_pin;
- driver->spi_dc_reset_config.reset_pin = reset_pin;
+ driver->base.comms_config = &driver->spi_dc_reset_config;
+ driver->spi_dc_reset_config.spi_config.chip_select_pin = chip_select_pin;
+ driver->spi_dc_reset_config.spi_config.divisor = spi_divisor;
+ driver->spi_dc_reset_config.spi_config.lsb_first = false;
+ driver->spi_dc_reset_config.spi_config.mode = spi_mode;
+ driver->spi_dc_reset_config.dc_pin = dc_pin;
+ driver->spi_dc_reset_config.reset_pin = reset_pin;
+ driver->spi_dc_reset_config.command_params_uses_command_pin = false;
if (!qp_internal_register_device((painter_device_t)driver)) {
memset(driver, 0, sizeof(tft_panel_dc_reset_painter_device_t));
diff --git a/drivers/painter/gc9a01/qp_gc9a01.h b/drivers/painter/gc9a01/qp_gc9a01.h
index e2b193956405..31a3804b504f 100644
--- a/drivers/painter/gc9a01/qp_gc9a01.h
+++ b/drivers/painter/gc9a01/qp_gc9a01.h
@@ -1,6 +1,5 @@
// Copyright 2021 Paul Cotter (@gr1mr3aver)
// SPDX-License-Identifier: GPL-2.0-or-later
-
#pragma once
#include "gpio.h"
diff --git a/drivers/painter/gc9a01/qp_gc9a01_opcodes.h b/drivers/painter/gc9a01/qp_gc9a01_opcodes.h
index 6ff4efe7a8ac..828e42752b0c 100644
--- a/drivers/painter/gc9a01/qp_gc9a01_opcodes.h
+++ b/drivers/painter/gc9a01/qp_gc9a01_opcodes.h
@@ -1,6 +1,5 @@
// Copyright 2021 Paul Cotter (@gr1mr3aver)
// SPDX-License-Identifier: GPL-2.0-or-later
-
#pragma once
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/drivers/painter/generic/qp_rgb565_surface.c b/drivers/painter/generic/qp_rgb565_surface.c
deleted file mode 100644
index 9c283e06872d..000000000000
--- a/drivers/painter/generic/qp_rgb565_surface.c
+++ /dev/null
@@ -1,284 +0,0 @@
-// Copyright 2022 Nick Brassel (@tzarc)
-// SPDX-License-Identifier: GPL-2.0-or-later
-#include "color.h"
-#include "qp_rgb565_surface.h"
-#include "qp_draw.h"
-
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-// Common
-
-// Device definition
-typedef struct rgb565_surface_painter_device_t {
- painter_driver_t base; // must be first, so it can be cast to/from the painter_device_t* type
-
- // The target buffer
- uint16_t *buffer;
-
- // Manually manage the viewport for streaming pixel data to the display
- uint16_t viewport_l;
- uint16_t viewport_t;
- uint16_t viewport_r;
- uint16_t viewport_b;
-
- // Current write location to the display when streaming pixel data
- uint16_t pixdata_x;
- uint16_t pixdata_y;
-
- // Maintain a dirty region so we can stream only what we need
- bool is_dirty;
- uint16_t dirty_l;
- uint16_t dirty_t;
- uint16_t dirty_r;
- uint16_t dirty_b;
-
-} rgb565_surface_painter_device_t;
-
-// Driver storage
-rgb565_surface_painter_device_t surface_drivers[RGB565_SURFACE_NUM_DEVICES] = {0};
-
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-// Helpers
-
-static inline void increment_pixdata_location(rgb565_surface_painter_device_t *surface) {
- // Increment the X-position
- surface->pixdata_x++;
-
- // If the x-coord has gone past the right-side edge, loop it back around and increment the y-coord
- if (surface->pixdata_x > surface->viewport_r) {
- surface->pixdata_x = surface->viewport_l;
- surface->pixdata_y++;
- }
-
- // If the y-coord has gone past the bottom, loop it back to the top
- if (surface->pixdata_y > surface->viewport_b) {
- surface->pixdata_y = surface->viewport_t;
- }
-}
-
-static inline void setpixel(rgb565_surface_painter_device_t *surface, uint16_t x, uint16_t y, uint16_t rgb565) {
- // Skip messing with the dirty info if the original value already matches
- if (surface->buffer[y * surface->base.panel_width + x] != rgb565) {
- // Maintain dirty region
- if (surface->dirty_l > x) {
- surface->dirty_l = x;
- }
- if (surface->dirty_r < x) {
- surface->dirty_r = x;
- }
- if (surface->dirty_t > y) {
- surface->dirty_t = y;
- }
- if (surface->dirty_b < y) {
- surface->dirty_b = y;
- }
-
- // Always dirty after a setpixel
- surface->is_dirty = true;
-
- // Update the pixel data in the buffer
- surface->buffer[y * surface->base.panel_width + x] = rgb565;
- }
-}
-
-static inline void append_pixel(rgb565_surface_painter_device_t *surface, uint16_t rgb565) {
- setpixel(surface, surface->pixdata_x, surface->pixdata_y, rgb565);
- increment_pixdata_location(surface);
-}
-
-static inline void stream_pixdata(rgb565_surface_painter_device_t *surface, const uint16_t *data, uint32_t native_pixel_count) {
- for (uint32_t pixel_counter = 0; pixel_counter < native_pixel_count; ++pixel_counter) {
- append_pixel(surface, data[pixel_counter]);
- }
-}
-
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-// Driver vtable
-
-static bool qp_rgb565_surface_init(painter_device_t device, painter_rotation_t rotation) {
- painter_driver_t * driver = (painter_driver_t *)device;
- rgb565_surface_painter_device_t *surface = (rgb565_surface_painter_device_t *)driver;
- memset(surface->buffer, 0, driver->panel_width * driver->panel_height * driver->native_bits_per_pixel / 8);
- return true;
-}
-
-static bool qp_rgb565_surface_power(painter_device_t device, bool power_on) {
- // No-op.
- return true;
-}
-
-static bool qp_rgb565_surface_clear(painter_device_t device) {
- painter_driver_t *driver = (painter_driver_t *)device;
- driver->driver_vtable->init(device, driver->rotation); // Re-init the surface
- return true;
-}
-
-static bool qp_rgb565_surface_flush(painter_device_t device) {
- painter_driver_t * driver = (painter_driver_t *)device;
- rgb565_surface_painter_device_t *surface = (rgb565_surface_painter_device_t *)driver;
- surface->dirty_l = surface->dirty_t = UINT16_MAX;
- surface->dirty_r = surface->dirty_b = 0;
- surface->is_dirty = false;
- return true;
-}
-
-static bool qp_rgb565_surface_viewport(painter_device_t device, uint16_t left, uint16_t top, uint16_t right, uint16_t bottom) {
- painter_driver_t * driver = (painter_driver_t *)device;
- rgb565_surface_painter_device_t *surface = (rgb565_surface_painter_device_t *)driver;
-
- // Set the viewport locations
- surface->viewport_l = left;
- surface->viewport_t = top;
- surface->viewport_r = right;
- surface->viewport_b = bottom;
-
- // Reset the write location to the top left
- surface->pixdata_x = left;
- surface->pixdata_y = top;
- return true;
-}
-
-// Stream pixel data to the current write position in GRAM
-static bool qp_rgb565_surface_pixdata(painter_device_t device, const void *pixel_data, uint32_t native_pixel_count) {
- painter_driver_t * driver = (painter_driver_t *)device;
- rgb565_surface_painter_device_t *surface = (rgb565_surface_painter_device_t *)driver;
- stream_pixdata(surface, (const uint16_t *)pixel_data, native_pixel_count);
- return true;
-}
-
-// Pixel colour conversion
-static bool qp_rgb565_surface_palette_convert_rgb565_swapped(painter_device_t device, int16_t palette_size, qp_pixel_t *palette) {
- for (int16_t i = 0; i < palette_size; ++i) {
- RGB rgb = hsv_to_rgb_nocie((HSV){palette[i].hsv888.h, palette[i].hsv888.s, palette[i].hsv888.v});
- uint16_t rgb565 = (((uint16_t)rgb.r) >> 3) << 11 | (((uint16_t)rgb.g) >> 2) << 5 | (((uint16_t)rgb.b) >> 3);
- palette[i].rgb565 = __builtin_bswap16(rgb565);
- }
- return true;
-}
-
-// Append pixels to the target location, keyed by the pixel index
-static bool qp_rgb565_surface_append_pixels_rgb565(painter_device_t device, uint8_t *target_buffer, qp_pixel_t *palette, uint32_t pixel_offset, uint32_t pixel_count, uint8_t *palette_indices) {
- uint16_t *buf = (uint16_t *)target_buffer;
- for (uint32_t i = 0; i < pixel_count; ++i) {
- buf[pixel_offset + i] = palette[palette_indices[i]].rgb565;
- }
- return true;
-}
-
-// Append data to the target location
-static bool qp_rgb565_surface_append_pixdata(painter_device_t device, uint8_t *target_buffer, uint32_t pixdata_offset, uint8_t pixdata_byte) {
- target_buffer[pixdata_offset] = pixdata_byte;
- return true;
-}
-
-const painter_driver_vtable_t rgb565_surface_driver_vtable = {
- .init = qp_rgb565_surface_init,
- .power = qp_rgb565_surface_power,
- .clear = qp_rgb565_surface_clear,
- .flush = qp_rgb565_surface_flush,
- .pixdata = qp_rgb565_surface_pixdata,
- .viewport = qp_rgb565_surface_viewport,
- .palette_convert = qp_rgb565_surface_palette_convert_rgb565_swapped,
- .append_pixels = qp_rgb565_surface_append_pixels_rgb565,
- .append_pixdata = qp_rgb565_surface_append_pixdata,
-};
-
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-// Comms vtable
-
-static bool qp_rgb565_surface_comms_init(painter_device_t device) {
- // No-op.
- return true;
-}
-static bool qp_rgb565_surface_comms_start(painter_device_t device) {
- // No-op.
- return true;
-}
-static void qp_rgb565_surface_comms_stop(painter_device_t device) {
- // No-op.
-}
-uint32_t qp_rgb565_surface_comms_send(painter_device_t device, const void *data, uint32_t byte_count) {
- // No-op.
- return byte_count;
-}
-
-painter_comms_vtable_t rgb565_surface_driver_comms_vtable = {
- // These are all effective no-op's because they're not actually needed.
- .comms_init = qp_rgb565_surface_comms_init,
- .comms_start = qp_rgb565_surface_comms_start,
- .comms_stop = qp_rgb565_surface_comms_stop,
- .comms_send = qp_rgb565_surface_comms_send};
-
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-// Factory function for creating a handle to an rgb565 surface
-
-painter_device_t qp_rgb565_make_surface(uint16_t panel_width, uint16_t panel_height, void *buffer) {
- for (uint32_t i = 0; i < RGB565_SURFACE_NUM_DEVICES; ++i) {
- rgb565_surface_painter_device_t *driver = &surface_drivers[i];
- if (!driver->base.driver_vtable) {
- driver->base.driver_vtable = &rgb565_surface_driver_vtable;
- driver->base.comms_vtable = &rgb565_surface_driver_comms_vtable;
- driver->base.native_bits_per_pixel = 16; // RGB565
- driver->base.panel_width = panel_width;
- driver->base.panel_height = panel_height;
- driver->base.rotation = QP_ROTATION_0;
- driver->base.offset_x = 0;
- driver->base.offset_y = 0;
- driver->buffer = (uint16_t *)buffer;
- return (painter_device_t)driver;
- }
- }
- return NULL;
-}
-
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-// Drawing routine to copy out the dirty region and send it to another device
-
-bool qp_rgb565_surface_draw(painter_device_t surface, painter_device_t display, uint16_t x, uint16_t y) {
- painter_driver_t * surface_driver = (painter_driver_t *)surface;
- rgb565_surface_painter_device_t *surface_handle = (rgb565_surface_painter_device_t *)surface_driver;
-
- // If we're not dirty... we're done.
- if (!surface_handle->is_dirty) {
- return true;
- }
-
- // Set the target drawing area
- bool ok = qp_viewport(display, x + surface_handle->dirty_l, y + surface_handle->dirty_t, x + surface_handle->dirty_r, y + surface_handle->dirty_b);
- if (!ok) {
- return false;
- }
-
- // Housekeeping of the amount of pixels to transfer
- uint32_t total_pixel_count = QUANTUM_PAINTER_PIXDATA_BUFFER_SIZE / sizeof(uint16_t);
- uint32_t pixel_counter = 0;
- uint16_t *target_buffer = (uint16_t *)qp_internal_global_pixdata_buffer;
-
- // Fill the global pixdata area so that we can start transferring to the panel
- for (uint16_t y = surface_handle->dirty_t; y <= surface_handle->dirty_b; ++y) {
- for (uint16_t x = surface_handle->dirty_l; x <= surface_handle->dirty_r; ++x) {
- // Update the target buffer
- target_buffer[pixel_counter++] = surface_handle->buffer[y * surface_handle->base.panel_width + x];
-
- // If we've accumulated enough data, send it
- if (pixel_counter == total_pixel_count) {
- ok = qp_pixdata(display, qp_internal_global_pixdata_buffer, pixel_counter);
- if (!ok) {
- return false;
- }
- // Reset the counter
- pixel_counter = 0;
- }
- }
- }
-
- // If there's any leftover data, send it
- if (pixel_counter > 0) {
- ok = qp_pixdata(display, qp_internal_global_pixdata_buffer, pixel_counter);
- if (!ok) {
- return false;
- }
- }
-
- // Clear the dirty info for the surface
- return qp_flush(surface);
-}
diff --git a/drivers/painter/generic/qp_rgb565_surface.h b/drivers/painter/generic/qp_rgb565_surface.h
deleted file mode 100644
index 19e919bb913c..000000000000
--- a/drivers/painter/generic/qp_rgb565_surface.h
+++ /dev/null
@@ -1,42 +0,0 @@
-// Copyright 2022 Nick Brassel (@tzarc)
-// SPDX-License-Identifier: GPL-2.0-or-later
-#include "qp_internal.h"
-
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-// Quantum Painter RGB565 surface configurables (add to your keyboard's config.h)
-
-#ifndef RGB565_SURFACE_NUM_DEVICES
-/**
- * @def This controls the maximum number of surface devices that Quantum Painter can use at any one time.
- * Increasing this number allows for multiple framebuffers to be used. Each requires its own RAM allocation.
- */
-# define RGB565_SURFACE_NUM_DEVICES 1
-#endif
-
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-// Forward declarations
-
-#ifdef QUANTUM_PAINTER_RGB565_SURFACE_ENABLE
-/**
- * Factory method for an RGB565 surface (aka framebuffer).
- *
- * @param panel_width[in] the width of the display panel
- * @param panel_height[in] the height of the display panel
- * @param buffer[in] pointer to a preallocated buffer of size `(sizeof(uint16_t) * panel_width * panel_height)`
- * @return the device handle used with all drawing routines in Quantum Painter
- */
-painter_device_t qp_rgb565_make_surface(uint16_t panel_width, uint16_t panel_height, void *buffer);
-
-/**
- * Helper method to draw the dirty contents of the framebuffer to the target device.
- *
- * After successful completion, the dirty area is reset.
- *
- * @param surface[in] the surface to copy from
- * @param display[in] the display to copy into
- * @param x[in] the x-location of the original position of the framebuffer
- * @param y[in] the y-location of the original position of the framebuffer
- * @return whether the draw operation completed successfully
- */
-bool qp_rgb565_surface_draw(painter_device_t surface, painter_device_t display, uint16_t x, uint16_t y);
-#endif // QUANTUM_PAINTER_RGB565_SURFACE_ENABLE
diff --git a/drivers/painter/generic/qp_surface.h b/drivers/painter/generic/qp_surface.h
new file mode 100644
index 000000000000..a2917936492d
--- /dev/null
+++ b/drivers/painter/generic/qp_surface.h
@@ -0,0 +1,67 @@
+// Copyright 2022 Nick Brassel (@tzarc)
+// SPDX-License-Identifier: GPL-2.0-or-later
+#pragma once
+
+#include "qp_internal.h"
+
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// Quantum Painter surface helpers
+
+// Helper for determining buffer size required for a surface
+#define SURFACE_REQUIRED_BUFFER_BYTE_SIZE(w, h, bpp) ((((w) * (h) * (bpp)) + 7) / 8)
+
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// Quantum Painter surface configurables (add to your keyboard's config.h)
+
+#ifndef SURFACE_NUM_DEVICES
+/**
+ * @def This controls the maximum number of surface devices that Quantum Painter can use at any one time.
+ * Increasing this number allows for multiple framebuffers to be used. Each requires its own RAM allocation.
+ */
+# define SURFACE_NUM_DEVICES 1
+#endif
+
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// Forward declarations
+
+#ifdef QUANTUM_PAINTER_SURFACE_ENABLE
+
+// Surface struct
+struct surface_painter_device_t;
+typedef struct surface_painter_device_t surface_painter_device_t;
+
+/**
+ * Factory method for an RGB565 surface (aka framebuffer).
+ *
+ * @param panel_width[in] the width of the display panel
+ * @param panel_height[in] the height of the display panel
+ * @param buffer[in] pointer to a preallocated uint8_t buffer of size `SURFACE_REQUIRED_BUFFER_BYTE_SIZE(panel_width, panel_height, 16)`
+ * @return the device handle used with all drawing routines in Quantum Painter
+ */
+painter_device_t qp_make_rgb565_surface(uint16_t panel_width, uint16_t panel_height, void *buffer);
+
+/**
+ * Factory method for a 1bpp monochrome surface (aka framebuffer).
+ *
+ * @param panel_width[in] the width of the display panel
+ * @param panel_height[in] the height of the display panel
+ * @param buffer[in] pointer to a preallocated uint8_t buffer of size `SURFACE_REQUIRED_BUFFER_BYTE_SIZE(panel_width, panel_height, 1)`
+ * @return the device handle used with all drawing routines in Quantum Painter
+ */
+painter_device_t qp_make_mono1bpp_surface(uint16_t panel_width, uint16_t panel_height, void *buffer);
+
+/**
+ * Helper method to draw the contents of the framebuffer to the target device.
+ *
+ * After successful completion, the dirty area is reset.
+ *
+ * @param surface[in] the surface to copy from
+ * @param target[in] the target device to copy into
+ * @param x[in] the x-location of the original position of the framebuffer
+ * @param y[in] the y-location of the original position of the framebuffer
+ * @param entire_surface[in] whether the entire surface should be drawn, instead of just the dirty region
+ * @return whether the draw operation completed successfully
+ */
+bool qp_surface_draw(painter_device_t surface, painter_device_t target, uint16_t x, uint16_t y, bool entire_surface);
+
+#endif // QUANTUM_PAINTER_SURFACE_ENABLE
diff --git a/drivers/painter/generic/qp_surface_common.c b/drivers/painter/generic/qp_surface_common.c
new file mode 100644
index 000000000000..2da96c73ac77
--- /dev/null
+++ b/drivers/painter/generic/qp_surface_common.c
@@ -0,0 +1,141 @@
+// Copyright 2022 Nick Brassel (@tzarc)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include "color.h"
+#include "qp_draw.h"
+#include "qp_surface_internal.h"
+
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// Driver storage
+
+surface_painter_device_t surface_drivers[SURFACE_NUM_DEVICES] = {0};
+
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// Helpers
+
+void qp_surface_increment_pixdata_location(surface_viewport_data_t *viewport) {
+ // Increment the X-position
+ viewport->pixdata_x++;
+
+ // If the x-coord has gone past the right-side edge, loop it back around and increment the y-coord
+ if (viewport->pixdata_x > viewport->viewport_r) {
+ viewport->pixdata_x = viewport->viewport_l;
+ viewport->pixdata_y++;
+ }
+
+ // If the y-coord has gone past the bottom, loop it back to the top
+ if (viewport->pixdata_y > viewport->viewport_b) {
+ viewport->pixdata_y = viewport->viewport_t;
+ }
+}
+
+void qp_surface_update_dirty(surface_dirty_data_t *dirty, uint16_t x, uint16_t y) {
+ // Maintain dirty region
+ if (dirty->l > x) {
+ dirty->l = x;
+ dirty->is_dirty = true;
+ }
+ if (dirty->r < x) {
+ dirty->r = x;
+ dirty->is_dirty = true;
+ }
+ if (dirty->t > y) {
+ dirty->t = y;
+ dirty->is_dirty = true;
+ }
+ if (dirty->b < y) {
+ dirty->b = y;
+ dirty->is_dirty = true;
+ }
+}
+
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// Driver vtable
+
+bool qp_surface_init(painter_device_t device, painter_rotation_t rotation) {
+ painter_driver_t * driver = (painter_driver_t *)device;
+ surface_painter_device_t *surface = (surface_painter_device_t *)driver;
+ memset(surface->buffer, 0, SURFACE_REQUIRED_BUFFER_BYTE_SIZE(driver->panel_width, driver->panel_height, driver->native_bits_per_pixel));
+
+ surface->dirty.l = 0;
+ surface->dirty.t = 0;
+ surface->dirty.r = surface->base.panel_width - 1;
+ surface->dirty.b = surface->base.panel_height - 1;
+ surface->dirty.is_dirty = true;
+
+ return true;
+}
+
+bool qp_surface_power(painter_device_t device, bool power_on) {
+ // No-op.
+ return true;
+}
+
+bool qp_surface_clear(painter_device_t device) {
+ painter_driver_t *driver = (painter_driver_t *)device;
+ driver->driver_vtable->init(device, driver->rotation); // Re-init the surface
+ return true;
+}
+
+bool qp_surface_flush(painter_device_t device) {
+ painter_driver_t * driver = (painter_driver_t *)device;
+ surface_painter_device_t *surface = (surface_painter_device_t *)driver;
+ surface->dirty.l = surface->dirty.t = UINT16_MAX;
+ surface->dirty.r = surface->dirty.b = 0;
+ surface->dirty.is_dirty = false;
+ return true;
+}
+
+bool qp_surface_viewport(painter_device_t device, uint16_t left, uint16_t top, uint16_t right, uint16_t bottom) {
+ painter_driver_t * driver = (painter_driver_t *)device;
+ surface_painter_device_t *surface = (surface_painter_device_t *)driver;
+
+ // Set the viewport locations
+ surface->viewport.viewport_l = left;
+ surface->viewport.viewport_t = top;
+ surface->viewport.viewport_r = right;
+ surface->viewport.viewport_b = bottom;
+
+ // Reset the write location to the top left
+ surface->viewport.pixdata_x = left;
+ surface->viewport.pixdata_y = top;
+ return true;
+}
+
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// Drawing routine to copy out the dirty region and send it to another device
+
+bool qp_surface_draw(painter_device_t surface, painter_device_t target, uint16_t x, uint16_t y, bool entire_surface) {
+ painter_driver_t * surface_driver = (painter_driver_t *)surface;
+ surface_painter_device_t *surface_handle = (surface_painter_device_t *)surface_driver;
+ painter_driver_t * target_driver = (painter_driver_t *)target;
+
+ // If we're not dirty... we're done.
+ if (!surface_handle->dirty.is_dirty) {
+ qp_dprintf("qp_surface_draw: ok (not dirty, skipping)\n");
+ return true;
+ }
+
+ // If we have incompatible bit depths, drop out
+ if (surface_driver->native_bits_per_pixel != target_driver->native_bits_per_pixel) {
+ qp_dprintf("qp_surface_draw: fail (incompatible bpp: surface=%d, target=%d)\n", (int)surface_driver->native_bits_per_pixel, (int)target_driver->native_bits_per_pixel);
+ return false;
+ }
+
+ // Offload to the pixdata transfer function
+ surface_painter_driver_vtable_t *vtable = (surface_painter_driver_vtable_t *)surface_driver->driver_vtable;
+ bool ok = vtable->target_pixdata_transfer(surface_driver, target_driver, x, y, entire_surface);
+ if (!ok) {
+ qp_dprintf("qp_surface_draw: fail (could not transfer pixel data)\n");
+ return false;
+ }
+
+ // Clear the dirty info for the surface
+ ok = qp_flush(surface);
+ if (!ok) {
+ qp_dprintf("qp_surface_draw: fail (could not flush)\n");
+ return false;
+ }
+ qp_dprintf("qp_surface_draw: ok\n");
+ return true;
+}
diff --git a/drivers/painter/generic/qp_surface_internal.h b/drivers/painter/generic/qp_surface_internal.h
new file mode 100644
index 000000000000..71f82e924d14
--- /dev/null
+++ b/drivers/painter/generic/qp_surface_internal.h
@@ -0,0 +1,119 @@
+// Copyright 2022 Nick Brassel (@tzarc)
+// SPDX-License-Identifier: GPL-2.0-or-later
+#pragma once
+
+#ifdef QUANTUM_PAINTER_SURFACE_ENABLE
+
+# include "qp_surface.h"
+
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// Internal declarations
+
+// Surface vtable
+typedef struct surface_painter_driver_vtable_t {
+ painter_driver_vtable_t base; // must be first, so it can be cast to/from the painter_driver_vtable_t* type
+
+ bool (*target_pixdata_transfer)(painter_driver_t *surface_driver, painter_driver_t *target_driver, uint16_t x, uint16_t y, bool entire_surface);
+} surface_painter_driver_vtable_t;
+
+typedef struct surface_dirty_data_t {
+ bool is_dirty;
+ uint16_t l;
+ uint16_t t;
+ uint16_t r;
+ uint16_t b;
+} surface_dirty_data_t;
+
+typedef struct surface_viewport_data_t {
+ // Manually manage the viewport for streaming pixel data to the display
+ uint16_t viewport_l;
+ uint16_t viewport_t;
+ uint16_t viewport_r;
+ uint16_t viewport_b;
+
+ // Current write location to the display when streaming pixel data
+ uint16_t pixdata_x;
+ uint16_t pixdata_y;
+} surface_viewport_data_t;
+
+// Surface struct
+typedef struct surface_painter_device_t {
+ painter_driver_t base; // must be first, so it can be cast to/from the painter_device_t* type
+
+ // The target buffer
+ union {
+ void * buffer;
+ uint8_t * u8buffer;
+ uint16_t *u16buffer;
+ };
+
+ // Manually manage the viewport for streaming pixel data to the display
+ surface_viewport_data_t viewport;
+
+ // Maintain a dirty region so we can stream only what we need
+ surface_dirty_data_t dirty;
+} surface_painter_device_t;
+
+/**
+ * Factory method for an RGB565 surface (aka framebuffer). Accepts an external device table.
+ *
+ * @param device_table[in] the table of devices to use for instantiation
+ * @param device_table_len[in] the length of the table of devices
+ * @param panel_width[in] the width of the display panel
+ * @param panel_height[in] the height of the display panel
+ * @param buffer[in] pointer to a preallocated uint8_t buffer of size `SURFACE_REQUIRED_BUFFER_BYTE_SIZE(panel_width, panel_height, 16)`
+ * @return the device handle used with all drawing routines in Quantum Painter
+ */
+painter_device_t qp_make_rgb565_surface_advanced(surface_painter_device_t *device_table, size_t device_table_len, uint16_t panel_width, uint16_t panel_height, void *buffer);
+
+/**
+ * Factory method for a 1bpp monochrome surface (aka framebuffer).
+ *
+ * @param device_table[in] the table of devices to use for instantiation
+ * @param device_table_len[in] the length of the table of devices
+ * @param panel_width[in] the width of the display panel
+ * @param panel_height[in] the height of the display panel
+ * @param buffer[in] pointer to a preallocated uint8_t buffer of size `SURFACE_REQUIRED_BUFFER_BYTE_SIZE(panel_width, panel_height, 16)`
+ * @return the device handle used with all drawing routines in Quantum Painter
+ */
+painter_device_t qp_make_mono1bpp_surface_advanced(surface_painter_device_t *device_table, size_t device_table_len, uint16_t panel_width, uint16_t panel_height, void *buffer);
+
+// Driver storage
+extern surface_painter_device_t surface_drivers[SURFACE_NUM_DEVICES];
+
+// Surface common APIs
+bool qp_surface_init(painter_device_t device, painter_rotation_t rotation);
+bool qp_surface_power(painter_device_t device, bool power_on);
+bool qp_surface_clear(painter_device_t device);
+bool qp_surface_flush(painter_device_t device);
+bool qp_surface_viewport(painter_device_t device, uint16_t left, uint16_t top, uint16_t right, uint16_t bottom);
+void qp_surface_increment_pixdata_location(surface_viewport_data_t *viewport);
+void qp_surface_update_dirty(surface_dirty_data_t *dirty, uint16_t x, uint16_t y);
+
+#endif // QUANTUM_PAINTER_SURFACE_ENABLE
+
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// Factory functions for creating a handle to a surface
+
+#define SURFACE_FACTORY_FUNCTION_IMPL(function_name, vtable, bpp) \
+ painter_device_t(function_name##_advanced)(surface_painter_device_t * device_table, size_t device_table_len, uint16_t panel_width, uint16_t panel_height, void *buffer) { \
+ for (uint32_t i = 0; i < device_table_len; ++i) { \
+ surface_painter_device_t *driver = &device_table[i]; \
+ if (!driver->base.driver_vtable) { \
+ driver->base.driver_vtable = (painter_driver_vtable_t *)&(vtable); \
+ driver->base.native_bits_per_pixel = (bpp); \
+ driver->base.comms_vtable = &dummy_comms_vtable; \
+ driver->base.panel_width = panel_width; \
+ driver->base.panel_height = panel_height; \
+ driver->base.rotation = QP_ROTATION_0; \
+ driver->base.offset_x = 0; \
+ driver->base.offset_y = 0; \
+ driver->buffer = buffer; \
+ return (painter_device_t)driver; \
+ } \
+ } \
+ return NULL; \
+ } \
+ painter_device_t(function_name)(uint16_t panel_width, uint16_t panel_height, void *buffer) { \
+ return (function_name##_advanced)(surface_drivers, SURFACE_NUM_DEVICES, panel_width, panel_height, buffer); \
+ }
diff --git a/drivers/painter/generic/qp_surface_mono1bpp.c b/drivers/painter/generic/qp_surface_mono1bpp.c
new file mode 100644
index 000000000000..c66b56519da4
--- /dev/null
+++ b/drivers/painter/generic/qp_surface_mono1bpp.c
@@ -0,0 +1,113 @@
+// Copyright 2022 Nick Brassel (@tzarc)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#ifdef QUANTUM_PAINTER_SURFACE_ENABLE
+
+# include "color.h"
+# include "qp_draw.h"
+# include "qp_surface_internal.h"
+# include "qp_comms_dummy.h"
+
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// Surface driver impl: mono1bpp
+
+static inline void setpixel_mono1bpp(surface_painter_device_t *surface, uint16_t x, uint16_t y, bool mono_pixel) {
+ uint16_t w = surface->base.panel_width;
+ uint16_t h = surface->base.panel_height;
+
+ // Drop out if it's off-screen
+ if (x >= w || y >= h) {
+ return;
+ }
+
+ // Figure out which location needs to be updated
+ uint32_t pixel_num = y * w + x;
+ uint32_t byte_offset = pixel_num / 8;
+ uint8_t bit_offset = pixel_num % 8;
+ bool curr_val = (surface->u8buffer[byte_offset] & (1 << bit_offset)) ? true : false;
+
+ // Skip messing with the dirty info if the original value already matches
+ if (curr_val != mono_pixel) {
+ // Update the dirty region
+ qp_surface_update_dirty(&surface->dirty, x, y);
+
+ // Update the pixel data in the buffer
+ if (mono_pixel) {
+ surface->u8buffer[byte_offset] |= (1 << bit_offset);
+ } else {
+ surface->u8buffer[byte_offset] &= ~(1 << bit_offset);
+ }
+ }
+}
+
+static inline void append_pixel_mono1bpp(surface_painter_device_t *surface, bool mono_pixel) {
+ setpixel_mono1bpp(surface, surface->viewport.pixdata_x, surface->viewport.pixdata_y, mono_pixel);
+ qp_surface_increment_pixdata_location(&surface->viewport);
+}
+
+static inline void stream_pixdata_mono1bpp(surface_painter_device_t *surface, const uint8_t *data, uint32_t native_pixel_count) {
+ for (uint32_t pixel_counter = 0; pixel_counter < native_pixel_count; ++pixel_counter) {
+ uint32_t byte_offset = pixel_counter / 8;
+ uint8_t bit_offset = pixel_counter % 8;
+ append_pixel_mono1bpp(surface, (data[byte_offset] & (1 << bit_offset)) ? true : false);
+ }
+}
+
+// Stream pixel data to the current write position in GRAM
+static bool qp_surface_pixdata_mono1bpp(painter_device_t device, const void *pixel_data, uint32_t native_pixel_count) {
+ painter_driver_t * driver = (painter_driver_t *)device;
+ surface_painter_device_t *surface = (surface_painter_device_t *)driver;
+ stream_pixdata_mono1bpp(surface, (const uint8_t *)pixel_data, native_pixel_count);
+ return true;
+}
+
+// Pixel colour conversion
+static bool qp_surface_palette_convert_mono1bpp(painter_device_t device, int16_t palette_size, qp_pixel_t *palette) {
+ for (int16_t i = 0; i < palette_size; ++i) {
+ palette[i].mono = (palette[i].hsv888.v > 127) ? 1 : 0;
+ }
+ return true;
+}
+
+// Append pixels to the target location, keyed by the pixel index
+static bool qp_surface_append_pixels_mono1bpp(painter_device_t device, uint8_t *target_buffer, qp_pixel_t *palette, uint32_t pixel_offset, uint32_t pixel_count, uint8_t *palette_indices) {
+ for (uint32_t i = 0; i < pixel_count; ++i) {
+ uint32_t pixel_num = pixel_offset + i;
+ uint32_t byte_offset = pixel_num / 8;
+ uint8_t bit_offset = pixel_num % 8;
+ if (palette[palette_indices[i]].mono) {
+ target_buffer[byte_offset] |= (1 << bit_offset);
+ } else {
+ target_buffer[byte_offset] &= ~(1 << bit_offset);
+ }
+ }
+ return true;
+}
+
+static bool mono1bpp_target_pixdata_transfer(painter_driver_t *surface_driver, painter_driver_t *target_driver, uint16_t x, uint16_t y, bool entire_surface) {
+ return false; // Not yet supported.
+}
+
+static bool qp_surface_append_pixdata_mono1bpp(painter_device_t device, uint8_t *target_buffer, uint32_t pixdata_offset, uint8_t pixdata_byte) {
+ return false; // Just use 1bpp images.
+}
+
+const surface_painter_driver_vtable_t mono1bpp_surface_driver_vtable = {
+ .base =
+ {
+ .init = qp_surface_init,
+ .power = qp_surface_power,
+ .clear = qp_surface_clear,
+ .flush = qp_surface_flush,
+ .pixdata = qp_surface_pixdata_mono1bpp,
+ .viewport = qp_surface_viewport,
+ .palette_convert = qp_surface_palette_convert_mono1bpp,
+ .append_pixels = qp_surface_append_pixels_mono1bpp,
+ .append_pixdata = qp_surface_append_pixdata_mono1bpp,
+ },
+ .target_pixdata_transfer = mono1bpp_target_pixdata_transfer,
+};
+
+SURFACE_FACTORY_FUNCTION_IMPL(qp_make_mono1bpp_surface, mono1bpp_surface_driver_vtable, 1);
+
+#endif // QUANTUM_PAINTER_SURFACE_ENABLE
diff --git a/drivers/painter/generic/qp_surface_rgb565.c b/drivers/painter/generic/qp_surface_rgb565.c
new file mode 100644
index 000000000000..8883ed541d82
--- /dev/null
+++ b/drivers/painter/generic/qp_surface_rgb565.c
@@ -0,0 +1,145 @@
+// Copyright 2022 Nick Brassel (@tzarc)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#ifdef QUANTUM_PAINTER_SURFACE_ENABLE
+
+# include "color.h"
+# include "qp_draw.h"
+# include "qp_surface_internal.h"
+# include "qp_comms_dummy.h"
+
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// Surface driver impl: rgb565
+
+static inline void setpixel_rgb565(surface_painter_device_t *surface, uint16_t x, uint16_t y, uint16_t rgb565) {
+ uint16_t w = surface->base.panel_width;
+ uint16_t h = surface->base.panel_height;
+
+ // Drop out if it's off-screen
+ if (x >= w || y >= h) {
+ return;
+ }
+
+ // Skip messing with the dirty info if the original value already matches
+ if (surface->u16buffer[y * w + x] != rgb565) {
+ // Update the dirty region
+ qp_surface_update_dirty(&surface->dirty, x, y);
+
+ // Update the pixel data in the buffer
+ surface->u16buffer[y * w + x] = rgb565;
+ }
+}
+
+static inline void append_pixel_rgb565(surface_painter_device_t *surface, uint16_t rgb565) {
+ setpixel_rgb565(surface, surface->viewport.pixdata_x, surface->viewport.pixdata_y, rgb565);
+ qp_surface_increment_pixdata_location(&surface->viewport);
+}
+
+static inline void stream_pixdata_rgb565(surface_painter_device_t *surface, const uint16_t *data, uint32_t native_pixel_count) {
+ for (uint32_t pixel_counter = 0; pixel_counter < native_pixel_count; ++pixel_counter) {
+ append_pixel_rgb565(surface, data[pixel_counter]);
+ }
+}
+
+// Stream pixel data to the current write position in GRAM
+static bool qp_surface_pixdata_rgb565(painter_device_t device, const void *pixel_data, uint32_t native_pixel_count) {
+ painter_driver_t * driver = (painter_driver_t *)device;
+ surface_painter_device_t *surface = (surface_painter_device_t *)driver;
+ stream_pixdata_rgb565(surface, (const uint16_t *)pixel_data, native_pixel_count);
+ return true;
+}
+
+// Pixel colour conversion
+static bool qp_surface_palette_convert_rgb565_swapped(painter_device_t device, int16_t palette_size, qp_pixel_t *palette) {
+ for (int16_t i = 0; i < palette_size; ++i) {
+ RGB rgb = hsv_to_rgb_nocie((HSV){palette[i].hsv888.h, palette[i].hsv888.s, palette[i].hsv888.v});
+ uint16_t rgb565 = (((uint16_t)rgb.r) >> 3) << 11 | (((uint16_t)rgb.g) >> 2) << 5 | (((uint16_t)rgb.b) >> 3);
+ palette[i].rgb565 = __builtin_bswap16(rgb565);
+ }
+ return true;
+}
+
+// Append pixels to the target location, keyed by the pixel index
+static bool qp_surface_append_pixels_rgb565(painter_device_t device, uint8_t *target_buffer, qp_pixel_t *palette, uint32_t pixel_offset, uint32_t pixel_count, uint8_t *palette_indices) {
+ uint16_t *buf = (uint16_t *)target_buffer;
+ for (uint32_t i = 0; i < pixel_count; ++i) {
+ buf[pixel_offset + i] = palette[palette_indices[i]].rgb565;
+ }
+ return true;
+}
+
+static bool rgb565_target_pixdata_transfer(painter_driver_t *surface_driver, painter_driver_t *target_driver, uint16_t x, uint16_t y, bool entire_surface) {
+ surface_painter_device_t *surface_handle = (surface_painter_device_t *)surface_driver;
+
+ uint16_t l = entire_surface ? 0 : surface_handle->dirty.l;
+ uint16_t t = entire_surface ? 0 : surface_handle->dirty.t;
+ uint16_t r = entire_surface ? (surface_handle->base.panel_width - 1) : surface_handle->dirty.r;
+ uint16_t b = entire_surface ? (surface_handle->base.panel_height - 1) : surface_handle->dirty.b;
+
+ // Set the target drawing area
+ bool ok = qp_viewport((painter_device_t)target_driver, x + l, y + t, x + r, y + b);
+ if (!ok) {
+ qp_dprintf("rgb565_target_pixdata_transfer: fail (could not set target viewport)\n");
+ return false;
+ }
+
+ // Housekeeping of the amount of pixels to transfer
+ uint32_t total_pixel_count = (8 * QUANTUM_PAINTER_PIXDATA_BUFFER_SIZE) / surface_driver->native_bits_per_pixel;
+ uint32_t pixel_counter = 0;
+ uint16_t *target_buffer = (uint16_t *)qp_internal_global_pixdata_buffer;
+
+ // Fill the global pixdata area so that we can start transferring to the panel
+ for (uint16_t y = t; y <= b; ++y) {
+ for (uint16_t x = l; x <= r; ++x) {
+ // Update the target buffer
+ target_buffer[pixel_counter++] = surface_handle->u16buffer[y * surface_handle->base.panel_width + x];
+
+ // If we've accumulated enough data, send it
+ if (pixel_counter == total_pixel_count) {
+ ok = qp_pixdata((painter_device_t)target_driver, qp_internal_global_pixdata_buffer, pixel_counter);
+ if (!ok) {
+ qp_dprintf("rgb565_target_pixdata_transfer: fail (could not stream pixdata to target)\n");
+ return false;
+ }
+ // Reset the counter
+ pixel_counter = 0;
+ }
+ }
+ }
+
+ // If there's any leftover data, send it
+ if (pixel_counter > 0) {
+ ok = qp_pixdata((painter_device_t)target_driver, qp_internal_global_pixdata_buffer, pixel_counter);
+ if (!ok) {
+ qp_dprintf("rgb565_target_pixdata_transfer: fail (could not stream pixdata to target)\n");
+ return false;
+ }
+ }
+
+ return true;
+}
+
+static bool qp_surface_append_pixdata_rgb565(painter_device_t device, uint8_t *target_buffer, uint32_t pixdata_offset, uint8_t pixdata_byte) {
+ target_buffer[pixdata_offset] = pixdata_byte;
+ return true;
+}
+
+const surface_painter_driver_vtable_t rgb565_surface_driver_vtable = {
+ .base =
+ {
+ .init = qp_surface_init,
+ .power = qp_surface_power,
+ .clear = qp_surface_clear,
+ .flush = qp_surface_flush,
+ .pixdata = qp_surface_pixdata_rgb565,
+ .viewport = qp_surface_viewport,
+ .palette_convert = qp_surface_palette_convert_rgb565_swapped,
+ .append_pixels = qp_surface_append_pixels_rgb565,
+ .append_pixdata = qp_surface_append_pixdata_rgb565,
+ },
+ .target_pixdata_transfer = rgb565_target_pixdata_transfer,
+};
+
+SURFACE_FACTORY_FUNCTION_IMPL(qp_make_rgb565_surface, rgb565_surface_driver_vtable, 16);
+
+#endif // QUANTUM_PAINTER_SURFACE_ENABLE
diff --git a/drivers/painter/ili9xxx/qp_ili9163.c b/drivers/painter/ili9xxx/qp_ili9163.c
index a75be5790486..7f439dc317ab 100644
--- a/drivers/painter/ili9xxx/qp_ili9163.c
+++ b/drivers/painter/ili9xxx/qp_ili9163.c
@@ -103,13 +103,14 @@ painter_device_t qp_ili9163_make_spi_device(uint16_t panel_width, uint16_t panel
driver->base.native_bits_per_pixel = 16; // RGB565
// SPI and other pin configuration
- driver->base.comms_config = &driver->spi_dc_reset_config;
- driver->spi_dc_reset_config.spi_config.chip_select_pin = chip_select_pin;
- driver->spi_dc_reset_config.spi_config.divisor = spi_divisor;
- driver->spi_dc_reset_config.spi_config.lsb_first = false;
- driver->spi_dc_reset_config.spi_config.mode = spi_mode;
- driver->spi_dc_reset_config.dc_pin = dc_pin;
- driver->spi_dc_reset_config.reset_pin = reset_pin;
+ driver->base.comms_config = &driver->spi_dc_reset_config;
+ driver->spi_dc_reset_config.spi_config.chip_select_pin = chip_select_pin;
+ driver->spi_dc_reset_config.spi_config.divisor = spi_divisor;
+ driver->spi_dc_reset_config.spi_config.lsb_first = false;
+ driver->spi_dc_reset_config.spi_config.mode = spi_mode;
+ driver->spi_dc_reset_config.dc_pin = dc_pin;
+ driver->spi_dc_reset_config.reset_pin = reset_pin;
+ driver->spi_dc_reset_config.command_params_uses_command_pin = false;
if (!qp_internal_register_device((painter_device_t)driver)) {
memset(driver, 0, sizeof(tft_panel_dc_reset_painter_device_t));
diff --git a/drivers/painter/ili9xxx/qp_ili9163.h b/drivers/painter/ili9xxx/qp_ili9163.h
index 88d23629a92a..a9b3befd48a4 100644
--- a/drivers/painter/ili9xxx/qp_ili9163.h
+++ b/drivers/painter/ili9xxx/qp_ili9163.h
@@ -1,6 +1,5 @@
// Copyright 2021 Nick Brassel (@tzarc)
// SPDX-License-Identifier: GPL-2.0-or-later
-
#pragma once
#include "gpio.h"
diff --git a/drivers/painter/ili9xxx/qp_ili9341.c b/drivers/painter/ili9xxx/qp_ili9341.c
index 4130271f71b4..a101b292aa04 100644
--- a/drivers/painter/ili9xxx/qp_ili9341.c
+++ b/drivers/painter/ili9xxx/qp_ili9341.c
@@ -110,13 +110,14 @@ painter_device_t qp_ili9341_make_spi_device(uint16_t panel_width, uint16_t panel
driver->base.offset_y = 0;
// SPI and other pin configuration
- driver->base.comms_config = &driver->spi_dc_reset_config;
- driver->spi_dc_reset_config.spi_config.chip_select_pin = chip_select_pin;
- driver->spi_dc_reset_config.spi_config.divisor = spi_divisor;
- driver->spi_dc_reset_config.spi_config.lsb_first = false;
- driver->spi_dc_reset_config.spi_config.mode = spi_mode;
- driver->spi_dc_reset_config.dc_pin = dc_pin;
- driver->spi_dc_reset_config.reset_pin = reset_pin;
+ driver->base.comms_config = &driver->spi_dc_reset_config;
+ driver->spi_dc_reset_config.spi_config.chip_select_pin = chip_select_pin;
+ driver->spi_dc_reset_config.spi_config.divisor = spi_divisor;
+ driver->spi_dc_reset_config.spi_config.lsb_first = false;
+ driver->spi_dc_reset_config.spi_config.mode = spi_mode;
+ driver->spi_dc_reset_config.dc_pin = dc_pin;
+ driver->spi_dc_reset_config.reset_pin = reset_pin;
+ driver->spi_dc_reset_config.command_params_uses_command_pin = false;
if (!qp_internal_register_device((painter_device_t)driver)) {
memset(driver, 0, sizeof(tft_panel_dc_reset_painter_device_t));
diff --git a/drivers/painter/ili9xxx/qp_ili9341.h b/drivers/painter/ili9xxx/qp_ili9341.h
index 28b0152a84cb..d850aba1146a 100644
--- a/drivers/painter/ili9xxx/qp_ili9341.h
+++ b/drivers/painter/ili9xxx/qp_ili9341.h
@@ -1,6 +1,5 @@
// Copyright 2021 Nick Brassel (@tzarc)
// SPDX-License-Identifier: GPL-2.0-or-later
-
#pragma once
#include "gpio.h"
diff --git a/drivers/painter/ili9xxx/qp_ili9488.c b/drivers/painter/ili9xxx/qp_ili9488.c
index a8da52132e0f..63deaf5f2e99 100644
--- a/drivers/painter/ili9xxx/qp_ili9488.c
+++ b/drivers/painter/ili9xxx/qp_ili9488.c
@@ -103,13 +103,14 @@ painter_device_t qp_ili9488_make_spi_device(uint16_t panel_width, uint16_t panel
driver->base.offset_y = 0;
// SPI and other pin configuration
- driver->base.comms_config = &driver->spi_dc_reset_config;
- driver->spi_dc_reset_config.spi_config.chip_select_pin = chip_select_pin;
- driver->spi_dc_reset_config.spi_config.divisor = spi_divisor;
- driver->spi_dc_reset_config.spi_config.lsb_first = false;
- driver->spi_dc_reset_config.spi_config.mode = spi_mode;
- driver->spi_dc_reset_config.dc_pin = dc_pin;
- driver->spi_dc_reset_config.reset_pin = reset_pin;
+ driver->base.comms_config = &driver->spi_dc_reset_config;
+ driver->spi_dc_reset_config.spi_config.chip_select_pin = chip_select_pin;
+ driver->spi_dc_reset_config.spi_config.divisor = spi_divisor;
+ driver->spi_dc_reset_config.spi_config.lsb_first = false;
+ driver->spi_dc_reset_config.spi_config.mode = spi_mode;
+ driver->spi_dc_reset_config.dc_pin = dc_pin;
+ driver->spi_dc_reset_config.reset_pin = reset_pin;
+ driver->spi_dc_reset_config.command_params_uses_command_pin = false;
if (!qp_internal_register_device((painter_device_t)driver)) {
memset(driver, 0, sizeof(tft_panel_dc_reset_painter_device_t));
diff --git a/drivers/painter/ili9xxx/qp_ili9488.h b/drivers/painter/ili9xxx/qp_ili9488.h
index 21b8f0332280..da56f1090fd0 100644
--- a/drivers/painter/ili9xxx/qp_ili9488.h
+++ b/drivers/painter/ili9xxx/qp_ili9488.h
@@ -1,6 +1,5 @@
// Copyright 2021 Nick Brassel (@tzarc)
// SPDX-License-Identifier: GPL-2.0-or-later
-
#pragma once
#include "gpio.h"
diff --git a/drivers/painter/oled_panel/qp_oled_panel.c b/drivers/painter/oled_panel/qp_oled_panel.c
new file mode 100644
index 000000000000..eefee3f13f5c
--- /dev/null
+++ b/drivers/painter/oled_panel/qp_oled_panel.c
@@ -0,0 +1,195 @@
+// Copyright 2023 Nick Brassel (@tzarc)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include "color.h"
+#include "qp_internal.h"
+#include "qp_comms.h"
+#include "qp_draw.h"
+#include "qp_oled_panel.h"
+
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// Quantum Painter API implementations
+
+// Power control
+bool qp_oled_panel_power(painter_device_t device, bool power_on) {
+ painter_driver_t * driver = (painter_driver_t *)device;
+ oled_panel_painter_driver_vtable_t *vtable = (oled_panel_painter_driver_vtable_t *)driver->driver_vtable;
+ qp_comms_command(device, power_on ? vtable->opcodes.display_on : vtable->opcodes.display_off);
+ return true;
+}
+
+// Screen clear
+bool qp_oled_panel_clear(painter_device_t device) {
+ painter_driver_t *driver = (painter_driver_t *)device;
+ driver->driver_vtable->init(device, driver->rotation); // Re-init the display
+ return true;
+}
+
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// Surface passthru
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+bool qp_oled_panel_passthru_pixdata(painter_device_t device, const void *pixel_data, uint32_t native_pixel_count) {
+ oled_panel_painter_device_t *driver = (oled_panel_painter_device_t *)device;
+ return driver->surface.base.validate_ok && driver->surface.base.driver_vtable->pixdata(&driver->surface.base, pixel_data, native_pixel_count);
+}
+
+bool qp_oled_panel_passthru_viewport(painter_device_t device, uint16_t left, uint16_t top, uint16_t right, uint16_t bottom) {
+ oled_panel_painter_device_t *driver = (oled_panel_painter_device_t *)device;
+ return driver->surface.base.validate_ok && driver->surface.base.driver_vtable->viewport(&driver->surface.base, left, top, right, bottom);
+}
+
+bool qp_oled_panel_passthru_palette_convert(painter_device_t device, int16_t palette_size, qp_pixel_t *palette) {
+ oled_panel_painter_device_t *driver = (oled_panel_painter_device_t *)device;
+ return driver->surface.base.validate_ok && driver->surface.base.driver_vtable->palette_convert(&driver->surface.base, palette_size, palette);
+}
+
+bool qp_oled_panel_passthru_append_pixels(painter_device_t device, uint8_t *target_buffer, qp_pixel_t *palette, uint32_t pixel_offset, uint32_t pixel_count, uint8_t *palette_indices) {
+ oled_panel_painter_device_t *driver = (oled_panel_painter_device_t *)device;
+ return driver->surface.base.validate_ok && driver->surface.base.driver_vtable->append_pixels(&driver->surface.base, target_buffer, palette, pixel_offset, pixel_count, palette_indices);
+}
+
+bool qp_oled_panel_passthru_append_pixdata(painter_device_t device, uint8_t *target_buffer, uint32_t pixdata_offset, uint8_t pixdata_byte) {
+ oled_panel_painter_device_t *driver = (oled_panel_painter_device_t *)device;
+ return driver->surface.base.validate_ok && driver->surface.base.driver_vtable->append_pixdata(&driver->surface.base, target_buffer, pixdata_offset, pixdata_byte);
+}
+
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// Flush helpers
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+void qp_oled_panel_page_column_flush_rot0(painter_device_t device, surface_dirty_data_t *dirty, const uint8_t *framebuffer) {
+ painter_driver_t * driver = (painter_driver_t *)device;
+ oled_panel_painter_driver_vtable_t *vtable = (oled_panel_painter_driver_vtable_t *)driver->driver_vtable;
+
+ // TODO: account for offset_x/y in base driver
+ int min_page = dirty->t / 8;
+ int max_page = dirty->b / 8;
+ int min_column = dirty->l;
+ int max_column = dirty->r;
+
+ for (int page = min_page; page <= max_page; ++page) {
+ int cols_required = max_column - min_column + 1;
+ uint8_t column_data[cols_required];
+ memset(column_data, 0, cols_required);
+ for (int x = min_column; x <= max_column; ++x) {
+ uint16_t data_offset = x - min_column;
+ for (int y = 0; y < 8; ++y) {
+ uint32_t pixel_num = ((page * 8) + y) * driver->panel_width + x;
+ uint32_t byte_offset = pixel_num / 8;
+ uint8_t bit_offset = pixel_num % 8;
+ column_data[data_offset] |= ((framebuffer[byte_offset] & (1 << bit_offset)) >> bit_offset) << y;
+ }
+ }
+
+ int actual_page = page;
+ int start_column = min_column;
+ qp_comms_command(device, vtable->opcodes.set_page | actual_page);
+ qp_comms_command(device, vtable->opcodes.set_column_lsb | (start_column & 0x0F));
+ qp_comms_command(device, vtable->opcodes.set_column_msb | (start_column & 0xF0) >> 4);
+ qp_comms_send(device, column_data, cols_required);
+ }
+}
+
+void qp_oled_panel_page_column_flush_rot90(painter_device_t device, surface_dirty_data_t *dirty, const uint8_t *framebuffer) {
+ painter_driver_t * driver = (painter_driver_t *)device;
+ oled_panel_painter_driver_vtable_t *vtable = (oled_panel_painter_driver_vtable_t *)driver->driver_vtable;
+
+ // TODO: account for offset_x/y in base driver
+ int num_columns = driver->panel_width;
+ int min_page = dirty->l / 8;
+ int max_page = dirty->r / 8;
+ int min_column = dirty->t;
+ int max_column = dirty->b;
+
+ for (int page = min_page; page <= max_page; ++page) {
+ int cols_required = max_column - min_column + 1;
+ uint8_t column_data[cols_required];
+ memset(column_data, 0, cols_required);
+ for (int y = min_column; y <= max_column; ++y) {
+ uint16_t data_offset = cols_required - 1 - (y - min_column);
+ for (int x = 0; x < 8; ++x) {
+ uint32_t pixel_num = y * driver->panel_height + ((page * 8) + x);
+ uint32_t byte_offset = pixel_num / 8;
+ uint8_t bit_offset = pixel_num % 8;
+ column_data[data_offset] |= ((framebuffer[byte_offset] & (1 << bit_offset)) >> bit_offset) << x;
+ }
+ }
+
+ int actual_page = page;
+ int start_column = num_columns - 1 - max_column;
+ qp_comms_command(device, vtable->opcodes.set_page | actual_page);
+ qp_comms_command(device, vtable->opcodes.set_column_lsb | (start_column & 0x0F));
+ qp_comms_command(device, vtable->opcodes.set_column_msb | (start_column & 0xF0) >> 4);
+ qp_comms_send(device, column_data, cols_required);
+ }
+}
+
+void qp_oled_panel_page_column_flush_rot180(painter_device_t device, surface_dirty_data_t *dirty, const uint8_t *framebuffer) {
+ painter_driver_t * driver = (painter_driver_t *)device;
+ oled_panel_painter_driver_vtable_t *vtable = (oled_panel_painter_driver_vtable_t *)driver->driver_vtable;
+
+ // TODO: account for offset_x/y in base driver
+ int num_pages = driver->panel_height / 8;
+ int num_columns = driver->panel_width;
+ int min_page = dirty->t / 8;
+ int max_page = dirty->b / 8;
+ int min_column = dirty->l;
+ int max_column = dirty->r;
+
+ for (int page = min_page; page <= max_page; ++page) {
+ int cols_required = max_column - min_column + 1;
+ uint8_t column_data[cols_required];
+ memset(column_data, 0, cols_required);
+ for (int x = min_column; x <= max_column; ++x) {
+ uint16_t data_offset = cols_required - 1 - (x - min_column);
+ for (int y = 0; y < 8; ++y) {
+ uint32_t pixel_num = ((page * 8) + y) * driver->panel_width + x;
+ uint32_t byte_offset = pixel_num / 8;
+ uint8_t bit_offset = pixel_num % 8;
+ column_data[data_offset] |= ((framebuffer[byte_offset] & (1 << bit_offset)) >> bit_offset) << (7 - y);
+ }
+ }
+
+ int actual_page = num_pages - 1 - page;
+ int start_column = num_columns - 1 - max_column;
+ qp_comms_command(device, vtable->opcodes.set_page | actual_page);
+ qp_comms_command(device, vtable->opcodes.set_column_lsb | (start_column & 0x0F));
+ qp_comms_command(device, vtable->opcodes.set_column_msb | (start_column & 0xF0) >> 4);
+ qp_comms_send(device, column_data, cols_required);
+ }
+}
+
+void qp_oled_panel_page_column_flush_rot270(painter_device_t device, surface_dirty_data_t *dirty, const uint8_t *framebuffer) {
+ painter_driver_t * driver = (painter_driver_t *)device;
+ oled_panel_painter_driver_vtable_t *vtable = (oled_panel_painter_driver_vtable_t *)driver->driver_vtable;
+
+ // TODO: account for offset_x/y in base driver
+ int num_pages = driver->panel_height / 8;
+ int min_page = dirty->l / 8;
+ int max_page = dirty->r / 8;
+ int min_column = dirty->t;
+ int max_column = dirty->b;
+
+ for (int page = min_page; page <= max_page; ++page) {
+ int cols_required = max_column - min_column + 1;
+ uint8_t column_data[cols_required];
+ memset(column_data, 0, cols_required);
+ for (int y = min_column; y <= max_column; ++y) {
+ uint16_t data_offset = y - min_column;
+ for (int x = 0; x < 8; ++x) {
+ uint32_t pixel_num = y * driver->panel_height + ((page * 8) + x);
+ uint32_t byte_offset = pixel_num / 8;
+ uint8_t bit_offset = pixel_num % 8;
+ column_data[data_offset] |= ((framebuffer[byte_offset] & (1 << bit_offset)) >> bit_offset) << (7 - x);
+ }
+ }
+
+ int actual_page = num_pages - 1 - page;
+ int start_column = min_column;
+ qp_comms_command(device, vtable->opcodes.set_page | actual_page);
+ qp_comms_command(device, vtable->opcodes.set_column_lsb | (start_column & 0x0F));
+ qp_comms_command(device, vtable->opcodes.set_column_msb | (start_column & 0xF0) >> 4);
+ qp_comms_send(device, column_data, cols_required);
+ }
+}
diff --git a/drivers/painter/oled_panel/qp_oled_panel.h b/drivers/painter/oled_panel/qp_oled_panel.h
new file mode 100644
index 000000000000..ccc7ab92048c
--- /dev/null
+++ b/drivers/painter/oled_panel/qp_oled_panel.h
@@ -0,0 +1,68 @@
+// Copyright 2023 Nick Brassel (@tzarc)
+// SPDX-License-Identifier: GPL-2.0-or-later
+#pragma once
+
+#include "color.h"
+#include "qp_internal.h"
+#include "qp_surface_internal.h"
+
+#ifdef QUANTUM_PAINTER_SPI_ENABLE
+# include "qp_comms_spi.h"
+#endif // QUANTUM_PAINTER_SPI_ENABLE
+
+#ifdef QUANTUM_PAINTER_I2C_ENABLE
+# include "qp_comms_i2c.h"
+#endif // QUANTUM_PAINTER_I2C_ENABLE
+
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// Common OLED panel implementation
+
+// Driver vtable with extras
+typedef struct oled_panel_painter_driver_vtable_t {
+ painter_driver_vtable_t base; // must be first, so it can be cast to/from the painter_driver_vtable_t* type
+
+ // Opcodes for normal display operation
+ struct {
+ uint8_t display_on;
+ uint8_t display_off;
+ uint8_t set_page;
+ uint8_t set_column_lsb;
+ uint8_t set_column_msb;
+ } opcodes;
+} oled_panel_painter_driver_vtable_t;
+
+// Device definition
+typedef struct oled_panel_painter_device_t {
+ painter_driver_t base; // must be first, so it can be cast to/from the painter_device_t* type
+
+ union {
+#ifdef QUANTUM_PAINTER_SPI_ENABLE
+ // SPI-based configurables
+ qp_comms_spi_dc_reset_config_t spi_dc_reset_config;
+#endif // QUANTUM_PAINTER_SPI_ENABLE
+#ifdef QUANTUM_PAINTER_I2C_ENABLE
+ // I2C-based configurables
+ qp_comms_i2c_config_t i2c_config;
+#endif // QUANTUM_PAINTER_I2C_ENABLE
+ };
+
+ surface_painter_device_t surface;
+} oled_panel_painter_device_t;
+
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// Forward declarations for injecting into concrete driver vtables
+
+bool qp_oled_panel_power(painter_device_t device, bool power_on);
+bool qp_oled_panel_clear(painter_device_t device);
+
+bool qp_oled_panel_passthru_pixdata(painter_device_t device, const void *pixel_data, uint32_t native_pixel_count);
+bool qp_oled_panel_passthru_viewport(painter_device_t device, uint16_t left, uint16_t top, uint16_t right, uint16_t bottom);
+bool qp_oled_panel_passthru_palette_convert(painter_device_t device, int16_t palette_size, qp_pixel_t *palette);
+bool qp_oled_panel_passthru_append_pixels(painter_device_t device, uint8_t *target_buffer, qp_pixel_t *palette, uint32_t pixel_offset, uint32_t pixel_count, uint8_t *palette_indices);
+bool qp_oled_panel_passthru_append_pixdata(painter_device_t device, uint8_t *target_buffer, uint32_t pixdata_offset, uint8_t pixdata_byte);
+
+// Helpers for flushing data from the dirty region to the correct location on the OLED
+void qp_oled_panel_page_column_flush_rot0(painter_device_t device, surface_dirty_data_t *dirty, const uint8_t *framebuffer);
+void qp_oled_panel_page_column_flush_rot90(painter_device_t device, surface_dirty_data_t *dirty, const uint8_t *framebuffer);
+void qp_oled_panel_page_column_flush_rot180(painter_device_t device, surface_dirty_data_t *dirty, const uint8_t *framebuffer);
+void qp_oled_panel_page_column_flush_rot270(painter_device_t device, surface_dirty_data_t *dirty, const uint8_t *framebuffer);
diff --git a/drivers/painter/sh1106/qp_sh1106.c b/drivers/painter/sh1106/qp_sh1106.c
new file mode 100644
index 000000000000..7cb6e398fac5
--- /dev/null
+++ b/drivers/painter/sh1106/qp_sh1106.c
@@ -0,0 +1,206 @@
+// Copyright 2023 Nick Brassel (@tzarc)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include "qp_internal.h"
+#include "qp_comms.h"
+#include "qp_oled_panel.h"
+#include "qp_sh1106.h"
+#include "qp_sh1106_opcodes.h"
+#include "qp_surface.h"
+#include "qp_surface_internal.h"
+
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// Driver storage
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+typedef struct sh1106_device_t {
+ oled_panel_painter_device_t oled;
+
+ uint8_t framebuffer[SURFACE_REQUIRED_BUFFER_BYTE_SIZE(128, 64, 1)];
+} sh1106_device_t;
+
+static sh1106_device_t sh1106_drivers[SH1106_NUM_DEVICES] = {0};
+
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// Quantum Painter API implementations
+
+// Initialisation
+__attribute__((weak)) bool qp_sh1106_init(painter_device_t device, painter_rotation_t rotation) {
+ sh1106_device_t *driver = (sh1106_device_t *)device;
+
+ // Change the surface geometry based on the panel rotation
+ if (rotation == QP_ROTATION_90 || rotation == QP_ROTATION_270) {
+ driver->oled.surface.base.panel_width = driver->oled.base.panel_height;
+ driver->oled.surface.base.panel_height = driver->oled.base.panel_width;
+ } else {
+ driver->oled.surface.base.panel_width = driver->oled.base.panel_width;
+ driver->oled.surface.base.panel_height = driver->oled.base.panel_height;
+ }
+
+ // Init the internal surface
+ if (!qp_init(&driver->oled.surface.base, QP_ROTATION_0)) {
+ qp_dprintf("Failed to init internal surface in qp_sh1106_init\n");
+ return false;
+ }
+
+ // clang-format off
+ const uint8_t sh1106_init_sequence[] = {
+ // Command, Delay, N, Data[N]
+ SH1106_SET_MUX_RATIO, 0, 1, 0x3F,
+ SH1106_DISPLAY_OFFSET, 0, 1, 0x00,
+ SH1106_DISPLAY_START_LINE, 0, 0,
+ SH1106_SET_SEGMENT_REMAP_INV, 0, 0,
+ SH1106_COM_SCAN_DIR_DEC, 0, 0,
+ SH1106_COM_PADS_HW_CFG, 0, 1, 0x12,
+ SH1106_SET_CONTRAST, 0, 1, 0x7F,
+ SH1106_ALL_ON_RESUME, 0, 0,
+ SH1106_NON_INVERTING_DISPLAY, 0, 0,
+ SH1106_SET_OSC_DIVFREQ, 0, 1, 0x80,
+ SH1106_SET_CHARGE_PUMP, 0, 1, 0x14,
+ SH1106_DISPLAY_ON, 0, 0,
+ };
+ // clang-format on
+
+ qp_comms_bulk_command_sequence(device, sh1106_init_sequence, sizeof(sh1106_init_sequence));
+ return true;
+}
+
+// Screen flush
+bool qp_sh1106_flush(painter_device_t device) {
+ sh1106_device_t *driver = (sh1106_device_t *)device;
+
+ if (!driver->oled.surface.dirty.is_dirty) {
+ return true;
+ }
+
+ switch (driver->oled.base.rotation) {
+ default:
+ case QP_ROTATION_0:
+ qp_oled_panel_page_column_flush_rot0(device, &driver->oled.surface.dirty, driver->framebuffer);
+ break;
+ case QP_ROTATION_90:
+ qp_oled_panel_page_column_flush_rot90(device, &driver->oled.surface.dirty, driver->framebuffer);
+ break;
+ case QP_ROTATION_180:
+ qp_oled_panel_page_column_flush_rot180(device, &driver->oled.surface.dirty, driver->framebuffer);
+ break;
+ case QP_ROTATION_270:
+ qp_oled_panel_page_column_flush_rot270(device, &driver->oled.surface.dirty, driver->framebuffer);
+ break;
+ }
+
+ // Clear the dirty area
+ qp_flush(&driver->oled.surface);
+
+ return true;
+}
+
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// Driver vtable
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+const oled_panel_painter_driver_vtable_t sh1106_driver_vtable = {
+ .base =
+ {
+ .init = qp_sh1106_init,
+ .power = qp_oled_panel_power,
+ .clear = qp_oled_panel_clear,
+ .flush = qp_sh1106_flush,
+ .pixdata = qp_oled_panel_passthru_pixdata,
+ .viewport = qp_oled_panel_passthru_viewport,
+ .palette_convert = qp_oled_panel_passthru_palette_convert,
+ .append_pixels = qp_oled_panel_passthru_append_pixels,
+ .append_pixdata = qp_oled_panel_passthru_append_pixdata,
+ },
+ .opcodes =
+ {
+ .display_on = SH1106_DISPLAY_ON,
+ .display_off = SH1106_DISPLAY_OFF,
+ .set_page = SH1106_PAGE_ADDR,
+ .set_column_lsb = SH1106_SETCOLUMN_LSB,
+ .set_column_msb = SH1106_SETCOLUMN_MSB,
+ },
+};
+
+#ifdef QUANTUM_PAINTER_SH1106_SPI_ENABLE
+// Factory function for creating a handle to the SH1106 device
+painter_device_t qp_sh1106_make_spi_device(uint16_t panel_width, uint16_t panel_height, pin_t chip_select_pin, pin_t dc_pin, pin_t reset_pin, uint16_t spi_divisor, int spi_mode) {
+ for (uint32_t i = 0; i < SH1106_NUM_DEVICES; ++i) {
+ sh1106_device_t *driver = &sh1106_drivers[i];
+ if (!driver->oled.base.driver_vtable) {
+ painter_device_t surface = qp_make_mono1bpp_surface_advanced(&driver->oled.surface, 1, panel_width, panel_height, driver->framebuffer);
+ if (!surface) {
+ return NULL;
+ }
+
+ // Setup the OLED device
+ driver->oled.base.driver_vtable = (const painter_driver_vtable_t *)&sh1106_driver_vtable;
+ driver->oled.base.comms_vtable = (const painter_comms_vtable_t *)&spi_comms_with_dc_vtable;
+ driver->oled.base.native_bits_per_pixel = 1; // 1bpp mono
+ driver->oled.base.panel_width = panel_width;
+ driver->oled.base.panel_height = panel_height;
+ driver->oled.base.rotation = QP_ROTATION_0;
+ driver->oled.base.offset_x = 0;
+ driver->oled.base.offset_y = 0;
+
+ // SPI and other pin configuration
+ driver->oled.base.comms_config = &driver->oled.spi_dc_reset_config;
+ driver->oled.spi_dc_reset_config.spi_config.chip_select_pin = chip_select_pin;
+ driver->oled.spi_dc_reset_config.spi_config.divisor = spi_divisor;
+ driver->oled.spi_dc_reset_config.spi_config.lsb_first = false;
+ driver->oled.spi_dc_reset_config.spi_config.mode = spi_mode;
+ driver->oled.spi_dc_reset_config.dc_pin = dc_pin;
+ driver->oled.spi_dc_reset_config.reset_pin = reset_pin;
+ driver->oled.spi_dc_reset_config.command_params_uses_command_pin = true;
+
+ if (!qp_internal_register_device((painter_device_t)driver)) {
+ memset(driver, 0, sizeof(sh1106_device_t));
+ return NULL;
+ }
+
+ return (painter_device_t)driver;
+ }
+ }
+ return NULL;
+}
+
+#endif // QUANTUM_PAINTER_SH1106_SPI_ENABLE
+
+#ifdef QUANTUM_PAINTER_SH1106_I2C_ENABLE
+// Factory function for creating a handle to the SH1106 device
+painter_device_t qp_sh1106_make_i2c_device(uint16_t panel_width, uint16_t panel_height, uint8_t i2c_address) {
+ for (uint32_t i = 0; i < SH1106_NUM_DEVICES; ++i) {
+ sh1106_device_t *driver = &sh1106_drivers[i];
+ if (!driver->oled.base.driver_vtable) {
+ // Instantiate the surface, intentional swap of width/high due to transpose
+ painter_device_t surface = qp_make_mono1bpp_surface_advanced(&driver->oled.surface, 1, panel_width, panel_height, driver->framebuffer);
+ if (!surface) {
+ return NULL;
+ }
+
+ // Setup the OLED device
+ driver->oled.base.driver_vtable = (const painter_driver_vtable_t *)&sh1106_driver_vtable;
+ driver->oled.base.comms_vtable = (const painter_comms_vtable_t *)&i2c_comms_cmddata_vtable;
+ driver->oled.base.native_bits_per_pixel = 1; // 1bpp mono
+ driver->oled.base.panel_width = panel_width;
+ driver->oled.base.panel_height = panel_height;
+ driver->oled.base.rotation = QP_ROTATION_0;
+ driver->oled.base.offset_x = 0;
+ driver->oled.base.offset_y = 0;
+
+ // I2C configuration
+ driver->oled.base.comms_config = &driver->oled.i2c_config;
+ driver->oled.i2c_config.chip_address = i2c_address;
+
+ if (!qp_internal_register_device((painter_device_t)driver)) {
+ memset(driver, 0, sizeof(sh1106_device_t));
+ return NULL;
+ }
+
+ return (painter_device_t)driver;
+ }
+ }
+ return NULL;
+}
+
+#endif // QUANTUM_PAINTER_SH1106_SPI_ENABLE
diff --git a/drivers/painter/sh1106/qp_sh1106.h b/drivers/painter/sh1106/qp_sh1106.h
new file mode 100644
index 000000000000..6c325dba4ba1
--- /dev/null
+++ b/drivers/painter/sh1106/qp_sh1106.h
@@ -0,0 +1,66 @@
+// Copyright 2023 Nick Brassel (@tzarc)
+// SPDX-License-Identifier: GPL-2.0-or-later
+#pragma once
+
+#include "gpio.h"
+#include "qp_internal.h"
+
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// Quantum Painter SH1106 configurables (add to your keyboard's config.h)
+
+#if defined(QUANTUM_PAINTER_SH1106_SPI_ENABLE) && !defined(SH1106_NUM_SPI_DEVICES)
+/**
+ * @def This controls the maximum number of SPI SH1106 devices that Quantum Painter can communicate with at any one time.
+ * Increasing this number allows for multiple displays to be used.
+ */
+# define SH1106_NUM_SPI_DEVICES 1
+#else
+# define SH1106_NUM_SPI_DEVICES 0
+#endif
+
+#if defined(QUANTUM_PAINTER_SH1106_I2C_ENABLE) && !defined(SH1106_NUM_I2C_DEVICES)
+/**
+ * @def This controls the maximum number of I2C SH1106 devices that Quantum Painter can communicate with at any one time.
+ * Increasing this number allows for multiple displays to be used.
+ */
+# define SH1106_NUM_I2C_DEVICES 1
+#else
+# define SH1106_NUM_I2C_DEVICES 0
+#endif
+
+#define SH1106_NUM_DEVICES ((SH1106_NUM_SPI_DEVICES) + (SH1106_NUM_I2C_DEVICES))
+
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// Quantum Painter SH1106 device factories
+
+#ifdef QUANTUM_PAINTER_SH1106_SPI_ENABLE
+
+/**
+ * Factory method for an SH1106 SPI LCD device.
+ *
+ * @param panel_width[in] the width of the display in pixels (usually 128)
+ * @param panel_height[in] the height of the display in pixels (usually 64)
+ * @param chip_select_pin[in] the GPIO pin used for SPI chip select
+ * @param dc_pin[in] the GPIO pin used for D/C control
+ * @param reset_pin[in] the GPIO pin used for RST
+ * @param spi_divisor[in] the SPI divisor to use when communicating with the display
+ * @param spi_mode[in] the SPI mode to use when communicating with the display
+ * @return the device handle used with all drawing routines in Quantum Painter
+ */
+painter_device_t qp_sh1106_make_spi_device(uint16_t panel_width, uint16_t panel_height, pin_t chip_select_pin, pin_t dc_pin, pin_t reset_pin, uint16_t spi_divisor, int spi_mode);
+
+#endif // QUANTUM_PAINTER_SH1106_SPI_ENABLE
+
+#ifdef QUANTUM_PAINTER_SH1106_I2C_ENABLE
+
+/**
+ * Factory method for an SH1106 I2C LCD device.
+ *
+ * @param panel_width[in] the width of the display in pixels (usually 128)
+ * @param panel_height[in] the height of the display in pixels (usually 64)
+ * @param i2c_address[in] the I2C address to use
+ * @return the device handle used with all drawing routines in Quantum Painter
+ */
+painter_device_t qp_sh1106_make_i2c_device(uint16_t panel_width, uint16_t panel_height, uint8_t i2c_address);
+
+#endif // QUANTUM_PAINTER_SH1106_I2C_ENABLE
diff --git a/drivers/painter/sh1106/qp_sh1106_opcodes.h b/drivers/painter/sh1106/qp_sh1106_opcodes.h
new file mode 100644
index 000000000000..a2e100d7702c
--- /dev/null
+++ b/drivers/painter/sh1106/qp_sh1106_opcodes.h
@@ -0,0 +1,26 @@
+// Copyright 2023 Nick Brassel (@tzarc)
+// SPDX-License-Identifier: GPL-2.0-or-later
+#pragma once
+
+#define SH1106_DISPLAY_ON 0xAF
+#define SH1106_DISPLAY_OFF 0xAE
+#define SH1106_SET_OSC_DIVFREQ 0xD5
+#define SH1106_SET_MUX_RATIO 0xA8
+#define SH1106_DISPLAY_OFFSET 0xD3
+#define SH1106_DISPLAY_START_LINE 0x40
+#define SH1106_SET_CHARGE_PUMP 0x8D
+#define SH1106_SET_SEGMENT_REMAP_NORMAL 0xA0
+#define SH1106_SET_SEGMENT_REMAP_INV 0xA1
+#define SH1106_COM_SCAN_DIR_INC 0xC0
+#define SH1106_COM_SCAN_DIR_DEC 0xC8
+#define SH1106_COM_PADS_HW_CFG 0xDA
+#define SH1106_SET_CONTRAST 0x81
+#define SH1106_SET_PRECHARGE_PERIOD 0xD9
+#define SH1106_VCOM_DETECT 0xDB
+#define SH1106_ALL_ON_RESUME 0xA4
+#define SH1106_NON_INVERTING_DISPLAY 0xA6
+#define SH1106_DEACTIVATE_SCROLL 0x2E
+
+#define SH1106_SETCOLUMN_LSB 0x00
+#define SH1106_SETCOLUMN_MSB 0x10
+#define SH1106_PAGE_ADDR 0xB0
diff --git a/drivers/painter/ssd1351/qp_ssd1351.c b/drivers/painter/ssd1351/qp_ssd1351.c
index 434b7f032781..3270a362c2f1 100644
--- a/drivers/painter/ssd1351/qp_ssd1351.c
+++ b/drivers/painter/ssd1351/qp_ssd1351.c
@@ -107,13 +107,14 @@ painter_device_t qp_ssd1351_make_spi_device(uint16_t panel_width, uint16_t panel
driver->base.native_bits_per_pixel = 16; // RGB565
// SPI and other pin configuration
- driver->base.comms_config = &driver->spi_dc_reset_config;
- driver->spi_dc_reset_config.spi_config.chip_select_pin = chip_select_pin;
- driver->spi_dc_reset_config.spi_config.divisor = spi_divisor;
- driver->spi_dc_reset_config.spi_config.lsb_first = false;
- driver->spi_dc_reset_config.spi_config.mode = spi_mode;
- driver->spi_dc_reset_config.dc_pin = dc_pin;
- driver->spi_dc_reset_config.reset_pin = reset_pin;
+ driver->base.comms_config = &driver->spi_dc_reset_config;
+ driver->spi_dc_reset_config.spi_config.chip_select_pin = chip_select_pin;
+ driver->spi_dc_reset_config.spi_config.divisor = spi_divisor;
+ driver->spi_dc_reset_config.spi_config.lsb_first = false;
+ driver->spi_dc_reset_config.spi_config.mode = spi_mode;
+ driver->spi_dc_reset_config.dc_pin = dc_pin;
+ driver->spi_dc_reset_config.reset_pin = reset_pin;
+ driver->spi_dc_reset_config.command_params_uses_command_pin = false;
if (!qp_internal_register_device((painter_device_t)driver)) {
memset(driver, 0, sizeof(tft_panel_dc_reset_painter_device_t));
diff --git a/drivers/painter/ssd1351/qp_ssd1351.h b/drivers/painter/ssd1351/qp_ssd1351.h
index 0df34f204d5c..0045c4926b88 100644
--- a/drivers/painter/ssd1351/qp_ssd1351.h
+++ b/drivers/painter/ssd1351/qp_ssd1351.h
@@ -1,6 +1,5 @@
// Copyright 2021 Nick Brassel (@tzarc)
// SPDX-License-Identifier: GPL-2.0-or-later
-
#pragma once
#include "gpio.h"
diff --git a/drivers/painter/ssd1351/qp_ssd1351_opcodes.h b/drivers/painter/ssd1351/qp_ssd1351_opcodes.h
index 48ed2a3a7c2c..ca8e2bf77eb8 100644
--- a/drivers/painter/ssd1351/qp_ssd1351_opcodes.h
+++ b/drivers/painter/ssd1351/qp_ssd1351_opcodes.h
@@ -1,6 +1,5 @@
// Copyright 2021 Nick Brassel (@tzarc)
// SPDX-License-Identifier: GPL-2.0-or-later
-
#pragma once
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/drivers/painter/st77xx/qp_st7735.c b/drivers/painter/st77xx/qp_st7735.c
index 98baf400abfb..1db0d01dcbcd 100644
--- a/drivers/painter/st77xx/qp_st7735.c
+++ b/drivers/painter/st77xx/qp_st7735.c
@@ -58,6 +58,8 @@ __attribute__((weak)) bool qp_st7735_init(painter_device_t device, painter_rotat
ST77XX_SET_PIX_FMT, 0, 1, 0x55,
ST77XX_CMD_INVERT_OFF, 0, 0,
ST77XX_CMD_NORMAL_ON, 0, 0,
+ ST7735_SET_PGAMMA, 0, 16, 0x02, 0x1C, 0x07, 0x12, 0x37, 0x32, 0x29, 0x2D, 0x29, 0x25, 0x2B, 0x39, 0x00, 0x01, 0x03, 0x10,
+ ST7735_SET_NGAMMA, 0, 16, 0x03, 0x1D, 0x07, 0x06, 0x2E, 0x2C, 0x29, 0x2D, 0x2E, 0x2E, 0x37, 0x3F, 0x00, 0x00, 0x02, 0x10,
ST77XX_CMD_DISPLAY_ON, 20, 0
};
// clang-format on
@@ -127,13 +129,14 @@ painter_device_t qp_st7735_make_spi_device(uint16_t panel_width, uint16_t panel_
driver->base.native_bits_per_pixel = 16; // RGB565
// SPI and other pin configuration
- driver->base.comms_config = &driver->spi_dc_reset_config;
- driver->spi_dc_reset_config.spi_config.chip_select_pin = chip_select_pin;
- driver->spi_dc_reset_config.spi_config.divisor = spi_divisor;
- driver->spi_dc_reset_config.spi_config.lsb_first = false;
- driver->spi_dc_reset_config.spi_config.mode = spi_mode;
- driver->spi_dc_reset_config.dc_pin = dc_pin;
- driver->spi_dc_reset_config.reset_pin = reset_pin;
+ driver->base.comms_config = &driver->spi_dc_reset_config;
+ driver->spi_dc_reset_config.spi_config.chip_select_pin = chip_select_pin;
+ driver->spi_dc_reset_config.spi_config.divisor = spi_divisor;
+ driver->spi_dc_reset_config.spi_config.lsb_first = false;
+ driver->spi_dc_reset_config.spi_config.mode = spi_mode;
+ driver->spi_dc_reset_config.dc_pin = dc_pin;
+ driver->spi_dc_reset_config.reset_pin = reset_pin;
+ driver->spi_dc_reset_config.command_params_uses_command_pin = false;
if (!qp_internal_register_device((painter_device_t)driver)) {
memset(driver, 0, sizeof(tft_panel_dc_reset_painter_device_t));
diff --git a/drivers/painter/st77xx/qp_st7735.h b/drivers/painter/st77xx/qp_st7735.h
index a9ce16bef199..e65b7ca70607 100644
--- a/drivers/painter/st77xx/qp_st7735.h
+++ b/drivers/painter/st77xx/qp_st7735.h
@@ -2,7 +2,6 @@
// Copyright 2021 Nick Brassel (@tzarc)
// Copyright 2022 David Hoelscher (@customMK)
// SPDX-License-Identifier: GPL-2.0-or-later
-
#pragma once
#include "gpio.h"
@@ -42,4 +41,4 @@
* @return the device handle used with all drawing routines in Quantum Painter
*/
painter_device_t qp_st7735_make_spi_device(uint16_t panel_width, uint16_t panel_height, pin_t chip_select_pin, pin_t dc_pin, pin_t reset_pin, uint16_t spi_divisor, int spi_mode);
-#endif // QUANTUM_PAINTER_ST7735_SPI_ENABLE
\ No newline at end of file
+#endif // QUANTUM_PAINTER_ST7735_SPI_ENABLE
diff --git a/drivers/painter/st77xx/qp_st7735_opcodes.h b/drivers/painter/st77xx/qp_st7735_opcodes.h
index 816e32f3d763..f390d113c5da 100644
--- a/drivers/painter/st77xx/qp_st7735_opcodes.h
+++ b/drivers/painter/st77xx/qp_st7735_opcodes.h
@@ -1,6 +1,5 @@
// Copyright 2022 David Hoelscher (@customMK)
// SPDX-License-Identifier: GPL-2.0-or-later
-
#pragma once
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/drivers/painter/st77xx/qp_st7789.c b/drivers/painter/st77xx/qp_st7789.c
index f9065f5178b0..855a9cc0c86c 100644
--- a/drivers/painter/st77xx/qp_st7789.c
+++ b/drivers/painter/st77xx/qp_st7789.c
@@ -126,13 +126,14 @@ painter_device_t qp_st7789_make_spi_device(uint16_t panel_width, uint16_t panel_
driver->base.native_bits_per_pixel = 16; // RGB565
// SPI and other pin configuration
- driver->base.comms_config = &driver->spi_dc_reset_config;
- driver->spi_dc_reset_config.spi_config.chip_select_pin = chip_select_pin;
- driver->spi_dc_reset_config.spi_config.divisor = spi_divisor;
- driver->spi_dc_reset_config.spi_config.lsb_first = false;
- driver->spi_dc_reset_config.spi_config.mode = spi_mode;
- driver->spi_dc_reset_config.dc_pin = dc_pin;
- driver->spi_dc_reset_config.reset_pin = reset_pin;
+ driver->base.comms_config = &driver->spi_dc_reset_config;
+ driver->spi_dc_reset_config.spi_config.chip_select_pin = chip_select_pin;
+ driver->spi_dc_reset_config.spi_config.divisor = spi_divisor;
+ driver->spi_dc_reset_config.spi_config.lsb_first = false;
+ driver->spi_dc_reset_config.spi_config.mode = spi_mode;
+ driver->spi_dc_reset_config.dc_pin = dc_pin;
+ driver->spi_dc_reset_config.reset_pin = reset_pin;
+ driver->spi_dc_reset_config.command_params_uses_command_pin = false;
if (!qp_internal_register_device((painter_device_t)driver)) {
memset(driver, 0, sizeof(tft_panel_dc_reset_painter_device_t));
diff --git a/drivers/painter/st77xx/qp_st7789.h b/drivers/painter/st77xx/qp_st7789.h
index ec61f5d70b7e..03d618cae416 100644
--- a/drivers/painter/st77xx/qp_st7789.h
+++ b/drivers/painter/st77xx/qp_st7789.h
@@ -1,7 +1,6 @@
// Copyright 2021 Paul Cotter (@gr1mr3aver)
// Copyright 2021 Nick Brassel (@tzarc)
// SPDX-License-Identifier: GPL-2.0-or-later
-
#pragma once
#include "gpio.h"
diff --git a/drivers/painter/st77xx/qp_st7789_opcodes.h b/drivers/painter/st77xx/qp_st7789_opcodes.h
index b5baba718469..4b46f994b481 100644
--- a/drivers/painter/st77xx/qp_st7789_opcodes.h
+++ b/drivers/painter/st77xx/qp_st7789_opcodes.h
@@ -1,6 +1,5 @@
// Copyright 2021 Paul Cotter (@gr1mr3aver)
// SPDX-License-Identifier: GPL-2.0-or-later
-
#pragma once
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/drivers/painter/st77xx/qp_st77xx_opcodes.h b/drivers/painter/st77xx/qp_st77xx_opcodes.h
index 131378d8328e..c01e2b21e62d 100644
--- a/drivers/painter/st77xx/qp_st77xx_opcodes.h
+++ b/drivers/painter/st77xx/qp_st77xx_opcodes.h
@@ -1,6 +1,5 @@
// Copyright 2021 Paul Cotter (@gr1mr3aver)
// SPDX-License-Identifier: GPL-2.0-or-later
-
#pragma once
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/drivers/painter/tft_panel/qp_tft_panel.h b/drivers/painter/tft_panel/qp_tft_panel.h
index 67168645b7e2..3b184f2eba97 100644
--- a/drivers/painter/tft_panel/qp_tft_panel.h
+++ b/drivers/painter/tft_panel/qp_tft_panel.h
@@ -1,5 +1,6 @@
// Copyright 2021 Nick Brassel (@tzarc)
// SPDX-License-Identifier: GPL-2.0-or-later
+#pragma once
#include "color.h"
#include "qp_internal.h"
diff --git a/drivers/ps2/ps2_mouse.c b/drivers/ps2/ps2_mouse.c
index ae594c94bc5e..88c9bdcebef0 100644
--- a/drivers/ps2/ps2_mouse.c
+++ b/drivers/ps2/ps2_mouse.c
@@ -265,6 +265,7 @@ static inline void ps2_mouse_scroll_button_task(report_mouse_t *mouse_report) {
SCROLL_SENT,
} scroll_state = SCROLL_NONE;
static uint16_t scroll_button_time = 0;
+ static int16_t scroll_x, scroll_y;
if (PS2_MOUSE_SCROLL_BTN_MASK == (mouse_report->buttons & (PS2_MOUSE_SCROLL_BTN_MASK))) {
// All scroll buttons are pressed
@@ -272,13 +273,19 @@ static inline void ps2_mouse_scroll_button_task(report_mouse_t *mouse_report) {
if (scroll_state == SCROLL_NONE) {
scroll_button_time = timer_read();
scroll_state = SCROLL_BTN;
+ scroll_x = 0;
+ scroll_y = 0;
}
// If the mouse has moved, update the report to scroll instead of move the mouse
if (mouse_report->x || mouse_report->y) {
- scroll_state = SCROLL_SENT;
- mouse_report->v = -mouse_report->y / (PS2_MOUSE_SCROLL_DIVISOR_V);
- mouse_report->h = mouse_report->x / (PS2_MOUSE_SCROLL_DIVISOR_H);
+ scroll_state = SCROLL_SENT;
+ scroll_y += mouse_report->y;
+ scroll_x += mouse_report->x;
+ mouse_report->v = -scroll_y / (PS2_MOUSE_SCROLL_DIVISOR_V);
+ mouse_report->h = scroll_x / (PS2_MOUSE_SCROLL_DIVISOR_H);
+ scroll_y += (mouse_report->v * (PS2_MOUSE_SCROLL_DIVISOR_V));
+ scroll_x -= (mouse_report->h * (PS2_MOUSE_SCROLL_DIVISOR_H));
mouse_report->x = 0;
mouse_report->y = 0;
#ifdef PS2_MOUSE_INVERT_H
diff --git a/drivers/sensors/azoteq_iqs5xx.c b/drivers/sensors/azoteq_iqs5xx.c
new file mode 100644
index 000000000000..521f558b5f31
--- /dev/null
+++ b/drivers/sensors/azoteq_iqs5xx.c
@@ -0,0 +1,315 @@
+// Copyright 2023 Dasky (@daskygit)
+// Copyright 2023 George Norton (@george-norton)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include "azoteq_iqs5xx.h"
+#include "pointing_device_internal.h"
+#include "wait.h"
+
+#ifndef AZOTEQ_IQS5XX_ADDRESS
+# define AZOTEQ_IQS5XX_ADDRESS (0x74 << 1)
+#endif
+#ifndef AZOTEQ_IQS5XX_TIMEOUT_MS
+# define AZOTEQ_IQS5XX_TIMEOUT_MS 10
+#endif
+
+#define AZOTEQ_IQS5XX_REG_PRODUCT_NUMBER 0x0000
+#define AZOTEQ_IQS5XX_REG_PREVIOUS_CYCLE_TIME 0x000C
+#define AZOTEQ_IQS5XX_REG_SYSTEM_CONTROL_1 0x0432
+#define AZOTEQ_IQS5XX_REG_REPORT_RATE_ACTIVE 0x057A
+#define AZOTEQ_IQS5XX_REG_SYSTEM_CONFIG_0 0x058E
+#define AZOTEQ_IQS5XX_REG_SYSTEM_CONFIG_1 0x058F
+#define AZOTEQ_IQS5XX_REG_X_RESOLUTION 0x066E
+#define AZOTEQ_IQS5XX_REG_XY_CONFIG_0 0x0669
+#define AZOTEQ_IQS5XX_REG_Y_RESOLUTION 0x0670
+#define AZOTEQ_IQS5XX_REG_SINGLE_FINGER_GESTURES 0x06B7
+#define AZOTEQ_IQS5XX_REG_END_COMMS 0xEEEE
+
+// Gesture configuration
+#ifndef AZOTEQ_IQS5XX_TAP_ENABLE
+# define AZOTEQ_IQS5XX_TAP_ENABLE true
+#endif
+#ifndef AZOTEQ_IQS5XX_PRESS_AND_HOLD_ENABLE
+# define AZOTEQ_IQS5XX_PRESS_AND_HOLD_ENABLE false
+#endif
+#ifndef AZOTEQ_IQS5XX_TWO_FINGER_TAP_ENABLE
+# define AZOTEQ_IQS5XX_TWO_FINGER_TAP_ENABLE true
+#endif
+#ifndef AZOTEQ_IQS5XX_SCROLL_ENABLE
+# define AZOTEQ_IQS5XX_SCROLL_ENABLE true
+#endif
+#ifndef AZOTEQ_IQS5XX_SWIPE_X_ENABLE
+# define AZOTEQ_IQS5XX_SWIPE_X_ENABLE false
+#endif
+#ifndef AZOTEQ_IQS5XX_SWIPE_Y_ENABLE
+# define AZOTEQ_IQS5XX_SWIPE_Y_ENABLE false
+#endif
+#ifndef AZOTEQ_IQS5XX_ZOOM_ENABLE
+# define AZOTEQ_IQS5XX_ZOOM_ENABLE false
+#endif
+#ifndef AZOTEQ_IQS5XX_TAP_TIME
+# define AZOTEQ_IQS5XX_TAP_TIME 0x96
+#endif
+#ifndef AZOTEQ_IQS5XX_TAP_DISTANCE
+# define AZOTEQ_IQS5XX_TAP_DISTANCE 0x19
+#endif
+#ifndef AZOTEQ_IQS5XX_HOLD_TIME
+# define AZOTEQ_IQS5XX_HOLD_TIME 0x12C
+#endif
+#ifndef AZOTEQ_IQS5XX_SWIPE_INITIAL_TIME
+# define AZOTEQ_IQS5XX_SWIPE_INITIAL_TIME 0x64 // 0x96
+#endif
+#ifndef AZOTEQ_IQS5XX_SWIPE_INITIAL_DISTANCE
+# define AZOTEQ_IQS5XX_SWIPE_INITIAL_DISTANCE 0x12C
+#endif
+#ifndef AZOTEQ_IQS5XX_SWIPE_CONSECUTIVE_TIME
+# define AZOTEQ_IQS5XX_SWIPE_CONSECUTIVE_TIME 0x0
+#endif
+#ifndef AZOTEQ_IQS5XX_SWIPE_CONSECUTIVE_DISTANCE
+# define AZOTEQ_IQS5XX_SWIPE_CONSECUTIVE_DISTANCE 0x7D0
+#endif
+#ifndef AZOTEQ_IQS5XX_SCROLL_INITIAL_DISTANCE
+# define AZOTEQ_IQS5XX_SCROLL_INITIAL_DISTANCE 0x32
+#endif
+#ifndef AZOTEQ_IQS5XX_ZOOM_INITIAL_DISTANCE
+# define AZOTEQ_IQS5XX_ZOOM_INITIAL_DISTANCE 0x32
+#endif
+#ifndef AZOTEQ_IQS5XX_ZOOM_CONSECUTIVE_DISTANCE
+# define AZOTEQ_IQS5XX_ZOOM_CONSECUTIVE_DISTANCE 0x19
+#endif
+
+#if defined(AZOTEQ_IQS5XX_TPS43)
+# define AZOTEQ_IQS5XX_WIDTH_MM 43
+# define AZOTEQ_IQS5XX_HEIGHT_MM 40
+# define AZOTEQ_IQS5XX_RESOLUTION_X 2048
+# define AZOTEQ_IQS5XX_RESOLUTION_Y 1792
+#elif defined(AZOTEQ_IQS5XX_TPS65)
+# define AZOTEQ_IQS5XX_WIDTH_MM 65
+# define AZOTEQ_IQS5XX_HEIGHT_MM 49
+# define AZOTEQ_IQS5XX_RESOLUTION_X 3072
+# define AZOTEQ_IQS5XX_RESOLUTION_Y 2048
+#elif !defined(AZOTEQ_IQS5XX_WIDTH_MM) && !defined(AZOTEQ_IQS5XX_HEIGHT_MM)
+# error "You must define one of the available azoteq trackpads or specify at least the width and height"
+#endif
+
+#define DIVIDE_UNSIGNED_ROUND(numerator, denominator) (((numerator) + ((denominator) / 2)) / (denominator))
+#define AZOTEQ_IQS5XX_INCH_TO_RESOLUTION_X(inch) (DIVIDE_UNSIGNED_ROUND((inch) * (uint32_t)AZOTEQ_IQS5XX_WIDTH_MM * 10, 254))
+#define AZOTEQ_IQS5XX_RESOLUTION_X_TO_INCH(px) (DIVIDE_UNSIGNED_ROUND((px) * (uint32_t)254, AZOTEQ_IQS5XX_WIDTH_MM * 10))
+#define AZOTEQ_IQS5XX_INCH_TO_RESOLUTION_Y(inch) (DIVIDE_UNSIGNED_ROUND((inch) * (uint32_t)AZOTEQ_IQS5XX_HEIGHT_MM * 10, 254))
+#define AZOTEQ_IQS5XX_RESOLUTION_Y_TO_INCH(px) (DIVIDE_UNSIGNED_ROUND((px) * (uint32_t)254, AZOTEQ_IQS5XX_HEIGHT_MM * 10))
+
+static uint16_t azoteq_iqs5xx_product_number = AZOTEQ_IQS5XX_UNKNOWN;
+
+static struct {
+ uint16_t resolution_x;
+ uint16_t resolution_y;
+} azoteq_iqs5xx_device_resolution_t;
+
+i2c_status_t azoteq_iqs5xx_wake(void) {
+ uint8_t data = 0;
+ i2c_status_t status = i2c_readReg16(AZOTEQ_IQS5XX_ADDRESS, AZOTEQ_IQS5XX_REG_PREVIOUS_CYCLE_TIME, (uint8_t *)&data, sizeof(data), 1);
+ i2c_stop();
+ wait_us(150);
+ return status;
+}
+i2c_status_t azoteq_iqs5xx_end_session(void) {
+ const uint8_t END_BYTE = 1; // any data
+ return i2c_writeReg16(AZOTEQ_IQS5XX_ADDRESS, AZOTEQ_IQS5XX_REG_END_COMMS, &END_BYTE, 1, AZOTEQ_IQS5XX_TIMEOUT_MS);
+}
+
+i2c_status_t azoteq_iqs5xx_get_base_data(azoteq_iqs5xx_base_data_t *base_data) {
+ i2c_status_t status = i2c_readReg16(AZOTEQ_IQS5XX_ADDRESS, AZOTEQ_IQS5XX_REG_PREVIOUS_CYCLE_TIME, (uint8_t *)base_data, 10, AZOTEQ_IQS5XX_TIMEOUT_MS);
+ if (status == I2C_STATUS_SUCCESS) {
+ azoteq_iqs5xx_end_session();
+ }
+ return status;
+}
+
+i2c_status_t azoteq_iqs5xx_get_report_rate(azoteq_iqs5xx_report_rate_t *report_rate, azoteq_iqs5xx_charging_modes_t mode, bool end_session) {
+ if (mode > AZOTEQ_IQS5XX_LP2) {
+ pd_dprintf("IQS5XX - Invalid mode for get report rate.\n");
+ return I2C_STATUS_ERROR;
+ }
+ uint16_t selected_reg = AZOTEQ_IQS5XX_REG_REPORT_RATE_ACTIVE + (2 * mode);
+ i2c_status_t status = i2c_readReg16(AZOTEQ_IQS5XX_ADDRESS, selected_reg, (uint8_t *)report_rate, 2, AZOTEQ_IQS5XX_TIMEOUT_MS);
+ if (end_session) {
+ azoteq_iqs5xx_end_session();
+ }
+ return status;
+}
+
+i2c_status_t azoteq_iqs5xx_set_report_rate(uint16_t report_rate_ms, azoteq_iqs5xx_charging_modes_t mode, bool end_session) {
+ if (mode > AZOTEQ_IQS5XX_LP2) {
+ pd_dprintf("IQS5XX - Invalid mode for set report rate.\n");
+ return I2C_STATUS_ERROR;
+ }
+ uint16_t selected_reg = AZOTEQ_IQS5XX_REG_REPORT_RATE_ACTIVE + (2 * mode);
+ azoteq_iqs5xx_report_rate_t report_rate = {0};
+ report_rate.h = (uint8_t)((report_rate_ms >> 8) & 0xFF);
+ report_rate.l = (uint8_t)(report_rate_ms & 0xFF);
+ i2c_status_t status = i2c_writeReg16(AZOTEQ_IQS5XX_ADDRESS, selected_reg, (uint8_t *)&report_rate, 2, AZOTEQ_IQS5XX_TIMEOUT_MS);
+ if (end_session) {
+ azoteq_iqs5xx_end_session();
+ }
+ return status;
+}
+
+i2c_status_t azoteq_iqs5xx_set_reati(bool enabled, bool end_session) {
+ azoteq_iqs5xx_system_config_0_t config = {0};
+ i2c_status_t status = i2c_readReg16(AZOTEQ_IQS5XX_ADDRESS, AZOTEQ_IQS5XX_REG_SYSTEM_CONFIG_0, (uint8_t *)&config, sizeof(azoteq_iqs5xx_system_config_0_t), AZOTEQ_IQS5XX_TIMEOUT_MS);
+ if (status == I2C_STATUS_SUCCESS) {
+ config.reati = enabled;
+ status = i2c_writeReg16(AZOTEQ_IQS5XX_ADDRESS, AZOTEQ_IQS5XX_REG_SYSTEM_CONFIG_0, (uint8_t *)&config, sizeof(azoteq_iqs5xx_system_config_0_t), AZOTEQ_IQS5XX_TIMEOUT_MS);
+ }
+ if (end_session) {
+ azoteq_iqs5xx_end_session();
+ }
+ return status;
+}
+
+i2c_status_t azoteq_iqs5xx_set_event_mode(bool enabled, bool end_session) {
+ azoteq_iqs5xx_system_config_1_t config = {0};
+ i2c_status_t status = i2c_readReg16(AZOTEQ_IQS5XX_ADDRESS, AZOTEQ_IQS5XX_REG_SYSTEM_CONFIG_1, (uint8_t *)&config, sizeof(azoteq_iqs5xx_system_config_1_t), AZOTEQ_IQS5XX_TIMEOUT_MS);
+ if (status == I2C_STATUS_SUCCESS) {
+ config.event_mode = enabled;
+ config.touch_event = true;
+ config.tp_event = true;
+ config.prox_event = false;
+ config.snap_event = false;
+ config.reati_event = false;
+ config.alp_prox_event = false;
+ config.gesture_event = true;
+ status = i2c_writeReg16(AZOTEQ_IQS5XX_ADDRESS, AZOTEQ_IQS5XX_REG_SYSTEM_CONFIG_1, (uint8_t *)&config, sizeof(azoteq_iqs5xx_system_config_1_t), AZOTEQ_IQS5XX_TIMEOUT_MS);
+ }
+ if (end_session) {
+ azoteq_iqs5xx_end_session();
+ }
+ return status;
+}
+
+i2c_status_t azoteq_iqs5xx_set_gesture_config(bool end_session) {
+ azoteq_iqs5xx_gesture_config_t config = {0};
+ i2c_status_t status = i2c_readReg16(AZOTEQ_IQS5XX_ADDRESS, AZOTEQ_IQS5XX_REG_SINGLE_FINGER_GESTURES, (uint8_t *)&config, sizeof(azoteq_iqs5xx_gesture_config_t), AZOTEQ_IQS5XX_TIMEOUT_MS);
+ pd_dprintf("azo scroll: %d\n", config.multi_finger_gestures.scroll);
+ if (status == I2C_STATUS_SUCCESS) {
+ config.single_finger_gestures.single_tap = AZOTEQ_IQS5XX_TAP_ENABLE;
+ config.single_finger_gestures.press_and_hold = AZOTEQ_IQS5XX_PRESS_AND_HOLD_ENABLE;
+ config.single_finger_gestures.swipe_x_plus = AZOTEQ_IQS5XX_SWIPE_X_ENABLE;
+ config.single_finger_gestures.swipe_x_minus = AZOTEQ_IQS5XX_SWIPE_X_ENABLE;
+ config.single_finger_gestures.swipe_y_plus = AZOTEQ_IQS5XX_SWIPE_Y_ENABLE;
+ config.single_finger_gestures.swipe_y_minus = AZOTEQ_IQS5XX_SWIPE_Y_ENABLE;
+ config.multi_finger_gestures.two_finger_tap = AZOTEQ_IQS5XX_TWO_FINGER_TAP_ENABLE;
+ config.multi_finger_gestures.scroll = AZOTEQ_IQS5XX_SCROLL_ENABLE;
+ config.multi_finger_gestures.zoom = AZOTEQ_IQS5XX_ZOOM_ENABLE;
+ config.tap_time = AZOTEQ_IQS5XX_SWAP_H_L_BYTES(AZOTEQ_IQS5XX_TAP_TIME);
+ config.tap_distance = AZOTEQ_IQS5XX_SWAP_H_L_BYTES(AZOTEQ_IQS5XX_TAP_DISTANCE);
+ config.hold_time = AZOTEQ_IQS5XX_SWAP_H_L_BYTES(AZOTEQ_IQS5XX_HOLD_TIME);
+ config.swipe_initial_time = AZOTEQ_IQS5XX_SWAP_H_L_BYTES(AZOTEQ_IQS5XX_SWIPE_INITIAL_TIME);
+ config.swipe_initial_distance = AZOTEQ_IQS5XX_SWAP_H_L_BYTES(AZOTEQ_IQS5XX_SWIPE_INITIAL_DISTANCE);
+ config.swipe_consecutive_time = AZOTEQ_IQS5XX_SWAP_H_L_BYTES(AZOTEQ_IQS5XX_SWIPE_CONSECUTIVE_TIME);
+ config.swipe_consecutive_distance = AZOTEQ_IQS5XX_SWAP_H_L_BYTES(AZOTEQ_IQS5XX_SWIPE_CONSECUTIVE_DISTANCE);
+ config.scroll_initial_distance = AZOTEQ_IQS5XX_SWAP_H_L_BYTES(AZOTEQ_IQS5XX_SCROLL_INITIAL_DISTANCE);
+ config.zoom_initial_distance = AZOTEQ_IQS5XX_SWAP_H_L_BYTES(AZOTEQ_IQS5XX_ZOOM_INITIAL_DISTANCE);
+ config.zoom_consecutive_distance = AZOTEQ_IQS5XX_SWAP_H_L_BYTES(AZOTEQ_IQS5XX_ZOOM_CONSECUTIVE_DISTANCE);
+ status = i2c_writeReg16(AZOTEQ_IQS5XX_ADDRESS, AZOTEQ_IQS5XX_REG_SINGLE_FINGER_GESTURES, (uint8_t *)&config, sizeof(azoteq_iqs5xx_gesture_config_t), AZOTEQ_IQS5XX_TIMEOUT_MS);
+ }
+ if (end_session) {
+ azoteq_iqs5xx_end_session();
+ }
+ return status;
+}
+
+i2c_status_t azoteq_iqs5xx_set_xy_config(bool flip_x, bool flip_y, bool switch_xy, bool palm_reject, bool end_session) {
+ azoteq_iqs5xx_xy_config_0_t config = {0};
+ i2c_status_t status = i2c_readReg16(AZOTEQ_IQS5XX_ADDRESS, AZOTEQ_IQS5XX_REG_XY_CONFIG_0, (uint8_t *)&config, sizeof(azoteq_iqs5xx_xy_config_0_t), AZOTEQ_IQS5XX_TIMEOUT_MS);
+ if (status == I2C_STATUS_SUCCESS) {
+ if (flip_x) {
+ config.flip_x = !config.flip_x;
+ }
+ if (flip_y) {
+ config.flip_y = !config.flip_y;
+ }
+ if (switch_xy) {
+ config.switch_xy_axis = !config.switch_xy_axis;
+ }
+ config.palm_reject = palm_reject;
+ status = i2c_writeReg16(AZOTEQ_IQS5XX_ADDRESS, AZOTEQ_IQS5XX_REG_XY_CONFIG_0, (uint8_t *)&config, sizeof(azoteq_iqs5xx_xy_config_0_t), AZOTEQ_IQS5XX_TIMEOUT_MS);
+ }
+ if (end_session) {
+ azoteq_iqs5xx_end_session();
+ }
+ return status;
+}
+
+i2c_status_t azoteq_iqs5xx_reset_suspend(bool reset, bool suspend, bool end_session) {
+ azoteq_iqs5xx_system_control_1_t config = {0};
+ i2c_status_t status = i2c_readReg16(AZOTEQ_IQS5XX_ADDRESS, AZOTEQ_IQS5XX_REG_SYSTEM_CONTROL_1, (uint8_t *)&config, sizeof(azoteq_iqs5xx_system_control_1_t), AZOTEQ_IQS5XX_TIMEOUT_MS);
+ if (status == I2C_STATUS_SUCCESS) {
+ config.reset = reset;
+ config.suspend = suspend;
+ status = i2c_writeReg16(AZOTEQ_IQS5XX_ADDRESS, AZOTEQ_IQS5XX_REG_SYSTEM_CONTROL_1, (uint8_t *)&config, sizeof(azoteq_iqs5xx_system_control_1_t), AZOTEQ_IQS5XX_TIMEOUT_MS);
+ }
+ if (end_session) {
+ azoteq_iqs5xx_end_session();
+ }
+ return status;
+}
+
+void azoteq_iqs5xx_set_cpi(uint16_t cpi) {
+ if (azoteq_iqs5xx_product_number != AZOTEQ_IQS5XX_UNKNOWN) {
+ azoteq_iqs5xx_resolution_t resolution = {0};
+ resolution.x_resolution = AZOTEQ_IQS5XX_SWAP_H_L_BYTES(MIN(azoteq_iqs5xx_device_resolution_t.resolution_x, AZOTEQ_IQS5XX_INCH_TO_RESOLUTION_X(cpi)));
+ resolution.y_resolution = AZOTEQ_IQS5XX_SWAP_H_L_BYTES(MIN(azoteq_iqs5xx_device_resolution_t.resolution_y, AZOTEQ_IQS5XX_INCH_TO_RESOLUTION_Y(cpi)));
+ i2c_writeReg16(AZOTEQ_IQS5XX_ADDRESS, AZOTEQ_IQS5XX_REG_X_RESOLUTION, (uint8_t *)&resolution, sizeof(azoteq_iqs5xx_resolution_t), AZOTEQ_IQS5XX_TIMEOUT_MS);
+ }
+}
+
+uint16_t azoteq_iqs5xx_get_cpi(void) {
+ if (azoteq_iqs5xx_product_number != AZOTEQ_IQS5XX_UNKNOWN) {
+ azoteq_iqs5xx_resolution_t resolution = {0};
+ i2c_status_t status = i2c_readReg16(AZOTEQ_IQS5XX_ADDRESS, AZOTEQ_IQS5XX_REG_X_RESOLUTION, (uint8_t *)&resolution, sizeof(azoteq_iqs5xx_resolution_t), AZOTEQ_IQS5XX_TIMEOUT_MS);
+ if (status == I2C_STATUS_SUCCESS) {
+ return AZOTEQ_IQS5XX_RESOLUTION_X_TO_INCH(AZOTEQ_IQS5XX_SWAP_H_L_BYTES(resolution.x_resolution));
+ }
+ }
+ return 0;
+}
+
+uint16_t azoteq_iqs5xx_get_product(void) {
+ i2c_status_t status = i2c_readReg16(AZOTEQ_IQS5XX_ADDRESS, AZOTEQ_IQS5XX_REG_PRODUCT_NUMBER, (uint8_t *)&azoteq_iqs5xx_product_number, sizeof(uint16_t), AZOTEQ_IQS5XX_TIMEOUT_MS);
+ if (status == I2C_STATUS_SUCCESS) {
+ azoteq_iqs5xx_product_number = AZOTEQ_IQS5XX_SWAP_H_L_BYTES(azoteq_iqs5xx_product_number);
+ }
+ pd_dprintf("AZOTEQ: Product number %u\n", azoteq_iqs5xx_product_number);
+ return azoteq_iqs5xx_product_number;
+}
+
+void azoteq_iqs5xx_setup_resolution(void) {
+#if !defined(AZOTEQ_IQS5XX_RESOLUTION_X) && !defined(AZOTEQ_IQS5XX_RESOLUTION_Y)
+ switch (azoteq_iqs5xx_product_number) {
+ case AZOTEQ_IQS550:
+ azoteq_iqs5xx_device_resolution_t.resolution_x = 3584;
+ azoteq_iqs5xx_device_resolution_t.resolution_y = 2304;
+ break;
+ case AZOTEQ_IQS572:
+ azoteq_iqs5xx_device_resolution_t.resolution_x = 2048;
+ azoteq_iqs5xx_device_resolution_t.resolution_y = 1792;
+ break;
+ case AZOTEQ_IQS525:
+ azoteq_iqs5xx_device_resolution_t.resolution_x = 1280;
+ azoteq_iqs5xx_device_resolution_t.resolution_y = 768;
+ break;
+ default:
+ // shouldn't be here
+ azoteq_iqs5xx_device_resolution_t.resolution_x = 0;
+ azoteq_iqs5xx_device_resolution_t.resolution_y = 0;
+ break;
+ }
+#endif
+#ifdef AZOTEQ_IQS5XX_RESOLUTION_X
+ azoteq_iqs5xx_device_resolution_t.resolution_x = AZOTEQ_IQS5XX_RESOLUTION_X;
+#endif
+#ifdef AZOTEQ_IQS5XX_RESOLUTION_Y
+ azoteq_iqs5xx_device_resolution_t.resolution_y = AZOTEQ_IQS5XX_RESOLUTION_Y;
+#endif
+}
diff --git a/drivers/sensors/azoteq_iqs5xx.h b/drivers/sensors/azoteq_iqs5xx.h
new file mode 100644
index 000000000000..704ec2bab3bd
--- /dev/null
+++ b/drivers/sensors/azoteq_iqs5xx.h
@@ -0,0 +1,193 @@
+// Copyright 2023 Dasky (@daskygit)
+// Copyright 2023 George Norton (@george-norton)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#include "i2c_master.h"
+#include "pointing_device.h"
+#include "util.h"
+
+typedef enum {
+ AZOTEQ_IQS5XX_UNKNOWN,
+ AZOTEQ_IQS550 = 40,
+ AZOTEQ_IQS525 = 52,
+ AZOTEQ_IQS572 = 58,
+} azoteq_iqs5xx_product_numbers_t;
+typedef enum {
+ AZOTEQ_IQS5XX_ACTIVE,
+ AZOTEQ_IQS5XX_IDLE_TOUCH,
+ AZOTEQ_IQS5XX_IDLE,
+ AZOTEQ_IQS5XX_LP1,
+ AZOTEQ_IQS5XX_LP2,
+} azoteq_iqs5xx_charging_modes_t;
+
+typedef struct {
+ uint8_t h : 8;
+ uint8_t l : 8;
+} azoteq_iqs5xx_report_rate_t;
+
+typedef struct PACKED {
+ bool single_tap : 1; // Single tap gesture status
+ bool press_and_hold : 1; // Press and hold gesture status
+ bool swipe_x_neg : 1; // Swipe in negative X direction status
+ bool swipe_x_pos : 1; // Swipe in positive X direction status
+ bool swipe_y_pos : 1; // Swipe in positive Y direction status
+ bool swipe_y_neg : 1; // Swipe in negative Y direction status
+ uint8_t _unused : 2; // unused
+} azoteq_iqs5xx_gesture_events_0_t;
+
+typedef struct PACKED {
+ bool two_finger_tap : 1; // Two finger tap gesture status
+ bool scroll : 1; // Scroll status
+ bool zoom : 1; // Zoom gesture status
+ uint8_t _unused : 5; // unused
+} azoteq_iqs5xx_gesture_events_1_t;
+
+typedef struct PACKED {
+ azoteq_iqs5xx_charging_modes_t charging_mode : 3; // Indicates current mode
+ bool ati_error : 1; //
+ bool reati_occurred : 1; //
+ bool alp_ati_error : 1; //
+ bool alp_reati_occurred : 1; //
+ bool show_reset : 1; //
+} azoteq_iqs5xx_system_info_0_t;
+
+typedef struct PACKED {
+ bool tp_movement : 1; //
+ bool palm_detect : 1; // Palm detect status
+ bool too_many_fingers : 1; // Total finger status
+ bool rr_missed : 1; // Report rate status
+ bool snap_toggle : 1; // Change in any snap channel status
+ bool switch_state : 1; // Status of input pin SW_IN
+ uint8_t _unused : 2; // unused
+} azoteq_iqs5xx_system_info_1_t;
+
+typedef struct {
+ uint8_t h : 8;
+ uint8_t l : 8;
+} azoteq_iqs5xx_relative_xy_t;
+
+typedef struct {
+ uint8_t previous_cycle_time;
+ azoteq_iqs5xx_gesture_events_0_t gesture_events_0;
+ azoteq_iqs5xx_gesture_events_1_t gesture_events_1;
+ azoteq_iqs5xx_system_info_0_t system_info_0;
+ azoteq_iqs5xx_system_info_1_t system_info_1;
+ uint8_t number_of_fingers;
+ azoteq_iqs5xx_relative_xy_t x;
+ azoteq_iqs5xx_relative_xy_t y;
+} azoteq_iqs5xx_base_data_t;
+
+_Static_assert(sizeof(azoteq_iqs5xx_base_data_t) == 10, "azoteq_iqs5xx_basic_report_t should be 10 bytes");
+
+typedef struct {
+ uint8_t number_of_fingers;
+ azoteq_iqs5xx_relative_xy_t x;
+ azoteq_iqs5xx_relative_xy_t y;
+} azoteq_iqs5xx_report_data_t;
+
+_Static_assert(sizeof(azoteq_iqs5xx_report_data_t) == 5, "azoteq_iqs5xx_report_data_t should be 5 bytes");
+
+typedef struct PACKED {
+ bool sw_input : 1;
+ bool sw_input_select : 1;
+ bool reati : 1;
+ bool alp_reati : 1;
+ bool sw_input_event : 1;
+ bool wdt : 1;
+ bool setup_complete : 1;
+ bool manual_control : 1;
+} azoteq_iqs5xx_system_config_0_t;
+
+typedef struct PACKED {
+ bool event_mode : 1;
+ bool gesture_event : 1;
+ bool tp_event : 1;
+ bool reati_event : 1;
+ bool alp_prox_event : 1;
+ bool snap_event : 1;
+ bool touch_event : 1;
+ bool prox_event : 1;
+} azoteq_iqs5xx_system_config_1_t;
+
+typedef struct PACKED {
+ bool flip_x : 1;
+ bool flip_y : 1;
+ bool switch_xy_axis : 1;
+ bool palm_reject : 1;
+ uint8_t _unused : 4;
+} azoteq_iqs5xx_xy_config_0_t;
+
+typedef struct PACKED {
+ bool suspend : 1;
+ bool reset : 1;
+ int8_t _unused : 6;
+} azoteq_iqs5xx_system_control_1_t;
+
+typedef struct PACKED {
+ bool single_tap : 1;
+ bool press_and_hold : 1;
+ bool swipe_x_minus : 1;
+ bool swipe_x_plus : 1;
+ bool swipe_y_plus : 1;
+ bool swipe_y_minus : 1;
+ int8_t _unused : 2;
+} azoteq_iqs5xx_single_finger_gesture_enable_t;
+
+typedef struct PACKED {
+ bool two_finger_tap : 1;
+ bool scroll : 1;
+ bool zoom : 1;
+ int8_t _unused : 5;
+} azoteq_iqs5xx_multi_finger_gesture_enable_t;
+
+typedef struct PACKED {
+ azoteq_iqs5xx_single_finger_gesture_enable_t single_finger_gestures;
+ azoteq_iqs5xx_multi_finger_gesture_enable_t multi_finger_gestures;
+ uint16_t tap_time;
+ uint16_t tap_distance;
+ uint16_t hold_time;
+ uint16_t swipe_initial_time;
+ uint16_t swipe_initial_distance;
+ uint16_t swipe_consecutive_time;
+ uint16_t swipe_consecutive_distance;
+ int8_t swipe_angle;
+ uint16_t scroll_initial_distance;
+ int8_t scroll_angle;
+ uint16_t zoom_initial_distance;
+ uint16_t zoom_consecutive_distance;
+} azoteq_iqs5xx_gesture_config_t;
+
+_Static_assert(sizeof(azoteq_iqs5xx_gesture_config_t) == 24, "azoteq_iqs5xx_gesture_config_t should be 24 bytes");
+
+typedef struct {
+ uint16_t x_resolution;
+ uint16_t y_resolution;
+} azoteq_iqs5xx_resolution_t;
+
+#define AZOTEQ_IQS5XX_COMBINE_H_L_BYTES(h, l) ((int16_t)(h << 8) | l)
+#define AZOTEQ_IQS5XX_SWAP_H_L_BYTES(b) ((uint16_t)((b & 0xff) << 8) | (b >> 8))
+
+#ifndef AZOTEQ_IQS5XX_REPORT_RATE
+# define AZOTEQ_IQS5XX_REPORT_RATE 10
+#endif
+#if !defined(POINTING_DEVICE_TASK_THROTTLE_MS) && !defined(POINTING_DEVICE_MOTION_PIN)
+# define POINTING_DEVICE_TASK_THROTTLE_MS AZOTEQ_IQS5XX_REPORT_RATE
+#endif
+
+void azoteq_iqs5xx_init(void);
+i2c_status_t azoteq_iqs5xx_wake(void);
+report_mouse_t azoteq_iqs5xx_get_report(report_mouse_t mouse_report);
+i2c_status_t azoteq_iqs5xx_get_report_rate(azoteq_iqs5xx_report_rate_t *report_rate, azoteq_iqs5xx_charging_modes_t mode, bool end_session);
+i2c_status_t azoteq_iqs5xx_set_report_rate(uint16_t report_rate_ms, azoteq_iqs5xx_charging_modes_t mode, bool end_session);
+i2c_status_t azoteq_iqs5xx_set_event_mode(bool enabled, bool end_session);
+i2c_status_t azoteq_iqs5xx_set_reati(bool enabled, bool end_session);
+i2c_status_t azoteq_iqs5xx_set_gesture_config(bool end_session);
+i2c_status_t azoteq_iqs5xx_set_xy_config(bool flip_x, bool flip_y, bool switch_xy, bool palm_reject, bool end_session);
+i2c_status_t azoteq_iqs5xx_reset_suspend(bool reset, bool suspend, bool end_session);
+i2c_status_t azoteq_iqs5xx_get_base_data(azoteq_iqs5xx_base_data_t *base_data);
+void azoteq_iqs5xx_set_cpi(uint16_t cpi);
+uint16_t azoteq_iqs5xx_get_cpi(void);
+uint16_t azoteq_iqs5xx_get_product(void);
+void azoteq_iqs5xx_setup_resolution(void);
diff --git a/drivers/sensors/pmw3320.c b/drivers/sensors/pmw3320.c
index a4648ef425b0..69a584f4e144 100644
--- a/drivers/sensors/pmw3320.c
+++ b/drivers/sensors/pmw3320.c
@@ -178,7 +178,7 @@ uint16_t pmw3320_get_cpi(void) {
}
void pmw3320_set_cpi(uint16_t cpi) {
- uint8_t cpival = constrain((cpi / PMW3320_CPI_STEP) - 1U, 0, (PMW3320_CPI_MAX / PMW3320_CPI_STEP) - 1U);
+ uint8_t cpival = constrain((cpi / PMW3320_CPI_STEP), (PMW3320_CPI_MIN / PMW3320_CPI_STEP), (PMW3320_CPI_MAX / PMW3320_CPI_STEP)) - 1U;
// Fifth bit is probably a control bit.
// PMW3320 datasheet don't have any info on this, so this is a pure guess.
pmw3320_write_reg(REG_Resolution, 0x20 | cpival);
diff --git a/drivers/sensors/pmw3360.c b/drivers/sensors/pmw3360.c
index 81dca002e2df..a7dc687f50de 100644
--- a/drivers/sensors/pmw3360.c
+++ b/drivers/sensors/pmw3360.c
@@ -23,7 +23,7 @@ void pmw33xx_set_cpi(uint8_t sensor, uint16_t cpi) {
return;
}
- uint8_t cpival = CONSTRAIN((cpi / PMW33XX_CPI_STEP) - 1, 0, (PMW33XX_CPI_MAX / PMW33XX_CPI_STEP) - 1U);
+ uint8_t cpival = CONSTRAIN((cpi / PMW33XX_CPI_STEP), (PMW33XX_CPI_MIN / PMW33XX_CPI_STEP), (PMW33XX_CPI_MAX / PMW33XX_CPI_STEP)) - 1U;
pmw33xx_write(sensor, REG_Config1, cpival);
}
diff --git a/drivers/sensors/pmw3389.c b/drivers/sensors/pmw3389.c
index c5781a5ffe03..10e578edac6a 100644
--- a/drivers/sensors/pmw3389.c
+++ b/drivers/sensors/pmw3389.c
@@ -22,7 +22,7 @@ void pmw33xx_set_cpi(uint8_t sensor, uint16_t cpi) {
return;
}
- uint16_t cpival = CONSTRAIN((cpi / PMW33XX_CPI_STEP) - 1, 0, (PMW33XX_CPI_MAX / PMW33XX_CPI_STEP) - 1U);
+ uint16_t cpival = CONSTRAIN((cpi / PMW33XX_CPI_STEP), (PMW33XX_CPI_MIN / PMW33XX_CPI_STEP), (PMW33XX_CPI_MAX / PMW33XX_CPI_STEP)) - 1U;
// Sets upper byte first for more consistent setting of cpi
pmw33xx_write(sensor, REG_Resolution_H, (cpival >> 8) & 0xFF);
pmw33xx_write(sensor, REG_Resolution_L, cpival & 0xFF);
diff --git a/drivers/ws2812.h b/drivers/ws2812.h
index 8750b0110eef..1527df23d371 100644
--- a/drivers/ws2812.h
+++ b/drivers/ws2812.h
@@ -73,4 +73,4 @@
* - Send out the LED data
* - Wait 50us to reset the LEDs
*/
-void ws2812_setleds(LED_TYPE *ledarray, uint16_t number_of_leds);
+void ws2812_setleds(rgb_led_t *ledarray, uint16_t number_of_leds);
diff --git a/keyboards/0_sixty/keymaps/ven0mtr0n/keymap.c b/keyboards/0_sixty/keymaps/ven0mtr0n/keymap.c
deleted file mode 100644
index f1869cd22826..000000000000
--- a/keyboards/0_sixty/keymaps/ven0mtr0n/keymap.c
+++ /dev/null
@@ -1,59 +0,0 @@
-/* Copyright 2020 Vinam Arora
- *
- * 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 .
- */
-
-#include QMK_KEYBOARD_H
-
-enum zero_sixty_layers {
- _DEFAULT,
- _L1,
- _L2,
- _L3,
-};
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-[_DEFAULT] = LAYOUT_1x2uC( /* qwerty */
- KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC ,
- KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_ENT ,
- KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_RCTL ,
- 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_LGUI, MO(_L3), MO(_L2), KC_LALT, MO(_L1), KC_SPC, MO(_L1), KC_RALT, MO(_L2), MO(_L3), KC_RGUI
-),
-
-[_L1] = LAYOUT_1x2uC(
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ ,
- _______, KC_LBRC, KC_LT, KC_GT, KC_RBRC, KC_TILD, KC_PIPE, KC_GRV, KC_QUOT, KC_DQUO, KC_PGUP, _______ ,
- _______, KC_LCBR, KC_LPRN, KC_RPRN, KC_RCBR, KC_DEL, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_PGDN, _______ ,
- _______, KC_APP, _______, _______, _______, _______, KC_EQL, KC_UNDS, KC_MINS, KC_PLUS, KC_BSLS, _______ ,
- _______, _______, _______, _______, _______, KC_CAPS, _______, _______, _______, _______, _______
-),
-
-[_L2] = LAYOUT_1x2uC(
- _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, _______ ,
- _______, _______, _______, _______, _______, KC_VOLU, _______, KC_7, KC_8, KC_9, KC_F11, _______ ,
- _______, _______, _______, _______, KC_MPRV, KC_MPLY, KC_MNXT, KC_4, KC_5, KC_6, KC_F12, _______ ,
- _______, _______, _______, _______, KC_MUTE, KC_VOLD, KC_MUTE, KC_1, KC_2, KC_3, KC_PSCR, _______ ,
- _______, _______, KC_CAPS, _______, _______, _______, KC_0, _______, KC_CAPS, _______, _______
-),
-
-[_L3] = LAYOUT_1x2uC(
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ ,
- _______, _______, _______, _______, _______, _______, _______, KC_WH_U, KC_MS_U, KC_WH_D, _______, _______ ,
- _______, _______, KC_ACL2, KC_ACL1, KC_ACL0, _______, _______, KC_MS_L, KC_MS_D, KC_MS_R, _______, _______ ,
- _______, _______, _______, _______, _______, _______, _______, KC_BTN1, KC_BTN3, KC_BTN2, _______, _______ ,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
-),
-
-};
diff --git a/keyboards/0_sixty/keymaps/ven0mtr0n/readme.md b/keyboards/0_sixty/keymaps/ven0mtr0n/readme.md
deleted file mode 100644
index 584faadf79cc..000000000000
--- a/keyboards/0_sixty/keymaps/ven0mtr0n/readme.md
+++ /dev/null
@@ -1 +0,0 @@
-# Keymap used by vinam. Keeps changing ofcourse :3
\ No newline at end of file
diff --git a/keyboards/0_sixty/keymaps/ven0mtr0n/rules.mk b/keyboards/0_sixty/keymaps/ven0mtr0n/rules.mk
deleted file mode 100644
index 6c605daecf53..000000000000
--- a/keyboards/0_sixty/keymaps/ven0mtr0n/rules.mk
+++ /dev/null
@@ -1 +0,0 @@
-MOUSEKEY_ENABLE = yes
diff --git a/keyboards/0xcb/1337/keymaps/conor/keymap.c b/keyboards/0xcb/1337/keymaps/conor/keymap.c
deleted file mode 100644
index 2064537df11f..000000000000
--- a/keyboards/0xcb/1337/keymaps/conor/keymap.c
+++ /dev/null
@@ -1,186 +0,0 @@
-/*
-Copyright 2021 0xCB - Conor Burns
-
-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 .
-*/
-#include QMK_KEYBOARD_H
-// clang-format off
-enum layer_names {
- _HOME,
- _MISC,
- _RGB,
- _BLED
-};
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-[_HOME] = LAYOUT(
- KC_MPRV, KC_MNXT, KC_MPLY,
- KC_PGUP, KC_PGDN, TO(3),
- KC_HOME, KC_END, TO(1)
-),
-[_MISC] = LAYOUT(
- _______, _______, _______,
- _______, _______, TO(0),
- _______, _______, TO(2)
-),
-[_RGB] = LAYOUT(
- RGB_HUI, RGB_HUD, RGB_MOD,
- RGB_SAI, RGB_SAD, TO(1),
- RGB_SPI, RGB_SPD, TO(3)
-),
-[_BLED] = LAYOUT(
- BL_STEP, BL_BRTG, BL_TOGG,
- BL_ON, BL_OFF, TO(2),
- BL_UP, BL_DOWN, TO(0)
-)
-};
-// clang-format on
-
-/* rotary encoder (SW3) - add more else if blocks for more granular layer control */
-#ifdef ENCODER_ENABLE
-bool encoder_update_user(uint8_t index, bool clockwise) {
- if (IS_LAYER_ON(_RGB)) {
- #ifdef RGBLIGHT_ENABLE
- if (clockwise) {
- rgblight_increase_val();
- } else {
- rgblight_decrease_val();
- }
- #endif
- } else if (IS_LAYER_ON(_BLED)) {
- if (clockwise) {
- backlight_increase();
- } else {
- backlight_decrease();
- }
- } else {
- if (clockwise) {
- tap_code(KC_VOLU);
- } else {
- tap_code(KC_VOLD);
- }
- }
- return true;
-}
-#endif
-
-/* oled stuff :) */
-#ifdef OLED_ENABLE
-uint16_t startup_timer;
-
-oled_rotation_t oled_init_user(oled_rotation_t rotation) {
- startup_timer = timer_read();
- return rotation;
-}
-
-static void render_logo(void) {
- static const char PROGMEM raw_logo[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 64,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 64,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 1, 2, 4, 2, 1, 1, 1, 1, 1, 1,255, 0, 0, 0, 0, 0, 0, 0, 0, 0,255, 1, 1, 1, 1, 1, 1, 2, 4, 2, 1, 0, 0, 0, 0, 0, 0,128, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 5,248, 5, 2, 0, 0, 0, 0, 0, 0,128,192,192,224,224,112,120, 56, 63, 28, 14, 14, 14,254, 14, 14, 30, 28, 63, 56,120,112,224,224,192,128, 0, 0, 0, 0, 0, 0, 0, 2, 5,248, 5, 2, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,160, 19,162, 66, 66, 66, 66, 66, 66, 66,255,255,255, 0, 0, 0,252,254,254,192,192,192,192,255, 0, 0, 0, 62, 62, 60, 60, 0, 0, 1,255,255,255, 66, 66, 66, 66, 66, 66, 66,162, 19,160, 64, 0,
- 0, 0, 0,128, 64, 64, 64,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,192, 64, 64,192,128, 0, 0,192, 64, 64,192,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192, 64,192, 0, 0, 0, 0, 0,128,192, 64, 64,192,128, 0, 0,128,192, 64, 64,192,128, 0, 0, 64, 64, 64, 64, 64,192, 0, 0, 0, 0, 0,249, 8, 8, 8, 8, 8, 8, 8, 8,127,255,255,192,128,128, 15, 31, 31, 1, 1, 1, 1,255, 0, 0, 0, 30, 30, 14, 14,128,192,192,255,255,127, 8, 8, 8, 8, 8, 8, 8, 8,249, 0, 0, 0,
- 0, 0, 31, 49, 64, 78, 64, 49, 31, 0, 0, 97, 22, 8, 22, 97, 0, 0, 31, 49, 96, 64, 64, 96, 32, 0, 0,127, 68, 68,100, 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64,127, 64, 64, 0, 0, 0, 32,100, 68, 68,110, 59, 0, 0, 32,100, 68, 68,110, 59, 0, 0, 0, 0, 0,126, 3, 1, 0, 0, 0, 8, 20, 35, 20, 8, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 7, 7, 15,254, 30, 28, 28, 28,255, 28, 28, 28, 30,254, 15, 7, 3, 3, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 4, 10, 17, 10, 4, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 40, 68, 40, 16, 16, 16, 16, 16, 16, 31, 0, 0, 16, 40, 71, 40, 16, 0, 0, 31, 16, 16, 16, 16, 16, 16, 40, 68, 40, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- };
- oled_write_raw_P(raw_logo, sizeof(raw_logo));
-}
-static void render_logo_font(void) {
- static const char PROGMEM qmk_logo[] = {
- 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xCB, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0xCB, 0xCB, 0xCB, 0x9C, 0x9D, 0xCB, 0xCB,
- 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xCB, 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xCB, 0xCB, 0xBB, 0xBC, 0xBD, 0xBE, 0xCB,
- 0xCC, 0xCD, 0xCE, 0xCF, 0xD0, 0xCB, 0x88, 0x89, 0x8A, 0x8B, 0x8A, 0x8B, 0x8C, 0x8D, 0xCB, 0xCB, 0xDB, 0xDC, 0xDD, 0xDE, 0xCB,
- 0xEC, 0xED, 0xEE, 0xEF, 0xF0, 0xCB, 0xA8, 0xA9, 0xAA, 0xAB, 0xAA, 0xAB, 0xAC, 0xAD, 0xCB, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF, 0x00
- };
-
- oled_write_P(qmk_logo, false);
-}
-/* Shows the name of the current layer and locks for the host (CAPS etc.) */
-static void render_info(void) {
- oled_write_P(PSTR("Layer: "), false);
-
- switch (get_highest_layer(layer_state)) {
- case _HOME:
- oled_write_ln_P(PSTR("HOME"), false);
- break;
- case _MISC:
- oled_write_ln_P(PSTR("MISC"), false);
- break;
- case _RGB:
- oled_write_ln_P(PSTR("RGB"), false);
- break;
- case _BLED:
- oled_write_ln_P(PSTR("Backlight"), false);
- break;
- default:
- oled_write_ln_P(PSTR("Undefined"), false);
- }
- led_t led_state = host_keyboard_led_state();
- oled_write_P(led_state.num_lock ? PSTR("NUM ") : PSTR(" "), false);
- oled_write_P(led_state.caps_lock ? PSTR("CAP ") : PSTR(" "), false);
- oled_write_ln_P(led_state.scroll_lock ? PSTR("SCR ") : PSTR(" "), false);
-}
-static void render_rgbled_status(bool) {
- char string[4];
- if (RGBLIGHT_MODES > 1 && rgblight_is_enabled() && get_highest_layer(layer_state) == _RGB) {
- uint16_t m = rgblight_get_mode();
- string[3] = '\0';
- string[2] = '0' + m % 10;
- string[1] = ( m /= 10) % 10 ? '0' + (m) % 10 : (m / 10) % 10 ? '0' : ' ';
- string[0] = m / 10 ? '0' + m / 10 : ' ';
- oled_write_P(PSTR("Conf:"), false);
- oled_write(string, false);
- uint16_t h = rgblight_get_hue()/RGBLIGHT_HUE_STEP;
- string[3] = '\0';
- string[2] = '0' + h % 10;
- string[1] = ( h /= 10) % 10 ? '0' + (h) % 10 : (h / 10) % 10 ? '0' : ' ';
- string[0] = h / 10 ? '0' + h / 10 : ' ';
- oled_write_P(PSTR(","), false);
- oled_write(string, false);
- uint16_t s = rgblight_get_sat()/RGBLIGHT_SAT_STEP;
- string[3] = '\0';
- string[2] = '0' + s % 10;
- string[1] = ( s /= 10) % 10 ? '0' + (s) % 10 : (s / 10) % 10 ? '0' : ' ';
- string[0] = s / 10 ? '0' + s / 10 : ' ';
- oled_write_P(PSTR(","), false);
- oled_write(string, false);
- uint16_t v = rgblight_get_val()/RGBLIGHT_VAL_STEP;
- string[3] = '\0';
- string[2] = '0' + v % 10;
- string[1] = ( v /= 10) % 10 ? '0' + (v) % 10 : (v / 10) % 10 ? '0' : ' ';
- string[0] = v / 10 ? '0' + v / 10 : ' ';
- oled_write_P(PSTR(","), false);
- oled_write(string, false);
- oled_write_ln_P(PSTR("\n MOD HUE SAT VAR"), false);
- } else {
- oled_write_ln_P(PSTR("\n"), false);
- }
-}
-bool oled_task_user(void) {
- static bool finished_timer = false;
- if (!finished_timer && (timer_elapsed(startup_timer) < 1000)) {
- render_logo();
- } else {
- if (!finished_timer) {
- oled_clear();
- finished_timer = true;
- }
- render_info();
- render_rgbled_status(true);
- render_logo_font();
- }
- return false;
-}
-#endif
diff --git a/keyboards/0xcb/1337/keymaps/jakob/keymap.c b/keyboards/0xcb/1337/keymaps/jakob/keymap.c
deleted file mode 100644
index 4f73a1d9fdf5..000000000000
--- a/keyboards/0xcb/1337/keymaps/jakob/keymap.c
+++ /dev/null
@@ -1,186 +0,0 @@
-/*
-Copyright 2021 0xCB - Conor Burns
-
-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 .
-*/
-#include QMK_KEYBOARD_H
-// clang-format off
-enum layer_names {
- _HOME,
- _MISC,
- _RGB,
- _BLED
-};
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-[_HOME] = LAYOUT(
- KC_MPRV, KC_MNXT, KC_MPLY,
- KC_PGUP, KC_PGDN, TO(3),
- KC_HOME, KC_END, TO(1)
-),
-[_MISC] = LAYOUT(
- _______, _______, _______,
- _______, _______, TO(0),
- _______, _______, TO(2)
-),
-[_RGB] = LAYOUT(
- RGB_HUI, RGB_HUD, RGB_MOD,
- RGB_SAI, RGB_SAD, TO(1),
- RGB_SPI, RGB_SPD, TO(3)
-),
-[_BLED] = LAYOUT(
- BL_STEP, BL_BRTG, BL_TOGG,
- BL_ON, BL_OFF, TO(2),
- BL_UP, BL_DOWN, TO(0)
-)
-};
-// clang-format on
-
-/* rotary encoder (SW3) - add more else if blocks for more granular layer control */
-#ifdef ENCODER_ENABLE
-bool encoder_update_user(uint8_t index, bool clockwise) {
- if (IS_LAYER_ON(_RGB)) {
- #ifdef RGBLIGHT_ENABLE
- if (clockwise) {
- rgblight_increase_val();
- } else {
- rgblight_decrease_val();
- }
- #endif
- } else if (IS_LAYER_ON(_BLED)) {
- if (clockwise) {
- backlight_increase();
- } else {
- backlight_decrease();
- }
- } else {
- if (clockwise) {
- tap_code16(C(A(KC_UP)));
- } else {
- tap_code16(C(A(KC_DOWN)));
- }
- }
- return true;
-}
-#endif
-
-/* oled stuff :) */
-#ifdef OLED_ENABLE
-uint16_t startup_timer;
-
-oled_rotation_t oled_init_user(oled_rotation_t rotation) {
- startup_timer = timer_read();
- return rotation;
-}
-
-static void render_logo(void) {
- static const char PROGMEM raw_logo[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 64,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 64,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 1, 2, 4, 2, 1, 1, 1, 1, 1, 1,255, 0, 0, 0, 0, 0, 0, 0, 0, 0,255, 1, 1, 1, 1, 1, 1, 2, 4, 2, 1, 0, 0, 0, 0, 0, 0,128, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 5,248, 5, 2, 0, 0, 0, 0, 0, 0,128,192,192,224,224,112,120, 56, 63, 28, 14, 14, 14,254, 14, 14, 30, 28, 63, 56,120,112,224,224,192,128, 0, 0, 0, 0, 0, 0, 0, 2, 5,248, 5, 2, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,160, 19,162, 66, 66, 66, 66, 66, 66, 66,255,255,255, 0, 0, 0,252,254,254,192,192,192,192,255, 0, 0, 0, 62, 62, 60, 60, 0, 0, 1,255,255,255, 66, 66, 66, 66, 66, 66, 66,162, 19,160, 64, 0,
- 0, 0, 0,128, 64, 64, 64,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,192, 64, 64,192,128, 0, 0,192, 64, 64,192,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192, 64,192, 0, 0, 0, 0, 0,128,192, 64, 64,192,128, 0, 0,128,192, 64, 64,192,128, 0, 0, 64, 64, 64, 64, 64,192, 0, 0, 0, 0, 0,249, 8, 8, 8, 8, 8, 8, 8, 8,127,255,255,192,128,128, 15, 31, 31, 1, 1, 1, 1,255, 0, 0, 0, 30, 30, 14, 14,128,192,192,255,255,127, 8, 8, 8, 8, 8, 8, 8, 8,249, 0, 0, 0,
- 0, 0, 31, 49, 64, 78, 64, 49, 31, 0, 0, 97, 22, 8, 22, 97, 0, 0, 31, 49, 96, 64, 64, 96, 32, 0, 0,127, 68, 68,100, 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64,127, 64, 64, 0, 0, 0, 32,100, 68, 68,110, 59, 0, 0, 32,100, 68, 68,110, 59, 0, 0, 0, 0, 0,126, 3, 1, 0, 0, 0, 8, 20, 35, 20, 8, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 7, 7, 15,254, 30, 28, 28, 28,255, 28, 28, 28, 30,254, 15, 7, 3, 3, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 4, 10, 17, 10, 4, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 40, 68, 40, 16, 16, 16, 16, 16, 16, 31, 0, 0, 16, 40, 71, 40, 16, 0, 0, 31, 16, 16, 16, 16, 16, 16, 40, 68, 40, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- };
- oled_write_raw_P(raw_logo, sizeof(raw_logo));
-}
-static void render_logo_font(void) {
- static const char PROGMEM qmk_logo[] = {
- 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0xCB, 0xCB, 0xCB, 0xCB, 0xCB, 0xCB, 0xCB, 0xCB, 0xC0, 0xC1, 0xC2, 0xC3, 0xC4,
- 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xCB, 0xCB, 0xCB, 0xCB, 0xCB, 0xCB, 0xCB, 0xCB, 0xE0, 0xE1, 0xE2, 0xE3, 0xE4,
- 0x88, 0x89, 0x8A, 0x8B, 0x8A, 0x8B, 0x8C, 0x8D, 0xCB, 0xCB, 0xCB, 0xCB, 0xCB, 0xCB, 0xCB, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, 0xD0,
- 0xA8, 0xA9, 0xAA, 0xAB, 0xAA, 0xAB, 0xAC, 0xAD, 0xCB, 0xCB, 0xCB, 0xCB, 0xCB, 0xCB, 0xCB, 0xCB, 0xEC, 0xED, 0xEE, 0xEF, 0xF0, 0x00
- };
-
- oled_write_P(qmk_logo, false);
-}
-/* Shows the name of the current layer and locks for the host (CAPS etc.) */
-static void render_info(void) {
- oled_write_P(PSTR("Layer: "), false);
-
- switch (get_highest_layer(layer_state)) {
- case _HOME:
- oled_write_ln_P(PSTR("HOME"), false);
- break;
- case _MISC:
- oled_write_ln_P(PSTR("MISC"), false);
- break;
- case _RGB:
- oled_write_ln_P(PSTR("RGB"), false);
- break;
- case _BLED:
- oled_write_ln_P(PSTR("Backlight"), false);
- break;
- default:
- oled_write_ln_P(PSTR("Undefined"), false);
- }
- led_t led_state = host_keyboard_led_state();
- oled_write_P(led_state.num_lock ? PSTR("NUM ") : PSTR(" "), false);
- oled_write_P(led_state.caps_lock ? PSTR("CAP ") : PSTR(" "), false);
- oled_write_ln_P(led_state.scroll_lock ? PSTR("SCR ") : PSTR(" "), false);
-}
-static void render_rgbled_status(bool) {
- char string[4];
- if (RGBLIGHT_MODES > 1 && rgblight_is_enabled() && get_highest_layer(layer_state) == _RGB) {
- uint16_t m = rgblight_get_mode();
- string[3] = '\0';
- string[2] = '0' + m % 10;
- string[1] = ( m /= 10) % 10 ? '0' + (m) % 10 : (m / 10) % 10 ? '0' : ' ';
- string[0] = m / 10 ? '0' + m / 10 : ' ';
- oled_write_P(PSTR("Conf:"), false);
- oled_write(string, false);
- uint16_t h = rgblight_get_hue()/RGBLIGHT_HUE_STEP;
- string[3] = '\0';
- string[2] = '0' + h % 10;
- string[1] = ( h /= 10) % 10 ? '0' + (h) % 10 : (h / 10) % 10 ? '0' : ' ';
- string[0] = h / 10 ? '0' + h / 10 : ' ';
- oled_write_P(PSTR(","), false);
- oled_write(string, false);
- uint16_t s = rgblight_get_sat()/RGBLIGHT_SAT_STEP;
- string[3] = '\0';
- string[2] = '0' + s % 10;
- string[1] = ( s /= 10) % 10 ? '0' + (s) % 10 : (s / 10) % 10 ? '0' : ' ';
- string[0] = s / 10 ? '0' + s / 10 : ' ';
- oled_write_P(PSTR(","), false);
- oled_write(string, false);
- uint16_t v = rgblight_get_val()/RGBLIGHT_VAL_STEP;
- string[3] = '\0';
- string[2] = '0' + v % 10;
- string[1] = ( v /= 10) % 10 ? '0' + (v) % 10 : (v / 10) % 10 ? '0' : ' ';
- string[0] = v / 10 ? '0' + v / 10 : ' ';
- oled_write_P(PSTR(","), false);
- oled_write(string, false);
- oled_write_ln_P(PSTR("\n MOD HUE SAT VAR"), false);
- } else {
- oled_write_ln_P(PSTR("\n"), false);
- }
-}
-bool oled_task_user(void) {
- static bool finished_timer = false;
- if (!finished_timer && (timer_elapsed(startup_timer) < 1000)) {
- render_logo();
- } else {
- if (!finished_timer) {
- oled_clear();
- finished_timer = true;
- }
- render_info();
- render_rgbled_status(true);
- render_logo_font();
- }
- return false;
-}
-#endif
diff --git a/keyboards/0xcb/splaytoraid/config.h b/keyboards/0xcb/splaytoraid/config.h
index 2f2eb82fee34..00674eea11cb 100644
--- a/keyboards/0xcb/splaytoraid/config.h
+++ b/keyboards/0xcb/splaytoraid/config.h
@@ -8,7 +8,6 @@
#define RGB_MATRIX_DEFAULT_MODE RGB_MATRIX_BREATHING
#define RGB_MATRIX_DEFAULT_HUE 152
#define RGB_MATRIX_DEFAULT_SAT 232
-#define RGB_MATRIX_DEFAULT_VAL RGB_MATRIX_MAXIMUM_BRIGHTNESS
#define RGB_MATRIX_DEFAULT_SPD 50
#define ENABLE_RGB_MATRIX_BREATHING
diff --git a/keyboards/0xcb/splaytoraid/keymaps/pi/config.h b/keyboards/0xcb/splaytoraid/keymaps/pi/config.h
deleted file mode 100644
index 1786ae776db4..000000000000
--- a/keyboards/0xcb/splaytoraid/keymaps/pi/config.h
+++ /dev/null
@@ -1,17 +0,0 @@
-// Copyright 2023 Dreipunkteinsvier (@dreipunkteinsvier)
-/* SPDX-License-Identifier: GPL-2.0-or-later */
-
-#pragma once
-
-#define TAPPING_TERM 180
-
-#undef LOCKING_SUPPORT_ENABLE
-#undef LOCKING_RESYNC_ENABLE
-
-
-#ifdef COMBO_ENABLE
- #define COMBO_TERM 20
- #define COMBO_ONLY_FROM_LAYER 0
-#endif
-
-#define BOTH_SHIFTS_TURNS_ON_CAPS_WORD
diff --git a/keyboards/0xcb/splaytoraid/keymaps/pi/keymap.c b/keyboards/0xcb/splaytoraid/keymaps/pi/keymap.c
deleted file mode 100644
index 07036b7245e3..000000000000
--- a/keyboards/0xcb/splaytoraid/keymaps/pi/keymap.c
+++ /dev/null
@@ -1,300 +0,0 @@
-// Copyright 2023 Dreipunkteinsvier (@dreipunkteinsvier)
-/* SPDX-License-Identifier: GPL-2.0-or-later */
-
-#include QMK_KEYBOARD_H
-#include
-#include
-
-// ┌────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
-// │ D E F I N I T I O N S │
-// └────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
-// ▝▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▘
-
-enum splaytoraid40_layers {
- _QWERTY,
- _COLEMAK,
- _NAVIGATION,
- _MEDIA,
- _NUMBERS,
- _FUNCTION,
-};
-
-// ┌───────────────────────────────────────────────────────────┐
-// │ d e f i n e k e y c o d e s │
-// └───────────────────────────────────────────────────────────┘
-
-enum custom_keycodes {
- COLEMAK = SAFE_RANGE,
- QWERTY
-};
-
-// ┌───────────────────────────────────────────────────────────┐
-// │ d e f i n e m a c r o n a m e s │
-// └───────────────────────────────────────────────────────────┘
-
-// LEFT HAND HOME ROW MODS ├───────────────────────────────────┐
-#define HM_A LGUI_T(KC_A)
-#define HM_S LALT_T(KC_S)
-#define HM_D LCTL_T(KC_D)
-#define HM_F LSFT_T(KC_F)
-#define HM_G RALT_T(KC_G)
-
-// RIGHT HAND HOME ROW MODS ├──────────────────────────────────┐
-#define HM_H RALT_T(KC_H)
-#define HM_J RSFT_T(KC_J)
-#define HM_K LCTL_T(KC_K)
-#define HM_L LALT_T(KC_L)
-#define HM_SCLN LGUI_T(KC_SCLN)
-
-// CTRL + ARROWS ├─────────────────────────────────────────────┐
-#define CT_LEFT LCTL(KC_LEFT)
-#define CT_DOWN LCTL(KC_DOWN)
-#define CT_UP LCTL(KC_UP)
-#define CT_RGHT LCTL(KC_RGHT)
-
-// THUMB KEY LAYER TAPS ├──────────────────────────────────────┐
-#define TB_TAB LT(_MEDIA, KC_TAB)
-#define TB_ENT LT(_NAVIGATION, KC_ENT)
-#define TB_SPC LT(_NUMBERS, KC_SPC)
-#define TB_BSPC LT(_FUNCTION, KC_BSPC)
-
-// ┌───────────────────────────────────────────────────────────┐
-// │ d e f i n e c o m b o s │
-// └───────────────────────────────────────────────────────────┘
-// vertical combos for umlauts
-const uint16_t PROGMEM ae_combo[] = {KC_Q, HM_A, COMBO_END};
-const uint16_t PROGMEM ss_combo[] = {KC_W, HM_S, COMBO_END};
-const uint16_t PROGMEM ue_combo[] = {KC_U, HM_J, COMBO_END};
-const uint16_t PROGMEM oe_combo[] = {KC_O, HM_L, COMBO_END};
-// horizontal combos for mods
-const uint16_t PROGMEM del_combo[] = {HM_H, HM_J, COMBO_END};
-const uint16_t PROGMEM bsp_combo[] = {HM_J, HM_K, COMBO_END};
-const uint16_t PROGMEM ent_combo[] = {HM_K, HM_L, COMBO_END};
-const uint16_t PROGMEM tab_combo[] = {HM_F, HM_D, COMBO_END};
-const uint16_t PROGMEM esc_combo[] = {HM_D, HM_S, COMBO_END};
-
-combo_t key_combos[] = {
- COMBO(ae_combo, RALT(KC_Q)),
- COMBO(ss_combo, RALT(KC_S)),
- COMBO(ue_combo, RALT(KC_Y)),
- COMBO(oe_combo, RALT(KC_P)),
- COMBO(del_combo, KC_DEL),
- COMBO(bsp_combo, KC_BSPC),
- COMBO(ent_combo, KC_ENT),
- COMBO(tab_combo, KC_TAB),
- COMBO(esc_combo, KC_ESC)
-};
-
-// ┌────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
-// │ K E Y M A P S │
-// └────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
-// ▝▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▘
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-
- /*
- ╺━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸
-
- ┌───────────────────────────────────────────────────────────┐
- │ q w e r t y │
- └───────────────────────────────────────────────────────────┘
- ┌─────────┬─────────┬─────────┬─────────┬─────────┐ ┌─────────┬─────────┬─────────┬─────────┬─────────┐
- │ Q │ W │ E │ R │ T │ ╭╮╭╮╭╮╭╮╭╮╭╮╭╮╭╮╭╮ │ Y │ U │ I │ O │ P │
- ├─────────┼─────────┼─────────┼─────────┼─────────┤ │╰╯╰╯╰╯╰╯╰╯╰╯╰╯╰╯│ ├─────────┼─────────┼─────────┼─────────┼─────────┤
- │ A │ S │ D │ F │ G ├─╯ ╰─┤ H │ J │ K │ L │ ; │
- ├─────────┼─────────┼─────────┼─────────┼─────────┤╭────────╮╭────────╮├─────────┼─────────┼─────────┼─────────┼─────────┤
- │ Z │ X │ C │ V │ B ││ ││ ││ N │ M │ , │ . │ / │
- └─────────┴─────────┼─────────┼─────────┼─────────┼╰────────╯╰────────╯┼─────────┼─────────┼─────────┼─────────┴─────────┘
- │ ESC │ TAB │ ENTER │ │ SPACE │ BSPACE │ DEL │
- └─────────┴─────────┴─────────┘ └─────────┴─────────┴─────────┘ */
-
- [_QWERTY] = LAYOUT_36(
- //╷ ╷ ╷ ╷ ╷ ╷ ╷╷ ╷ ╷ ╷ ╷ ╷ ╷
- KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,
- HM_A, HM_S, HM_D, HM_F, HM_G, HM_H, HM_J, HM_K, HM_L, HM_SCLN,
- KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH,
- KC_ESC, TB_TAB, TB_ENT, KC_MPLY, TB_SPC, TB_BSPC, KC_DEL
- ),
-
- /*
- ╺━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸
- ┌───────────────────────────────────────────────────────────┐
- │ c o l e m a k │
- └───────────────────────────────────────────────────────────┘
- ┌─────────┬─────────┬─────────┬─────────┬─────────┐ ┌─────────┬─────────┬─────────┬─────────┬─────────┐
- │ Q │ W │ F │ P │ G │ ╭╮╭╮╭╮╭╮╭╮╭╮╭╮╭╮╭╮ │ J │ L │ U │ Y │ ; │
- ├─────────┼─────────┼─────────┼─────────┼─────────┤ │╰╯╰╯╰╯╰╯╰╯╰╯╰╯╰╯│ ├─────────┼─────────┼─────────┼─────────┼─────────┤
- │ A │ R │ S │ T │ D ├─╯ ╰─┤ H │ N │ E │ I │ O │
- ├─────────┼─────────┼─────────┼─────────┼─────────┤╭────────╮╭────────╮├─────────┼─────────┼─────────┼─────────┼─────────┤
- │ Z │ X │ C │ V │ B ││ ││ ││ K │ M │ , │ . │ / │
- └─────────┴─────────┼─────────┼─────────┼─────────┼╰────────╯╰────────╯┼─────────┼─────────┼─────────┼─────────┴─────────┘
- │ ESC │ TAB │ ENTER │ │ SPACE │ BSPACE │ DEL │
- └─────────┴─────────┴─────────┘ └─────────┴─────────┴─────────┘ */
-
- [_COLEMAK] = LAYOUT_36(
- //╷ ╷ ╷ ╷ ╷ ╷ ╷╷ ╷ ╷ ╷ ╷ ╷ ╷
- KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN,
- KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O,
- KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH,
- KC_ESC, TB_TAB, TB_ENT, _______, TB_SPC, TB_BSPC, KC_DEL
- ),
-
- /*
- ╺━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸
-
- ┌───────────────────────────────────────────────────────────┐
- │ n a v i g a t i o n │
- └───────────────────────────────────────────────────────────┘
- ┌─────────┬─────────┬─────────┬─────────┬─────────┐ ┌─────────┬─────────┬─────────┬─────────┬─────────┐
- │ │ │ │ │ { │ ╭╮╭╮╭╮╭╮╭╮╭╮╭╮╭╮╭╮ │ } │ CTRL ← │ CTRL ↓ │ CTRL ↑ │ CTRL → │
- ├─────────┼─────────┼─────────┼─────────┼─────────┤ │╰╯╰╯╰╯╰╯╰╯╰╯╰╯╰╯│ ├─────────┼─────────┼─────────┼─────────┼─────────┤
- │ │ │ │ │ ( ├─╯ ╰─┤ ) │ ← │ ↓ │ ↑ │ → │
- ├─────────┼─────────┼─────────┼─────────┼─────────┤╭────────╮╭────────╮├─────────┼─────────┼─────────┼─────────┼─────────┤
- │ │ │ │ │ [ ││ ││ ││ ] │ HOME │ PG↓ │ PG↑ │ END │
- └─────────┴─────────┼─────────┼─────────┼─────────┼╰────────╯╰────────╯┼─────────┼─────────┼─────────┼─────────┴─────────┘
- │ │ │ │ │ │ │ │
- └─────────┴─────────┴─────────┘ └─────────┴─────────┴─────────┘ */
-
- [_NAVIGATION] = LAYOUT_36(
- //╷ ╷ ╷ ╷ ╷ ╷ ╷╷ ╷ ╷ ╷ ╷ ╷ ╷
- _______, _______, _______, _______, KC_LCBR, KC_RCBR, CT_LEFT, CT_DOWN, CT_UP, CT_RGHT,
- KC_LGUI, KC_LALT, KC_LCTL, KC_LSFT, KC_LPRN, KC_RPRN, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT,
- _______, _______, _______, _______, KC_LBRC, KC_RBRC, KC_HOME, KC_PGDN, KC_PGUP, KC_END,
- _______, _______, _______, _______, _______, _______, _______
- ),
-
- /*
- ╺━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸
-
- ┌───────────────────────────────────────────────────────────┐
- │ m e d i a & s y m b o l │
- └───────────────────────────────────────────────────────────┘
- ┌─────────┬─────────┬─────────┬─────────┬─────────┐ ┌─────────┬─────────┬─────────┬─────────┬─────────┐
- │ _ │ & │ * │ ( │ ) │ ╭╮╭╮╭╮╭╮╭╮╭╮╭╮╭╮╭╮ │ │ │ │ │ │
- ├─────────┼─────────┼─────────┼─────────┼─────────┤ │╰╯╰╯╰╯╰╯╰╯╰╯╰╯╰╯│ ├─────────┼─────────┼─────────┼─────────┼─────────┤
- │ + │ $ │ % │ ^ │ " ├─╯ ╰─┤ │ │ │ │ │
- ├─────────┼─────────┼─────────┼─────────┼─────────┤╭────────╮╭────────╮├─────────┼─────────┼─────────┼─────────┼─────────┤
- │ ~ │ ! │ @ │ # │ | ││ ││ ││ │ │ │ │ │
- └─────────┴─────────┼─────────┼─────────┼─────────┼╰────────╯╰────────╯┼─────────┼─────────┼─────────┼─────────┴─────────┘
- │ │ │ │ │ │ │ │
- └─────────┴─────────┴─────────┘ └─────────┴─────────┴─────────┘ */
-
- [_MEDIA] = LAYOUT_36(
- //╷ ╷ ╷ ╷ ╷ ╷ ╷╷ ╷ ╷ ╷ ╷ ╷ ╷
- KC_UNDS, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, RGB_TOG, RGB_MOD, RGB_HUI, RGB_SAI, RGB_VAI,
- KC_PLUS, KC_DLR, KC_PERC, KC_CIRC, KC_DQUO, RGB_M_P, RGB_RMOD, RGB_HUD, RGB_SAD, RGB_VAD,
- KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_PIPE, QWERTY, COLEMAK, _______, _______, QK_BOOTLOADER,
- _______, _______, _______, _______, _______, _______, _______
- ),
-
- /*
- ╺━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸
-
- ┌───────────────────────────────────────────────────────────┐
- │ n u m b e r s │
- └───────────────────────────────────────────────────────────┘
- ┌─────────┬─────────┬─────────┬─────────┬─────────┐ ┌─────────┬─────────┬─────────┬─────────┬─────────┐
- │ - │ 7 │ 8 │ 9 │ 0 │ ╭╮╭╮╭╮╭╮╭╮╭╮╭╮╭╮╭╮ │ │ │ │ │ │
- ├─────────┼─────────┼─────────┼─────────┼─────────┤ │╰╯╰╯╰╯╰╯╰╯╰╯╰╯╰╯│ ├─────────┼─────────┼─────────┼─────────┼─────────┤
- │ = │ 4 │ 5 │ 6 │ ' ├─╯ ╰─┤ │ │ │ │ │
- ├─────────┼─────────┼─────────┼─────────┼─────────┤╭────────╮╭────────╮├─────────┼─────────┼─────────┼─────────┼─────────┤
- │ ` │ 1 │ 2 │ 3 │ \ ││ ││ ││ │ │ │ │ │
- └─────────┴─────────┼─────────┼─────────┼─────────┼╰────────╯╰────────╯┼─────────┼─────────┼─────────┼─────────┴─────────┘
- │ │ │ │ │ │ │ │
- └─────────┴─────────┴─────────┘ └─────────┴─────────┴─────────┘ */
-
- [_NUMBERS] = LAYOUT_36(
- //╷ ╷ ╷ ╷ ╷ ╷ ╷╷ ╷ ╷ ╷ ╷ ╷ ╷
- KC_MINS, KC_7, KC_8, KC_9, KC_0, _______, _______, _______, _______, _______,
- KC_EQL, KC_4, KC_5, KC_6, KC_QUOT, KC_RALT, KC_RSFT, KC_LCTL, KC_LALT, KC_LGUI,
- KC_GRV, KC_1, KC_2, KC_3, KC_BSLS, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______
- ),
-
- /*
- ╺━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸
-
- ┌───────────────────────────────────────────────────────────┐
- │ f u n t i o n │
- └───────────────────────────────────────────────────────────┘
- ┌─────────┬─────────┬─────────┬─────────┬─────────┐ ┌─────────┬─────────┬─────────┬─────────┬─────────┐
- │ F12 │ F7 │ F8 │ F9 │ PRT SCR │ ╭╮╭╮╭╮╭╮╭╮╭╮╭╮╭╮╭╮ │ │ │ │ │ │
- ├─────────┼─────────┼─────────┼─────────┼─────────┤ │╰╯╰╯╰╯╰╯╰╯╰╯╰╯╰╯│ ├─────────┼─────────┼─────────┼─────────┼─────────┤
- │ F11 │ F4 │ F5 │ F6 │ ├─╯ ╰─┤ │ │ │ │ │
- ├─────────┼─────────┼─────────┼─────────┼─────────┤╭────────╮╭────────╮├─────────┼─────────┼─────────┼─────────┼─────────┤
- │ F10 │ F1 │ F2 │ F3 │ INS ││ ││ ││ │ │ │ │ │
- └─────────┴─────────┼─────────┼─────────┼─────────┼╰────────╯╰────────╯┼─────────┼─────────┼─────────┼─────────┴─────────┘
- │ │ │ │ │ │ │ │
- └─────────┴─────────┴─────────┘ └─────────┴─────────┴─────────┘ */
-
- [_FUNCTION] = LAYOUT_36(
- //╷ ╷ ╷ ╷ ╷ ╷ ╷╷ ╷ ╷ ╷ ╷ ╷ ╷
- KC_F12, KC_F7, KC_F8, KC_F9, KC_PSCR, _______, _______, _______, _______, _______,
- KC_F11, KC_F4, KC_F5, KC_F6, _______, KC_RALT, KC_RSFT, KC_LCTL, KC_LALT, KC_LGUI,
- KC_F10, KC_F1, KC_F2, KC_F3, KC_INS, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______
- )
-
- /*
- ╺━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸
-
- ┌───────────────────────────────────────────────────────────┐
- │ t e m p l a t e │
- └───────────────────────────────────────────────────────────┘
- ┌─────────┬─────────┬─────────┬─────────┬─────────┐ ┌─────────┬─────────┬─────────┬─────────┬─────────┐
- │ │ │ │ │ │ ╭╮╭╮╭╮╭╮╭╮╭╮╭╮╭╮╭╮ │ │ │ │ │ │
- ├─────────┼─────────┼─────────┼─────────┼─────────┤ │╰╯╰╯╰╯╰╯╰╯╰╯╰╯╰╯│ ├─────────┼─────────┼─────────┼─────────┼─────────┤
- │ │ │ │ │ ├─╯ ╰─┤ │ │ │ │ │
- ├─────────┼─────────┼─────────┼─────────┼─────────┤╭────────╮╭────────╮├─────────┼─────────┼─────────┼─────────┼─────────┤
- │ │ │ │ │ ││ ││ ││ │ │ │ │ │
- └─────────┴─────────┼─────────┼─────────┼─────────┼╰────────╯╰────────╯┼─────────┼─────────┼─────────┼─────────┴─────────┘
- │ │ │ │ │ │ │ │
- └─────────┴─────────┴─────────┘ └─────────┴─────────┴─────────┘ */
-/*
- [_TEMPLATE] = LAYOUT_saegewerk(
- //╷ ╷ ╷ ╷ ╷ ╷ ╷╷ ╷ ╷ ╷ ╷ ╷ ╷
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______
- )*/
-};
-
-// ┌────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
-// │ D I E S U N D D A S │
-// └────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
-// ▝▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▘
-bool caps_word_press_user(uint16_t keycode) {
- switch (keycode) {
- // Keycodes that continue Caps Word, with shift applied.
- case KC_A ... KC_Z:
- add_weak_mods(MOD_BIT(KC_LSFT)); // Apply shift to the next key.
- return true;
-
- // Keycodes that continue Caps Word, without shifting.
- case KC_1 ... KC_0:
- case KC_BSPC:
- case KC_DEL:
- case KC_MINS:
- case KC_UNDS:
- case KC_LSFT:
- case KC_RSFT:
- return true;
-
- default:
- return false; // Deactivate Caps Word.
- }
-}
-
-// ┌───────────────────────────────────────────────────────────┐
-// │ e n c o d e r │
-// └───────────────────────────────────────────────────────────┘
-
-const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
- [_NAVIGATION] = { ENCODER_CCW_CW(KC_LEFT, KC_RGHT) },
- [_QWERTY] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
- [_COLEMAK] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
- [_MEDIA] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
- [_NUMBERS] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
- [_FUNCTION] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) }
-};
diff --git a/keyboards/0xcb/splaytoraid/keymaps/pi/rules.mk b/keyboards/0xcb/splaytoraid/keymaps/pi/rules.mk
deleted file mode 100644
index 0d3e8aa3a902..000000000000
--- a/keyboards/0xcb/splaytoraid/keymaps/pi/rules.mk
+++ /dev/null
@@ -1,3 +0,0 @@
-COMBO_ENABLE = yes
-CAPS_WORD_ENABLE = yes
-ENCODER_MAP_ENABLE = yes
diff --git a/keyboards/0xcb/static/keymaps/bongocat/keymap.c b/keyboards/0xcb/static/keymaps/bongocat/keymap.c
deleted file mode 100644
index 144b8daaa41e..000000000000
--- a/keyboards/0xcb/static/keymaps/bongocat/keymap.c
+++ /dev/null
@@ -1,298 +0,0 @@
-/*
-Copyright 2021 0xCB - Conor Burns
-
-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 .
-*/
-#include QMK_KEYBOARD_H
-// clang-format off
-enum my_keycodes {
- WPM = SAFE_RANGE,
-};
-enum layer_names {
- _HOME,
- _FN2,
- _FN3,
- _FN4
-};
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-[_HOME] = LAYOUT_all(
- KC_MPLY,
- QK_GESC, 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_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_ENT,
- SC_LSPO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, SC_RSPC,
- KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_SPC, KC_RALT, MO(1), MO(2)
-),
-[_FN2] = LAYOUT_all(
- QK_BOOT,
- 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_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______
-),
-[_FN3] = LAYOUT_all(
- EE_CLR,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_LBRC, KC_RBRC, KC_BSLS,
- _______, _______, _______, _______, _______, _______, _______, _______, KC_SCLN, KC_QUOT, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_SLSH,
- _______, _______, _______, _______, _______, _______, _______, _______, _______
-),
-[_FN4] = LAYOUT_all(
- _______,
- WPM, KC_MUTE, KC_VOLD, KC_VOLU, KC_MPRV, KC_MNXT, KC_MSTP, KC_INS, KC_HOME, KC_DEL, KC_END, _______,
- _______, _______, KC_BRID, KC_BRIU, _______, _______, _______, KC_PGUP, KC_UP, KC_PGDN, _______,
- _______, _______, _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_RGHT, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______
-),
-};
-// clang-format on
-/* WPM toggle key bongocat hehe */
-bool wpm = false;
-bool process_record_user(uint16_t keycode, keyrecord_t *record) {
- switch (keycode) {
- case WPM:
- if (record->event.pressed) {
- wpm = !wpm;
- }
- return false;
- default:
- return true;
- }
-}
-/*layer switcher */
-layer_state_t layer_state_set_user(layer_state_t state) {
- state = update_tri_layer_state(state, _FN2, _FN3, _FN4);
- return state;
-}
-/* rotary encoder (MX12) - add different functions for layers here */
-#ifdef ENCODER_ENABLE
-bool encoder_update_user(uint8_t index, bool clockwise) {
- if (IS_LAYER_ON(_FN4)) {
- if (clockwise) {
- tap_code(KC_VOLU);
- } else {
- tap_code(KC_VOLD);
- }
- } else if (IS_LAYER_ON(_FN3)) {
- if (clockwise) {
- tap_code(KC_VOLU);
- } else {
- tap_code(KC_VOLD);
- }
- } else if (IS_LAYER_ON(_FN2)) {
- if (clockwise) {
- tap_code(KC_VOLU);
- } else {
- tap_code(KC_VOLD);
- }
- } else {
- if (clockwise) {
- tap_code(KC_VOLU);
- } else {
- tap_code(KC_VOLD);
- }
- }
- return true;
-}
-#endif
-
-/* oled stuff :) */
-#ifdef OLED_ENABLE
-#define IDLE_FRAMES 5
-#define IDLE_SPEED 20 // below this wpm value your animation will idle
-#define TAP_FRAMES 2
-#define TAP_SPEED 40 // above this wpm value typing animation to trigger
-#define ANIM_FRAME_DURATION 200 // how long each frame lasts in ms
-#define ANIM_SIZE 636 // number of bytes in array
-
-uint32_t anim_timer = 0;
-uint32_t anim_sleep = 0;
-uint8_t current_idle_frame = 0;
-uint8_t current_tap_frame = 0;
-
-uint16_t startup_timer = 0;
-
-oled_rotation_t oled_init_user(oled_rotation_t rotation) {
- startup_timer = timer_read();
- return rotation;
-}
-static void render_logo(void) {
- static const char PROGMEM raw_logo[] = {
- 0, 8, 0,192,194,192,192, 60, 60, 44, 60,188, 60, 60, 60, 60, 44, 61, 60,192,192,192,208, 1, 0,252,252,180,252, 60, 60, 44, 60,252,253,252,252, 60, 60, 44, 60,244,220,252,252, 0, 0, 16, 0, 0, 0,192,192, 65,192, 60, 60, 52, 60,192,193,192,192, 16, 0, 0,144, 4, 0,252,125,244, 60, 60, 60, 60, 61,252,252,244,252, 60, 60, 60, 61,248,108,252, 0, 0, 61, 60,188, 60, 52,252,252,220,252, 61, 60, 60, 52, 0, 0,192,210, 64,192, 60, 60, 44, 61, 60, 60, 60, 61, 52, 60, 60, 60,192,192, 64,196, 0, 4, 0,
- 0, 16, 0, 61, 63, 55, 63,192, 64,192,196,192,192,192,200,192,196,192,192, 3, 3, 2, 11, 0, 0, 35, 3, 3, 3, 0, 64, 2, 0,255,255,253,247, 0, 0, 0, 32, 1, 0, 1, 65, 8, 0,189,244,252,236, 3,130, 3, 1, 0, 68, 0, 0, 3, 34,131, 3,252,252,236,252, 0, 32, 17, 1, 1, 0, 0, 32, 0, 2,255,255,127,247, 0, 1, 0, 8, 1, 1, 1, 0, 0, 0, 16, 0, 64, 0,255,191,255,251, 0,129, 0, 2, 32, 0,255,255,239,255, 0, 0, 2, 0, 0, 0, 8, 64, 0, 1, 0, 0, 3, 35, 3, 3, 0, 8, 0,
- 1, 16, 0,192, 64,194,192, 3, 67, 3, 3, 9, 3, 3, 3, 3, 2, 83, 3,252,252,188,244, 0, 2, 32, 0, 0, 2, 0,144, 0, 0,255,255,237,255, 0, 16, 0, 0, 0, 64, 2, 0,128, 0,255,123,255,255, 60, 52, 60, 60, 60, 60, 60, 60, 44, 60, 56, 60,239,255,126,255, 0, 2, 32, 0, 0, 34, 0, 0, 16, 0,255,255,255,223, 0, 0, 4, 0, 0, 0, 33, 0, 0, 17, 0, 0, 0, 0,255,255,239,255, 0,128, 0, 0, 72, 0,255,253,247,255, 0, 0, 1, 0,144, 0, 4, 0, 32, 0, 0, 2,192,192,192,200, 0, 16, 0,
- 64, 4, 0, 3, 7, 3, 3, 60, 60, 52,188, 60, 61, 60, 60, 60, 60, 44, 60, 67, 3, 3, 3, 0, 0, 64, 0, 0, 4, 0, 0, 16, 0, 47, 63, 62, 63, 0, 0,132, 0, 0, 0, 0,128, 8, 0,255,255,111,127, 0, 0, 0, 2,128, 0, 0, 0, 64, 4, 0,128,127,127,107,127, 0, 32, 0, 0, 0, 66, 0, 0, 0,136, 55, 63, 61, 63, 0, 0, 0, 2, 0, 64, 0,136, 0, 0, 60, 44,189, 60, 63, 63, 63, 59, 60, 60,172, 60, 0, 64, 3, 2, 3,131, 60, 44, 60, 60, 60, 60,188, 60, 56, 44, 60, 60, 3, 3,131, 2, 0, 32, 2,
- };
- oled_write_raw_P(raw_logo, sizeof(raw_logo));
-}
-/* Shows the name of the current layer and locks for the host (CAPS etc.) */
-static void render_layer(void) {
- led_t led_state = host_keyboard_led_state();
- // clang-format off
- static const char PROGMEM logo[][3][7] = {
- {{0x97, 0x98, 0x99, 0x9A, 0}, {0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0}, {0x9B, 0x9C, 0x9D, 0x9E, 0x9F, 0}}, /* l num CB */
- {{0xB7, 0xB8, 0xB9, 0xBA, 0}, {0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0}, {0xBB, 0xBC, 0xBD, 0xBE, 0xBF, 0}}, /* 1 num CB */
- {{0xD7, 0xD8, 0xD9, 0xDA, 0}, {0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0}, {0xDB, 0xDC, 0xDD, 0xDE, 0xDF, 0}}, /* 1 cap CB */
- {{0xF7, 0xF8, 0xF9, 0xFA, 0}, {0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0}, {0xFB, 0xFC, 0xFD, 0xFE, 0xFF, 0}}, /* l cap CB */
- {{0xB7, 0xC0, 0xC1, 0xBA, 0}, {0xB7, 0xC2, 0xC3, 0xBA, 0}, {0xB7, 0xC4, 0xC5, 0xBA, 0}}, /* 2 3 4 */
- {{0xD7, 0xE0, 0xE1, 0xDA, 0}, {0xD7, 0xE2, 0xE3, 0xDA, 0}, {0xD7, 0xE4, 0xE5, 0xDA, 0}}, /* 2 3 4 */
- };
- // clang-format on
- oled_set_cursor(0, 0);
- oled_write_P(logo[0][0], false);
- oled_set_cursor(0, 3);
- oled_write_P(logo[3][0], false);
- switch (get_highest_layer(layer_state)) {
- case _HOME:
- oled_set_cursor(0, 1);
- oled_write_P(logo[1][0], false);
- oled_set_cursor(0, 2);
- oled_write_P(logo[2][0], false);
- break;
- case _FN2:
- oled_set_cursor(0, 1);
- oled_write_P(logo[4][0], false);
- oled_set_cursor(0, 2);
- oled_write_P(logo[5][0], false);
- break;
- case _FN3:
- oled_set_cursor(0, 1);
- oled_write_P(logo[4][1], false);
- oled_set_cursor(0, 2);
- oled_write_P(logo[5][1], false);
- break;
- case _FN4:
- oled_set_cursor(0, 1);
- oled_write_P(logo[4][2], false);
- oled_set_cursor(0, 2);
- oled_write_P(logo[5][2], false);
- break;
- default:
- oled_set_cursor(0, 1);
- oled_write_P(PSTR(" "), false);
- oled_set_cursor(0, 2);
- oled_write_P(PSTR(" "), false);
- }
- oled_set_cursor(8, 0);
- oled_write_P(led_state.num_lock ? logo[0][1] : PSTR(" "), false);
- oled_set_cursor(8, 1);
- oled_write_P(led_state.num_lock ? logo[1][1] : PSTR(" "), false);
- oled_set_cursor(8, 2);
- oled_write_P(led_state.caps_lock ? logo[2][1] : PSTR(" "), false);
- oled_set_cursor(8, 3);
- oled_write_P(led_state.caps_lock ? logo[3][1] : PSTR(" "), false);
-
- oled_set_cursor(16, 0);
- oled_write_P(logo[0][2], false);
- oled_set_cursor(16, 1);
- oled_write_P(logo[1][2], false);
- oled_set_cursor(16, 2);
- oled_write_P(logo[2][2], false);
- oled_set_cursor(16, 3);
- oled_write_P(logo[3][2], false);
-
- /* Fill empty space to clear animation */
- oled_set_cursor(4, 0);
- oled_write_P(PSTR(" "), false);
- oled_set_cursor(4, 1);
- oled_write_P(PSTR(" "), false);
- oled_set_cursor(4, 2);
- oled_write_P(PSTR(" "), false);
- oled_set_cursor(4, 3);
- oled_write_P(PSTR(" "), false);
-
- oled_set_cursor(14, 0);
- oled_write_P(PSTR(" "), false);
- oled_set_cursor(14, 1);
- oled_write_P(PSTR(" "), false);
- oled_set_cursor(14, 2);
- oled_write_P(PSTR(" "), false);
- oled_set_cursor(14, 3);
- oled_write_P(PSTR(" "), false);
-}
-
-static void render_cat(void) {
- static const char PROGMEM idle[IDLE_FRAMES][ANIM_SIZE] = {
- {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x20, 0x18, 0x04, 0x02, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x20, 0x40, 0x40, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xc1, 0x01, 0x01, 0x02, 0x02, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x40, 0x80, 0x80, 0x40, 0x00, 0x00, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x04, 0x08, 0x08, 0x10, 0x20, 0x40, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x18, 0x06, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x83, 0x83, 0x40, 0x40, 0x40, 0x40, 0x20, 0x21, 0x21, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x04, 0x08, 0x30, 0x40, 0x80, 0x80, 0x00, 0x00, 0x01, 0x86, 0x98, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x0f, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x04, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40, 0x41, 0x42, 0x24, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
- {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x40, 0x40, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xc1, 0x01, 0x01, 0x02, 0x02, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x80, 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, 0x01, 0x02, 0x04, 0x04, 0x08, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x30, 0x0c, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x86, 0x86, 0x40, 0x40, 0x40, 0x40, 0x21, 0x22, 0x22, 0x20, 0x11, 0x11, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x04, 0x08, 0x30, 0x40, 0x80, 0x80, 0x00, 0x00, 0x01, 0x86, 0x98, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x0f, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x04, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40, 0x41, 0x42, 0x24, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
- {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x82, 0x02, 0x02, 0x04, 0x04, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x02, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x80, 0x00, 0x00, 0x60, 0x60, 0x00, 0x01, 0x01, 0x02, 0x04, 0x04, 0x08, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x30, 0x0c, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x86, 0x86, 0x40, 0x40, 0x40, 0x40, 0x21, 0x22, 0x22, 0x20, 0x11, 0x11, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x04, 0x08, 0x30, 0x40, 0x80, 0x80, 0x00, 0x00, 0x01, 0x86, 0x98, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x0f, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x04, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40, 0x41, 0x42, 0x24, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
- {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x34, 0xc4, 0x04, 0x04, 0x04, 0x08, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x02, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x40, 0x80, 0x80, 0x40, 0x00, 0x00, 0x30, 0x30, 0x00, 0x01, 0x01, 0x02, 0x02, 0x04, 0x04, 0x04, 0x08, 0x08, 0x10, 0x20, 0x40, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x18, 0x06, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x83, 0x83, 0x40, 0x40, 0x40, 0x40, 0x20, 0x21, 0x21, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x04, 0x08, 0x30, 0x40, 0x80, 0x80, 0x00, 0x00, 0x01, 0x86, 0x98, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x0f, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x04, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40, 0x41, 0x42, 0x24, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
- {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x20, 0x18, 0x04, 0x02, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x20, 0x40, 0x40, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x0d, 0x31, 0xc1, 0x01, 0x01, 0x01, 0x02, 0x02, 0x02, 0x04, 0x04, 0x02, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x40, 0x80, 0x80, 0x40, 0x00, 0x00, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x04, 0x08, 0x08, 0x10, 0x20, 0x40, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x18, 0x06, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x83, 0x83, 0x40, 0x40, 0x40, 0x40, 0x20, 0x21, 0x21, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x04, 0x08, 0x30, 0x40, 0x80, 0x80, 0x00, 0x00, 0x01, 0x86, 0x98, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x0f, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x04, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40, 0x41, 0x42, 0x24, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}};
- static const char PROGMEM prep[][ANIM_SIZE] = {
- {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x40, 0x40, 0x20, 0x20, 0x10, 0x08, 0x04, 0x02, 0x04, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xc1, 0x01, 0x01, 0x02, 0x02, 0x04, 0x84, 0x44, 0x44, 0x42, 0x82, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x40, 0x80, 0x80, 0x40, 0x00, 0x00, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x64, 0x18, 0x04, 0x12, 0xc2, 0xca, 0x24, 0x88, 0xf0, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x18, 0x06, 0x01, 0x00, 0x00, 0x0c, 0x03, 0x00, 0x02, 0x18, 0x19, 0x00, 0x05, 0xfe, 0x80, 0x83, 0x83, 0x40, 0x40, 0x40, 0x40, 0x20, 0x21, 0x21, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x0f, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}};
- static const char PROGMEM tap[TAP_FRAMES][ANIM_SIZE] = {
- {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x40, 0x40, 0x20, 0x20, 0x10, 0x08, 0x04, 0x02, 0x04, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xc1, 0x01, 0x01, 0x02, 0x02, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x40, 0x80, 0x80, 0x40, 0x00, 0x00, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x64, 0x18, 0x04, 0x12, 0xc2, 0xca, 0x24, 0x88, 0xf0, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x18, 0x06, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x83, 0x83, 0x40, 0x40, 0x40, 0x40, 0x20, 0x21, 0x21, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x0f, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x04, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40, 0x41, 0x42, 0x24, 0x98, 0xc0, 0x88, 0x88, 0x8c, 0x9c, 0x1c, 0x1e, 0x0e, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
- {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x40, 0x40, 0x20, 0x20, 0x10, 0x08, 0x04, 0x02, 0x04, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xc1, 0x01, 0x01, 0x02, 0x02, 0x04, 0x84, 0x44, 0x44, 0x42, 0x82, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x40, 0x80, 0x80, 0x40, 0x00, 0x00, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x04, 0x08, 0x08, 0x10, 0x20, 0x40, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x18, 0x06, 0x01, 0x00, 0x00, 0x0c, 0x03, 0x00, 0x02, 0x18, 0x19, 0x00, 0x05, 0xfe, 0x80, 0x83, 0x83, 0x40, 0x40, 0x40, 0x40, 0x20, 0x21, 0x21, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x04, 0x08, 0x30, 0x40, 0x80, 0x80, 0x00, 0x00, 0x01, 0x86, 0x98, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x0f, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x0f, 0x0f, 0x07, 0x03, 0x03, 0x61, 0xf0, 0xf8, 0xfc, 0x60, 0x01, 0x01, 0x01, 0x3c, 0x78, 0xf8, 0xf0, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
- };
-
- void animation_phase(void) {
- if (get_current_wpm() <= IDLE_SPEED) {
- current_idle_frame = (current_idle_frame + 1) % IDLE_FRAMES;
- oled_write_raw_P(idle[abs((IDLE_FRAMES - 1) - current_idle_frame)], ANIM_SIZE);
- }
- if (get_current_wpm() > IDLE_SPEED && get_current_wpm() < TAP_SPEED) {
- oled_write_raw_P(prep[0], ANIM_SIZE);
- }
- if (get_current_wpm() >= TAP_SPEED) {
- current_tap_frame = (current_tap_frame + 1) % TAP_FRAMES;
- oled_write_raw_P(tap[abs((TAP_FRAMES - 1) - current_tap_frame)], ANIM_SIZE);
- }
- }
- if (get_current_wpm() != 000) {
- if (timer_elapsed32(anim_timer) > ANIM_FRAME_DURATION) {
- anim_timer = timer_read32();
- animation_phase();
- }
- anim_sleep = timer_read32();
- } else {
- if (timer_elapsed32(anim_timer) > ANIM_FRAME_DURATION) {
- anim_timer = timer_read32();
- animation_phase();
- }
- }
-}
-
-bool oled_task_user(void) {
- static bool finished_timer = false;
- if (!finished_timer && (timer_elapsed(startup_timer) < 3000)) {
- render_logo();
- } else {
- if (!finished_timer) {
- oled_clear();
- finished_timer = true;
- }
- if (wpm) {
- render_cat();
- oled_set_cursor(0, 0);
- char string[10];
- uint16_t m = get_current_wpm();
- string[3] = '\0';
- string[2] = '0' + m % 10;
- string[1] = ( m /= 10) % 10 ? '0' + (m) % 10 : (m / 10) % 10 ? '0' : ' ';
- string[0] = m / 10 ? '0' + m / 10 : ' ';
- oled_write_P(PSTR("WPM:"), false);
- oled_write(string, false);
- } else {
- render_layer();
- }
- }
- return false;
-}
-#endif
-
-/* Resets via on eep reset - thank you drashna! */
-void eeconfig_init_kb(void) {
- via_eeprom_set_valid(false);
- via_init();
- eeconfig_init_user();
-}
diff --git a/keyboards/0xcb/static/keymaps/bongocat/rules.mk b/keyboards/0xcb/static/keymaps/bongocat/rules.mk
deleted file mode 100644
index d03b5f1ca758..000000000000
--- a/keyboards/0xcb/static/keymaps/bongocat/rules.mk
+++ /dev/null
@@ -1,2 +0,0 @@
-VIA_ENABLE = yes
-WPM_ENABLE = yes
\ No newline at end of file
diff --git a/keyboards/1k/keymaps/default/rgblite.h b/keyboards/1k/keymaps/default/rgblite.h
index e64f49ee0aa3..29d684ac0815 100644
--- a/keyboards/1k/keymaps/default/rgblite.h
+++ b/keyboards/1k/keymaps/default/rgblite.h
@@ -7,7 +7,7 @@
#include "color.h"
static inline void rgblite_setrgb(RGB rgb) {
- LED_TYPE leds[RGBLED_NUM] = {{.r = rgb.r, .g = rgb.g, .b = rgb.b}};
+ rgb_led_t leds[RGBLED_NUM] = {{.r = rgb.r, .g = rgb.g, .b = rgb.b}};
ws2812_setleds(leds, RGBLED_NUM);
}
diff --git a/keyboards/1k/keymaps/media/keymap.c b/keyboards/1k/keymaps/media/keymap.c
deleted file mode 100644
index 6fd3eb92dea7..000000000000
--- a/keyboards/1k/keymaps/media/keymap.c
+++ /dev/null
@@ -1,22 +0,0 @@
-// Copyright 2022 Makoto Kurauchi (@MakotoKurauchi)
-// SPDX-License-Identifier: GPL-2.0-or-later
-
-#include QMK_KEYBOARD_H
-#include "rgblite.h"
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [0] = LAYOUT_ortho_1x1(
- KC_MUTE
- )
-};
-
-bool process_record_user(uint16_t keycode, keyrecord_t *record) {
- if (record->event.pressed) {
- rgblite_increase_hue();
- }
- return true;
-}
-
-void keyboard_post_init_user(void) {
- rgblite_increase_hue();
-}
diff --git a/keyboards/1k/keymaps/media/rgblite.h b/keyboards/1k/keymaps/media/rgblite.h
deleted file mode 100644
index e64f49ee0aa3..000000000000
--- a/keyboards/1k/keymaps/media/rgblite.h
+++ /dev/null
@@ -1,23 +0,0 @@
-// Copyright 2022 Makoto Kurauchi (@MakotoKurauchi)
-// SPDX-License-Identifier: GPL-2.0-or-later
-
-#pragma once
-
-#include "ws2812.h"
-#include "color.h"
-
-static inline void rgblite_setrgb(RGB rgb) {
- LED_TYPE leds[RGBLED_NUM] = {{.r = rgb.r, .g = rgb.g, .b = rgb.b}};
- ws2812_setleds(leds, RGBLED_NUM);
-}
-
-static void rgblite_increase_hue(void) {
- static uint8_t state = 0;
-
- HSV hsv = { 255, 255, 255 };
- hsv.h = state;
- state = (state + 8) % 256;
-
- rgblite_setrgb(hsv_to_rgb(hsv));
-
-}
diff --git a/keyboards/1k/keymaps/media/rules.mk b/keyboards/1k/keymaps/media/rules.mk
deleted file mode 100644
index 76db8f131e89..000000000000
--- a/keyboards/1k/keymaps/media/rules.mk
+++ /dev/null
@@ -1,3 +0,0 @@
-WS2812_DRIVER_REQUIRED = yes
-SRC += color.c
-EXTRAKEY_ENABLE = yes
diff --git a/keyboards/1k/keymaps/tap_dance/config.h b/keyboards/1k/keymaps/tap_dance/config.h
deleted file mode 100644
index bd0163e4475c..000000000000
--- a/keyboards/1k/keymaps/tap_dance/config.h
+++ /dev/null
@@ -1,7 +0,0 @@
-// Copyright 2022 Makoto Kurauchi (@MakotoKurauchi)
-// SPDX-License-Identifier: GPL-2.0-or-later
-
-#pragma once
-
-#define TAPPING_TERM 500
-#define PERMISSIVE_HOLD
diff --git a/keyboards/1k/keymaps/tap_dance/keymap.c b/keyboards/1k/keymaps/tap_dance/keymap.c
deleted file mode 100644
index 104492497891..000000000000
--- a/keyboards/1k/keymaps/tap_dance/keymap.c
+++ /dev/null
@@ -1,22 +0,0 @@
-// Copyright 2022 Makoto Kurauchi (@MakotoKurauchi)
-// SPDX-License-Identifier: GPL-2.0-or-later
-
-#include QMK_KEYBOARD_H
-
-enum layers {
- _BASE = 0,
-};
-
-enum {
- TD_AB = 0
-};
-
-tap_dance_action_t tap_dance_actions[] = {
- [TD_AB] = ACTION_TAP_DANCE_DOUBLE(KC_A, KC_B)
-};
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [_BASE] = LAYOUT_ortho_1x1(
- TD(TD_AB)
- )
-};
diff --git a/keyboards/1k/keymaps/tap_dance/rules.mk b/keyboards/1k/keymaps/tap_dance/rules.mk
deleted file mode 100644
index e5ddcae8d927..000000000000
--- a/keyboards/1k/keymaps/tap_dance/rules.mk
+++ /dev/null
@@ -1 +0,0 @@
-TAP_DANCE_ENABLE = yes
diff --git a/keyboards/1upkeyboards/1up60hse/keymaps/vosechu/config.h b/keyboards/1upkeyboards/1up60hse/keymaps/vosechu/config.h
deleted file mode 100644
index 65293382cf69..000000000000
--- a/keyboards/1upkeyboards/1up60hse/keymaps/vosechu/config.h
+++ /dev/null
@@ -1,19 +0,0 @@
-/* Copyright 2018 Chuck "@vosechu" Lauer Vose
- *
- * 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 .
- */
-
-#pragma once
-
-// place overrides here
diff --git a/keyboards/1upkeyboards/1up60hse/keymaps/vosechu/keymap.c b/keyboards/1upkeyboards/1up60hse/keymaps/vosechu/keymap.c
deleted file mode 100644
index eeca330838ab..000000000000
--- a/keyboards/1upkeyboards/1up60hse/keymaps/vosechu/keymap.c
+++ /dev/null
@@ -1,46 +0,0 @@
-/* Copyright 2018 Chuck "@vosechu" Lauer Vose
- *
- * 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 .
- */
-#include QMK_KEYBOARD_H
-
-#define SPACEFN LT(1, KC_SPC)
-#define CTL_GRV CTL_T(KC_GRV)
-#define ALT_TAB ALT_T(KC_TAB)
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [0] = LAYOUT_60_ansi(
- KC_ESC , KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , KC_MINS , KC_EQL , KC_BSPC ,
- KC_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_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 ,
- CTL_GRV , ALT_TAB , KC_LGUI , SPACEFN , KC_RALT , KC_RGUI , MO(1) , KC_RCTL
- ),
-
- [1] = LAYOUT_60_ansi(
- 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_DEL ,
- KC_TRNS , KC_TRNS , KC_UP , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_PSCR , KC_SCRL , KC_PAUS , KC_TRNS ,
- KC_TRNS , KC_LEFT , KC_DOWN , KC_RGHT , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_INS , KC_HOME , KC_PGUP , KC_TRNS ,
- KC_TRNS , KC_VOLU , KC_VOLD , KC_MUTE , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_END , KC_PGDN , KC_TRNS ,
- KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , MO(2) , KC_TRNS , KC_TRNS
- ),
-
- [2] = LAYOUT_60_ansi(
- KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , QK_BOOT,
- BL_TOGG , BL_UP , BL_DOWN , BL_STEP , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS ,
- RGB_TOG , RGB_MOD , RGB_HUI , RGB_SAI , RGB_VAI , RGB_SPI , RGB_M_P , RGB_M_B , RGB_M_R , RGB_M_SW , KC_TRNS , KC_TRNS , KC_TRNS ,
- KC_TRNS , RGB_RMOD , RGB_HUD , RGB_SAD , RGB_VAD , RGB_SPD , RGB_M_SN , RGB_M_K , RGB_M_X , RGB_M_G , KC_TRNS , KC_TRNS ,
- KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS
- )
-};
diff --git a/keyboards/1upkeyboards/1up60hse/keymaps/vosechu/readme.md b/keyboards/1upkeyboards/1up60hse/keymaps/vosechu/readme.md
deleted file mode 100644
index 97e9453b7c9d..000000000000
--- a/keyboards/1upkeyboards/1up60hse/keymaps/vosechu/readme.md
+++ /dev/null
@@ -1,6 +0,0 @@
-# 1up60hse keymap made by vosechu
-
-Tweaks from default
-
-* Add in SpaceFN so arrows are reachable with just left hand (leaving right free for mousing).
-* Also add tab/grv under the alt/ctrl keys to make those easier to reach.
diff --git a/keyboards/1upkeyboards/1up60hte/keymaps/badger/keymap.c b/keyboards/1upkeyboards/1up60hte/keymaps/badger/keymap.c
deleted file mode 100644
index 197c449122fe..000000000000
--- a/keyboards/1upkeyboards/1up60hte/keymaps/badger/keymap.c
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
-Copyright 2020 Dan White
-
-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 .
-*/
-#include "badger.h"
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [_QWERTY_MAC] = LAYOUT_tsangan(
- 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_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,
- MOVE_MAC, 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, CFG_MAC,
- KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, ADJUST, KC_RALT, KC_RGUI),
-
- [_MOVE_MAC] = LAYOUT_tsangan(
- MAC_FRC, MM_LEFT, MM_RGHT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_0, IJ_TOP, IJ_BOTT, _______, _______,
- KC_BACK, IJ_STEP, IJ_INTO, IJ_OUT, IJ_RUN, IJ_STOP, _______, WD_BACK, KC_HOME, KC_END, WD_FRWD, IJ_BACK, IJ_FWD, KC_NEXT,
- _______, MM_LH, MM_MAX, MM_RH, IJ_FIND, IJ_IMPS, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, CM_RIGHT, CM_DOWN, _______,
- _______, MM_UH, MM_BH, MAC_CPY, MAC_PST, IJ_IMPH, _______, IJ_REN, IJ_IMPL, IJ_DECL, IJ_USAG, _______, _______,
- _______, _______, _______, _______, _______, _______, _______),
-
- [_QWERTY_LINUX] = LAYOUT_tsangan(
- 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_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,
- MOVE, 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, CFG_LNX,
- KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, ADJUST, KC_RALT, KC_RGUI),
-
- [_MOVE_LINUX] = LAYOUT_tsangan(
- KC_GRV, VD_1, VD_2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______,
- KC_BACK, WM_VD1, WM_UH, WM_VD2, QK_BOOT, KC_MSTP, KC_MPLY, KC_PGUP, KC_HOME, KC_END, KC_PGDN, _______, _______, KC_NEXT,
- _______, WM_LH, WM_MAX, WM_RH, WD_FRWD, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, CS_RIGHT, CS_DOWN, _______,
- _______, WM_VD3, WM_BH, OS_COPY, OS_PAST, WD_BACK, KC_MNXT, KC_MUTE, KC_WBAK, KC_WFWD, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______),
-
- [_ADJUST] = LAYOUT_tsangan(
- 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_WREF, KC_MSTP, KC_MPLY, KC_PGUP, _______, _______, KC_PGDN, KC_VOLD, KC_VOLU, KC_INS,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, KC_CAPS, _______, KC_MPRV, KC_MNXT, KC_MUTE, KC_WBAK, KC_WFWD, KC_WSCH, _______, _______,
- _______, _______, _______, _______, _______, _______, _______),
-
- [_CONFIG] = LAYOUT_tsangan(
- _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______,
- _______, NK_ON, NK_OFF, EE_CLR, QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, KC_INS,
- _______, GE_SWAP, GE_NORM, DB_TOGG, RGB_MOD, RGB_HUI, RGB_SAI, RGB_SPI, RGB_M_B, _______, _______, RGB_TOG, _______,
- _______, DF_1, DF_2, _______, RGB_RMOD, RGB_HUD, RGB_SAD, RGB_SPD, RGB_M_K, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______)
-};
diff --git a/keyboards/1upkeyboards/1up60rgb/keymaps/badger/keymap.c b/keyboards/1upkeyboards/1up60rgb/keymaps/badger/keymap.c
deleted file mode 100644
index 214316cd6572..000000000000
--- a/keyboards/1upkeyboards/1up60rgb/keymaps/badger/keymap.c
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
-Copyright 2020 Dan White
-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 .
-*/
-#include "badger.h"
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [_QWERTY_MAC] = LAYOUT_60_ansi_tsangan_split_rshift(
- KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,
- KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
- MOVE_MAC, 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, CFG_MAC,
- KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, ADJUST, KC_RALT, KC_RGUI),
-
- [_MOVE_MAC] = LAYOUT_60_ansi_tsangan_split_rshift(
- MAC_FRC, MM_LEFT, MM_RGHT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_0, IJ_TOP, IJ_BOTT, KC_DEL,
- KC_BACK, IJ_STEP, IJ_INTO, IJ_OUT, IJ_RUN, IJ_STOP, _______, WD_BACK, KC_HOME, KC_END, WD_FRWD, IJ_BACK, IJ_FWD, KC_NEXT,
- _______, MM_LH, MM_MAX, MM_RH, IJ_FIND, IJ_IMPS, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, CM_RIGHT, CM_DOWN, _______,
- _______, MM_UH, MM_BH, MAC_CPY, MAC_PST, IJ_IMPH, _______, IJ_REN, IJ_IMPL, IJ_DECL, IJ_USAG, _______, _______,
- _______, _______, _______, _______, _______, _______, _______),
-
- [_QWERTY_LINUX] = LAYOUT_60_ansi_tsangan_split_rshift(
- KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,
- KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
- MOVE, 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, CFG_LNX,
- KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, ADJUST, KC_LALT, KC_RGUI),
-
- [_MOVE_LINUX] = LAYOUT_60_ansi_tsangan_split_rshift(
- KC_GRV, VD_1, VD_2, VD_3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL,
- KC_BACK, WM_VD1, WM_UH, WM_VD2, QK_BOOT, KC_MSTP, KC_MPLY, KC_PGUP, KC_HOME, KC_END, KC_PGDN, _______, _______, KC_NEXT,
- _______, WM_LH, WM_MAX, WM_RH, WD_FRWD, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, CS_RIGHT, CS_DOWN, _______,
- _______, WM_VD3, WM_BH, OS_COPY, OS_PAST, WD_BACK, KC_MNXT, KC_MUTE, KC_WBAK, KC_WFWD, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______),
-
- [_ADJUST] = LAYOUT_60_ansi_tsangan_split_rshift(
- KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL,
- _______, _______, _______, _______, KC_WREF, KC_MSTP, KC_MPLY, KC_PGUP, _______, _______, KC_PGDN, KC_VOLD, KC_VOLU, KC_INS,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, DF_1, DF_2, KC_CAPS, _______, KC_MPRV, KC_MNXT, KC_MUTE, KC_WBAK, KC_WFWD, KC_WSCH, _______, _______,
- _______, _______, _______, _______, _______, _______, _______),
-
- [_CONFIG] = LAYOUT_60_ansi_tsangan_split_rshift(
- _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL,
- _______, NK_ON, NK_OFF, EE_CLR, QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, KC_INS,
- _______, GE_SWAP, GE_NORM, DB_TOGG, RGB_MOD, RGB_HUI, RGB_SAI, RGB_SPI, RGB_M_B, _______, _______, RGB_TOG, _______,
- _______, LAG_SWP, LAG_NRM, _______, RGB_RMOD, RGB_HUD, RGB_SAD, RGB_SPD, RGB_M_K, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______)
-};
-
diff --git a/keyboards/1upkeyboards/1up60rgb/keymaps/mdyevimnav/keymap.c b/keyboards/1upkeyboards/1up60rgb/keymaps/mdyevimnav/keymap.c
deleted file mode 100644
index f78af99bf6a1..000000000000
--- a/keyboards/1upkeyboards/1up60rgb/keymaps/mdyevimnav/keymap.c
+++ /dev/null
@@ -1,48 +0,0 @@
-#include QMK_KEYBOARD_H
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-
-/*
- * Layer 0
- * ,-----------------------------------------------------------------------------------------.
- * | ~ | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | Bksp |
- * |-----------------------------------------------------------------------------------------+
- * | Tab | q | w | e | r | t | y | u | i | o | p | [ | ] | \ |
- * |-----------------------------------------------------------------------------------------+
- * | Esc | a | s | d | f | g | h | j | k | l | ; | ' | Enter |
- * |-----------------------------------------------------------------------------------------+
- * | Shift | z | x | c | v | b | n | m | , | . | / | Shift |
- * |-----------------------------------------------------------------------------------------+
- * | Ctrl | L1 | Alt | space | Alt | Sup | L1 | Ctrl |
- * \-----------------------------------------------------------------------------------------/
- *
- */
- LAYOUT_all(
- 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_BSPC,
- KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
- KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_ENT,
- KC_LSFT, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_RSFT,
- KC_LCTL, MO(1), KC_LALT, KC_SPC, KC_RALT, KC_RGUI, MO(1), KC_RCTL),
-
-/*
- * Layer 1
- * ,-----------------------------------------------------------------------------------------.
- * | | f1 | f2 | f3 | f4 | f5 | f6 | f7 | f8 | f9 | f10 | f11 | f12 | Del |
- * |-----------------------------------------------------------------------------------------+
- * | | | | | | | | | Ins | | Paus| | | Prnt |
- * |-----------------------------------------------------------------------------------------+
- * | | | | | | | L | D | U | R | | | |
- * |-----------------------------------------------------------------------------------------+
- * | | | | | | | Hom | PDn | PUp | End | | |
- * |-----------------------------------------------------------------------------------------+
- * | | | | | | | | |
- * \-----------------------------------------------------------------------------------------/
- *
- */
- LAYOUT_all(
- KC_TRNS, 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_DEL,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_INS, KC_TRNS, KC_PAUS, KC_TRNS, KC_TRNS, KC_PSCR,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_PGDN, KC_PGUP, KC_END, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS)
-};
diff --git a/keyboards/1upkeyboards/1up60rgb/keymaps/raffle/keymap.c b/keyboards/1upkeyboards/1up60rgb/keymaps/raffle/keymap.c
deleted file mode 100644
index 453bf8c9617d..000000000000
--- a/keyboards/1upkeyboards/1up60rgb/keymaps/raffle/keymap.c
+++ /dev/null
@@ -1,82 +0,0 @@
-//****************************************************************************//
-// raffle's keymap for the 1up60rgb. //
-// emulates my pok3r layout and adds RGB control + firmware reset/debug //
-// layers //
-//****************************************************************************//
-
-//************************ dependencies + definitions ************************//
-#include QMK_KEYBOARD_H
-
-// create names for layers
-enum layers {
- _typing,
- _raise,
- _rgb,
- _adjust
-};
-
-// define layer mods
-#define RAISE MO(_raise)
-#define RGB MO(_rgb)
-
-// define mod masks for making multi-key macros
-#define MODS_SHIFT_MASK (MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT))
-#define MODS_CTRL_MASK (MOD_BIT(KC_LCTL) | MOD_BIT(KC_RCTL))
-#define MODS_ALT_MASK (MOD_BIT(KC_LALT) | MOD_BIT(KC_RALT))
-
-//********************************** Layers **********************************//
-// define layers
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- // typing layer to handle basic typing
- [_typing] = LAYOUT_all
- (
- QK_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC,
- KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
- KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_ENT,
- KC_LSFT, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_RSFT,
- RAISE, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, RGB, KC_RCTL
- ),
- // raise layer to handle function & nav keys
- [_raise] = LAYOUT_all
- (
- 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_DEL, KC_DEL,
- KC_TRNS, KC_MPRV, KC_MPLY, KC_MNXT, KC_TRNS, KC_TRNS, KC_CALC, KC_PGUP, KC_UP, KC_PGDN, KC_PSCR, KC_LSCR, KC_PAUSE, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_VOLD, KC_VOLU, KC_MUTE, KC_TRNS, KC_HOME, KC_LEFT, KC_DOWN, KC_RIGHT, KC_INS, KC_DEL, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_APP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_END, KC_TRNS, KC_TRNS, 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 layer for pretty backlight colors
- [_rgb] = LAYOUT_all
- (
- RGB_TOG, RGB_M_P, RGB_M_B, RGB_M_R, RGB_M_SW, RGB_M_SN, RGB_M_K, RGB_M_X, RGB_M_G, RGB_M_T, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
- KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, RGB_HUI, RGB_VAI, RGB_HUD, KC_NO, KC_NO, KC_NO, KC_NO,
- KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, RGB_MOD, RGB_SAI, RGB_VAD,RGB_SAD, KC_NO, KC_NO, KC_NO, KC_NO,
- KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, RGB_RMOD, 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
- ),
- // adjust to handle firmware debug + reset mode
- [_adjust] = LAYOUT_all
- (
- QK_BOOT, DB_TOGG, 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_NO, KC_NO, KC_NO, KC_NO, KC_NO
- )
-};
-
-//***************************** Function bodies *****************************//
-// enable tri-layer state for _raise + _rgb = _adjust
-layer_state_t layer_state_set_user(layer_state_t state) {
- return update_tri_layer_state(state, _raise, _rgb, _adjust);
-}
-
-// support for standard mod state keys (caps lock, scroll lock, etc.)
-bool led_update_user(led_t led_state) {
- if (led_state.caps_lock) {
- DDRB |= (1 << 2); PORTB &= ~(1 << 2);
- } else {
- DDRB &= ~(1 << 2); PORTB &= ~(1 << 2);
- }
- return false;
-}
diff --git a/keyboards/1upkeyboards/1up60rgb/keymaps/raffle/readme.md b/keyboards/1upkeyboards/1up60rgb/keymaps/raffle/readme.md
deleted file mode 100644
index c462c206acea..000000000000
--- a/keyboards/1upkeyboards/1up60rgb/keymaps/raffle/readme.md
+++ /dev/null
@@ -1,43 +0,0 @@
-## raffle's keymap
-The default keymap is just enough to get started. This keymap adds a pok3r-like
-raise layer, backlight RGB control layer, and firmware reset/debug adjust layer
-for ANSI layouts.
-
-In the default layer, the following modifications are made (using standard ANSI
-keys for LHS):
-
-- `CAPS` = `LCTRL`
-- `LCTRL` = `RAISE`
-- `APP` = `RGB`
-- `LCTRL` + `APP` (`RAISE` + `RGB`) = `ADJUST`
-- `GRV` = `ESC`
-
-Additionally, the pok3r's `SHIFT` + `ESC` for `~` is maintained (with either `SHIFT`).
-
-### Raise Layer
-Emulates standard pok3r layout (without the onboard macro keys)
-
-Highlights:
-
-- `IJKL` for arrow keys
-- `H`/`N` for `HOME`/`END`
-- `U`/`P` for `PGUP`/`PGDN`
-- `1` - `=` for `F1` - `F12`
-- `Y` for calculator
-
-Other standard keys from the pok3r layout are carried over. See the keymap or
-the pok3r documentation for details.
-
-### RGB Layer
-Uses navigation keys from `RAISE` layer for RGB adjustment
-
-- `I`/`K` for Value (brightness) Increase/Decrease
-- `U`/`P` for Hue (color) Increase/Decrease
-- `H`/`N` for Saturation Incrase/Decrease
-- `GRV` to toggle RGB on/off
-- `1`-`9` to activate QMK's predefined RGB animations
-
-### Adjust Layer
-
-- `GRV` activates firmware reset for flashing
-- `1` enters debug mode
diff --git a/keyboards/1upkeyboards/1upocarina/info.json b/keyboards/1upkeyboards/1upocarina/info.json
index fccf9d889981..c6a371808250 100644
--- a/keyboards/1upkeyboards/1upocarina/info.json
+++ b/keyboards/1upkeyboards/1upocarina/info.json
@@ -37,6 +37,7 @@
]
},
"ws2812": {
+ "driver": "vendor",
"pin": "GP24"
},
"rgb_matrix": {
diff --git a/keyboards/1upkeyboards/1upocarina/rules.mk b/keyboards/1upkeyboards/1upocarina/rules.mk
index 8e853e0af70b..6e7633bfe015 100644
--- a/keyboards/1upkeyboards/1upocarina/rules.mk
+++ b/keyboards/1upkeyboards/1upocarina/rules.mk
@@ -1 +1 @@
-WS2812_DRIVER = vendor
\ No newline at end of file
+# This file intentionally left blank
diff --git a/keyboards/1upkeyboards/1upslider8/rules.mk b/keyboards/1upkeyboards/1upslider8/rules.mk
index 8515c3fae029..cc588202788d 100644
--- a/keyboards/1upkeyboards/1upslider8/rules.mk
+++ b/keyboards/1upkeyboards/1upslider8/rules.mk
@@ -1 +1 @@
-SRC += analog.c
+ANALOG_DRIVER_REQUIRED = yes
diff --git a/keyboards/1upkeyboards/pi40/mit_v1_0/keymaps/miketronic/config.h b/keyboards/1upkeyboards/pi40/mit_v1_0/keymaps/miketronic/config.h
deleted file mode 100644
index 834b7ee0ab23..000000000000
--- a/keyboards/1upkeyboards/pi40/mit_v1_0/keymaps/miketronic/config.h
+++ /dev/null
@@ -1,13 +0,0 @@
-// Copyright 2023 @miketronic -- Mike B
-// SPDX-License-Identifier: GPL-2.0+
-
-#pragma once
-
-# define TAPPING_TERM 160
-# define TAPPING_TERM_PER_KEY
-# define HOLD_ON_OTHER_KEY_PRESS
-# define QUICK_TAP_TERM TAPPING_TERM / 2
-# define QUICK_TAP_TERM_PER_KEY
-
-
-
diff --git a/keyboards/1upkeyboards/pi40/mit_v1_0/keymaps/miketronic/keymap.c b/keyboards/1upkeyboards/pi40/mit_v1_0/keymaps/miketronic/keymap.c
deleted file mode 100644
index 636aad675bc7..000000000000
--- a/keyboards/1upkeyboards/pi40/mit_v1_0/keymaps/miketronic/keymap.c
+++ /dev/null
@@ -1,290 +0,0 @@
-// Copyright 2023 @miketronic -- Mike B
-// SPDX-License-Identifier: GPL-2.0+
-
-#include "miketronic.h"
-
-
-
-
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-
- /* Workman
- * ┌─────┬─────┬─────┬─────┬─────┬─────┐ ┌─────┬─────┬─────┬─────┬─────┬─────┐
- * │ TAB │ Q │ D │ R │ W │ B │ │ J │ F │ U │ P │ BSPC│ BSPC│
- * │ ESC │ ESC │ │ │ │ SYM │ │ SYM │ │ │ │ │ │
- * ├─────┼─────┼─────┼─────╆━━━━━╅─────┤ ├─────╆━━━━━╅─────┼─────┼─────┼─────┤
- * │ TAB │ A │ S │ H ┃ T ┃ G │ │ Y ┃ N ┃ E │ O │ I │ │
- * │SHIFT│ │ │ ┃ EX ┃ │ │ ┃ ┃ │ │ENTER│ENTER│
- * ├─────┼─────┼─────┼─────╄━━━━━╃─────┤ ├─────╄━━━━━╃─────┼─────┼─────┼─────┤
- * │SHIFT| Z │ X │ M │ C │ V │ │ K │ L │ SPC │ SPC │ / │ UP |
- * │ │ │ │ │ │ │ │ │ │ , │ . │ │RIGHT|
- * ├─────┼─────┼─────┼─────┼─────┼─────┤ ├─────┼─────┼─────┼─────┼─────┼─────┤
- * │ FN │CTRL │ OS │ ALT │LOWER│ │ │ │RAISE│ SS │CLIP │COPY │ DN │
- * │ │ │ │ │ │ │ │ │ │ │ │PASTE│LEFT │
- * └─────┴─────┴─────┴─────┴─────┴─────┘ └─────┴─────┴─────┴─────┴─────┴─────┘
- */
-
- [_WM] = LAYOUT_ortho_4x12_wrapper (
- RGB_TOG,
- _____________WORKMAN_412_001_L_____________, _____________WORKMAN_412_001_R_____________,
- _____________WORKMAN_412_002_L_____________, _____________WORKMAN_412_002_R_____________,
- _____________WORKMAN_412_003_L_____________, _____________WORKMAN_412_003_R_____________,
- _____________WORKMAN_412_004_L_____________, _____________WORKMAN_412_004_R_____________
- ),
-
- [_QW] = LAYOUT_ortho_4x12_wrapper (
- RGB_TOG,
- KC_TAB, _________________QWERTY_L1_________________, _________________QWERTY_R1_________________, KC_BSPC,
- KC_ESC, _________________QWERTY_L2_________________, _________________QWERTY_R2_________________, KC_QUOT,
- KC_LSFT, _________________QWERTY_L3_________________, _________________QWERTY_R3_________________, KC_ENT,
- _____________WORKMAN_412_004_L_____________, _____________WORKMAN_412_004_R_____________
- ),
-
-
-
-
- /* Lower
- * ┌─────┬─────┬─────┬─────┬─────┬─────┐ ┌─────┬─────┬─────┬─────┬─────┬─────┐
- * │ │ () │ [] │ /\ │ │ │ │ │ 7 │ 8 │ 9 │ │ │
- * │ │ │ │ │ │ │ │ │ │ │ │ │ │
- * ├─────┼─────┼─────┼─────╆━━━━━╅─────┤ ├─────╆━━━━━╅─────┼─────┼─────┼─────┤
- * │ │ @ # │ & % │ ┃ ┃ │ │ ┃ 4 ┃ 5 │ 6 │ │ │
- * │ │ │ │ ┃ ┃ │ │ ┃ ┃ │ │ │ │
- * ├─────┼─────┼─────┼─────╄━━━━━╃─────┤ ├─────╄━━━━━╃─────┼─────┼─────┼─────┤
- * │ │ │ │ │ │ │ │ 0 │ 1 │ 2 │ 3 │ │ UP │
- * │ │ │ │ │ │ │ │ │ │ 0 │ │ │RIGHT│
- * ├─────┼─────┼─────┼─────┼─────┼─────┤ ├─────┼─────┼─────┼─────┼─────┼─────┤
- * │ │ │ │ │LOWER│ │ │ │BPSC │ SPC │ . │ │ DN │
- * │ │ │ │ │ │ │ │ │ │ │ ENT │ │LEFT │
- * └─────┴─────┴─────┴─────┴─────┴─────┘ └─────┴─────┴─────┴─────┴─────┴─────┘
- */
- [_LOWER] = LAYOUT_ortho_4x12_wrapper (
- KC_MUTE,
- _______________LOWER_412_L1________________, _______________LOWER_412_R1________________,
- _______________LOWER_412_L2________________, _______________LOWER_412_R2________________,
- _______________LOWER_412_L3________________, _______________LOWER_412_R3________________,
- _______________LOWER_412_L4________________, _______________LOWER_412_R4________________
- ),
-
-
- /* RAISE
- * ┌─────┬─────┬─────┬─────┬─────┬─────┐ ┌─────┬─────┬─────┬─────┬─────┬─────┐
- * │BOOT │DEBUG│ │ │ │MAKE │ │ │ │ F7 │ F8 │ F9 │ F10 │
- * │ │ │ │ │ │ │ │ │ │ │ │ │ │
- * ├─────┼─────┼─────┼─────╆━━━━━╅─────┤ ├─────╆━━━━━╅─────┼─────┼─────┼─────┤
- * │ │ RGB | RGB | RGB ┃ RGB ┃ WM │ │ ┃ / \ ┃ F4 │ F5 │ F6 │ F11 │
- * │ │ TOG │ MOD │ HUI ┃ HUD ┃ │ │ ┃ ┃ │ │ │ │
- * ├─────┼─────┼─────┼─────╄━━━━━╃─────┤ ├─────╄━━━━━╃─────┼─────┼─────┼─────┤
- * │ │ RGB │ RGB │ RGB │ RGB │ QW │ │ │ _ │ F1 | F2 | F3 │ F12 │
- * │ │ SAI │ SAD │ VAI │ VAD │ │ │ │ - │ │ │ │ │
- * ├─────┼─────┼─────┼─────┼─────┼─────┤ ├─────┼─────┼─────┼─────┼─────┼─────┤
- * │ │ │ │ │ │ │ │ │RAISE│ │ │ │ │
- * │ │ │ │ │ │ │ │ │ │ │ │ │ │
- * └─────┴─────┴─────┴─────┴─────┴─────┘ └─────┴─────┴─────┴─────┴─────┴─────┘
- */
- [_RAISE] = LAYOUT_ortho_4x12_wrapper (
- KC_MUTE,
- _______________RAISE_412_L1________________, _______________RAISE_412_R1________________,
- _______________RAISE_412_L2________________, _______________RAISE_412_R2________________,
- _______________RAISE_412_L3________________, _______________RAISE_412_R3________________,
- _________________BLANK_6___________________, _________________BLANK_6___________________
- ),
-
-
- /* EXTRAS
- * ┌─────┬─────┬─────┬─────┬─────┬─────┐ ┌─────┬─────┬─────┬─────┬─────┬─────┐
- * │ │ ! │ │ │ │ │ │ │ /\ | [ | ] | ; │ │
- * │ │ │ │ │ │ │ │ │ │ │ │ │ │
- * ├─────┼─────┼─────┼─────╆━━━━━╅─────┤ ├─────╆━━━━━╅─────┼─────┼─────┼─────┤
- * │SHIFT│ | |EXTRA┃ ┃ │ │ ┃ @ # ┃ & % | | ' | │
- * │ │ │ │ ┃ ┃ │ │ ┃ ┃ │ │ │ │
- * ├─────┼─────┼─────┼─────╄━━━━━╃─────┤ ├─────╄━━━━━╃─────┼─────┼─────┼─────┤
- * │ │ │ │ │ │ │ │ │ │ , | . | ? │ │
- * │ │ │ │ │ │ │ │ │ │ │ │ │ │
- * ├─────┼─────┼─────┼─────┼─────┼─────┤ ├─────┼─────┼─────┼─────┼─────┼─────┤
- * │ │ │ │ │ │ │ │ │ │ │ │ │ │
- * │ │ │ │ │ │ │ │ │ │ │ │ │ │
- * └─────┴─────┴─────┴─────┴─────┴─────┘ └─────┴─────┴─────┴─────┴─────┴─────┘
- */
- [_EX] = LAYOUT_ortho_4x12_wrapper (
- KC_MUTE,
- ______________EXTRAS_412_L1________________, ______________EXTRAS_412_R1________________,
- ______________EXTRAS_412_L2________________, ______________EXTRAS_412_R2________________,
- ______________EXTRAS_412_L3________________, ______________EXTRAS_412_R3________________,
- ______________EXTRAS_412_L4________________, ______________EXTRAS_412_R4________________
- ),
-
-
-
- /* FUNCTION
- * ┌─────┬─────┬─────┬─────┬─────┬─────┐ ┌─────┬─────┬─────┬─────┬─────┬─────┐
- * │COPY │CLIP │ SS │ │ │ │ │ │ /\ │ UP │ │ │ DEL │
- * │PASTE│ │ │ │ │ │ │ │ │ │ │ │ │
- * ├─────┼─────┼─────┼─────╆━━━━━╅─────┤ ├─────╆━━━━━╅─────┼─────┼─────┼─────┤
- * │TAB │ M05 | M06 | M07 ┃ M08 ┃ │ │ ┃LEFT ┃DOWN │RIGHT│ │UP │
- * │SHIFT│ │ │ ┃ ┃ │ │ ┃ ┃ │ │ │RIGHT│
- * ├─────┼─────┼─────┼─────╄━━━━━╃─────┤ ├─────╄━━━━━╃─────┼─────┼─────┼─────┤
- * │ │ M01 │ M02 │ M03 │ M04 │ │ │ │ │ , | . | ? │DOWN │
- * │ │ │ │ │ │ │ │ │ │ │ │ │LEFT │
- * ├─────┼─────┼─────┼─────┼─────┼─────┤ ├─────┼─────┼─────┼─────┼─────┼─────┤
- * │ │RGB1 │RGB2 │RGB3 │RGB4 │ │ │ │ │ │ │ │ │
- * │ │ │ │ │ │ │ │ │ │ │ │ │ │
- * └─────┴─────┴─────┴─────┴─────┴─────┘ └─────┴─────┴─────┴─────┴─────┴─────┘
- */
- [_FN] = LAYOUT_ortho_4x12_wrapper (
- KC_MUTE,
- _____________FUNCTION_412_L1_______________, _____________FUNCTION_412_R1_______________,
- _____________FUNCTION_412_L2_______________, _____________FUNCTION_412_R2_______________,
- _____________FUNCTION_412_L3_______________, _____________FUNCTION_412_R3_______________,
- _____________FUNCTION_412_L4_______________, _____________FUNCTION_412_R4_______________
- ),
-
-
- /* SYMBOLS
- * ┌─────┬─────┬─────┬─────┬─────┬─────┐ ┌─────┬─────┬─────┬─────┬─────┬─────┐
- * │ | $ | ^ | < | > │ SYMB│ │ SYMB│ | | [ | ] | - | |
- * │ │ │ │ │ │ │ │ │ │ │ │ │ │
- * ├─────┼─────┼─────┼─────╆━━━━━╅─────┤ ├─────╆━━━━━╅─────┼─────┼─────┼─────┤
- * │ | % | : | ; ┃ + ┃ = │ │ ┃ ┃ ( | ) | _ | |
- * │ │ │ │ ┃ ┃ │ │ ┃ ┃ │ │ │ │
- * ├─────┼─────┼─────┼─────╄━━━━━╃─────┤ ├─────╄━━━━━╃─────┼─────┼─────┼─────┤
- * | | & | ' | " | * | # │ │ ! | ? | / | \ | @ | |
- * │ │ │ │ │ │ │ │ │ │ │ │ │ │
- * ├─────┼─────┼─────┼─────┼─────┼─────┤ ├─────┼─────┼─────┼─────┼─────┼─────┤
- * │ │ │ │ │ │ │ │ │ │ │ │ │ │
- * │ │ │ │ │ │ │ │ │ │ │ │ │ │
- * └─────┴─────┴─────┴─────┴─────┴─────┘ └─────┴─────┴─────┴─────┴─────┴─────┘
- */
-
- [_SYMB] = LAYOUT_ortho_4x12_wrapper (
- KC_MUTE,
- _______, _____________SYMBOLS_310_L1________________, _____________SYMBOLS_310_R1________________, _______,
- _______, _____________SYMBOLS_310_L2________________, _____________SYMBOLS_310_R2________________, _______,
- _______, _____________SYMBOLS_310_L3________________, _____________SYMBOLS_310_R3________________, _______,
- _________________BLANK_6___________________, _________________BLANK_6___________________
- )
-
-};
-
-#ifndef NUM_DIRECTIONS
-# define NUM_DIRECTIONS 2
-#endif
-
-#if defined(ENCODER_MAP_ENABLE) && defined(KEYBOARD_1upkeyboards_pi40_mit_v1_0)
-const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
- [_WM] = { ENCODER_CCW_CW(LCTL(KC_V), LCTL(KC_C)) },
- [_QW] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
- [_LOWER] = { ENCODER_CCW_CW(____, ____) },
- [_RAISE] = { ENCODER_CCW_CW(____, ____) },
- [_EX] = { ENCODER_CCW_CW(____, ____) },
- [_FN] = { ENCODER_CCW_CW(RGB_MOD, RGB_RMOD) },
- [_SYMB] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) }
-};
-#endif
-
-
-#ifdef OLED_ENABLE
-bool oled_task_user(void) {
- // Host Keyboard Layer Status
- oled_write_P(PSTR("Layer: "), false);
-
- switch (get_highest_layer(layer_state)) {
- case _LOWER:
- oled_write_P(PSTR("LOWER"), false);
- break;
- case _RAISE:
- oled_write_P(PSTR("RAISE"), false);
- break;
- case _EX:
- oled_write_P(PSTR("EXTRA"), false);
- break;
- case _FN:
- oled_write_P(PSTR("FUNCTION"), false);
- break;
- case _WM:
- oled_write_P(PSTR("WORKMAN"), false);
- break;
- case _SYMB:
- oled_write_P(PSTR("SYMBOLS"), false);
- break;
- default:
- // Or use the write_ln shortcut over adding '\n' to the end of your string
- oled_write_ln_P(PSTR("HOME"), false);
- }
-
-// Host Keyboard LED Status
- // led_t led_state = host_keyboard_led_state();
- // oled_write_P(led_state.num_lock ? PSTR("NUM ") : PSTR(" "), false);
- // oled_write_P(led_state.caps_lock ? PSTR("CAP ") : PSTR(" "), false);
- // oled_write_P(led_state.scroll_lock ? PSTR("SCR ") : PSTR(" "), false);
-
- return false;
-}
-#endif
-
-
-bool get_hold_on_other_key_press(uint16_t keycode, keyrecord_t *record) {
- switch (keycode) {
- case SFT_T(KC_A):
- // Do not force the mod-tap key press to be handled as a modifier
- // if any other key was pressed while the mod-tap key is held down.
- return false;
- case TEX:
- return false;
- case CTRLX:
- return false;
- case FNZ:
- return false;
- case MGUI:
- return false;
- case VLOWER:
- return false;
- case KRAISE:
- return false;
- default:
- // Force the dual-role key press to be handled as a modifier if any
- // other key was pressed while the mod-tap key is held down.
- return true;
- }
-}
-
-#ifdef AUDIO_ENABLE
-float leader_start_song[][2] = SONG(ONE_UP_SOUND);
-float leader_succeed_song[][2] = SONG(ALL_STAR);
-float leader_fail_song[][2] = SONG(RICK_ROLL);
-#endif
-
-void matrix_scan_user(void);
-
-void leader_start_user(void) {
-#ifdef AUDIO_ENABLE
- PLAY_SONG(leader_start_song);
-#endif
-}
-
-bool did_leader_succeed;
-
-void leader_end_user(void) {
- did_leader_succeed = false;
-
- if (leader_sequence_one_key(KC_E)) {
- SEND_STRING(SS_LCTL(SS_LSFT("t")));
- did_leader_succeed = true;
- } else if (leader_sequence_two_keys(KC_E, KC_D)) {
- SEND_STRING(SS_LGUI("r") "cmd\n" SS_LCTL("c"));
- did_leader_succeed = true;
- } else if (leader_sequence_two_keys(KC_A, KC_T)) {
- SEND_STRING("@guidehouse.com");
- did_leader_succeed = true;
- }
-
-
-#ifdef AUDIO_ENABLE
- if (did_leader_succeed) {
- PLAY_SONG(leader_succeed_song);
- } else {
- PLAY_SONG(leader_fail_song);
- }
-#endif
-}
\ No newline at end of file
diff --git a/keyboards/1upkeyboards/pi40/mit_v1_0/keymaps/miketronic/rules.mk b/keyboards/1upkeyboards/pi40/mit_v1_0/keymaps/miketronic/rules.mk
deleted file mode 100644
index b446776377ae..000000000000
--- a/keyboards/1upkeyboards/pi40/mit_v1_0/keymaps/miketronic/rules.mk
+++ /dev/null
@@ -1,22 +0,0 @@
-# Common feature for all keyboards
-BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite
-EXTRAKEY_ENABLE = yes # Audio control and System control
-TAP_DANCE_ENABLE = yes # Tap Dance keys
-NKRO_ENABLE = yes # Enable N-Key Rollover
-MACROS_ENABLED = yes
-
-
-# Keyboard specific
-AUTO_SHIFT_ENABLE = no
-CONSOLE_ENABLE = no # Console for debug
-COMMAND_ENABLE = no # Commands for debug and configuration
-BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
-RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
-AUDIO_ENABLE = no # Audio output
-MOUSEKEY_ENABLE = no # Mouse keys
-
-LEADER_ENABLE = yes
-RGB_MATRIX_ENABLE = yes
-ENCODER_ENABLE = yes
-ENCODER_MAP_ENABLE = yes
-OLED_ENABLE = yes
diff --git a/keyboards/1upkeyboards/pi60/config.h b/keyboards/1upkeyboards/pi60/config.h
index 8940acb0041f..6bbbb2293c0b 100644
--- a/keyboards/1upkeyboards/pi60/config.h
+++ b/keyboards/1upkeyboards/pi60/config.h
@@ -3,8 +3,6 @@
#pragma once
-#define DYNAMIC_KEYMAP_LAYER_COUNT 10
-
#define RGB_MATRIX_LED_COUNT 21
//#define RGB_MATRIX_FRAMEBUFFER_EFFECTS
//#define RGB_MATRIX_KEYPRESSES
diff --git a/keyboards/1upkeyboards/pi60/info.json b/keyboards/1upkeyboards/pi60/info.json
index 1f8bdb4592fe..4d0d21ea250a 100644
--- a/keyboards/1upkeyboards/pi60/info.json
+++ b/keyboards/1upkeyboards/pi60/info.json
@@ -11,6 +11,9 @@
"vid": "0x6F75"
},
"diode_direction": "COL2ROW",
+ "dynamic_keymap": {
+ "layer_count": 10
+ },
"features": {
"audio": false,
"backlight": false,
@@ -66,8 +69,19 @@
{"flags": 2, "x": 20, "y": 13}
]
},
+ "community_layouts": [
+ "60_ansi",
+ "60_ansi_split_bs_rshift",
+ "60_ansi_tsangan",
+ "60_tsangan_hhkb",
+ "60_hhkb",
+ "60_ansi_arrow",
+ "60_iso",
+ "60_iso_split_bs_rshift",
+ "60_iso_tsangan"
+ ],
"layouts": {
- "LAYOUT_60_ansi": {
+ "LAYOUT_all": {
"layout": [
{"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
{"label": "1", "matrix": [0, 1], "x": 1, "y": 0},
@@ -138,6 +152,777 @@
{"label": "Menu", "matrix": [4, 13], "x": 13, "y": 4},
{"label": "RCtrl", "matrix": [4, 14], "x": 14, "y": 4}
]
+ },
+ "LAYOUT_60_ansi": {
+ "layout": [
+ {"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
+ {"label": "1", "matrix": [0, 1], "x": 1, "y": 0},
+ {"label": "2", "matrix": [0, 2], "x": 2, "y": 0},
+ {"label": "3", "matrix": [0, 3], "x": 3, "y": 0},
+ {"label": "4", "matrix": [0, 4], "x": 4, "y": 0},
+ {"label": "5", "matrix": [0, 5], "x": 5, "y": 0},
+ {"label": "6", "matrix": [0, 6], "x": 6, "y": 0},
+ {"label": "7", "matrix": [0, 7], "x": 7, "y": 0},
+ {"label": "8", "matrix": [0, 8], "x": 8, "y": 0},
+ {"label": "9", "matrix": [0, 9], "x": 9, "y": 0},
+ {"label": "0", "matrix": [0, 10], "x": 10, "y": 0},
+ {"label": "-", "matrix": [0, 11], "x": 11, "y": 0},
+ {"label": "=", "matrix": [0, 12], "x": 12, "y": 0},
+ {"label": "Backspace", "matrix": [0, 13], "x": 13, "y": 0, "w": 2},
+
+ {"label": "Tab", "matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"label": "Q", "matrix": [1, 1], "x": 1.5, "y": 1},
+ {"label": "W", "matrix": [1, 2], "x": 2.5, "y": 1},
+ {"label": "E", "matrix": [1, 3], "x": 3.5, "y": 1},
+ {"label": "R", "matrix": [1, 4], "x": 4.5, "y": 1},
+ {"label": "T", "matrix": [1, 5], "x": 5.5, "y": 1},
+ {"label": "Y", "matrix": [1, 6], "x": 6.5, "y": 1},
+ {"label": "U", "matrix": [1, 7], "x": 7.5, "y": 1},
+ {"label": "I", "matrix": [1, 8], "x": 8.5, "y": 1},
+ {"label": "O", "matrix": [1, 9], "x": 9.5, "y": 1},
+ {"label": "P", "matrix": [1, 10], "x": 10.5, "y": 1},
+ {"label": "[", "matrix": [1, 11], "x": 11.5, "y": 1},
+ {"label": "]", "matrix": [1, 12], "x": 12.5, "y": 1},
+ {"label": "|", "matrix": [1, 13], "x": 13.5, "y": 1, "w": 1.5},
+
+ {"label": "Caps", "matrix": [2, 15], "x": 0, "y": 2, "w": 1.75},
+ {"label": "A", "matrix": [2, 1], "x": 1.75, "y": 2},
+ {"label": "S", "matrix": [2, 2], "x": 2.75, "y": 2},
+ {"label": "D", "matrix": [2, 3], "x": 3.75, "y": 2},
+ {"label": "F", "matrix": [2, 4], "x": 4.75, "y": 2},
+ {"label": "G", "matrix": [2, 5], "x": 5.75, "y": 2},
+ {"label": "H", "matrix": [2, 6], "x": 6.75, "y": 2},
+ {"label": "J", "matrix": [2, 7], "x": 7.75, "y": 2},
+ {"label": "K", "matrix": [2, 8], "x": 8.75, "y": 2},
+ {"label": "L", "matrix": [2, 9], "x": 9.75, "y": 2},
+ {"label": ";", "matrix": [2, 10], "x": 10.75, "y": 2},
+ {"label": "'", "matrix": [2, 11], "x": 11.75, "y": 2},
+ {"label": "Enter", "matrix": [2, 13], "x": 12.75, "y": 2, "w": 2.25},
+
+ {"label": "LShift", "matrix": [3, 15], "x": 0, "y": 3, "w": 2.25},
+ {"label": "Z", "matrix": [3, 2], "x": 2.25, "y": 3},
+ {"label": "X", "matrix": [3, 3], "x": 3.25, "y": 3},
+ {"label": "C", "matrix": [3, 4], "x": 4.25, "y": 3},
+ {"label": "V", "matrix": [3, 5], "x": 5.25, "y": 3},
+ {"label": "B", "matrix": [3, 6], "x": 6.25, "y": 3},
+ {"label": "N", "matrix": [3, 7], "x": 7.25, "y": 3},
+ {"label": "M", "matrix": [3, 8], "x": 8.25, "y": 3},
+ {"label": ",", "matrix": [3, 9], "x": 9.25, "y": 3},
+ {"label": ".", "matrix": [3, 10], "x": 10.25, "y": 3},
+ {"label": "/", "matrix": [3, 11], "x": 11.25, "y": 3},
+ {"label": "RShift", "matrix": [3, 12], "x": 12.25, "y": 3, "w": 2.75},
+
+ {"label": "LCtrl", "matrix": [4, 15], "x": 0, "y": 4, "w": 1.25},
+ {"label": "LGui", "matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.25},
+ {"label": "LAlt", "matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.25},
+ {"label": "Space", "matrix": [4, 6], "x": 3.75, "y": 4, "w": 6.25},
+ {"label": "RAlt", "matrix": [4, 10], "x": 10, "y": 4, "w": 1.25},
+ {"label": "FN", "matrix": [4, 11], "x": 11.25, "y": 4, "w": 1.25},
+ {"label": "Menu", "matrix": [4, 13], "x": 12.5, "y": 4, "w": 1.25},
+ {"label": "RCtrl", "matrix": [4, 14], "x": 13.75, "y": 4, "w": 1.25}
+ ]
+ },
+ "LAYOUT_60_ansi_split_bs_rshift": {
+ "layout": [
+ {"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
+ {"label": "1", "matrix": [0, 1], "x": 1, "y": 0},
+ {"label": "2", "matrix": [0, 2], "x": 2, "y": 0},
+ {"label": "3", "matrix": [0, 3], "x": 3, "y": 0},
+ {"label": "4", "matrix": [0, 4], "x": 4, "y": 0},
+ {"label": "5", "matrix": [0, 5], "x": 5, "y": 0},
+ {"label": "6", "matrix": [0, 6], "x": 6, "y": 0},
+ {"label": "7", "matrix": [0, 7], "x": 7, "y": 0},
+ {"label": "8", "matrix": [0, 8], "x": 8, "y": 0},
+ {"label": "9", "matrix": [0, 9], "x": 9, "y": 0},
+ {"label": "0", "matrix": [0, 10], "x": 10, "y": 0},
+ {"label": "-", "matrix": [0, 11], "x": 11, "y": 0},
+ {"label": "=", "matrix": [0, 12], "x": 12, "y": 0},
+ {"label": "BS", "matrix": [0, 13], "x": 13, "y": 0},
+ {"label": "~", "matrix": [0, 14], "x": 14, "y": 0},
+
+ {"label": "Tab", "matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"label": "Q", "matrix": [1, 1], "x": 1.5, "y": 1},
+ {"label": "W", "matrix": [1, 2], "x": 2.5, "y": 1},
+ {"label": "E", "matrix": [1, 3], "x": 3.5, "y": 1},
+ {"label": "R", "matrix": [1, 4], "x": 4.5, "y": 1},
+ {"label": "T", "matrix": [1, 5], "x": 5.5, "y": 1},
+ {"label": "Y", "matrix": [1, 6], "x": 6.5, "y": 1},
+ {"label": "U", "matrix": [1, 7], "x": 7.5, "y": 1},
+ {"label": "I", "matrix": [1, 8], "x": 8.5, "y": 1},
+ {"label": "O", "matrix": [1, 9], "x": 9.5, "y": 1},
+ {"label": "P", "matrix": [1, 10], "x": 10.5, "y": 1},
+ {"label": "[", "matrix": [1, 11], "x": 11.5, "y": 1},
+ {"label": "]", "matrix": [1, 12], "x": 12.5, "y": 1},
+ {"label": "|", "matrix": [1, 13], "x": 13.5, "y": 1, "w": 1.5},
+
+ {"label": "Caps", "matrix": [2, 15], "x": 0, "y": 2, "w": 1.75},
+ {"label": "A", "matrix": [2, 1], "x": 1.75, "y": 2},
+ {"label": "S", "matrix": [2, 2], "x": 2.75, "y": 2},
+ {"label": "D", "matrix": [2, 3], "x": 3.75, "y": 2},
+ {"label": "F", "matrix": [2, 4], "x": 4.75, "y": 2},
+ {"label": "G", "matrix": [2, 5], "x": 5.75, "y": 2},
+ {"label": "H", "matrix": [2, 6], "x": 6.75, "y": 2},
+ {"label": "J", "matrix": [2, 7], "x": 7.75, "y": 2},
+ {"label": "K", "matrix": [2, 8], "x": 8.75, "y": 2},
+ {"label": "L", "matrix": [2, 9], "x": 9.75, "y": 2},
+ {"label": ";", "matrix": [2, 10], "x": 10.75, "y": 2},
+ {"label": "'", "matrix": [2, 11], "x": 11.75, "y": 2},
+ {"label": "Enter", "matrix": [2, 13], "x": 12.75, "y": 2, "w": 2.25},
+
+ {"label": "LShift", "matrix": [3, 15], "x": 0, "y": 3, "w": 2.25},
+ {"label": "Z", "matrix": [3, 2], "x": 2.25, "y": 3},
+ {"label": "X", "matrix": [3, 3], "x": 3.25, "y": 3},
+ {"label": "C", "matrix": [3, 4], "x": 4.25, "y": 3},
+ {"label": "V", "matrix": [3, 5], "x": 5.25, "y": 3},
+ {"label": "B", "matrix": [3, 6], "x": 6.25, "y": 3},
+ {"label": "N", "matrix": [3, 7], "x": 7.25, "y": 3},
+ {"label": "M", "matrix": [3, 8], "x": 8.25, "y": 3},
+ {"label": ",", "matrix": [3, 9], "x": 9.25, "y": 3},
+ {"label": ".", "matrix": [3, 10], "x": 10.25, "y": 3},
+ {"label": "/", "matrix": [3, 11], "x": 11.25, "y": 3},
+ {"label": "RShift", "matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75},
+ {"label": "FN", "matrix": [3, 14], "x": 14, "y": 3},
+
+ {"label": "LCtrl", "matrix": [4, 15], "x": 0, "y": 4, "w": 1.25},
+ {"label": "LGui", "matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.25},
+ {"label": "LAlt", "matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.25},
+ {"label": "Space", "matrix": [4, 6], "x": 3.75, "y": 4, "w": 6.25},
+ {"label": "RAlt", "matrix": [4, 10], "x": 10, "y": 4, "w": 1.25},
+ {"label": "FN", "matrix": [4, 11], "x": 11.25, "y": 4, "w": 1.25},
+ {"label": "Menu", "matrix": [4, 13], "x": 12.5, "y": 4, "w": 1.25},
+ {"label": "RCtrl", "matrix": [4, 14], "x": 13.75, "y": 4, "w": 1.25}
+ ]
+ },
+ "LAYOUT_60_ansi_tsangan": {
+ "layout": [
+ {"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
+ {"label": "1", "matrix": [0, 1], "x": 1, "y": 0},
+ {"label": "2", "matrix": [0, 2], "x": 2, "y": 0},
+ {"label": "3", "matrix": [0, 3], "x": 3, "y": 0},
+ {"label": "4", "matrix": [0, 4], "x": 4, "y": 0},
+ {"label": "5", "matrix": [0, 5], "x": 5, "y": 0},
+ {"label": "6", "matrix": [0, 6], "x": 6, "y": 0},
+ {"label": "7", "matrix": [0, 7], "x": 7, "y": 0},
+ {"label": "8", "matrix": [0, 8], "x": 8, "y": 0},
+ {"label": "9", "matrix": [0, 9], "x": 9, "y": 0},
+ {"label": "0", "matrix": [0, 10], "x": 10, "y": 0},
+ {"label": "-", "matrix": [0, 11], "x": 11, "y": 0},
+ {"label": "=", "matrix": [0, 12], "x": 12, "y": 0},
+ {"label": "Backspace", "matrix": [0, 13], "x": 13, "y": 0, "w": 2},
+
+ {"label": "Tab", "matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"label": "Q", "matrix": [1, 1], "x": 1.5, "y": 1},
+ {"label": "W", "matrix": [1, 2], "x": 2.5, "y": 1},
+ {"label": "E", "matrix": [1, 3], "x": 3.5, "y": 1},
+ {"label": "R", "matrix": [1, 4], "x": 4.5, "y": 1},
+ {"label": "T", "matrix": [1, 5], "x": 5.5, "y": 1},
+ {"label": "Y", "matrix": [1, 6], "x": 6.5, "y": 1},
+ {"label": "U", "matrix": [1, 7], "x": 7.5, "y": 1},
+ {"label": "I", "matrix": [1, 8], "x": 8.5, "y": 1},
+ {"label": "O", "matrix": [1, 9], "x": 9.5, "y": 1},
+ {"label": "P", "matrix": [1, 10], "x": 10.5, "y": 1},
+ {"label": "[", "matrix": [1, 11], "x": 11.5, "y": 1},
+ {"label": "]", "matrix": [1, 12], "x": 12.5, "y": 1},
+ {"label": "|", "matrix": [1, 13], "x": 13.5, "y": 1, "w": 1.5},
+
+ {"label": "Caps", "matrix": [2, 15], "x": 0, "y": 2, "w": 1.75},
+ {"label": "A", "matrix": [2, 1], "x": 1.75, "y": 2},
+ {"label": "S", "matrix": [2, 2], "x": 2.75, "y": 2},
+ {"label": "D", "matrix": [2, 3], "x": 3.75, "y": 2},
+ {"label": "F", "matrix": [2, 4], "x": 4.75, "y": 2},
+ {"label": "G", "matrix": [2, 5], "x": 5.75, "y": 2},
+ {"label": "H", "matrix": [2, 6], "x": 6.75, "y": 2},
+ {"label": "J", "matrix": [2, 7], "x": 7.75, "y": 2},
+ {"label": "K", "matrix": [2, 8], "x": 8.75, "y": 2},
+ {"label": "L", "matrix": [2, 9], "x": 9.75, "y": 2},
+ {"label": ";", "matrix": [2, 10], "x": 10.75, "y": 2},
+ {"label": "'", "matrix": [2, 11], "x": 11.75, "y": 2},
+ {"label": "Enter", "matrix": [2, 13], "x": 12.75, "y": 2, "w": 2.25},
+
+ {"label": "LShift", "matrix": [3, 15], "x": 0, "y": 3, "w": 2.25},
+ {"label": "Z", "matrix": [3, 2], "x": 2.25, "y": 3},
+ {"label": "X", "matrix": [3, 3], "x": 3.25, "y": 3},
+ {"label": "C", "matrix": [3, 4], "x": 4.25, "y": 3},
+ {"label": "V", "matrix": [3, 5], "x": 5.25, "y": 3},
+ {"label": "B", "matrix": [3, 6], "x": 6.25, "y": 3},
+ {"label": "N", "matrix": [3, 7], "x": 7.25, "y": 3},
+ {"label": "M", "matrix": [3, 8], "x": 8.25, "y": 3},
+ {"label": ",", "matrix": [3, 9], "x": 9.25, "y": 3},
+ {"label": ".", "matrix": [3, 10], "x": 10.25, "y": 3},
+ {"label": "/", "matrix": [3, 11], "x": 11.25, "y": 3},
+ {"label": "RShift", "matrix": [3, 12], "x": 12.25, "y": 3, "w": 2.75},
+
+ {"label": "LCtrl", "matrix": [4, 15], "x": 0, "y": 4, "w": 1.5},
+ {"label": "LGui", "matrix": [4, 1], "x": 1.5, "y": 4},
+ {"label": "LAlt", "matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.5},
+ {"label": "Space", "matrix": [4, 6], "x": 4, "y": 4, "w": 7},
+ {"label": "FN", "matrix": [4, 11], "x": 11, "y": 4, "w": 1.5},
+ {"label": "Menu", "matrix": [4, 13], "x": 12.5, "y": 4},
+ {"label": "RCtrl", "matrix": [4, 14], "x": 13.5, "y": 4, "w": 1.5}
+ ]
+ },
+ "LAYOUT_60_tsangan_hhkb": {
+ "layout": [
+ {"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
+ {"label": "1", "matrix": [0, 1], "x": 1, "y": 0},
+ {"label": "2", "matrix": [0, 2], "x": 2, "y": 0},
+ {"label": "3", "matrix": [0, 3], "x": 3, "y": 0},
+ {"label": "4", "matrix": [0, 4], "x": 4, "y": 0},
+ {"label": "5", "matrix": [0, 5], "x": 5, "y": 0},
+ {"label": "6", "matrix": [0, 6], "x": 6, "y": 0},
+ {"label": "7", "matrix": [0, 7], "x": 7, "y": 0},
+ {"label": "8", "matrix": [0, 8], "x": 8, "y": 0},
+ {"label": "9", "matrix": [0, 9], "x": 9, "y": 0},
+ {"label": "0", "matrix": [0, 10], "x": 10, "y": 0},
+ {"label": "-", "matrix": [0, 11], "x": 11, "y": 0},
+ {"label": "=", "matrix": [0, 12], "x": 12, "y": 0},
+ {"label": "BS", "matrix": [0, 13], "x": 13, "y": 0},
+ {"label": "~", "matrix": [0, 14], "x": 14, "y": 0},
+
+ {"label": "Tab", "matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"label": "Q", "matrix": [1, 1], "x": 1.5, "y": 1},
+ {"label": "W", "matrix": [1, 2], "x": 2.5, "y": 1},
+ {"label": "E", "matrix": [1, 3], "x": 3.5, "y": 1},
+ {"label": "R", "matrix": [1, 4], "x": 4.5, "y": 1},
+ {"label": "T", "matrix": [1, 5], "x": 5.5, "y": 1},
+ {"label": "Y", "matrix": [1, 6], "x": 6.5, "y": 1},
+ {"label": "U", "matrix": [1, 7], "x": 7.5, "y": 1},
+ {"label": "I", "matrix": [1, 8], "x": 8.5, "y": 1},
+ {"label": "O", "matrix": [1, 9], "x": 9.5, "y": 1},
+ {"label": "P", "matrix": [1, 10], "x": 10.5, "y": 1},
+ {"label": "[", "matrix": [1, 11], "x": 11.5, "y": 1},
+ {"label": "]", "matrix": [1, 12], "x": 12.5, "y": 1},
+ {"label": "|", "matrix": [1, 13], "x": 13.5, "y": 1, "w": 1.5},
+
+ {"label": "Caps", "matrix": [2, 15], "x": 0, "y": 2, "w": 1.75},
+ {"label": "A", "matrix": [2, 1], "x": 1.75, "y": 2},
+ {"label": "S", "matrix": [2, 2], "x": 2.75, "y": 2},
+ {"label": "D", "matrix": [2, 3], "x": 3.75, "y": 2},
+ {"label": "F", "matrix": [2, 4], "x": 4.75, "y": 2},
+ {"label": "G", "matrix": [2, 5], "x": 5.75, "y": 2},
+ {"label": "H", "matrix": [2, 6], "x": 6.75, "y": 2},
+ {"label": "J", "matrix": [2, 7], "x": 7.75, "y": 2},
+ {"label": "K", "matrix": [2, 8], "x": 8.75, "y": 2},
+ {"label": "L", "matrix": [2, 9], "x": 9.75, "y": 2},
+ {"label": ";", "matrix": [2, 10], "x": 10.75, "y": 2},
+ {"label": "'", "matrix": [2, 11], "x": 11.75, "y": 2},
+ {"label": "Enter", "matrix": [2, 13], "x": 12.75, "y": 2, "w": 2.25},
+
+ {"label": "LShift", "matrix": [3, 15], "x": 0, "y": 3, "w": 2.25},
+ {"label": "Z", "matrix": [3, 2], "x": 2.25, "y": 3},
+ {"label": "X", "matrix": [3, 3], "x": 3.25, "y": 3},
+ {"label": "C", "matrix": [3, 4], "x": 4.25, "y": 3},
+ {"label": "V", "matrix": [3, 5], "x": 5.25, "y": 3},
+ {"label": "B", "matrix": [3, 6], "x": 6.25, "y": 3},
+ {"label": "N", "matrix": [3, 7], "x": 7.25, "y": 3},
+ {"label": "M", "matrix": [3, 8], "x": 8.25, "y": 3},
+ {"label": ",", "matrix": [3, 9], "x": 9.25, "y": 3},
+ {"label": ".", "matrix": [3, 10], "x": 10.25, "y": 3},
+ {"label": "/", "matrix": [3, 11], "x": 11.25, "y": 3},
+ {"label": "RShift", "matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75},
+ {"label": "FN", "matrix": [3, 14], "x": 14, "y": 3},
+
+ {"label": "LCtrl", "matrix": [4, 15], "x": 0, "y": 4, "w": 1.5},
+ {"label": "LGui", "matrix": [4, 1], "x": 1.5, "y": 4},
+ {"label": "LAlt", "matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.5},
+ {"label": "Space", "matrix": [4, 6], "x": 4, "y": 4, "w": 7},
+ {"label": "FN", "matrix": [4, 11], "x": 11, "y": 4, "w": 1.5},
+ {"label": "Menu", "matrix": [4, 13], "x": 12.5, "y": 4},
+ {"label": "RCtrl", "matrix": [4, 14], "x": 13.5, "y": 4, "w": 1.5}
+ ]
+ },
+ "LAYOUT_60_hhkb": {
+ "layout": [
+ {"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
+ {"label": "1", "matrix": [0, 1], "x": 1, "y": 0},
+ {"label": "2", "matrix": [0, 2], "x": 2, "y": 0},
+ {"label": "3", "matrix": [0, 3], "x": 3, "y": 0},
+ {"label": "4", "matrix": [0, 4], "x": 4, "y": 0},
+ {"label": "5", "matrix": [0, 5], "x": 5, "y": 0},
+ {"label": "6", "matrix": [0, 6], "x": 6, "y": 0},
+ {"label": "7", "matrix": [0, 7], "x": 7, "y": 0},
+ {"label": "8", "matrix": [0, 8], "x": 8, "y": 0},
+ {"label": "9", "matrix": [0, 9], "x": 9, "y": 0},
+ {"label": "0", "matrix": [0, 10], "x": 10, "y": 0},
+ {"label": "-", "matrix": [0, 11], "x": 11, "y": 0},
+ {"label": "=", "matrix": [0, 12], "x": 12, "y": 0},
+ {"label": "BS", "matrix": [0, 13], "x": 13, "y": 0},
+ {"label": "~", "matrix": [0, 14], "x": 14, "y": 0},
+
+ {"label": "Tab", "matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"label": "Q", "matrix": [1, 1], "x": 1.5, "y": 1},
+ {"label": "W", "matrix": [1, 2], "x": 2.5, "y": 1},
+ {"label": "E", "matrix": [1, 3], "x": 3.5, "y": 1},
+ {"label": "R", "matrix": [1, 4], "x": 4.5, "y": 1},
+ {"label": "T", "matrix": [1, 5], "x": 5.5, "y": 1},
+ {"label": "Y", "matrix": [1, 6], "x": 6.5, "y": 1},
+ {"label": "U", "matrix": [1, 7], "x": 7.5, "y": 1},
+ {"label": "I", "matrix": [1, 8], "x": 8.5, "y": 1},
+ {"label": "O", "matrix": [1, 9], "x": 9.5, "y": 1},
+ {"label": "P", "matrix": [1, 10], "x": 10.5, "y": 1},
+ {"label": "[", "matrix": [1, 11], "x": 11.5, "y": 1},
+ {"label": "]", "matrix": [1, 12], "x": 12.5, "y": 1},
+ {"label": "|", "matrix": [1, 13], "x": 13.5, "y": 1, "w": 1.5},
+
+ {"label": "Caps", "matrix": [2, 15], "x": 0, "y": 2, "w": 1.75},
+ {"label": "A", "matrix": [2, 1], "x": 1.75, "y": 2},
+ {"label": "S", "matrix": [2, 2], "x": 2.75, "y": 2},
+ {"label": "D", "matrix": [2, 3], "x": 3.75, "y": 2},
+ {"label": "F", "matrix": [2, 4], "x": 4.75, "y": 2},
+ {"label": "G", "matrix": [2, 5], "x": 5.75, "y": 2},
+ {"label": "H", "matrix": [2, 6], "x": 6.75, "y": 2},
+ {"label": "J", "matrix": [2, 7], "x": 7.75, "y": 2},
+ {"label": "K", "matrix": [2, 8], "x": 8.75, "y": 2},
+ {"label": "L", "matrix": [2, 9], "x": 9.75, "y": 2},
+ {"label": ";", "matrix": [2, 10], "x": 10.75, "y": 2},
+ {"label": "'", "matrix": [2, 11], "x": 11.75, "y": 2},
+ {"label": "Enter", "matrix": [2, 13], "x": 12.75, "y": 2, "w": 2.25},
+
+ {"label": "LShift", "matrix": [3, 15], "x": 0, "y": 3, "w": 2.25},
+ {"label": "Z", "matrix": [3, 2], "x": 2.25, "y": 3},
+ {"label": "X", "matrix": [3, 3], "x": 3.25, "y": 3},
+ {"label": "C", "matrix": [3, 4], "x": 4.25, "y": 3},
+ {"label": "V", "matrix": [3, 5], "x": 5.25, "y": 3},
+ {"label": "B", "matrix": [3, 6], "x": 6.25, "y": 3},
+ {"label": "N", "matrix": [3, 7], "x": 7.25, "y": 3},
+ {"label": "M", "matrix": [3, 8], "x": 8.25, "y": 3},
+ {"label": ",", "matrix": [3, 9], "x": 9.25, "y": 3},
+ {"label": ".", "matrix": [3, 10], "x": 10.25, "y": 3},
+ {"label": "/", "matrix": [3, 11], "x": 11.25, "y": 3},
+ {"label": "RShift", "matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75},
+ {"label": "FN", "matrix": [3, 14], "x": 14, "y": 3},
+
+ {"label": "LGui", "matrix": [4, 1], "x": 1.5, "y": 4},
+ {"label": "LAlt", "matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.5},
+ {"label": "Space", "matrix": [4, 6], "x": 4, "y": 4, "w": 7},
+ {"label": "FN", "matrix": [4, 11], "x": 11, "y": 4, "w": 1.5},
+ {"label": "Menu", "matrix": [4, 13], "x": 12.5, "y": 4}
+ ]
+ },
+ "LAYOUT_60_ansi_arrow": {
+ "layout": [
+ {"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
+ {"label": "1", "matrix": [0, 1], "x": 1, "y": 0},
+ {"label": "2", "matrix": [0, 2], "x": 2, "y": 0},
+ {"label": "3", "matrix": [0, 3], "x": 3, "y": 0},
+ {"label": "4", "matrix": [0, 4], "x": 4, "y": 0},
+ {"label": "5", "matrix": [0, 5], "x": 5, "y": 0},
+ {"label": "6", "matrix": [0, 6], "x": 6, "y": 0},
+ {"label": "7", "matrix": [0, 7], "x": 7, "y": 0},
+ {"label": "8", "matrix": [0, 8], "x": 8, "y": 0},
+ {"label": "9", "matrix": [0, 9], "x": 9, "y": 0},
+ {"label": "0", "matrix": [0, 10], "x": 10, "y": 0},
+ {"label": "-", "matrix": [0, 11], "x": 11, "y": 0},
+ {"label": "=", "matrix": [0, 12], "x": 12, "y": 0},
+ {"label": "Backspace", "matrix": [0, 13], "x": 13, "y": 0, "w": 2},
+
+ {"label": "Tab", "matrix": [1, 0], "w": 1.5, "x": 0, "y": 1},
+ {"label": "Q", "matrix": [1, 1], "x": 1.5, "y": 1},
+ {"label": "W", "matrix": [1, 2], "x": 2.5, "y": 1},
+ {"label": "E", "matrix": [1, 3], "x": 3.5, "y": 1},
+ {"label": "R", "matrix": [1, 4], "x": 4.5, "y": 1},
+ {"label": "T", "matrix": [1, 5], "x": 5.5, "y": 1},
+ {"label": "Y", "matrix": [1, 6], "x": 6.5, "y": 1},
+ {"label": "U", "matrix": [1, 7], "x": 7.5, "y": 1},
+ {"label": "I", "matrix": [1, 8], "x": 8.5, "y": 1},
+ {"label": "O", "matrix": [1, 9], "x": 9.5, "y": 1},
+ {"label": "P", "matrix": [1, 10], "x": 10.5, "y": 1},
+ {"label": "[", "matrix": [1, 11], "x": 11.5, "y": 1},
+ {"label": "]", "matrix": [1, 12], "x": 12.5, "y": 1},
+ {"label": "|", "matrix": [1, 13], "w": 1.5, "x": 13.5, "y": 1},
+
+ {"label": "Caps", "matrix": [2, 15], "w": 1.75, "x": 0, "y": 2},
+ {"label": "A", "matrix": [2, 1], "x": 1.75, "y": 2},
+ {"label": "S", "matrix": [2, 2], "x": 2.75, "y": 2},
+ {"label": "D", "matrix": [2, 3], "x": 3.75, "y": 2},
+ {"label": "F", "matrix": [2, 4], "x": 4.75, "y": 2},
+ {"label": "G", "matrix": [2, 5], "x": 5.75, "y": 2},
+ {"label": "H", "matrix": [2, 6], "x": 6.75, "y": 2},
+ {"label": "J", "matrix": [2, 7], "x": 7.75, "y": 2},
+ {"label": "K", "matrix": [2, 8], "x": 8.75, "y": 2},
+ {"label": "L", "matrix": [2, 9], "x": 9.75, "y": 2},
+ {"label": ";", "matrix": [2, 10], "x": 10.75, "y": 2},
+ {"label": "'", "matrix": [2, 11], "x": 11.75, "y": 2},
+ {"label": "Enter", "matrix": [2, 13], "x": 12.75, "y": 2, "w": 2.25},
+
+ {"label": "LShift", "matrix": [3, 15], "x": 0, "y": 3, "w": 2.25},
+ {"label": "Z", "matrix": [3, 2], "x": 2.25, "y": 3},
+ {"label": "X", "matrix": [3, 3], "x": 3.25, "y": 3},
+ {"label": "C", "matrix": [3, 4], "x": 4.25, "y": 3},
+ {"label": "V", "matrix": [3, 5], "x": 5.25, "y": 3},
+ {"label": "B", "matrix": [3, 6], "x": 6.25, "y": 3},
+ {"label": "N", "matrix": [3, 7], "x": 7.25, "y": 3},
+ {"label": "M", "matrix": [3, 8], "x": 8.25, "y": 3},
+ {"label": ",", "matrix": [3, 9], "x": 9.25, "y": 3},
+ {"label": ".", "matrix": [3, 10], "x": 10.25, "y": 3},
+ {"label": "/", "matrix": [3, 11], "x": 11.25, "y": 3, "w": 1.75},
+ {"label": "RShift", "matrix": [3, 12], "x": 13, "y": 3},
+ {"label": "FN", "matrix": [3, 14], "x": 14, "y": 3},
+
+ {"label": "LCtrl", "matrix": [4, 15], "x": 0, "y": 4, "w": 1.25},
+ {"label": "LGui", "matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.25},
+ {"label": "LAlt", "matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.25},
+ {"label": "Space", "matrix": [4, 6], "x": 3.75, "y": 4, "w": 6.25},
+ {"label": "RAlt", "matrix": [4, 10], "x": 10, "y": 4},
+ {"label": "FN", "matrix": [4, 11], "x": 11, "y": 4},
+ {"label": "Mid1U", "matrix": [4, 12], "x": 12, "y": 4},
+ {"label": "Menu", "matrix": [4, 13], "x": 13, "y": 4},
+ {"label": "RCtrl", "matrix": [4, 14], "x": 14, "y": 4}
+ ]
+ },
+ "LAYOUT_60_iso": {
+ "layout": [
+ {"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
+ {"label": "1", "matrix": [0, 1], "x": 1, "y": 0},
+ {"label": "2", "matrix": [0, 2], "x": 2, "y": 0},
+ {"label": "3", "matrix": [0, 3], "x": 3, "y": 0},
+ {"label": "4", "matrix": [0, 4], "x": 4, "y": 0},
+ {"label": "5", "matrix": [0, 5], "x": 5, "y": 0},
+ {"label": "6", "matrix": [0, 6], "x": 6, "y": 0},
+ {"label": "7", "matrix": [0, 7], "x": 7, "y": 0},
+ {"label": "8", "matrix": [0, 8], "x": 8, "y": 0},
+ {"label": "9", "matrix": [0, 9], "x": 9, "y": 0},
+ {"label": "0", "matrix": [0, 10], "x": 10, "y": 0},
+ {"label": "-", "matrix": [0, 11], "x": 11, "y": 0},
+ {"label": "=", "matrix": [0, 12], "x": 12, "y": 0},
+ {"label": "Backspace", "matrix": [0, 13], "x": 13, "y": 0, "w": 2},
+
+ {"label": "Tab", "matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"label": "Q", "matrix": [1, 1], "x": 1.5, "y": 1},
+ {"label": "W", "matrix": [1, 2], "x": 2.5, "y": 1},
+ {"label": "E", "matrix": [1, 3], "x": 3.5, "y": 1},
+ {"label": "R", "matrix": [1, 4], "x": 4.5, "y": 1},
+ {"label": "T", "matrix": [1, 5], "x": 5.5, "y": 1},
+ {"label": "Y", "matrix": [1, 6], "x": 6.5, "y": 1},
+ {"label": "U", "matrix": [1, 7], "x": 7.5, "y": 1},
+ {"label": "I", "matrix": [1, 8], "x": 8.5, "y": 1},
+ {"label": "O", "matrix": [1, 9], "x": 9.5, "y": 1},
+ {"label": "P", "matrix": [1, 10], "x": 10.5, "y": 1},
+ {"label": "[", "matrix": [1, 11], "x": 11.5, "y": 1},
+ {"label": "]", "matrix": [1, 12], "x": 12.5, "y": 1},
+
+ {"label": "Caps", "matrix": [2, 15], "x": 0, "y": 2, "w": 1.75},
+ {"label": "A", "matrix": [2, 1], "x": 1.75, "y": 2},
+ {"label": "S", "matrix": [2, 2], "x": 2.75, "y": 2},
+ {"label": "D", "matrix": [2, 3], "x": 3.75, "y": 2},
+ {"label": "F", "matrix": [2, 4], "x": 4.75, "y": 2},
+ {"label": "G", "matrix": [2, 5], "x": 5.75, "y": 2},
+ {"label": "H", "matrix": [2, 6], "x": 6.75, "y": 2},
+ {"label": "J", "matrix": [2, 7], "x": 7.75, "y": 2},
+ {"label": "K", "matrix": [2, 8], "x": 8.75, "y": 2},
+ {"label": "L", "matrix": [2, 9], "x": 9.75, "y": 2},
+ {"label": ";", "matrix": [2, 10], "x": 10.75, "y": 2},
+ {"label": "'", "matrix": [2, 11], "x": 11.75, "y": 2},
+ {"label": "ISO'", "matrix": [2, 12], "x": 12.75, "y": 2},
+ {"label": "Enter", "matrix": [2, 13], "x": 13.75, "y": 1, "w": 1.25, "h": 2},
+
+ {"label": "LShift", "matrix": [3, 15], "x": 0, "y": 3, "w": 1.25},
+ {"label": "ISO<>", "matrix": [3, 1], "x": 1.25, "y": 3},
+ {"label": "Z", "matrix": [3, 2], "x": 2.25, "y": 3},
+ {"label": "X", "matrix": [3, 3], "x": 3.25, "y": 3},
+ {"label": "C", "matrix": [3, 4], "x": 4.25, "y": 3},
+ {"label": "V", "matrix": [3, 5], "x": 5.25, "y": 3},
+ {"label": "B", "matrix": [3, 6], "x": 6.25, "y": 3},
+ {"label": "N", "matrix": [3, 7], "x": 7.25, "y": 3},
+ {"label": "M", "matrix": [3, 8], "x": 8.25, "y": 3},
+ {"label": ",", "matrix": [3, 9], "x": 9.25, "y": 3},
+ {"label": ".", "matrix": [3, 10], "x": 10.25, "y": 3},
+ {"label": "/", "matrix": [3, 11], "x": 11.25, "y": 3},
+ {"label": "RShift", "matrix": [3, 12], "x": 12.25, "y": 3, "w": 2.75},
+
+ {"label": "LCtrl", "matrix": [4, 15], "x": 0, "y": 4, "w": 1.25},
+ {"label": "LGui", "matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.25},
+ {"label": "LAlt", "matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.25},
+ {"label": "Space", "matrix": [4, 6], "x": 3.75, "y": 4, "w": 6.25},
+ {"label": "RAlt", "matrix": [4, 10], "x": 10, "y": 4, "w": 1.25},
+ {"label": "FN", "matrix": [4, 11], "x": 11.25, "y": 4, "w": 1.25},
+ {"label": "Menu", "matrix": [4, 13], "x": 12.5, "y": 4, "w": 1.25},
+ {"label": "RCtrl", "matrix": [4, 14], "x": 13.75, "y": 4, "w": 1.25}
+ ]
+ },
+ "LAYOUT_60_iso_split_bs_rshift": {
+ "layout": [
+ {"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
+ {"label": "1", "matrix": [0, 1], "x": 1, "y": 0},
+ {"label": "2", "matrix": [0, 2], "x": 2, "y": 0},
+ {"label": "3", "matrix": [0, 3], "x": 3, "y": 0},
+ {"label": "4", "matrix": [0, 4], "x": 4, "y": 0},
+ {"label": "5", "matrix": [0, 5], "x": 5, "y": 0},
+ {"label": "6", "matrix": [0, 6], "x": 6, "y": 0},
+ {"label": "7", "matrix": [0, 7], "x": 7, "y": 0},
+ {"label": "8", "matrix": [0, 8], "x": 8, "y": 0},
+ {"label": "9", "matrix": [0, 9], "x": 9, "y": 0},
+ {"label": "0", "matrix": [0, 10], "x": 10, "y": 0},
+ {"label": "-", "matrix": [0, 11], "x": 11, "y": 0},
+ {"label": "=", "matrix": [0, 12], "x": 12, "y": 0},
+ {"label": "BS", "matrix": [0, 13], "x": 13, "y": 0},
+ {"label": "~", "matrix": [0, 14], "x": 14, "y": 0},
+
+ {"label": "Tab", "matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"label": "Q", "matrix": [1, 1], "x": 1.5, "y": 1},
+ {"label": "W", "matrix": [1, 2], "x": 2.5, "y": 1},
+ {"label": "E", "matrix": [1, 3], "x": 3.5, "y": 1},
+ {"label": "R", "matrix": [1, 4], "x": 4.5, "y": 1},
+ {"label": "T", "matrix": [1, 5], "x": 5.5, "y": 1},
+ {"label": "Y", "matrix": [1, 6], "x": 6.5, "y": 1},
+ {"label": "U", "matrix": [1, 7], "x": 7.5, "y": 1},
+ {"label": "I", "matrix": [1, 8], "x": 8.5, "y": 1},
+ {"label": "O", "matrix": [1, 9], "x": 9.5, "y": 1},
+ {"label": "P", "matrix": [1, 10], "x": 10.5, "y": 1},
+ {"label": "[", "matrix": [1, 11], "x": 11.5, "y": 1},
+ {"label": "]", "matrix": [1, 12], "x": 12.5, "y": 1},
+
+ {"label": "Caps", "matrix": [2, 15], "x": 0, "y": 2, "w": 1.75},
+ {"label": "A", "matrix": [2, 1], "x": 1.75, "y": 2},
+ {"label": "S", "matrix": [2, 2], "x": 2.75, "y": 2},
+ {"label": "D", "matrix": [2, 3], "x": 3.75, "y": 2},
+ {"label": "F", "matrix": [2, 4], "x": 4.75, "y": 2},
+ {"label": "G", "matrix": [2, 5], "x": 5.75, "y": 2},
+ {"label": "H", "matrix": [2, 6], "x": 6.75, "y": 2},
+ {"label": "J", "matrix": [2, 7], "x": 7.75, "y": 2},
+ {"label": "K", "matrix": [2, 8], "x": 8.75, "y": 2},
+ {"label": "L", "matrix": [2, 9], "x": 9.75, "y": 2},
+ {"label": ";", "matrix": [2, 10], "x": 10.75, "y": 2},
+ {"label": "'", "matrix": [2, 11], "x": 11.75, "y": 2},
+ {"label": "ISO'", "matrix": [2, 12], "x": 12.75, "y": 2},
+ {"label": "Enter", "matrix": [2, 13], "x": 13.75, "y": 1, "w": 1.25, "h": 2},
+
+ {"label": "LShift", "matrix": [3, 15], "x": 0, "y": 3, "w": 1.25},
+ {"label": "ISO<>", "matrix": [3, 1], "x": 1.25, "y": 3},
+ {"label": "Z", "matrix": [3, 2], "x": 2.25, "y": 3},
+ {"label": "X", "matrix": [3, 3], "x": 3.25, "y": 3},
+ {"label": "C", "matrix": [3, 4], "x": 4.25, "y": 3},
+ {"label": "V", "matrix": [3, 5], "x": 5.25, "y": 3},
+ {"label": "B", "matrix": [3, 6], "x": 6.25, "y": 3},
+ {"label": "N", "matrix": [3, 7], "x": 7.25, "y": 3},
+ {"label": "M", "matrix": [3, 8], "x": 8.25, "y": 3},
+ {"label": ",", "matrix": [3, 9], "x": 9.25, "y": 3},
+ {"label": ".", "matrix": [3, 10], "x": 10.25, "y": 3},
+ {"label": "/", "matrix": [3, 11], "x": 11.25, "y": 3},
+ {"label": "RShift", "matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75},
+ {"label": "FN", "matrix": [3, 14], "x": 14, "y": 3},
+
+ {"label": "LCtrl", "matrix": [4, 15], "x": 0, "y": 4, "w": 1.25},
+ {"label": "LGui", "matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.25},
+ {"label": "LAlt", "matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.25},
+ {"label": "Space", "matrix": [4, 6], "x": 3.75, "y": 4, "w": 6.25},
+ {"label": "RAlt", "matrix": [4, 10], "x": 10, "y": 4, "w": 1.25},
+ {"label": "FN", "matrix": [4, 11], "x": 11.25, "y": 4, "w": 1.25},
+ {"label": "Menu", "matrix": [4, 13], "x": 12.5, "y": 4, "w": 1.25},
+ {"label": "RCtrl", "matrix": [4, 14], "x": 13.75, "y": 4, "w": 1.25}
+ ]
+ },
+ "LAYOUT_60_iso_tsangan": {
+ "layout": [
+ {"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
+ {"label": "1", "matrix": [0, 1], "x": 1, "y": 0},
+ {"label": "2", "matrix": [0, 2], "x": 2, "y": 0},
+ {"label": "3", "matrix": [0, 3], "x": 3, "y": 0},
+ {"label": "4", "matrix": [0, 4], "x": 4, "y": 0},
+ {"label": "5", "matrix": [0, 5], "x": 5, "y": 0},
+ {"label": "6", "matrix": [0, 6], "x": 6, "y": 0},
+ {"label": "7", "matrix": [0, 7], "x": 7, "y": 0},
+ {"label": "8", "matrix": [0, 8], "x": 8, "y": 0},
+ {"label": "9", "matrix": [0, 9], "x": 9, "y": 0},
+ {"label": "0", "matrix": [0, 10], "x": 10, "y": 0},
+ {"label": "-", "matrix": [0, 11], "x": 11, "y": 0},
+ {"label": "=", "matrix": [0, 12], "x": 12, "y": 0},
+ {"label": "Backspace", "matrix": [0, 13], "x": 13, "y": 0, "w": 2},
+
+ {"label": "Tab", "matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"label": "Q", "matrix": [1, 1], "x": 1.5, "y": 1},
+ {"label": "W", "matrix": [1, 2], "x": 2.5, "y": 1},
+ {"label": "E", "matrix": [1, 3], "x": 3.5, "y": 1},
+ {"label": "R", "matrix": [1, 4], "x": 4.5, "y": 1},
+ {"label": "T", "matrix": [1, 5], "x": 5.5, "y": 1},
+ {"label": "Y", "matrix": [1, 6], "x": 6.5, "y": 1},
+ {"label": "U", "matrix": [1, 7], "x": 7.5, "y": 1},
+ {"label": "I", "matrix": [1, 8], "x": 8.5, "y": 1},
+ {"label": "O", "matrix": [1, 9], "x": 9.5, "y": 1},
+ {"label": "P", "matrix": [1, 10], "x": 10.5, "y": 1},
+ {"label": "[", "matrix": [1, 11], "x": 11.5, "y": 1},
+ {"label": "]", "matrix": [1, 12], "x": 12.5, "y": 1},
+
+ {"label": "Caps", "matrix": [2, 15], "x": 0, "y": 2, "w": 1.75},
+ {"label": "A", "matrix": [2, 1], "x": 1.75, "y": 2},
+ {"label": "S", "matrix": [2, 2], "x": 2.75, "y": 2},
+ {"label": "D", "matrix": [2, 3], "x": 3.75, "y": 2},
+ {"label": "F", "matrix": [2, 4], "x": 4.75, "y": 2},
+ {"label": "G", "matrix": [2, 5], "x": 5.75, "y": 2},
+ {"label": "H", "matrix": [2, 6], "x": 6.75, "y": 2},
+ {"label": "J", "matrix": [2, 7], "x": 7.75, "y": 2},
+ {"label": "K", "matrix": [2, 8], "x": 8.75, "y": 2},
+ {"label": "L", "matrix": [2, 9], "x": 9.75, "y": 2},
+ {"label": ";", "matrix": [2, 10], "x": 10.75, "y": 2},
+ {"label": "'", "matrix": [2, 11], "x": 11.75, "y": 2},
+ {"label": "ISO'", "matrix": [2, 12], "x": 12.75, "y": 2},
+ {"label": "Enter", "matrix": [2, 13], "x": 13.75, "y": 1, "w": 1.25, "h": 2},
+
+ {"label": "LShift", "matrix": [3, 15], "x": 0, "y": 3, "w": 1.25},
+ {"label": "ISO<>", "matrix": [3, 1], "x": 1.25, "y": 3},
+ {"label": "Z", "matrix": [3, 2], "x": 2.25, "y": 3},
+ {"label": "X", "matrix": [3, 3], "x": 3.25, "y": 3},
+ {"label": "C", "matrix": [3, 4], "x": 4.25, "y": 3},
+ {"label": "V", "matrix": [3, 5], "x": 5.25, "y": 3},
+ {"label": "B", "matrix": [3, 6], "x": 6.25, "y": 3},
+ {"label": "N", "matrix": [3, 7], "x": 7.25, "y": 3},
+ {"label": "M", "matrix": [3, 8], "x": 8.25, "y": 3},
+ {"label": ",", "matrix": [3, 9], "x": 9.25, "y": 3},
+ {"label": ".", "matrix": [3, 10], "x": 10.25, "y": 3},
+ {"label": "/", "matrix": [3, 11], "x": 11.25, "y": 3},
+ {"label": "RShift", "matrix": [3, 12], "x": 12.25, "y": 3, "w": 2.75},
+
+ {"label": "LCtrl", "matrix": [4, 15], "x": 0, "y": 4, "w": 1.5},
+ {"label": "LGui", "matrix": [4, 1], "x": 1.5, "y": 4},
+ {"label": "LAlt", "matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.5},
+ {"label": "Space", "matrix": [4, 6], "x": 4, "y": 4, "w": 7},
+ {"label": "FN", "matrix": [4, 11], "x": 11, "y": 4, "w": 1.5},
+ {"label": "Menu", "matrix": [4, 13], "x": 12.5, "y": 4},
+ {"label": "RCtrl", "matrix": [4, 14], "x": 13.5, "y": 4, "w": 1.5}
+ ]
+ },
+ "LAYOUT_60_iso_tsangan_split_bs_rshift": {
+ "layout": [
+ {"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
+ {"label": "1", "matrix": [0, 1], "x": 1, "y": 0},
+ {"label": "2", "matrix": [0, 2], "x": 2, "y": 0},
+ {"label": "3", "matrix": [0, 3], "x": 3, "y": 0},
+ {"label": "4", "matrix": [0, 4], "x": 4, "y": 0},
+ {"label": "5", "matrix": [0, 5], "x": 5, "y": 0},
+ {"label": "6", "matrix": [0, 6], "x": 6, "y": 0},
+ {"label": "7", "matrix": [0, 7], "x": 7, "y": 0},
+ {"label": "8", "matrix": [0, 8], "x": 8, "y": 0},
+ {"label": "9", "matrix": [0, 9], "x": 9, "y": 0},
+ {"label": "0", "matrix": [0, 10], "x": 10, "y": 0},
+ {"label": "-", "matrix": [0, 11], "x": 11, "y": 0},
+ {"label": "=", "matrix": [0, 12], "x": 12, "y": 0},
+ {"label": "BS", "matrix": [0, 13], "x": 13, "y": 0},
+ {"label": "~", "matrix": [0, 14], "x": 14, "y": 0},
+
+ {"label": "Tab", "matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"label": "Q", "matrix": [1, 1], "x": 1.5, "y": 1},
+ {"label": "W", "matrix": [1, 2], "x": 2.5, "y": 1},
+ {"label": "E", "matrix": [1, 3], "x": 3.5, "y": 1},
+ {"label": "R", "matrix": [1, 4], "x": 4.5, "y": 1},
+ {"label": "T", "matrix": [1, 5], "x": 5.5, "y": 1},
+ {"label": "Y", "matrix": [1, 6], "x": 6.5, "y": 1},
+ {"label": "U", "matrix": [1, 7], "x": 7.5, "y": 1},
+ {"label": "I", "matrix": [1, 8], "x": 8.5, "y": 1},
+ {"label": "O", "matrix": [1, 9], "x": 9.5, "y": 1},
+ {"label": "P", "matrix": [1, 10], "x": 10.5, "y": 1},
+ {"label": "[", "matrix": [1, 11], "x": 11.5, "y": 1},
+ {"label": "]", "matrix": [1, 12], "x": 12.5, "y": 1},
+
+ {"label": "Caps", "matrix": [2, 15], "x": 0, "y": 2, "w": 1.75},
+ {"label": "A", "matrix": [2, 1], "x": 1.75, "y": 2},
+ {"label": "S", "matrix": [2, 2], "x": 2.75, "y": 2},
+ {"label": "D", "matrix": [2, 3], "x": 3.75, "y": 2},
+ {"label": "F", "matrix": [2, 4], "x": 4.75, "y": 2},
+ {"label": "G", "matrix": [2, 5], "x": 5.75, "y": 2},
+ {"label": "H", "matrix": [2, 6], "x": 6.75, "y": 2},
+ {"label": "J", "matrix": [2, 7], "x": 7.75, "y": 2},
+ {"label": "K", "matrix": [2, 8], "x": 8.75, "y": 2},
+ {"label": "L", "matrix": [2, 9], "x": 9.75, "y": 2},
+ {"label": ";", "matrix": [2, 10], "x": 10.75, "y": 2},
+ {"label": "'", "matrix": [2, 11], "x": 11.75, "y": 2},
+ {"label": "ISO'", "matrix": [2, 12], "x": 12.75, "y": 2},
+ {"label": "Enter", "matrix": [2, 13], "x": 13.75, "y": 1, "w": 1.25, "h": 2},
+
+ {"label": "LShift", "matrix": [3, 15], "x": 0, "y": 3, "w": 1.25},
+ {"label": "ISO<>", "matrix": [3, 1], "x": 1.25, "y": 3},
+ {"label": "Z", "matrix": [3, 2], "x": 2.25, "y": 3},
+ {"label": "X", "matrix": [3, 3], "x": 3.25, "y": 3},
+ {"label": "C", "matrix": [3, 4], "x": 4.25, "y": 3},
+ {"label": "V", "matrix": [3, 5], "x": 5.25, "y": 3},
+ {"label": "B", "matrix": [3, 6], "x": 6.25, "y": 3},
+ {"label": "N", "matrix": [3, 7], "x": 7.25, "y": 3},
+ {"label": "M", "matrix": [3, 8], "x": 8.25, "y": 3},
+ {"label": ",", "matrix": [3, 9], "x": 9.25, "y": 3},
+ {"label": ".", "matrix": [3, 10], "x": 10.25, "y": 3},
+ {"label": "/", "matrix": [3, 11], "x": 11.25, "y": 3},
+ {"label": "RShift", "matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75},
+ {"label": "FN", "matrix": [3, 14], "x": 14, "y": 3},
+
+ {"label": "LCtrl", "matrix": [4, 15], "x": 0, "y": 4, "w": 1.5},
+ {"label": "LGui", "matrix": [4, 1], "x": 1.5, "y": 4},
+ {"label": "LAlt", "matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.5},
+ {"label": "Space", "matrix": [4, 6], "x": 4, "y": 4, "w": 7},
+ {"label": "FN", "matrix": [4, 11], "x": 11, "y": 4, "w": 1.5},
+ {"label": "Menu", "matrix": [4, 13], "x": 12.5, "y": 4},
+ {"label": "RCtrl", "matrix": [4, 14], "x": 13.5, "y": 4, "w": 1.5}
+ ]
+ },
+ "LAYOUT_60_iso_arrow": {
+ "layout": [
+ {"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
+ {"label": "1", "matrix": [0, 1], "x": 1, "y": 0},
+ {"label": "2", "matrix": [0, 2], "x": 2, "y": 0},
+ {"label": "3", "matrix": [0, 3], "x": 3, "y": 0},
+ {"label": "4", "matrix": [0, 4], "x": 4, "y": 0},
+ {"label": "5", "matrix": [0, 5], "x": 5, "y": 0},
+ {"label": "6", "matrix": [0, 6], "x": 6, "y": 0},
+ {"label": "7", "matrix": [0, 7], "x": 7, "y": 0},
+ {"label": "8", "matrix": [0, 8], "x": 8, "y": 0},
+ {"label": "9", "matrix": [0, 9], "x": 9, "y": 0},
+ {"label": "0", "matrix": [0, 10], "x": 10, "y": 0},
+ {"label": "-", "matrix": [0, 11], "x": 11, "y": 0},
+ {"label": "=", "matrix": [0, 12], "x": 12, "y": 0},
+ {"label": "Backspace", "matrix": [0, 13], "x": 13, "y": 0, "w": 2},
+
+ {"label": "Tab", "matrix": [1, 0], "w": 1.5, "x": 0, "y": 1},
+ {"label": "Q", "matrix": [1, 1], "x": 1.5, "y": 1},
+ {"label": "W", "matrix": [1, 2], "x": 2.5, "y": 1},
+ {"label": "E", "matrix": [1, 3], "x": 3.5, "y": 1},
+ {"label": "R", "matrix": [1, 4], "x": 4.5, "y": 1},
+ {"label": "T", "matrix": [1, 5], "x": 5.5, "y": 1},
+ {"label": "Y", "matrix": [1, 6], "x": 6.5, "y": 1},
+ {"label": "U", "matrix": [1, 7], "x": 7.5, "y": 1},
+ {"label": "I", "matrix": [1, 8], "x": 8.5, "y": 1},
+ {"label": "O", "matrix": [1, 9], "x": 9.5, "y": 1},
+ {"label": "P", "matrix": [1, 10], "x": 10.5, "y": 1},
+ {"label": "[", "matrix": [1, 11], "x": 11.5, "y": 1},
+ {"label": "]", "matrix": [1, 12], "x": 12.5, "y": 1},
+
+ {"label": "Caps", "matrix": [2, 15], "w": 1.75, "x": 0, "y": 2},
+ {"label": "A", "matrix": [2, 1], "x": 1.75, "y": 2},
+ {"label": "S", "matrix": [2, 2], "x": 2.75, "y": 2},
+ {"label": "D", "matrix": [2, 3], "x": 3.75, "y": 2},
+ {"label": "F", "matrix": [2, 4], "x": 4.75, "y": 2},
+ {"label": "G", "matrix": [2, 5], "x": 5.75, "y": 2},
+ {"label": "H", "matrix": [2, 6], "x": 6.75, "y": 2},
+ {"label": "J", "matrix": [2, 7], "x": 7.75, "y": 2},
+ {"label": "K", "matrix": [2, 8], "x": 8.75, "y": 2},
+ {"label": "L", "matrix": [2, 9], "x": 9.75, "y": 2},
+ {"label": ";", "matrix": [2, 10], "x": 10.75, "y": 2},
+ {"label": "'", "matrix": [2, 11], "x": 11.75, "y": 2},
+ {"label": "ISO'", "matrix": [2, 12], "x": 12.75, "y": 2},
+ {"label": "Enter", "matrix": [2, 13], "x": 13.75, "y": 1, "w": 1.25, "h": 2},
+
+ {"label": "LShift", "matrix": [3, 15], "x": 0, "y": 3, "w": 1.25},
+ {"label": "ISO<>", "matrix": [3, 1], "x": 1.25, "y": 3},
+ {"label": "Z", "matrix": [3, 2], "x": 2.25, "y": 3},
+ {"label": "X", "matrix": [3, 3], "x": 3.25, "y": 3},
+ {"label": "C", "matrix": [3, 4], "x": 4.25, "y": 3},
+ {"label": "V", "matrix": [3, 5], "x": 5.25, "y": 3},
+ {"label": "B", "matrix": [3, 6], "x": 6.25, "y": 3},
+ {"label": "N", "matrix": [3, 7], "x": 7.25, "y": 3},
+ {"label": "M", "matrix": [3, 8], "x": 8.25, "y": 3},
+ {"label": ",", "matrix": [3, 9], "x": 9.25, "y": 3},
+ {"label": ".", "matrix": [3, 10], "x": 10.25, "y": 3},
+ {"label": "/", "matrix": [3, 11], "x": 11.25, "y": 3, "w": 1.75},
+ {"label": "RShift", "matrix": [3, 12], "x": 13, "y": 3},
+ {"label": "FN", "matrix": [3, 14], "x": 14, "y": 3},
+
+ {"label": "LCtrl", "matrix": [4, 15], "x": 0, "y": 4, "w": 1.25},
+ {"label": "LGui", "matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.25},
+ {"label": "LAlt", "matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.25},
+ {"label": "Space", "matrix": [4, 6], "x": 3.75, "y": 4, "w": 6.25},
+ {"label": "RAlt", "matrix": [4, 10], "x": 10, "y": 4},
+ {"label": "FN", "matrix": [4, 11], "x": 11, "y": 4},
+ {"label": "Mid1U", "matrix": [4, 12], "x": 12, "y": 4},
+ {"label": "Menu", "matrix": [4, 13], "x": 13, "y": 4},
+ {"label": "RCtrl", "matrix": [4, 14], "x": 14, "y": 4}
+ ]
}
}
}
diff --git a/keyboards/1upkeyboards/pi60/keymaps/default/keymap.c b/keyboards/1upkeyboards/pi60/keymaps/default/keymap.c
index acf9ce1adb38..8a83e83b5297 100644
--- a/keyboards/1upkeyboards/pi60/keymaps/default/keymap.c
+++ b/keyboards/1upkeyboards/pi60/keymaps/default/keymap.c
@@ -18,7 +18,7 @@
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [0] = LAYOUT_60_ansi(
+ [0] = LAYOUT_all(
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_GRV,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
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_TRNS, KC_ENT,
@@ -26,7 +26,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_SPC, KC_RALT, MO(1), KC_TRNS, KC_APP, KC_RCTL
),
- [1] = LAYOUT_60_ansi(
+ [1] = LAYOUT_all(
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_DEL, KC_TRNS,
KC_TRNS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_SCRL, KC_PAUS, KC_TRNS,
KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_INS, KC_HOME, KC_PGUP, KC_TRNS, KC_TRNS,
@@ -34,7 +34,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
),
- [2] = LAYOUT_60_ansi(
+ [2] = LAYOUT_all(
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, 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, RGB_HUI, RGB_SAI, RGB_VAI, RGB_SPI, RGB_M_P, RGB_M_B, RGB_M_R, RGB_M_SW,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
@@ -42,7 +42,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
),
- [3] = LAYOUT_60_ansi(
+ [3] = LAYOUT_all(
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
diff --git a/keyboards/1upkeyboards/pi60/keymaps/via/keymap.c b/keyboards/1upkeyboards/pi60/keymaps/via/keymap.c
index 80f9d3a9f6b4..e9af7a7138b0 100644
--- a/keyboards/1upkeyboards/pi60/keymaps/via/keymap.c
+++ b/keyboards/1upkeyboards/pi60/keymaps/via/keymap.c
@@ -18,7 +18,7 @@
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [0] = LAYOUT_60_ansi(
+ [0] = LAYOUT_all(
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_GRV,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
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_TRNS, KC_ENT,
@@ -26,7 +26,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_SPC, KC_RALT, MO(1), KC_TRNS, KC_APP, KC_RCTL
),
- [1] = LAYOUT_60_ansi(
+ [1] = LAYOUT_all(
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_DEL, KC_TRNS,
KC_TRNS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_SCRL, KC_PAUS, KC_TRNS,
KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_INS, KC_HOME, KC_PGUP, KC_TRNS, KC_TRNS,
@@ -34,7 +34,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
),
- [2] = LAYOUT_60_ansi(
+ [2] = LAYOUT_all(
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, 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, RGB_HUI, RGB_SAI, RGB_VAI, RGB_SPI, RGB_M_P, RGB_M_B, RGB_M_R, RGB_M_SW,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
@@ -42,7 +42,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
),
- [3] = LAYOUT_60_ansi(
+ [3] = LAYOUT_all(
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
@@ -50,7 +50,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
),
- [4] = LAYOUT_60_ansi(
+ [4] = LAYOUT_all(
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
@@ -58,7 +58,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
),
- [5] = LAYOUT_60_ansi(
+ [5] = LAYOUT_all(
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
@@ -66,7 +66,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
),
- [6] = LAYOUT_60_ansi(
+ [6] = LAYOUT_all(
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
@@ -74,7 +74,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
),
- [7] = LAYOUT_60_ansi(
+ [7] = LAYOUT_all(
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
@@ -82,7 +82,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
),
- [8] = LAYOUT_60_ansi(
+ [8] = LAYOUT_all(
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
@@ -90,7 +90,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
),
- [9] = LAYOUT_60_ansi(
+ [9] = LAYOUT_all(
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
diff --git a/keyboards/1upkeyboards/pi60/matrix_diagram.md b/keyboards/1upkeyboards/pi60/matrix_diagram.md
new file mode 100644
index 000000000000..2300245bdb9f
--- /dev/null
+++ b/keyboards/1upkeyboards/pi60/matrix_diagram.md
@@ -0,0 +1,60 @@
+# Matrix Diagram for 1upkeyboards pi60
+
+```
+ ┌───────┐
+ 2u Backspace │0D │
+ └───────┘
+┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
+│00 │01 │02 │03 │04 │05 │06 │07 │08 │09 │0A │0B │0C │0D │0E │ ─ Switch or Encoder
+├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤ ┌─────┐ ┌─────┐ ┌─────┐
+│10 │11 │12 │13 │14 │15 │16 │17 │18 │19 │1A │1B │1C │1D │ │ │ │1D │ │1D │
+├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤ ┌──┴┐2D │ ISO Enter ┌──┴┬────┤ 1u/1.25u Split Enter ┌──┴─┬───┤ 1.25u/1u Split Enter
+│2F │21 │22 │23 │24 │25 │26 │27 │28 │29 │2A │2B │2D │ │2C │ │ │2C │2D │ │2C │2D │
+├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴┬───┬───┤ └───┴────┘ └───┴────┘ └────┴───┘
+│3F │31 │32 │33 │34 │35 │36 │37 │38 │39 │3A │3B │3C │3E │─┐
+└────┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴──────┴───┴───┘ │
+┌────────┐ ┌───┬──────┬───┐ │
+│3F │ 2.25u LShift 1u/1.75u/1u RShift │3B │3C │3E │─┼─ Switch or Encoder
+└────────┘ └───┴──────┴───┘ │
+ ┌───┐ ┌───┬───┐ │
+ 1u/0.75u Gap/1u/1u RShift │3B │ │3C │3E │─┘
+ └───┘ └───┴───┘
+
+[Bottom Rows]────────────────────────────────────────────────
+────────────────────[6u & 6.25u Spacebar]────────────────────
+┌────┬────┬────┬────────────────────────┬────┬────┬────┬────┐
+│4F │41 │42 │46 │4A │4B │4D │4E │
+└────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
+┌─────┬───┬────┬──────────┬────┬────────┬────┬────┬───┬─────┐
+│4F │41 │42 │44 │46 │48 │4A │4B │4D │4E │
+└─────┴───┴────┴──────────┴────┴────────┴────┴────┴───┴─────┘
+ ┌────────┬────┬──────────┬───┬───┬───┬───┬───┐
+ │44 │46 │48 │4A │4B │4C │4D │4E │
+ └────────┴────┴──────────┴───┴───┴───┴───┴───┘
+ ┌───────────────────────┬───┬─────┬────┬────┐
+ │46 │4A │4B │4D │4E │
+ └───────────────────────┴───┴─────┴────┴────┘
+ ┌───┬─────┬───┬─────┐
+ │4A │4B │4D │4E │
+ └───┴─────┴───┴─────┘
+
+────────────────────────[7u Spacebar]────────────────────────
+┌────┬────┬─────┬───────────────────────────┬───┬───┬───┬───┐
+│4F │41 │42 │46 │4B │4C │4D │4E │
+└────┴────┴─────┴───────────────────────────┴───┴───┴───┴───┘
+┌─────┬───┬─────┬──────────┬─────┬──────────┬─────┬────┬────┐
+│4F │41 │42 │44 │46 │48 │4B │4D │4E │
+└─────┴───┴─────┴──────────┴─────┴──────────┴─────┴────┴────┘
+ ┌───────────┬───┬───────────┬─────┬───┬─────┐
+ │44 │46 │48 │4B │4D │4E │
+ └───────────┴───┴───────────┴─────┴───┴─────┘
+ └─ Switch or Encoder
+
+───────────────────────[10u Spacebar]────────────────────────
+┌────┬────┬───────────────────────────────────────┬────┬────┐
+│4F │41 │46 │4D │4E │
+└────┴────┴───────────────────────────────────────┴────┴────┘
+┌─────┬───┬───────────────────────────────────────┬───┬─────┐
+│4F │41 │46 │4D │4E │
+└─────┴───┴───────────────────────────────────────┴───┴─────┘
+```
diff --git a/keyboards/1upkeyboards/pi60_hse/config.h b/keyboards/1upkeyboards/pi60_hse/config.h
index a47120f7d39a..b7c4d5e8bc87 100644
--- a/keyboards/1upkeyboards/pi60_hse/config.h
+++ b/keyboards/1upkeyboards/pi60_hse/config.h
@@ -3,8 +3,6 @@
#pragma once
-
-#define DYNAMIC_KEYMAP_LAYER_COUNT 10
#define RGB_MATRIX_LED_COUNT 16
#define RGB_MATRIX_FRAMEBUFFER_EFFECTS
#define RGB_MATRIX_KEYPRESSES
diff --git a/keyboards/1upkeyboards/pi60_hse/info.json b/keyboards/1upkeyboards/pi60_hse/info.json
index 310ad3d94b0b..5b3e6b35e56e 100644
--- a/keyboards/1upkeyboards/pi60_hse/info.json
+++ b/keyboards/1upkeyboards/pi60_hse/info.json
@@ -11,6 +11,9 @@
"vid": "0x6F75"
},
"diode_direction": "COL2ROW",
+ "dynamic_keymap": {
+ "layer_count": 10
+ },
"features": {
"audio": false,
"backlight": false,
diff --git a/keyboards/1upkeyboards/pi60_rgb_v2/info.json b/keyboards/1upkeyboards/pi60_rgb_v2/info.json
new file mode 100644
index 000000000000..88b3e1ced4a4
--- /dev/null
+++ b/keyboards/1upkeyboards/pi60_rgb_v2/info.json
@@ -0,0 +1,258 @@
+{
+ "manufacturer": "1upkeyboards",
+ "keyboard_name": "pi60_rgb_v2",
+ "maintainer": "ziptyze",
+ "processor": "RP2040",
+ "bootloader": "rp2040",
+ "usb": {
+ "device_version": "1.0.0",
+ "pid": "0x5612",
+ "vid": "0x6F75"
+ },
+ "diode_direction": "COL2ROW",
+ "dynamic_keymap": {
+ "layer_count": 10
+ },
+ "features": {
+ "bootmagic": true,
+ "extrakey": true,
+ "mousekey": true,
+ "rgb_matrix": true,
+ },
+ "qmk": {
+ "locking": {
+ "enabled": true,
+ "resync": true
+ }
+ },
+ "matrix_pins": {
+ "cols": ["GP25", "GP1", "GP15", "GP4", "GP5", "GP14", "GP6", "GP7", "GP8", "GP13", "GP12", "GP9", "GP11", "GP10"],
+ "rows": ["GP29", "GP27", "GP26", "GP17", "GP16"]
+ },
+ "rgb_matrix": {
+ "max_brightness": 125,
+ "sleep": true,
+ "animations": {
+ "alphas_mods": true,
+ "band_pinwheel_sat": true,
+ "band_pinwheel_val": true,
+ "band_sat": true,
+ "band_spiral_sat": true,
+ "band_spiral_val": true,
+ "band_val": true,
+ "breathing": true,
+ "cycle_all": true,
+ "cycle_left_right": true,
+ "cycle_out_in": true,
+ "cycle_out_in_dual": true,
+ "cycle_pinwheel": true,
+ "cycle_spiral": true,
+ "cycle_up_down": true,
+ "digital_rain": true,
+ "dual_beacon": true,
+ "gradient_left_right": true,
+ "gradient_up_down": true,
+ "hue_breathing": true,
+ "hue_pendulum": true,
+ "hue_wave": true,
+ "jellybean_raindrops": true,
+ "multisplash": true,
+ "pixel_flow": true,
+ "pixel_rain": true,
+ "rainbow_beacon": true,
+ "rainbow_moving_chevron": true,
+ "rainbow_pinwheels": true,
+ "raindrops": true,
+ "solid_multisplash": true,
+ "solid_reactive": true,
+ "solid_reactive_cross": true,
+ "solid_reactive_multicross": true,
+ "solid_reactive_multinexus": true,
+ "solid_reactive_multiwide": true,
+ "solid_reactive_nexus": true,
+ "solid_reactive_simple": true,
+ "solid_reactive_wide": true,
+ "solid_splash": true,
+ "splash": true,
+ "typing_heatmap": true
+ },
+ "driver": "ws2812",
+ "layout": [
+ {"x": 4, "y": 5, "flags": 2},
+ {"matrix": [0, 0], "x": 8, "y": 7, "flags": 1},
+ {"matrix": [0, 1], "x": 23, "y": 7, "flags": 4},
+ {"x": 30, "y": 7, "flags": 2},
+ {"matrix": [0, 2], "x": 37, "y": 7, "flags": 4},
+ {"x": 45, "y": 7, "flags": 2},
+ {"matrix": [0, 3], "x": 52, "y": 7, "flags": 4},
+ {"x": 60, "y": 7, "flags": 2},
+ {"matrix": [0, 4], "x": 67, "y": 7, "flags": 4},
+ {"x": 75, "y": 7, "flags": 2},
+ {"matrix": [0, 5], "x": 82, "y": 7, "flags": 4},
+ {"x": 90, "y": 7, "flags": 2},
+ {"matrix": [0, 6], "x": 97, "y": 7, "flags": 4},
+ {"x": 105, "y": 7, "flags": 2},
+ {"matrix": [0, 7], "x": 112, "y": 7, "flags": 4},
+ {"x": 120, "y": 7, "flags": 2},
+ {"matrix": [0, 8], "x": 127, "y": 7, "flags": 4},
+ {"x": 135, "y": 7, "flags": 2},
+ {"matrix": [0, 9], "x": 142, "y": 7, "flags": 4},
+ {"x": 149, "y": 7, "flags": 2},
+ {"matrix": [0, 10], "x": 157, "y": 7, "flags": 4},
+ {"x": 164, "y": 7, "flags": 2},
+ {"matrix": [0, 11], "x": 172, "y": 7, "flags": 4},
+ {"x": 179, "y": 7, "flags": 2},
+ {"matrix": [0, 12], "x": 187, "y": 7, "flags": 4},
+ {"x": 198, "y": 7, "flags": 2},
+ {"matrix": [0, 13], "x": 209, "y": 7, "flags": 1},
+ {"x": 220, "y": 7, "flags": 2},
+ {"x": 220, "y": 19, "flags": 2},
+ {"matrix": [1, 13], "x": 213, "y": 19, "flags": 1},
+ {"matrix": [1, 12], "x": 194, "y": 19, "flags": 4},
+ {"matrix": [1, 11], "x": 179, "y": 19, "flags": 4},
+ {"matrix": [1, 10], "x": 164, "y": 19, "flags": 4},
+ {"matrix": [1, 9], "x": 149, "y": 19, "flags": 4},
+ {"matrix": [1, 8], "x": 134, "y": 19, "flags": 4},
+ {"matrix": [1, 7], "x": 119, "y": 19, "flags": 4},
+ {"matrix": [1, 6], "x": 105, "y": 19, "flags": 4},
+ {"matrix": [1, 5], "x": 90, "y": 19, "flags": 4},
+ {"matrix": [1, 4], "x": 75, "y": 19, "flags": 4},
+ {"matrix": [1, 3], "x": 60, "y": 19, "flags": 4},
+ {"matrix": [1, 2], "x": 45, "y": 19, "flags": 4},
+ {"matrix": [1, 1], "x": 30, "y": 19, "flags": 4},
+ {"matrix": [1, 0], "x": 11, "y": 19, "flags": 1},
+ {"x": 4, "y": 19, "flags": 2},
+ {"x": 4, "y": 32, "flags": 2},
+ {"matrix": [2, 0], "x": 13, "y": 32, "flags": 1},
+ {"matrix": [2, 1], "x": 34, "y": 32, "flags": 4},
+ {"matrix": [2, 2], "x": 49, "y": 32, "flags": 4},
+ {"matrix": [2, 3], "x": 64, "y": 32, "flags": 4},
+ {"matrix": [2, 4], "x": 79, "y": 32, "flags": 4},
+ {"matrix": [2, 5], "x": 94, "y": 32, "flags": 4},
+ {"matrix": [2, 6], "x": 108, "y": 32, "flags": 4},
+ {"matrix": [2, 7], "x": 123, "y": 32, "flags": 4},
+ {"matrix": [2, 8], "x": 138, "y": 32, "flags": 4},
+ {"matrix": [2, 9], "x": 153, "y": 32, "flags": 4},
+ {"matrix": [2, 10], "x": 168, "y": 32, "flags": 4},
+ {"matrix": [2, 11], "x": 183, "y": 32, "flags": 4},
+ {"matrix": [2, 13], "x": 207, "y": 32, "flags": 1},
+ {"x": 220, "y": 32, "flags": 2},
+ {"x": 220, "y": 45, "flags": 2},
+ {"matrix": [3, 13], "x": 203, "y": 45, "flags": 1},
+ {"matrix": [3, 10], "x": 175, "y": 45, "flags": 4},
+ {"matrix": [3, 9], "x": 161, "y": 45, "flags": 4},
+ {"matrix": [3, 8], "x": 146, "y": 45, "flags": 4},
+ {"matrix": [3, 7], "x": 135, "y": 45, "flags": 4},
+ {"matrix": [3, 6], "x": 116, "y": 45, "flags": 4},
+ {"matrix": [3, 5], "x": 101, "y": 45, "flags": 4},
+ {"matrix": [3, 4], "x": 86, "y": 45, "flags": 4},
+ {"matrix": [3, 3], "x": 71, "y": 45, "flags": 4},
+ {"matrix": [3, 2], "x": 56, "y": 45, "flags": 4},
+ {"matrix": [3, 1], "x": 41, "y": 45, "flags": 4},
+ {"matrix": [3, 0], "x": 17, "y": 45, "flags": 1},
+ {"x": 4, "y": 45, "flags": 2},
+ {"x": 4, "y": 57, "flags": 2},
+ {"matrix": [4, 0], "x": 9, "y": 57, "flags": 1},
+ {"x": 15, "y": 57, "flags": 2},
+ {"x": 23, "y": 57, "flags": 2},
+ {"matrix": [4, 1], "x": 28, "y": 57, "flags": 1},
+ {"x": 34, "y": 57, "flags": 2},
+ {"x": 41, "y": 57, "flags": 2},
+ {"matrix": [4, 2], "x": 47, "y": 57, "flags": 1},
+ {"x": 53, "y": 57, "flags": 2},
+ {"x": 67, "y": 57, "flags": 2},
+ {"x": 71, "y": 57, "flags": 1},
+ {"x": 81, "y": 57, "flags": 2},
+ {"x": 95, "y": 57, "flags": 2},
+ {"matrix": [4, 5], "x": 103, "y": 57, "flags": 1},
+ {"x": 110, "y": 57, "flags": 2},
+ {"x": 125, "y": 57, "flags": 2},
+ {"x": 134, "y": 57, "flags": 1},
+ {"x": 139, "y": 57, "flags": 2},
+ {"x": 153, "y": 57, "flags": 2},
+ {"matrix": [4, 9], "x": 159, "y": 57, "flags": 1},
+ {"x": 165, "y": 57, "flags": 2},
+ {"x": 172, "y": 57, "flags": 2},
+ {"matrix": [4, 10], "x": 177, "y": 57, "flags": 1},
+ {"x": 183, "y": 57, "flags": 2},
+ {"x": 190, "y": 57, "flags": 2},
+ {"matrix": [4, 12], "x": 196, "y": 57, "flags": 1},
+ {"x": 202, "y": 57, "flags": 2},
+ {"x": 209, "y": 57, "flags": 2},
+ {"matrix": [4, 13], "x": 215, "y": 57, "flags": 1},
+ {"x": 220, "y": 57, "flags": 2}
+ ]
+ },
+ "ws2812": {
+ "driver": "vendor",
+ "pin": "GP28"
+ },
+ "community_layouts" : ["60_ansi"],
+ "layouts": {
+ "LAYOUT_60_ansi": {
+ "layout": [
+ {"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
+ {"label": "1", "matrix": [0, 1], "x": 1, "y": 0},
+ {"label": "2", "matrix": [0, 2], "x": 2, "y": 0},
+ {"label": "3", "matrix": [0, 3], "x": 3, "y": 0},
+ {"label": "4", "matrix": [0, 4], "x": 4, "y": 0},
+ {"label": "5", "matrix": [0, 5], "x": 5, "y": 0},
+ {"label": "6", "matrix": [0, 6], "x": 6, "y": 0},
+ {"label": "7", "matrix": [0, 7], "x": 7, "y": 0},
+ {"label": "8", "matrix": [0, 8], "x": 8, "y": 0},
+ {"label": "9", "matrix": [0, 9], "x": 9, "y": 0},
+ {"label": "0", "matrix": [0, 10], "x": 10, "y": 0},
+ {"label": "-", "matrix": [0, 11], "x": 11, "y": 0},
+ {"label": "=", "matrix": [0, 12], "x": 12, "y": 0},
+ {"label": "BS", "matrix": [0, 13], "w": 2, "x": 13, "y": 0},
+ {"label": "Tab", "matrix": [1, 0], "w": 1.5, "x": 0, "y": 1},
+ {"label": "Q", "matrix": [1, 1], "x": 1.5, "y": 1},
+ {"label": "W", "matrix": [1, 2], "x": 2.5, "y": 1},
+ {"label": "E", "matrix": [1, 3], "x": 3.5, "y": 1},
+ {"label": "R", "matrix": [1, 4], "x": 4.5, "y": 1},
+ {"label": "T", "matrix": [1, 5], "x": 5.5, "y": 1},
+ {"label": "Y", "matrix": [1, 6], "x": 6.5, "y": 1},
+ {"label": "U", "matrix": [1, 7], "x": 7.5, "y": 1},
+ {"label": "I", "matrix": [1, 8], "x": 8.5, "y": 1},
+ {"label": "O", "matrix": [1, 9], "x": 9.5, "y": 1},
+ {"label": "P", "matrix": [1, 10], "x": 10.5, "y": 1},
+ {"label": "[", "matrix": [1, 11], "x": 11.5, "y": 1},
+ {"label": "]", "matrix": [1, 12], "x": 12.5, "y": 1},
+ {"label": "|", "matrix": [1, 13], "w": 1.5, "x": 13.5, "y": 1},
+ {"label": "Caps", "matrix": [2, 0], "w": 1.75, "x": 0, "y": 2},
+ {"label": "A", "matrix": [2, 1], "x": 1.75, "y": 2},
+ {"label": "S", "matrix": [2, 2], "x": 2.75, "y": 2},
+ {"label": "D", "matrix": [2, 3], "x": 3.75, "y": 2},
+ {"label": "F", "matrix": [2, 4], "x": 4.75, "y": 2},
+ {"label": "G", "matrix": [2, 5], "x": 5.75, "y": 2},
+ {"label": "H", "matrix": [2, 6], "x": 6.75, "y": 2},
+ {"label": "J", "matrix": [2, 7], "x": 7.75, "y": 2},
+ {"label": "K", "matrix": [2, 8], "x": 8.75, "y": 2},
+ {"label": "L", "matrix": [2, 9], "x": 9.75, "y": 2},
+ {"label": ";", "matrix": [2, 10], "x": 10.75, "y": 2},
+ {"label": "'", "matrix": [2, 11], "x": 11.75, "y": 2},
+ {"label": "Enter", "matrix": [2, 13], "w": 2.25, "x": 12.75, "y": 2},
+ {"label": "LShift", "matrix": [3, 0], "w": 2.25, "x": 0, "y": 3},
+ {"label": "Z", "matrix": [3, 1], "x": 2.25, "y": 3},
+ {"label": "X", "matrix": [3, 2], "x": 3.25, "y": 3},
+ {"label": "C", "matrix": [3, 3], "x": 4.25, "y": 3},
+ {"label": "V", "matrix": [3, 4], "x": 5.25, "y": 3},
+ {"label": "B", "matrix": [3, 5], "x": 6.25, "y": 3},
+ {"label": "N", "matrix": [3, 6], "x": 7.25, "y": 3},
+ {"label": "M", "matrix": [3, 7], "x": 8.25, "y": 3},
+ {"label": ",", "matrix": [3, 8], "x": 9.25, "y": 3},
+ {"label": ".", "matrix": [3, 9], "x": 10.25, "y": 3},
+ {"label": "/", "matrix": [3, 10], "x": 11.25, "y": 3},
+ {"label": "RShift", "matrix": [3, 13], "w": 2.75, "x": 12.25, "y": 3},
+ {"label": "LCtrl", "matrix": [4, 0], "w": 1.25, "x": 0, "y": 4},
+ {"label": "LGui", "matrix": [4, 1], "w": 1.25, "x": 1.25, "y": 4},
+ {"label": "LAlt", "matrix": [4, 2], "w": 1.25, "x": 2.5, "y": 4},
+ {"label": "Space", "matrix": [4, 5], "w": 6.25, "x": 3.75, "y": 4},
+ {"label": "RAlt", "matrix": [4, 9], "w": 1.25, "x": 10, "y": 4},
+ {"label": "RGui", "matrix": [4, 10], "w": 1.25, "x": 11.25, "y": 4},
+ {"label": "FN", "matrix": [4, 12], "w": 1.25, "x": 12.5, "y": 4},
+ {"label": "RCtrl", "matrix": [4, 13], "w": 1.25, "x": 13.75, "y": 4}
+ ]
+ }
+ }
+}
diff --git a/keyboards/1upkeyboards/pi60_rgb_v2/keymaps/default/keymap.c b/keyboards/1upkeyboards/pi60_rgb_v2/keymaps/default/keymap.c
new file mode 100644
index 000000000000..88f17a44e9ff
--- /dev/null
+++ b/keyboards/1upkeyboards/pi60_rgb_v2/keymaps/default/keymap.c
@@ -0,0 +1,28 @@
+/* Copyright 2022 ziptyze
+ *
+ * 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 .
+ */
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [0] = LAYOUT_60_ansi(
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,
+ KC_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_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_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_APP, KC_RCTL
+ )
+};
diff --git a/keyboards/1upkeyboards/pi60_rgb_v2/keymaps/via/keymap.c b/keyboards/1upkeyboards/pi60_rgb_v2/keymaps/via/keymap.c
new file mode 100644
index 000000000000..5ed2ca48cdeb
--- /dev/null
+++ b/keyboards/1upkeyboards/pi60_rgb_v2/keymaps/via/keymap.c
@@ -0,0 +1,44 @@
+/* Copyright 2022 ziptyze
+ *
+ * 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 .
+ */
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [0] = LAYOUT_60_ansi(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,
+ KC_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_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_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, MO(1), KC_RCTL
+ ),
+
+ [1] = LAYOUT_60_ansi(
+ 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_DEL,
+ KC_TRNS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_SCRL, KC_PAUS, KC_TRNS,
+ KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_INS, KC_HOME, KC_PGUP, KC_TRNS,
+ KC_TRNS, KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_END, KC_PGDN, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, MO(2), KC_TRNS, KC_TRNS
+ ),
+
+ [2] = LAYOUT_60_ansi(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, 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, RGB_HUI, RGB_SAI, RGB_VAI, RGB_SPI, RGB_M_P, RGB_M_B, RGB_M_R, RGB_M_SW,KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, RGB_RMOD,RGB_HUD, RGB_SAD, RGB_VAD, RGB_SPD, RGB_M_SN,RGB_M_K, RGB_M_X, RGB_M_G, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ )
+};
diff --git a/keyboards/durgod/k320/keymaps/moults31/rules.mk b/keyboards/1upkeyboards/pi60_rgb_v2/keymaps/via/rules.mk
similarity index 100%
rename from keyboards/durgod/k320/keymaps/moults31/rules.mk
rename to keyboards/1upkeyboards/pi60_rgb_v2/keymaps/via/rules.mk
diff --git a/keyboards/1upkeyboards/pi60_rgb_v2/readme.md b/keyboards/1upkeyboards/pi60_rgb_v2/readme.md
new file mode 100644
index 000000000000..87dc3f503057
--- /dev/null
+++ b/keyboards/1upkeyboards/pi60_rgb_v2/readme.md
@@ -0,0 +1,24 @@
+# 1up pi60 rgb v2
+
+![1up pi60 rgb v2](https://i.imgur.com/H1tRGZh.png)
+
+The pi60 RGB v2 is a 60% pcb from 1upkeyboards. This keyboard features an ANSI layout hot swap PCB with per-key in-switch RGB lighting as well as RGB underglow. The controller is a Raspberry Pi rp2040 microcontroller.
+
+* Keyboard Maintainer: [ziptyze](https://github.com/ziptyze)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make 1upkeyboards/pi60_rgb_v2:default
+
+Flashing example for this keyboard:
+
+ make 1upkeyboards/pi60_rgb_v2:default:flash
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+## Bootloader
+
+Enter the bootloader in 2 ways:
+
+* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard
+* **Bootloader button**: Hold the button on the back of the PCB and plug in the keyboard
diff --git a/keyboards/dztech/og60/rules.mk b/keyboards/1upkeyboards/pi60_rgb_v2/rules.mk
similarity index 100%
rename from keyboards/dztech/og60/rules.mk
rename to keyboards/1upkeyboards/pi60_rgb_v2/rules.mk
diff --git a/keyboards/1upkeyboards/super16/keymaps/15game/keymap.c b/keyboards/1upkeyboards/super16/keymaps/15game/keymap.c
deleted file mode 100644
index 5988a7cf0ee6..000000000000
--- a/keyboards/1upkeyboards/super16/keymaps/15game/keymap.c
+++ /dev/null
@@ -1,110 +0,0 @@
-/* Copyright 2020 Sam Reinehr
- *
- * 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 .
- */
-#include QMK_KEYBOARD_H
-enum my_keycodes {
- K00 = SAFE_RANGE,
- K01,
- K02,
- K03,
- K04,
- K05,
- K06,
- K07,
- K08,
- K09,
- K10,
- K11,
- K12,
- K13,
- K14,
- K15,
-};
-/* just a simple way to give each key a unique code */
-//clang-format off
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- /* Base */
- [0] = LAYOUT_ortho_4x4(
- K00, K01, K02, K03,
- K04, K05, K06, K07,
- K08, K09, K10, K11,
- K12, K13, K14, K15
- )
-};
-/* flags describing current free square/0 */
-uint8_t current = 0;
-/* r g and b describe the colors for the initial map,
-currently blank for free, and evenly spaced hues with maximum sat/value */
-const uint8_t r[16] = {
- 0x00, 0xFF, 0xFF, 0xFF,
- 0xCC, 0x66, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00,
- 0x66, 0xCC, 0xFF, 0xFF
-};
-const uint8_t g[16] = {
- 0x00, 0x00, 0x66, 0xCC,
- 0xFF, 0xFF, 0xFF, 0xFF,
- 0xFF, 0xCC, 0x66, 0x00,
- 0x00, 0x00, 0x00, 0x00
-};
-const uint8_t b[16] = {
- 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x66,
- 0xCC, 0xFF, 0xFF, 0xFF,
- 0xFF, 0xFF, 0xCC, 0x66
-};
-/* pos contains the current positions, could technically be compressed to 4 bits per, but not worth it
- index into pos is the position we're looking at, output is the tile that is currently there */
-uint8_t tiles[16] = {
- 0, 1, 2, 3,
- 4, 5, 6, 7,
- 8, 9, 10, 11,
- 12, 13, 14, 15
-};
-/* default led array for super 16 has them in a snake, so we must do some remapping/flipping of the 2nd and 4th rows */
-uint8_t remap[16] = {
- 0, 1, 2, 3,
- 7, 6, 5, 4,
- 8, 9, 10, 11,
- 15, 14, 13, 12
-};
-//clang-format on
-/* function to refresh the led coloring with the positions with current tiles */
-void refresh_leds(void) {
- for (uint8_t index = 0; index < 16; ++index) {
- uint8_t tile = tiles[index];
- setrgb(r[tile], g[tile], b[tile], (LED_TYPE *)&led[remap[index]]);
- }
- rgblight_set();
-}
-void keyboard_post_init_user(void) {
- rgblight_mode(RGBLIGHT_MODE_STATIC_LIGHT);
- rgblight_enable_noeeprom();
- refresh_leds();
-}
-bool process_record_user(uint16_t keycode, keyrecord_t *record) {
- uint8_t offset = keycode - K00;
- uint8_t x = offset & 0x03;
- uint8_t y = (offset & 0x0C) >> 2;
- /* if the adjacent space exists and is empty, */
- if ((x > 0 && 0 == tiles[offset - 1]) || (y > 0 && 0 == tiles[offset - 4]) || (x < 3 && 0 == tiles[offset + 1]) || (y < 3 && 0 == tiles[offset + 4])) {
- /* set the currently blank tile to this tile, and make this one blank */
- tiles[current] = tiles[offset];
- tiles[offset] = 0;
- current = offset;
- }
- refresh_leds();
- return false;
-}
diff --git a/keyboards/1upkeyboards/super16/keymaps/15game/readme.md b/keyboards/1upkeyboards/super16/keymaps/15game/readme.md
deleted file mode 100644
index ede6bdd15228..000000000000
--- a/keyboards/1upkeyboards/super16/keymaps/15game/readme.md
+++ /dev/null
@@ -1,5 +0,0 @@
-# Trying to put a game that plays like the 15 puzzle on the super16
-The 15/16 puzzle consists of a grid where one space is free, and adjacent spaces can be swapped with the free space
-* future planned features:
-* fix the start at red
-* have a cute animation play when the puzzle is solved
diff --git a/keyboards/1upkeyboards/super16/keymaps/15game/rules.mk b/keyboards/1upkeyboards/super16/keymaps/15game/rules.mk
deleted file mode 100644
index 03198637f175..000000000000
--- a/keyboards/1upkeyboards/super16/keymaps/15game/rules.mk
+++ /dev/null
@@ -1,2 +0,0 @@
-RGBLIGHT_ENABLE = yes
-RGB_MATRIX_ENABLE = no
diff --git a/keyboards/1upkeyboards/super16/keymaps/ahk_companion/ahk_companion.ahk b/keyboards/1upkeyboards/super16/keymaps/ahk_companion/ahk_companion.ahk
deleted file mode 100644
index becab49e5cc5..000000000000
--- a/keyboards/1upkeyboards/super16/keymaps/ahk_companion/ahk_companion.ahk
+++ /dev/null
@@ -1,104 +0,0 @@
-#Persistent
-#SingleInstance force
-
-;=================================================================
-; Macro Pad Shortcuts ;
-;=================================================================
-
-;=================================================================
-; Layer 0
-;;=================================================================
-;Row 1
-
-F13::Send a
-F14::Send b
-F15::Send c
-F16::Send d
-
-;Row 2
-
-F17::Send e
-F18::Send f
-F19::Send g
-F20::Send h
-
-;Row 3
-
-F21::Send i
-F22::Send j
-F23::Send k
-F24::Send l
-
-
-;=================================================================
-; Layer 1
-;;=================================================================
-;Row 1
-
-!F13::Send m
-!F14::Send n
-!F15::Send o
-!F16::Send p
-
-;Row 2
-
-!F17::Send q
-!F18::Send r
-!F19::Send s
-!F20::Send t
-
-;Row 3
-
-!F21::Send u
-!F22::Send v
-!F23::Send w
-!F24::Send x
-
-
-;=================================================================
-; Layer 2
-;;=================================================================
-;Row 1
-
-+F13::Send y
-+F14::Send z
-+F15::Send A
-+F16::Send B
-
-;Row 2
-
-+F17::Send C
-+F18::Send D
-+F19::Send E
-+F20::Send F
-
-;Row 3
-
-+F21::Send G
-+F22::Send H
-+F23::Send I
-+F24::Send J
-
-;=================================================================
-; Layer 3
-;;=================================================================
-;Row 1
-
-^F13::Send K
-^F14::Send L
-^F15::Send M
-^F16::Send N
-
-;Row 2
-
-^F17::Send O
-^F18::Send P
-^F19::Send Q
-^F20::Send R
-
-;Row 3
-
-^F21::Send S
-^F22::Send T
-^F23::Send U
-^F24::Send V
diff --git a/keyboards/1upkeyboards/super16/keymaps/ahk_companion/config.h b/keyboards/1upkeyboards/super16/keymaps/ahk_companion/config.h
deleted file mode 100644
index 3b7fd81d698f..000000000000
--- a/keyboards/1upkeyboards/super16/keymaps/ahk_companion/config.h
+++ /dev/null
@@ -1,19 +0,0 @@
-#pragma once
-
-// Time out one shot layers after 3 seconds
-#define ONESHOT_TIMEOUT 3000
-
-#define RGBLED_NUM 16
-
-// Undef and redefine default brightness to half of 255
-#undef RGBLIGHT_LIMIT_VAL
-#define RGBLIGHT_LIMIT_VAL 128
-
-//Define a preview timeout for RGB reviews
-#define PREVIEW_TIMEOUT 5000
-#define TAPPING_TERM 200
-
-// Enable Light Layers implementation
-#define RGBLIGHT_LAYERS
-// Allow Light Layers to override RGB off configuration
-#define RGBLIGHT_LAYERS_OVERRIDE_RGB_OFF
diff --git a/keyboards/1upkeyboards/super16/keymaps/ahk_companion/keymap.c b/keyboards/1upkeyboards/super16/keymaps/ahk_companion/keymap.c
deleted file mode 100644
index a326abcf832a..000000000000
--- a/keyboards/1upkeyboards/super16/keymaps/ahk_companion/keymap.c
+++ /dev/null
@@ -1,136 +0,0 @@
-#include QMK_KEYBOARD_H
-
-#if defined(RGBLIGHT_ENABLE) && defined(RGBLIGHT_LAYERS)
-static uint32_t rgb_preview_timer = 0;
-#endif
-extern rgblight_config_t rgblight_config;
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- //Layer 0 - Base Layer (F13 to F24, and One Shot Layer 1,2,3 or Toggle Layer 4)
- [0] = LAYOUT_ortho_4x4(
- KC_F13, KC_F14, KC_F15, KC_F16,
- KC_F17, KC_F18, KC_F19, KC_F20,
- KC_F21, KC_F22, KC_F23, KC_F24,
- OSL(1), OSL(2), OSL(3), TG(4) //Transparent to let you go between layers
- ),
-
- [1] = LAYOUT_ortho_4x4(
- LALT(KC_F13), LALT(KC_F14), LALT(KC_F15), LALT(KC_F16),
- LALT(KC_F17), LALT(KC_F18), LALT(KC_F19), LALT(KC_F20),
- LALT(KC_F21), LALT(KC_F22), LALT(KC_F23), LALT(KC_F24),
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS //Transparent to let you go between layers
- ),
-
- //Layer 2 - Shift + Function Key Layer
- [2] = LAYOUT_ortho_4x4(
- LSFT(KC_F13), LSFT(KC_F14), LSFT(KC_F15), LSFT(KC_F16),
- LSFT(KC_F17), LSFT(KC_F18), LSFT(KC_F19), LSFT(KC_F20),
- LSFT(KC_F21), LSFT(KC_F22), LSFT(KC_F23), LSFT(KC_F24),
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS //Transparent to let you go between layers
- ),
-
- //Layer 3 - Control + Function Key
- [3] = LAYOUT_ortho_4x4(
- LCTL(KC_F13), LCTL(KC_F14), LCTL(KC_F15), LCTL(KC_F16),
- LCTL(KC_F17), LCTL(KC_F18), LCTL(KC_F19), LCTL(KC_F20),
- LCTL(KC_F21), LCTL(KC_F22), LCTL(KC_F23), LCTL(KC_F24),
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS //Transparent to let you go between layers
- ),
-
- //Layer 4 - Multimedia
- [4] = LAYOUT_ortho_4x4(
- KC_MPRV, KC_MPLY, KC_MNXT, KC_VOLU,
- KC_NO, KC_NO, KC_NO, KC_MUTE,
- KC_NO, QK_BOOT, EE_CLR, KC_VOLD,
- TG(5), KC_TRNS, KC_TRNS, KC_TRNS //Transparent to let you go between layers
- ),
-
- //Layer 5 - Keyboard Lights, Programming and Special Functions
- [5] = LAYOUT_ortho_4x4(
- RGB_MOD, RGB_HUI, RGB_SAI, RGB_VAI,
- RGB_RMOD, RGB_HUD, RGB_SAD, RGB_VAD,
- RGB_TOG, EE_CLR, QK_BOOT, KC_LSFT,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS //Transparent to let you go between layers
- ),
-};
-
-const rgblight_segment_t PROGMEM my_layer0_layer[] = RGBLIGHT_LAYER_SEGMENTS(
- {0,16,HSV_ORANGE}
- );
-const rgblight_segment_t PROGMEM my_layer1_layer[] = RGBLIGHT_LAYER_SEGMENTS(
- {0,16,HSV_GREEN}
- );
-const rgblight_segment_t PROGMEM my_layer2_layer[] = RGBLIGHT_LAYER_SEGMENTS(
- {0,16,HSV_RED}
- );
-const rgblight_segment_t PROGMEM my_layer3_layer[] = RGBLIGHT_LAYER_SEGMENTS(
- {0,16,HSV_BLUE}
- );
-const rgblight_segment_t PROGMEM my_layer4_layer[] = RGBLIGHT_LAYER_SEGMENTS(
- {0,16,HSV_WHITE}
- );
-const rgblight_segment_t PROGMEM my_layer5_layer[] = RGBLIGHT_LAYER_SEGMENTS(
- {0,16,HSV_TEAL}
- );
-const rgblight_segment_t* const PROGMEM my_rgb_layers[] = RGBLIGHT_LAYERS_LIST(
- my_layer0_layer,
- my_layer1_layer,
- my_layer2_layer,
- my_layer3_layer,
- my_layer4_layer,
- my_layer5_layer
- );
-
-bool process_record_user(uint16_t keycode, keyrecord_t *record) {
- return true;
-}
-
-void post_process_record_user(uint16_t keycode, keyrecord_t *record) {
- // Allow for a preview of changes when modifying RGB
-# if defined(RGBLIGHT_ENABLE) && defined(RGBLIGHT_LAYERS)
- switch (keycode) {
- case RGB_TOG ... QK_VELOCIKEY_TOGGLE:
- for (uint8_t i = 0; i < RGBLIGHT_MAX_LAYERS; i++) {
- rgblight_set_layer_state(i, false);
- }
- rgb_preview_timer = timer_read32();
- break;
- }
-# endif
- return;
-}
-
-//Set the appropriate layer color
-layer_state_t layer_state_set_user(layer_state_t state) {
- rgblight_set_layer_state(1, layer_state_cmp(state, 1));
- rgblight_set_layer_state(2, layer_state_cmp(state, 2));
- rgblight_set_layer_state(3, layer_state_cmp(state, 3));
- rgblight_set_layer_state(4, layer_state_cmp(state, 4));
- rgblight_set_layer_state(5, layer_state_cmp(state, 5));
- return state;
-}
-
-void keyboard_post_init_user(void) {
- //Enable the LED layers
- rgblight_layers = my_rgb_layers;
- layer_state_set_user(layer_state);
-}
-
-void matrix_scan_user(void) {
-# if defined(RGBLIGHT_ENABLE) && defined(RGBLIGHT_LAYERS)
- // Allow preview for
- if (rgb_preview_timer && TIMER_DIFF_32(timer_read32(), rgb_preview_timer) > PREVIEW_TIMEOUT) {
- rgb_preview_timer = 0;
- default_layer_state_set_user(default_layer_state);
- layer_state_set_user(layer_state);
- led_update_user((led_t) host_keyboard_leds());
- }
-# endif
-}
-
-//EEPROM Reset Function
-void eeconfig_init_user(void) {
- rgblight_enable(); // Enable RGB by default
- rgblight_sethsv(HSV_ORANGE); // Set it to orange by default
-}
-
diff --git a/keyboards/1upkeyboards/super16/keymaps/ahk_companion/readme.md b/keyboards/1upkeyboards/super16/keymaps/ahk_companion/readme.md
deleted file mode 100644
index 7a0107c994cb..000000000000
--- a/keyboards/1upkeyboards/super16/keymaps/ahk_companion/readme.md
+++ /dev/null
@@ -1,58 +0,0 @@
-## AutoHotKey Companion ##
-
-### Overview ###
-AutoHotKey Companion Keymap for 1upkeyboards Super16 is designed be a quick and easy way to get started with AutoHotKey and to provide a foundation for customizing your own macropad. I chose the Super16 because it provided an easy way (RGB) to identify what layer I was on with a quick glance or peripheral vision. The F13 to F24 keys were selected as they are rarely used so you won't run into conflicts with existing application shortcuts and AutoHotKey recognizes them without any issues.
-
-Same functionality can be accomplished with other similar applications on the host system like Keyboard Maestro, AutoIt, etc.
-
-* AutoHotKey(Windows)
-* AutoIT (Windows)
-* Keyboard Maestro(Mac)
-* AutoKey(Linux)
-
-This keymap allows for a total of 48 Function/Macro keys that are accessible within 2 sequential key presses (or more when extended with your own code and additional layers)
-
-### Alternate Implementations ###
-I chose to use QMK OSL (One Shot Layer) functionality to avoid having to hold a key while selecting the next key and to have my layers always go back to the default layer as the starting point. This also helps me avoid having to cognitively remember what layer I am on.
-
-If persistent behavior is prefered, OSL can be swapped for TG which will toggle the layer on/off with a key press instead of clearing the layer once the Function key is pressed. This is useful if a layer contains several keys that need to be used in sequence. I also added a OSL timeout of 3 seconds, so that if the key is not pressed within 3 seconds the layer will go back to default. This can be adjusted in the config.h file by increasing 3000 to a desired value: `#define ONESHOT_TIMEOUT 3000`
-
-
-
-
-### Layers ###
-
-While the first 5 layers are accessible with only 1 key press at most, the 5th (less frequently used) layer is accessed by first going to the 4th layer, which makes the TG(5) button available on the bottom left. Space for additional 2 more layer toggles is available on the 2 middle buttons on the bottom row. Please refer to the layer diagrams.
-
-
-* Layer 0 (Base Layer) - the default layer and functions like sending the F13 to F24 keys along with the bottom row to activate another 4 layers.
-
- ![Image of Base Layer ](https://i.imgur.com/0LhityX.png)
-
-* Layer 1 (Alt Layer) - Equivalent to Alt+Fxx key being pressed
-
- ![Image of Layer 1 ](https://i.imgur.com/ZblqLZt.png)
-
-* Layer 2 (Shift Layer) - Equivalent to Shift+Fxx key being pressed
-
- ![Image of Layer 2 ](https://i.imgur.com/ZQHwLC0.png)
-
-* Layer 3 (Control Layer) - Equivalent to Ctrl+Fxx key being pressed
-
- ![Image of Layer 3 ](https://i.imgur.com/JkM8bqV.png)
-
-* Layer 4 (Config Layer) - Layer for multimedia. You can replace the KC_TRNS on this layer in keymap.c to TG(x) to enable additional layers.
-
- ![Image of Layer 4 ](https://i.imgur.com/srDp5Lv.png)
-
-* Layer 5 (RGB Control/QMK) - RGB control layer and Quantum functions (Reset, EEPROM Reset, )
-
- ![Image of Layer 5 ](https://i.imgur.com/Os3n8dx.png)
-
-### Host Configuration ###
-
-Once the keymap has been flashed to the Super16, you can download the accompanying AutoHotKey file or create your own and have it start automatically either via a Windows Task or another way. Using AutoHotKey allows adjustment of functionality of the buttons without the need to change your map and reflash the macropad every time.
-Starting the AHK file can be done either by:
-* Creating a Windows Task
-* Adding the AHK to the startup folder
-* Launch manually
diff --git a/keyboards/1upkeyboards/super16/keymaps/ahk_companion/rules.mk b/keyboards/1upkeyboards/super16/keymaps/ahk_companion/rules.mk
deleted file mode 100644
index b5bd51b3270e..000000000000
--- a/keyboards/1upkeyboards/super16/keymaps/ahk_companion/rules.mk
+++ /dev/null
@@ -1,2 +0,0 @@
-RGB_MATRIX_ENABLE = no
-RGBLIGHT_ENABLE = yes
diff --git a/keyboards/1upkeyboards/super16/keymaps/nblyumberg/config.h b/keyboards/1upkeyboards/super16/keymaps/nblyumberg/config.h
deleted file mode 100644
index 3d03512888b8..000000000000
--- a/keyboards/1upkeyboards/super16/keymaps/nblyumberg/config.h
+++ /dev/null
@@ -1,13 +0,0 @@
-#pragma once
-
-// Time out one shot layers after 3 seconds
-#define ONESHOT_TIMEOUT 3000
-
-#define RGBLED_NUM 16
-
-
-// Undef and redefine default brightness to half of 255
-#undef RGBLIGHT_LIMIT_VAL
-#define RGBLIGHT_LIMIT_VAL 128
-
-#define TAPPING_TERM 200
diff --git a/keyboards/1upkeyboards/super16/keymaps/nblyumberg/keymap.c b/keyboards/1upkeyboards/super16/keymaps/nblyumberg/keymap.c
deleted file mode 100644
index 514b8b7a73c8..000000000000
--- a/keyboards/1upkeyboards/super16/keymaps/nblyumberg/keymap.c
+++ /dev/null
@@ -1,127 +0,0 @@
-#include QMK_KEYBOARD_H
-
-uint16_t copy_paste_timer;
-uint16_t enter_timer;
-
-extern rgblight_config_t rgblight_config;
-
-// Define custom keycodes
-enum my_keycodes {
- KC_CCCV = SAFE_RANGE,
- KC_2ENTER
-};
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- //Layer 0 - Base Layer (F13 to F24, and One Shot Layer 1,2,3,4)
- [0] = LAYOUT_ortho_4x4(
- KC_F13, KC_F14, KC_F15, KC_F16,
- KC_F17, KC_CCCV, KC_F19, KC_F20,
- KC_F21, KC_F22, KC_F23, KC_2ENTER,
- OSL(1), OSL(2), OSL(3), TG(4) //Transparent to let you go between layers
- ),
-
- [1] = LAYOUT_ortho_4x4(
- LALT(KC_F13), LALT(KC_F14), LALT(KC_F15), LALT(KC_F16),
- LALT(KC_F17), LALT(KC_F18), LALT(KC_F19), LALT(KC_F20),
- LALT(KC_F21), LALT(KC_F22), LALT(KC_F23), LALT(KC_F24),
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS //Transparent to let you go between layers
- ),
-
- //Layer 2 - Shift + Function Key Layer
- [2] = LAYOUT_ortho_4x4(
- LSFT(KC_F13), LSFT(KC_F14), LSFT(KC_F15), LSFT(KC_F16),
- LSFT(KC_F17), LSFT(KC_F18), LSFT(KC_F19), LSFT(KC_F20),
- LSFT(KC_F21), LSFT(KC_F22), LSFT(KC_F23), LSFT(KC_F24),
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS //Transparent to let you go between layers
- ),
-
- //Layer 3 - Control + Function Key
- [3] = LAYOUT_ortho_4x4(
- LCTL(KC_F13), LCTL(KC_F14), LCTL(KC_F15), LCTL(KC_F16),
- LCTL(KC_F17), LCTL(KC_F18), LCTL(KC_F19), LCTL(KC_F20),
- LCTL(KC_F21), LCTL(KC_F22), LCTL(KC_F23), LCTL(KC_F24),
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS //Transparent to let you go between layers
- ),
-
- //Layer 4 - Keyboard Lights. Programming and Special Functions
- [4] = LAYOUT_ortho_4x4(
- KC_MPRV, KC_MPLY, KC_MNXT, KC_VOLU,
- RGB_TOG, RGB_MOD, RGB_RMOD, KC_MUTE,
- TO(0), QK_BOOT, EE_CLR, KC_VOLD,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS //Transparent to let you go between layers
- ),
-};
-
-
-bool process_record_user(uint16_t keycode, keyrecord_t *record) {
- switch (keycode) {
- case KC_CCCV: // One key copy/paste
- if (record->event.pressed) {
- copy_paste_timer = timer_read();
- } else {
- if (timer_elapsed(copy_paste_timer) > TAPPING_TERM) { // Hold, copy
- tap_code16(LCTL(KC_C));
- } else { // Tap, paste
- tap_code16(LCTL(KC_V));
- }
- } return true;
- case KC_2ENTER:
- if (record->event.pressed) {
- enter_timer = timer_read();
- } else {
- if (timer_elapsed(enter_timer) > TAPPING_TERM) { // Hold, shift+enter
- tap_code16(LSFT(KC_ENTER));
- } else { // Tap, enter
- tap_code16(KC_F24);
- }
- }
- return true;
- default:
- return true;
- }
-}
-
-
-void keyboard_post_init_user(void) {
- //Enable the LED layers
- layer_state_set_user(layer_state);
-}
-
-layer_state_t layer_state_set_user(layer_state_t state) {
- rgblight_sethsv_noeeprom(HSV_WHITE);
- switch(get_highest_layer(state)) {
- case 1:
- // Green
- rgblight_enable_noeeprom();
- rgblight_sethsv_noeeprom(HSV_GREEN);
- break;
- case 2:
- // Red
- rgblight_enable_noeeprom();
- rgblight_sethsv_noeeprom(HSV_RED);
- break;
- case 3:
- // Blue
- rgblight_enable_noeeprom();
- rgblight_sethsv_noeeprom(HSV_BLUE);
- break;
- case 4:
- // Orange
- rgblight_enable_noeeprom();
-// rgblight_sethsv_noeeprom(HSV_PURPLE);
- rgblight_sethsv_noeeprom(HSV_ORANGE);
- break;
- default:
- // White
- //Read RGB Light State
- rgblight_config.raw = eeconfig_read_rgblight();
- //If enabled, set white
- if (rgblight_config.enable) {
- rgblight_sethsv_noeeprom(HSV_WHITE);
- } else { //Otherwise go back to disabled
- rgblight_disable_noeeprom();
- }
- break;
-}
-return state;
-}
\ No newline at end of file
diff --git a/keyboards/1upkeyboards/super16/keymaps/nblyumberg/readme.md b/keyboards/1upkeyboards/super16/keymaps/nblyumberg/readme.md
deleted file mode 100644
index 5ae101b53590..000000000000
--- a/keyboards/1upkeyboards/super16/keymaps/nblyumberg/readme.md
+++ /dev/null
@@ -1,6 +0,0 @@
-# Nick B's Super16 keymap
-
-A modification of the default keymap to include layer indicators with RGB
-* Added a time out of 3 seconds to 1 shot layers
-* Reduced brightness to half to reduce power draw
-* Added a one key copy/paste keycode
diff --git a/keyboards/1upkeyboards/super16/keymaps/nblyumberg/rules.mk b/keyboards/1upkeyboards/super16/keymaps/nblyumberg/rules.mk
deleted file mode 100644
index b5bd51b3270e..000000000000
--- a/keyboards/1upkeyboards/super16/keymaps/nblyumberg/rules.mk
+++ /dev/null
@@ -1,2 +0,0 @@
-RGB_MATRIX_ENABLE = no
-RGBLIGHT_ENABLE = yes
diff --git a/keyboards/1upkeyboards/super16v2/keymaps/mouse/keymap.c b/keyboards/1upkeyboards/super16v2/keymaps/mouse/keymap.c
deleted file mode 100644
index 8888fe35e43b..000000000000
--- a/keyboards/1upkeyboards/super16v2/keymaps/mouse/keymap.c
+++ /dev/null
@@ -1,50 +0,0 @@
-/* Copyright 2022 MechMerlin
- *
- * 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 .
- */
-
-#include QMK_KEYBOARD_H
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [0] = LAYOUT_ortho_4x4( /* Base */
- KC_TRNS, KC_DELETE, KC_BACKSPACE, KC_MUTE,
- KC_P4, KC_P5, KC_P6, KC_PPLS,
- KC_P1, KC_P2, KC_P3, KC_PSLS,
- MO(1), KC_P0, KC_PDOT, KC_BTN3
- ),
-
- [1] = LAYOUT_ortho_4x4( /* Fn Layer */
- RGB_TOG, RGB_HUI, RGB_SAI, RGB_VAI,
- RGB_MOD, RGB_HUD, RGB_SAD, RGB_VAD,
- RGB_SPD, RGB_SPI, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, QK_BOOT
- ),
-};
-
-bool encoder_update_user(uint8_t index, bool clockwise) {
- if (index == 0) { /* First encoder */
- if (clockwise) {
- tap_code_delay(KC_MS_RIGHT, 10);
- } else {
- tap_code_delay(KC_MS_LEFT, 10);
- }
- } else if (index == 1) { /* Second encoder */
- if (clockwise) {
- tap_code_delay(KC_AUDIO_VOL_UP, 10);
- } else {
- tap_code_delay(KC_AUDIO_VOL_DOWN, 10);
- }
- }
- return false;
-}
\ No newline at end of file
diff --git a/keyboards/1upkeyboards/super16v2/keymaps/mouse/readme.md b/keyboards/1upkeyboards/super16v2/keymaps/mouse/readme.md
deleted file mode 100644
index e229fcba7409..000000000000
--- a/keyboards/1upkeyboards/super16v2/keymaps/mouse/readme.md
+++ /dev/null
@@ -1 +0,0 @@
-# The default keymap for Super 16 V2
diff --git a/keyboards/1upkeyboards/sweet16/keymaps/dlaroe/keymap.c b/keyboards/1upkeyboards/sweet16/keymaps/dlaroe/keymap.c
deleted file mode 100644
index 5305d0ad051f..000000000000
--- a/keyboards/1upkeyboards/sweet16/keymaps/dlaroe/keymap.c
+++ /dev/null
@@ -1,38 +0,0 @@
-#include QMK_KEYBOARD_H
-
-enum layers {
- num,
- extra,
- mouse
-};
-
-
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [num] = LAYOUT_numpad_4x4(
- KC_P7, KC_P8, KC_P9, LT(extra, KC_PPLS),
- KC_P4, KC_P5, KC_P6,
- KC_P1, KC_P2, KC_P3, KC_PENT,
- LT(mouse, KC_P0), KC_DOT
- ),
-
- [extra] = LAYOUT_numpad_4x4(
- KC_PSLS, KC_PAST, KC_PMNS, KC_TRNS,
- KC_BSPC, KC_EXECUTE, KC_DEL,
- KC_LPRN, KC_RPRN, KC_PEQL, KC_PENT,
- KC_TAB, KC_NUM
- ),
-
-
-[mouse] = LAYOUT_numpad_4x4(
- KC_WH_D, KC_MS_U, KC_WH_U, LT(extra, KC_PPLS),
- KC_MS_L, KC_MS_D, KC_MS_R,
- KC_BTN1, KC_BTN2, KC_BTN3, KC_PENT,
- KC_TRNS, KC_DOT
- )
-
-
-
-
-};
-
diff --git a/keyboards/1upkeyboards/sweet16/keymaps/dlaroe/readme.md b/keyboards/1upkeyboards/sweet16/keymaps/dlaroe/readme.md
deleted file mode 100644
index aabcf82c6115..000000000000
--- a/keyboards/1upkeyboards/sweet16/keymaps/dlaroe/readme.md
+++ /dev/null
@@ -1,3 +0,0 @@
-# Dale's keymap for the Sweet16
-
-I wanted to reuse a standard numpad keyset and have the full functionality of an larger numpad with a nod to Excel functionality.
diff --git a/keyboards/1upkeyboards/sweet16/keymaps/ridingintraffic/config.h b/keyboards/1upkeyboards/sweet16/keymaps/ridingintraffic/config.h
deleted file mode 100644
index 161b46c814ec..000000000000
--- a/keyboards/1upkeyboards/sweet16/keymaps/ridingintraffic/config.h
+++ /dev/null
@@ -1,16 +0,0 @@
-#pragma once
-
-/* tap dance stuff*/
-#undef TAPPING_TERM
-#define TAPPING_TERM 500
-#define PERMISSIVE_HOLD
-
-#define TAPPING_TOGGLE 2
-
-#define EXAMPLESTRING1 "tapdance_1"
-#define EXAMPLESTRING2 "tapdance_2"
-#define EXAMPLESTRING3 "tapdance_3"
-#define EXAMPLESTRING4 "tapdance_4"
-
-#undef RGBLED_NUM
-#define RGBLED_NUM 16
diff --git a/keyboards/1upkeyboards/sweet16/keymaps/ridingintraffic/keymap.c b/keyboards/1upkeyboards/sweet16/keymaps/ridingintraffic/keymap.c
deleted file mode 100644
index 2e7505ec1c69..000000000000
--- a/keyboards/1upkeyboards/sweet16/keymaps/ridingintraffic/keymap.c
+++ /dev/null
@@ -1,215 +0,0 @@
-/*
-tap danc eis turned on in the rules now...
-*/
-#include QMK_KEYBOARD_H
-
-#define _EMOJI 0
-#define _TAPLAND 1
-#define _LEDCNTL 2
-
-enum custom_keycodes {
- SHRUG,
- DISFACE,
- FU,
- TFLIP,
- TFLIP2,
- SAD_EYES,
- TPUT,
- HAPPYFACE,
- HEARTFACE,
- CLOUD,
- CHANFACE,
- CMDCLEAR
-};
-//Tap Dance Declarations
-enum {
- TD_EXAMPLE1 = 0,
- TD_EXAMPLE2,
- TD_EXAMPLE3,
- TD_EXAMPLE4
-};
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-
- /* EMOJI Pad
- * ,-------------------------------.
- * |TFLIP | TFlIP2|DISFACE| FU |
- * |------+-------+-------+--------|
- * | CLOUD| | | CLEAR |
- * |------+-------+-------+--------|
- * |SHRUG |DISFACE| HRTFAC| HAPPYF |
- * |------+-------+-------+--------|
- * | ENTER| |LEDCNTR| tapland|
- * `-------------------------------'
- */
- //purple
- [_EMOJI] = LAYOUT_ortho_4x4(
- TFLIP, TFLIP2, KC_NO, FU ,
- CLOUD, KC_NO, KC_NO, CMDCLEAR,
- SHRUG, DISFACE, HEARTFACE, HAPPYFACE,
- KC_ENT, RGB_TOG, MO(_LEDCNTL), MO(_TAPLAND)
- ),
-
- /* TapLand //
- * ,-------------------------------.
- * | str1 | str2 | str3 | str4 |
- * |------+-------+-------+--------|
- * | | | | |
- * |------+-------+-------+--------|
- * | | | | |
- * |------+-------+-------+--------|
- * | | | | |
- * `-------------------------------'
- */
- //blue
- [_TAPLAND] = LAYOUT_ortho_4x4(
- TD(TD_EXAMPLE1), TD(TD_EXAMPLE2), TD(TD_EXAMPLE3), TD(TD_EXAMPLE4),
- KC_NO, KC_NO, KC_NO, KC_NO,
- KC_NO, KC_NO, KC_NO, KC_NO,
- KC_NO, KC_NO, KC_NO, KC_NO
- ),
- /* LEDControl Pad
- * ,-------------------------------.
- * | snake|breathe|rainbow|gradient|
- * |------+-------+-------+--------|
- * | xmas | Val+ | Sat+ | HUE+ |
- * |------+-------+-------+--------|
- * |kngrdr| Val- | Sat- | HUE- |
- * |------+-------+-------+--------|
- * | swirl| PLAIN | | ON/OFF |
- * `-------------------------------'
- */
- //blue
- [_LEDCNTL] = LAYOUT_ortho_4x4(
- RGB_M_SN, RGB_M_B, RGB_M_R, RGB_M_G,
- RGB_M_X, RGB_VAI, RGB_SAI, RGB_HUI,
- RGB_M_K, RGB_VAD, RGB_SAD, RGB_HUD,
- RGB_M_SW, RGB_M_P, KC_NO, RGB_TOG
- ),
-};
-
-bool process_record_user(uint16_t keycode, keyrecord_t *record) {
- if (record->event.pressed) {
- switch(keycode) {
- case CLOUD:
- if(record->event.pressed){
- send_unicode_string("(っ◕‿◕)っ");
- }
- return false;
- break;
- case FU:
- if(record->event.pressed){
- SEND_STRING("t(-_-t)");
- }
- return false;
- break;
- case HAPPYFACE:
- if(record->event.pressed){
- send_unicode_string("ʘ‿ʘ");
- }
- return false;
- break;
- case CMDCLEAR:
- if (record->event.pressed) {
- register_code(KC_LGUI);
- tap_code(KC_A);
- unregister_code(KC_LGUI);
- tap_code(KC_DEL);
- }
- return false;
- break;
- case SHRUG:
- if (record->event.pressed) {
- send_unicode_string("¯\\_(ツ)_/¯");
- }
- return false;
- break;
- case HEARTFACE:
- if(record->event.pressed){
- send_unicode_string("♥‿♥");
- }
- return false;
- break;
- case DISFACE:
- if(record->event.pressed){
- send_unicode_string("ಠ_ಠ");
- }
- return false;
- break;
- case TFLIP:
- if(record->event.pressed){
- send_unicode_string("(╯°□°)╯ ︵ ┻━┻");
- }
- return false;
- break;
- case TFLIP2:
- if(record->event.pressed){
- send_unicode_string("┻━┻︵ \\(°□°)/ ︵ ┻━┻");
- }
- return false;
- break;
- }
- }
- return true;
-}
-
-
-/* tap dance time */
-void tdexample1(tap_dance_state_t *state, void *user_data) {
- if (state->count >= 2) {
- SEND_STRING(EXAMPLESTRING1);
- reset_tap_dance (state);
- }
-}
-void tdexample2(tap_dance_state_t *state, void *user_data) {
- if (state->count >= 2) {
- SEND_STRING(EXAMPLESTRING2);
- reset_tap_dance (state);
- }
-}
-void tdexample3(tap_dance_state_t *state, void *user_data) {
- if (state->count >= 2) {
- SEND_STRING(EXAMPLESTRING3);
- reset_tap_dance (state);
- }
-}
-void tdexample4(tap_dance_state_t *state, void *user_data) {
- if (state->count >= 2) {
- SEND_STRING(EXAMPLESTRING4);
- reset_tap_dance (state);
- }
-}
-
-tap_dance_action_t tap_dance_actions[] = {
- [TD_EXAMPLE1] = ACTION_TAP_DANCE_FN(tdexample1),
- [TD_EXAMPLE2] = ACTION_TAP_DANCE_FN(tdexample2),
- [TD_EXAMPLE3] = ACTION_TAP_DANCE_FN(tdexample3),
- [TD_EXAMPLE4] = ACTION_TAP_DANCE_FN(tdexample4)
-};
-
-// Runs just one time when the keyboard initializes.
-void matrix_scan_user(void) {
- static bool has_ran_yet;
- if (!has_ran_yet) {
- has_ran_yet = true;
- rgblight_setrgb (16, 0, 16);
- }
-}
-layer_state_t layer_state_set_user(layer_state_t state) {
- switch (get_highest_layer(state)) {
- case _TAPLAND:
- rgblight_setrgb(0, 16, 0); //green
- break;
- case _LEDCNTL:
- rgblight_setrgb(0, 0, 16); //blue
- break;
- case _EMOJI:
- rgblight_setrgb (16, 0, 16); //purple
- break;
-
- default: // for any other layers, or the default layer
- rgblight_setrgb (16, 0, 16); //purple
- break;
- }
- return state;
-}
diff --git a/keyboards/1upkeyboards/sweet16/keymaps/ridingintraffic/readme.md b/keyboards/1upkeyboards/sweet16/keymaps/ridingintraffic/readme.md
deleted file mode 100644
index 7a3b8c8e4429..000000000000
--- a/keyboards/1upkeyboards/sweet16/keymaps/ridingintraffic/readme.md
+++ /dev/null
@@ -1,10 +0,0 @@
-# Ridingtraffic's examples
-===
-This keymap has many features:
-3 layers
-Momentary layer switching
-16 pixel neopixel
-Unicode Enabled
-Tap dance enabled
-
-The rgb also updates depending on what layer you are on, and then flips back when done.
diff --git a/keyboards/1upkeyboards/sweet16/keymaps/ridingintraffic/rules.mk b/keyboards/1upkeyboards/sweet16/keymaps/ridingintraffic/rules.mk
deleted file mode 100644
index de441755318e..000000000000
--- a/keyboards/1upkeyboards/sweet16/keymaps/ridingintraffic/rules.mk
+++ /dev/null
@@ -1,5 +0,0 @@
-# turning on tap dance
-TAP_DANCE_ENABLE = yes
-RGBLIGHT_ENABLE = yes
-MOUSEKEY_ENABLE = no
-UNICODE_ENABLE = yes
\ No newline at end of file
diff --git a/keyboards/1upkeyboards/sweet16/keymaps/sebas/keymap.c b/keyboards/1upkeyboards/sweet16/keymaps/sebas/keymap.c
deleted file mode 100644
index 05cdc0cfb6cd..000000000000
--- a/keyboards/1upkeyboards/sweet16/keymaps/sebas/keymap.c
+++ /dev/null
@@ -1,23 +0,0 @@
-#include QMK_KEYBOARD_H
-#define ALT TG(_FUNC)
-
-enum layers {
- _KEYP,
- _FUNC
-};
-
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-[_KEYP]=LAYOUT_ortho_4x4(
- KC_P7, KC_P8, KC_P9, ALT,
- KC_P4, KC_P5, KC_P6, KC_PAST,
- KC_P1, KC_P2, KC_P3, KC_PMNS,
- KC_P0, KC_PDOT, KC_PENT, KC_PPLS
-),
-[_FUNC]=LAYOUT_ortho_4x4(
- KC_MPRV, KC_MPLY, KC_MNXT, _______,
- XXXXXXX, XXXXXXX, XXXXXXX, KC_NUM,
- KC_INS, KC_HOME, KC_PGUP, XXXXXXX,
- KC_DEL, KC_END, KC_PGDN, XXXXXXX
-)
-};
diff --git a/keyboards/1upkeyboards/sweet16v2/kb2040/config.h b/keyboards/1upkeyboards/sweet16v2/kb2040/config.h
index 37a85b4711dd..e4609962f1f8 100644
--- a/keyboards/1upkeyboards/sweet16v2/kb2040/config.h
+++ b/keyboards/1upkeyboards/sweet16v2/kb2040/config.h
@@ -16,8 +16,6 @@
#pragma once
-
-#define DYNAMIC_KEYMAP_LAYER_COUNT 10
#define RGB_MATRIX_LED_COUNT 20
#define RGB_MATRIX_KEYPRESSES
#define RGB_MATRIX_FRAMEBUFFER_EFFECTS
diff --git a/keyboards/1upkeyboards/sweet16v2/kb2040/info.json b/keyboards/1upkeyboards/sweet16v2/kb2040/info.json
index f1ac861c8c72..928c8106bf98 100644
--- a/keyboards/1upkeyboards/sweet16v2/kb2040/info.json
+++ b/keyboards/1upkeyboards/sweet16v2/kb2040/info.json
@@ -33,6 +33,9 @@
"rows": ["GP26", "GP1", "GP18", "GP5"]
},
"diode_direction": "COL2ROW",
+ "dynamic_keymap": {
+ "layer_count": 10
+ },
"encoder": {
"enabled": true,
"rotary": [
diff --git a/keyboards/1upkeyboards/sweet16v2/pro_micro/config.h b/keyboards/1upkeyboards/sweet16v2/pro_micro/config.h
index f773468d8f1e..e4609962f1f8 100644
--- a/keyboards/1upkeyboards/sweet16v2/pro_micro/config.h
+++ b/keyboards/1upkeyboards/sweet16v2/pro_micro/config.h
@@ -16,9 +16,6 @@
#pragma once
-
-#define DYNAMIC_KEYMAP_LAYER_COUNT 10
-
#define RGB_MATRIX_LED_COUNT 20
#define RGB_MATRIX_KEYPRESSES
#define RGB_MATRIX_FRAMEBUFFER_EFFECTS
diff --git a/keyboards/1upkeyboards/sweet16v2/pro_micro/info.json b/keyboards/1upkeyboards/sweet16v2/pro_micro/info.json
index a8696ab64c9e..87f2f3574c42 100644
--- a/keyboards/1upkeyboards/sweet16v2/pro_micro/info.json
+++ b/keyboards/1upkeyboards/sweet16v2/pro_micro/info.json
@@ -31,6 +31,9 @@
"rows": ["D1", "B5", "B4", "E6"]
},
"diode_direction": "COL2ROW",
+ "dynamic_keymap": {
+ "layer_count": 10
+ },
"encoder": {
"enabled": true,
"rotary": [
diff --git a/keyboards/25keys/zinc/keymaps/ginjake/config.h b/keyboards/25keys/zinc/keymaps/ginjake/config.h
deleted file mode 100644
index 2185dc9ebe4c..000000000000
--- a/keyboards/25keys/zinc/keymaps/ginjake/config.h
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
-This is the c configuration file for the keymap
-
-Copyright 2018 monksoffunk
-Copyright 2012 Jun Wako
-Copyright 2015 Jack Humbert
-
-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 .
-*/
-
-#pragma once
-
-// place overrides here
-// Selection of RGBLIGHT MODE to use.
-#if defined(LED_ANIMATIONS)
- #define RGBLIGHT_EFFECT_BREATHING
- #define RGBLIGHT_EFFECT_RAINBOW_MOOD
- #define RGBLIGHT_EFFECT_RAINBOW_SWIRL
- #define RGBLIGHT_EFFECT_SNAKE
- #define RGBLIGHT_EFFECT_KNIGHT
- #define RGBLIGHT_EFFECT_CHRISTMAS
- #define RGBLIGHT_EFFECT_STATIC_GRADIENT
- //#define RGBLIGHT_EFFECT_RGB_TEST
- //#define RGBLIGHT_EFFECT_ALTERNATING
-#endif
diff --git a/keyboards/25keys/zinc/keymaps/ginjake/keymap.c b/keyboards/25keys/zinc/keymaps/ginjake/keymap.c
deleted file mode 100644
index b7d0e5c93a1d..000000000000
--- a/keyboards/25keys/zinc/keymaps/ginjake/keymap.c
+++ /dev/null
@@ -1,368 +0,0 @@
-#include QMK_KEYBOARD_H
-
-extern keymap_config_t keymap_config;
-
-#ifdef RGBLIGHT_ENABLE
-//Following line allows macro to read current RGB settings
-extern rgblight_config_t rgblight_config;
-rgblight_config_t RGB_current_config;
-#endif
-
-extern uint8_t is_master;
-
-// Each layer gets a name for readability, which is then used in the keymap matrix below.
-// The underscores don't mean anything - you can have a layer called STUFF or any other name.
-// Layer names don't all need to be of the same length, obviously, and you can also skip them
-// entirely and just use numbers.
-enum layer_number {
- _QWERTY = 0,
- _COLEMAK,
- _DVORAK,
- _LOWER,
- _RAISE,
- _ADJUST
-};
-
-enum custom_keycodes {
- QWERTY = SAFE_RANGE,
- COLEMAK,
- DVORAK,
- LOWER,
- RAISE,
- ADJUST,
- BACKLIT,
- KANA,
- EISU,
- RGBRST,
- AQOURS, //サンシャインぴっかぴかモード
-};
-
-#ifdef RGBLIGHT_ENABLE
- //9色に変化するLEDのHSV各パラメータ
- int aqours_h[] = { 26, 340, 150, 0, 199, 220, 53, 265, 322};
- int aqours_s[] = {255, 165, 255, 255, 255, 350, 255, 255, 255};
- int aqours_v[] = {255, 255, 255, 255, 255, 255, 255, 255, 255};
- const int NEXT_COLOR_TIME = 2400; //次の色に切り替わるまでの時間
- const int NEXT_CHANGE_TARGET_TIME = 100; //次のキーに色が伝播するまでの時間
- bool aqours_mode = false;
- int aqours_next_color_timer_count = 0;
- int aqours_num = 0;
- int target_col = 0;
-
- //keyのmatrixの位置とLEDの番号を紐づける
- int combined_key_to_led[] =
- {
- 0,1,2,3,4,5,
- 11,10,9,8,7,6,
- 12,13,14,15,16,17,
- 23,22,21,20,19,18
- };
-#endif
-
-enum macro_keycodes {
- KC_SAMPLEMACRO,
-};
-
-//Macros
-#define M_SAMPLE M(KC_SAMPLEMACRO)
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- /* Qwerty
- * ,-----------------------------------------. ,-----------------------------------------.
- * | Tab | Q | W | E | R | T | | Y | U | I | O | P | Bksp |
- * |------+------+------+------+------+------| |------+------+------+------+------+------|
- * | Ctrl | A | S | D | F | G | | H | J | K | L | ; | ' |
- * |------+------+------+------+------+------| |------+------+------+------+------+------|
- * | Shift| Z | X | C | V | B | | N | M | , | . | / |Enter |
- * |------+------+------+------+------+------| |------+------+------+------+------+------|
- * | Esc |ADJUST| Win | Alt |LOWER |Space | | Space| RAISE| Left | Down | Up | Right|
- * `-----------------------------------------' `-----------------------------------------'
- */
-[_QWERTY] = LAYOUT_ortho_4x12(
- KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
- KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
- KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT ,
- KC_ESC, ADJUST, KC_LGUI, KC_LALT, 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 |
- * |------+------+------+------+------+------| |------+------+------+------+------+------|
- * | Ctrl | A | R | S | T | D | | H | N | E | I | O | ' |
- * |------+------+------+------+------+------| |------+------+------+------+------+------|
- * | Shift| Z | X | C | V | B | | K | M | , | . | / |Enter |
- * |------+------+------+------+------+------| |------+------+------+------+------+------|
- * | Esc |ADJUST| Alt | Win |LOWER |Space | | Space| RAISE| Left | Down | Up | Right|
- * `-----------------------------------------' `-----------------------------------------'
- */
- [_COLEMAK] = LAYOUT_ortho_4x12(
- KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC,
- KC_LCTL, 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 ,
- KC_ESC, ADJUST, 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 | Del |
- * |------+------+------+------+------+------| |------+------+------+------+------+------|
- * | Ctrl | A | O | E | U | I | | D | H | T | N | S | / |
- * |------+------+------+------+------+------| |------+------+------+------+------+------|
- * | Shift| ; | Q | J | K | X | | B | M | W | V | Z |Enter |
- * |------+------+------+------+------+------| |------+------+------+------+------+------|
- * | Esc |ADJUST| Alt | Win |LOWER |Space | | Space| RAISE| Left | Down | Up | Right|
- * `-----------------------------------------' `-----------------------------------------'
- */
- [_DVORAK] = LAYOUT_ortho_4x12(
- KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_DEL,
- KC_LCTL, 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 ,
- KC_ESC, ADJUST, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
- ),
-
- /* Lower
- * ,-----------------------------------------. ,-----------------------------------------.
- * | ~ | ! | @ | # | $ | % | | ^ | & | * | ( | ) | |
- * |------+------+------+------+------+------| |------+------+------+------+------+------|
- * | | | | | | | | - | _ | + | { | } | | |
- * |------+------+------+------+------+------| |------+------+------+------+------+------|
- * | | | | | | | | | | | Home | End | |
- * |------+------+------+------+------+------| |------+------+------+------+------+------|
- * | | | | | | | | | | Next | Vol- | Vol+ | Play |
- * `-----------------------------------------' `-----------------------------------------'
- */
- [_LOWER] = LAYOUT_ortho_4x12(
- KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, _______,
- _______, _______, _______, _______, _______, _______, KC_MINS, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_HOME, KC_END, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY
- ),
-
- /* Raise
- * ,-----------------------------------------. ,-----------------------------------------.
- * | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | Del |
- * |------+------+------+------+------+------| |------+------+------+------+------+------|
- * | | F1 | F2 | F3 | F4 | F5 | | F6 | - | = | [ | ] | \ |
- * |------+------+------+------+------+------| |------+------+------+------+------+------|
- * | | F7 | F8 | F9 | F10 | F11 | | F12 | | | | |
- * |------+------+------+------+------+------| |------+------+------+------+------+------|
- * | | | | | | | | | | Next | Vol- | Vol+ | Play |
- * `-----------------------------------------' `-----------------------------------------'
- */
- [_RAISE] = LAYOUT_ortho_4x12(
- KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL,
- _______, KC_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_MNXT, KC_VOLD, KC_VOLU, KC_MPLY
- ),
-
- /* Adjust (Lower + Raise)
- * ,-----------------------------------------. ,-----------------------------------------.
- * | | Reset|RGBRST|Aud on|Audoff| | | |Qwerty|Colemk|Dvorak| | Ins |
- * |------+------+------+------+------+------| |------+------+------+------+------+------|
- * |AQOURS|RGB ON| HUE+ | SAT+ | VAL+ | Mac | | Win | - | = |Print |ScLock|Pause |
- * |------+------+------+------+------+------| |------+------+------+------+------+------|
- * | | MODE | HUE- | SAT- | VAL- | | | | | | | | |
- * |------+------+------+------+------+------| |------+------+------+------+------+------|
- * | | | | EISU | EISU | EISU | | KANA | KANA | Home |PageDn|PageUp| End |
- * `-----------------------------------------' `-----------------------------------------'
- */
- [_ADJUST] = LAYOUT_ortho_4x12(
- _______, QK_BOOT, RGBRST, _______, _______, _______, _______, QWERTY, COLEMAK, DVORAK, _______, KC_INS,
- AQOURS, RGB_TOG, RGB_HUI, RGB_SAI, RGB_VAI, AG_NORM, AG_SWAP, KC_MINS, KC_EQL, KC_PSCR, KC_SCRL, KC_PAUS,
- _______, RGB_MOD, RGB_HUD, RGB_SAD, RGB_VAD, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, EISU, EISU, EISU, KANA, KANA, KC_HOME, KC_PGDN, KC_PGUP, KC_END
- )
-};
-
-// define variables for reactive RGB
-bool TOG_STATUS = false;
-
-// Setting ADJUST layer RGB back to default
-void update_tri_layer_RGB(uint8_t layer1, uint8_t layer2, uint8_t layer3) {
- if (IS_LAYER_ON(layer1) && IS_LAYER_ON(layer2)) {
- #ifdef RGBLIGHT_ENABLE
- rgblight_mode_noeeprom(RGB_current_config.mode);
- #endif
- layer_on(layer3);
- } else {
- layer_off(layer3);
- }
-}
-
-bool process_record_user(uint16_t keycode, keyrecord_t *record) {
- switch (keycode) {
- case QWERTY:
- if (record->event.pressed) {
- set_single_persistent_default_layer(_QWERTY);
- }
- return false;
- break;
- case COLEMAK:
- if (record->event.pressed) {
- set_single_persistent_default_layer(_COLEMAK);
- }
- return false;
- break;
- case DVORAK:
- if (record->event.pressed) {
- set_single_persistent_default_layer(_DVORAK);
- }
- return false;
- break;
-
- case LOWER:
- if (record->event.pressed) {
- //not sure how to have keyboard check mode and set it to a variable, so my work around
- //uses another variable that would be set to true after the first time a reactive key is pressed.
- if (TOG_STATUS) { //TOG_STATUS checks is another reactive key currently pressed, only changes RGB mode if returns false
- } else {
- TOG_STATUS = !TOG_STATUS;
- #ifdef RGBLIGHT_ENABLE
- rgblight_mode_noeeprom(16);
- #endif
- }
- layer_on(_LOWER);
- update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST);
- } else {
- #ifdef RGBLIGHT_ENABLE
- rgblight_mode_noeeprom(RGB_current_config.mode); // revert RGB to initial mode prior to RGB mode change
- #endif
- TOG_STATUS = false;
- layer_off(_LOWER);
- update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST);
- }
- return false;
- break;
-
- case RAISE:
- if (record->event.pressed) {
- //not sure how to have keyboard check mode and set it to a variable, so my work around
- //uses another variable that would be set to true after the first time a reactive key is pressed.
- if (TOG_STATUS) { //TOG_STATUS checks is another reactive key currently pressed, only changes RGB mode if returns false
- } else {
- TOG_STATUS = !TOG_STATUS;
- #ifdef RGBLIGHT_ENABLE
- rgblight_mode_noeeprom(15);
- #endif
- }
- layer_on(_RAISE);
- update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST);
- } else {
- #ifdef RGBLIGHT_ENABLE
- rgblight_mode_noeeprom(RGB_current_config.mode); // revert RGB to initial mode prior to RGB mode change
- #endif
- layer_off(_RAISE);
- TOG_STATUS = false;
- update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST);
- }
- return false;
- break;
-
- case ADJUST:
- if (record->event.pressed) {
- layer_on(_ADJUST);
- } else {
- layer_off(_ADJUST);
- }
- return false;
- break;
- //led operations - RGB mode change now updates the RGB_current_mode to allow the right RGB mode to be set after reactive keys are released
- case RGB_MOD:
- #ifdef RGBLIGHT_ENABLE
- if (record->event.pressed) {
- rgblight_mode_noeeprom(RGB_current_config.mode);
- rgblight_step();
- RGB_current_config.mode = rgblight_config.mode;
- }
- #endif
- return false;
- break;
-
- case EISU:
- if (record->event.pressed) {
- if(keymap_config.swap_lalt_lgui==false){
- register_code(KC_LNG2);
- }else{
- SEND_STRING(SS_LALT("`"));
- }
- } else {
- unregister_code(KC_LNG2);
- }
- return false;
- break;
- case KANA:
- if (record->event.pressed) {
- if(keymap_config.swap_lalt_lgui==false){
- register_code(KC_LNG1);
- }else{
- SEND_STRING(SS_LALT("`"));
- }
- } else {
- unregister_code(KC_LNG1);
- }
- return false;
- break;
- case AQOURS:
- #ifdef RGBLIGHT_ENABLE
- if (record->event.pressed) {
- aqours_mode = !aqours_mode;
- }
- #endif
- break;
- case RGBRST:
- #ifdef RGBLIGHT_ENABLE
- if (record->event.pressed) {
- eeconfig_update_rgblight_default();
- rgblight_enable();
- RGB_current_config = rgblight_config;
- }
- #endif
- break;
- }
- return true;
-}
-
-#ifdef RGBLIGHT_ENABLE
-
- void aqours_led(void) {
- aqours_next_color_timer_count++;
- //一定間隔で色が変化
- if (aqours_next_color_timer_count > NEXT_COLOR_TIME) {
- aqours_num++;
- aqours_next_color_timer_count = 0;
- target_col = 0;
- if (aqours_num == ARRAY_SIZE(aqours_h)) {
- aqours_num = 0;
- }
- }
-
- //キー毎に時間差で色が変化していく
- if (aqours_next_color_timer_count % NEXT_CHANGE_TARGET_TIME == 0) {
- if (target_col < MATRIX_COLS) {
- sethsv(aqours_h[aqours_num], aqours_s[aqours_num], aqours_v[aqours_num], (LED_TYPE *)&led[target_col]);
- sethsv(aqours_h[aqours_num], aqours_s[aqours_num], aqours_v[aqours_num], (LED_TYPE *)&led[11 - target_col]);
- sethsv(aqours_h[aqours_num], aqours_s[aqours_num], aqours_v[aqours_num], (LED_TYPE *)&led[12 + target_col]);
- sethsv(aqours_h[aqours_num], aqours_s[aqours_num], aqours_v[aqours_num], (LED_TYPE *)&led[23 - target_col]);
- target_col++;
- rgblight_set();
- }
- }
- }
-#endif
-
-void matrix_scan_user(void) {
- #ifdef RGBLIGHT_ENABLE
- if (aqours_mode) {
- aqours_led();
- }
- #endif
-}
-
-void matrix_init_user(void) {
- #ifdef RGBLIGHT_ENABLE
- rgblight_init();
- RGB_current_config = rgblight_config;
- #endif
-}
diff --git a/keyboards/25keys/zinc/keymaps/ginjake/readme_jp.md b/keyboards/25keys/zinc/keymaps/ginjake/readme_jp.md
deleted file mode 100644
index dfedb37c15c1..000000000000
--- a/keyboards/25keys/zinc/keymaps/ginjake/readme_jp.md
+++ /dev/null
@@ -1,123 +0,0 @@
-# The Default Zinc Layout
-## 配列
-
-### Qwerty配列
-
-```
- ,-----------------------------------------. ,-----------------------------------------.
- | Tab | Q | W | E | R | T | | Y | U | I | O | P | Bksp |
- |------+------+------+------+------+------| |------+------+------+------+------+------|
- | Ctrl | A | S | D | F | G | | H | J | K | L | ; | ' |
- |------+------+------+------+------+------| |------+------+------+------+------+------|
- | Shift| Z | X | C | V | B | | N | M | , | . | / |Enter |
- |------+------+------+------+------+------| |------+------+------+------+------+------|
- | Esc | Fn | Alt | Win |Lower |Space | | Space| Raise| Left | Down | Up | Right|
- `------------------------------------------ ------------------------------------------'
-```
-
-### Colemak
-
-```
- ,-----------------------------------------. ,-----------------------------------------.
- | Tab | Q | W | F | P | G | | J | L | U | Y | ; | Bksp |
- |------+------+------+------+------+------| |------+------+------+------+------+------|
- | Ctrl | A | R | S | T | D | | H | N | E | I | O | ' |
- |------+------+------+------+------+------| |------+------+------+------+------+------|
- | Shift| Z | X | C | V | B | | K | M | , | . | / |Enter |
- |------+------+------+------+------+------| |------+------+------+------+------+------|
- | Esc |ADJUST| Alt | Win |LOWER |Space | | Space| RAISE| Left | Down | Up | Right|
- `------------------------------------------ ------------------------------------------'
-```
-
-### Dvorak
-
-```
- ,-----------------------------------------. ,-----------------------------------------.
- | Tab | ' | , | . | P | Y | | F | G | C | R | L | Del |
- |------+------+------+------+------+------| |------+------+------+------+------+------|
- | Ctrl | A | O | E | U | I | | D | H | T | N | S | / |
- |------+------+------+------+------+------| |------+------+------+------+------+------|
- | Shift| ; | Q | J | K | X | | B | M | W | V | Z |Enter |
- |------+------+------+------+------+------| |------+------+------+------+------+------|
- | Esc |ADJUST| Alt | Win |LOWER |Space | | Space| RAISE| Left | Down | Up | Right|
- `-----------------------------------------' `-----------------------------------------'
-```
-
-
-## コンパイルの仕方
-
-コンパイルは、qmk_firmware のトップディレクトリで行います。
-
-```
-$ cd qmk_firmware
-```
-qmk_firmwareでは各キーボードのコンパイルは、`<キーボード名>:<キーマップ名>`という指定で行います。
-
-```
-$ make zinc:default
-```
-
-キーボードへの書き込みまで同時に行うには下記のように`:avrdude`を付けます。
-
-```
-$ make zinc:default:avrdude
-```
-
-コンパイル結果と中間生成物を消去したい場合は以下のようにします。
-
-```
-$ make zinc:default:clean
-```
-
-## カスタマイズ
-
-コマンドラインからオプションを指定してビルドすることが出来ます。
-
-```
-# Zinc keyboard 'default' keymap: convenient command line option
-make ZINC= zinc:defualt
-# option= back | under | na | ios
-# ex.
-# make ZINC=under zinc:defualt
-# make ZINC=under,ios zinc:defualt
-# make ZINC=back zinc:default
-# make ZINC=back,na zinc:default
-# make ZINC=back,ios zinc:default
-```
-
-あるいは`qmk_firmware/keyboards/zinc/rev1/keymaps/default/rules.mk` の以下の部分を直接編集して機能を有効化してください。
-
-```
-# Zinc keyboard customize
-LED_BACK_ENABLE = no # LED backlight (Enable SK6812mini backlight)
-LED_UNDERGLOW_ENABLE = no # LED underglow (Enable WS2812 RGB underlight)
-LED_ANIMATIONS = yes # LED animations
-IOS_DEVICE_ENABLE = no # connect to IOS device (iPad,iPhone)
-
-
-```
-
-## RGB backlight を有効にする
-
-rules.mk の下記の部分を編集して no を yes に変更してください。
-```
-LED_BACK_ENABLE = yes # LED backlight (Enable SK6812mini backlight)
-```
-
-
-## RGB Underglow を有効にする
-
-rules.mk の下記の部分を編集して no を yes に変更してください。
-```
-LED_UNDERGLOW_ENABLE = yes # LED underglow (Enable WS2812 RGB underlight.)
-```
-
-
-## iPad/iPhoneサポートを有効にする。
-
-rules.mk の下記の部分を編集して no を yes に変更してください。
-RBG Underglow や RGBバックライトの輝度を抑えて、iPad, iPhone にも接続できるようになります。
-
-```
-IOS_DEVICE_ENABLE = no # connect to IOS device (iPad,iPhone)
-```
\ No newline at end of file
diff --git a/keyboards/25keys/zinc/keymaps/ginjake/rules.mk b/keyboards/25keys/zinc/keymaps/ginjake/rules.mk
deleted file mode 100644
index 4bbd3e582ce0..000000000000
--- a/keyboards/25keys/zinc/keymaps/ginjake/rules.mk
+++ /dev/null
@@ -1,112 +0,0 @@
-# Build Options
-# change to "no" to disable the options, or define them in the Makefile in
-# the appropriate keymap folder that will get included automatically
-#
-BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite
-MOUSEKEY_ENABLE = no # Mouse keys
-EXTRAKEY_ENABLE = yes # Audio control and System control
-CONSOLE_ENABLE = no # Console for debug
-COMMAND_ENABLE = no # Commands for debug and configuration
-NKRO_ENABLE = no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
-BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
-MIDI_ENABLE = no # MIDI controls
-AUDIO_ENABLE = no # Audio output on port C6
-UNICODE_ENABLE = no # Unicode
-BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
-RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
-SWAP_HANDS_ENABLE = no # Enable one-hand typing
-LTO_ENABLE = no # if firmware size over limit, try this option
-
-define ZINC_CUSTOMISE_MSG
- $(info Zinc customize)
- $(info - LED_BACK_ENABLE=$(LED_BACK_ENABLE))
- $(info - LED_UNDERGLOW_ENABLE=$(LED_UNDERGLOW_ENABLE))
- $(info - LED_BOTH_ENABLE=$(LED_BOTH_ENABLE))
- $(info - LED_RGB_CONT=$(LED_RGB_CONT))
- $(info - LED_ANIMATION=$(LED_ANIMATIONS))
- $(info - IOS_DEVICE_ENABLE=$(IOS_DEVICE_ENABLE))
-endef
-
-# Zinc keyboard customize
-LED_BACK_ENABLE = no # LED backlight (Enable SK6812mini backlight)
-LED_UNDERGLOW_ENABLE = no # LED underglow (Enable WS2812 RGB underlight)
-LED_BOTH_ENABLE = no # LED backlight and underglow
-LED_RGB_CONT = no # LED continuous backlight or/and underglow between left Zinc and right Zinc
-LED_ANIMATIONS = yes # LED animations
-IOS_DEVICE_ENABLE = no # connect to IOS device (iPad,iPhone)
-
-#### LED_BACK_ENABLE and LED_UNDERGLOW_ENABLE.
-#### Do not enable these with audio at the same time.
-
-### Zinc keyboard 'default' keymap: convenient command line option
-## make ZINC= zinc:defualt
-## option= back | under | both | cont | na | ios
-## ex.
-## make ZINC=under zinc:defualt
-## make ZINC=under,ios zinc:defualt
-## make ZINC=back zinc:default
-## make ZINC=back,na zinc:default
-## make ZINC=back,ios zinc:default
-
-ifneq ($(strip $(ZINC)),)
- ifeq ($(findstring back,$(ZINC)), back)
- LED_BACK_ENABLE = yes
- endif
- ifeq ($(findstring under,$(ZINC)), under)
- LED_UNDERGLOW_ENABLE = yes
- endif
- ifeq ($(findstring both,$(ZINC)), both)
- LED_BOTH_ENABLE = yes
- endif
- ifeq ($(findstring cont,$(ZINC)), cont)
- LED_RGB_CONT = yes
- endif
- ifeq ($(findstring na,$(ZINC)), na)
- LED_ANIMATIONS = no
- endif
- ifeq ($(findstring ios,$(ZINC)), ios)
- IOS_DEVICE_ENABLE = yes
- endif
- $(eval $(call ZINC_CUSTOMISE_MSG))
- $(info )
-endif
-
-ifeq ($(strip $(LED_BACK_ENABLE)), yes)
- RGBLIGHT_ENABLE = yes
- ifeq ($(strip $(LED_UNDERGLOW_ENABLE)), yes)
- OPT_DEFS += -DRGBLED_BOTH
- $(info LED_BOTH_ENABLE option is enabled instead of LED_BACK_ENABLE and LED_UNDERGLOW_ENABLE)
- else
- OPT_DEFS += -DRGBLED_BACK
- endif
-else ifeq ($(strip $(LED_UNDERGLOW_ENABLE)), yes)
- RGBLIGHT_ENABLE = yes
-else
- RGBLIGHT_ENABLE = no
-endif
-
-ifeq ($(strip $(LED_BOTH_ENABLE)), yes)
- RGBLIGHT_ENABLE = yes
- OPT_DEFS += -DRGBLED_BOTH
-endif
-
-ifeq ($(strip $(LED_RGB_CONT)), yes)
- OPT_DEFS += -DRGBLED_CONT
-endif
-
-ifeq ($(strip $(IOS_DEVICE_ENABLE)), yes)
- OPT_DEFS += -DIOS_DEVICE_ENABLE
-endif
-
-ifeq ($(strip $(LED_ANIMATIONS)), yes)
- OPT_DEFS += -DLED_ANIMATIONS
-endif
-
-# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
-SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-
-
-# Uncomment these for debugging
-# $(info -- RGBLIGHT_ENABLE=$(RGBLIGHT_ENABLE))
-# $(info -- OPT_DEFS=$(OPT_DEFS))
-# $(info )
diff --git a/keyboards/25keys/zinc/keymaps/monks/config.h b/keyboards/25keys/zinc/keymaps/monks/config.h
deleted file mode 100644
index 2185dc9ebe4c..000000000000
--- a/keyboards/25keys/zinc/keymaps/monks/config.h
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
-This is the c configuration file for the keymap
-
-Copyright 2018 monksoffunk
-Copyright 2012 Jun Wako
-Copyright 2015 Jack Humbert
-
-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 .
-*/
-
-#pragma once
-
-// place overrides here
-// Selection of RGBLIGHT MODE to use.
-#if defined(LED_ANIMATIONS)
- #define RGBLIGHT_EFFECT_BREATHING
- #define RGBLIGHT_EFFECT_RAINBOW_MOOD
- #define RGBLIGHT_EFFECT_RAINBOW_SWIRL
- #define RGBLIGHT_EFFECT_SNAKE
- #define RGBLIGHT_EFFECT_KNIGHT
- #define RGBLIGHT_EFFECT_CHRISTMAS
- #define RGBLIGHT_EFFECT_STATIC_GRADIENT
- //#define RGBLIGHT_EFFECT_RGB_TEST
- //#define RGBLIGHT_EFFECT_ALTERNATING
-#endif
diff --git a/keyboards/25keys/zinc/keymaps/monks/keymap.c b/keyboards/25keys/zinc/keymaps/monks/keymap.c
deleted file mode 100644
index 5c15fb48ca6e..000000000000
--- a/keyboards/25keys/zinc/keymaps/monks/keymap.c
+++ /dev/null
@@ -1,256 +0,0 @@
-#include QMK_KEYBOARD_H
-
-extern keymap_config_t keymap_config;
-
-#ifdef RGBLIGHT_ENABLE
-//Following line allows macro to read current RGB settings
-extern rgblight_config_t rgblight_config;
-rgblight_config_t RGB_current_config;
-#endif
-
-extern uint8_t is_master;
-
-// Each layer gets a name for readability, which is then used in the keymap matrix below.
-// The underscores don't mean anything - you can have a layer called STUFF or any other name.
-// Layer names don't all need to be of the same length, obviously, and you can also skip them
-// entirely and just use numbers.
-enum layer_number {
- _QWERTY = 0,
- _LOWER,
- _RAISE,
- _ADJUST
-};
-
-enum custom_keycodes {
- QWERTY = SAFE_RANGE,
- COLEMAK,
- DVORAK,
- LOWER,
- RAISE,
- ADJUST,
- BACKLIT,
- KANA,
- EISU,
- RGBRST
-};
-
-enum macro_keycodes {
- KC_SAMPLEMACRO,
-};
-
-
-//Macros
-#define M_SAMPLE M(KC_SAMPLEMACRO)
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- /* Qwerty
- * ,-----------------------------------------. ,-----------------------------------------.
- * | Tab | Q | W | E | R | T | | Y | U | I | O | P | Bksp |
- * |------+------+------+------+------+------| |------+------+------+------+------+------|
- * | Ctrl | A | S | D | F | G | | H | J | K | L | ; | ' |
- * |------+------+------+------+------+------| |------+------+------+------+------+------|
- * | Shift| Z | X | C | V | B | | N | M | , | . | / |Enter |
- * |------+------+------+------+------+------| |------+------+------+------+------+------|
- * | Esc |ADJUST| Alt | GUI |LOWER |Space | | Space| RAISE| KANA | Left | Down | Right|
- * `-----------------------------------------' `-----------------------------------------'
- */
-[_QWERTY] = LAYOUT_ortho_4x12(
- KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
- KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
- KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT ,
- KC_ESC, ADJUST, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KANA, KC_LEFT, KC_DOWN, KC_RGHT
- ),
-
- /* Lower
- * ,-----------------------------------------. ,-----------------------------------------.
- * | ~ | ! | @ | # | $ | % | | ^ | & | * | ( | ) | |
- * |------+------+------+------+------+------| |------+------+------+------+------+------|
- * | | | | | | | | - | _ | + | { | } | | |
- * |------+------+------+------+------+------| |------+------+------+------+------+------|
- * | | | | | | | | | | | | UP | |
- * |------+------+------+------+------+------| |------+------+------+------+------+------|
- * | | | | | | | | | | | | | |
- * `-----------------------------------------' `-----------------------------------------'
- */
- [_LOWER] = LAYOUT_ortho_4x12(
- KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, _______,
- _______, _______, _______, _______, _______, _______, KC_MINS, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_UP, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
- ),
-
- /* Raise
- * ,-----------------------------------------. ,-----------------------------------------.
- * | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | Del |
- * |------+------+------+------+------+------| |------+------+------+------+------+------|
- * | | F1 | F2 | F3 | F4 | F5 | | F6 | - | = | [ | ] | \ |
- * |------+------+------+------+------+------| |------+------+------+------+------+------|
- * | | F7 | F8 | F9 | F10 | F11 | | F12 | | | | ? | |
- * |------+------+------+------+------+------| |------+------+------+------+------+------|
- * | | | | | | | | | | Next | Vol- | Vol+ | Play |
- * `-----------------------------------------' `-----------------------------------------'
- */
- [_RAISE] = LAYOUT_ortho_4x12(
- KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL,
- _______, KC_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, _______, _______, _______, S(KC_SLSH), _______,
- _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY
- ),
-
- /* Adjust (Lower + Raise)
- * ,-----------------------------------------. ,-----------------------------------------.
- * | | Reset|RGBRST| | | | | | | | | | Ins |
- * |------+------+------+------+------+------| |------+------+------+------+------+------|
- * | |RGB ON| HUE+ | SAT+ | VAL+ | Mac | | Win | - | = |Print |ScLock|Pause |
- * |------+------+------+------+------+------| |------+------+------+------+------+------|
- * | | MODE | HUE- | SAT- | VAL- | | | | | | |PageUp| |
- * |------+------+------+------+------+------| |------+------+------+------+------+------|
- * | | | | EISU | EISU | EISU | | KANA | KANA | KANA | Home |PageDn| End |
- * `-----------------------------------------' `-----------------------------------------'
- */
- [_ADJUST] = LAYOUT_ortho_4x12(
- _______, QK_BOOT, RGBRST, _______, _______, _______, _______, _______, _______, _______, _______, KC_INS,
- _______, RGB_TOG, RGB_HUI, RGB_SAI, RGB_VAI, AG_NORM, AG_SWAP, KC_MINS, KC_EQL, KC_PSCR, KC_SCRL, KC_PAUS,
- _______, RGB_MOD, RGB_HUD, RGB_SAD, RGB_VAD, _______, _______, _______, _______, _______, KC_PGUP, _______,
- _______, _______, _______, EISU, EISU, EISU, KANA, KANA, KANA, KC_HOME, KC_PGDN, KC_END
- )
-};
-
-// define variables for reactive RGB
-bool TOG_STATUS = false;
-
-
-// Setting ADJUST layer RGB back to default
-void update_tri_layer_RGB(uint8_t layer1, uint8_t layer2, uint8_t layer3) {
- if (IS_LAYER_ON(layer1) && IS_LAYER_ON(layer2)) {
- #ifdef RGBLIGHT_ENABLE
- rgblight_mode_noeeprom(RGB_current_config.mode);
- #endif
- layer_on(layer3);
- } else {
- layer_off(layer3);
- }
-}
-
-bool process_record_user(uint16_t keycode, keyrecord_t *record) {
- switch (keycode) {
- case QWERTY:
- if (record->event.pressed) {
- set_single_persistent_default_layer(_QWERTY);
- }
- return false;
- break;
-
- case LOWER:
- if (record->event.pressed) {
- //not sure how to have keyboard check mode and set it to a variable, so my work around
- //uses another variable that would be set to true after the first time a reactive key is pressed.
- if (TOG_STATUS) { //TOG_STATUS checks is another reactive key currently pressed, only changes RGB mode if returns false
- } else {
- TOG_STATUS = !TOG_STATUS;
- #ifdef RGBLIGHT_ENABLE
- rgblight_mode_noeeprom(16);
- #endif
- }
- layer_on(_LOWER);
- update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST);
- } else {
- #ifdef RGBLIGHT_ENABLE
- rgblight_mode_noeeprom(RGB_current_config.mode); // revert RGB to initial mode prior to RGB mode change
- #endif
- TOG_STATUS = false;
- layer_off(_LOWER);
- update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST);
- }
- return false;
- break;
-
- case RAISE:
- if (record->event.pressed) {
- //not sure how to have keyboard check mode and set it to a variable, so my work around
- //uses another variable that would be set to true after the first time a reactive key is pressed.
- if (TOG_STATUS) { //TOG_STATUS checks is another reactive key currently pressed, only changes RGB mode if returns false
- } else {
- TOG_STATUS = !TOG_STATUS;
- #ifdef RGBLIGHT_ENABLE
- rgblight_mode_noeeprom(15);
- #endif
- }
- layer_on(_RAISE);
- update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST);
- } else {
- #ifdef RGBLIGHT_ENABLE
- rgblight_mode_noeeprom(RGB_current_config.mode); // revert RGB to initial mode prior to RGB mode change
- #endif
- layer_off(_RAISE);
- TOG_STATUS = false;
- update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST);
- }
- return false;
- break;
-
- case ADJUST:
- if (record->event.pressed) {
- layer_on(_ADJUST);
- } else {
- layer_off(_ADJUST);
- }
- return false;
- break;
- //led operations - RGB mode change now updates the RGB_current_mode to allow the right RGB mode to be set after reactive keys are released
- case RGB_MOD:
- #ifdef RGBLIGHT_ENABLE
- if (record->event.pressed) {
- rgblight_mode_noeeprom(RGB_current_config.mode);
- rgblight_step();
- RGB_current_config.mode = rgblight_config.mode;
- }
- #endif
- return false;
- break;
-
- case EISU:
- if (record->event.pressed) {
- if(keymap_config.swap_lalt_lgui==false){
- register_code(KC_LNG2);
- }else{
- SEND_STRING(SS_LALT("`"));
- }
- } else {
- unregister_code(KC_LNG2);
- }
- return false;
- break;
- case KANA:
- if (record->event.pressed) {
- if(keymap_config.swap_lalt_lgui==false){
- register_code(KC_LNG1);
- }else{
- SEND_STRING(SS_LALT("`"));
- }
- } else {
- unregister_code(KC_LNG1);
- }
- return false;
- break;
-
- case RGBRST:
- #ifdef RGBLIGHT_ENABLE
- if (record->event.pressed) {
- eeconfig_update_rgblight_default();
- rgblight_enable();
- RGB_current_config = rgblight_config;
- }
- #endif
- break;
- }
- return true;
-}
-
-
-void matrix_init_user(void) {
- #ifdef RGBLIGHT_ENABLE
- rgblight_init();
- RGB_current_config = rgblight_config;
- #endif
-}
diff --git a/keyboards/25keys/zinc/keymaps/monks/readme_jp.md b/keyboards/25keys/zinc/keymaps/monks/readme_jp.md
deleted file mode 100644
index e518eb7696df..000000000000
--- a/keyboards/25keys/zinc/keymaps/monks/readme_jp.md
+++ /dev/null
@@ -1,103 +0,0 @@
-# monksoffunk's personal zinc Layout
-## 配列
-
-### Qwerty配列
-
-```
- ,-----------------------------------------. ,-----------------------------------------.
- | Tab | Q | W | E | R | T | | Y | U | I | O | P | Bksp |
- |------+------+------+------+------+------| |------+------+------+------+------+------|
- | Ctrl | A | S | D | F | G | | H | J | K | L | ; | ' |
- |------+------+------+------+------+------| |------+------+------+------+------+------|
- | Shift| Z | X | C | V | B | | N | M | , | . | / |Enter |
- |------+------+------+------+------+------| |------+------+------+------+------+------|
- | Esc |ADJUST| Alt | GUI |LOWER |Space | | Space| RAISE| KANA | Left | Down | Right|
- `------------------------------------------ ------------------------------------------'
-```
-
-KANAキーを独立させ、UPキーをLOWER+スラッシュに当てています。そのほかデフォルトからレイヤーをかなりいじっています。
-また、RGB LEDがアンコメントしてありますので、実装していない場合はソースを見て適宜コメントアウトしてください。
-
-## コンパイルの仕方
-
-コンパイルは、qmk_firmware のトップディレクトリで行います。
-
-```
-$ cd qmk_firmware
-```
-qmk_firmwareでは各キーボードのコンパイルは、`<キーボード名>:<キーマップ名>`という指定で行います。
-
-```
-$ make zinc:monks
-```
-
-キーボードへの書き込みまで同時に行うには下記のように`:avrdude`を付けます。
-
-```
-$ make zinc:monks:avrdude
-```
-
-コンパイル結果と中間生成物を消去したい場合は以下のようにします。
-
-```
-$ make zinc:monks:clean
-```
-
-なお、avrdudeではなくQMK Toolbox(GUIツール)を使う方法もあります。
-
-https://github.com/qmk/qmk_toolbox/releases
-
-その場合は、$ make zinc:monksでビルドした成果物をQMK Toolboxから指定してください。
-
-## カスタマイズ
-
-コマンドラインからオプションを指定してビルドすることが出来ます。
-
-```
-# Zinc keyboard 'monks' keymap: convenient command line option
-make ZINC= zinc:monks
-# option= back | under | na | ios
-# ex.
-# make ZINC=under zinc:monks
-# make ZINC=under,ios zinc:monks
-# make ZINC=back zinc:monks
-# make ZINC=back,na zinc:monks
-# make ZINC=back,ios zinc:monks
-```
-
-あるいは`qmk_firmware/keyboards/zinc/rev1/keymaps/monks/rules.mk` の以下の部分を編集して機能を有効化してください。
-
-```
-# Zinc keyboard customize
-LED_BACK_ENABLE = no # LED backlight (Enable SK6812mini backlight)
-LED_UNDERGLOW_ENABLE = no # LED underglow (Enable WS2812 RGB underlight)
-LED_ANIMATIONS = yes # LED animations
-IOS_DEVICE_ENABLE = no # connect to IOS device (iPad,iPhone)
-
-
-```
-
-## RGB backlight を有効にする
-
-rules.mk の下記の部分を編集して no を yes に変更してください。
-```
-LED_BACK_ENABLE = yes # LED backlight (Enable SK6812mini backlight)
-```
-
-
-## RGB Underglow を有効にする
-
-rules.mk の下記の部分を編集して no を yes に変更してください。
-```
-LED_UNDERGLOW_ENABLE = yes # LED underglow (Enable WS2812 RGB underlight)
-```
-
-
-## iPad/iPhoneサポートを有効にする。
-
-rules.mk の下記の部分を編集して no を yes に変更してください。
-RBG Underglow や RGBバックライトの輝度を抑えて、iPad, iPhone にも接続できるようになります。
-
-```
-IOS_DEVICE_ENABLE = no # connect to IOS device (iPad,iPhone)
-```
diff --git a/keyboards/25keys/zinc/keymaps/monks/rules.mk b/keyboards/25keys/zinc/keymaps/monks/rules.mk
deleted file mode 100644
index d37d2b6d1faf..000000000000
--- a/keyboards/25keys/zinc/keymaps/monks/rules.mk
+++ /dev/null
@@ -1,111 +0,0 @@
-# Build Options
-# change to "no" to disable the options, or define them in the Makefile in
-# the appropriate keymap folder that will get included automatically
-#
-BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite
-MOUSEKEY_ENABLE = no # Mouse keys
-EXTRAKEY_ENABLE = yes # Audio control and System control
-CONSOLE_ENABLE = no # Console for debug
-COMMAND_ENABLE = no # Commands for debug and configuration
-NKRO_ENABLE = no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
-BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
-MIDI_ENABLE = no # MIDI controls
-AUDIO_ENABLE = no # Audio output on port C6
-UNICODE_ENABLE = no # Unicode
-BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
-RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
-SWAP_HANDS_ENABLE = no # Enable one-hand typing
-LTO_ENABLE = no # if firmware size over limit, try this option
-
-define ZINC_CUSTOMISE_MSG
- $(info Zinc customize)
- $(info - LED_BACK_ENABLE=$(LED_BACK_ENABLE))
- $(info - LED_UNDERGLOW_ENABLE=$(LED_UNDERGLOW_ENABLE))
- $(info - LED_BOTH_ENABLE=$(LED_BOTH_ENABLE))
- $(info - LED_RGB_CONT=$(LED_RGB_CONT))
- $(info - LED_ANIMATION=$(LED_ANIMATIONS))
- $(info - IOS_DEVICE_ENABLE=$(IOS_DEVICE_ENABLE))
-endef
-
-# Zinc keyboard customize
-LED_BACK_ENABLE = no # LED backlight (Enable SK6812mini backlight)
-LED_UNDERGLOW_ENABLE = no # LED underglow (Enable WS2812 RGB underlight)
-LED_BOTH_ENABLE = no # LED backlight and underglow
-LED_RGB_CONT = no # LED continuous backlight or/and underglow between left Zinc and right Zinc
-LED_ANIMATIONS = yes # LED animations
-IOS_DEVICE_ENABLE = no # connect to IOS device (iPad,iPhone)
-
-#### LED_BACK_ENABLE and LED_UNDERGLOW_ENABLE.
-#### Do not enable these with audio at the same time.
-
-### Zinc keyboard 'default' keymap: convenient command line option
-## make ZINC= zinc:defualt
-## option= back | under | both | cont | na | ios
-## ex.
-## make ZINC=under zinc:defualt
-## make ZINC=under,ios zinc:defualt
-## make ZINC=back zinc:default
-## make ZINC=back,na zinc:default
-## make ZINC=back,ios zinc:default
-
-ifneq ($(strip $(ZINC)),)
- ifeq ($(findstring back,$(ZINC)), back)
- LED_BACK_ENABLE = yes
- endif
- ifeq ($(findstring under,$(ZINC)), under)
- LED_UNDERGLOW_ENABLE = yes
- endif
- ifeq ($(findstring both,$(ZINC)), both)
- LED_BOTH_ENABLE = yes
- endif
- ifeq ($(findstring cont,$(ZINC)), cont)
- LED_RGB_CONT = yes
- endif
- ifeq ($(findstring na,$(ZINC)), na)
- LED_ANIMATIONS = no
- endif
- ifeq ($(findstring ios,$(ZINC)), ios)
- IOS_DEVICE_ENABLE = yes
- endif
- $(eval $(call ZINC_CUSTOMISE_MSG))
- $(info )
-endif
-
-ifeq ($(strip $(LED_BACK_ENABLE)), yes)
- RGBLIGHT_ENABLE = yes
- ifeq ($(strip $(LED_UNDERGLOW_ENABLE)), yes)
- OPT_DEFS += -DRGBLED_BOTH
- $(info LED_BOTH_ENABLE option is enabled instead of LED_BACK_ENABLE and LED_UNDERGLOW_ENABLE)
- else
- OPT_DEFS += -DRGBLED_BACK
- endif
-else ifeq ($(strip $(LED_UNDERGLOW_ENABLE)), yes)
- RGBLIGHT_ENABLE = yes
-else
- RGBLIGHT_ENABLE = no
-endif
-
-ifeq ($(strip $(LED_BOTH_ENABLE)), yes)
- RGBLIGHT_ENABLE = yes
- OPT_DEFS += -DRGBLED_BOTH
-endif
-
-ifeq ($(strip $(LED_RGB_CONT)), yes)
- OPT_DEFS += -DRGBLED_CONT
-endif
-
-ifeq ($(strip $(IOS_DEVICE_ENABLE)), yes)
- OPT_DEFS += -DIOS_DEVICE_ENABLE
-endif
-
-ifeq ($(strip $(LED_ANIMATIONS)), yes)
- OPT_DEFS += -DLED_ANIMATIONS
-endif
-
-# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
-SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-
-# Uncomment these for debugging
-# $(info -- RGBLIGHT_ENABLE=$(RGBLIGHT_ENABLE))
-# $(info -- OPT_DEFS=$(OPT_DEFS))
-# $(info )
diff --git a/keyboards/25keys/zinc/keymaps/toshi0383/config.h b/keyboards/25keys/zinc/keymaps/toshi0383/config.h
deleted file mode 100644
index 0d53d44247d5..000000000000
--- a/keyboards/25keys/zinc/keymaps/toshi0383/config.h
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
-This is the c configuration file for the keymap
-
-Copyright 2019 Toshihiro Suzuki
-Copyright 2018 monksoffunk
-Copyright 2012 Jun Wako
-Copyright 2015 Jack Humbert
-
-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 .
-*/
-
-#pragma once
-
-// place overrides here
-// Selection of RGBLIGHT MODE to use.
-#if defined(LED_ANIMATIONS)
- #define RGBLIGHT_EFFECT_BREATHING
- #define RGBLIGHT_EFFECT_RAINBOW_MOOD
- #define RGBLIGHT_EFFECT_RAINBOW_SWIRL
- #define RGBLIGHT_EFFECT_SNAKE
- #define RGBLIGHT_EFFECT_KNIGHT
- #define RGBLIGHT_EFFECT_CHRISTMAS
- #define RGBLIGHT_EFFECT_STATIC_GRADIENT
- //#define RGBLIGHT_EFFECT_RGB_TEST
- //#define RGBLIGHT_EFFECT_ALTERNATING
-#endif
diff --git a/keyboards/25keys/zinc/keymaps/toshi0383/keymap.c b/keyboards/25keys/zinc/keymaps/toshi0383/keymap.c
deleted file mode 100644
index c6b90a3a9970..000000000000
--- a/keyboards/25keys/zinc/keymaps/toshi0383/keymap.c
+++ /dev/null
@@ -1,44 +0,0 @@
-#include QMK_KEYBOARD_H
-
-extern uint8_t is_master;
-
-enum layer_names {
- _BASE,
- _LOWER,
- _RAISE,
- _ADJUST
-};
-
-#define LOWER MO(_LOWER)
-#define RAISE MO(_RAISE)
-#define ADJUST MO(_ADJUST)
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [_BASE] = LAYOUT_ortho_4x12(
- KC_ESC, 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_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, SFT_T(KC_SCLN), KC_RGUI,
- KC_SPC, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_RCTL, KC_DOT, KC_RALT, RGUI(KC_RSFT),
- KC_LGUI, KC_LALT, _______, _______, LOWER, KC_ENT, KC_ENT, RAISE, _______, _______, _______, _______
- ),
-
- [_LOWER] = LAYOUT_ortho_4x12(
- KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, RCMD(RALT(KC_O)), RCMD(RALT(KC_L)), _______,
- _______, KC_LT, KC_GT, KC_LPRN, KC_RPRN, KC_GRV, KC_MINS, KC_LCBR, KC_RCBR, KC_LBRC, KC_RBRC, KC_PIPE,
- KC_LALT, _______, _______, _______, KC_EQL, KC_QUES, KC_UNDS, KC_PLUS, KC_COMM, _______, KC_SLSH, _______,
- _______, _______, _______, _______, _______, KC_TRNS, KC_TRNS, KC_RGUI, _______, _______, _______, _______
- ),
-
- [_RAISE] = LAYOUT_ortho_4x12(
- _______, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, _______,
- _______, KC_COLN, KC_SCLN, KC_DQT, KC_QUOT, KC_BSLS, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, _______, _______,
- _______, _______, _______, _______, _______, _______, ADJUST, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, KC_LGUI, KC_TRNS, KC_TRNS, _______, _______, _______, _______, _______
- ),
-
- [_ADJUST] = LAYOUT_ortho_4x12(
- _______, _______, _______, _______, RCMD(LALT(KC_1)), RCMD(LALT(KC_2)), RCMD(LALT(KC_3)), RCMD(LALT(KC_4)), RCMD(LALT(KC_5)), RCMD(LALT(KC_6)), RCMD(LALT(KC_7)), RCMD(LALT(KC_0)),
- RGB_SAI, RGB_HUI, RGB_MOD, _______, RGB_TOG, RGB_VAI, RGB_VAD, RGB_SAD, RGB_HUD, RGB_RMOD, _______, _______,
- KC_MUTE, KC_VOLD, KC_VOLU, KC_BRID, KC_BRIU, QK_BOOT, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
- ),
-};
diff --git a/keyboards/25keys/zinc/keymaps/toshi0383/rules.mk b/keyboards/25keys/zinc/keymaps/toshi0383/rules.mk
deleted file mode 100644
index 8fe697932e01..000000000000
--- a/keyboards/25keys/zinc/keymaps/toshi0383/rules.mk
+++ /dev/null
@@ -1,130 +0,0 @@
-# Build Options
-# change to "no" to disable the options, or define them in the Makefile in
-# the appropriate keymap folder that will get included automatically
-#
-BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite
-MOUSEKEY_ENABLE = no # Mouse keys
-EXTRAKEY_ENABLE = yes # Audio control and System control
-CONSOLE_ENABLE = no # Console for debug
-COMMAND_ENABLE = no # Commands for debug and configuration
-NKRO_ENABLE = no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
-BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
-MIDI_ENABLE = no # MIDI controls
-AUDIO_ENABLE = no # Audio output on port C6
-UNICODE_ENABLE = no # Unicode
-BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
-RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
-SWAP_HANDS_ENABLE = no # Enable one-hand typing
-LTO_ENABLE = no # if firmware size over limit, try this option
-
-define ZINC_CUSTOMISE_MSG
- $(info Zinc customize)
- $(info - LED_BACK_ENABLE=$(LED_BACK_ENABLE))
- $(info - LED_UNDERGLOW_ENABLE=$(LED_UNDERGLOW_ENABLE))
- $(info - LED_BOTH_ENABLE=$(LED_BOTH_ENABLE))
- $(info - LED_RGB_CONT=$(LED_RGB_CONT))
- $(info - RGB_MATRIX=$(RGB_MATRIX))
- $(info - LED_ANIMATION=$(LED_ANIMATIONS))
- $(info - IOS_DEVICE_ENABLE=$(IOS_DEVICE_ENABLE))
-endef
-
-# Zinc keyboard customize
-LED_BACK_ENABLE = no # LED backlight (Enable SK6812mini backlight)
-LED_UNDERGLOW_ENABLE = no # LED underglow (Enable WS2812 RGB underlight)
-LED_BOTH_ENABLE = no # LED backlight and underglow
-LED_RGB_CONT = no # LED continuous backlight or/and underglow between left Zinc and right Zinc
-RGB_MATRIX = no # RGB LED Matrix
-RGB_MATRIX_SPLIT_RIGHT = no # RGB Matrix for RIGHT Hand
-LED_ANIMATIONS = yes # LED animations
-IOS_DEVICE_ENABLE = no # connect to IOS device (iPad,iPhone)
-
-#### LED_BACK_ENABLE and LED_UNDERGLOW_ENABLE.
-#### Do not enable these with audio at the same time.
-
-### Zinc keyboard 'default' keymap: convenient command line option
-## make ZINC= zinc:defualt
-## option= back | under | both | cont | matrix | na | ios
-## ex.
-## make ZINC=under zinc:defualt
-## make ZINC=under,ios zinc:defualt
-## make ZINC=back zinc:default
-## make ZINC=back,na zinc:default
-## make ZINC=back,ios zinc:default
-
-ifneq ($(strip $(ZINC)),)
- ifeq ($(findstring back,$(ZINC)), back)
- LED_BACK_ENABLE = yes
- endif
- ifeq ($(findstring under,$(ZINC)), under)
- LED_UNDERGLOW_ENABLE = yes
- endif
- ifeq ($(findstring both,$(ZINC)), both)
- LED_BOTH_ENABLE = yes
- endif
- ifeq ($(findstring cont,$(ZINC)), cont)
- LED_RGB_CONT = yes
- endif
- ifeq ($(findstring matrix,$(ZINC)), matrix)
- RGB_MATRIX = yes
- endif
- ifeq ($(findstring right,$(ZINC)), right)
- RGB_MATRIX_SPLIT_RIGHT = yes
- endif
- ifeq ($(findstring na,$(ZINC)), na)
- LED_ANIMATIONS = no
- endif
- ifeq ($(findstring ios,$(ZINC)), ios)
- IOS_DEVICE_ENABLE = yes
- endif
- $(eval $(call ZINC_CUSTOMISE_MSG))
- $(info )
-endif
-
-ifeq ($(strip $(LED_BACK_ENABLE)), yes)
- RGBLIGHT_ENABLE = yes
- ifeq ($(strip $(LED_UNDERGLOW_ENABLE)), yes)
- OPT_DEFS += -DRGBLED_BOTH
- $(info LED_BOTH_ENABLE option is enabled instead of LED_BACK_ENABLE and LED_UNDERGLOW_ENABLE)
- else
- OPT_DEFS += -DRGBLED_BACK
- endif
-else ifeq ($(strip $(LED_UNDERGLOW_ENABLE)), yes)
- RGBLIGHT_ENABLE = yes
-else
- RGBLIGHT_ENABLE = no
-endif
-
-ifeq ($(strip $(LED_BOTH_ENABLE)), yes)
- RGBLIGHT_ENABLE = yes
- OPT_DEFS += -DRGBLED_BOTH
-endif
-
-ifeq ($(strip $(LED_RGB_CONT)), yes)
- OPT_DEFS += -DRGBLED_CONT
-endif
-
-ifeq ($(strip $(RGB_MATRIX)), yes)
- RGBLIGHT_ENABLE = no
- RGB_MATRIX_ENABLE = yes
-endif
-
-ifeq ($(strip $(IOS_DEVICE_ENABLE)), yes)
- OPT_DEFS += -DIOS_DEVICE_ENABLE
-endif
-
-ifeq ($(strip $(LED_ANIMATIONS)), yes)
- OPT_DEFS += -DLED_ANIMATIONS
-endif
-
-ifeq ($(strip $(RGB_MATRIX_SPLIT_RIGHT)), yes)
- OPT_DEFS += -DRGB_MATRIX_SPLIT_RIGHT
-endif
-
-# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
-SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-
-
-# Uncomment these for debugging
-# $(info -- RGBLIGHT_ENABLE=$(RGBLIGHT_ENABLE))
-# $(info -- OPT_DEFS=$(OPT_DEFS))
-# $(info )
diff --git a/keyboards/2key2crawl/keymaps/tabs/keymap.c b/keyboards/2key2crawl/keymaps/tabs/keymap.c
deleted file mode 100644
index 9066c3f2e6de..000000000000
--- a/keyboards/2key2crawl/keymaps/tabs/keymap.c
+++ /dev/null
@@ -1,26 +0,0 @@
-#include QMK_KEYBOARD_H
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-
-LAYOUT(
- KC_1, KC_2, KC_3, KC_4, KC_5,
- KC_6, KC_7, KC_8, KC_9, KC_0, KC_ENTER),
-
-};
-
-void matrix_init_user(void) {
- debug_config.matrix = 1;
- debug_config.keyboard = 1;
- debug_config.enable = 1;
-}
-
-bool encoder_update_user(uint8_t index, bool clockwise) {
- if (index == 0) {
- if (clockwise) {
- tap_code16(C(KC_T));
- } else {
- tap_code16(C(KC_W));
- }
- }
- return true;
-}
diff --git a/keyboards/2key2crawl/keymaps/vol/keymap.c b/keyboards/2key2crawl/keymaps/vol/keymap.c
deleted file mode 100644
index a45d3f778980..000000000000
--- a/keyboards/2key2crawl/keymaps/vol/keymap.c
+++ /dev/null
@@ -1,26 +0,0 @@
-#include QMK_KEYBOARD_H
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-
-LAYOUT(
- KC_1, KC_2, KC_3, KC_4, KC_5,
- KC_6, KC_7, KC_8, KC_9, KC_0, KC_ENTER),
-
-};
-
-void matrix_init_user(void) {
- debug_config.matrix = 1;
- debug_config.keyboard = 1;
- debug_config.enable = 1;
-}
-
-bool encoder_update_user(uint8_t index, bool clockwise) {
- if (index == 0) {
- if (clockwise) {
- tap_code(KC_VOLU);
- } else {
- tap_code(KC_VOLD);
- }
- }
- return true;
-}
diff --git a/keyboards/3w6/keymaps/helltm/combos.def b/keyboards/3w6/keymaps/helltm/combos.def
deleted file mode 100644
index 49b95e5eb246..000000000000
--- a/keyboards/3w6/keymaps/helltm/combos.def
+++ /dev/null
@@ -1,18 +0,0 @@
-CB(open_round_brackets_combo, KC_LPRN, KC_R, KC_T)
-CB(open_square_brackets_combo, KC_LBRC, KC_F, KC_G)
-CB(open_curly_brackets_combo, KC_LCBR, KC_V, KC_B)
-CB(close_round_brackets_combo, KC_RPRN, KC_Y, KC_U)
-CB(close_square_brackets_combo, KC_RBRC, KC_H, KC_J)
-CB(close_curly_brackets_combo, KC_RCBR, KC_N, KC_M)
-
-CB(esc_combo, KC_ESC, KC_Q, KC_A)
-CB(tab_combo, KC_TAB, KC_A, LSFT_T(KC_Z))
-
-CB(single_quote_combo, KC_QUOT, KC_P, KC_SCLN)
-CB(double_quote_combo, KC_DQUO, KC_SCLN, RSFT_T(KC_SLSH))
-
-CB(plus_combo, KC_PLUS, KC_T, KC_G)
-CB(asterisk_combo, KC_ASTR, KC_G, KC_B)
-
-CB(minus_combo, KC_MINS, KC_Y, KC_H)
-CB(equal_combo, KC_EQL, KC_H, KC_N)
diff --git a/keyboards/3w6/keymaps/helltm/combos.h b/keyboards/3w6/keymaps/helltm/combos.h
deleted file mode 100644
index 99173ecb2207..000000000000
--- a/keyboards/3w6/keymaps/helltm/combos.h
+++ /dev/null
@@ -1,33 +0,0 @@
-/* Copyright 2021 HellSingCoder
- *
- * 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 .
- */
-
-#pragma once
-
-#define CB(name, action, ...) C_##name,
-enum user_combos {
-#include "combos.def"
-};
-#undef CB
-
-#define CB(name, action, ...) const uint16_t PROGMEM name##_combo[] = {__VA_ARGS__, COMBO_END};
-#include "combos.def"
-#undef CB
-
-combo_t key_combos[] = {
-#define CB(name, action, ...) COMBO(name##_combo, action),
-#include "combos.def"
-#undef CB
-};
diff --git a/keyboards/3w6/keymaps/helltm/config.h b/keyboards/3w6/keymaps/helltm/config.h
deleted file mode 100644
index 9ccb616a03f7..000000000000
--- a/keyboards/3w6/keymaps/helltm/config.h
+++ /dev/null
@@ -1,20 +0,0 @@
-/* Copyright 2021 HellSingCoder
- *
- * 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 .
- */
-
-#pragma once
-
-/* Combo timer */
-#define COMBO_TERM 15
diff --git a/keyboards/3w6/keymaps/helltm/keymap.c b/keyboards/3w6/keymaps/helltm/keymap.c
deleted file mode 100644
index a87c7c75a929..000000000000
--- a/keyboards/3w6/keymaps/helltm/keymap.c
+++ /dev/null
@@ -1,168 +0,0 @@
-/* Copyright 2021 HellSingCoder
- *
- * 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 .
- */
-
-#include QMK_KEYBOARD_H
-
-#ifdef COMBO_ENABLE
-# include "combos.h"
-#endif
-
-enum layers
-{
- _ALPHA_QWERTY = 0,
- _SYM,
- _NAV,
- _NUM,
-};
-
-enum custom_keycodes {
- KC_THUMB_SWAP,
-};
-
-/* Space Enter swap */
-bool swap_space_enter = false;
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-
- /*
- * QWERTY
- *
- * _____________________ _____________________
- * __|__ | | __|__
- * _____ | | v v | | _____
- * .-----| E |-----._____ _____.-----| I |-----.
- * .-----| W |_____| R | T | __ ( ) __ | Y | U |_____| O |-----.
- * __ | Q |-----| D |-----|_____| __|--> + - <--|__ |_____|-----| K |-----| P | __
- * ESC <--|__ |-----| S |_____| F | G | [ ] | H | J |_____| L |-----| __|--> '
- * __ | A |-----| C |-----|_____| __ __ |_____|-----| , < |-----| ; : | __
- * TAB <--|__ |-----| X |_____| V | B | __|--> * { } = <--|__ | N | M |_____| . > |-----| __|--> "
- * | Z |-----' '-----|_____| |_____|-----' '-----| / ? |
- * '-----' .-----. _____ .-.._ _..-. _____ .-----. '-----'
- * | | WIN ||CTRL | / / \ \ | BSp || Del | |
- * SHIFT '-----':_____|/ ENT / \ SPC \|_____:'-----' SHIFT
- * | '--.._/ \_..--' | |
- * NUM NAV SYM
- */
- [_ALPHA_QWERTY] = LAYOUT(
- KC_Q, KC_W , KC_E , KC_R , KC_T , KC_Y , KC_U , KC_I , KC_O , KC_P ,
- KC_A, KC_S , KC_D , KC_F , KC_G , KC_H , KC_J , KC_K , KC_L , KC_SCLN ,
- LSFT_T(KC_Z), KC_X , KC_C , KC_V , KC_B , KC_N , KC_M , KC_COMM, KC_DOT , RSFT_T(KC_SLSH),
- LT(_NUM, KC_LGUI), KC_LCTL, KC_ENT, KC_SPC, LT(_NAV, KC_BSPC), LT(_SYM, KC_DEL)
- ),
-
- /*
- * Symbols
- * _____ _____
- * .-----| # |-----._____ _____.-----| * |-----.
- * .-----| @ |_____| $ | % | | ^ | & |_____| ( |-----.
- * | ! |-----| |-----|_____| |_____|-----| [ { |-----| ) |
- * |-----| |_____| | | | { | } |_____| ] } |-----|
- * | ` ~ |-----| |-----|_____| |_____|-----| |-----| ' " |
- * |-----| |_____| | | | - _ | = + |_____| | |-----|
- * | ~ |-----' '-----|_____| |_____|-----' '-----| \ | |
- * '-----' .-----. _____ .-.._ _..-. _____ .-----. '-----'
- * SHIFT | ||CTRL | / / \ \ | BSp || | SHIFT
- * '-----':_____|/ ENT / \ SPC \|_____:'-----'
- * '--.._/ \_..--'
- */
- [_SYM] = LAYOUT(
- KC_EXLM, KC_AT , KC_HASH, KC_DLR , KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN ,
- KC_GRV , XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_LCBR, KC_RCBR, KC_LBRC, KC_RBRC, KC_QUOT ,
- LSFT_T(KC_TILD), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_MINS, KC_EQL , XXXXXXX, KC_PIPE, RSFT_T(KC_BSLS),
- XXXXXXX, _______, _______, _______, KC_BSPC, XXXXXXX
- ),
-
- /*
- * Navigation
- * _____ _____
- * .-----|Mute |-----._____ _____.-----| Up |-----.
- * .-----|VDown|_____| VUp | | | |PDown|_____| PUp |-----.
- * | Esc |-----|Play |-----|_____| |_____|-----|Down |-----| BSp |
- * |-----|Prev |_____|Next | | |Home |Left |_____|Right|-----|
- * | Tab |-----|Stop |-----|_____| |_____|-----| |-----| ' " |
- * |-----| |_____| | | | | |_____| End |-----|
- * | CPS |-----' '-----|_____| |_____|-----' '-----| Del |
- * '-----' .-----. _____ .-.._ _..-. _____ .-----. '-----'
- * SHIFT | ||CTRL | / / \ \ | BSp || | SHIFT
- * '-----':_____|/ ENT / \ SPC \|_____:'-----'
- * '--.._/ \_..--'
- */
- [_NAV] = LAYOUT(
- KC_ESC , KC_VOLD, KC_MUTE, KC_VOLU, XXXXXXX, XXXXXXX, KC_PGDN, KC_UP , KC_PGUP, KC_BSPC,
- KC_TAB , KC_MPRV, KC_MPLY, KC_MNXT, XXXXXXX, KC_HOME, KC_LEFT, KC_DOWN, KC_RGHT, KC_QUOT,
- LSFT_T(KC_CAPS), XXXXXXX, KC_MSTP, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_END , RSFT_T(KC_DEL) ,
- XXXXXXX, _______, _______, _______, KC_BSPC, XXXXXXX
- ),
-
- /*
- * Numbers
- * _____ _____
- * .-----| 3 |-----._____ _____.-----| 8 |-----.
- * .-----| 2 |_____| 4 | 5 | | 6 | 7 |_____| 9 |-----.
- * | 1 |-----| F3 |-----|_____| |_____|-----| F8 |-----| 0 |
- * |-----| F2 |_____| F4 | F5 | | F6 | F7 |_____| F9 |-----|
- * | F1 |-----| Scr |-----|_____| |_____|-----| |-----| F10 |
- * |-----| TMg |_____| |Swap | | | |_____| F11 |-----|
- * |Shift|-----' '-----|_____| |_____|-----' '-----| F12 |
- * '-----' .-----. _____ .-.._ _..-. _____ .-----. '-----'
- * | ||CTRL | / / \ \ | BSp || | SHIFT
- * '-----':_____|/ ENT / \ SPC \|_____:'-----'
- * '--.._/ \_..--'
- */
- [_NUM] = LAYOUT(
- 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_F7 , KC_F8 , KC_F9 , KC_F10 ,
- KC_LSFT, LCA(KC_DEL), SWIN(KC_S), XXXXXXX, KC_THUMB_SWAP, XXXXXXX, XXXXXXX, XXXXXXX, KC_F11 , RSFT_T(KC_F12) ,
- XXXXXXX, _______, _______, _______, KC_BSPC, XXXXXXX
- ),
-};
-
-bool process_record_user(uint16_t keycode, keyrecord_t *record) {
- switch (keycode) {
-
- /* Space Enter swap */
- case KC_THUMB_SWAP:
- if (record->event.pressed) {
- unregister_code(KC_SPC);
- unregister_code(KC_ENT);
- swap_space_enter = !swap_space_enter;
- }
- return false;
- break;
-
- case KC_ENT:
- if (swap_space_enter) {
- if (record->event.pressed) {
- register_code(KC_SPC);
- } else {
- unregister_code(KC_SPC);
- }
- return false;
- }
- break;
- case KC_SPC:
- if (swap_space_enter) {
- if (record->event.pressed) {
- register_code(KC_ENT);
- } else {
- unregister_code(KC_ENT);
- }
- return false;
- }
- break;
- }
- return true;
-}
diff --git a/keyboards/3w6/keymaps/helltm/rules.mk b/keyboards/3w6/keymaps/helltm/rules.mk
deleted file mode 100644
index df85626f5f1f..000000000000
--- a/keyboards/3w6/keymaps/helltm/rules.mk
+++ /dev/null
@@ -1,2 +0,0 @@
-# Combos
-COMBO_ENABLE = yes
diff --git a/keyboards/3w6/keymaps/manna-harbour_miryoku/config.h b/keyboards/3w6/keymaps/manna-harbour_miryoku/config.h
deleted file mode 100644
index fb567ad7d3a4..000000000000
--- a/keyboards/3w6/keymaps/manna-harbour_miryoku/config.h
+++ /dev/null
@@ -1,32 +0,0 @@
-/* Copyright 2021 weteor
- *
- * 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 .
- */
-
-// generated from users/manna-harbour_miryoku/miryoku.org -*- buffer-read-only: t -*-
-
-#pragma once
-
-#define LAYOUT_miryoku( \
- K00, 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, \
- N30, N31, K32, K33, K34, K35, K36, K37, N38, N39 \
-) \
-LAYOUT( \
-K00, 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, \
- K32, K33, K34, K35, K36, K37 \
-)
diff --git a/keyboards/3w6/keymaps/manna-harbour_miryoku/keymap.c b/keyboards/3w6/keymaps/manna-harbour_miryoku/keymap.c
deleted file mode 100644
index 74df5e0fe120..000000000000
--- a/keyboards/3w6/keymaps/manna-harbour_miryoku/keymap.c
+++ /dev/null
@@ -1,17 +0,0 @@
-/* Copyright 2021 weteor
- *
- * 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 .
- */
-
-// generated from users/manna-harbour_miryoku/miryoku.org -*- buffer-read-only: t -*-
diff --git a/keyboards/3w6/rev1/rules.mk b/keyboards/3w6/rev1/rules.mk
index 2194870d6b94..b7988ce4f55b 100644
--- a/keyboards/3w6/rev1/rules.mk
+++ b/keyboards/3w6/rev1/rules.mk
@@ -16,4 +16,4 @@ NO_USB_STARTUP_CHECK = yes
LTO_ENABLE = no
SRC += matrix.c
-QUANTUM_LIB_SRC += i2c_master.c
+I2C_DRIVER_REQUIRED = yes
diff --git a/keyboards/3w6/rev2/rules.mk b/keyboards/3w6/rev2/rules.mk
index 2194870d6b94..b7988ce4f55b 100644
--- a/keyboards/3w6/rev2/rules.mk
+++ b/keyboards/3w6/rev2/rules.mk
@@ -16,4 +16,4 @@ NO_USB_STARTUP_CHECK = yes
LTO_ENABLE = no
SRC += matrix.c
-QUANTUM_LIB_SRC += i2c_master.c
+I2C_DRIVER_REQUIRED = yes
diff --git a/keyboards/40percentclub/25/keymaps/macro/keymap.c b/keyboards/40percentclub/25/keymaps/macro/keymap.c
deleted file mode 100644
index 9e7b1ba61f27..000000000000
--- a/keyboards/40percentclub/25/keymaps/macro/keymap.c
+++ /dev/null
@@ -1,26 +0,0 @@
-/* Copyright 2018
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- */
-#include QMK_KEYBOARD_H
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [0] = LAYOUT_macro(
- KC_ESC, KC_1, KC_2, KC_3, KC_4,
- KC_GRV, KC_Q, KC_W, KC_E, KC_R,
- KC_TAB, KC_A, KC_S, KC_D, KC_F,
- KC_LSFT, KC_Z, KC_X, KC_C, KC_V,
- KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC
- ),
-};
diff --git a/keyboards/40percentclub/25/keymaps/macro/readme.md b/keyboards/40percentclub/25/keymaps/macro/readme.md
deleted file mode 100644
index 6645f93dd88d..000000000000
--- a/keyboards/40percentclub/25/keymaps/macro/readme.md
+++ /dev/null
@@ -1 +0,0 @@
-# The default macro keymap for 25
diff --git a/keyboards/40percentclub/6lit/keymaps/macro/keymap.c b/keyboards/40percentclub/6lit/keymaps/macro/keymap.c
deleted file mode 100644
index f9b0be32e1bc..000000000000
--- a/keyboards/40percentclub/6lit/keymaps/macro/keymap.c
+++ /dev/null
@@ -1,23 +0,0 @@
-/* Copyright 2018
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- */
-#include QMK_KEYBOARD_H
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [0] = LAYOUT_macro( /* Base */
- KC_F19, KC_F20, KC_F21,
- KC_F22, KC_F23, KC_F24
- ),
-};
diff --git a/keyboards/40percentclub/6lit/keymaps/macro/readme.md b/keyboards/40percentclub/6lit/keymaps/macro/readme.md
deleted file mode 100644
index 9f883b821c8d..000000000000
--- a/keyboards/40percentclub/6lit/keymaps/macro/readme.md
+++ /dev/null
@@ -1 +0,0 @@
-# The default single board macro keymap for 6lit
diff --git a/keyboards/40percentclub/foobar/keymaps/macro/keymap.c b/keyboards/40percentclub/foobar/keymaps/macro/keymap.c
deleted file mode 100644
index 8eb092938734..000000000000
--- a/keyboards/40percentclub/foobar/keymaps/macro/keymap.c
+++ /dev/null
@@ -1,24 +0,0 @@
-/* Copyright 2018
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- */
-#include QMK_KEYBOARD_H
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [0] = LAYOUT_macro( /* Base */
- KC_F13, KC_F14, KC_F15, KC_F16, KC_INT1,
- KC_F17, KC_F18, KC_F19, KC_F20, KC_INT2,
- KC_F21, KC_F22, KC_F23, KC_F14, KC_INT5
- ),
-};
diff --git a/keyboards/40percentclub/foobar/keymaps/macro/readme.md b/keyboards/40percentclub/foobar/keymaps/macro/readme.md
deleted file mode 100644
index 4cc59e7e5d35..000000000000
--- a/keyboards/40percentclub/foobar/keymaps/macro/readme.md
+++ /dev/null
@@ -1 +0,0 @@
-# The default single board macro keymap for foobar
diff --git a/keyboards/40percentclub/gherkin/keymaps/itsaferbie/config.h b/keyboards/40percentclub/gherkin/keymaps/itsaferbie/config.h
deleted file mode 100644
index f6c6117726b4..000000000000
--- a/keyboards/40percentclub/gherkin/keymaps/itsaferbie/config.h
+++ /dev/null
@@ -1,19 +0,0 @@
-#pragma once
-
-#undef WS2812_DI_PIN
-#undef RGBLED_NUM
-#define WS2812_DI_PIN D2
-# define RGBLIGHT_EFFECT_BREATHING
-# define RGBLIGHT_EFFECT_RAINBOW_MOOD
-# define RGBLIGHT_EFFECT_RAINBOW_SWIRL
-# define RGBLIGHT_EFFECT_SNAKE
-# define RGBLIGHT_EFFECT_KNIGHT
-# define RGBLIGHT_EFFECT_CHRISTMAS
-# define RGBLIGHT_EFFECT_STATIC_GRADIENT
-# define RGBLIGHT_EFFECT_RGB_TEST
-# define RGBLIGHT_EFFECT_ALTERNATING
-# define RGBLIGHT_EFFECT_TWINKLE
-#define RGBLED_NUM 8
-#define RGBLIGHT_HUE_STEP 8
-#define RGBLIGHT_SAT_STEP 8
-#define RGBLIGHT_VAL_STEP 8
diff --git a/keyboards/40percentclub/gherkin/keymaps/itsaferbie/keymap.c b/keyboards/40percentclub/gherkin/keymaps/itsaferbie/keymap.c
deleted file mode 100644
index 3eeb5694f703..000000000000
--- a/keyboards/40percentclub/gherkin/keymaps/itsaferbie/keymap.c
+++ /dev/null
@@ -1,145 +0,0 @@
-#include QMK_KEYBOARD_H
-
-extern rgblight_config_t rgblight_config;
-extern keymap_config_t keymap_config;
-
-#define _PS 0 // This is the Photoshop Layer
-#define _AI 1 // This is the Illustrator Layer
-#define _PR 2 // This is the Premier Layer
-#define _XD 3 // This is the Experience Design Layer
-
-enum custom_keycodes {
- PS = SAFE_RANGE,
- AI,
- PR,
- MACRO_0,
-};
-
-#define PS TO(0)
-#define AI TO(1)
-#define PR TO(2)
-#define XD TO(3)
-
-// Mix of Photoshop, Illustrator, Premiere, and Experience Design shortcuts.
-#define SAVE LCTL(KC_S)
-#define OPEN LCTL(KC_O)
-#define COPY LCTL(KC_C)
-#define PAST LCTL(KC_V)
-#define CUNDO LCTL(LALT(KC_Z))
-#define INVERT LCTL(LSFT(KC_I))
-#define NLAYER LSFT(LCTL(KC_N))
-#define UNDO LCTL(KC_Z)
-#define TRANS LCTL(KC_T)
-#define ALIGNL LCTL(LSFT(KC_L))
-#define ALIGNC LCTL(LSFT(KC_C))
-#define ALIGNR LCTL(LSFT(KC_R))
-#define BRINGF LCTL(KC_RBRC)
-#define BRINGB LCTL(KC_LBRC)
-
-// Illustrator layer shortcuts.
-#define SHAPE LSFT(KC_M)
-#define RULER LCTL(LALT(KC_R))
-
-// Premiere layer shortcuts.
-#define REDO LCTL(LSFT(KC_Z))
-#define EXPORT LCTL(KC_M)
-#define IMPORT LCTL(KC_I)
-#define PCOPY LCTL(KC_V)
-#define PPASTE LCTL(LSFT(KC_V))
-
-// Experience Design layer shortcuts. (can be used with others too.)
-#define NEW LCTL(KC_N)
-#define LOCK LCTL(KC_L)
-#define SYMB LCTL(KC_K)
-#define HIDE LCTL(KC_SCLN)
-#define REPEAT LCTL(KC_R)
-#define MASK LCTL(LSFT(KC_M))
-#define GROUP LCTL(KC_G)
-#define UNGRP LCTL(LSFT(KC_G))
-#define VIEW LCTL(KC_TAB)
-#define HORZ LSFT(KC_C)
-#define VERT LSFT(KC_M)
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-
- // Photoshop layer
- [_PS] = LAYOUT_ortho_3x10(
- SAVE, KC_W, KC_E, KC_T, KC_U, KC_I, KC_P, INVERT, CUNDO, NLAYER,
- UNDO, KC_H, KC_L, TRANS, ALIGNL, ALIGNC, ALIGNR, BRINGB, BRINGF, OPEN,
- KC_LSFT, COPY, PAST, KC_Z, KC_C, KC_V, KC_B, KC_LBRC, KC_RBRC, AI
- ),
-
- // Illustrator layer
- [_AI] = LAYOUT_ortho_3x10(
- _______, MACRO_0, RULER, _______, KC_G, _______, _______, KC_Q, KC_MINS, KC_PLUS,
- _______, _______, _______, KC_E, _______, _______, _______, SHAPE, KC_O, OPEN,
- _______, _______, _______, _______, _______, _______, _______, KC_M, KC_SLSH, PR
- ),
-
- // Premiere layer
- [_PR] = LAYOUT_ortho_3x10(
- _______, KC_Q, KC_W, KC_I, KC_O, KC_P, IMPORT, EXPORT, KC_MINS, KC_EQL,
- _______, REDO, KC_D, KC_F, KC_H, KC_M, KC_ENT, KC_LBRC, KC_RBRC, OPEN,
- _______, PCOPY, PPASTE, KC_SPC, KC_Z, KC_C, KC_V, KC_LEFT, KC_RIGHT, XD
- ),
-
- // Experience Design layer
- [_XD] = LAYOUT_ortho_3x10(
- _______, KC_E, KC_R, KC_T, KC_P, KC_A, KC_L, KC_V, KC_DEL, NEW,
- _______, REDO, GROUP, UNGRP, VIEW, HORZ, VERT, KC_Z, KC_ENT, OPEN,
- _______, KC_LCTL, COPY, PAST, SYMB, LOCK, MASK, HIDE, REPEAT, PS
- ),
-
-};
-
-void persistent_default_layer_set(uint16_t default_layer) {
- eeconfig_update_default_layer(default_layer);
- default_layer_set(default_layer);
-}
-
-void matrix_init_user(void) {
- rgblight_enable();
-}
-
-void matrix_scan_user(void) {
- #ifdef RGBLIGHT_ENABLE
-
- static uint8_t old_layer = 255;
- uint8_t new_layer = get_highest_layer(layer_state);
-
- // Color of the Icons.
- if (old_layer != new_layer) {
- switch (new_layer) {
- case _PS:
- // #31C5F0
- rgblight_setrgb(49, 197, 240);
- break;
- case _AI:
- // #FF8011
- rgblight_setrgb(255, 128, 17);
- break;
- case _PR:
- // #E788FF
- rgblight_setrgb(231, 136, 255);
- break;
- case _XD:
- // #FF2BC2
- rgblight_setrgb(255, 43, 194);
- break;
- }
- old_layer = new_layer;
- }
- #endif
-}
-
-bool process_record_user(uint16_t keycode, keyrecord_t *record) {
- if (record->event.pressed) {
- switch(keycode) {
- case MACRO_0:
- // Save for Web Macro.
- SEND_STRING(SS_LSFT(SS_LALT(SS_LCTL("s"))));
- return false;
- }
- }
- return true;
-};
diff --git a/keyboards/40percentclub/gherkin/keymaps/itsaferbie/rules.mk b/keyboards/40percentclub/gherkin/keymaps/itsaferbie/rules.mk
deleted file mode 100644
index b359ca2874cc..000000000000
--- a/keyboards/40percentclub/gherkin/keymaps/itsaferbie/rules.mk
+++ /dev/null
@@ -1,3 +0,0 @@
-BACKLIGHT_ENABLE = yes
-AUDIO_ENABLE = no
-RGBLIGHT_ENABLE = yes
diff --git a/keyboards/40percentclub/gherkin/keymaps/michel/config.h b/keyboards/40percentclub/gherkin/keymaps/michel/config.h
deleted file mode 100644
index 2105fa65b52a..000000000000
--- a/keyboards/40percentclub/gherkin/keymaps/michel/config.h
+++ /dev/null
@@ -1,22 +0,0 @@
-#pragma once
-
-#undef WS2812_DI_PIN
-#undef RGBLED_NUM
-#define WS2812_DI_PIN D3
-# define RGBLIGHT_EFFECT_BREATHING
-# define RGBLIGHT_EFFECT_RAINBOW_MOOD
-# define RGBLIGHT_EFFECT_RAINBOW_SWIRL
-# define RGBLIGHT_EFFECT_SNAKE
-# define RGBLIGHT_EFFECT_KNIGHT
-# define RGBLIGHT_EFFECT_CHRISTMAS
-# define RGBLIGHT_EFFECT_STATIC_GRADIENT
-# define RGBLIGHT_EFFECT_RGB_TEST
-# define RGBLIGHT_EFFECT_ALTERNATING
-# define RGBLIGHT_EFFECT_TWINKLE
-#define RGBLED_NUM 10
-
-/* Make layout upside down = USB port on left side */
-#undef MATRIX_ROW_PINS
-#undef MATRIX_COL_PINS
-#define MATRIX_ROW_PINS { B6, B2, B3, B1, F7 }
-#define MATRIX_COL_PINS { D0, D4, C6, D7, E6, B4 }
diff --git a/keyboards/40percentclub/gherkin/keymaps/michel/keymap.c b/keyboards/40percentclub/gherkin/keymaps/michel/keymap.c
deleted file mode 100644
index dc2c1333998f..000000000000
--- a/keyboards/40percentclub/gherkin/keymaps/michel/keymap.c
+++ /dev/null
@@ -1,8 +0,0 @@
-#include QMK_KEYBOARD_H
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [0] = LAYOUT_ortho_3x10(KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, LT(1, KC_ENT), LSFT_T(KC_Z), LALT_T(KC_X), LGUI_T(KC_C), KC_V, KC_BSPC, KC_SPC, RGUI_T(KC_B), LT(3, KC_N), LT(2, KC_M), KC_RSFT),
- [1] = LAYOUT_ortho_3x10(KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT),
- [2] = LAYOUT_ortho_3x10(KC_ESC, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_LBRC, KC_NO, KC_SCLN, KC_NO, KC_QUOT, 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_RSFT),
- [3] = LAYOUT_ortho_3x10(KC_TAB, KC_UP, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_LEFT, KC_DOWN, KC_RGHT, 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)
-};
diff --git a/keyboards/40percentclub/gherkin/keymaps/michel/rules.mk b/keyboards/40percentclub/gherkin/keymaps/michel/rules.mk
deleted file mode 100644
index 77b529c0e720..000000000000
--- a/keyboards/40percentclub/gherkin/keymaps/michel/rules.mk
+++ /dev/null
@@ -1,3 +0,0 @@
-BACKLIGHT_ENABLE = no
-AUDIO_ENABLE = no
-RGBLIGHT_ENABLE = yes
diff --git a/keyboards/40percentclub/gherkin/keymaps/midi/config.h b/keyboards/40percentclub/gherkin/keymaps/midi/config.h
deleted file mode 100644
index 4a9607e5b4fd..000000000000
--- a/keyboards/40percentclub/gherkin/keymaps/midi/config.h
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
-Copyright 2012 Jun Wako
-
-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 .
-*/
-
-#pragma once
-
-#undef TAPPING_TERM
-#define TAPPING_TERM 190
-
-#define MUSIC_MASK (keycode != KC_NO)
-#define MIDI_ADVANCED
diff --git a/keyboards/40percentclub/gherkin/keymaps/midi/keymap.c b/keyboards/40percentclub/gherkin/keymaps/midi/keymap.c
deleted file mode 100644
index b1ded193fe68..000000000000
--- a/keyboards/40percentclub/gherkin/keymaps/midi/keymap.c
+++ /dev/null
@@ -1,115 +0,0 @@
-#include QMK_KEYBOARD_H
-
-enum layer_number {
- _IONIAN = 0,
- _DORIAN,
- _PHRYGIAN,
- _LYDIAN,
- _MIXOLYDIAN,
- _AEOLIAN,
- _LOCRIAN,
- _MENU
-};
-
-enum custom_keycodes {
- IONIAN = SAFE_RANGE,
- DORIAN,
- PHRYGIAN,
- LYDIAN,
- MIXOLYDIAN,
- AEOLIAN,
- LOCRIAN,
-};
-
-#define MENU MO(_MENU)
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [_IONIAN] = LAYOUT_ortho_3x10(
- MI_C1, MI_F1, MI_B1, MI_E2, MI_A2, MI_D3, MI_G3, MI_C4, MI_OCTD, MI_OCTU,
- MI_D1, MI_G1, MI_C2, MI_F2, MI_B2, MI_E3, MI_A3, MI_D4, MI_TRSD, MI_TRSU,
- MI_E1, MI_A1, MI_D2, MI_G2, MI_C3, MI_F3, MI_B3, MI_E4, MI_SUST, MENU
- ),
-
- [_DORIAN] = LAYOUT_ortho_3x10(
- MI_C1, MI_F1, MI_As1, MI_Ds2, MI_A2, MI_D3, MI_G3, MI_C4, _______, _______,
- MI_D1, MI_G1, MI_C2, MI_F2, MI_As2, MI_Ds3, MI_A3, MI_D4, _______, _______,
- MI_Ds1, MI_A1, MI_D2, MI_G2, MI_C3, MI_F3, MI_As3, MI_Ds4, _______, _______
- ),
-
- [_PHRYGIAN] = LAYOUT_ortho_3x10(
- MI_C1, MI_F1, MI_As1, MI_Ds2, MI_Gs2, MI_Cs3, MI_G3, MI_C4, _______, _______,
- MI_Cs1, MI_G1, MI_C2, MI_F2, MI_As2, MI_Ds3, MI_Gs3, MI_Cs4, _______, _______,
- MI_Ds1, MI_Gs1, MI_Cs2, MI_G2, MI_C3, MI_F3, MI_As3, MI_Ds4, _______, _______
- ),
-
- [_LYDIAN] = LAYOUT_ortho_3x10(
- MI_C1, MI_Fs1, MI_B1, MI_E2, MI_A2, MI_D3, MI_G3, MI_C4, _______, _______,
- MI_D1, MI_G1, MI_C2, MI_Fs2, MI_B2, MI_E3, MI_A3, MI_D4, _______, _______,
- MI_E1, MI_A1, MI_D2, MI_G2, MI_C3, MI_Fs3, MI_B3, MI_E4, _______, _______
- ),
-
- [_MIXOLYDIAN] = LAYOUT_ortho_3x10(
- MI_C1, MI_F1, MI_As1, MI_E2, MI_A2, MI_D3, MI_G3, MI_C4, _______, _______,
- MI_D1, MI_G1, MI_C2, MI_F2, MI_As2, MI_E3, MI_A3, MI_D4, _______, _______,
- MI_E1, MI_A1, MI_D2, MI_G2, MI_C3, MI_F3, MI_As3, MI_E4, _______, _______
- ),
-
- [_AEOLIAN] = LAYOUT_ortho_3x10(
- MI_C1, MI_F1, MI_As1, MI_Ds2, MI_Gs2, MI_D3, MI_G3, MI_C4, _______, _______,
- MI_D1, MI_G1, MI_C2, MI_F2, MI_As2, MI_Ds3, MI_Gs3, MI_D4, _______, _______,
- MI_Ds1, MI_Gs1, MI_D2, MI_G2, MI_C3, MI_F3, MI_As3, MI_Ds4, _______, _______
- ),
-
- [_LOCRIAN] = LAYOUT_ortho_3x10(
- MI_C1, MI_F1, MI_As1, MI_Ds2, MI_Gs2, MI_Cs3, MI_Fs3, MI_C4, _______, _______,
- MI_Cs1, MI_Fs1, MI_C2, MI_F2, MI_As2, MI_Ds3, MI_Gs3, MI_Cs4, _______, _______,
- MI_Ds1, MI_Gs1, MI_Cs2, MI_Fs2, MI_C3, MI_F3, MI_As3, MI_Ds4, _______, _______
- ),
-
- [_MENU] = LAYOUT_ortho_3x10(
- IONIAN, LYDIAN, LOCRIAN, _______, _______, _______, _______, _______, _______, _______,
- DORIAN, MIXOLYDIAN, _______, _______, _______, _______, _______, _______, _______, _______,
- PHRYGIAN, AEOLIAN, _______, _______, _______, _______, _______, _______, QK_BOOT, _______
- )
-};
-
-bool process_record_user(uint16_t keycode, keyrecord_t *record) {
- switch (keycode) {
- case IONIAN:
- if (record->event.pressed) {
- set_single_persistent_default_layer(_IONIAN);
- }
- break;
- case DORIAN:
- if (record->event.pressed) {
- set_single_persistent_default_layer(_DORIAN);
- }
- break;
- case PHRYGIAN:
- if (record->event.pressed) {
- set_single_persistent_default_layer(_PHRYGIAN);
- }
- break;
- case LYDIAN:
- if (record->event.pressed) {
- set_single_persistent_default_layer(_LYDIAN);
- }
- break;
- case MIXOLYDIAN:
- if (record->event.pressed) {
- set_single_persistent_default_layer(_MIXOLYDIAN);
- }
- break;
- case AEOLIAN:
- if (record->event.pressed) {
- set_single_persistent_default_layer(_AEOLIAN);
- }
- break;
- case LOCRIAN:
- if (record->event.pressed) {
- set_single_persistent_default_layer(_LOCRIAN);
- }
- break;
- }
- return true;
-}
diff --git a/keyboards/40percentclub/gherkin/keymaps/midi/readme.md b/keyboards/40percentclub/gherkin/keymaps/midi/readme.md
deleted file mode 100644
index f8fad08dc85c..000000000000
--- a/keyboards/40percentclub/gherkin/keymaps/midi/readme.md
+++ /dev/null
@@ -1,14 +0,0 @@
-### Gherkin Midi
-A gherkin midi layout that should cover most midi note playing needs.
-
-A 3x8 grid of notes written bottom left to right upwards as notes for the selected mode, with octave and transpose note controls at the top. Menu accesses other mode layouts, persisted to keyboard settings, and a reset for firmware programming.
-
-Modes are set by pressing Menu and their corresponding note from the C Ionian layout. That is, for Aeolian, press Menu and A 1. For Phrygian, press Menu and E 1.
-
-#### Keyboard Default Layout
-![](https://i.imgur.com/VNc0GsI.jpg)
-
-Keyboard Editor Gist [link](https://gist.github.com/scottsheffield/c57859fe1a85d703f5387bf8ce41028c)
-
-#### Glamour Shot
-![](https://i.imgur.com/B3Q4JoU.jpg)
\ No newline at end of file
diff --git a/keyboards/40percentclub/gherkin/keymaps/midi/rules.mk b/keyboards/40percentclub/gherkin/keymaps/midi/rules.mk
deleted file mode 100644
index a7e93c234126..000000000000
--- a/keyboards/40percentclub/gherkin/keymaps/midi/rules.mk
+++ /dev/null
@@ -1,8 +0,0 @@
-BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite
-MOUSEKEY_ENABLE = no # Mouse keys(+4700)
-EXTRAKEY_ENABLE = no # Audio control and System control(+450)
-CONSOLE_ENABLE = no # Console for debug(+400)
-COMMAND_ENABLE = no # Commands for debug and configuration
-BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
-RGBLIGHT_ENABLE = no
-MIDI_ENABLE = yes
diff --git a/keyboards/40percentclub/gherkin/keymaps/mjt/config.h b/keyboards/40percentclub/gherkin/keymaps/mjt/config.h
deleted file mode 100644
index 5a295a06ca9b..000000000000
--- a/keyboards/40percentclub/gherkin/keymaps/mjt/config.h
+++ /dev/null
@@ -1,4 +0,0 @@
-#pragma once
-
-#undef MANUFACTURER
-#define MANUFACTURER "Some Guy"
diff --git a/keyboards/40percentclub/gherkin/keymaps/mjt/keymap.c b/keyboards/40percentclub/gherkin/keymaps/mjt/keymap.c
deleted file mode 100644
index 090fd1d29633..000000000000
--- a/keyboards/40percentclub/gherkin/keymaps/mjt/keymap.c
+++ /dev/null
@@ -1,210 +0,0 @@
-#include QMK_KEYBOARD_H
-#ifdef AUDIO_ENABLE
- #include "audio.h"
-#endif
-
-extern keymap_config_t keymap_config;
-
-//Tap Dance Declarations
-enum {
- TD_Z_LCTL = 0,
- TD_X_LGUI = 1,
- TD_C_LALT = 2,
- TD_A_TAB = 3,
- TD_Q_ESC = 4,
-};
-
-//Friendly Layer Names
-enum gherkin_layers {
- _QWERTY,
- _SONGS,
- _NUMBERS,
- _SYMBOLS,
- _PLOVER,
- _ADJUST
-};
-
-// custom keycodes
-enum gherkin_keycodes {
- QWERTY = SAFE_RANGE,
- NUMBERS,
- SYMBOLS,
- SONGS,
- PLOVER,
- BACKLIT,
- MACSLEEP,
- EXT_PLV
-};
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [_QWERTY] = LAYOUT_ortho_3x10(
- TD(TD_Q_ESC), KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,
- TD(TD_A_TAB), LT(_SYMBOLS,KC_S), KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, LT(_ADJUST,KC_SPC),
- TD(TD_Z_LCTL), TD(TD_X_LGUI), TD(TD_C_LALT), KC_V, KC_B, LT(_NUMBERS, KC_N), KC_M, KC_COMM, KC_DOT, SFT_T(KC_ENT)
- ),
- [_NUMBERS] = LAYOUT_ortho_3x10(
- 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_HOME, KC_PGDN, KC_PGUP, KC_END ,
- KC_F7, KC_F8, KC_F9, KC_F10, LT(_ADJUST,KC_F11), _______, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT
- ),
- [_SYMBOLS] = LAYOUT_ortho_3x10(
- KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN,
- KC_GRV, _______, XXXXXXX, KC_LBRC, KC_RBRC, KC_BSLS, KC_MINS, KC_EQL , KC_SCLN, KC_QUOT,
- KC_TILD, MO(_ADJUST), XXXXXXX, KC_LCBR, KC_RCBR, KC_PIPE, KC_UNDS, KC_PLUS, S(KC_SCLN), S(KC_QUOT)
- ),
- [_PLOVER] = LAYOUT_ortho_3x10(
- KC_Q, KC_W, KC_E, KC_R, KC_1, KC_U, KC_I, KC_O, KC_P, KC_LBRC,
- KC_A, KC_S, KC_D, KC_F, KC_G, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
- EXT_PLV, XXXXXXX, KC_C, KC_V, XXXXXXX, KC_N, KC_M, XXXXXXX, XXXXXXX, XXXXXXX
- ),
- [_ADJUST] = LAYOUT_ortho_3x10(
- QK_BOOT, _______, _______, _______, _______, QWERTY, NUMBERS, SYMBOLS, PLOVER, SONGS,
- AU_PREV, AU_NEXT, MU_ON, MU_OFF, _______, _______, _______, _______, MACSLEEP, _______,
- BACKLIT, _______, _______, _______, _______, _______, _______, _______, _______, _______
- )
-};
-
-#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_SONG(tone_qwerty);
- #endif
- persistant_default_layer_set(1UL<<_QWERTY);
- }
- return false;
- break;
- case NUMBERS:
- if (record->event.pressed) {
- #ifdef AUDIO_ENABLE
- PLAY_SONG(tone_dvorak);
- #endif
- persistant_default_layer_set(1UL<<_NUMBERS);
- }
- return false;
- break;
- case SYMBOLS:
- if (record->event.pressed) {
- #ifdef AUDIO_ENABLE
- PLAY_SONG(tone_colemak);
- #endif
- persistant_default_layer_set(1UL<<_SYMBOLS);
- }
- return false;
- break;
- case PLOVER:
- if (record->event.pressed) {
- #ifdef AUDIO_ENABLE
- stop_all_notes();
- PLAY_SONG(tone_plover);
- #endif
- layer_off(_NUMBERS);
- layer_off(_SYMBOLS);
- 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_SONG(tone_plover_gb);
- #endif
- layer_off(_PLOVER);
- }
- return false;
- break;
- case MACSLEEP:
- if (record->event.pressed) {
- // ACTION_MODS_KEY(MOD_LCTL | MOD_LSFT, KC_PWR);
- register_code(KC_RSFT);
- register_code(KC_RCTL);
- register_code(KC_PWR);
- unregister_code(KC_PWR);
- unregister_code(KC_RCTL);
- unregister_code(KC_RSFT);
- }
- 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;
- }
- return true;
-}
-
-void matrix_init_user(void) {
- #ifdef AUDIO_ENABLE
- startup_user();
- #endif
-}
-
-#ifdef AUDIO_ENABLE
-
-void startup_user(void)
-{
- _delay_ms(20); // gets rid of tick
- PLAY_SONG(tone_startup);
-}
-
-void shutdown_user(void)
-{
- PLAY_SONG(tone_goodbye);
- _delay_ms(150);
- stop_all_notes();
-}
-
-void music_on_user(void)
-{
- music_scale_user();
-}
-
-void music_scale_user(void)
-{
- PLAY_SONG(music_scale);
-}
-
-#endif
-
-//Tap Dance Definitions
-tap_dance_action_t tap_dance_actions[] = {
- //Tap once for Esc, twice for Caps Lock
- [TD_Z_LCTL] = ACTION_TAP_DANCE_DOUBLE(KC_Z, KC_LCTL),
- [TD_X_LGUI] = ACTION_TAP_DANCE_DOUBLE(KC_X, KC_LGUI),
- [TD_C_LALT] = ACTION_TAP_DANCE_DOUBLE(KC_C, KC_LALT),
- [TD_A_TAB] = ACTION_TAP_DANCE_DOUBLE(KC_A, KC_TAB),
- [TD_Q_ESC] = ACTION_TAP_DANCE_DOUBLE(KC_Q, KC_ESC)
-};
diff --git a/keyboards/40percentclub/gherkin/keymaps/mjt/rules.mk b/keyboards/40percentclub/gherkin/keymaps/mjt/rules.mk
deleted file mode 100644
index 3a35ae3b302f..000000000000
--- a/keyboards/40percentclub/gherkin/keymaps/mjt/rules.mk
+++ /dev/null
@@ -1,2 +0,0 @@
-AUDIO_ENABLE = yes # Audio output on port C6
-TAP_DANCE_ENABLE = yes
diff --git a/keyboards/40percentclub/gherkin/keymaps/pierrec83/config.h b/keyboards/40percentclub/gherkin/keymaps/pierrec83/config.h
deleted file mode 100644
index 0df91ad92524..000000000000
--- a/keyboards/40percentclub/gherkin/keymaps/pierrec83/config.h
+++ /dev/null
@@ -1,30 +0,0 @@
-#pragma once
-
-/* Make layout the right way:
- * - USB port on left side
- * - Switches facing the correct way
- */
-#undef MATRIX_ROW_PINS
-#undef MATRIX_COL_PINS
-#define MATRIX_ROW_PINS { B6, B2, B3, B1, F7 }
-#define MATRIX_COL_PINS { D0, D4, C6, D7, E6, B4 }
-
-// Set the mouse settings to a comfortable speed/accuracy trade-off
-// Assume the screen refresh rate is 60 Htz or higher
-// The default is 50. This makes the mouse ~3 times faster and more accurate
-#define MOUSEKEY_INTERVAL 16
-// The default is 20. Since we made the mouse about 3 times faster with the previous setting,
-// give it more time to accelerate to max speed to retain precise control over short distances.
-#define MOUSEKEY_TIME_TO_MAX 40
-// The default is 300. Let's try and make this as low as possible while keeping the cursor responsive
-#define MOUSEKEY_DELAY 100
-// It makes sense to use the same delay for the mouseweel
-#define MOUSEKEY_WHEEL_DELAY 100
-// The default is 100
-#define MOUSEKEY_WHEEL_INTERVAL 50
-// The default is 40
-#define MOUSEKEY_WHEEL_TIME_TO_MAX 100
-
-#define TAPPING_TERM 200
-#define PERMISSIVE_HOLD
-#define QUICK_TAP_TERM 0
diff --git a/keyboards/40percentclub/gherkin/keymaps/pierrec83/keymap.json b/keyboards/40percentclub/gherkin/keymaps/pierrec83/keymap.json
deleted file mode 100644
index 139421c44c01..000000000000
--- a/keyboards/40percentclub/gherkin/keymaps/pierrec83/keymap.json
+++ /dev/null
@@ -1 +0,0 @@
-{"version":1,"notes":"My awesome keymap","documentation":"\"This file is a QMK Configurator export. You can import this at . It can also be used directly with QMK's source code.\n\nTo setup your QMK environment check out the tutorial: \n\nYou can convert this file to a keymap.c using this command: `qmk json2c {keymap}`\n\nYou can compile this keymap using this command: `qmk compile {keymap}`\"\n","keyboard":"40percentclub/gherkin","keymap":"pierrec83","layout":"LAYOUT_ortho_3x10","layers":[["KC_Q","KC_D","KC_R","KC_W","KC_B","KC_J","KC_F","KC_U","KC_P","KC_BSPC","LSFT_T(KC_A)","LT(5,KC_S)","LT(1,KC_H)","LT(3,KC_T)","KC_G","KC_Y","LT(4,KC_N)","LT(2,KC_E)","LT(6,KC_O)","LSFT_T(KC_I)","KC_Z","KC_X","KC_M","KC_C","KC_V","LT(7,KC_SPC)","KC_L","LALT_T(KC_COMM)","LCTL_T(KC_DOT)","KC_K"],["KC_TRNS","ANY(LCTL(LSFT(KC_C)))","KC_PGUP","ANY(LCTL(LSFT(KC_V)))","KC_TRNS","KC_TRNS","KC_BTN1","KC_WH_U","KC_BTN2","KC_TRNS","KC_TRNS","KC_BTN2","KC_NO","KC_BTN1","KC_TRNS","KC_TRNS","KC_MS_L","KC_MS_D","KC_MS_U","KC_MS_R","KC_TRNS","KC_TRNS","KC_PGDN","KC_TRNS","KC_TRNS","KC_TRNS","KC_MPRV","KC_WH_D","KC_MNXT","TG(1)"],["KC_TRNS","KC_TRNS","KC_PGUP","KC_TRNS","KC_TRNS","BL_BRTG","BL_UP","KC_WH_U","KC_TRNS","KC_TRNS","KC_LEFT","KC_UP","KC_DOWN","KC_RGHT","KC_TRNS","BL_TOGG","KC_LGUI","KC_NO","LCTL(KC_LALT)","LCA(KC_LSFT)","KC_TRNS","KC_HOME","KC_PGDN","KC_END","KC_TRNS","BL_STEP","BL_DOWN","KC_WH_D","KC_TRNS","KC_TRNS"],["KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_UNDS","KC_PIPE","KC_QUOT","KC_TRNS","KC_CIRC","KC_ASTR","KC_AMPR","KC_NO","KC_TRNS","KC_HASH","KC_TILD","KC_SLSH","KC_DQUO","KC_DLR","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_MINS","KC_BSLS","KC_GRV","KC_TRNS"],["KC_TRNS","KC_COLN","KC_LT","KC_GT","KC_SCLN","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_LCBR","KC_RCBR","KC_LPRN","KC_RPRN","KC_AT","KC_TRNS","KC_NO","KC_EQL","KC_PLUS","KC_PERC","KC_TRNS","KC_EXLM","KC_LBRC","KC_RBRC","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS"],["KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_F7","KC_F8","KC_F9","KC_F10","KC_LCTL","KC_NO","KC_LALT","LCTL(KC_LALT)","KC_TRNS","KC_TRNS","KC_F4","KC_F5","KC_F6","KC_F11","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_F1","KC_F2","KC_F3","KC_F12"],["KC_PSLS","KC_7","KC_8","KC_9","KC_PPLS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_0","KC_4","KC_5","KC_6","KC_PMNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_NO","KC_TRNS","KC_PAST","KC_1","KC_2","KC_3","KC_PEQL","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS"],["LT(8,KC_TRNS)","KC_ESC","KC_COLN","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_DEL","KC_TRNS","KC_PERC","KC_SLSH","KC_ENT","KC_EXLM","KC_TRNS","KC_LGUI","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TAB","KC_TRNS","KC_TRNS","RALT(KC_TRNS)","RCTL(KC_TRNS)","TG(1)"],["KC_NO","KC_NO","KC_NO","KC_NO","KC_NO","KC_NO","KC_NO","KC_NO","KC_NO","EE_CLR","KC_NO","KC_NO","KC_NO","KC_NO","KC_NO","KC_NO","KC_NO","KC_NO","KC_NO","KC_NO","QK_BOOT","KC_NO","KC_NO","KC_NO","KC_NO","KC_NO","KC_NO","KC_NO","KC_NO","KC_NO"]],"author":"Anonymous"}
\ No newline at end of file
diff --git a/keyboards/40percentclub/gherkin/keymaps/pierrec83/readme.md b/keyboards/40percentclub/gherkin/keymaps/pierrec83/readme.md
deleted file mode 100644
index 0ade64b34634..000000000000
--- a/keyboards/40percentclub/gherkin/keymaps/pierrec83/readme.md
+++ /dev/null
@@ -1,38 +0,0 @@
-@pierrec83's keymap for the gherkin
-===
-
-A usable keymap for the gherkin's 30 keys layout, somewhat in sync with my Kyria keymap.
-
-This keymap is more or less an adaptation of my Kyria keymap which sacrifices some convenience but retains most functionality.
-
-Features
----
-* Mouse keys with constants tuned so the keyboard usable for me as my sole pointing device
-* Homerow layers activation
-* Minimal side-index motion thanks to workman base layer and similar principles in other layers
-* Two symbol layers, both activated with one homerow key and either another key on the same hand's homerow or a key from the other hand
-* Mousing around, including left and right clicking can be done either one-handed or fully on the homerow with both hands
-* Easy chaining of common command line or vim patterns, such as `~/`, `()`, `ESC : w ENTER` etc.
-* Common OS shortcuts like switching workspaces on gnome or MacOS easily accessible (for the shortcuts I use. This may not apply to others)
-
-Instructions to update the keymap
----
-
-For now, I am still more comfortable updating the keymap through the qmk configurator as I don't trust myself to manually keep comments describing the keymap in sync with the code itself. This means that my keymap.c is generated and not really readable. For a readble view of my keymap, one must import keymap.json into [qmk configurator](https://config.qmk.fm) and use the web UI or print it.
-
-To update the keymap,
-* Load keymap.json into qmk configurator
-* Perform any edits
-* Export the keymap. This should save a json file in `~/Downloads/pierrec83.json` or equivalent for your OS
-* From the root of qmk_firmware, move the keymap to its destination:
-```
-mv ~/Downloads/pierrec83.json keyboards/40percentclub/gherkin/keymaps/pierrec83/keymap.json
-```
-* Flash the firmware (for instance, if left hand is plugged):
-```
-qmk flash -kb 40percentclub/gherkin -km pierrec83
-```
-
-Author
----
-I am @pierrec83 on Twitter, @pierrechevalier83 on github. I chose the shorter nickname for my keymap.
diff --git a/keyboards/40percentclub/gherkin/keymaps/pierrec83/rules.mk b/keyboards/40percentclub/gherkin/keymaps/pierrec83/rules.mk
deleted file mode 100644
index bd518d8f273f..000000000000
--- a/keyboards/40percentclub/gherkin/keymaps/pierrec83/rules.mk
+++ /dev/null
@@ -1 +0,0 @@
-BACKLIGHT_ENABLE = yes
diff --git a/keyboards/40percentclub/gherkin/keymaps/steno/config.h b/keyboards/40percentclub/gherkin/keymaps/steno/config.h
deleted file mode 100644
index 20a8f7844a96..000000000000
--- a/keyboards/40percentclub/gherkin/keymaps/steno/config.h
+++ /dev/null
@@ -1,7 +0,0 @@
-#pragma once
-
-#define NO_ACTION_LAYER
-#define NO_ACTION_TAPPING
-#define NO_ACTION_ONESHOT
-#define NO_ACTION_MACRO
-#define NO_ACTION_FUNCTION
diff --git a/keyboards/40percentclub/gherkin/keymaps/steno/keymap.c b/keyboards/40percentclub/gherkin/keymaps/steno/keymap.c
deleted file mode 100644
index 5f78ba1cde28..000000000000
--- a/keyboards/40percentclub/gherkin/keymaps/steno/keymap.c
+++ /dev/null
@@ -1,13 +0,0 @@
-#include QMK_KEYBOARD_H
-#include "keymap_steno.h"
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- LAYOUT_ortho_3x10(
- STN_S1, STN_TL, STN_PL, STN_HL, STN_ST1, STN_FR, STN_PR, STN_LR, STN_TR, STN_DR ,
- STN_S2, STN_KL, STN_WL, STN_RL, STN_ST2, STN_RR, STN_BR, STN_GR, STN_SR, STN_ZR ,
- STN_NUM, STN_NUM, STN_A, STN_O, STN_NUM, STN_E, STN_U, STN_NUM, STN_NUM, STN_NUM),
-};
-
-void matrix_init_user(void) {
- steno_set_mode(STENO_MODE_GEMINI); // or STENO_MODE_BOLT
-}
\ No newline at end of file
diff --git a/keyboards/40percentclub/gherkin/keymaps/steno/readme.md b/keyboards/40percentclub/gherkin/keymaps/steno/readme.md
deleted file mode 100644
index 6536ed7aba4c..000000000000
--- a/keyboards/40percentclub/gherkin/keymaps/steno/readme.md
+++ /dev/null
@@ -1,9 +0,0 @@
-# Gherkin Steno
-
-This is a stenography-only keymap. It boots by default into GeminiPR mode. All the excess stuff is stripped away (I'd remove normal keyboard support if I could).
-
-> Note: The number bar has been moved to the bottom row in all the left-over spaces.
-
- | S | T | P | H | * | F | P | L | T | D |
- | S | K | W | R | * | R | B | G | S | Z |
- | # | # | A | O | # | E | U | # | # | # |
diff --git a/keyboards/40percentclub/gherkin/keymaps/steno/rules.mk b/keyboards/40percentclub/gherkin/keymaps/steno/rules.mk
deleted file mode 100644
index 1210452d86f3..000000000000
--- a/keyboards/40percentclub/gherkin/keymaps/steno/rules.mk
+++ /dev/null
@@ -1,12 +0,0 @@
-STENO_ENABLE = yes # Additional protocols for Stenography(+1700), requires VIRTSER
-
-BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite
-MOUSEKEY_ENABLE = no # Mouse keys(+4700)
-EXTRAKEY_ENABLE = no # Audio control and System control(+450)
-CONSOLE_ENABLE = no # Console for debug(+400)
-COMMAND_ENABLE = no # Commands for debug and configuration
-SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-NKRO_ENABLE = no # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
-BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
-AUDIO_ENABLE = no
-RGBLIGHT_ENABLE = no
diff --git a/keyboards/40percentclub/gherkin/keymaps/stevexyz/config.h b/keyboards/40percentclub/gherkin/keymaps/stevexyz/config.h
deleted file mode 100644
index c97c9c2f4b3e..000000000000
--- a/keyboards/40percentclub/gherkin/keymaps/stevexyz/config.h
+++ /dev/null
@@ -1,46 +0,0 @@
-#pragma once
-
-// bootloader (first top leftmost key)
-#define BOOTMAGIC_LITE_ROW 0
-#define BOOTMAGIC_LITE_COLUMN 1
-
-
-// Behaviors That Can Be Configured
-
-
-#define TAPPING_TERM 250
- // how long before a tap becomes a hold, if set above 500, a key tapped during the tapping term will turn it into a hold too
-
-#define PERMISSIVE_HOLD
- // makes tap and hold keys trigger the hold if another key is pressed before releasing, even if it hasn't hit the TAPPING_TERM
-
-#define QUICK_TAP_TERM 0
- // makes it possible to use a dual role key as modifier shortly after having been tapped (see Hold after tap)
- // Breaks any Tap Toggle functionality (TT or the One Shot Tap Toggle)
-
-
-/*
- #define TAPPING_TERM_PER_KEY
- // enables handling for per key TAPPING_TERM settings
- #define RETRO_TAPPING
- // tap anyway, even after TAPPING_TERM, if there was no other key interruption between press and release
- #define TAPPING_TOGGLE 2
- // how many taps before triggering the toggle
- #define LEADER_TIMEOUT 300
- // how long before the leader key times out
- // If you're having issues finishing the sequence before it times out, you may need to increase the timeout setting. Or you may want to enable the LEADER_PER_KEY_TIMING option, which resets the timeout after each key is tapped.
- #define LEADER_PER_KEY_TIMING
- // sets the timer for leader key chords to run on each key press rather than overall
- #define LEADER_KEY_STRICT_KEY_PROCESSING
- // Disables keycode filtering for Mod-Tap and Layer-Tap keycodes. Eg, if you enable this, you would need to specify MT(MOD_CTL, KC_A) if you want to use KC_A.
- #define ONESHOT_TIMEOUT 300
- // how long before oneshot times out
- #define ONESHOT_TAP_TOGGLE 2
- // how many taps before oneshot toggle is triggered
- #define COMBO_TERM 200
- // how long for the Combo keys to be detected. Defaults to TAPPING_TERM if not defined.
- #define TAP_CODE_DELAY 100
- // Sets the delay between register_code and unregister_code, if you're having issues with it registering properly (common on VUSB boards). The value is in milliseconds.
- #define TAP_HOLD_CAPS_DELAY 80
- // Sets the delay for Tap Hold keys (LT, MT) when using KC_CAPS_LOCK keycode, as this has some special handling on MacOS. The value is in milliseconds, and defaults to 80 ms if not defined. For macOS, you may want to set this to 200 or higher.
-*/
diff --git a/keyboards/40percentclub/gherkin/keymaps/stevexyz/keymap.c b/keyboards/40percentclub/gherkin/keymaps/stevexyz/keymap.c
deleted file mode 100644
index 3516c7a0c3ee..000000000000
--- a/keyboards/40percentclub/gherkin/keymaps/stevexyz/keymap.c
+++ /dev/null
@@ -1,238 +0,0 @@
-/* Copyright 2019 Stefano Marago'
- *
- * 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 .
- */
-
-
-/*
- * The 25% SuperMicro keyboard: a pure - full features - "Alpha 26" keymap on Gherkin, compatible also with 28 and 30 keys layouts
- * See https://github.com/stevexyz/qmk_firmware/blob/master/keyboards/40percentclub/gherkin/keymaps/stevexyz/readme.md for more information
- */
-
-
-#include QMK_KEYBOARD_H
-
-enum layers {
- LAYER_HOME, // home base layer
- LAYER_FUNC, // function keys and cursors
- LAYER_NUMSYM, // numbers and other characters
- LAYER_SYST, // media, mouse and other system keys
- LAYER_ARROWPAD,
- LAYER_NUMPAD,
- LAYER_MEDIAPAD,
-};
-
-enum custom_keycodes {
- CK_TRIPLEZERO = SAFE_RANGE,
-};
-
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-
-/*
- * LEGEND:
- *
- * ,--------------------------------.
- * | Top row: shifted character |
- * | Central row: standard char |
- * | Bottom row: hold modifier |
- * `--------------------------------'
- *
- * "____" means free to be assigned
- *
- */
-
-/* Qwerty Home Layer
- * ,---------------------------------------------------------------------.
- * | | | | | | | | | | |
- * | Q | W | E | R | T | Y | U | I | O | P |
- * | ____ | ____ | ____ | ____ | ____ | FnNav|NumSym| Alt | Ctrl | Shift|
- * |------+------+------+------+-------------+------+------+------+------|
- * | | | | | | | | | | |
- * | A | S | D | F | G | H | J | K | L | Enter|
- * | Shift| FnNav|NumSym| AltGr| OSkey| OSkey| AltGr| FnNav|NumSym| Shift|
- * '------+------+------+------+------+------|------+------+------+------'
- * | | | | | | | | |
- * | Z | X | C | V | B | N | M | Space|
- * | Ctrl | Alt | FnNav|NumSym| Shift| Alt | Ctrl | Shift|
- * '-------------------------------------------------------'
- */
- [LAYER_HOME] = LAYOUT_ortho_3x10(
- LT(LAYER_ARROWPAD, KC_Q), LT(LAYER_NUMPAD, KC_W), LT(LAYER_MEDIAPAD, KC_E), KC_R, KC_T, LT(LAYER_FUNC, KC_Y), LT(LAYER_NUMSYM, KC_U), MT(MOD_LALT, KC_I), MT(MOD_RCTL, KC_O), MT(MOD_RSFT, KC_P),
- MT(MOD_LSFT, KC_A), LT(LAYER_FUNC, KC_S), LT(LAYER_NUMSYM, KC_D), MT(MOD_RALT, KC_F), MT(MOD_LGUI, KC_G), MT(MOD_RGUI, KC_H), MT(MOD_RALT, KC_J), LT(LAYER_FUNC, KC_K), LT(LAYER_NUMSYM, KC_L), MT(MOD_RSFT, KC_ENT),
- KC_DOWN, MT(MOD_LCTL, KC_Z), MT(MOD_LALT, KC_X), LT(LAYER_FUNC, KC_C), LT(LAYER_NUMSYM, KC_V), MT(MOD_LSFT, KC_B), MT(MOD_LALT, KC_N), MT(MOD_RCTL, KC_M), MT(MOD_RSFT, KC_SPC), KC_BSPC
- ),
-
-/* Function and Navigation Layer
- * ,---------------------------------------------------------------------.
- * | | | | | | | | | | |
- * | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 |
- * | ____ | ____ | ____ | ____ | ____ | ____ |SysLay| Alt | Ctrl | Shift|
- * |------+------+------+------+-------------+------+------+------+------|
- * | | | | | | | | | | |
- * | ESC | Home | PgDn | PgUp | End | Left | Down | Up | Right|Backsp|
- * | Shift| ____ |SysLay| AltGr| OSkey| OSkey| AltGr| ____ |SysLay| Shift|
- * '------+------+------+------+------+------|------+------+------+------'
- * | | | | | | | | |
- * | F11 | F12 | | Space|PrnScr|ScrLck|Pause |Backsp|
- * | Ctrl | Alt | ____ |SysLay| Shift| Alt | Ctrl | Shift|
- * '-------------------------------------------------------'
- */
- [LAYER_FUNC] = LAYOUT_ortho_3x10(
- KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, LT(LAYER_SYST, KC_F7), MT(MOD_LALT, KC_F8), MT(MOD_RCTL,KC_F9), MT(MOD_RSFT, KC_F10),
- MT(MOD_LSFT, KC_ESC), KC_HOME, LT(LAYER_SYST, KC_PGDN), MT(MOD_RALT, KC_PGUP), MT(MOD_LGUI, KC_END), MT(MOD_RGUI, KC_LEFT), MT(MOD_RALT, KC_DOWN), KC_UP, LT(LAYER_SYST, KC_RGHT), MT(MOD_RSFT, KC_BSPC),
- KC_DOWN, MT(KC_LCTL, KC_F11), MT(KC_LALT, KC_F12), KC_NO, LT(LAYER_SYST, KC_SPACE), MT(KC_LSFT, KC_PSCR), MT(KC_LALT, KC_SCRL), MT(KC_RCTL, KC_PAUS), MT(MOD_RSFT, KC_BSPC), KC_UP
- ),
-
-/* Number and Symbols Layer
- * ,---------------------------------------------------------------------.
- * | ! | @ | # | $ | % | ^ | & | * | ( | ) |
- * | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 |
- * | ____ | ____ | ____ | ____ | ____ |SysLay| ____ | Alt | Ctrl | Shift|
- * |------+------+------+------+-------------+------+------+------+------|
- * | | ~ | _ | + | { | } | | | : | " | |
- * | TAB | ` | - | = | [ | ] | \ | ; | ' | Del |
- * | Shift|SysLay| ____ | AltGr| OSkey| OSkey| AltGr|SysLay| ____ | Shift|
- * ' -----+------+------+------+------+------|------+------+------+------'
- * | | | | | < | > | ? | |
- * |BackSp| Del | Enter| | , | . | / | Enter|
- * | Ctrl | Alt |SysLay| ____ | Shift| Alt | Ctrl | Shift|
- * '-------------------------------------------------------'
- */
- [LAYER_NUMSYM] = LAYOUT_ortho_3x10(
- KC_1, KC_2, KC_3, KC_4, KC_5, LT(LAYER_SYST, KC_6), KC_7, MT(MOD_LALT, KC_8), MT(MOD_RCTL,KC_9), MT(MOD_RSFT, KC_0),
- MT(MOD_LSFT, KC_TAB), LT(LAYER_SYST, KC_GRV), KC_MINS, MT(MOD_RALT, KC_EQL), MT(MOD_LGUI, KC_LBRC), MT(MOD_RGUI, KC_RBRC), MT(MOD_RALT, KC_BSLS), LT(LAYER_SYST, KC_SCLN), KC_QUOT, MT(MOD_RSFT, KC_DEL),
- KC_LEFT, MT(KC_LCTL, KC_BSPC), MT(KC_LALT, KC_DEL), LT(LAYER_SYST, KC_ENT), KC_NO, MT(MOD_LSFT, KC_COMM), MT(MOD_LALT, KC_DOT), MT(MOD_RCTL, KC_SLSH), MT(MOD_RSFT, KC_ENT), KC_RGHT
- ),
-
-/* System Layer
- * ,---------------------------------------------------------------------.
- * | | | | | | | | | | |
- * | Play | Stop | Prev | Next |MsBtn1|MsLeft|MSDown| MsUp |MsRigh|MsBtn2|
- * | ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ | Shift|
- * |------+------+------+------+-------------+------+------+------+------|
- * | | | | | | | | | | |
- * |Backsp| Mute | Vol- | Vol+ |MsWhlD| Left | Down | Up | Right|Backsp|
- * | ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ |
- * '------+------+------+------+------+------|------+------+------+------'
- * | | | | | | | | |
- * | ____ | ____ | Enter| Space| Mute | Vol- | Vol+ | Space|
- * | Ctrl | Alt | ____ | ____ | Shift| Alt | Ctrl | ____ |
- * '-------------------------------------------------------'
- */
- [LAYER_SYST] = LAYOUT_ortho_3x10(
- KC_MPLY, KC_STOP, KC_MPRV, KC_MNXT, KC_MS_BTN1, KC_MS_LEFT, KC_MS_DOWN, KC_MS_UP, KC_MS_RIGHT, MT(MOD_RSFT, KC_MS_BTN2),
- KC_BSPC, KC_DEL, KC_PGDN, KC_PGUP, KC_APP, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_BSPC,
- KC_PGDN, MT(KC_LCTL, KC_CAPS), MT(KC_LALT, KC_INS), KC_ENT, KC_SPC, MT(MOD_RSFT, KC_MUTE), MT(MOD_LALT, KC_VOLD), MT(MOD_RCTL, KC_VOLU), KC_SPC, KC_PGUP
- ),
-
- /* ArrowPad (mod su Q) /------mouse-------\ /-----cursor-------\
- * ,---------------------------------------------------------------------.
- * | | | | | | | | | | |
- * | | | |MsBtn1| MsUp |MsBtn2| Home | Up | PgUp |Backsp|
- * | ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ |
- * |------+------+------+------+-------------+------+------+------+------|
- * | | | | | | | | | | |
- * | | | |MsLeft|MsDown|MsRigh| Left | Down | Right| Enter|
- * | Shift| ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ |
- * '------+------+------+------+------+------|------+------+------+------'
- * | | | | | | | | |
- * | | |MsWhlU|MsDown|MsWhlD| End | PgDn | PgDn |
- * | Ctrl | Alt | ____ | ____ | ____ | ____ | ____ | ____ |
- * '-------------------------------------------------------'
- */
- [LAYER_ARROWPAD] = LAYOUT_ortho_3x10(
- KC_NO, KC_NO, KC_NO, KC_MS_BTN1, KC_MS_UP, KC_MS_BTN2, KC_HOME, KC_UP, KC_PGUP, KC_BSPC,
- KC_LSFT, KC_NO, KC_NO, KC_MS_LEFT, KC_MS_DOWN, KC_MS_RIGHT, KC_LEFT, KC_DOWN, KC_RIGHT, KC_ENT,
- XXXXXXX, KC_LCTL, KC_LALT, KC_MS_WH_UP, KC_MS_DOWN, KC_MS_WH_DOWN, KC_END, KC_PGDN, KC_PGDN, XXXXXXX
- ),
-
-/* NumPad (mod su W)
- * ,---------------------------------------------------------------------.
- * | | | | | | | | | | |
- * | | | 3 | * | - |Backsp| 7 | 8 | 9 | 0 |
- * | ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ |
- * |------+------+------+------+-------------+------+------+------+------|
- * | | | | | | | | | | |
- * | | | / | = | + | . | 4 | 5 | 6 | Enter|
- * | Shift| ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ |
- * '------+------+------+------+------+------|------+------+------+------'
- * | | | | | | | | |
- * | | | | Tab | , | 1 | 2 | 3 |
- * | Ctrl | Alt | ____ | ____ | ____ | ____ | ____ | ____ |
- * '-------------------------------------------------------'
- */
- [LAYER_NUMPAD] = LAYOUT_ortho_3x10(
- KC_NO, KC_NO, KC_3, KC_KP_ASTERISK, KC_KP_MINUS, KC_BSPC, KC_7, KC_8, KC_9, KC_0,
- KC_LSFT, KC_NO, KC_KP_SLASH, KC_KP_EQUAL, KC_KP_PLUS, KC_DOT, KC_4, KC_5, KC_6, KC_ENT,
- XXXXXXX, KC_LCTL, KC_LALT, KC_NO, KC_TAB, KC_COMM, KC_1, KC_2, KC_3, XXXXXXX
- ),
-
- /* MediaPad (mod su E)
- * ,---------------------------------------------------------------------.
- * | | | | | | | | | | |
- * | | | | | | | | Vol+ | | |
- * | ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ |
- * |------+------+------+------+-------------+------+------+------+------|
- * | | | | | | | | | | |
- * | | | | | | | Prev | Play | Next | |
- * | Shift| ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ |
- * '------+------+------+------+------+------|------+------+------+------'
- * | | | | | | | | |
- * | | | | | | Mute | Vol- | |
- * | Ctrl | Alt | ____ | ____ | ____ | ____ | ____ | ____ |
- * '-------------------------------------------------------'
- */
- [LAYER_MEDIAPAD] = LAYOUT_ortho_3x10(
- KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_VOLU, KC_NO, KC_NO,
- KC_LSFT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_MPRV, KC_MPLY, KC_MNXT, KC_NO,
- XXXXXXX, KC_LCTL, KC_LALT, KC_NO, KC_NO, KC_NO, KC_MUTE, KC_VOLD, KC_NO, XXXXXXX
- ),
-
-};
-
-
-void matrix_init_user(void) {
- // eeconfig_init(); // reset keyboard to a standard default state; useful when new releases messup with eeprom values
- // set num lock on at start (for numonly layer to work)
- if (!host_keyboard_led_state().num_lock) {
- tap_code(KC_NUM_LOCK);
- }
-}
-
-void matrix_scan_user(void) {
-}
-
-bool process_record_user(uint16_t keycode, keyrecord_t *record) {
- switch (keycode) {
- case CK_TRIPLEZERO:
- if (record->event.pressed) {
- SEND_STRING("000");
- } // else { when released }
- break;
- }
- return true;
-};
-
-void keyboard_pre_init_user(void) {
- // Set our LED pins as output
- setPinOutput(D5);
- setPinOutput(B0);
-}
-
-bool led_update_user(led_t led_state) {
- writePin(D5, !led_state.num_lock);
- writePin(B0, !led_state.caps_lock);
- return false; // prevent keyboard from processing state
-}
diff --git a/keyboards/40percentclub/gherkin/keymaps/stevexyz/readme.md b/keyboards/40percentclub/gherkin/keymaps/stevexyz/readme.md
deleted file mode 100644
index 8fe7a60679e2..000000000000
--- a/keyboards/40percentclub/gherkin/keymaps/stevexyz/readme.md
+++ /dev/null
@@ -1,17 +0,0 @@
-# The 25% SuperMicro keyboard
-## A full featured keymap on Gherkin compatible with a pure "Alpha 26" layout
-
-With this configuration the "SuperMicro" layout first experimented on the plank-like jj40 is being ported to a more proper board, and with the last changes, this layout has been made compatible also to a "26 keys" one. So you can now choose to leave all 30 keys on the keyboard, or remove the two on the bottom line corners to have the "old" and comfortable 28 keys layout, or remove also space and enter to have the simplest "pure alpha" one! And even the intermediate 27 keys one is an interesting compatible option!
-
-This keymap is for a generic usage, trying to avoid as much gimmick as possible (considering the number of keys) and retain muscle memory from people used to the standard Qwerty 104 keys one. Functions and numbers (with related symbols) are on the first row as expected; other examples of design coherency include the symbols on the central row laid out in the same order as you'll find on a standard full keyboard, and the cursor movement aligned to the common unix vi standard ("hjkl", and for symmetry "sdfg" for home/pgdn/pgup/end). I've personally used this layout for months on my home PC in parallel to my portable work PC.
-
-Relying just on the alphabetic keys this layout can be also very easily ported and tested on any qmk supported keyboard (ok, butterstick excluded).
-
-The image below explains the main layers activated respectively with F, N or both modifiers pressed together. In addition to them there are available 5 layers that can be personalized as needed or completely removed without losing any functionality; three of them are currently setup in the default keymap for cursors/mouse, numpad and media (activated with q, w and e respectively).
-
-![layers](https://github.com/stevexyz/qmk_firmware/blob/master/keyboards/40percentclub/gherkin/keymaps/stevexyz/newlayout26272830.jpg)
-
-![prototype](https://github.com/stevexyz/qmk_firmware/blob/master/keyboards/40percentclub/gherkin/keymaps/stevexyz/gherkin28.jpeg)
-
-Happy hacking!
-_Stefano
diff --git a/keyboards/40percentclub/gherkin/keymaps/stevexyz/rules.mk b/keyboards/40percentclub/gherkin/keymaps/stevexyz/rules.mk
deleted file mode 100644
index b693b8e30592..000000000000
--- a/keyboards/40percentclub/gherkin/keymaps/stevexyz/rules.mk
+++ /dev/null
@@ -1,17 +0,0 @@
-# Build Options (yes/no)
-#
-BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite
-MOUSEKEY_ENABLE = yes # Mouse keys
-EXTRAKEY_ENABLE = yes # Audio control and System control
-CONSOLE_ENABLE = no # Console for debug
-COMMAND_ENABLE = no # Commands for debug and configuration
-BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
-MIDI_ENABLE = no # MIDI support
-UNICODE_ENABLE = no # Unicode
-BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
-AUDIO_ENABLE = no # Audio output on port C6
-TAP_DANCE_ENABLE = no
-SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend (it uses the same timer as BACKLIGHT_ENABLE)
-
-NKRO_ENABLE = yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
-RGBLIGHT_ENABLE = no
diff --git a/keyboards/40percentclub/gherkin/keymaps/talljoe-gherkin/config.h b/keyboards/40percentclub/gherkin/keymaps/talljoe-gherkin/config.h
deleted file mode 100644
index 271f48d0011b..000000000000
--- a/keyboards/40percentclub/gherkin/keymaps/talljoe-gherkin/config.h
+++ /dev/null
@@ -1,3 +0,0 @@
-#pragma once
-
-// place overrides here
diff --git a/keyboards/40percentclub/gherkin/keymaps/talljoe-gherkin/keymap.c b/keyboards/40percentclub/gherkin/keymaps/talljoe-gherkin/keymap.c
deleted file mode 100644
index 111264c37822..000000000000
--- a/keyboards/40percentclub/gherkin/keymaps/talljoe-gherkin/keymap.c
+++ /dev/null
@@ -1,56 +0,0 @@
-#include QMK_KEYBOARD_H
-#include "keymap_steno.h"
-
-#define ST_BOLT QK_STENO_BOLT
-#define ST_GEM QK_STENO_GEMINI
-
-enum keyboard_layers {
- _QWERTY,
- _RAISE,
- _LOWER,
- _PLOVER,
- _ADJUST
-};
-
-#define ADJ_Z LT(_ADJUST, KC_Z)
-#define RS_BSPC LT(_RAISE, KC_BSPC)
-#define LW_SPC LT(_LOWER, KC_SPC)
-#define MO_ADJ MO(_ADJUST)
-#define TG_PLV TG(_PLOVER)
-#define OS_LCTL OSM(MOD_LCTL)
-#define OS_LALT OSM(MOD_LALT)
-#define OS_LGUI OSM(MOD_LGUI)
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-
- [_QWERTY] = LAYOUT_ortho_3x10(
- KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,
- KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_RSFT,
- ADJ_Z, KC_X, KC_C, KC_V, RS_BSPC, LW_SPC, KC_B, KC_N, KC_M, KC_ENT
- ),
-
- [_RAISE] = LAYOUT_ortho_3x10(
- KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0,
- KC_ESC, KC_MINS, KC_EQL, _______, KC_LBRC, KC_RBRC, _______, KC_QUOT, KC_SCLN, _______,
- OS_LCTL, OS_LGUI, OS_LALT, KC_GRV, _______, KC_TAB, KC_BSLS, KC_COMM, KC_DOT, KC_SLSH
- ),
-
- [_LOWER] = LAYOUT_ortho_3x10(
- KC_F1, KC_F2, KC_F3, KC_F4, XXXXXXX, KC_PGUP, KC_HOME, KC_UP, KC_END, XXXXXXX,
- KC_F5, KC_F6, KC_F7, KC_F8, XXXXXXX, KC_PGDN, KC_LEFT, KC_DOWN, KC_RGHT, _______,
- KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, _______, OS_LALT, OS_LGUI, OS_LCTL, KC_CAPS
- ),
-
- [_PLOVER] = LAYOUT_ortho_3x10(
- STN_S1, STN_TL, STN_PL, STN_HL, STN_ST1, STN_FR, STN_PR, STN_LR, STN_TR, STN_DR,
- STN_S2, STN_KL, STN_WL, STN_RL, STN_ST2, STN_RR, STN_BR, STN_GR, STN_SR, STN_ZR,
- MO_ADJ, STN_NUM, STN_A, STN_O, STN_NUM, STN_E, STN_U, STN_NUM, STN_NUM, XXXXXXX
- ),
-
- [_ADJUST] = LAYOUT_ortho_3x10(
- XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, ST_BOLT, ST_GEM, TG_PLV,
- XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
- XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, QK_BOOT
- ),
-
-};
diff --git a/keyboards/40percentclub/gherkin/keymaps/talljoe-gherkin/rules.mk b/keyboards/40percentclub/gherkin/keymaps/talljoe-gherkin/rules.mk
deleted file mode 100644
index a64c606ae754..000000000000
--- a/keyboards/40percentclub/gherkin/keymaps/talljoe-gherkin/rules.mk
+++ /dev/null
@@ -1,2 +0,0 @@
-MOUSEKEY_ENABLE = no # Mouse keys(+4700)
-STENO_ENABLE = yes # Additional protocols for Stenography(+1700), requires VIRTSER
diff --git a/keyboards/40percentclub/half_n_half/keymaps/Boy_314/config.h b/keyboards/40percentclub/half_n_half/keymaps/Boy_314/config.h
deleted file mode 100644
index be51c48d8afa..000000000000
--- a/keyboards/40percentclub/half_n_half/keymaps/Boy_314/config.h
+++ /dev/null
@@ -1,21 +0,0 @@
-/* Copyright 2019 Boy_314
- *
- * 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 .
- */
-
-#pragma once
-
-// place overrides here
-#define PERMISSIVE_HOLD
-#define TAPPING_TERM 200
diff --git a/keyboards/40percentclub/half_n_half/keymaps/Boy_314/keymap.c b/keyboards/40percentclub/half_n_half/keymaps/Boy_314/keymap.c
deleted file mode 100644
index 128802ca597d..000000000000
--- a/keyboards/40percentclub/half_n_half/keymaps/Boy_314/keymap.c
+++ /dev/null
@@ -1,173 +0,0 @@
-/* Copyright 2019 Boy_314
- *
- * 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 .
- */
-#include QMK_KEYBOARD_H
-
-// Tap Dance Declarations
-enum {
- TD_SWAP_LAYERS = 0
-};
-
-enum layers {
- _DVORAK,
- _QWERTY,
- _LOWER,
- _RAISE,
-};
-
-enum halfnhalf_keycodes {
- NEWTAB = SAFE_RANGE,
- ALTF4,
- CLSTAB,
- PRVWIN,
-};
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- /* DVORAK
- * ,-------------------------------------------------------------------------------------------------.
- * |Tab |' |, |. |P |Y |Brght+|= |F |G |C |R |L |Bksp |
- * |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
- * |CtlCps|A |O |E |U |I |Brght-|Ctrl+F|D |H |T |N |S |Enter |
- * |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
- * |LShift|; |Q |J |K |X |LAlt |- |B |M |W |V |Z |RShift|
- * |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
- * |TD Swap Layer| |Space |
- * `-------------' `-------------'
- */
- [_DVORAK] = LAYOUT(/* Base Dvorak */
- KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_BRIU, KC_EQL, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC,
- LCTL_T(KC_CAPS), KC_A, KC_O, KC_E, KC_U, KC_I, KC_BRID, LCTL(KC_F), KC_D, KC_H, KC_T, KC_N, KC_S, KC_ENT,
- SC_LSPO, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_LALT, KC_MINS, KC_B, KC_M, KC_W, KC_V, KC_Z, SC_RSPC,
- TD(TD_SWAP_LAYERS), KC_SPC
- ),
-
- /* QWERTY
- * ,-------------------------------------------------------------------------------------------------.
- * |Tab |Q |W |E |R |T |Brght+|' |Y |U |I |O |P |Bksp |
- * |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
- * |CtlCps|A |S |D |F |G |Brght-|Ctrl+F|H |J |K |L |; |Enter |
- * |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
- * |LShift|Z |X |C |V |B |LAlt |- |N |M |, |. |/ |RShift|
- * |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
- * |TD Swap Layer| |Space |
- * `-------------' `-------------'
- */
- [_QWERTY] = LAYOUT(/* Base Qwerty */
- KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_BRIU, KC_QUOT, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
- LCTL_T(KC_CAPS), KC_A, KC_S, KC_D, KC_F, KC_G, KC_BRID, LCTL(KC_F), KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_ENT,
- SC_LSPO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_LALT, KC_MINS, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SC_RSPC,
- TD(TD_SWAP_LAYERS), KC_SPC
- ),
-
- /* LOWER
- * ,-------------------------------------------------------------------------------------------------.
- * |Esc |1 |2 |3 |4 |5 | | |6 |7 |8 |9 |0 |/ |
- * |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
- * |Caps |F1 |F2 |F3 |F4 |F5 |F6 |Vol Up|Play |_ |+ |{ |} || |
- * |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
- * | |F7 |F8 |F9 |F10 |F11 |F12 |Vol Dn|Next |Home |PgDn |PgUp |End | |
- * |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
- * | | | |
- * `-------------' `-------------'
- */
- [_LOWER] = LAYOUT(/* Numbers, Function Row, Media Control, Shifted Symbols, Dvorak Slash Key */
- QK_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_TRNS, KC_TRNS, KC_6, KC_7, KC_8, KC_9, KC_0, KC_SLSH,
- KC_CAPS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_VOLU, KC_MPLY, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE,
- KC_TRNS, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_VOLD, KC_MNXT, KC_HOME, KC_PGDN, KC_PGUP, KC_END, KC_TRNS,
- KC_TRNS, KC_TRNS
- ),
-
- /* RAISE
- * ,-------------------------------------------------------------------------------------------------.
- * |Reset | | |Up | | | |PRVWIN|CLSTAB| | | | |Del |
- * |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
- * |` | |Left |Down |Right | | |NEWTAB|ALTF4 |- |= |[ |] |\ |
- * |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
- * | |! |@ |# |$ |% | | |^ |& |* |( |) | |
- * |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
- * | | | |
- * `-------------' `-------------'
- */
- [_RAISE] = LAYOUT(/* Arrows, Shifted Numbers, Symbols, Delete, Macros */
- QK_BOOT, KC_TRNS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS, PRVWIN, CLSTAB, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_DEL,
- KC_GRV, KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, KC_TRNS, NEWTAB, ALTF4, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS,
- KC_TRNS, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_TRNS, KC_TRNS, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_TRNS,
- KC_TRNS, KC_TRNS
- )
-};
-
-void tap_dance_choose_layer (tap_dance_state_t *state, void *user_data) {
- switch (state->count) {
- case 1:
- layer_on(_LOWER);
- break;
- case 2:
- layer_on(_RAISE);
- break;
- }
-}
-
-void tap_dance_choose_layer_reset (tap_dance_state_t *state, void *user_data) {
- switch (state->count) {
- case 1:
- layer_off(_LOWER);
- break;
- case 2:
- layer_off(_RAISE);
- break;
- case 3:
- if (get_highest_layer(default_layer_state) == _DVORAK) {
- set_single_persistent_default_layer(_QWERTY);
- }
- else if (get_highest_layer(default_layer_state) == _QWERTY) {
- set_single_persistent_default_layer(_DVORAK);
- }
- break;
- }
-}
-
-tap_dance_action_t tap_dance_actions[] = {
- [TD_SWAP_LAYERS] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, tap_dance_choose_layer, tap_dance_choose_layer_reset)
-};
-
-bool process_record_user(uint16_t keycode, keyrecord_t *record) {
- switch (keycode) {
- // Control + T
- case NEWTAB:
- if (record->event.pressed) {
- SEND_STRING(SS_LCTL("t"));
- }
- break;
- // Alt + F4
- case ALTF4:
- if (record->event.pressed) {
- SEND_STRING(SS_DOWN(X_LALT)SS_TAP(X_F4)SS_UP(X_LALT));
- }
- break;
- // Control + W
- case CLSTAB:
- if (record->event.pressed) {
- SEND_STRING(SS_LCTL("w"));
- }
- break;
- // Control + Shift + N
- case PRVWIN:
- if (record->event.pressed) {
- SEND_STRING(SS_LCTL(SS_LSFT("n")));
- }
- break;
- }
- return true;
-}
diff --git a/keyboards/40percentclub/half_n_half/keymaps/Boy_314/readme.md b/keyboards/40percentclub/half_n_half/keymaps/Boy_314/readme.md
deleted file mode 100644
index 9eff08b5ea43..000000000000
--- a/keyboards/40percentclub/half_n_half/keymaps/Boy_314/readme.md
+++ /dev/null
@@ -1,2 +0,0 @@
-# Boy_314's keymap for half_n_half
-# Currently only supports DVORAK. QWERTY Support is on the TODO list.
\ No newline at end of file
diff --git a/keyboards/40percentclub/half_n_half/keymaps/Boy_314/rules.mk b/keyboards/40percentclub/half_n_half/keymaps/Boy_314/rules.mk
deleted file mode 100644
index 59c7ccf82752..000000000000
--- a/keyboards/40percentclub/half_n_half/keymaps/Boy_314/rules.mk
+++ /dev/null
@@ -1,5 +0,0 @@
-TAP_DANCE_ENABLE = yes # Enable Tap Dance
-NKRO_ENABLE = yes # USB Nkey Rollover
-
-# Enable generic behavior for split boards
-SPLIT_KEYBOARD = yes
\ No newline at end of file
diff --git a/keyboards/40percentclub/mf68/keymaps/68keys/config.h b/keyboards/40percentclub/mf68/keymaps/68keys/config.h
deleted file mode 100644
index 66e7bbed9935..000000000000
--- a/keyboards/40percentclub/mf68/keymaps/68keys/config.h
+++ /dev/null
@@ -1,13 +0,0 @@
-#pragma once
-
-/* USB Device descriptor parameter */
-#undef VENDOR_ID
-#undef PRODUCT_ID
-#undef DEVICE_VER
-#undef MANUFACTURER
-#undef PRODUCT
-#define VENDOR_ID 0xFEED
-#define PRODUCT_ID 0x0A0C
-#define DEVICE_VER 0x0068
-#define MANUFACTURER "68Keys.io"
-#define PRODUCT "The 68Keys.io Keyboard"
diff --git a/keyboards/40percentclub/mf68/keymaps/68keys/keymap.c b/keyboards/40percentclub/mf68/keymaps/68keys/keymap.c
deleted file mode 100644
index 0227f26937b4..000000000000
--- a/keyboards/40percentclub/mf68/keymaps/68keys/keymap.c
+++ /dev/null
@@ -1,11 +0,0 @@
-#include QMK_KEYBOARD_H
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [0] = LAYOUT_68_ansi(
- KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_ESC, 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_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_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_LALT, KC_LGUI, KC_SPC, KC_RGUI, KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
- )
-};
diff --git a/keyboards/40percentclub/mf68/keymaps/68keys/readme.md b/keyboards/40percentclub/mf68/keymaps/68keys/readme.md
deleted file mode 100644
index 4b7cdf125913..000000000000
--- a/keyboards/40percentclub/mf68/keymaps/68keys/readme.md
+++ /dev/null
@@ -1,23 +0,0 @@
-# 68Keys.io
-
-Custom [68Keys.io](https://68keys.io) DIY keyboard.
-
-Keymap Maintainer: [sbstjn](https://sbstjn.com)
-Hardware Supported: mf68
-Hardware Availability: [DIY Guide](https://68keys.io)
-
-Make example for this keyboard (after setting up your build environment):
-
-```bash
-$ > cd qmk_firmware/
-$ > make 40percentclub/mf68:68keys
-```
-
-Example of flashing this keyboard:
-
-```bash
-$ > cd qmk_firmware/
-$ > make 40percentclub/mf68:68keys:avrdude
-```
-
-See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/40percentclub/mf68/keymaps/68keys/rules.mk b/keyboards/40percentclub/mf68/keymaps/68keys/rules.mk
deleted file mode 100644
index 96ce13fe73fe..000000000000
--- a/keyboards/40percentclub/mf68/keymaps/68keys/rules.mk
+++ /dev/null
@@ -1,5 +0,0 @@
-BOOTLOADER = atmel-dfu
-
-EXTRAKEY_ENABLE = yes
-CONSOLE_ENABLE = no
-BACKLIGHT_ENABLE = no
diff --git a/keyboards/40percentclub/mf68/keymaps/andyjack/keymap.c b/keyboards/40percentclub/mf68/keymaps/andyjack/keymap.c
deleted file mode 100644
index 793fb336b0cd..000000000000
--- a/keyboards/40percentclub/mf68/keymaps/andyjack/keymap.c
+++ /dev/null
@@ -1,144 +0,0 @@
-/*
-Copyright 2020 Andy Jack
-
-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 .
-*/
-#include QMK_KEYBOARD_H
-
-enum layers {
- _QWERTY,
- _L1,
- _L2
-};
-
-#define CTL_ESC LCTL_T(KC_ESC)
-
-/* these key combos are mapped to shell commands in my .keylaunchrc */
-#define MUT_IN LALT(KC_F10)
-#define MUT_OUT LALT(KC_F11)
-#define MUT_MIC LALT(KC_F12)
-#define SCN_LCK LCTL(KC_SCRL)
-
-extern keymap_config_t keymap_config;
-
-enum custom_keycodes {
- AJ_FN = SAFE_RANGE,
- AJ_RCTL,
- AJ_MSWP,
- AJ_MLCK,
-};
-
-// clang-format off
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [_QWERTY] = LAYOUT_68_ansi(
- KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, 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_PGDN,
- CTL_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
- KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
- KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, AJ_FN, AJ_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
- ),
- [_L1] = LAYOUT_68_ansi(
- KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_BSPC, KC_VOLU, KC_HOME,
- _______, _______, KC_HOME, KC_UP, KC_END, _______, _______, MUT_IN , MUT_OUT, MUT_MIC, _______, _______, BL_STEP, _______, KC_VOLD, KC_END,
- _______, _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, SCN_LCK, _______, _______, _______,
- _______, _______, _______, _______, KC_BTN3, _______, _______, KC_MUTE, _______, _______, _______, _______, KC_MUTE,
- _______, AJ_MLCK, AJ_MSWP, _______, _______, _______, _______, KC_MPRV, KC_MPLY, KC_MNXT
- ),
- [_L2] = LAYOUT_68_ansi(
- 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_BSPC, KC_VOLU, KC_HOME,
- _______, _______, _______, KC_UP, _______, _______, _______, KC_7, KC_8, KC_9, _______, _______, _______, _______, KC_VOLD, KC_END,
- _______, _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, KC_4, KC_5, KC_6, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, KC_0, KC_1, KC_2, KC_3, _______, _______, KC_MUTE,
- _______, _______, _______, _______, _______, _______, _______, KC_MPRV, KC_MPLY, KC_MNXT
- )
-};
-// clang-format on
-
-static bool aj_fn_down = false;
-static bool aj_rctl_down = false;
-static uint8_t keycode_for_aj_rctl;
-
-/* My version of:
- https://www.reddit.com/r/olkb/comments/8eticz/how_to_activate_a_layer_with_a_combination/dxygw0f/
-* AJ_FN by itself turns on layer 1
-* AJ_RCTL by itself acts as a control key
-* pressing FN and RCTL together, in any order, turns on layer 2
-*/
-bool process_record_user(uint16_t keycode, keyrecord_t *record) {
- switch (keycode) {
- case AJ_FN:
- if (record->event.pressed) {
- if (aj_rctl_down) {
- layer_on(_L2);
- } else {
- layer_on(_L1);
- }
- aj_fn_down = true;
- } else {
- layer_off(_L1);
- layer_off(_L2);
- aj_fn_down = false;
- }
- return false;
- break;
- case AJ_RCTL:
- if (record->event.pressed) {
- if (aj_fn_down) {
- layer_on(_L2);
- } else {
- register_code(keycode_for_aj_rctl);
- }
- aj_rctl_down = true;
- } else {
- layer_off(_L2);
- unregister_code(keycode_for_aj_rctl);
- aj_rctl_down = false;
- }
- return false;
- break;
- case AJ_MSWP:
- case AJ_MLCK:
- if (record->event.pressed) {
- if (!eeconfig_is_enabled()) {
- eeconfig_init();
- }
- keymap_config.raw = eeconfig_read_keymap();
- switch (keycode) {
- case AJ_MSWP:
- keymap_config.swap_lalt_lgui = !keymap_config.swap_lalt_lgui;
- keymap_config.swap_ralt_rgui = keymap_config.swap_lalt_lgui;
- keycode_for_aj_rctl = keymap_config.swap_lalt_lgui ? KC_RALT : KC_RCTL;
- break;
- case AJ_MLCK:
- keymap_config.no_gui = !keymap_config.no_gui;
- break;
- }
- eeconfig_update_keymap(keymap_config.raw);
- clear_keyboard(); // clear to prevent stuck keys
- }
- return false;
- break;
- }
- return true;
-}
-
-void keyboard_post_init_user(void) {
- if (!eeconfig_is_enabled()) {
- eeconfig_init();
- }
- keymap_config.raw = eeconfig_read_keymap();
- keycode_for_aj_rctl = keymap_config.swap_lalt_lgui ? KC_RALT : KC_RCTL;
- eeconfig_update_keymap(keymap_config.raw);
- clear_keyboard(); // clear to prevent stuck keys
-}
diff --git a/keyboards/40percentclub/mf68/keymaps/andyjack/readme.md b/keyboards/40percentclub/mf68/keymaps/andyjack/readme.md
deleted file mode 100644
index 17a9d9e90fdc..000000000000
--- a/keyboards/40percentclub/mf68/keymaps/andyjack/readme.md
+++ /dev/null
@@ -1,22 +0,0 @@
-## Customizations from the `default` keymap
-
-* caps lock is left ctrl / press & release for escape
-* keyboard LED brightness control - Fn + ] (same as default)
-* bootmagic:
- * ability to swap keys - for moving between mac and win/linux
- * for win/linux - keys are as labeled in layer 0; AJ_RCTL is right ctl
- * for mac:
- * LALT and LGUI swapped
- * RALT key sends RGUI code
- * AJ_RCTL key sends RALT code
- * layer 2 access via Fn + AJ_RCTL pressed in any order
- * regardless of swapped state
- * ability to disable left gui
-* Fn + v sends a middle mouse click - nice for pasting the mouse selection in
- linux - I always mess up and scroll while clicking
- * note: the mouse cursor has to be placed at the insert point
-* mapping some Fn + key combinations to program launch shortcuts
-
-
diff --git a/keyboards/40percentclub/mf68/keymaps/andyjack/rules.mk b/keyboards/40percentclub/mf68/keymaps/andyjack/rules.mk
deleted file mode 100644
index a124bde758d5..000000000000
--- a/keyboards/40percentclub/mf68/keymaps/andyjack/rules.mk
+++ /dev/null
@@ -1,2 +0,0 @@
-MOUSEKEY_ENABLE = yes
-BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite
diff --git a/keyboards/40percentclub/mf68/keymaps/delivrance/config.h b/keyboards/40percentclub/mf68/keymaps/delivrance/config.h
deleted file mode 100644
index 50c64b4b51d7..000000000000
--- a/keyboards/40percentclub/mf68/keymaps/delivrance/config.h
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Dan's Magicforce 68 (MF68) QMK Keyboard
- * Copyright (C) Dan
- *
- * This file is part of Dan's MF68 QMK Keyboard.
- *
- * Dan's MF68 QMK Keyboard 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 3 of the License, or
- * (at your option) any later version.
- *
- * Dan's MF68 QMK Keyboard 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 Dan's MF68 QMK Keyboard. If not, see .
- */
-
-#pragma once
-
-#undef MANUFACTURER
-#define MANUFACTURER "Dan"
-
-#undef PRODUCT
-#define PRODUCT "Magicforce 68 QMK"
-
-#undef BACKLIGHT_LEVELS
-#define BACKLIGHT_LEVELS 20
-
-// Disable backlight breathing
-#undef BACKLIGHT_BREATHING
-
-// Set USB polling rate to 1000 Hz
-#define USB_POLLING_INTERVAL_MS 1
-
-// Enable NKRO on boot
-#define FORCE_NKRO
-
-// Backlight idle timeout in seconds
-#define BACKLIGHT_IDLE_TIMEOUT 1200
\ No newline at end of file
diff --git a/keyboards/40percentclub/mf68/keymaps/delivrance/keymap.c b/keyboards/40percentclub/mf68/keymaps/delivrance/keymap.c
deleted file mode 100644
index f7899ad886f4..000000000000
--- a/keyboards/40percentclub/mf68/keymaps/delivrance/keymap.c
+++ /dev/null
@@ -1,230 +0,0 @@
-/*
- * Dan's Magicforce 68 (MF68) QMK Keyboard
- * Copyright (C) Dan
- *
- * This file is part of Dan's MF68 QMK Keyboard.
- *
- * Dan's MF68 QMK Keyboard 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 3 of the License, or
- * (at your option) any later version.
- *
- * Dan's MF68 QMK Keyboard 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 Dan's MF68 QMK Keyboard. If not, see .
- */
-
-#include QMK_KEYBOARD_H
-
-#define KC_FN1 MO(_FN)
-#define KC_FN2 LT(_FN, KC_CAPS)
-
-#define KC_BLUP BL_UP // Backlight increase
-#define KC_BLDN BL_DOWN // Backlight decrease
-#define KC_BLTOG BL_TOGG // Backlight toggle
-#define KC_REC1 DM_REC1 // Record macro 1
-#define KC_PLY1 DM_PLY1 // Play macro 1
-#define KC_REC2 DM_REC2 // Record macro 2
-#define KC_PLY2 DM_PLY2 // Play macro 1
-#define KC_RSTP DM_RSTP // Stop macro recording
-
-enum {
- _QWERTY,
- _FN
-};
-
-/* ┏━━━━┳━━━━┳━━━━┳━━━━┳━━━━┳━━━━┳━━━━┳━━━━┳━━━━┳━━━━┳━━━━┳━━━━┳━━━━┳━━━━━━━━┓ ┏━━━━┳━━━━┓
- ┃Esc ┃ 1! ┃ 2@ ┃ 3# ┃ 4$ ┃ 5% ┃ 6^ ┃ 7& ┃ 8* ┃ 9( ┃ 0) ┃ -_ ┃ =+ ┃ ←─ ┃ ┃Ins ┃PgUp┃
- ┣━━━━┻━┳━━┻━┳━━┻━┳━━┻━┳━━┻━┳━━┻━┳━━┻━┳━━┻━┳━━┻━┳━━┻━┳━━┻━┳━━┻━┳━━┻━┳━━━━━━┫ ┣━━━━╋━━━━┫
- ┃ Tab ┃ Q ┃ W ┃ E ┃ R ┃ T ┃ Y ┃ U ┃ I ┃ O ┃ P ┃ [{ ┃ ]} ┃ \| ┃ ┃Del ┃PgDn┃
- ┣━━━━━━┻━┳━━┻━┳━━┻━┳━━┻━┳━━┻━┳━━┻━┳━━┻━┳━━┻━┳━━┻━┳━━┻━┳━━┻━┳━━┻━┳━━┻━━━━━━┫ ┗━━━━┻━━━━┛
- ┃ Caps ┃ A ┃ S ┃ D ┃ F ┃ G ┃ H ┃ J ┃ K ┃ L ┃ ;: ┃ '" ┃ Enter ┃ Magicforce
- ┣━━━━━━━━┻━┳━━┻━┳━━┻━┳━━┻━┳━━┻━┳━━┻━┳━━┻━┳━━┻━┳━━┻━┳━━┻━┳━━┻━┳━━┻━━━━━━━━━┫ ┏━━━━┓
- ┃ Shift ┃ Z ┃ X ┃ C ┃ V ┃ B ┃ N ┃ M ┃ ,< ┃ .> ┃ /? ┃ Shift ┃ ┃ ↑ ┃ Dan
- ┣━━━━━┳━━━━┻┳━━━┻━┳━━┻━━━━┻━━━━┻━━━━┻━━━━┻━━━━┻━━━┳┻━━━━╋━━━━┻┳━━━━━┳━━┳━━┻━╋━━━━╋━━━━┓
- ┃Ctrl ┃ GUI ┃ Alt ┃ ━━━━━ ┃ Alt ┃ Fn ┃Ctrl ┃ ┃ ← ┃ ↓ ┃ → ┃
- ┗━━━━━┻━━━━━┻━━━━━┻━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┻━━━━━┻━━━━━┻━━━━━┛ ┗━━━━┻━━━━┻━━━━┛ */
-
-// clang-format off
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-[_QWERTY] = LAYOUT_68_ansi( /* Default layer
- ┏━━━━┳━━━━┳━━━━┳━━━━┳━━━━┳━━━━┳━━━━┳━━━━┳━━━━┳━━━━┳━━━━┳━━━━┳━━━━┳━━━━━━━━┓ ┏━━━━┳━━━━┓ */
- QK_GESC, KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 ,KC_MINS,KC_EQL , KC_BSPC , KC_INS ,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_PGDN, /*
- ┣━━━━━━┻━┳━━┻━┳━━┻━┳━━┻━┳━━┻━┳━━┻━┳━━┻━┳━━┻━┳━━┻━┳━━┻━┳━━┻━┳━━┻━┳━━┻━━━━━━┫ ┗━━━━┻━━━━┛ */
- KC_FN2 , KC_A , KC_S , KC_D , KC_F , KC_G , KC_H , KC_J , KC_K , KC_L ,KC_SCLN,KC_QUOT, KC_ENTER , /*
- ┣━━━━━━━━┻━┳━━┻━┳━━┻━┳━━┻━┳━━┻━┳━━┻━┳━━┻━┳━━┻━┳━━┻━┳━━┻━┳━━┻━┳━━┻━━━━━━━━━┫ ┏━━━━┓ */
- 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_SPACE ,KC_RALT , KC_FN1 ,KC_RCTL , KC_LEFT,KC_DOWN,KC_RGHT /*
- ┗━━━━━┻━━━━━┻━━━━━┻━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┻━━━━━┻━━━━━┻━━━━━┛ ┗━━━━┻━━━━┻━━━━┛ */),
-
-[_FN] = LAYOUT_68_ansi( /* FN & CAPS layer
- ┏━━━━┳━━━━┳━━━━┳━━━━┳━━━━┳━━━━┳━━━━┳━━━━┳━━━━┳━━━━┳━━━━┳━━━━┳━━━━┳━━━━━━━━┓ ┏━━━━┳━━━━┓ */
- 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_RSTP , KC_PSCR,KC_HOME, /*
- ┣Esc ┻ 1! ┻ 2@ ┻ 3# ┻ 4$ ┻ 5% ┻ 6^ ┻ 7& ┻ 8* ┻ 9( ┻ 0) ┻ -_ ┻ =+ ┻━┳━ ←─ ━┫ ┣Ins ╋PgUp┫ */
- _______ ,KC_PLY1,KC_PLY2,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_7 , KC_8 , KC_9 ,KC_BLDN,KC_BLUP,KC_BLTOG ,KC_TRNS ,KC_END , /*
- ┣ Tab ━┻ Q ━┻ W ━┻ E ━┻ R ━┻ T ━┻ Y ━┻ U ━┻ I ━┻ O ━┻ P ━┻ [{ ┻ ]} ┻━ \| ━┫ ┗Del ┻PgDn┛ */
- _______ ,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_4 , KC_5 , KC_6 ,KC_TRNS, KC_TRNS , /*
- ┣━ Caps ━┻ A ━┻ S ━┻ D ━┻ F ━┻ G ━┻ H ━┻ J ━┻ K ━┻ L ━┻ ;: ┻ '" ┻━ Enter ━┫ ┏━━━━┓ */
- _______ ,KC_REC1,KC_REC2,KC_TRNS,KC_TRNS,KC_MSTP,KC_TRNS,KC_MUTE, KC_1 , KC_2 , KC_3 ,KC_TRNS , KC_VOLU, /*
- ┣━━ Shift ━┻ Z ━┻ X ━┻ C ━┻ V ━┻ B ━┻ N ━┻ M ━┻ ,< ┻ .> ╋ /? ┻┳━━ Shift ━━┻━╋ ↑ ━╋━━━━┓ */
- _______,KC_TRNS ,KC_TRNS , KC_MPLY , KC_0 ,KC_TRNS ,KC_TRNS , KC_MPRV,KC_VOLD,KC_MNXT /*
- ┗Ctrl ┻ GUI ┻ Alt ┻━━━━━━━━━━━━ Space ━━━━━━━━━━━━┻ Alt ┻ Fn ━┻Ctrl ┛ ┗ ← ━┻ ↓ ━┻ → ━┛ */)
-};
-// clang-format on
-
-// Initialization code
-// -------------------
-
-void keyboard_post_init_user(void) {
- backlight_level(2);
-}
-
-// Custom backlight driver
-// -----------------------
-
-// http://jared.geek.nz/2013/feb/linear-led-pwm
-float cie1931(float x) {
- x *= 100.0 / BACKLIGHT_LEVELS;
- float y;
-
- if (x < 8) {
- y = x / 902.3;
- } else {
- y = (x + 16.0) / 116.0;
- y = y * y * y;
- }
-
- return round(y * 255);
-}
-
-void backlight_init_ports(void) {
- setPinOutput(BACKLIGHT_PIN);
- writePinLow(BACKLIGHT_PIN);
-
- TCCR1A = _BV(COM1A1) | _BV(WGM11);
- TCCR1B = _BV(WGM13) | _BV(WGM12) | _BV(CS10);
-
- ICR1 = 0xFFU; // Set PWM levels to 255 (enables high-frequency PWM)
-}
-
-void backlight_set(uint8_t level) {
- if (level > BACKLIGHT_LEVELS) {
- level = BACKLIGHT_LEVELS;
- }
-
- if (level == 0) {
- TCCR1A &= ~(_BV(COM1A1)); // Disable PWM
- } else {
- TCCR1A |= _BV(COM1A1); // Enable PWM
- }
-
- OCR1A = cie1931(level);
-}
-
-// Custom macro hooks
-// ------------------
-
-// Redefine with lower delay
-void led_blink(void) {
- backlight_toggle();
- wait_ms(25);
- backlight_toggle();
-}
-
-void dynamic_macro_record_start_user(int8_t direction) {
- led_blink();
-}
-
-void dynamic_macro_play_user(int8_t direction) {
- led_blink();
-}
-
-void dynamic_macro_record_key_user(int8_t direction, keyrecord_t *record) {
- led_blink();
-}
-
-void dynamic_macro_record_end_user(int8_t direction) {
- led_blink();
-}
-
-// Custom Caps Lock backlight behaviour
-// ------------------------------------
-
-bool led_update_user(led_t led_state) {
- // This exists because I don't like the backlight to turn OFF when the Caps Lock is ON.
- // That is, this will turn the backlight ON (at half the brightness) when the Caps Lock is ON as well.
- static bool prev_is_caps_on;
- bool is_caps_on = led_state.caps_lock;
-
- if (prev_is_caps_on != is_caps_on) {
- prev_is_caps_on = is_caps_on;
-
- if (is_caps_on) {
- backlight_set(BACKLIGHT_LEVELS / 2);
- } else {
- if (is_backlight_enabled()) {
- backlight_set(get_backlight_level());
- } else {
- backlight_set(0);
- }
- }
- }
-
- // Turn on the Pro Micro's on-board LEDs for Caps Lock
- if (led_state.caps_lock) {
- // Set to low
- setPinOutput(B0);
- writePinLow(B0);
- setPinOutput(D5);
- writePinLow(D5);
- } else {
- // Set to Hi-Z
- setPinInput(B0);
- setPinInput(D5);
- }
- return false;
-}
-
-// Backlight idle timeout feature
-// ------------------------------
-
-static uint32_t timer;
-static bool is_idle;
-
-void matrix_scan_user(void) {
- // Check the timer only if the keyboard is not idle
- if (!is_idle) {
- if (timer_elapsed32(timer) >= (uint32_t) BACKLIGHT_IDLE_TIMEOUT * 1000) {
- is_idle = true;
-
- // Both backlight_level and backlight_level_noeeprom modify the global backlight config (not useful)
- // Instead, use backlight_set in order to restore the current backlight level later on
- backlight_set(0);
- }
- }
-}
-
-bool process_record_user(uint16_t keycode, keyrecord_t *record) {
- // Reset timer on each keypress
- timer = timer_read32();
-
- // Enable backlight back only when keyboard is idling (which implies the backlight was turned off previously)
- if (is_idle) {
- is_idle = false;
-
- // Set back the original backlight level only if it is actually enabled globally
- if (is_backlight_enabled()) {
- // The current backlight level can be obtained with get_backlight_level
- backlight_set(get_backlight_level());
- }
- }
-
- return true;
-}
diff --git a/keyboards/40percentclub/mf68/keymaps/delivrance/readme.md b/keyboards/40percentclub/mf68/keymaps/delivrance/readme.md
deleted file mode 100644
index 158235b5ef30..000000000000
--- a/keyboards/40percentclub/mf68/keymaps/delivrance/readme.md
+++ /dev/null
@@ -1,38 +0,0 @@
-# Dan's Magicforce 68 (MF68) QMK Keyboard
-
-> https://github.com/delivrance
-
-```
-┏━━━━┳━━━━┳━━━━┳━━━━┳━━━━┳━━━━┳━━━━┳━━━━┳━━━━┳━━━━┳━━━━┳━━━━┳━━━━┳━━━━━━━━┓ ┏━━━━┳━━━━┓
-┃Esc ┃ 1! ┃ 2@ ┃ 3# ┃ 4$ ┃ 5% ┃ 6^ ┃ 7& ┃ 8* ┃ 9( ┃ 0) ┃ -_ ┃ =+ ┃ ←─ ┃ ┃Ins ┃PgUp┃
-┣━━━━┻━┳━━┻━┳━━┻━┳━━┻━┳━━┻━┳━━┻━┳━━┻━┳━━┻━┳━━┻━┳━━┻━┳━━┻━┳━━┻━┳━━┻━┳━━━━━━┫ ┣━━━━╋━━━━┫
-┃ Tab ┃ Q ┃ W ┃ E ┃ R ┃ T ┃ Y ┃ U ┃ I ┃ O ┃ P ┃ [{ ┃ ]} ┃ \| ┃ ┃Del ┃PgDn┃
-┣━━━━━━┻━┳━━┻━┳━━┻━┳━━┻━┳━━┻━┳━━┻━┳━━┻━┳━━┻━┳━━┻━┳━━┻━┳━━┻━┳━━┻━┳━━┻━━━━━━┫ ┗━━━━┻━━━━┛
-┃ Caps ┃ A ┃ S ┃ D ┃ F ┃ G ┃ H ┃ J ┃ K ┃ L ┃ ;: ┃ '" ┃ Enter ┃ Magicforce
-┣━━━━━━━━┻━┳━━┻━┳━━┻━┳━━┻━┳━━┻━┳━━┻━┳━━┻━┳━━┻━┳━━┻━┳━━┻━┳━━┻━┳━━┻━━━━━━━━━┫ ┏━━━━┓
-┃ Shift ┃ Z ┃ X ┃ C ┃ V ┃ B ┃ N ┃ M ┃ ,< ┃ .> ┃ /? ┃ Shift ┃ ┃ ↑ ┃ Dan
-┣━━━━━┳━━━━┻┳━━━┻━┳━━┻━━━━┻━━━━┻━━━━┻━━━━┻━━━━┻━━━┳┻━━━━╋━━━━┻┳━━━━━┳━━┳━━┻━╋━━━━╋━━━━┓
-┃Ctrl ┃ GUI ┃ Alt ┃ ━━━━━ ┃ Alt ┃ Fn ┃Ctrl ┃ ┃ ← ┃ ↓ ┃ → ┃
-┗━━━━━┻━━━━━┻━━━━━┻━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┻━━━━━┻━━━━━┻━━━━━┛ ┗━━━━┻━━━━┻━━━━┛
-```
-
-## Features
-
-- Right ALT and FN keys swapped.
-- USB Polling rate set to 1000 Hz (1 ms).
-- Dynamic macros enabled (2 macros).
-- Transient EEPROM to avoid wearing (r/w from/to RAM).
-- NKRO enabled on boot (up to 248 keys at once).
-- CAPS LOCK key used as alias to the FN key.
-- Pro Micro's on-board LEDs used for CAPS LOCK status.
-- Backlight also used as CAPS LOCK status indicator.
-- Both Grave and Tilde characters embedded in ESC.
-- Media control keys and extra number keys (numpad).
-- Flicker-free backlight thanks to high-frequency PWM mode.
-- Linear backlight brightness intensity (better for human eyes).
-- Backlight turns off automatically after 20 minutes idle.
-- Backlight brightness levels set to 20 (5% steps) + 1 (off).
-- Backlight breathing completely disabled.
-- Link Time Optimizations to reduce compiled size.
-- QMK Terminal enabled for fun (pretty useless in practice).
-- Performing ~1550 matrix scans per second.
diff --git a/keyboards/40percentclub/mf68/keymaps/delivrance/rules.mk b/keyboards/40percentclub/mf68/keymaps/delivrance/rules.mk
deleted file mode 100644
index 3d056cb71bc3..000000000000
--- a/keyboards/40percentclub/mf68/keymaps/delivrance/rules.mk
+++ /dev/null
@@ -1,9 +0,0 @@
-BACKLIGHT_DRIVER = custom
-NKRO_ENABLE = yes
-DYNAMIC_MACRO_ENABLE = yes
-
-# Use RAM (fake EEPROM, transient) instead of real EEPROM
-EEPROM_DRIVER = transient
-
-# LTO: Link Time Optimizations. Reduce compiled size
-LTO_ENABLE = yes
\ No newline at end of file
diff --git a/keyboards/40percentclub/mf68/keymaps/emdarcher/config.h b/keyboards/40percentclub/mf68/keymaps/emdarcher/config.h
deleted file mode 100644
index e1a6eb1a2b0c..000000000000
--- a/keyboards/40percentclub/mf68/keymaps/emdarcher/config.h
+++ /dev/null
@@ -1,3 +0,0 @@
-#pragma once
-
-#define GRAVE_ESC_ALT_OVERRIDE
diff --git a/keyboards/40percentclub/mf68/keymaps/emdarcher/keymap.c b/keyboards/40percentclub/mf68/keymaps/emdarcher/keymap.c
deleted file mode 100644
index 3932a1ee9b9b..000000000000
--- a/keyboards/40percentclub/mf68/keymaps/emdarcher/keymap.c
+++ /dev/null
@@ -1,52 +0,0 @@
-#include QMK_KEYBOARD_H
-
-#define _QWERTY 0
-#define _FN1 1
-#define _FN2 2
-#define X0 LT(_FN2, KC_CAPS)
-#define X1 MO(_FN1)
-
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- /* Default layer */
- [_QWERTY] = LAYOUT_68_ansi(
- QK_GESC, KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 ,KC_MINS, KC_EQL, KC_BSPC, KC_INS ,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_PGDN,
- X0 , KC_A , KC_S , KC_D , KC_F , KC_G , KC_H , KC_J , KC_K , KC_L ,KC_SCLN,KC_QUOT, KC_ENTER,
- 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_LALT ,KC_LGUI , KC_SPACE , X1 ,KC_RALT ,KC_RCTL , KC_LEFT,KC_DOWN,KC_RGHT
- ),
- /* FN Layer */
- [_FN1] = LAYOUT_68_ansi(
- 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_BSPC, KC_VOLU,KC_HOME,
- _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,KC_PSCR,KC_SCRL,KC_PAUS,_______, KC_VOLD,KC_END,
- X0 ,_______,_______,_______,_______,_______,_______,_______,_______,_______,KC_MRWD,KC_MFFD, _______,
- _______ ,_______,_______,KC_MSTP,KC_MPRV,KC_MNXT,KC_MPLY,KC_VOLD,KC_VOLU,KC_MUTE,_______, _______, _______,
- _______ ,_______ ,_______ , _______, _______,_______,_______, _______,_______,_______
- ),
-
- /* CAPS LOCK layer */
- [_FN2] = LAYOUT_68_ansi(
- 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_BSPC, KC_VOLU,KC_HOME,
- _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______, KC_VOLD,KC_END,
- _______,_______,_______,_______,_______,_______,KC_LEFT,KC_DOWN, KC_UP ,KC_RGHT,_______,_______, _______,
- _______ ,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______, _______,
- _______ ,_______ ,_______ , _______, _______,_______,_______, _______,_______,_______
- )
-};
-
-bool led_update_user(led_t led_state){
- //turn on the Pro Micro's on board LEDs for CAPS LOCK
- if(led_state.caps_lock){
- //set led pins to low
- setPinOutput(B0);
- writePinLow(B0);
- setPinOutput(D5);
- writePinLow(D5);
- } else {
- //set to Hi-Z
- setPinInput(B0);
- setPinInput(D5);
- }
- return false;
-}
diff --git a/keyboards/40percentclub/mf68/keymaps/emdarcher/readme.md b/keyboards/40percentclub/mf68/keymaps/emdarcher/readme.md
deleted file mode 100644
index 75d6d0317c9b..000000000000
--- a/keyboards/40percentclub/mf68/keymaps/emdarcher/readme.md
+++ /dev/null
@@ -1,13 +0,0 @@
-# emdarcher's MF68 Layout
-
-A layout mostly based off the factory layout, but with some modifications. Designed for use in a MAC or Unix environment, and has some VIM inspiration.
-
-- Utilizes the Pro Micro's on board LED's to show the CAPS LOCK status.
-- Added Caps Lock for an extra FN layer with VIM like control on hjlk keys.
-- Made the ESC key use GESC for functionality for Grave and Tilde with shift or GUI modifiers.
-- Added Print Screen, Scroll Lock, and Pause keys on P,[,] keys to add Mac screen brightness control.
- * On Mac, Scroll Lock is Brightness Down and Pause is Brightness Up, so with this FN+[ = brighness down, FN+] = brightness up
-- Has Mac Fast-forward and Rewind keys mapped for changing media tracks. FN+; = Rewind, FN+' = Fast-forward
-- Moved LGUI to the default MAC Command key position.
-
-Note: By default, this keymap doesn't utilize the backlighting.
diff --git a/keyboards/40percentclub/mf68/keymaps/emdarcher/rules.mk b/keyboards/40percentclub/mf68/keymaps/emdarcher/rules.mk
deleted file mode 100644
index 79cbc11ef96e..000000000000
--- a/keyboards/40percentclub/mf68/keymaps/emdarcher/rules.mk
+++ /dev/null
@@ -1,3 +0,0 @@
-
-BACKLIGHT_ENABLE = no
-
diff --git a/keyboards/40percentclub/mf68/keymaps/mf68_ble/config.h b/keyboards/40percentclub/mf68/keymaps/mf68_ble/config.h
deleted file mode 100644
index 1e87c64a7ebb..000000000000
--- a/keyboards/40percentclub/mf68/keymaps/mf68_ble/config.h
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
-Copyright 2012 Jun Wako
-
-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 .
-*/
-
-#pragma once
-
-
-/* Overrides for Feather 32u4 Bluefruit */
-
-/*
- * Keyboard Matrix Assignments
- *
- * Change this to how you wired your keyboard
- * COLS: AVR pins used for columns, left to right
- * ROWS: AVR pins used for rows, top to bottom
- * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
- * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
- *
-*/
-#undef MATRIX_ROW_PINS
-#undef MATRIX_COL_PINS
-#define MATRIX_ROW_PINS { D1, D0, C6, D7, B5, B6, B7, D6 }
-#define MATRIX_COL_PINS { C7, F7, F6, F5, F4, F1, F0, D2, D3 }
diff --git a/keyboards/40percentclub/mf68/keymaps/mf68_ble/keymap.c b/keyboards/40percentclub/mf68/keymaps/mf68_ble/keymap.c
deleted file mode 100644
index 0002263de517..000000000000
--- a/keyboards/40percentclub/mf68/keymaps/mf68_ble/keymap.c
+++ /dev/null
@@ -1,52 +0,0 @@
-#include QMK_KEYBOARD_H
-
-#define _QWERTY 0
-#define _FN1 1
-#define _FN2 2
-#define KC_X0 LT(_FN2, KC_GRV)
-#define KC_X1 MO(_FN1)
-#define KC_X2 BL_STEP
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [_QWERTY] = LAYOUT_68_ansi(
- /*,----+----+----+----+----+----+----+----+----+----+----+----+----+--------. ,----+----. */
- KC_ESC , KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 ,KC_MINS,KC_EQL , KC_BSPC , KC_INS ,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_PGDN,
- /*|------`----`----`----`----`----`----`----`----`----`----`----`----`------| `----`----' */
- KC_X0 , KC_A , KC_S , KC_D , KC_F , KC_G , KC_H , KC_J , KC_K , KC_L ,KC_SCLN,KC_QUOT, KC_ENTER ,
- /*|-------`----`----`----`----`----`----`----`----`----`----`----`----------| ,----. */
- 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_SPACE , KC_X1 ,KC_RALT ,KC_RCTL , KC_LEFT,KC_DOWN,KC_RGHT
- /*`-----+-----+-----+------------------------------+------+-----+-----' `----+----+----' */
- ),
-
- [_FN1] = LAYOUT_68_ansi(
- /*,----+----+----+----+----+----+----+----+----+----+----+----+----+--------. ,----+----. */
- 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_BSPC , KC_VOLU,KC_HOME,
- /*|esc-`-1--`-2--`-3--`-4--`-5--`-6--`-7--`-8--`-9--`-0--`mnus`plus`--bksp--| |ins-`pgup| */
- KC_TRNS,KC_TRNS,KC_TRNS, KC_UP ,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_X2 , KC_TRNS, KC_VOLD,KC_END,
- /*|tab---`-q--`-w--`-e--`-r--`-t--`-y--`-u--`-i--`-o--`-p--`-{--`-}--`--|---| `del-`pgdn' */
- KC_TRNS,KC_TRNS,KC_LEFT,KC_DOWN,KC_RGHT,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS,
- /*|caps---`-a--`-s--`-d--`-f--`-g--`-h--`-j--`-k--`-l--`-;--`-'--`----enter-| ,----. */
- KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_MUTE,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_MUTE,
- /*|shift----`-z--`-x--`-c--`-v--`-b--`-n--`-m--`-,--`-.--`-/--`-------shift-.--|-up-|----. */
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPRV,KC_MPLY,KC_MNXT
- /*`ctrl-+-gui-+-alt-+----------space---------------+-fn---+-alt-+ctrl-' `left+down+rght' */
- ),
-
- [_FN2] = LAYOUT_68_ansi(
- /*,----+----+----+----+----+----+----+----+----+----+----+----+----+--------. ,----+----. */
- 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_BSPC , KC_VOLU,KC_HOME,
- /*|esc-`-1--`-2--`-3--`-4--`-5--`-6--`-7--`-8--`-9--`-0--`mnus`plus`--bksp--| |ins-`pgup| */
- KC_TRNS,KC_TRNS,KC_TRNS, KC_UP ,KC_TRNS,KC_TRNS,KC_TRNS, KC_7 , KC_8 , KC_9 ,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_VOLD,KC_END,
- /*|tab---`-q--`-w--`-e--`-r--`-t--`-y--`-u--`-i--`-o--`-p--`-{--`-}--`--|---| `del-`pgdn' */
- KC_TRNS,KC_TRNS,KC_LEFT,KC_DOWN,KC_RGHT,KC_TRNS,KC_TRNS, KC_4 , KC_5 , KC_6 ,KC_TRNS,KC_TRNS, KC_TRNS,
- /*|caps---`-a--`-s--`-d--`-f--`-g--`-h--`-j--`-k--`-l--`-;--`-'--`----enter-| ,----. */
- KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_0 , KC_1 , KC_2 , KC_3 ,KC_TRNS, KC_TRNS, KC_MUTE,
- /*|shift----`-z--`-x--`-c--`-v--`-b--`-n--`-m--`-,--`-.--`-/--`-------shift-.--|-up-|----. */
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPRV,KC_MPLY,KC_MNXT
- /*`ctrl-+-gui-+-alt-+----------space---------------+-fn---+-alt-+ctrl-' `left+down+rght' */
- )
-};
diff --git a/keyboards/40percentclub/mf68/keymaps/mf68_ble/readme.md b/keyboards/40percentclub/mf68/keymaps/mf68_ble/readme.md
deleted file mode 100644
index e590ae3e6db4..000000000000
--- a/keyboards/40percentclub/mf68/keymaps/mf68_ble/readme.md
+++ /dev/null
@@ -1,29 +0,0 @@
-# mf68_ble
-
-![mf68_ble](https://i.imgur.com/zuTyy7k.jpg)
-===
-
-Magicforce 68 with [replacement PCB](https://github.com/di0ib/tmk_keyboard/tree/master/keyboard/mf68) designed by [di0ib](https://github.com/di0ib).
-
-Keyboard Maintainer: QMK Community
-Hardware Supported: [Feather 32u4 Bluefruit](https://learn.adafruit.com/adafruit-feather-32u4-bluefruit-le/)
-Please note: This is 32u4 and not M0
-Hardware Availability: [PCB files](https://github.com/di0ib/tmk_keyboard/tree/master/keyboard/mf68/pcb)
-[MF68 thicc case files](https://github.com/harshitgoel96/mf68-case-thicc)
-Story
------
-
-The story and the idea behind this mod is available on [my reddit post](https://www.reddit.com/r/MechanicalKeyboards/comments/7eiiht/guide_i_built_a_bluetooth_enabled_magicforce68_no/)
-
-Wiring
-------
-
-Below is how you wire the Feather to PCB
-
-![wire map](https://i.imgur.com/zYOjlTA.png)
-
-Make example for this keyboard (after setting up your build environment):
-
- make 40percentclub/mf68:mf68_ble
-
-See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/40percentclub/mf68/keymaps/mf68_ble/rules.mk b/keyboards/40percentclub/mf68/keymaps/mf68_ble/rules.mk
deleted file mode 100644
index dedd62afcbcb..000000000000
--- a/keyboards/40percentclub/mf68/keymaps/mf68_ble/rules.mk
+++ /dev/null
@@ -1,9 +0,0 @@
-# Processor frequency
-F_CPU = 8000000
-
-# Build Options
-# change yes to no to disable
-#
-BLUETOOTH_ENABLE = yes
-BLUETOOTH_DRIVER = bluefruit_le
-BACKLIGHT_ENABLE = no
diff --git a/keyboards/40percentclub/nano/keymaps/drashna/config.h b/keyboards/40percentclub/nano/keymaps/drashna/config.h
deleted file mode 100644
index 411ee8a81bb4..000000000000
--- a/keyboards/40percentclub/nano/keymaps/drashna/config.h
+++ /dev/null
@@ -1,22 +0,0 @@
-/* Copyright 2020 Christopher Courtney, aka Drashna Jael're (@drashna)
- *
- * 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 .
- */
-
-#pragma once
-
-#define ANALOG_JOYSTICK_X_AXIS_PIN B4
-#define ANALOG_JOYSTICK_Y_AXIS_PIN B5
-
-#define ANALOG_JOYSTICK_CLICK_PIN E6
diff --git a/keyboards/40percentclub/nano/keymaps/drashna/keymap.c b/keyboards/40percentclub/nano/keymaps/drashna/keymap.c
deleted file mode 100644
index 04da4d16ec8e..000000000000
--- a/keyboards/40percentclub/nano/keymaps/drashna/keymap.c
+++ /dev/null
@@ -1,31 +0,0 @@
-/* Copyright 2020 Christopher Courtney, aka Drashna Jael're (@drashna)
- *
- * 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 .
- */
-
-#include "drashna.h"
-#include "analog.h"
-#include "pointing_device.h"
-
-#define KC_X0 LT(_FN, KC_ESC)
-
-// clang-format off
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [_QWERTY] = LAYOUT(
- KC_VOLU, KC_MPLY, KC_MPRV, QK_BOOT,
- KC_VOLD, KC_MUTE, KC_MNXT, QK_BOOT
- ),
-
-};
-// clang-format on
diff --git a/keyboards/40percentclub/nano/keymaps/drashna/rules.mk b/keyboards/40percentclub/nano/keymaps/drashna/rules.mk
deleted file mode 100644
index aa7966a8b589..000000000000
--- a/keyboards/40percentclub/nano/keymaps/drashna/rules.mk
+++ /dev/null
@@ -1,6 +0,0 @@
-POINTING_DEVICE_ENABLE = yes
-POINTING_DEVICE_DRIVER = analog_joystick
-RGBLIGHT_ENABLE = no
-CONSOLE_ENABLE = no
-
-BOOTLOADER = qmk-dfu
diff --git a/keyboards/40percentclub/nano/keymaps/spooka/config.h b/keyboards/40percentclub/nano/keymaps/spooka/config.h
deleted file mode 100644
index e00505cd8bef..000000000000
--- a/keyboards/40percentclub/nano/keymaps/spooka/config.h
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
-Copyright 2018 Danny Nguyen
-
-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 .
-*/
-
-#pragma once
-
-#undef RGBLED_NUM
-# define RGBLIGHT_EFFECT_BREATHING
-# define RGBLIGHT_EFFECT_RAINBOW_MOOD
-# define RGBLIGHT_EFFECT_RAINBOW_SWIRL
-# define RGBLIGHT_EFFECT_SNAKE
-# define RGBLIGHT_EFFECT_KNIGHT
-# define RGBLIGHT_EFFECT_CHRISTMAS
-# define RGBLIGHT_EFFECT_STATIC_GRADIENT
-# define RGBLIGHT_EFFECT_RGB_TEST
-# define RGBLIGHT_EFFECT_ALTERNATING
-# define RGBLIGHT_EFFECT_TWINKLE
-#define RGBLED_NUM 12
-#define RGBLIGHT_HUE_STEP 8
-#define RGBLIGHT_SAT_STEP 8
-#define RGBLIGHT_VAL_STEP 8
diff --git a/keyboards/40percentclub/nano/keymaps/spooka/keymap.c b/keyboards/40percentclub/nano/keymaps/spooka/keymap.c
deleted file mode 100644
index 7908794fe013..000000000000
--- a/keyboards/40percentclub/nano/keymaps/spooka/keymap.c
+++ /dev/null
@@ -1,10 +0,0 @@
-#include QMK_KEYBOARD_H
-
-#define _MAIN 0
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [_MAIN] = LAYOUT(
- RGB_TOG, RGB_HUI, RGB_SAI, RGB_VAI,
- RGB_MOD, RGB_HUD, RGB_SAD, RGB_VAD
- )
-};
diff --git a/keyboards/40percentclub/nano/keymaps/spooka/rules.mk b/keyboards/40percentclub/nano/keymaps/spooka/rules.mk
deleted file mode 100644
index 8b137891791f..000000000000
--- a/keyboards/40percentclub/nano/keymaps/spooka/rules.mk
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/keyboards/40percentclub/nori/keymaps/macro/config.h b/keyboards/40percentclub/nori/keymaps/macro/config.h
deleted file mode 100644
index 03f34d3f5175..000000000000
--- a/keyboards/40percentclub/nori/keymaps/macro/config.h
+++ /dev/null
@@ -1,21 +0,0 @@
-/* Copyright 2018
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- */
-
-#pragma once
-
-// place overrides here
-#undef RGBLED_NUM
-#define RGBLED_NUM 4
diff --git a/keyboards/40percentclub/nori/keymaps/macro/keymap.c b/keyboards/40percentclub/nori/keymaps/macro/keymap.c
deleted file mode 100644
index fcb1c3dc83e2..000000000000
--- a/keyboards/40percentclub/nori/keymaps/macro/keymap.c
+++ /dev/null
@@ -1,25 +0,0 @@
-/* Copyright 2018
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- */
-#include QMK_KEYBOARD_H
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [0] = LAYOUT_ortho_4x4( /* Base */
- KC_INT1, KC_INT2, KC_INT3, KC_INT5,
- KC_F13, KC_F14, KC_F15, KC_F16,
- KC_F17, KC_F18, KC_F19, KC_F20,
- KC_F21, KC_F22, KC_F23, KC_F24
- ),
-};
diff --git a/keyboards/40percentclub/nori/keymaps/macro/readme.md b/keyboards/40percentclub/nori/keymaps/macro/readme.md
deleted file mode 100644
index de2324248ac7..000000000000
--- a/keyboards/40percentclub/nori/keymaps/macro/readme.md
+++ /dev/null
@@ -1 +0,0 @@
-# The default single board macro keymap for nori
diff --git a/keyboards/40percentclub/nori/keymaps/wings_36key/config.h b/keyboards/40percentclub/nori/keymaps/wings_36key/config.h
deleted file mode 100644
index 0ac12473e046..000000000000
--- a/keyboards/40percentclub/nori/keymaps/wings_36key/config.h
+++ /dev/null
@@ -1,23 +0,0 @@
-/* Copyright 2018
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- */
-
-#pragma once
-
-#define RETRO_TAPPING_PER_KEY
-#define TAPPING_TERM_PER_KEY
-
-#define COMBO_TERM 40 // time out for combos in ms
-#define TAPPING_TERM 200 // time out for tap-hold in ms
diff --git a/keyboards/40percentclub/nori/keymaps/wings_36key/keymap.c b/keyboards/40percentclub/nori/keymaps/wings_36key/keymap.c
deleted file mode 100644
index fc6b19ff3c6d..000000000000
--- a/keyboards/40percentclub/nori/keymaps/wings_36key/keymap.c
+++ /dev/null
@@ -1,118 +0,0 @@
-#include QMK_KEYBOARD_H
-
-// Each layer gets a name for readability, which is then used in the keymap matrix below.
-// The underscores don't mean anything - you can have a layer called STUFF or any other name.
-// Layer names don't all need to be of the same length, obviously, and you can also skip them
-// entirely and just use numbers.
-enum custom_layers {
- _QWERTY,
- _LOWER,
- _RAISE,
- _ADJUST,
-};
-
-#define LOWER MO(_LOWER)
-#define RAISE MO(_RAISE)
-
-#define _ESC MT(MOD_LGUI, KC_ESC) // escape on tap, gui on hold
-#define _SFT MT(MOD_LSFT, KC_ENT) // enter on tap, shift on hold
-#define _SPC MT(MOD_LCTL, KC_SPC) // space on tap, ctrl on hold
-
-const uint16_t PROGMEM df_tab[] = {KC_D, KC_F, COMBO_END};
-const uint16_t PROGMEM jk_alt[] = {KC_J, KC_K, COMBO_END};
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-
-/* Qwerty
- * .-----------------------------------------------------------------------------------.
- * | Q | W | E | R | T | | | Y | U | I | O | P |
- * +------+------+------+------+-------------+------+------+------+------+------+------+
- * | A | S | D | F | G | | | H | J | K | L | : ; |
- * +------+------+------+------+------|------+------+------+------+------+------+------+
- * | Z | X | C | V | B | | | N | M | < , | > . | ? / |
- * +------+------+------+------+------+------+------+------+------+------+------+------+
- * | | | Esc |Enter |Raise | | |Lower |Space |Delete| | |
- * .-----------------------------------------------------------------------------------.
- * esc on tap, gui on hold
- * enter on tap, shift on hold
- * space on tap, ctl on hold
- */
-[_QWERTY] = LAYOUT_ortho_4x12(
- KC_Q, KC_W, KC_E, KC_R, KC_T, XXXXXXX, XXXXXXX, KC_Y, KC_U, KC_I, KC_O, KC_P,
- KC_A, KC_S, KC_D, KC_F, KC_G, XXXXXXX, XXXXXXX, KC_H, KC_J, KC_K, KC_L, KC_SCLN,
- KC_Z, KC_X, KC_C, KC_V, KC_B, XXXXXXX, XXXXXXX, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH,
- XXXXXXX, XXXXXXX, _ESC, _SFT, RAISE, XXXXXXX, XXXXXXX, LOWER, _SPC, KC_BSPC, XXXXXXX, XXXXXXX
-),
-
-/* Lower
- * ,-----------------------------------------------------------------------------------.
- * | ` | ! | @ | # | $ | | | % | ^ | & | * | \ |
- * |------+------+------+------+------+------+------+------+------+------+------+------|
- * | ~ | | | [ | ] | { | | | } | ( | ) | " | ' |
- * |------+------+------+------+------+------+------+------+------+------+------+------|
- * | | | | | | | |Shift | + | = | - | _ |
- * |------+------+------+------+------+------+------+------+------+------+------+------|
- * | | | | |RAISE | | | | | | | |
- * `-----------------------------------------------------------------------------------'
- */
-[_LOWER] = LAYOUT_ortho_4x12(
- KC_GRV, KC_EXLM, KC_AT, KC_HASH, KC_DLR, XXXXXXX, XXXXXXX, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_BSLS,
- KC_TILD, KC_PIPE, KC_LBRC, KC_RBRC, KC_LCBR, XXXXXXX, XXXXXXX, KC_RCBR, KC_LPRN, KC_RPRN, KC_DQUO, KC_QUOT,
- XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_LSFT, KC_PLUS, KC_EQL, KC_MINS, KC_UNDS,
- XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RAISE, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX
-),
-
-/* Raise
- * ,-----------------------------------------------------------------------------------.
- * | 1 | 2 | 3 | 4 | 5 | | | 6 | 7 | 8 | 9 | 0 |
- * |------+------+------+------+------+------+------+------+------+------+------+------|
- * | F1 | F2 | F3 | F4 | F5 | | | | GUI | SFT | CTL | ALT |
- * |------+------+------+------+------+------+------+------+------+------+------+------|
- * | F6 | F7 | F8 | F9 | F10 | | | F11 | F12 | | | Esc |
- * |------+------+------+------+------+------+------+------+------+------+------+------|
- * | | | | | | | |Lower |Space |Delete| | |
- * `-----------------------------------------------------------------------------------'
- */
-[_RAISE] = LAYOUT_ortho_4x12(
- KC_1, KC_2, KC_3, KC_4, KC_5, XXXXXXX, XXXXXXX, KC_6, KC_7, KC_8, KC_9, KC_0,
- KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, XXXXXXX, XXXXXXX, XXXXXXX, KC_LGUI, KC_LSFT, KC_LCTL, KC_LALT,
- KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, XXXXXXX, XXXXXXX, KC_F11, KC_F12, XXXXXXX, XXXXXXX, KC_ESC,
- XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, LOWER, _SPC, KC_BSPC, XXXXXXX, XXXXXXX
-),
-
-/* Adjust (Lower + Raise)
- * ,-----------------------------------------------------------------------------------.
- * |PntSrn| | | PgUp |BrtUp | | | Mute |VolDw |VolUp |Ply/Ps|QK_BOOT |
- * |------+------+------+------+------+------|------+------+------+------+------+------|
- * | | | | PgDw |BrtDw | | | Left | Down | Up |Right | |
- * |------+------+------+------+------+------|------+------+------+------+------+------|
- * | | | | | | | | | Prev | Next | | |
- * |------+------+------+------+------+------|------+------+------+------+------+------|
- * | | | | | | | | | | | | |
- * `-----------------------------------------------------------------------------------'
- */
-[_ADJUST] = LAYOUT_ortho_4x12(
- KC_PSCR, XXXXXXX, XXXXXXX, KC_PGUP, KC_BRIU, XXXXXXX, XXXXXXX, KC_MUTE, KC_VOLD, KC_VOLU, KC_MPLY, QK_BOOT,
- XXXXXXX, XXXXXXX, XXXXXXX, KC_PGDN, KC_BRID, XXXXXXX, XXXXXXX, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, XXXXXXX,
- XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_MPRV, KC_MNXT, XXXXXXX, XXXXXXX,
- XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX
-)
-};
-
-combo_t key_combos[] = {
- COMBO(df_tab, KC_TAB),
- COMBO(jk_alt, KC_LALT),
-};
-
-layer_state_t layer_state_set_user(layer_state_t state) {
- return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST);
-}
-
-uint16_t get_tapping_term(uint16_t keycode, keyrecord_t *record) {
- switch (keycode) {
- case _SFT:
- return TAPPING_TERM - 100;
- default:
- return TAPPING_TERM;
- }
-}
diff --git a/keyboards/40percentclub/nori/keymaps/wings_36key/readme.md b/keyboards/40percentclub/nori/keymaps/wings_36key/readme.md
deleted file mode 100644
index 16eb6d9e112d..000000000000
--- a/keyboards/40percentclub/nori/keymaps/wings_36key/readme.md
+++ /dev/null
@@ -1,3 +0,0 @@
-# 36 Key QWERTY Layout
-
-Offers more hand seperation with a 2 key gap down the middle of the board.
diff --git a/keyboards/40percentclub/nori/keymaps/wings_36key/rules.mk b/keyboards/40percentclub/nori/keymaps/wings_36key/rules.mk
deleted file mode 100644
index 446213032eee..000000000000
--- a/keyboards/40percentclub/nori/keymaps/wings_36key/rules.mk
+++ /dev/null
@@ -1 +0,0 @@
-COMBO_ENABLE = yes # Custom chords
diff --git a/keyboards/40percentclub/sixpack/keymaps/fkeys/keymap.c b/keyboards/40percentclub/sixpack/keymaps/fkeys/keymap.c
deleted file mode 100644
index 4164620b5cc5..000000000000
--- a/keyboards/40percentclub/sixpack/keymaps/fkeys/keymap.c
+++ /dev/null
@@ -1,50 +0,0 @@
-/* Copyright 2020
- *
- * 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 .
- */
-#include QMK_KEYBOARD_H
-
-// Tap Dance declarations
-enum {
- F13F19,
- F14F20,
- F15F21,
- F16F22,
- F17F23,
- F18F24,
-};
-
-// Tap Dance definitions
-tap_dance_action_t tap_dance_actions[] = {
- // Tap once for F13 to F18, twice for F19 to F24
- [F13F19] = ACTION_TAP_DANCE_DOUBLE(KC_F13, KC_F19), [F14F20] = ACTION_TAP_DANCE_DOUBLE(KC_F14, KC_F20), [F15F21] = ACTION_TAP_DANCE_DOUBLE(KC_F15, KC_F21),
- [F16F22] = ACTION_TAP_DANCE_DOUBLE(KC_F16, KC_F22), [F17F23] = ACTION_TAP_DANCE_DOUBLE(KC_F17, KC_F23), [F18F24] = ACTION_TAP_DANCE_DOUBLE(KC_F18, KC_F24)
-};
-
-// Add tap dance item in place of a key code
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-
- /* 2x3 layout
- * .-----------------------------.
- * | F13/F19 | D14/F20 | F15/F21 |
- * |---------+---------+---------+
- * | F16/F22 | D17/F23 | F18/F24 |
- * '-----------------------------'
- */
-
- [0] = LAYOUT_ortho_2x3(/* F13 to F24 */
- TD(F13F19), TD(F14F20), TD(F15F21),
- TD(F16F22), TD(F17F23), TD(F18F24)
- ),
-};
diff --git a/keyboards/40percentclub/sixpack/keymaps/fkeys/readme.md b/keyboards/40percentclub/sixpack/keymaps/fkeys/readme.md
deleted file mode 100644
index 9974588e5f28..000000000000
--- a/keyboards/40percentclub/sixpack/keymaps/fkeys/readme.md
+++ /dev/null
@@ -1 +0,0 @@
-# F13 to F24 keymap with Tap Dance for Six Pack
diff --git a/keyboards/40percentclub/sixpack/keymaps/fkeys/rules.mk b/keyboards/40percentclub/sixpack/keymaps/fkeys/rules.mk
deleted file mode 100644
index e5ddcae8d927..000000000000
--- a/keyboards/40percentclub/sixpack/keymaps/fkeys/rules.mk
+++ /dev/null
@@ -1 +0,0 @@
-TAP_DANCE_ENABLE = yes
diff --git a/keyboards/40percentclub/ut47/keymaps/non-us/keymap.c b/keyboards/40percentclub/ut47/keymaps/non-us/keymap.c
deleted file mode 100644
index 8a0ba7b3916c..000000000000
--- a/keyboards/40percentclub/ut47/keymaps/non-us/keymap.c
+++ /dev/null
@@ -1,135 +0,0 @@
-/* Copyright 2018 Carlos Filoteo
- *
- * 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 .
- */
-#include QMK_KEYBOARD_H
-#ifdef LED_ENABLE
- #include "uart.h"
-#endif
-
-#define LT3_TAB LT(3, KC_TAB)
-#define MT_RSFT_ENT MT(MOD_RSFT, KC_ENT)
-
-enum custom_keycodes {
- LED_TOG = SAFE_RANGE,
- LED_CHG
-};
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-
- /* Base Layer
- * ,-------------------------------------------------------------------------.
- * | Esc | Q | W | E | R | T | Y | U | I | O | P |Bspace |
- * |-------------------------------------------------------------------------+
- * |Tab/L3| A | S | D | F | G | H | J | K | L | ; | ' |
- * |-------------------------------------------------------------------------+
- * | Shift | Z | X | C | V | B | N | M | , | . | / |Sh/En|
- * |-------------------------------------------------------------------------+
- * | Ctrl| Alt | Gui | App | L2 | Space | L1 | Left| Down| Up |Right|
- * `-------------------------------------------------------------------------'
- */
-
-LAYOUT(
- KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
- LT3_TAB, 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, MT_RSFT_ENT,
- KC_LCTL, KC_LALT, KC_LGUI, KC_APP, MO(2), KC_SPC, MO(1), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
-),
-
- /* FN Layer 1
- * ,-------------------------------------------------------------------------.
- * | ` ~ | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Delete|
- * |-------------------------------------------------------------------------+
- * | | | | | | | # | - | = | [ | ] | \ |
- * |-------------------------------------------------------------------------+
- * | | F11 | F12 | F13 | F14 | F15 | F16 | F17 | F18 | F19 | F20 | |
- * |-------------------------------------------------------------------------+
- * | | | |Capsl| | | | Home| PgDn| PgUp| End |
- * `-------------------------------------------------------------------------'
- */
-
-LAYOUT( /* Right */
- KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DELETE,
- _______, _______, _______, _______, _______, _______, KC_NUHS, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_NUBS,
- _______, KC_F11, KC_F12, KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, _______,
- _______, _______, _______, KC_CAPS, _______, _______, _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END
-),
-
- /* FN Layer 2
- * ,-------------------------------------------------------------------------.
- * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) |Delete|
- * |-------------------------------------------------------------------------+
- * | | | | | | | | _ | + | { | } | | |
- * |-------------------------------------------------------------------------+
- * | | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | |
- * |-------------------------------------------------------------------------+
- * | | | |Capsl| | | | Home| PgDn| PgUp| End |
- * `-------------------------------------------------------------------------'
- */
-
-LAYOUT( /* Left */
- KC_TILDE, KC_EXCLAIM, KC_AT, KC_HASH, KC_DOLLAR, KC_PERCENT, KC_CIRCUMFLEX, KC_AMPERSAND, KC_ASTERISK, KC_LEFT_PAREN, KC_RIGHT_PAREN, KC_DELETE,
- _______, _______, _______, _______, _______, _______, _______, KC_UNDERSCORE, KC_PLUS, KC_LEFT_CURLY_BRACE, KC_RIGHT_CURLY_BRACE, KC_PIPE,
- _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, _______,
- _______, _______, _______, KC_CAPS, _______, _______, _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END
-),
-
- /* FN Layer 2
- * ,-------------------------------------------------------------------------.
- * | Esc | Calc|Webhm| Mail| Comp| | | | | |PrtSc| |
- * |-------------------------------------------------------------------------+
- * | | | | | | | | | | | | |
- * |-------------------------------------------------------------------------+
- * | |LEDtg|LEDch| | | | | | | | | |
- * |-------------------------------------------------------------------------+
- * | | | | | | | |MousL|MousD|MousU|MousR|
- * `-------------------------------------------------------------------------'
- */
-
-LAYOUT( /* Tab */
- KC_ESC, KC_CALC, KC_WHOM, KC_MAIL, KC_MYCM, _______, _______, _______, _______, _______, KC_PSCR, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, LED_TOG, LED_CHG, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, KC_MS_L, KC_MS_D, KC_MS_U, KC_MS_R
-),
-};
-
-//LED keymap functions
- #ifdef LED_ENABLE
-void led_chmode(void) {
- uart_write(0x65);
-}
-
-void led_toggle(void) {
- uart_write(0x64);
-}
-
-bool process_record_user(uint16_t keycode, keyrecord_t *record) {
- if (record->event.pressed) {
- switch(keycode) {
- case LED_TOG:
- #ifdef LED_ENABLE
- led_toggle();
- #endif
- return false;
- case LED_CHG:
- #ifdef LED_ENABLE
- led_chmode();
- #endif
- return false;
- }
- }
- return true;
-};
-#endif
diff --git a/keyboards/40percentclub/ut47/keymaps/non-us/readme.md b/keyboards/40percentclub/ut47/keymaps/non-us/readme.md
deleted file mode 100644
index e09dc73fab86..000000000000
--- a/keyboards/40percentclub/ut47/keymaps/non-us/readme.md
+++ /dev/null
@@ -1,19 +0,0 @@
-# UT47 default keymap
-
-![UT47 layout image](https://i.imgur.com/Tsz5qsF.png)
-
-[KLE](http://www.keyboard-layout-editor.com/##@@_y:0%3B&=Esc&=Q&=W&=E&=R&=T&=Y&=U&=I&=O&=P&_w:1.5%3B&=Back%20Space&_x:0.25&a:4&f:4&w:4&h:4&d:true%3B&=%3Cb%3EGNAP!%3C%2F%2Fb%3E%3Cp%3E%3Cp%3EMinimum%20stagger%3Cp%3E47%20key%20layout%3B&@_a:7&f:3&w:1.25%3B&=Tab&=A&=S&=D&=F&=G&=H&=J&=K&=L&=%2F%3B&_w:1.25%3B&=%27%3B&@_w:1.5%3B&=Shift&=Z&=X&=C&=V&=B&=N&=M&=,&=.&=%2F%2F&=Return%3B&@=Ctrl&=Alt&=Super&=Menu&_w:1.25%3B&=%2F&dArr%2F%3B&_w:2%3B&=&_w:1.25%3B&=%2F&uArr%2F%3B&=%2F&larr%2F%3B&=%2F&darr%2F%3B&=%2F&uarr%2F%3B&=%2F&rarr%2F%3B%3B&=undefined)
-
-### LED Controls
-
-Use TAB+Z to cycle through brightness (8 steps)
-
-Use TAB+X to cycle through the following LED modes:
-
-- solid
-- breathing
-- random
-- rain
-- reactive
-- poptang
-- off
diff --git a/keyboards/40percentclub/ut47/keymaps/nordic/keymap.c b/keyboards/40percentclub/ut47/keymaps/nordic/keymap.c
deleted file mode 100644
index 64bc4506dabe..000000000000
--- a/keyboards/40percentclub/ut47/keymaps/nordic/keymap.c
+++ /dev/null
@@ -1,178 +0,0 @@
-/* Copyright 2018 Carlos Filoteo
- *
- * 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 .
- */
-#include QMK_KEYBOARD_H
-#ifdef LED_ENABLE
- #include "uart.h"
-
-#endif
-
-#include "keymap_norwegian.h"
-
-#define LT3_TAB LT(3, KC_TAB)
-#define MT_RSFT_ENT MT(MOD_RSFT, KC_ENT)
-#define CTRADEL LALT(LCTL(KC_DEL))
-#define ALTTAB LALT(KC_TAB)
-
-enum custom_keycodes {
- LED_TOG = SAFE_RANGE,
- LED_CHG
-};
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-
- /* Base Layer - L0
- * ,-------------------------------------------------------------------------.
- * | Esc | Q | W | E | R | T | Y | U | I | O | P |Bspace |
- * |-------------------------------------------------------------------------+
- * |Tab/L3| A | S | D | F | G | H | J | K | L | ' |Ent/RS|
- * |-------------------------------------------------------------------------+
- * | Shift | Z | X | C | V | B | N | M | , | . | Up | L4 |
- * |-------------------------------------------------------------------------+
- * | Ctrl| Gui | L4 | Alt | L2 | Space | L1 | Ctrl| Left| Down|Right|
- * `-------------------------------------------------------------------------'
- */
-
-LAYOUT( /* Base - L0 */
- KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
- LT3_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, NO_QUOT, MT_RSFT_ENT,
- KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_UP, MO(4),
- KC_LCTL, KC_LGUI, MO(4), KC_LALT, MO(2), KC_SPC, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
-),
-
- /* FN Layer 1
- * ,-------------------------------------------------------------------------.
- * | | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Delete|
- * |-------------------------------------------------------------------------+
- * | | | | | | | | | + | = | * | / |
- * |-------------------------------------------------------------------------+
- * | | | | | | | | | - | _ | PgUp| |
- * |-------------------------------------------------------------------------+
- * | | | |Capsl| | | | | Home| PgDn| End |
- * `-------------------------------------------------------------------------'
- */
-
-LAYOUT( /* Right modifier - L1 */
- KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DELETE,
- _______, _______, _______, _______, _______, _______, _______, _______, NO_PLUS, NO_EQL, NO_ASTR, NO_SLSH,
- _______, _______, _______, _______, _______, _______, _______, _______, NO_MINS, NO_UNDS, KC_PGUP, _______,
- _______, _______, _______, KC_CAPS, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_END
-),
-
- /* FN Layer 2
- * ,-------------------------------------------------------------------------.
- * | § | ! | " | # | ¤ | % | & | / | = | + | \ | Delete|
- * |-------------------------------------------------------------------------+
- * | | | ? | { | [ | ( | ) | ] | } | F10 | F11 | F12 |
- * |-------------------------------------------------------------------------+
- * | | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | PgUp| |
- * |-------------------------------------------------------------------------+
- * | | | |Capsl| | | | | Home| PgDn| End |
- * `-------------------------------------------------------------------------'
- */
-
-LAYOUT( /* Left modifier - L2 */
- NO_SECT, KC_EXCLAIM, NO_DQUO, KC_HASH, NO_CURR, KC_PERCENT, NO_AMPR, NO_SLSH, NO_EQL, NO_PLUS, NO_BSLS, KC_DELETE,
- _______, _______, NO_QUES, NO_LCBR, NO_LBRC, NO_LPRN, NO_RPRN, NO_RBRC, NO_RCBR, KC_F10, KC_F11, KC_F12,
- _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_PGUP, _______,
- _______, _______, _______, KC_CAPS, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_END
-),
-
- /* FN Layer 3
- * ,-------------------------------------------------------------------------.
- * | Esc | Calc|Webhm| Comp|Webrf| | | | | |PrtSc|CtrAlDl|
- * |-------------------------------------------------------------------------+
- * | | | | | | | |VolDn|VolUp| | | |
- * |-------------------------------------------------------------------------+
- * | |LEDtg|LEDch| | |QK_BOOT| | Mute| |MouB1|MousU|MouB2|
- * |-------------------------------------------------------------------------+
- * | | | | | | | | |MousL|MousD|MousR|
- * `-------------------------------------------------------------------------'
- */
-
-LAYOUT( /* Hold Tab down - L3 */
- KC_ESC, KC_CALC, KC_WHOM, KC_MYCM, KC_WREF, _______, _______, _______, _______, _______, KC_PSCR, CTRADEL,
- _______, _______, _______, _______, _______, _______, _______, KC_VOLD, KC_VOLU, _______, _______, _______,
- _______, LED_TOG, LED_CHG, _______, _______, QK_BOOT, _______, KC_MUTE, _______, KC_MS_BTN1, KC_MS_U, KC_MS_BTN2,
- _______, _______, _______, _______, _______, _______, _______, _______, KC_MS_L, KC_MS_D, KC_MS_R
-),
-
- /* FN Layer 4
- * ,-------------------------------------------------------------------------.
- * | | | @ | £ | $ | ~ | | ¨ | ´ | ` | Å | |
- * |-------------------------------------------------------------------------+
- * | | | | € | | | | | ^ | Ø | Æ | |
- * |-------------------------------------------------------------------------+
- * | | < | | | | | | µ | | | | |
- * |-------------------------------------------------------------------------+
- * | | | | | | | | L5 | | | |
- * `-------------------------------------------------------------------------'
- */
-
-LAYOUT( /* Norsk - L4 */
- _______, _______, NO_AT, NO_PND, NO_DLR, NO_TILD, _______, NO_QUOT, NO_ACUT, NO_GRV, NO_ARNG, _______,
- _______, _______, _______, NO_EURO, _______, _______, _______, _______, NO_CIRC, NO_OSTR, NO_AE, _______,
- _______, NO_LABK, _______, _______, _______, _______, _______, NO_MICR, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, TO(5), _______, _______, _______
-),
-
- /* GAMING Layer (toggle on and off)
- * ,-------------------------------------------------------------------------.
- * | Esc | Q | W | E | R | T | Y | F1 | F2 | F3 | F4 |Alt+Tab|
- * |-------------------------------------------------------------------------+
- * | Tab | A | S | D | F | G | H | F5 | F6 | F7 | F8 | Enter|
- * |-------------------------------------------------------------------------+
- * | Shift | 1 | 2 | 3 | 4 | 5 | 6 | F9 | F10 | F11 | Up |TOGGL|
- * |-------------------------------------------------------------------------+
- * | Ctrl| Z | X | C | B | Space | M | V |Left |Down |Right|
- * `-------------------------------------------------------------------------'
- */
-
-LAYOUT( /* GAMING, toggled on and off - L5 */
- KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_F1, KC_F2, KC_F3, KC_F4, ALTTAB,
- KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_F5, KC_F6, KC_F7, KC_F8, KC_ENT,
- KC_LSFT, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_F9, KC_F10, KC_F11, KC_UP, TO(0),
- KC_LCTL, KC_Z, KC_X, KC_C, KC_B, KC_SPC, KC_M, KC_V, KC_LEFT, KC_DOWN, KC_RGHT
-),
-};
-
-//LED keymap functions
- #ifdef LED_ENABLE
-void led_chmode(void) {
- uart_write(0x65);
-}
-
-void led_toggle(void) {
- uart_write(0x64);
-}
-
-bool process_record_user(uint16_t keycode, keyrecord_t *record) {
- if (record->event.pressed) {
- switch(keycode) {
- case LED_TOG:
- #ifdef LED_ENABLE
- led_toggle();
- #endif
- return false;
- case LED_CHG:
- #ifdef LED_ENABLE
- led_chmode();
- #endif
- return false;
- }
- }
- return true;
-};
-#endif
diff --git a/keyboards/40percentclub/ut47/keymaps/nordic/readme.md b/keyboards/40percentclub/ut47/keymaps/nordic/readme.md
deleted file mode 100644
index 4b0d0eb1223b..000000000000
--- a/keyboards/40percentclub/ut47/keymaps/nordic/readme.md
+++ /dev/null
@@ -1,33 +0,0 @@
-# UT47 Nordic keymap
-
-
-![UT47 Nordic layout image](https://i.imgur.com/ZNtF4wA.png)
-
-[KLE - Nordic layout](http://www.keyboard-layout-editor.com/##@_name=UT47%20-%20Nordic%20layout&author=neonSpork%3B&@_a:7%3B&=Esc&=Q&=W&=E&=R&=T&=Y&=U&=I&=O&=P&_w:1.5%3B&=Backspace%3B&@_c=%23c75656&a:4&w:1.25%3B&=%0A%0A%0AL3%0A%0A%0A%0A%0A%0ATab&_c=%23cccccc&a:7%3B&=A&=S&=D&=F&=G&=H&=J&=K&=L&='&_a:4&w:1.25%3B&=Enter%0A%0A%0ARShift%3B&@_a:7&w:1.5%3B&=LShift&=Z&=X&=C&=V&=B&=N&=M&=,&=.&=%2F&uarr%2F%3B&_c=%23bb45c4%3B&=L4%3B&@_c=%23cccccc%3B&=LCtrl&=LGUI&_c=%23bb45c4%3B&=L4&_c=%23cccccc%3B&=LAlt&_c=%2333aaff&w:1.25%3B&=L2&_c=%23cccccc&w:2%3B&=Space&_c=%23f5b047&w:1.25%3B&=L1&_c=%23cccccc%3B&=RCtrl&=%2F&larr%2F%3B&=%2F&darr%2F%3B&=%2F&rarr%2F%3B%3B&@_y:0.25&c=%23f5b047%3B&=%7C&=1&=2&=3&=4&=5&=6&=7&=8&=9&=0&_w:1.5%3B&=Delete%3B&@_w:1.25%3B&=&=&=&=&=&=&=&=&=+&=%2F=&=*&_w:1.25%3B&=%2F%2F%3B&@_w:1.5%3B&=&=&=&=&=&=&=&=&=-&=%2F_&=PgUp&=%3B&@=&=&=&=Caps&_w:1.25%3B&=&_w:2%3B&=&_w:1.25%3B&=&=&=Home&=PgDn&=End%3B&@_y:0.25&c=%2333aaff%3B&=%C2%A7&=!&=%22&=%23&=%C2%A4&=%25&=%2F&&=%2F%2F&=%2F=&=+&=%5C&_w:1.5%3B&=Delete%3B&@_w:1.25%3B&=&=&=%3F&=%7B&=%5B&=(&=)&=%5D&=%7D&=F10&=F11&_w:1.25%3B&=F12%3B&@_w:1.5%3B&=&=F1&=F2&=F3&=F4&=F5&=F6&=F7&=F8&=F9&=PgUp&=%3B&@=&=&=&=Caps&_w:1.25%3B&=&_w:2%3B&=&_w:1.25%3B&=&=&=Home&=PgDn&=End%3B&@_y:0.25&c=%23c75656%3B&=Esc&=Calc&_a:5%3B&=www%0A%0A%0A%0A%0A%0Ahome&=My%0A%0A%0A%0A%0A%0AComp&=www%0A%0A%0A%0A%0A%0ARefresh&_a:7%3B&=&=&=&=&=&=PrtScr&_w:1.5%3B&=Ctr%20Alt%20Del%3B&@_w:1.25%3B&=&=&=&=&=&=&=&=VolDn&=VolUp&=&=&_w:1.25%3B&=%3B&@_w:1.5%3B&=&=LEDtg&=LEDch&=&=&=RESET&=&=Mute&=&_a:5%3B&=Mouse%0AClick%0A%0A%0A%0A%0ALeft&=Mouse%0A%0A%0A%0A%0A%0AUp&=Mouse%0AClick%0A%0A%0A%0A%0ARight%3B&@_a:7%3B&=&=&=&=&_w:1.25%3B&=&_w:2%3B&=&_w:1.25%3B&=&=&_a:5%3B&=Mouse%0A%0A%0A%0A%0A%0ALeft&=Mouse%0A%0A%0A%0A%0A%0ADown&=Mouse%0A%0A%0A%0A%0A%0ARight%3B&@_y:0.25&c=%23bb45c4&a:7%3B&=&=&=%2F@&=%C2%A3&=$&=~&=&=%C2%A8&=%C2%B4&=%60&=%C3%85&_w:1.5%3B&=%3B&@_w:1.25%3B&=&=&=&=%E2%82%AC&=&=&=&=&=%5E&=%C3%98&=%C3%86&_w:1.25%3B&=%3B&@_w:1.5%3B&=&=%3C&=&=&=&=&=&=%C2%B5&=&=&=&=%3B&@=&=&=&=&_w:1.25%3B&=&_w:2%3B&=&_w:1.25%3B&=&_c=%2345b564&a:5%3B&=L5%0A%0A%0A%0A%0A%0AON&_c=%23bb45c4&a:7%3B&=&=&=%3B&@_y:0.25&c=%2345b564%3B&=Esc&=Q&=W&=E&=R&=T&=Y&=F1&=F2&=F3&=F4&_w:1.5%3B&=Alt%20Tab%3B&@_w:1.25%3B&=Tab&=A&=S&=D&=F&=G&=H&=F5&=F6&=F7&=F8&_w:1.25%3B&=Enter%3B&@_w:1.5%3B&=Shift&=1&=2&=3&=4&=5&=6&=F9&=F10&=F11&=%2F&uarr%2F%3B&_c=%23cccccc&a:5%3B&=L5%0A%0A%0A%0A%0A%0AOFF%3B&@_c=%2345b564&a:7%3B&=LCtrl&=Z&=X&=C&_w:1.25%3B&=B&_w:2%3B&=Space&_w:1.25%3B&=M&=V&=%2F&larr%2F%3B&=%2F&darr%2F%3B&=%2F&rarr%2F)
-
-
-Chose to modify the layout to include dedicated arrows on the bottom right. Layers 1-4 are modifiers, layer 5 is a toggle on gaming mode. Tab is dual function: Tap for Tab and hold for L3. So is enter: tap for Enter and hold for Right shift.
-
-### Nordic characters
-On its own modifier layer, accessed from left (between left GUI and ALT) or right (above Right arrow)
-
-### Gaming layer
-Toggled on/off, accessed via the Nordic layer.
-
-Toggle on: L4+RCtrl
-
-Toggle off: L4 (above →)
-
-### LED Controls
-
-Use TAB+Z to cycle through brightness (8 steps)
-
-Use TAB+X to cycle through the following LED modes:
-
-- solid
-- breathing
-- random
-- rain
-- reactive
-- poptang
-- off
diff --git a/keyboards/40percentclub/ut47/rules.mk b/keyboards/40percentclub/ut47/rules.mk
index 3b1b719e1421..6ba6aa5f6fa2 100644
--- a/keyboards/40percentclub/ut47/rules.mk
+++ b/keyboards/40percentclub/ut47/rules.mk
@@ -13,4 +13,4 @@ AUDIO_ENABLE = no # Audio output
# custom matrix setup
CUSTOM_MATRIX = yes
SRC += matrix.c
-QUANTUM_LIB_SRC += uart.c
+UART_DRIVER_REQUIRED = yes
diff --git a/keyboards/4by3/keymaps/arrowpad/keymap.c b/keyboards/4by3/keymaps/arrowpad/keymap.c
deleted file mode 100644
index df803a35e609..000000000000
--- a/keyboards/4by3/keymaps/arrowpad/keymap.c
+++ /dev/null
@@ -1,12 +0,0 @@
-#include QMK_KEYBOARD_H
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- /* Change 'LAYOUT_vertical_right' to 'LAYOUT_vertical_left'
- to change the side where the pro micro usb port is. */
- [0] = LAYOUT_vertical_right(
- KC_INS , KC_HOME , KC_PGUP ,
- KC_DEL , KC_END , KC_PGDN ,
- KC_PSCR , KC_UP , KC_PAUS ,
- KC_LEFT , KC_DOWN , KC_RGHT
- )
-};
diff --git a/keyboards/4by3/keymaps/funcpad_horizontal/keymap.c b/keyboards/4by3/keymaps/funcpad_horizontal/keymap.c
deleted file mode 100644
index 287d125ef13c..000000000000
--- a/keyboards/4by3/keymaps/funcpad_horizontal/keymap.c
+++ /dev/null
@@ -1,9 +0,0 @@
-#include QMK_KEYBOARD_H
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [0] = LAYOUT_horizontal(
- KC_F1 , KC_F2 , KC_F3 , KC_F4 ,
- KC_F5 , KC_F6 , KC_F7 , KC_F8 ,
- KC_F9 , KC_F10 , KC_F11 , KC_F12
- )
-};
diff --git a/keyboards/4by3/keymaps/funcpad_vertical/keymap.c b/keyboards/4by3/keymaps/funcpad_vertical/keymap.c
deleted file mode 100644
index c345f282401b..000000000000
--- a/keyboards/4by3/keymaps/funcpad_vertical/keymap.c
+++ /dev/null
@@ -1,12 +0,0 @@
-#include QMK_KEYBOARD_H
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- /* Change 'LAYOUT_vertical_right' to 'LAYOUT_vertical_left'
- to change the side where the pro micro usb port is. */
- [0] = LAYOUT_vertical_right(
- KC_F1 , KC_F2 , KC_F3 ,
- KC_F4 , KC_F5 , KC_F6 ,
- KC_F7 , KC_F8 , KC_F9 ,
- KC_F10 , KC_F11 , KC_F12
- )
-};
diff --git a/keyboards/4by3/keymaps/numpad_horizontal/keymap.c b/keyboards/4by3/keymaps/numpad_horizontal/keymap.c
deleted file mode 100644
index c1195b0bc90e..000000000000
--- a/keyboards/4by3/keymaps/numpad_horizontal/keymap.c
+++ /dev/null
@@ -1,9 +0,0 @@
-#include QMK_KEYBOARD_H
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [0] = LAYOUT_horizontal(
- KC_P1 , KC_P2 , KC_P3 , KC_P4 ,
- KC_P5 , KC_P6 , KC_P7 , KC_P8 ,
- KC_P9 , KC_P0 , KC_BSPC , KC_ENT
- ),
-};
diff --git a/keyboards/4by3/keymaps/numpad_vertical/keymap.c b/keyboards/4by3/keymaps/numpad_vertical/keymap.c
deleted file mode 100644
index 7705ea9b83e1..000000000000
--- a/keyboards/4by3/keymaps/numpad_vertical/keymap.c
+++ /dev/null
@@ -1,12 +0,0 @@
-#include QMK_KEYBOARD_H
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- /* Change 'LAYOUT_vertical_right' to 'LAYOUT_vertical_left'
- to change the side where the pro micro usb port is. */
- [0] = LAYOUT_vertical_right(
- KC_P1 , KC_P2 , KC_P3 ,
- KC_P4 , KC_P5 , KC_P6 ,
- KC_P7 , KC_P8 , KC_P9 ,
- KC_BSPC , KC_P0 , KC_ENT
- ),
-};
diff --git a/keyboards/4pplet/eagle_viper_rep/rev_a/config.h b/keyboards/4pplet/eagle_viper_rep/rev_a/config.h
index 9bec945f24a8..350b9abad7f9 100644
--- a/keyboards/4pplet/eagle_viper_rep/rev_a/config.h
+++ b/keyboards/4pplet/eagle_viper_rep/rev_a/config.h
@@ -20,7 +20,7 @@ along with this program. If not, see .
#define BACKLIGHT_PWM_CHANNEL 4
/* Underglow */
-#define WS2812_SPI SPID1
+#define WS2812_SPI_DRIVER SPID1
#define WS2812_SPI_MOSI_PAL_MODE 0
#define WS2812_SPI_SCK_PIN A5
#define WS2812_SPI_SCK_PAL_MODE 0
@@ -41,6 +41,3 @@ along with this program. If not, see .
#define LAYER_3 A8
#define LAYER_4 A9
#define LAYER_5 B9
-
-/* Added extra layer for use of layer leds */
-#define DYNAMIC_KEYMAP_LAYER_COUNT 5
diff --git a/keyboards/4pplet/eagle_viper_rep/rev_a/info.json b/keyboards/4pplet/eagle_viper_rep/rev_a/info.json
index 4be993daea16..baafb58153bf 100644
--- a/keyboards/4pplet/eagle_viper_rep/rev_a/info.json
+++ b/keyboards/4pplet/eagle_viper_rep/rev_a/info.json
@@ -13,6 +13,9 @@
"rows": ["A2", "A1", "B8", "A10", "C15", "A15", "B7", "B6", "C14", "C13"]
},
"diode_direction": "COL2ROW",
+ "dynamic_keymap": {
+ "layer_count": 5
+ },
"backlight": {
"pin": "A3",
"levels": 10,
@@ -41,6 +44,16 @@
},
"processor": "STM32F072",
"bootloader": "stm32-dfu",
+ "community_layouts": [
+ "60_ansi",
+ "60_ansi_split_bs_rshift",
+ "60_ansi_tsangan",
+ "60_tsangan_hhkb",
+ "60_hhkb",
+ "60_iso",
+ "60_iso_split_bs_rshift",
+ "60_iso_tsangan"
+ ],
"layouts": {
"LAYOUT_all": {
"layout": [
@@ -115,6 +128,75 @@
{"label": "Ctrl", "matrix": [8, 6], "x": 13.75, "y": 4, "w": 1.25}
]
},
+ "LAYOUT_60_ansi": {
+ "layout": [
+ {"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
+ {"label": "!", "matrix": [1, 0], "x": 1, "y": 0},
+ {"label": "@", "matrix": [0, 1], "x": 2, "y": 0},
+ {"label": "#", "matrix": [1, 1], "x": 3, "y": 0},
+ {"label": "$", "matrix": [0, 2], "x": 4, "y": 0},
+ {"label": "%", "matrix": [1, 2], "x": 5, "y": 0},
+ {"label": "^", "matrix": [0, 3], "x": 6, "y": 0},
+ {"label": "&", "matrix": [1, 3], "x": 7, "y": 0},
+ {"label": "*", "matrix": [0, 4], "x": 8, "y": 0},
+ {"label": "(", "matrix": [1, 4], "x": 9, "y": 0},
+ {"label": ")", "matrix": [0, 5], "x": 10, "y": 0},
+ {"label": "_", "matrix": [1, 5], "x": 11, "y": 0},
+ {"label": "+", "matrix": [0, 6], "x": 12, "y": 0},
+ {"label": "Backspace", "matrix": [3, 6], "x": 13, "y": 0, "w": 2},
+
+ {"label": "Tab", "matrix": [2, 0], "x": 0, "y": 1, "w": 1.5},
+ {"label": "Q", "matrix": [3, 0], "x": 1.5, "y": 1},
+ {"label": "W", "matrix": [2, 1], "x": 2.5, "y": 1},
+ {"label": "E", "matrix": [3, 1], "x": 3.5, "y": 1},
+ {"label": "R", "matrix": [2, 2], "x": 4.5, "y": 1},
+ {"label": "T", "matrix": [3, 2], "x": 5.5, "y": 1},
+ {"label": "Y", "matrix": [2, 3], "x": 6.5, "y": 1},
+ {"label": "U", "matrix": [3, 3], "x": 7.5, "y": 1},
+ {"label": "I", "matrix": [2, 4], "x": 8.5, "y": 1},
+ {"label": "O", "matrix": [3, 4], "x": 9.5, "y": 1},
+ {"label": "P", "matrix": [2, 5], "x": 10.5, "y": 1},
+ {"label": "{", "matrix": [3, 5], "x": 11.5, "y": 1},
+ {"label": "}", "matrix": [2, 6], "x": 12.5, "y": 1},
+ {"label": "|", "matrix": [5, 6], "x": 13.5, "y": 1, "w": 1.5},
+
+ {"label": "Caps Lock", "matrix": [4, 0], "x": 0, "y": 2, "w": 1.75},
+ {"label": "A", "matrix": [5, 0], "x": 1.75, "y": 2},
+ {"label": "S", "matrix": [4, 1], "x": 2.75, "y": 2},
+ {"label": "D", "matrix": [5, 1], "x": 3.75, "y": 2},
+ {"label": "F", "matrix": [4, 2], "x": 4.75, "y": 2},
+ {"label": "G", "matrix": [5, 2], "x": 5.75, "y": 2},
+ {"label": "H", "matrix": [4, 3], "x": 6.75, "y": 2},
+ {"label": "J", "matrix": [5, 3], "x": 7.75, "y": 2},
+ {"label": "K", "matrix": [4, 4], "x": 8.75, "y": 2},
+ {"label": "L", "matrix": [5, 4], "x": 9.75, "y": 2},
+ {"label": ":", "matrix": [4, 5], "x": 10.75, "y": 2},
+ {"label": "\"", "matrix": [5, 5], "x": 11.75, "y": 2},
+ {"label": "Enter", "matrix": [7, 6], "x": 12.75, "y": 2, "w": 2.25},
+
+ {"label": "Shift", "matrix": [6, 0], "x": 0, "y": 3, "w": 2.25},
+ {"label": "Z", "matrix": [6, 1], "x": 2.25, "y": 3},
+ {"label": "X", "matrix": [7, 1], "x": 3.25, "y": 3},
+ {"label": "C", "matrix": [6, 2], "x": 4.25, "y": 3},
+ {"label": "V", "matrix": [7, 2], "x": 5.25, "y": 3},
+ {"label": "B", "matrix": [6, 3], "x": 6.25, "y": 3},
+ {"label": "N", "matrix": [7, 3], "x": 7.25, "y": 3},
+ {"label": "M", "matrix": [6, 4], "x": 8.25, "y": 3},
+ {"label": "<", "matrix": [7, 4], "x": 9.25, "y": 3},
+ {"label": ">", "matrix": [6, 5], "x": 10.25, "y": 3},
+ {"label": "?", "matrix": [7, 5], "x": 11.25, "y": 3},
+ {"label": "Shift", "matrix": [6, 6], "x": 12.25, "y": 3, "w": 2.75},
+
+ {"label": "Ctrl", "matrix": [8, 0], "x": 0, "y": 4, "w": 1.25},
+ {"label": "Win", "matrix": [9, 0], "x": 1.25, "y": 4, "w": 1.25},
+ {"label": "Alt", "matrix": [9, 1], "x": 2.5, "y": 4, "w": 1.25},
+ {"label": "Space", "matrix": [9, 3], "x": 3.75, "y": 4, "w": 6.25},
+ {"label": "Alt", "matrix": [9, 4], "x": 10, "y": 4, "w": 1.25},
+ {"label": "Menu", "matrix": [8, 5], "x": 11.25, "y": 4, "w": 1.25},
+ {"label": "Win", "matrix": [9, 5], "x": 12.5, "y": 4, "w": 1.25},
+ {"label": "Ctrl", "matrix": [8, 6], "x": 13.75, "y": 4, "w": 1.25}
+ ]
+ },
"LAYOUT_60_ansi_split_bs_rshift": {
"layout": [
{"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
@@ -186,6 +268,74 @@
{"label": "Ctrl", "matrix": [8, 6], "x": 13.75, "y": 4, "w": 1.25}
]
},
+ "LAYOUT_60_ansi_tsangan": {
+ "layout": [
+ {"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
+ {"label": "!", "matrix": [1, 0], "x": 1, "y": 0},
+ {"label": "@", "matrix": [0, 1], "x": 2, "y": 0},
+ {"label": "#", "matrix": [1, 1], "x": 3, "y": 0},
+ {"label": "$", "matrix": [0, 2], "x": 4, "y": 0},
+ {"label": "%", "matrix": [1, 2], "x": 5, "y": 0},
+ {"label": "^", "matrix": [0, 3], "x": 6, "y": 0},
+ {"label": "&", "matrix": [1, 3], "x": 7, "y": 0},
+ {"label": "*", "matrix": [0, 4], "x": 8, "y": 0},
+ {"label": "(", "matrix": [1, 4], "x": 9, "y": 0},
+ {"label": ")", "matrix": [0, 5], "x": 10, "y": 0},
+ {"label": "_", "matrix": [1, 5], "x": 11, "y": 0},
+ {"label": "+", "matrix": [0, 6], "x": 12, "y": 0},
+ {"label": "Backspace", "matrix": [3, 6], "x": 13, "y": 0, "w": 2},
+
+ {"label": "Tab", "matrix": [2, 0], "x": 0, "y": 1, "w": 1.5},
+ {"label": "Q", "matrix": [3, 0], "x": 1.5, "y": 1},
+ {"label": "W", "matrix": [2, 1], "x": 2.5, "y": 1},
+ {"label": "E", "matrix": [3, 1], "x": 3.5, "y": 1},
+ {"label": "R", "matrix": [2, 2], "x": 4.5, "y": 1},
+ {"label": "T", "matrix": [3, 2], "x": 5.5, "y": 1},
+ {"label": "Y", "matrix": [2, 3], "x": 6.5, "y": 1},
+ {"label": "U", "matrix": [3, 3], "x": 7.5, "y": 1},
+ {"label": "I", "matrix": [2, 4], "x": 8.5, "y": 1},
+ {"label": "O", "matrix": [3, 4], "x": 9.5, "y": 1},
+ {"label": "P", "matrix": [2, 5], "x": 10.5, "y": 1},
+ {"label": "{", "matrix": [3, 5], "x": 11.5, "y": 1},
+ {"label": "}", "matrix": [2, 6], "x": 12.5, "y": 1},
+ {"label": "|", "matrix": [5, 6], "x": 13.5, "y": 1, "w": 1.5},
+
+ {"label": "Caps Lock", "matrix": [4, 0], "x": 0, "y": 2, "w": 1.75},
+ {"label": "A", "matrix": [5, 0], "x": 1.75, "y": 2},
+ {"label": "S", "matrix": [4, 1], "x": 2.75, "y": 2},
+ {"label": "D", "matrix": [5, 1], "x": 3.75, "y": 2},
+ {"label": "F", "matrix": [4, 2], "x": 4.75, "y": 2},
+ {"label": "G", "matrix": [5, 2], "x": 5.75, "y": 2},
+ {"label": "H", "matrix": [4, 3], "x": 6.75, "y": 2},
+ {"label": "J", "matrix": [5, 3], "x": 7.75, "y": 2},
+ {"label": "K", "matrix": [4, 4], "x": 8.75, "y": 2},
+ {"label": "L", "matrix": [5, 4], "x": 9.75, "y": 2},
+ {"label": ":", "matrix": [4, 5], "x": 10.75, "y": 2},
+ {"label": "\"", "matrix": [5, 5], "x": 11.75, "y": 2},
+ {"label": "Enter", "matrix": [7, 6], "x": 12.75, "y": 2, "w": 2.25},
+
+ {"label": "Shift", "matrix": [6, 0], "x": 0, "y": 3, "w": 2.25},
+ {"label": "Z", "matrix": [6, 1], "x": 2.25, "y": 3},
+ {"label": "X", "matrix": [7, 1], "x": 3.25, "y": 3},
+ {"label": "C", "matrix": [6, 2], "x": 4.25, "y": 3},
+ {"label": "V", "matrix": [7, 2], "x": 5.25, "y": 3},
+ {"label": "B", "matrix": [6, 3], "x": 6.25, "y": 3},
+ {"label": "N", "matrix": [7, 3], "x": 7.25, "y": 3},
+ {"label": "M", "matrix": [6, 4], "x": 8.25, "y": 3},
+ {"label": "<", "matrix": [7, 4], "x": 9.25, "y": 3},
+ {"label": ">", "matrix": [6, 5], "x": 10.25, "y": 3},
+ {"label": "?", "matrix": [7, 5], "x": 11.25, "y": 3},
+ {"label": "Shift", "matrix": [6, 6], "x": 12.25, "y": 3, "w": 2.75},
+
+ {"label": "Ctrl", "matrix": [8, 0], "x": 0, "y": 4, "w": 1.5},
+ {"label": "Win", "matrix": [9, 0], "x": 1.5, "y": 4},
+ {"label": "Alt", "matrix": [9, 1], "x": 2.5, "y": 4, "w": 1.5},
+ {"label": "Space", "matrix": [9, 3], "x": 4, "y": 4, "w": 7},
+ {"label": "Alt", "matrix": [8, 5], "x": 11, "y": 4, "w": 1.5},
+ {"label": "Win", "matrix": [9, 5], "x": 12.5, "y": 4},
+ {"label": "Ctrl", "matrix": [8, 6], "x": 13.5, "y": 4, "w": 1.5}
+ ]
+ },
"LAYOUT_60_tsangan_hhkb": {
"layout": [
{"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
@@ -323,6 +473,288 @@
{"label": "GUI", "matrix": [8, 5], "x": 11, "y": 4, "w": 1.5},
{"label": "Alt", "matrix": [9, 5], "x": 12.5, "y": 4}
]
+ },
+ "LAYOUT_60_iso": {
+ "layout": [
+ {"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
+ {"label": "!", "matrix": [1, 0], "x": 1, "y": 0},
+ {"label": "\"", "matrix": [0, 1], "x": 2, "y": 0},
+ {"label": "\u00a3", "matrix": [1, 1], "x": 3, "y": 0},
+ {"label": "$", "matrix": [0, 2], "x": 4, "y": 0},
+ {"label": "%", "matrix": [1, 2], "x": 5, "y": 0},
+ {"label": "^", "matrix": [0, 3], "x": 6, "y": 0},
+ {"label": "&", "matrix": [1, 3], "x": 7, "y": 0},
+ {"label": "*", "matrix": [0, 4], "x": 8, "y": 0},
+ {"label": "(", "matrix": [1, 4], "x": 9, "y": 0},
+ {"label": ")", "matrix": [0, 5], "x": 10, "y": 0},
+ {"label": "_", "matrix": [1, 5], "x": 11, "y": 0},
+ {"label": "+", "matrix": [0, 6], "x": 12, "y": 0},
+ {"label": "Backspace", "matrix": [3, 6], "x": 13, "y": 0, "w": 2},
+
+ {"label": "Tab", "matrix": [2, 0], "x": 0, "y": 1, "w": 1.5},
+ {"label": "Q", "matrix": [3, 0], "x": 1.5, "y": 1},
+ {"label": "W", "matrix": [2, 1], "x": 2.5, "y": 1},
+ {"label": "E", "matrix": [3, 1], "x": 3.5, "y": 1},
+ {"label": "R", "matrix": [2, 2], "x": 4.5, "y": 1},
+ {"label": "T", "matrix": [3, 2], "x": 5.5, "y": 1},
+ {"label": "Y", "matrix": [2, 3], "x": 6.5, "y": 1},
+ {"label": "U", "matrix": [3, 3], "x": 7.5, "y": 1},
+ {"label": "I", "matrix": [2, 4], "x": 8.5, "y": 1},
+ {"label": "O", "matrix": [3, 4], "x": 9.5, "y": 1},
+ {"label": "P", "matrix": [2, 5], "x": 10.5, "y": 1},
+ {"label": "{", "matrix": [3, 5], "x": 11.5, "y": 1},
+ {"label": "}", "matrix": [2, 6], "x": 12.5, "y": 1},
+
+ {"label": "Caps Lock", "matrix": [4, 0], "x": 0, "y": 2, "w": 1.75},
+ {"label": "A", "matrix": [5, 0], "x": 1.75, "y": 2},
+ {"label": "S", "matrix": [4, 1], "x": 2.75, "y": 2},
+ {"label": "D", "matrix": [5, 1], "x": 3.75, "y": 2},
+ {"label": "F", "matrix": [4, 2], "x": 4.75, "y": 2},
+ {"label": "G", "matrix": [5, 2], "x": 5.75, "y": 2},
+ {"label": "H", "matrix": [4, 3], "x": 6.75, "y": 2},
+ {"label": "J", "matrix": [5, 3], "x": 7.75, "y": 2},
+ {"label": "K", "matrix": [4, 4], "x": 8.75, "y": 2},
+ {"label": "L", "matrix": [5, 4], "x": 9.75, "y": 2},
+ {"label": ":", "matrix": [4, 5], "x": 10.75, "y": 2},
+ {"label": "@", "matrix": [5, 5], "x": 11.75, "y": 2},
+ {"label": "~", "matrix": [4, 6], "x": 12.75, "y": 2},
+ {"label": "Enter", "matrix": [7, 6], "x": 13.75, "y": 1, "w": 1.25, "h": 2},
+
+ {"label": "Shift", "matrix": [6, 0], "x": 0, "y": 3, "w": 1.25},
+ {"label": "|", "matrix": [7, 0], "x": 1.25, "y": 3},
+ {"label": "Z", "matrix": [6, 1], "x": 2.25, "y": 3},
+ {"label": "X", "matrix": [7, 1], "x": 3.25, "y": 3},
+ {"label": "C", "matrix": [6, 2], "x": 4.25, "y": 3},
+ {"label": "V", "matrix": [7, 2], "x": 5.25, "y": 3},
+ {"label": "B", "matrix": [6, 3], "x": 6.25, "y": 3},
+ {"label": "N", "matrix": [7, 3], "x": 7.25, "y": 3},
+ {"label": "M", "matrix": [6, 4], "x": 8.25, "y": 3},
+ {"label": "<", "matrix": [7, 4], "x": 9.25, "y": 3},
+ {"label": ">", "matrix": [6, 5], "x": 10.25, "y": 3},
+ {"label": "?", "matrix": [7, 5], "x": 11.25, "y": 3},
+ {"label": "Shift", "matrix": [6, 6], "x": 12.25, "y": 3, "w": 2.75},
+
+ {"label": "Ctrl", "matrix": [8, 0], "x": 0, "y": 4, "w": 1.25},
+ {"label": "Win", "matrix": [9, 0], "x": 1.25, "y": 4, "w": 1.25},
+ {"label": "Alt", "matrix": [9, 1], "x": 2.5, "y": 4, "w": 1.25},
+ {"label": "Space", "matrix": [9, 3], "x": 3.75, "y": 4, "w": 6.25},
+ {"label": "Alt", "matrix": [9, 4], "x": 10, "y": 4, "w": 1.25},
+ {"label": "Menu", "matrix": [8, 5], "x": 11.25, "y": 4, "w": 1.25},
+ {"label": "Win", "matrix": [9, 5], "x": 12.5, "y": 4, "w": 1.25},
+ {"label": "Ctrl", "matrix": [8, 6], "x": 13.75, "y": 4, "w": 1.25}
+ ]
+ },
+ "LAYOUT_60_iso_split_bs_rshift": {
+ "layout": [
+ {"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
+ {"label": "!", "matrix": [1, 0], "x": 1, "y": 0},
+ {"label": "\"", "matrix": [0, 1], "x": 2, "y": 0},
+ {"label": "\u00a3", "matrix": [1, 1], "x": 3, "y": 0},
+ {"label": "$", "matrix": [0, 2], "x": 4, "y": 0},
+ {"label": "%", "matrix": [1, 2], "x": 5, "y": 0},
+ {"label": "^", "matrix": [0, 3], "x": 6, "y": 0},
+ {"label": "&", "matrix": [1, 3], "x": 7, "y": 0},
+ {"label": "*", "matrix": [0, 4], "x": 8, "y": 0},
+ {"label": "(", "matrix": [1, 4], "x": 9, "y": 0},
+ {"label": ")", "matrix": [0, 5], "x": 10, "y": 0},
+ {"label": "_", "matrix": [1, 5], "x": 11, "y": 0},
+ {"label": "+", "matrix": [0, 6], "x": 12, "y": 0},
+ {"label": "|", "matrix": [1, 6], "x": 13, "y": 0},
+ {"label": "Backspace", "matrix": [3, 6], "x": 14, "y": 0},
+
+ {"label": "Tab", "matrix": [2, 0], "x": 0, "y": 1, "w": 1.5},
+ {"label": "Q", "matrix": [3, 0], "x": 1.5, "y": 1},
+ {"label": "W", "matrix": [2, 1], "x": 2.5, "y": 1},
+ {"label": "E", "matrix": [3, 1], "x": 3.5, "y": 1},
+ {"label": "R", "matrix": [2, 2], "x": 4.5, "y": 1},
+ {"label": "T", "matrix": [3, 2], "x": 5.5, "y": 1},
+ {"label": "Y", "matrix": [2, 3], "x": 6.5, "y": 1},
+ {"label": "U", "matrix": [3, 3], "x": 7.5, "y": 1},
+ {"label": "I", "matrix": [2, 4], "x": 8.5, "y": 1},
+ {"label": "O", "matrix": [3, 4], "x": 9.5, "y": 1},
+ {"label": "P", "matrix": [2, 5], "x": 10.5, "y": 1},
+ {"label": "{", "matrix": [3, 5], "x": 11.5, "y": 1},
+ {"label": "}", "matrix": [2, 6], "x": 12.5, "y": 1},
+
+ {"label": "Caps Lock", "matrix": [4, 0], "x": 0, "y": 2, "w": 1.75},
+ {"label": "A", "matrix": [5, 0], "x": 1.75, "y": 2},
+ {"label": "S", "matrix": [4, 1], "x": 2.75, "y": 2},
+ {"label": "D", "matrix": [5, 1], "x": 3.75, "y": 2},
+ {"label": "F", "matrix": [4, 2], "x": 4.75, "y": 2},
+ {"label": "G", "matrix": [5, 2], "x": 5.75, "y": 2},
+ {"label": "H", "matrix": [4, 3], "x": 6.75, "y": 2},
+ {"label": "J", "matrix": [5, 3], "x": 7.75, "y": 2},
+ {"label": "K", "matrix": [4, 4], "x": 8.75, "y": 2},
+ {"label": "L", "matrix": [5, 4], "x": 9.75, "y": 2},
+ {"label": ":", "matrix": [4, 5], "x": 10.75, "y": 2},
+ {"label": "@", "matrix": [5, 5], "x": 11.75, "y": 2},
+ {"label": "~", "matrix": [4, 6], "x": 12.75, "y": 2},
+ {"label": "Enter", "matrix": [7, 6], "x": 13.75, "y": 1, "w": 1.25, "h": 2},
+
+ {"label": "Shift", "matrix": [6, 0], "x": 0, "y": 3, "w": 1.25},
+ {"label": "|", "matrix": [7, 0], "x": 1.25, "y": 3},
+ {"label": "Z", "matrix": [6, 1], "x": 2.25, "y": 3},
+ {"label": "X", "matrix": [7, 1], "x": 3.25, "y": 3},
+ {"label": "C", "matrix": [6, 2], "x": 4.25, "y": 3},
+ {"label": "V", "matrix": [7, 2], "x": 5.25, "y": 3},
+ {"label": "B", "matrix": [6, 3], "x": 6.25, "y": 3},
+ {"label": "N", "matrix": [7, 3], "x": 7.25, "y": 3},
+ {"label": "M", "matrix": [6, 4], "x": 8.25, "y": 3},
+ {"label": "<", "matrix": [7, 4], "x": 9.25, "y": 3},
+ {"label": ">", "matrix": [6, 5], "x": 10.25, "y": 3},
+ {"label": "?", "matrix": [7, 5], "x": 11.25, "y": 3},
+ {"label": "Shift", "matrix": [6, 6], "x": 12.25, "y": 3, "w": 1.75},
+ {"label": "Fn", "matrix": [9, 6], "x": 14, "y": 3},
+
+ {"label": "Ctrl", "matrix": [8, 0], "x": 0, "y": 4, "w": 1.25},
+ {"label": "Win", "matrix": [9, 0], "x": 1.25, "y": 4, "w": 1.25},
+ {"label": "Alt", "matrix": [9, 1], "x": 2.5, "y": 4, "w": 1.25},
+ {"label": "Space", "matrix": [9, 3], "x": 3.75, "y": 4, "w": 6.25},
+ {"label": "Alt", "matrix": [9, 4], "x": 10, "y": 4, "w": 1.25},
+ {"label": "Menu", "matrix": [8, 5], "x": 11.25, "y": 4, "w": 1.25},
+ {"label": "Win", "matrix": [9, 5], "x": 12.5, "y": 4, "w": 1.25},
+ {"label": "Ctrl", "matrix": [8, 6], "x": 13.75, "y": 4, "w": 1.25}
+ ]
+ },
+ "LAYOUT_60_iso_tsangan": {
+ "layout": [
+ {"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
+ {"label": "!", "matrix": [1, 0], "x": 1, "y": 0},
+ {"label": "\"", "matrix": [0, 1], "x": 2, "y": 0},
+ {"label": "\u00a3", "matrix": [1, 1], "x": 3, "y": 0},
+ {"label": "$", "matrix": [0, 2], "x": 4, "y": 0},
+ {"label": "%", "matrix": [1, 2], "x": 5, "y": 0},
+ {"label": "^", "matrix": [0, 3], "x": 6, "y": 0},
+ {"label": "&", "matrix": [1, 3], "x": 7, "y": 0},
+ {"label": "*", "matrix": [0, 4], "x": 8, "y": 0},
+ {"label": "(", "matrix": [1, 4], "x": 9, "y": 0},
+ {"label": ")", "matrix": [0, 5], "x": 10, "y": 0},
+ {"label": "_", "matrix": [1, 5], "x": 11, "y": 0},
+ {"label": "+", "matrix": [0, 6], "x": 12, "y": 0},
+ {"label": "Backspace", "matrix": [3, 6], "x": 13, "y": 0, "w": 2},
+
+ {"label": "Tab", "matrix": [2, 0], "x": 0, "y": 1, "w": 1.5},
+ {"label": "Q", "matrix": [3, 0], "x": 1.5, "y": 1},
+ {"label": "W", "matrix": [2, 1], "x": 2.5, "y": 1},
+ {"label": "E", "matrix": [3, 1], "x": 3.5, "y": 1},
+ {"label": "R", "matrix": [2, 2], "x": 4.5, "y": 1},
+ {"label": "T", "matrix": [3, 2], "x": 5.5, "y": 1},
+ {"label": "Y", "matrix": [2, 3], "x": 6.5, "y": 1},
+ {"label": "U", "matrix": [3, 3], "x": 7.5, "y": 1},
+ {"label": "I", "matrix": [2, 4], "x": 8.5, "y": 1},
+ {"label": "O", "matrix": [3, 4], "x": 9.5, "y": 1},
+ {"label": "P", "matrix": [2, 5], "x": 10.5, "y": 1},
+ {"label": "{", "matrix": [3, 5], "x": 11.5, "y": 1},
+ {"label": "}", "matrix": [2, 6], "x": 12.5, "y": 1},
+
+ {"label": "Caps Lock", "matrix": [4, 0], "x": 0, "y": 2, "w": 1.75},
+ {"label": "A", "matrix": [5, 0], "x": 1.75, "y": 2},
+ {"label": "S", "matrix": [4, 1], "x": 2.75, "y": 2},
+ {"label": "D", "matrix": [5, 1], "x": 3.75, "y": 2},
+ {"label": "F", "matrix": [4, 2], "x": 4.75, "y": 2},
+ {"label": "G", "matrix": [5, 2], "x": 5.75, "y": 2},
+ {"label": "H", "matrix": [4, 3], "x": 6.75, "y": 2},
+ {"label": "J", "matrix": [5, 3], "x": 7.75, "y": 2},
+ {"label": "K", "matrix": [4, 4], "x": 8.75, "y": 2},
+ {"label": "L", "matrix": [5, 4], "x": 9.75, "y": 2},
+ {"label": ":", "matrix": [4, 5], "x": 10.75, "y": 2},
+ {"label": "@", "matrix": [5, 5], "x": 11.75, "y": 2},
+ {"label": "~", "matrix": [4, 6], "x": 12.75, "y": 2},
+ {"label": "Enter", "matrix": [7, 6], "x": 13.75, "y": 1, "w": 1.25, "h": 2},
+
+ {"label": "Shift", "matrix": [6, 0], "x": 0, "y": 3, "w": 1.25},
+ {"label": "|", "matrix": [7, 0], "x": 1.25, "y": 3},
+ {"label": "Z", "matrix": [6, 1], "x": 2.25, "y": 3},
+ {"label": "X", "matrix": [7, 1], "x": 3.25, "y": 3},
+ {"label": "C", "matrix": [6, 2], "x": 4.25, "y": 3},
+ {"label": "V", "matrix": [7, 2], "x": 5.25, "y": 3},
+ {"label": "B", "matrix": [6, 3], "x": 6.25, "y": 3},
+ {"label": "N", "matrix": [7, 3], "x": 7.25, "y": 3},
+ {"label": "M", "matrix": [6, 4], "x": 8.25, "y": 3},
+ {"label": "<", "matrix": [7, 4], "x": 9.25, "y": 3},
+ {"label": ">", "matrix": [6, 5], "x": 10.25, "y": 3},
+ {"label": "?", "matrix": [7, 5], "x": 11.25, "y": 3},
+ {"label": "Shift", "matrix": [6, 6], "x": 12.25, "y": 3, "w": 2.75},
+
+ {"label": "Ctrl", "matrix": [8, 0], "x": 0, "y": 4, "w": 1.5},
+ {"label": "Win", "matrix": [9, 0], "x": 1.5, "y": 4},
+ {"label": "Alt", "matrix": [9, 1], "x": 2.5, "y": 4, "w": 1.5},
+ {"label": "Space", "matrix": [9, 3], "x": 4, "y": 4, "w": 7},
+ {"label": "Alt", "matrix": [8, 5], "x": 11, "y": 4, "w": 1.5},
+ {"label": "Win", "matrix": [9, 5], "x": 12.5, "y": 4},
+ {"label": "Ctrl", "matrix": [8, 6], "x": 13.5, "y": 4, "w": 1.5}
+ ]
+ },
+ "LAYOUT_60_iso_tsangan_split_bs_rshift": {
+ "layout": [
+ {"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
+ {"label": "!", "matrix": [1, 0], "x": 1, "y": 0},
+ {"label": "\"", "matrix": [0, 1], "x": 2, "y": 0},
+ {"label": "\u00a3", "matrix": [1, 1], "x": 3, "y": 0},
+ {"label": "$", "matrix": [0, 2], "x": 4, "y": 0},
+ {"label": "%", "matrix": [1, 2], "x": 5, "y": 0},
+ {"label": "^", "matrix": [0, 3], "x": 6, "y": 0},
+ {"label": "&", "matrix": [1, 3], "x": 7, "y": 0},
+ {"label": "*", "matrix": [0, 4], "x": 8, "y": 0},
+ {"label": "(", "matrix": [1, 4], "x": 9, "y": 0},
+ {"label": ")", "matrix": [0, 5], "x": 10, "y": 0},
+ {"label": "_", "matrix": [1, 5], "x": 11, "y": 0},
+ {"label": "+", "matrix": [0, 6], "x": 12, "y": 0},
+ {"label": "|", "matrix": [1, 6], "x": 13, "y": 0},
+ {"label": "Backspace", "matrix": [3, 6], "x": 14, "y": 0},
+
+ {"label": "Tab", "matrix": [2, 0], "x": 0, "y": 1, "w": 1.5},
+ {"label": "Q", "matrix": [3, 0], "x": 1.5, "y": 1},
+ {"label": "W", "matrix": [2, 1], "x": 2.5, "y": 1},
+ {"label": "E", "matrix": [3, 1], "x": 3.5, "y": 1},
+ {"label": "R", "matrix": [2, 2], "x": 4.5, "y": 1},
+ {"label": "T", "matrix": [3, 2], "x": 5.5, "y": 1},
+ {"label": "Y", "matrix": [2, 3], "x": 6.5, "y": 1},
+ {"label": "U", "matrix": [3, 3], "x": 7.5, "y": 1},
+ {"label": "I", "matrix": [2, 4], "x": 8.5, "y": 1},
+ {"label": "O", "matrix": [3, 4], "x": 9.5, "y": 1},
+ {"label": "P", "matrix": [2, 5], "x": 10.5, "y": 1},
+ {"label": "{", "matrix": [3, 5], "x": 11.5, "y": 1},
+ {"label": "}", "matrix": [2, 6], "x": 12.5, "y": 1},
+
+ {"label": "Caps Lock", "matrix": [4, 0], "x": 0, "y": 2, "w": 1.75},
+ {"label": "A", "matrix": [5, 0], "x": 1.75, "y": 2},
+ {"label": "S", "matrix": [4, 1], "x": 2.75, "y": 2},
+ {"label": "D", "matrix": [5, 1], "x": 3.75, "y": 2},
+ {"label": "F", "matrix": [4, 2], "x": 4.75, "y": 2},
+ {"label": "G", "matrix": [5, 2], "x": 5.75, "y": 2},
+ {"label": "H", "matrix": [4, 3], "x": 6.75, "y": 2},
+ {"label": "J", "matrix": [5, 3], "x": 7.75, "y": 2},
+ {"label": "K", "matrix": [4, 4], "x": 8.75, "y": 2},
+ {"label": "L", "matrix": [5, 4], "x": 9.75, "y": 2},
+ {"label": ":", "matrix": [4, 5], "x": 10.75, "y": 2},
+ {"label": "@", "matrix": [5, 5], "x": 11.75, "y": 2},
+ {"label": "~", "matrix": [4, 6], "x": 12.75, "y": 2},
+ {"label": "Enter", "matrix": [7, 6], "x": 13.75, "y": 1, "w": 1.25, "h": 2},
+
+ {"label": "Shift", "matrix": [6, 0], "x": 0, "y": 3, "w": 1.25},
+ {"label": "|", "matrix": [7, 0], "x": 1.25, "y": 3},
+ {"label": "Z", "matrix": [6, 1], "x": 2.25, "y": 3},
+ {"label": "X", "matrix": [7, 1], "x": 3.25, "y": 3},
+ {"label": "C", "matrix": [6, 2], "x": 4.25, "y": 3},
+ {"label": "V", "matrix": [7, 2], "x": 5.25, "y": 3},
+ {"label": "B", "matrix": [6, 3], "x": 6.25, "y": 3},
+ {"label": "N", "matrix": [7, 3], "x": 7.25, "y": 3},
+ {"label": "M", "matrix": [6, 4], "x": 8.25, "y": 3},
+ {"label": "<", "matrix": [7, 4], "x": 9.25, "y": 3},
+ {"label": ">", "matrix": [6, 5], "x": 10.25, "y": 3},
+ {"label": "?", "matrix": [7, 5], "x": 11.25, "y": 3},
+ {"label": "Shift", "matrix": [6, 6], "x": 12.25, "y": 3, "w": 1.75},
+ {"label": "Fn", "matrix": [9, 6], "x": 14, "y": 3},
+
+ {"label": "Ctrl", "matrix": [8, 0], "x": 0, "y": 4, "w": 1.5},
+ {"label": "Win", "matrix": [9, 0], "x": 1.5, "y": 4},
+ {"label": "Alt", "matrix": [9, 1], "x": 2.5, "y": 4, "w": 1.5},
+ {"label": "Space", "matrix": [9, 3], "x": 4, "y": 4, "w": 7},
+ {"label": "Alt", "matrix": [8, 5], "x": 11, "y": 4, "w": 1.5},
+ {"label": "Win", "matrix": [9, 5], "x": 12.5, "y": 4},
+ {"label": "Ctrl", "matrix": [8, 6], "x": 13.5, "y": 4, "w": 1.5}
+ ]
}
}
}
diff --git a/keyboards/4pplet/eagle_viper_rep/rev_a/matrix_diagram.md b/keyboards/4pplet/eagle_viper_rep/rev_a/matrix_diagram.md
index 6a51e0447ea4..8ec59179b018 100644
--- a/keyboards/4pplet/eagle_viper_rep/rev_a/matrix_diagram.md
+++ b/keyboards/4pplet/eagle_viper_rep/rev_a/matrix_diagram.md
@@ -2,7 +2,7 @@
```
┌───────┐
- 2u Backspace │36? │
+ 2u Backspace │36 │
└───────┘
┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
│00 │10 │01 │11 │02 │12 │03 │13 │04 │14 │05 │15 │06 │16 │36 │
@@ -19,6 +19,6 @@
│60 │ 2.25u LShift 2.75u RShift │66 │
└────────┘ └──────────┘
┌─────┬───┬─────┬───────────────────────────┬─────┬───┬─────┐
-│80 │90 │91 │93 │85 │95 │86 │ Tsangan/WKL/HHKB
+│80 │90 │91 │93 │85 │95 │86 │ Tsangan/HHKB
└─────┴───┴─────┴───────────────────────────┴─────┴───┴─────┘
```
diff --git a/keyboards/4pplet/eagle_viper_rep/rev_b/config.h b/keyboards/4pplet/eagle_viper_rep/rev_b/config.h
index 5d5eefda2184..b5957e6f30cc 100644
--- a/keyboards/4pplet/eagle_viper_rep/rev_b/config.h
+++ b/keyboards/4pplet/eagle_viper_rep/rev_b/config.h
@@ -34,6 +34,3 @@ along with this program. If not, see .
#define LAYER_3 B0
#define LAYER_4 B9
#define LAYER_5 A9
-
-/* Added extra layer for use of layer leds */
-#define DYNAMIC_KEYMAP_LAYER_COUNT 5
diff --git a/keyboards/4pplet/eagle_viper_rep/rev_b/info.json b/keyboards/4pplet/eagle_viper_rep/rev_b/info.json
index ad7513c13d6e..2ebb26068693 100644
--- a/keyboards/4pplet/eagle_viper_rep/rev_b/info.json
+++ b/keyboards/4pplet/eagle_viper_rep/rev_b/info.json
@@ -13,6 +13,9 @@
"rows": ["A2", "A1", "B8", "A10", "C15", "A15", "B7", "B6", "C14", "C13"]
},
"diode_direction": "COL2ROW",
+ "dynamic_keymap": {
+ "layer_count": 5
+ },
"backlight": {
"pin": "A6",
"levels": 6,
diff --git a/keyboards/4pplet/perk60_iso/rev_a/config.h b/keyboards/4pplet/perk60_iso/rev_a/config.h
index e033b1625935..efad0a1718c3 100644
--- a/keyboards/4pplet/perk60_iso/rev_a/config.h
+++ b/keyboards/4pplet/perk60_iso/rev_a/config.h
@@ -21,10 +21,9 @@ along with this program. If not, see .
/* Locking resynchronize hack */
#define LOCKING_RESYNC_ENABLE
-#define DRIVER_ADDR_1 0b1010000
-#define DRIVER_COUNT 1
+#define IS31FL3733_I2C_ADDRESS_1 IS31FL3733_I2C_ADDRESS_GND_GND
#define RGB_MATRIX_LED_COUNT 62
-#define ISSI_PWM_FREQUENCY 0b010
+#define IS31FL3733_PWM_FREQUENCY IS31FL3733_PWM_FREQUENCY_26K7_HZ
#define RGB_MATRIX_DEFAULT_VAL 80
#define RGB_MATRIX_KEYPRESSES
diff --git a/keyboards/4pplet/perk60_iso/rev_a/rev_a.c b/keyboards/4pplet/perk60_iso/rev_a/rev_a.c
index 814a8f95d466..e3b8d71a9042 100644
--- a/keyboards/4pplet/perk60_iso/rev_a/rev_a.c
+++ b/keyboards/4pplet/perk60_iso/rev_a/rev_a.c
@@ -17,7 +17,7 @@ along with this program. If not, see .
#include "rev_a.h"
#ifdef RGB_MATRIX_ENABLE
-const is31_led PROGMEM g_is31_leds[RGB_MATRIX_LED_COUNT] = {
+const is31fl3733_led_t PROGMEM g_is31fl3733_leds[RGB_MATRIX_LED_COUNT] = {
{ 0, K_2, J_2, L_2 }, //D402
{ 0, K_3, J_3, L_3 }, //D403
{ 0, K_4, J_4, L_4 }, //D404
diff --git a/keyboards/4pplet/steezy60/keymaps/canon/keymap.c b/keyboards/4pplet/steezy60/keymaps/canon/keymap.c
deleted file mode 100644
index 92cfe047e9aa..000000000000
--- a/keyboards/4pplet/steezy60/keymaps/canon/keymap.c
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
-Copyright 2023 Stefan Sundin "4pplet"
-
-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 .
-*/
-#include QMK_KEYBOARD_H
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-/*
-* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
-* │ ` │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │Bsp│Bsp│
-* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤
-* │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │ \ │
-* ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬────┤
-* │ Caps │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │ \ | Ent│
-* ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───| er │
-* │ Shift │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │Shift│ │
-* ├────┬───|───┴┬──┴┬──┴───┴───┴───┴───┴┬──┴┬──┴┬──┴─┬───|────┤
-* │Ctrl│GUI│None│Alt│ Space │Alt│GUI│None│App│Ctrl│
-* └────┴───┴────┴───┴───────────────────┴───┴───┴────┴───┴────┘
-*/
-[0] = LAYOUT_canon(
- 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_BSPC,
- KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
- KC_CAPS, 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_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
- KC_LCTL, KC_LGUI, KC_NO, KC_LALT, KC_SPC, KC_RALT,KC_RGUI, KC_NO, KC_APP, KC_RCTL)
-};
diff --git a/keyboards/4pplet/unextended_std/keymaps/m0116/keymap.c b/keyboards/4pplet/unextended_std/keymaps/m0116/keymap.c
deleted file mode 100644
index 593e0de2b200..000000000000
--- a/keyboards/4pplet/unextended_std/keymaps/m0116/keymap.c
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
-Copyright 2023 Stefan Sundin "4pplet" <4pplet@protonmail.com>
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program. If not, see .
-*/
-#include QMK_KEYBOARD_H
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-// main layer
-/*
-* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬──────┐
-* │Esc│ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │Delete│
-* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬────┤
-* │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │ │
-* ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴ │
-* │ Ctrl │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │ Enter │
-* ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───────┤
-* │ Shift │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │ Shift │
-* ├────┬───│───┴┬──┴┬──┴───┴───┴───┴─┬─┴─┬─┴──┬┴───┴┬────┬───┤
-* │Caps│Alt│Gui │ ` │ Space │ \ │Left│Right│Down│ Up│
-* └────┴───┴────┴───┴────────────────┴───┴────┴─────┴────┴───┘
-*/
-[0] = LAYOUT_m0116(
- KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,
- KC_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_LCTL, 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_CAPS, KC_LALT, KC_LGUI, KC_GRV, KC_SPC, KC_BSLS, KC_LEFT, KC_RIGHT,KC_DOWN, KC_UP)
-};
diff --git a/keyboards/4pplet/unextended_std/keymaps/m0118/keymap.c b/keyboards/4pplet/unextended_std/keymaps/m0118/keymap.c
deleted file mode 100644
index 1343ca2dc294..000000000000
--- a/keyboards/4pplet/unextended_std/keymaps/m0118/keymap.c
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
-Copyright 2023 Stefan Sundin "4pplet" <4pplet@protonmail.com>
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program. If not, see .
-*/
-#include QMK_KEYBOARD_H
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-/*
-* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬──────┐
-* │Esc│ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │Backsp│
-* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬────┤
-* │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │ │
-* ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐Ent│
-* │ Caps │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │ \ │ │
-* ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───│───┤
-* │Shft│ ` │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │Shift│ Up│
-* ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴┬──┴─┬─┴──┬┴────┬────┤
-* │Ctrl│Alt │GUI │ Space │GUI │Left│Right│Down│
-* └────┴────┴────┴──────────────────────┴────┴────┴─────┴────┘
-*/
-[0] = LAYOUT_m0118(
- KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,
- KC_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_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_NUHS,
- KC_LSFT, KC_GRV, 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_LALT, KC_LGUI, KC_SPC, KC_RGUI, KC_LEFT, KC_RIGHT,KC_DOWN)
-};
diff --git a/keyboards/4pplet/waffling60/readme.md b/keyboards/4pplet/waffling60/readme.md
index acfa174eab93..442de4d36966 100644
--- a/keyboards/4pplet/waffling60/readme.md
+++ b/keyboards/4pplet/waffling60/readme.md
@@ -12,8 +12,8 @@ Make example for this keyboard (after setting up your build environment):
make 4pplet/waffling60/rev_a:default
make 4pplet/waffling60/rev_b:default
make 4pplet/waffling60/rev_c:default
-
make 4pplet/waffling60/rev_d:default
+ make 4pplet/waffling60/rev_e:default
make 4pplet/waffling60/rev_d_ansi:default
make 4pplet/waffling60/rev_d_iso:default
diff --git a/keyboards/4pplet/waffling60/rev_d/readme.md b/keyboards/4pplet/waffling60/rev_d/readme.md
index 3b6b9c94f2d3..092746325d1d 100644
--- a/keyboards/4pplet/waffling60/rev_d/readme.md
+++ b/keyboards/4pplet/waffling60/rev_d/readme.md
@@ -9,7 +9,7 @@ More info: https://geekhack.org/index.php?topic=103531.0
Make example for this keyboard (after setting up your build environment):
- make 4pplet/waffling60/rev_c:default
+ make 4pplet/waffling60/rev_d:default
See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/4pplet/waffling60/rev_e/config.h b/keyboards/4pplet/waffling60/rev_e/config.h
new file mode 100644
index 000000000000..521ddf96a183
--- /dev/null
+++ b/keyboards/4pplet/waffling60/rev_e/config.h
@@ -0,0 +1,20 @@
+/*
+Copyright 2023 Stefan Sundin "4pplet"
+
+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 .
+*/
+#pragma once
+
+#define WS2812_EXTERNAL_PULLUP
+
diff --git a/keyboards/4pplet/waffling60/rev_e/info.json b/keyboards/4pplet/waffling60/rev_e/info.json
new file mode 100644
index 000000000000..3a75cf3d06ac
--- /dev/null
+++ b/keyboards/4pplet/waffling60/rev_e/info.json
@@ -0,0 +1,917 @@
+{
+ "manufacturer": "4pplet",
+ "keyboard_name": "waffling60 Rev E",
+ "maintainer": "4pplet",
+ "bootloader": "stm32-dfu",
+ "diode_direction": "COL2ROW",
+ "encoder": {
+ "rotary": [
+ {"pin_a": "A2", "pin_b": "A1", "resolution": 2}
+ ]
+ },
+ "features": {
+ "bootmagic": true,
+ "command": false,
+ "console": false,
+ "extrakey": true,
+ "key_lock": true,
+ "mousekey": false,
+ "nkro": true,
+ "rgblight": true
+ },
+ "matrix_pins": {
+ "cols": ["B2", "A5", "A4", "A3", "F1", "F0", "C15", "C14", "C13", "B9", "B8", "B7", "A15", "B3"],
+ "rows": ["B14", "A9", "B6", "B5", "B4"]
+ },
+ "processor": "STM32F072",
+ "rgblight": {
+ "animations": {
+ "alternating": true,
+ "breathing": true,
+ "christmas": true,
+ "knight": true,
+ "rainbow_mood": true,
+ "rainbow_swirl": true,
+ "rgb_test": true,
+ "snake": true,
+ "static_gradient": true,
+ "twinkle": true
+ },
+ "led_count": 17
+ },
+ "url": "https://github.com/4pplet/waffling60",
+ "usb": {
+ "device_version": "0.0.5",
+ "pid": "0x0014",
+ "vid": "0x4444"
+ },
+ "ws2812": {
+ "pin": "A8"
+ },
+ "community_layouts": ["60_ansi", "60_ansi_split_bs_rshift", "60_ansi_tsangan", "60_hhkb", "60_iso", "60_iso_split_bs_rshift", "60_iso_tsangan", "60_tsangan_hhkb"],
+ "layouts": {
+ "LAYOUT_60_ansi": {
+ "layout": [
+ {"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
+ {"label": "!", "matrix": [0, 1], "x": 1, "y": 0},
+ {"label": "@", "matrix": [0, 2], "x": 2, "y": 0},
+ {"label": "#", "matrix": [0, 3], "x": 3, "y": 0},
+ {"label": "$", "matrix": [0, 4], "x": 4, "y": 0},
+ {"label": "%", "matrix": [0, 5], "x": 5, "y": 0},
+ {"label": "^", "matrix": [0, 6], "x": 6, "y": 0},
+ {"label": "&", "matrix": [0, 7], "x": 7, "y": 0},
+ {"label": "*", "matrix": [0, 8], "x": 8, "y": 0},
+ {"label": "(", "matrix": [0, 9], "x": 9, "y": 0},
+ {"label": ")", "matrix": [0, 10], "x": 10, "y": 0},
+ {"label": "_", "matrix": [0, 11], "x": 11, "y": 0},
+ {"label": "+", "matrix": [0, 12], "x": 12, "y": 0},
+ {"label": "Backspace", "matrix": [2, 13], "x": 13, "y": 0, "w": 2},
+ {"label": "Tab", "matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"label": "Q", "matrix": [1, 1], "x": 1.5, "y": 1},
+ {"label": "W", "matrix": [1, 2], "x": 2.5, "y": 1},
+ {"label": "E", "matrix": [1, 3], "x": 3.5, "y": 1},
+ {"label": "R", "matrix": [1, 4], "x": 4.5, "y": 1},
+ {"label": "T", "matrix": [1, 5], "x": 5.5, "y": 1},
+ {"label": "Y", "matrix": [1, 6], "x": 6.5, "y": 1},
+ {"label": "U", "matrix": [1, 7], "x": 7.5, "y": 1},
+ {"label": "I", "matrix": [1, 8], "x": 8.5, "y": 1},
+ {"label": "O", "matrix": [1, 9], "x": 9.5, "y": 1},
+ {"label": "P", "matrix": [1, 10], "x": 10.5, "y": 1},
+ {"label": "{", "matrix": [1, 11], "x": 11.5, "y": 1},
+ {"label": "}", "matrix": [1, 12], "x": 12.5, "y": 1},
+ {"label": "|", "matrix": [1, 13], "x": 13.5, "y": 1, "w": 1.5},
+ {"label": "Caps Lock", "matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"label": "A", "matrix": [2, 1], "x": 1.75, "y": 2},
+ {"label": "S", "matrix": [2, 2], "x": 2.75, "y": 2},
+ {"label": "D", "matrix": [2, 3], "x": 3.75, "y": 2},
+ {"label": "F", "matrix": [2, 4], "x": 4.75, "y": 2},
+ {"label": "G", "matrix": [2, 5], "x": 5.75, "y": 2},
+ {"label": "H", "matrix": [2, 6], "x": 6.75, "y": 2},
+ {"label": "J", "matrix": [2, 7], "x": 7.75, "y": 2},
+ {"label": "K", "matrix": [2, 8], "x": 8.75, "y": 2},
+ {"label": "L", "matrix": [2, 9], "x": 9.75, "y": 2},
+ {"label": ":", "matrix": [2, 10], "x": 10.75, "y": 2},
+ {"label": "\"", "matrix": [2, 11], "x": 11.75, "y": 2},
+ {"label": "Enter", "matrix": [3, 13], "x": 12.75, "y": 2, "w": 2.25},
+ {"label": "Shift", "matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
+ {"label": "Z", "matrix": [3, 2], "x": 2.25, "y": 3},
+ {"label": "X", "matrix": [3, 3], "x": 3.25, "y": 3},
+ {"label": "C", "matrix": [3, 4], "x": 4.25, "y": 3},
+ {"label": "V", "matrix": [3, 5], "x": 5.25, "y": 3},
+ {"label": "B", "matrix": [3, 6], "x": 6.25, "y": 3},
+ {"label": "N", "matrix": [3, 7], "x": 7.25, "y": 3},
+ {"label": "M", "matrix": [3, 8], "x": 8.25, "y": 3},
+ {"label": "<", "matrix": [3, 9], "x": 9.25, "y": 3},
+ {"label": ">", "matrix": [3, 10], "x": 10.25, "y": 3},
+ {"label": "?", "matrix": [3, 11], "x": 11.25, "y": 3},
+ {"label": "Shift", "matrix": [3, 12], "x": 12.25, "y": 3, "w": 2.75},
+ {"label": "Ctrl", "matrix": [4, 0], "x": 0, "y": 4, "w": 1.25},
+ {"label": "Win", "matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.25},
+ {"label": "Alt", "matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.25},
+ {"label": "Space", "matrix": [4, 6], "x": 3.75, "y": 4, "w": 6.25},
+ {"label": "Alt", "matrix": [4, 9], "x": 10, "y": 4, "w": 1.25},
+ {"label": "Win", "matrix": [4, 10], "x": 11.25, "y": 4, "w": 1.25},
+ {"label": "Menu", "matrix": [4, 11], "x": 12.5, "y": 4, "w": 1.25},
+ {"label": "Fn", "matrix": [4, 12], "x": 13.75, "y": 4, "w": 1.25}
+ ]
+ },
+ "LAYOUT_60_ansi_split_bs_rshift": {
+ "layout": [
+ {"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
+ {"label": "!", "matrix": [0, 1], "x": 1, "y": 0},
+ {"label": "@", "matrix": [0, 2], "x": 2, "y": 0},
+ {"label": "#", "matrix": [0, 3], "x": 3, "y": 0},
+ {"label": "$", "matrix": [0, 4], "x": 4, "y": 0},
+ {"label": "%", "matrix": [0, 5], "x": 5, "y": 0},
+ {"label": "^", "matrix": [0, 6], "x": 6, "y": 0},
+ {"label": "&", "matrix": [0, 7], "x": 7, "y": 0},
+ {"label": "*", "matrix": [0, 8], "x": 8, "y": 0},
+ {"label": "(", "matrix": [0, 9], "x": 9, "y": 0},
+ {"label": ")", "matrix": [0, 10], "x": 10, "y": 0},
+ {"label": "_", "matrix": [0, 11], "x": 11, "y": 0},
+ {"label": "+", "matrix": [0, 12], "x": 12, "y": 0},
+ {"label": "|", "matrix": [0, 13], "x": 13, "y": 0},
+ {"label": "~", "matrix": [2, 13], "x": 14, "y": 0},
+ {"label": "Tab", "matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"label": "Q", "matrix": [1, 1], "x": 1.5, "y": 1},
+ {"label": "W", "matrix": [1, 2], "x": 2.5, "y": 1},
+ {"label": "E", "matrix": [1, 3], "x": 3.5, "y": 1},
+ {"label": "R", "matrix": [1, 4], "x": 4.5, "y": 1},
+ {"label": "T", "matrix": [1, 5], "x": 5.5, "y": 1},
+ {"label": "Y", "matrix": [1, 6], "x": 6.5, "y": 1},
+ {"label": "U", "matrix": [1, 7], "x": 7.5, "y": 1},
+ {"label": "I", "matrix": [1, 8], "x": 8.5, "y": 1},
+ {"label": "O", "matrix": [1, 9], "x": 9.5, "y": 1},
+ {"label": "P", "matrix": [1, 10], "x": 10.5, "y": 1},
+ {"label": "{", "matrix": [1, 11], "x": 11.5, "y": 1},
+ {"label": "}", "matrix": [1, 12], "x": 12.5, "y": 1},
+ {"label": "|", "matrix": [1, 13], "x": 13.5, "y": 1, "w": 1.5},
+ {"label": "Caps Lock", "matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"label": "A", "matrix": [2, 1], "x": 1.75, "y": 2},
+ {"label": "S", "matrix": [2, 2], "x": 2.75, "y": 2},
+ {"label": "D", "matrix": [2, 3], "x": 3.75, "y": 2},
+ {"label": "F", "matrix": [2, 4], "x": 4.75, "y": 2},
+ {"label": "G", "matrix": [2, 5], "x": 5.75, "y": 2},
+ {"label": "H", "matrix": [2, 6], "x": 6.75, "y": 2},
+ {"label": "J", "matrix": [2, 7], "x": 7.75, "y": 2},
+ {"label": "K", "matrix": [2, 8], "x": 8.75, "y": 2},
+ {"label": "L", "matrix": [2, 9], "x": 9.75, "y": 2},
+ {"label": ":", "matrix": [2, 10], "x": 10.75, "y": 2},
+ {"label": "\"", "matrix": [2, 11], "x": 11.75, "y": 2},
+ {"label": "Enter", "matrix": [3, 13], "x": 12.75, "y": 2, "w": 2.25},
+ {"label": "Shift", "matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
+ {"label": "Z", "matrix": [3, 2], "x": 2.25, "y": 3},
+ {"label": "X", "matrix": [3, 3], "x": 3.25, "y": 3},
+ {"label": "C", "matrix": [3, 4], "x": 4.25, "y": 3},
+ {"label": "V", "matrix": [3, 5], "x": 5.25, "y": 3},
+ {"label": "B", "matrix": [3, 6], "x": 6.25, "y": 3},
+ {"label": "N", "matrix": [3, 7], "x": 7.25, "y": 3},
+ {"label": "M", "matrix": [3, 8], "x": 8.25, "y": 3},
+ {"label": "<", "matrix": [3, 9], "x": 9.25, "y": 3},
+ {"label": ">", "matrix": [3, 10], "x": 10.25, "y": 3},
+ {"label": "?", "matrix": [3, 11], "x": 11.25, "y": 3},
+ {"label": "Shift", "matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75},
+ {"label": "Fn", "matrix": [4, 13], "x": 14, "y": 3},
+ {"label": "Ctrl", "matrix": [4, 0], "x": 0, "y": 4, "w": 1.25},
+ {"label": "Win", "matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.25},
+ {"label": "Alt", "matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.25},
+ {"label": "Space", "matrix": [4, 6], "x": 3.75, "y": 4, "w": 6.25},
+ {"label": "Alt", "matrix": [4, 9], "x": 10, "y": 4, "w": 1.25},
+ {"label": "Win", "matrix": [4, 10], "x": 11.25, "y": 4, "w": 1.25},
+ {"label": "Menu", "matrix": [4, 11], "x": 12.5, "y": 4, "w": 1.25},
+ {"label": "Fn", "matrix": [4, 12], "x": 13.75, "y": 4, "w": 1.25}
+ ]
+ },
+ "LAYOUT_60_ansi_tsangan": {
+ "layout": [
+ {"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
+ {"label": "!", "matrix": [0, 1], "x": 1, "y": 0},
+ {"label": "@", "matrix": [0, 2], "x": 2, "y": 0},
+ {"label": "#", "matrix": [0, 3], "x": 3, "y": 0},
+ {"label": "$", "matrix": [0, 4], "x": 4, "y": 0},
+ {"label": "%", "matrix": [0, 5], "x": 5, "y": 0},
+ {"label": "^", "matrix": [0, 6], "x": 6, "y": 0},
+ {"label": "&", "matrix": [0, 7], "x": 7, "y": 0},
+ {"label": "*", "matrix": [0, 8], "x": 8, "y": 0},
+ {"label": "(", "matrix": [0, 9], "x": 9, "y": 0},
+ {"label": ")", "matrix": [0, 10], "x": 10, "y": 0},
+ {"label": "_", "matrix": [0, 11], "x": 11, "y": 0},
+ {"label": "+", "matrix": [0, 12], "x": 12, "y": 0},
+ {"label": "Backspace", "matrix": [2, 13], "x": 13, "y": 0, "w": 2},
+ {"label": "Tab", "matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"label": "Q", "matrix": [1, 1], "x": 1.5, "y": 1},
+ {"label": "W", "matrix": [1, 2], "x": 2.5, "y": 1},
+ {"label": "E", "matrix": [1, 3], "x": 3.5, "y": 1},
+ {"label": "R", "matrix": [1, 4], "x": 4.5, "y": 1},
+ {"label": "T", "matrix": [1, 5], "x": 5.5, "y": 1},
+ {"label": "Y", "matrix": [1, 6], "x": 6.5, "y": 1},
+ {"label": "U", "matrix": [1, 7], "x": 7.5, "y": 1},
+ {"label": "I", "matrix": [1, 8], "x": 8.5, "y": 1},
+ {"label": "O", "matrix": [1, 9], "x": 9.5, "y": 1},
+ {"label": "P", "matrix": [1, 10], "x": 10.5, "y": 1},
+ {"label": "{", "matrix": [1, 11], "x": 11.5, "y": 1},
+ {"label": "}", "matrix": [1, 12], "x": 12.5, "y": 1},
+ {"label": "|", "matrix": [1, 13], "x": 13.5, "y": 1, "w": 1.5},
+ {"label": "Caps Lock", "matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"label": "A", "matrix": [2, 1], "x": 1.75, "y": 2},
+ {"label": "S", "matrix": [2, 2], "x": 2.75, "y": 2},
+ {"label": "D", "matrix": [2, 3], "x": 3.75, "y": 2},
+ {"label": "F", "matrix": [2, 4], "x": 4.75, "y": 2},
+ {"label": "G", "matrix": [2, 5], "x": 5.75, "y": 2},
+ {"label": "H", "matrix": [2, 6], "x": 6.75, "y": 2},
+ {"label": "J", "matrix": [2, 7], "x": 7.75, "y": 2},
+ {"label": "K", "matrix": [2, 8], "x": 8.75, "y": 2},
+ {"label": "L", "matrix": [2, 9], "x": 9.75, "y": 2},
+ {"label": ":", "matrix": [2, 10], "x": 10.75, "y": 2},
+ {"label": "\"", "matrix": [2, 11], "x": 11.75, "y": 2},
+ {"label": "Enter", "matrix": [3, 13], "x": 12.75, "y": 2, "w": 2.25},
+ {"label": "Shift", "matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
+ {"label": "Z", "matrix": [3, 2], "x": 2.25, "y": 3},
+ {"label": "X", "matrix": [3, 3], "x": 3.25, "y": 3},
+ {"label": "C", "matrix": [3, 4], "x": 4.25, "y": 3},
+ {"label": "V", "matrix": [3, 5], "x": 5.25, "y": 3},
+ {"label": "B", "matrix": [3, 6], "x": 6.25, "y": 3},
+ {"label": "N", "matrix": [3, 7], "x": 7.25, "y": 3},
+ {"label": "M", "matrix": [3, 8], "x": 8.25, "y": 3},
+ {"label": "<", "matrix": [3, 9], "x": 9.25, "y": 3},
+ {"label": ">", "matrix": [3, 10], "x": 10.25, "y": 3},
+ {"label": "?", "matrix": [3, 11], "x": 11.25, "y": 3},
+ {"label": "Shift", "matrix": [3, 12], "x": 12.25, "y": 3, "w": 2.75},
+ {"label": "Ctrl", "matrix": [4, 0], "x": 0, "y": 4, "w": 1.5},
+ {"label": "Win", "matrix": [4, 1], "x": 1.5, "y": 4},
+ {"label": "Alt", "matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.5},
+ {"label": "Space", "matrix": [4, 6], "x": 4, "y": 4, "w": 7},
+ {"label": "Alt", "matrix": [4, 10], "x": 11, "y": 4, "w": 1.5},
+ {"label": "Win", "matrix": [4, 11], "x": 12.5, "y": 4},
+ {"label": "Ctrl", "matrix": [4, 12], "x": 13.5, "y": 4, "w": 1.5}
+ ]
+ },
+ "LAYOUT_60_hhkb": {
+ "layout": [
+ {"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
+ {"label": "!", "matrix": [0, 1], "x": 1, "y": 0},
+ {"label": "@", "matrix": [0, 2], "x": 2, "y": 0},
+ {"label": "#", "matrix": [0, 3], "x": 3, "y": 0},
+ {"label": "$", "matrix": [0, 4], "x": 4, "y": 0},
+ {"label": "%", "matrix": [0, 5], "x": 5, "y": 0},
+ {"label": "^", "matrix": [0, 6], "x": 6, "y": 0},
+ {"label": "&", "matrix": [0, 7], "x": 7, "y": 0},
+ {"label": "*", "matrix": [0, 8], "x": 8, "y": 0},
+ {"label": "(", "matrix": [0, 9], "x": 9, "y": 0},
+ {"label": ")", "matrix": [0, 10], "x": 10, "y": 0},
+ {"label": "_", "matrix": [0, 11], "x": 11, "y": 0},
+ {"label": "+", "matrix": [0, 12], "x": 12, "y": 0},
+ {"label": "|", "matrix": [0, 13], "x": 13, "y": 0},
+ {"label": "~", "matrix": [2, 13], "x": 14, "y": 0},
+ {"label": "Tab", "matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"label": "Q", "matrix": [1, 1], "x": 1.5, "y": 1},
+ {"label": "W", "matrix": [1, 2], "x": 2.5, "y": 1},
+ {"label": "E", "matrix": [1, 3], "x": 3.5, "y": 1},
+ {"label": "R", "matrix": [1, 4], "x": 4.5, "y": 1},
+ {"label": "T", "matrix": [1, 5], "x": 5.5, "y": 1},
+ {"label": "Y", "matrix": [1, 6], "x": 6.5, "y": 1},
+ {"label": "U", "matrix": [1, 7], "x": 7.5, "y": 1},
+ {"label": "I", "matrix": [1, 8], "x": 8.5, "y": 1},
+ {"label": "O", "matrix": [1, 9], "x": 9.5, "y": 1},
+ {"label": "P", "matrix": [1, 10], "x": 10.5, "y": 1},
+ {"label": "{", "matrix": [1, 11], "x": 11.5, "y": 1},
+ {"label": "}", "matrix": [1, 12], "x": 12.5, "y": 1},
+ {"label": "|", "matrix": [1, 13], "x": 13.5, "y": 1, "w": 1.5},
+ {"label": "Caps Lock", "matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"label": "A", "matrix": [2, 1], "x": 1.75, "y": 2},
+ {"label": "S", "matrix": [2, 2], "x": 2.75, "y": 2},
+ {"label": "D", "matrix": [2, 3], "x": 3.75, "y": 2},
+ {"label": "F", "matrix": [2, 4], "x": 4.75, "y": 2},
+ {"label": "G", "matrix": [2, 5], "x": 5.75, "y": 2},
+ {"label": "H", "matrix": [2, 6], "x": 6.75, "y": 2},
+ {"label": "J", "matrix": [2, 7], "x": 7.75, "y": 2},
+ {"label": "K", "matrix": [2, 8], "x": 8.75, "y": 2},
+ {"label": "L", "matrix": [2, 9], "x": 9.75, "y": 2},
+ {"label": ":", "matrix": [2, 10], "x": 10.75, "y": 2},
+ {"label": "\"", "matrix": [2, 11], "x": 11.75, "y": 2},
+ {"label": "Enter", "matrix": [3, 13], "x": 12.75, "y": 2, "w": 2.25},
+ {"label": "Shift", "matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
+ {"label": "Z", "matrix": [3, 2], "x": 2.25, "y": 3},
+ {"label": "X", "matrix": [3, 3], "x": 3.25, "y": 3},
+ {"label": "C", "matrix": [3, 4], "x": 4.25, "y": 3},
+ {"label": "V", "matrix": [3, 5], "x": 5.25, "y": 3},
+ {"label": "B", "matrix": [3, 6], "x": 6.25, "y": 3},
+ {"label": "N", "matrix": [3, 7], "x": 7.25, "y": 3},
+ {"label": "M", "matrix": [3, 8], "x": 8.25, "y": 3},
+ {"label": "<", "matrix": [3, 9], "x": 9.25, "y": 3},
+ {"label": ">", "matrix": [3, 10], "x": 10.25, "y": 3},
+ {"label": "?", "matrix": [3, 11], "x": 11.25, "y": 3},
+ {"label": "Shift", "matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75},
+ {"label": "Fn", "matrix": [4, 13], "x": 14, "y": 3},
+ {"label": "Win", "matrix": [4, 1], "x": 1.5, "y": 4},
+ {"label": "Alt", "matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.5},
+ {"label": "Space", "matrix": [4, 6], "x": 4, "y": 4, "w": 7},
+ {"label": "Alt", "matrix": [4, 10], "x": 11, "y": 4, "w": 1.5},
+ {"label": "Win", "matrix": [4, 11], "x": 12.5, "y": 4}
+ ]
+ },
+ "LAYOUT_60_iso": {
+ "layout": [
+ {"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
+ {"label": "!", "matrix": [0, 1], "x": 1, "y": 0},
+ {"label": "@", "matrix": [0, 2], "x": 2, "y": 0},
+ {"label": "#", "matrix": [0, 3], "x": 3, "y": 0},
+ {"label": "$", "matrix": [0, 4], "x": 4, "y": 0},
+ {"label": "%", "matrix": [0, 5], "x": 5, "y": 0},
+ {"label": "^", "matrix": [0, 6], "x": 6, "y": 0},
+ {"label": "&", "matrix": [0, 7], "x": 7, "y": 0},
+ {"label": "*", "matrix": [0, 8], "x": 8, "y": 0},
+ {"label": "(", "matrix": [0, 9], "x": 9, "y": 0},
+ {"label": ")", "matrix": [0, 10], "x": 10, "y": 0},
+ {"label": "_", "matrix": [0, 11], "x": 11, "y": 0},
+ {"label": "+", "matrix": [0, 12], "x": 12, "y": 0},
+ {"label": "Backspace", "matrix": [2, 13], "x": 13, "y": 0, "w": 2},
+ {"label": "Tab", "matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"label": "Q", "matrix": [1, 1], "x": 1.5, "y": 1},
+ {"label": "W", "matrix": [1, 2], "x": 2.5, "y": 1},
+ {"label": "E", "matrix": [1, 3], "x": 3.5, "y": 1},
+ {"label": "R", "matrix": [1, 4], "x": 4.5, "y": 1},
+ {"label": "T", "matrix": [1, 5], "x": 5.5, "y": 1},
+ {"label": "Y", "matrix": [1, 6], "x": 6.5, "y": 1},
+ {"label": "U", "matrix": [1, 7], "x": 7.5, "y": 1},
+ {"label": "I", "matrix": [1, 8], "x": 8.5, "y": 1},
+ {"label": "O", "matrix": [1, 9], "x": 9.5, "y": 1},
+ {"label": "P", "matrix": [1, 10], "x": 10.5, "y": 1},
+ {"label": "{", "matrix": [1, 11], "x": 11.5, "y": 1},
+ {"label": "}", "matrix": [1, 12], "x": 12.5, "y": 1},
+ {"label": "Enter", "matrix": [3, 13], "x": 13.75, "y": 1, "w": 1.25, "h": 2},
+ {"label": "Caps Lock", "matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"label": "A", "matrix": [2, 1], "x": 1.75, "y": 2},
+ {"label": "S", "matrix": [2, 2], "x": 2.75, "y": 2},
+ {"label": "D", "matrix": [2, 3], "x": 3.75, "y": 2},
+ {"label": "F", "matrix": [2, 4], "x": 4.75, "y": 2},
+ {"label": "G", "matrix": [2, 5], "x": 5.75, "y": 2},
+ {"label": "H", "matrix": [2, 6], "x": 6.75, "y": 2},
+ {"label": "J", "matrix": [2, 7], "x": 7.75, "y": 2},
+ {"label": "K", "matrix": [2, 8], "x": 8.75, "y": 2},
+ {"label": "L", "matrix": [2, 9], "x": 9.75, "y": 2},
+ {"label": ":", "matrix": [2, 10], "x": 10.75, "y": 2},
+ {"label": "\"", "matrix": [2, 11], "x": 11.75, "y": 2},
+ {"label": "NUHS", "matrix": [2, 12], "x": 12.75, "y": 2},
+ {"label": "Shift", "matrix": [3, 0], "x": 0, "y": 3, "w": 1.25},
+ {"label": "NUBS", "matrix": [3, 1], "x": 1.25, "y": 3},
+ {"label": "Z", "matrix": [3, 2], "x": 2.25, "y": 3},
+ {"label": "X", "matrix": [3, 3], "x": 3.25, "y": 3},
+ {"label": "C", "matrix": [3, 4], "x": 4.25, "y": 3},
+ {"label": "V", "matrix": [3, 5], "x": 5.25, "y": 3},
+ {"label": "B", "matrix": [3, 6], "x": 6.25, "y": 3},
+ {"label": "N", "matrix": [3, 7], "x": 7.25, "y": 3},
+ {"label": "M", "matrix": [3, 8], "x": 8.25, "y": 3},
+ {"label": "<", "matrix": [3, 9], "x": 9.25, "y": 3},
+ {"label": ">", "matrix": [3, 10], "x": 10.25, "y": 3},
+ {"label": "?", "matrix": [3, 11], "x": 11.25, "y": 3},
+ {"label": "Shift", "matrix": [3, 12], "x": 12.25, "y": 3, "w": 2.75},
+ {"label": "Ctrl", "matrix": [4, 0], "x": 0, "y": 4, "w": 1.25},
+ {"label": "Win", "matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.25},
+ {"label": "Alt", "matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.25},
+ {"label": "Space", "matrix": [4, 6], "x": 3.75, "y": 4, "w": 6.25},
+ {"label": "Alt", "matrix": [4, 9], "x": 10, "y": 4, "w": 1.25},
+ {"label": "Win", "matrix": [4, 10], "x": 11.25, "y": 4, "w": 1.25},
+ {"label": "Menu", "matrix": [4, 11], "x": 12.5, "y": 4, "w": 1.25},
+ {"label": "Fn", "matrix": [4, 12], "x": 13.75, "y": 4, "w": 1.25}
+ ]
+ },
+ "LAYOUT_60_iso_split_bs_rshift": {
+ "layout": [
+ {"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
+ {"label": "!", "matrix": [0, 1], "x": 1, "y": 0},
+ {"label": "@", "matrix": [0, 2], "x": 2, "y": 0},
+ {"label": "#", "matrix": [0, 3], "x": 3, "y": 0},
+ {"label": "$", "matrix": [0, 4], "x": 4, "y": 0},
+ {"label": "%", "matrix": [0, 5], "x": 5, "y": 0},
+ {"label": "^", "matrix": [0, 6], "x": 6, "y": 0},
+ {"label": "&", "matrix": [0, 7], "x": 7, "y": 0},
+ {"label": "*", "matrix": [0, 8], "x": 8, "y": 0},
+ {"label": "(", "matrix": [0, 9], "x": 9, "y": 0},
+ {"label": ")", "matrix": [0, 10], "x": 10, "y": 0},
+ {"label": "_", "matrix": [0, 11], "x": 11, "y": 0},
+ {"label": "+", "matrix": [0, 12], "x": 12, "y": 0},
+ {"label": "|", "matrix": [0, 13], "x": 13, "y": 0},
+ {"label": "~", "matrix": [2, 13], "x": 14, "y": 0},
+ {"label": "Tab", "matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"label": "Q", "matrix": [1, 1], "x": 1.5, "y": 1},
+ {"label": "W", "matrix": [1, 2], "x": 2.5, "y": 1},
+ {"label": "E", "matrix": [1, 3], "x": 3.5, "y": 1},
+ {"label": "R", "matrix": [1, 4], "x": 4.5, "y": 1},
+ {"label": "T", "matrix": [1, 5], "x": 5.5, "y": 1},
+ {"label": "Y", "matrix": [1, 6], "x": 6.5, "y": 1},
+ {"label": "U", "matrix": [1, 7], "x": 7.5, "y": 1},
+ {"label": "I", "matrix": [1, 8], "x": 8.5, "y": 1},
+ {"label": "O", "matrix": [1, 9], "x": 9.5, "y": 1},
+ {"label": "P", "matrix": [1, 10], "x": 10.5, "y": 1},
+ {"label": "{", "matrix": [1, 11], "x": 11.5, "y": 1},
+ {"label": "}", "matrix": [1, 12], "x": 12.5, "y": 1},
+ {"label": "Enter", "matrix": [3, 13], "x": 13.75, "y": 1, "w": 1.25, "h": 2},
+ {"label": "Caps Lock", "matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"label": "A", "matrix": [2, 1], "x": 1.75, "y": 2},
+ {"label": "S", "matrix": [2, 2], "x": 2.75, "y": 2},
+ {"label": "D", "matrix": [2, 3], "x": 3.75, "y": 2},
+ {"label": "F", "matrix": [2, 4], "x": 4.75, "y": 2},
+ {"label": "G", "matrix": [2, 5], "x": 5.75, "y": 2},
+ {"label": "H", "matrix": [2, 6], "x": 6.75, "y": 2},
+ {"label": "J", "matrix": [2, 7], "x": 7.75, "y": 2},
+ {"label": "K", "matrix": [2, 8], "x": 8.75, "y": 2},
+ {"label": "L", "matrix": [2, 9], "x": 9.75, "y": 2},
+ {"label": ":", "matrix": [2, 10], "x": 10.75, "y": 2},
+ {"label": "\"", "matrix": [2, 11], "x": 11.75, "y": 2},
+ {"label": "NUHS", "matrix": [2, 12], "x": 12.75, "y": 2},
+ {"label": "Shift", "matrix": [3, 0], "x": 0, "y": 3, "w": 1.25},
+ {"label": "NUBS", "matrix": [3, 1], "x": 1.25, "y": 3},
+ {"label": "Z", "matrix": [3, 2], "x": 2.25, "y": 3},
+ {"label": "X", "matrix": [3, 3], "x": 3.25, "y": 3},
+ {"label": "C", "matrix": [3, 4], "x": 4.25, "y": 3},
+ {"label": "V", "matrix": [3, 5], "x": 5.25, "y": 3},
+ {"label": "B", "matrix": [3, 6], "x": 6.25, "y": 3},
+ {"label": "N", "matrix": [3, 7], "x": 7.25, "y": 3},
+ {"label": "M", "matrix": [3, 8], "x": 8.25, "y": 3},
+ {"label": "<", "matrix": [3, 9], "x": 9.25, "y": 3},
+ {"label": ">", "matrix": [3, 10], "x": 10.25, "y": 3},
+ {"label": "?", "matrix": [3, 11], "x": 11.25, "y": 3},
+ {"label": "Shift", "matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75},
+ {"label": "Fn", "matrix": [4, 13], "x": 14, "y": 3},
+ {"label": "Ctrl", "matrix": [4, 0], "x": 0, "y": 4, "w": 1.25},
+ {"label": "Win", "matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.25},
+ {"label": "Alt", "matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.25},
+ {"label": "Space", "matrix": [4, 6], "x": 3.75, "y": 4, "w": 6.25},
+ {"label": "Alt", "matrix": [4, 9], "x": 10, "y": 4, "w": 1.25},
+ {"label": "Win", "matrix": [4, 10], "x": 11.25, "y": 4, "w": 1.25},
+ {"label": "Menu", "matrix": [4, 11], "x": 12.5, "y": 4, "w": 1.25},
+ {"label": "Fn", "matrix": [4, 12], "x": 13.75, "y": 4, "w": 1.25}
+ ]
+ },
+ "LAYOUT_60_iso_tsangan": {
+ "layout": [
+ {"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
+ {"label": "!", "matrix": [0, 1], "x": 1, "y": 0},
+ {"label": "@", "matrix": [0, 2], "x": 2, "y": 0},
+ {"label": "#", "matrix": [0, 3], "x": 3, "y": 0},
+ {"label": "$", "matrix": [0, 4], "x": 4, "y": 0},
+ {"label": "%", "matrix": [0, 5], "x": 5, "y": 0},
+ {"label": "^", "matrix": [0, 6], "x": 6, "y": 0},
+ {"label": "&", "matrix": [0, 7], "x": 7, "y": 0},
+ {"label": "*", "matrix": [0, 8], "x": 8, "y": 0},
+ {"label": "(", "matrix": [0, 9], "x": 9, "y": 0},
+ {"label": ")", "matrix": [0, 10], "x": 10, "y": 0},
+ {"label": "_", "matrix": [0, 11], "x": 11, "y": 0},
+ {"label": "+", "matrix": [0, 12], "x": 12, "y": 0},
+ {"label": "Backspace", "matrix": [2, 13], "x": 13, "y": 0, "w": 2},
+ {"label": "Tab", "matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"label": "Q", "matrix": [1, 1], "x": 1.5, "y": 1},
+ {"label": "W", "matrix": [1, 2], "x": 2.5, "y": 1},
+ {"label": "E", "matrix": [1, 3], "x": 3.5, "y": 1},
+ {"label": "R", "matrix": [1, 4], "x": 4.5, "y": 1},
+ {"label": "T", "matrix": [1, 5], "x": 5.5, "y": 1},
+ {"label": "Y", "matrix": [1, 6], "x": 6.5, "y": 1},
+ {"label": "U", "matrix": [1, 7], "x": 7.5, "y": 1},
+ {"label": "I", "matrix": [1, 8], "x": 8.5, "y": 1},
+ {"label": "O", "matrix": [1, 9], "x": 9.5, "y": 1},
+ {"label": "P", "matrix": [1, 10], "x": 10.5, "y": 1},
+ {"label": "{", "matrix": [1, 11], "x": 11.5, "y": 1},
+ {"label": "}", "matrix": [1, 12], "x": 12.5, "y": 1},
+ {"label": "Enter", "matrix": [3, 13], "x": 13.75, "y": 1, "w": 1.25, "h": 2},
+ {"label": "Caps Lock", "matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"label": "A", "matrix": [2, 1], "x": 1.75, "y": 2},
+ {"label": "S", "matrix": [2, 2], "x": 2.75, "y": 2},
+ {"label": "D", "matrix": [2, 3], "x": 3.75, "y": 2},
+ {"label": "F", "matrix": [2, 4], "x": 4.75, "y": 2},
+ {"label": "G", "matrix": [2, 5], "x": 5.75, "y": 2},
+ {"label": "H", "matrix": [2, 6], "x": 6.75, "y": 2},
+ {"label": "J", "matrix": [2, 7], "x": 7.75, "y": 2},
+ {"label": "K", "matrix": [2, 8], "x": 8.75, "y": 2},
+ {"label": "L", "matrix": [2, 9], "x": 9.75, "y": 2},
+ {"label": ":", "matrix": [2, 10], "x": 10.75, "y": 2},
+ {"label": "\"", "matrix": [2, 11], "x": 11.75, "y": 2},
+ {"label": "NUHS", "matrix": [2, 12], "x": 12.75, "y": 2},
+ {"label": "Shift", "matrix": [3, 0], "x": 0, "y": 3, "w": 1.25},
+ {"label": "NUBS", "matrix": [3, 1], "x": 1.25, "y": 3},
+ {"label": "Z", "matrix": [3, 2], "x": 2.25, "y": 3},
+ {"label": "X", "matrix": [3, 3], "x": 3.25, "y": 3},
+ {"label": "C", "matrix": [3, 4], "x": 4.25, "y": 3},
+ {"label": "V", "matrix": [3, 5], "x": 5.25, "y": 3},
+ {"label": "B", "matrix": [3, 6], "x": 6.25, "y": 3},
+ {"label": "N", "matrix": [3, 7], "x": 7.25, "y": 3},
+ {"label": "M", "matrix": [3, 8], "x": 8.25, "y": 3},
+ {"label": "<", "matrix": [3, 9], "x": 9.25, "y": 3},
+ {"label": ">", "matrix": [3, 10], "x": 10.25, "y": 3},
+ {"label": "?", "matrix": [3, 11], "x": 11.25, "y": 3},
+ {"label": "Shift", "matrix": [3, 12], "x": 12.25, "y": 3, "w": 2.75},
+ {"label": "Ctrl", "matrix": [4, 0], "x": 0, "y": 4, "w": 1.5},
+ {"label": "Win", "matrix": [4, 1], "x": 1.5, "y": 4},
+ {"label": "Alt", "matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.5},
+ {"label": "Space", "matrix": [4, 6], "x": 4, "y": 4, "w": 7},
+ {"label": "Alt", "matrix": [4, 10], "x": 11, "y": 4, "w": 1.5},
+ {"label": "Win", "matrix": [4, 11], "x": 12.5, "y": 4},
+ {"label": "Ctrl", "matrix": [4, 12], "x": 13.5, "y": 4, "w": 1.5}
+ ]
+ },
+ "LAYOUT_60_tsangan_hhkb": {
+ "layout": [
+ {"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
+ {"label": "!", "matrix": [0, 1], "x": 1, "y": 0},
+ {"label": "@", "matrix": [0, 2], "x": 2, "y": 0},
+ {"label": "#", "matrix": [0, 3], "x": 3, "y": 0},
+ {"label": "$", "matrix": [0, 4], "x": 4, "y": 0},
+ {"label": "%", "matrix": [0, 5], "x": 5, "y": 0},
+ {"label": "^", "matrix": [0, 6], "x": 6, "y": 0},
+ {"label": "&", "matrix": [0, 7], "x": 7, "y": 0},
+ {"label": "*", "matrix": [0, 8], "x": 8, "y": 0},
+ {"label": "(", "matrix": [0, 9], "x": 9, "y": 0},
+ {"label": ")", "matrix": [0, 10], "x": 10, "y": 0},
+ {"label": "_", "matrix": [0, 11], "x": 11, "y": 0},
+ {"label": "+", "matrix": [0, 12], "x": 12, "y": 0},
+ {"label": "|", "matrix": [0, 13], "x": 13, "y": 0},
+ {"label": "~", "matrix": [2, 13], "x": 14, "y": 0},
+ {"label": "Tab", "matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"label": "Q", "matrix": [1, 1], "x": 1.5, "y": 1},
+ {"label": "W", "matrix": [1, 2], "x": 2.5, "y": 1},
+ {"label": "E", "matrix": [1, 3], "x": 3.5, "y": 1},
+ {"label": "R", "matrix": [1, 4], "x": 4.5, "y": 1},
+ {"label": "T", "matrix": [1, 5], "x": 5.5, "y": 1},
+ {"label": "Y", "matrix": [1, 6], "x": 6.5, "y": 1},
+ {"label": "U", "matrix": [1, 7], "x": 7.5, "y": 1},
+ {"label": "I", "matrix": [1, 8], "x": 8.5, "y": 1},
+ {"label": "O", "matrix": [1, 9], "x": 9.5, "y": 1},
+ {"label": "P", "matrix": [1, 10], "x": 10.5, "y": 1},
+ {"label": "{", "matrix": [1, 11], "x": 11.5, "y": 1},
+ {"label": "}", "matrix": [1, 12], "x": 12.5, "y": 1},
+ {"label": "|", "matrix": [1, 13], "x": 13.5, "y": 1, "w": 1.5},
+ {"label": "Caps Lock", "matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"label": "A", "matrix": [2, 1], "x": 1.75, "y": 2},
+ {"label": "S", "matrix": [2, 2], "x": 2.75, "y": 2},
+ {"label": "D", "matrix": [2, 3], "x": 3.75, "y": 2},
+ {"label": "F", "matrix": [2, 4], "x": 4.75, "y": 2},
+ {"label": "G", "matrix": [2, 5], "x": 5.75, "y": 2},
+ {"label": "H", "matrix": [2, 6], "x": 6.75, "y": 2},
+ {"label": "J", "matrix": [2, 7], "x": 7.75, "y": 2},
+ {"label": "K", "matrix": [2, 8], "x": 8.75, "y": 2},
+ {"label": "L", "matrix": [2, 9], "x": 9.75, "y": 2},
+ {"label": ":", "matrix": [2, 10], "x": 10.75, "y": 2},
+ {"label": "\"", "matrix": [2, 11], "x": 11.75, "y": 2},
+ {"label": "Enter", "matrix": [3, 13], "x": 12.75, "y": 2, "w": 2.25},
+ {"label": "Shift", "matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
+ {"label": "Z", "matrix": [3, 2], "x": 2.25, "y": 3},
+ {"label": "X", "matrix": [3, 3], "x": 3.25, "y": 3},
+ {"label": "C", "matrix": [3, 4], "x": 4.25, "y": 3},
+ {"label": "V", "matrix": [3, 5], "x": 5.25, "y": 3},
+ {"label": "B", "matrix": [3, 6], "x": 6.25, "y": 3},
+ {"label": "N", "matrix": [3, 7], "x": 7.25, "y": 3},
+ {"label": "M", "matrix": [3, 8], "x": 8.25, "y": 3},
+ {"label": "<", "matrix": [3, 9], "x": 9.25, "y": 3},
+ {"label": ">", "matrix": [3, 10], "x": 10.25, "y": 3},
+ {"label": "?", "matrix": [3, 11], "x": 11.25, "y": 3},
+ {"label": "Shift", "matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75},
+ {"label": "Fn", "matrix": [4, 13], "x": 14, "y": 3},
+ {"label": "Ctrl", "matrix": [4, 1], "x": 0, "y": 4, "w": 1.5},
+ {"label": "Win", "matrix": [4, 2], "x": 1.5, "y": 4},
+ {"label": "Alt", "matrix": [4, 3], "x": 2.5, "y": 4, "w": 1.5},
+ {"label": "Space", "matrix": [4, 6], "x": 4, "y": 4, "w": 7},
+ {"label": "Alt", "matrix": [4, 10], "x": 11, "y": 4, "w": 1.5},
+ {"label": "Win", "matrix": [4, 11], "x": 12.5, "y": 4},
+ {"label": "Ctrl", "matrix": [4, 12], "x": 13.5, "y": 4, "w": 1.5}
+ ]
+ },
+
+ "LAYOUT_6u_ansi": {
+ "layout": [
+ {"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
+ {"label": "!", "matrix": [0, 1], "x": 1, "y": 0},
+ {"label": "@", "matrix": [0, 2], "x": 2, "y": 0},
+ {"label": "#", "matrix": [0, 3], "x": 3, "y": 0},
+ {"label": "$", "matrix": [0, 4], "x": 4, "y": 0},
+ {"label": "%", "matrix": [0, 5], "x": 5, "y": 0},
+ {"label": "^", "matrix": [0, 6], "x": 6, "y": 0},
+ {"label": "&", "matrix": [0, 7], "x": 7, "y": 0},
+ {"label": "*", "matrix": [0, 8], "x": 8, "y": 0},
+ {"label": "(", "matrix": [0, 9], "x": 9, "y": 0},
+ {"label": ")", "matrix": [0, 10], "x": 10, "y": 0},
+ {"label": "_", "matrix": [0, 11], "x": 11, "y": 0},
+ {"label": "+", "matrix": [0, 12], "x": 12, "y": 0},
+ {"label": "Backspace", "matrix": [2, 13], "x": 13, "y": 0, "w": 2},
+ {"label": "Tab", "matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"label": "Q", "matrix": [1, 1], "x": 1.5, "y": 1},
+ {"label": "W", "matrix": [1, 2], "x": 2.5, "y": 1},
+ {"label": "E", "matrix": [1, 3], "x": 3.5, "y": 1},
+ {"label": "R", "matrix": [1, 4], "x": 4.5, "y": 1},
+ {"label": "T", "matrix": [1, 5], "x": 5.5, "y": 1},
+ {"label": "Y", "matrix": [1, 6], "x": 6.5, "y": 1},
+ {"label": "U", "matrix": [1, 7], "x": 7.5, "y": 1},
+ {"label": "I", "matrix": [1, 8], "x": 8.5, "y": 1},
+ {"label": "O", "matrix": [1, 9], "x": 9.5, "y": 1},
+ {"label": "P", "matrix": [1, 10], "x": 10.5, "y": 1},
+ {"label": "{", "matrix": [1, 11], "x": 11.5, "y": 1},
+ {"label": "}", "matrix": [1, 12], "x": 12.5, "y": 1},
+ {"label": "|", "matrix": [1, 13], "x": 13.5, "y": 1, "w": 1.5},
+ {"label": "Caps Lock", "matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"label": "A", "matrix": [2, 1], "x": 1.75, "y": 2},
+ {"label": "S", "matrix": [2, 2], "x": 2.75, "y": 2},
+ {"label": "D", "matrix": [2, 3], "x": 3.75, "y": 2},
+ {"label": "F", "matrix": [2, 4], "x": 4.75, "y": 2},
+ {"label": "G", "matrix": [2, 5], "x": 5.75, "y": 2},
+ {"label": "H", "matrix": [2, 6], "x": 6.75, "y": 2},
+ {"label": "J", "matrix": [2, 7], "x": 7.75, "y": 2},
+ {"label": "K", "matrix": [2, 8], "x": 8.75, "y": 2},
+ {"label": "L", "matrix": [2, 9], "x": 9.75, "y": 2},
+ {"label": ":", "matrix": [2, 10], "x": 10.75, "y": 2},
+ {"label": "\"", "matrix": [2, 11], "x": 11.75, "y": 2},
+ {"label": "Enter", "matrix": [3, 13], "x": 12.75, "y": 2, "w": 2.25},
+ {"label": "Shift", "matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
+ {"label": "Z", "matrix": [3, 2], "x": 2.25, "y": 3},
+ {"label": "X", "matrix": [3, 3], "x": 3.25, "y": 3},
+ {"label": "C", "matrix": [3, 4], "x": 4.25, "y": 3},
+ {"label": "V", "matrix": [3, 5], "x": 5.25, "y": 3},
+ {"label": "B", "matrix": [3, 6], "x": 6.25, "y": 3},
+ {"label": "N", "matrix": [3, 7], "x": 7.25, "y": 3},
+ {"label": "M", "matrix": [3, 8], "x": 8.25, "y": 3},
+ {"label": "<", "matrix": [3, 9], "x": 9.25, "y": 3},
+ {"label": ">", "matrix": [3, 10], "x": 10.25, "y": 3},
+ {"label": "?", "matrix": [3, 11], "x": 11.25, "y": 3},
+ {"label": "Shift", "matrix": [3, 12], "x": 12.25, "y": 3, "w": 2.75},
+ {"label": "Ctrl", "matrix": [4, 0], "x":0, "y":4, "w":1.5},
+ {"label": "Win", "matrix": [4, 1], "x":1.5, "y":4},
+ {"label": "Alt", "matrix": [4, 2], "x":2.5, "y":4, "w":1.5},
+ {"label": "Space", "matrix": [4, 6], "x":4, "y":4, "w":6},
+ {"label": "Alt", "matrix": [4, 9], "x":10, "y":4, "w":1.5},
+ {"label": "Win", "matrix": [4, 10], "x":11.5, "y":4},
+ {"label": "Menu", "matrix": [4, 11], "x":12.5, "y":4},
+ {"label": "Fn", "matrix": [4, 12], "x":13.5, "y":4, "w":1.5}
+ ]
+ },
+ "LAYOUT_6u_ansi_split_bs_rshift": {
+ "layout": [
+ {"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
+ {"label": "!", "matrix": [0, 1], "x": 1, "y": 0},
+ {"label": "@", "matrix": [0, 2], "x": 2, "y": 0},
+ {"label": "#", "matrix": [0, 3], "x": 3, "y": 0},
+ {"label": "$", "matrix": [0, 4], "x": 4, "y": 0},
+ {"label": "%", "matrix": [0, 5], "x": 5, "y": 0},
+ {"label": "^", "matrix": [0, 6], "x": 6, "y": 0},
+ {"label": "&", "matrix": [0, 7], "x": 7, "y": 0},
+ {"label": "*", "matrix": [0, 8], "x": 8, "y": 0},
+ {"label": "(", "matrix": [0, 9], "x": 9, "y": 0},
+ {"label": ")", "matrix": [0, 10], "x": 10, "y": 0},
+ {"label": "_", "matrix": [0, 11], "x": 11, "y": 0},
+ {"label": "+", "matrix": [0, 12], "x": 12, "y": 0},
+ {"label": "|", "matrix": [0, 13], "x": 13, "y": 0},
+ {"label": "~", "matrix": [2, 13], "x": 14, "y": 0},
+ {"label": "Tab", "matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"label": "Q", "matrix": [1, 1], "x": 1.5, "y": 1},
+ {"label": "W", "matrix": [1, 2], "x": 2.5, "y": 1},
+ {"label": "E", "matrix": [1, 3], "x": 3.5, "y": 1},
+ {"label": "R", "matrix": [1, 4], "x": 4.5, "y": 1},
+ {"label": "T", "matrix": [1, 5], "x": 5.5, "y": 1},
+ {"label": "Y", "matrix": [1, 6], "x": 6.5, "y": 1},
+ {"label": "U", "matrix": [1, 7], "x": 7.5, "y": 1},
+ {"label": "I", "matrix": [1, 8], "x": 8.5, "y": 1},
+ {"label": "O", "matrix": [1, 9], "x": 9.5, "y": 1},
+ {"label": "P", "matrix": [1, 10], "x": 10.5, "y": 1},
+ {"label": "{", "matrix": [1, 11], "x": 11.5, "y": 1},
+ {"label": "}", "matrix": [1, 12], "x": 12.5, "y": 1},
+ {"label": "|", "matrix": [1, 13], "x": 13.5, "y": 1, "w": 1.5},
+ {"label": "Caps Lock", "matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"label": "A", "matrix": [2, 1], "x": 1.75, "y": 2},
+ {"label": "S", "matrix": [2, 2], "x": 2.75, "y": 2},
+ {"label": "D", "matrix": [2, 3], "x": 3.75, "y": 2},
+ {"label": "F", "matrix": [2, 4], "x": 4.75, "y": 2},
+ {"label": "G", "matrix": [2, 5], "x": 5.75, "y": 2},
+ {"label": "H", "matrix": [2, 6], "x": 6.75, "y": 2},
+ {"label": "J", "matrix": [2, 7], "x": 7.75, "y": 2},
+ {"label": "K", "matrix": [2, 8], "x": 8.75, "y": 2},
+ {"label": "L", "matrix": [2, 9], "x": 9.75, "y": 2},
+ {"label": ":", "matrix": [2, 10], "x": 10.75, "y": 2},
+ {"label": "\"", "matrix": [2, 11], "x": 11.75, "y": 2},
+ {"label": "Enter", "matrix": [3, 13], "x": 12.75, "y": 2, "w": 2.25},
+ {"label": "Shift", "matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
+ {"label": "Z", "matrix": [3, 2], "x": 2.25, "y": 3},
+ {"label": "X", "matrix": [3, 3], "x": 3.25, "y": 3},
+ {"label": "C", "matrix": [3, 4], "x": 4.25, "y": 3},
+ {"label": "V", "matrix": [3, 5], "x": 5.25, "y": 3},
+ {"label": "B", "matrix": [3, 6], "x": 6.25, "y": 3},
+ {"label": "N", "matrix": [3, 7], "x": 7.25, "y": 3},
+ {"label": "M", "matrix": [3, 8], "x": 8.25, "y": 3},
+ {"label": "<", "matrix": [3, 9], "x": 9.25, "y": 3},
+ {"label": ">", "matrix": [3, 10], "x": 10.25, "y": 3},
+ {"label": "?", "matrix": [3, 11], "x": 11.25, "y": 3},
+ {"label": "Shift", "matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75},
+ {"label": "Fn", "matrix": [4, 13], "x": 14, "y": 3},
+ {"label": "Ctrl", "matrix": [4, 0], "x":0, "y":4, "w":1.5},
+ {"label": "Win", "matrix": [4, 1], "x":1.5, "y":4},
+ {"label": "Alt", "matrix": [4, 2], "x":2.5, "y":4, "w":1.5},
+ {"label": "Space", "matrix": [4, 6], "x":4, "y":4, "w":6},
+ {"label": "Alt", "matrix": [4, 9], "x":10, "y":4, "w":1.5},
+ {"label": "Win", "matrix": [4, 10], "x":11.5, "y":4},
+ {"label": "Menu", "matrix": [4, 11], "x":12.5, "y":4},
+ {"label": "Fn", "matrix": [4, 12], "x":13.5, "y":4, "w":1.5}
+ ]
+ },
+ "LAYOUT_6u_iso": {
+ "layout": [
+ {"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
+ {"label": "!", "matrix": [0, 1], "x": 1, "y": 0},
+ {"label": "@", "matrix": [0, 2], "x": 2, "y": 0},
+ {"label": "#", "matrix": [0, 3], "x": 3, "y": 0},
+ {"label": "$", "matrix": [0, 4], "x": 4, "y": 0},
+ {"label": "%", "matrix": [0, 5], "x": 5, "y": 0},
+ {"label": "^", "matrix": [0, 6], "x": 6, "y": 0},
+ {"label": "&", "matrix": [0, 7], "x": 7, "y": 0},
+ {"label": "*", "matrix": [0, 8], "x": 8, "y": 0},
+ {"label": "(", "matrix": [0, 9], "x": 9, "y": 0},
+ {"label": ")", "matrix": [0, 10], "x": 10, "y": 0},
+ {"label": "_", "matrix": [0, 11], "x": 11, "y": 0},
+ {"label": "+", "matrix": [0, 12], "x": 12, "y": 0},
+ {"label": "Backspace", "matrix": [2, 13], "x": 13, "y": 0, "w": 2},
+ {"label": "Tab", "matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"label": "Q", "matrix": [1, 1], "x": 1.5, "y": 1},
+ {"label": "W", "matrix": [1, 2], "x": 2.5, "y": 1},
+ {"label": "E", "matrix": [1, 3], "x": 3.5, "y": 1},
+ {"label": "R", "matrix": [1, 4], "x": 4.5, "y": 1},
+ {"label": "T", "matrix": [1, 5], "x": 5.5, "y": 1},
+ {"label": "Y", "matrix": [1, 6], "x": 6.5, "y": 1},
+ {"label": "U", "matrix": [1, 7], "x": 7.5, "y": 1},
+ {"label": "I", "matrix": [1, 8], "x": 8.5, "y": 1},
+ {"label": "O", "matrix": [1, 9], "x": 9.5, "y": 1},
+ {"label": "P", "matrix": [1, 10], "x": 10.5, "y": 1},
+ {"label": "{", "matrix": [1, 11], "x": 11.5, "y": 1},
+ {"label": "}", "matrix": [1, 12], "x": 12.5, "y": 1},
+ {"label": "Enter", "matrix": [3, 13], "x": 13.75, "y": 1, "w": 1.25, "h": 2},
+ {"label": "Caps Lock", "matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"label": "A", "matrix": [2, 1], "x": 1.75, "y": 2},
+ {"label": "S", "matrix": [2, 2], "x": 2.75, "y": 2},
+ {"label": "D", "matrix": [2, 3], "x": 3.75, "y": 2},
+ {"label": "F", "matrix": [2, 4], "x": 4.75, "y": 2},
+ {"label": "G", "matrix": [2, 5], "x": 5.75, "y": 2},
+ {"label": "H", "matrix": [2, 6], "x": 6.75, "y": 2},
+ {"label": "J", "matrix": [2, 7], "x": 7.75, "y": 2},
+ {"label": "K", "matrix": [2, 8], "x": 8.75, "y": 2},
+ {"label": "L", "matrix": [2, 9], "x": 9.75, "y": 2},
+ {"label": ":", "matrix": [2, 10], "x": 10.75, "y": 2},
+ {"label": "\"", "matrix": [2, 11], "x": 11.75, "y": 2},
+ {"label": "NUHS", "matrix": [2, 12], "x": 12.75, "y": 2},
+ {"label": "Shift", "matrix": [3, 0], "x": 0, "y": 3, "w": 1.25},
+ {"label": "NUBS", "matrix": [3, 1], "x": 1.25, "y": 3},
+ {"label": "Z", "matrix": [3, 2], "x": 2.25, "y": 3},
+ {"label": "X", "matrix": [3, 3], "x": 3.25, "y": 3},
+ {"label": "C", "matrix": [3, 4], "x": 4.25, "y": 3},
+ {"label": "V", "matrix": [3, 5], "x": 5.25, "y": 3},
+ {"label": "B", "matrix": [3, 6], "x": 6.25, "y": 3},
+ {"label": "N", "matrix": [3, 7], "x": 7.25, "y": 3},
+ {"label": "M", "matrix": [3, 8], "x": 8.25, "y": 3},
+ {"label": "<", "matrix": [3, 9], "x": 9.25, "y": 3},
+ {"label": ">", "matrix": [3, 10], "x": 10.25, "y": 3},
+ {"label": "?", "matrix": [3, 11], "x": 11.25, "y": 3},
+ {"label": "Shift", "matrix": [3, 12], "x": 12.25, "y": 3, "w": 2.75},
+ {"label": "Ctrl", "matrix": [4, 0], "x":0, "y":4, "w":1.5},
+ {"label": "Win", "matrix": [4, 1], "x":1.5, "y":4},
+ {"label": "Alt", "matrix": [4, 2], "x":2.5, "y":4, "w":1.5},
+ {"label": "Space", "matrix": [4, 6], "x":4, "y":4, "w":6},
+ {"label": "Alt", "matrix": [4, 9], "x":10, "y":4, "w":1.5},
+ {"label": "Win", "matrix": [4, 10], "x":11.5, "y":4},
+ {"label": "Menu", "matrix": [4, 11], "x":12.5, "y":4},
+ {"label": "Fn", "matrix": [4, 12], "x":13.5, "y":4, "w":1.5}
+ ]
+ },
+ "LAYOUT_6u_iso_split_bs_rshift": {
+ "layout": [
+ {"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
+ {"label": "!", "matrix": [0, 1], "x": 1, "y": 0},
+ {"label": "@", "matrix": [0, 2], "x": 2, "y": 0},
+ {"label": "#", "matrix": [0, 3], "x": 3, "y": 0},
+ {"label": "$", "matrix": [0, 4], "x": 4, "y": 0},
+ {"label": "%", "matrix": [0, 5], "x": 5, "y": 0},
+ {"label": "^", "matrix": [0, 6], "x": 6, "y": 0},
+ {"label": "&", "matrix": [0, 7], "x": 7, "y": 0},
+ {"label": "*", "matrix": [0, 8], "x": 8, "y": 0},
+ {"label": "(", "matrix": [0, 9], "x": 9, "y": 0},
+ {"label": ")", "matrix": [0, 10], "x": 10, "y": 0},
+ {"label": "_", "matrix": [0, 11], "x": 11, "y": 0},
+ {"label": "+", "matrix": [0, 12], "x": 12, "y": 0},
+ {"label": "|", "matrix": [0, 13], "x": 13, "y": 0},
+ {"label": "~", "matrix": [2, 13], "x": 14, "y": 0},
+ {"label": "Tab", "matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"label": "Q", "matrix": [1, 1], "x": 1.5, "y": 1},
+ {"label": "W", "matrix": [1, 2], "x": 2.5, "y": 1},
+ {"label": "E", "matrix": [1, 3], "x": 3.5, "y": 1},
+ {"label": "R", "matrix": [1, 4], "x": 4.5, "y": 1},
+ {"label": "T", "matrix": [1, 5], "x": 5.5, "y": 1},
+ {"label": "Y", "matrix": [1, 6], "x": 6.5, "y": 1},
+ {"label": "U", "matrix": [1, 7], "x": 7.5, "y": 1},
+ {"label": "I", "matrix": [1, 8], "x": 8.5, "y": 1},
+ {"label": "O", "matrix": [1, 9], "x": 9.5, "y": 1},
+ {"label": "P", "matrix": [1, 10], "x": 10.5, "y": 1},
+ {"label": "{", "matrix": [1, 11], "x": 11.5, "y": 1},
+ {"label": "}", "matrix": [1, 12], "x": 12.5, "y": 1},
+ {"label": "Enter", "matrix": [3, 13], "x": 13.75, "y": 1, "w": 1.25, "h": 2},
+ {"label": "Caps Lock", "matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"label": "A", "matrix": [2, 1], "x": 1.75, "y": 2},
+ {"label": "S", "matrix": [2, 2], "x": 2.75, "y": 2},
+ {"label": "D", "matrix": [2, 3], "x": 3.75, "y": 2},
+ {"label": "F", "matrix": [2, 4], "x": 4.75, "y": 2},
+ {"label": "G", "matrix": [2, 5], "x": 5.75, "y": 2},
+ {"label": "H", "matrix": [2, 6], "x": 6.75, "y": 2},
+ {"label": "J", "matrix": [2, 7], "x": 7.75, "y": 2},
+ {"label": "K", "matrix": [2, 8], "x": 8.75, "y": 2},
+ {"label": "L", "matrix": [2, 9], "x": 9.75, "y": 2},
+ {"label": ":", "matrix": [2, 10], "x": 10.75, "y": 2},
+ {"label": "\"", "matrix": [2, 11], "x": 11.75, "y": 2},
+ {"label": "NUHS", "matrix": [2, 12], "x": 12.75, "y": 2},
+ {"label": "Shift", "matrix": [3, 0], "x": 0, "y": 3, "w": 1.25},
+ {"label": "NUBS", "matrix": [3, 1], "x": 1.25, "y": 3},
+ {"label": "Z", "matrix": [3, 2], "x": 2.25, "y": 3},
+ {"label": "X", "matrix": [3, 3], "x": 3.25, "y": 3},
+ {"label": "C", "matrix": [3, 4], "x": 4.25, "y": 3},
+ {"label": "V", "matrix": [3, 5], "x": 5.25, "y": 3},
+ {"label": "B", "matrix": [3, 6], "x": 6.25, "y": 3},
+ {"label": "N", "matrix": [3, 7], "x": 7.25, "y": 3},
+ {"label": "M", "matrix": [3, 8], "x": 8.25, "y": 3},
+ {"label": "<", "matrix": [3, 9], "x": 9.25, "y": 3},
+ {"label": ">", "matrix": [3, 10], "x": 10.25, "y": 3},
+ {"label": "?", "matrix": [3, 11], "x": 11.25, "y": 3},
+ {"label": "Shift", "matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75},
+ {"label": "Fn", "matrix": [4, 13], "x": 14, "y": 3},
+ {"label": "Ctrl", "matrix": [4, 0], "x":0, "y":4, "w":1.5},
+ {"label": "Win", "matrix": [4, 1], "x":1.5, "y":4},
+ {"label": "Alt", "matrix": [4, 2], "x":2.5, "y":4, "w":1.5},
+ {"label": "Space", "matrix": [4, 6], "x":4, "y":4, "w":6},
+ {"label": "Alt", "matrix": [4, 9], "x":10, "y":4, "w":1.5},
+ {"label": "Win", "matrix": [4, 10], "x":11.5, "y":4},
+ {"label": "Menu", "matrix": [4, 11], "x":12.5, "y":4},
+ {"label": "Fn", "matrix": [4, 12], "x":13.5, "y":4, "w":1.5}
+ ]
+ },
+ "LAYOUT_all": {
+ "layout": [
+ {"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
+ {"label": "!", "matrix": [0, 1], "x": 1, "y": 0},
+ {"label": "@", "matrix": [0, 2], "x": 2, "y": 0},
+ {"label": "#", "matrix": [0, 3], "x": 3, "y": 0},
+ {"label": "$", "matrix": [0, 4], "x": 4, "y": 0},
+ {"label": "%", "matrix": [0, 5], "x": 5, "y": 0},
+ {"label": "^", "matrix": [0, 6], "x": 6, "y": 0},
+ {"label": "&", "matrix": [0, 7], "x": 7, "y": 0},
+ {"label": "*", "matrix": [0, 8], "x": 8, "y": 0},
+ {"label": "(", "matrix": [0, 9], "x": 9, "y": 0},
+ {"label": ")", "matrix": [0, 10], "x": 10, "y": 0},
+ {"label": "_", "matrix": [0, 11], "x": 11, "y": 0},
+ {"label": "+", "matrix": [0, 12], "x": 12, "y": 0},
+ {"label": "|", "matrix": [0, 13], "x": 13, "y": 0},
+ {"label": "Backspace", "matrix": [2, 13], "x": 14, "y": 0},
+ {"label": "Tab", "matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"label": "Q", "matrix": [1, 1], "x": 1.5, "y": 1},
+ {"label": "W", "matrix": [1, 2], "x": 2.5, "y": 1},
+ {"label": "E", "matrix": [1, 3], "x": 3.5, "y": 1},
+ {"label": "R", "matrix": [1, 4], "x": 4.5, "y": 1},
+ {"label": "T", "matrix": [1, 5], "x": 5.5, "y": 1},
+ {"label": "Y", "matrix": [1, 6], "x": 6.5, "y": 1},
+ {"label": "U", "matrix": [1, 7], "x": 7.5, "y": 1},
+ {"label": "I", "matrix": [1, 8], "x": 8.5, "y": 1},
+ {"label": "O", "matrix": [1, 9], "x": 9.5, "y": 1},
+ {"label": "P", "matrix": [1, 10], "x": 10.5, "y": 1},
+ {"label": "{", "matrix": [1, 11], "x": 11.5, "y": 1},
+ {"label": "}", "matrix": [1, 12], "x": 12.5, "y": 1},
+ {"label": "|", "matrix": [1, 13], "x": 13.5, "y": 1, "w": 1.5},
+ {"label": "Caps Lock", "matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"label": "A", "matrix": [2, 1], "x": 1.75, "y": 2},
+ {"label": "S", "matrix": [2, 2], "x": 2.75, "y": 2},
+ {"label": "D", "matrix": [2, 3], "x": 3.75, "y": 2},
+ {"label": "F", "matrix": [2, 4], "x": 4.75, "y": 2},
+ {"label": "G", "matrix": [2, 5], "x": 5.75, "y": 2},
+ {"label": "H", "matrix": [2, 6], "x": 6.75, "y": 2},
+ {"label": "J", "matrix": [2, 7], "x": 7.75, "y": 2},
+ {"label": "K", "matrix": [2, 8], "x": 8.75, "y": 2},
+ {"label": "L", "matrix": [2, 9], "x": 9.75, "y": 2},
+ {"label": ":", "matrix": [2, 10], "x": 10.75, "y": 2},
+ {"label": "\"", "matrix": [2, 11], "x": 11.75, "y": 2},
+ {"label": "NUHS", "matrix": [2, 12], "x": 12.75, "y": 2},
+ {"label": "Enter", "matrix": [3, 13], "x": 13.75, "y": 2, "w": 1.25},
+ {"label": "Shift", "matrix": [3, 0], "x": 0, "y": 3, "w": 1.25},
+ {"label": "NUBS", "matrix": [3, 1], "x": 1.25, "y": 3},
+ {"label": "Z", "matrix": [3, 2], "x": 2.25, "y": 3},
+ {"label": "X", "matrix": [3, 3], "x": 3.25, "y": 3},
+ {"label": "C", "matrix": [3, 4], "x": 4.25, "y": 3},
+ {"label": "V", "matrix": [3, 5], "x": 5.25, "y": 3},
+ {"label": "B", "matrix": [3, 6], "x": 6.25, "y": 3},
+ {"label": "N", "matrix": [3, 7], "x": 7.25, "y": 3},
+ {"label": "M", "matrix": [3, 8], "x": 8.25, "y": 3},
+ {"label": "<", "matrix": [3, 9], "x": 9.25, "y": 3},
+ {"label": ">", "matrix": [3, 10], "x": 10.25, "y": 3},
+ {"label": "?", "matrix": [3, 11], "x": 11.25, "y": 3},
+ {"label": "Shift", "matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75},
+ {"label": "Fn", "matrix": [4, 13], "x": 14, "y": 3},
+ {"label": "Ctrl", "matrix": [4, 0], "x": 0, "y": 4, "w": 1.25},
+ {"label": "Win", "matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.25},
+ {"label": "Alt", "matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.25},
+ {"label": "Space", "matrix": [4, 4], "x": 3.75, "y": 4, "w": 2.25},
+ {"label": "Space", "matrix": [4, 6], "x": 6, "y": 4, "w": 1.25},
+ {"label": "Space", "matrix": [4, 8], "x": 7.25, "y": 4, "w": 2.75},
+ {"label": "Alt", "matrix": [4, 9], "x": 10, "y": 4, "w": 1.25},
+ {"label": "Win", "matrix": [4, 10], "x": 11.25, "y": 4, "w": 1.25},
+ {"label": "Menu", "matrix": [4, 11], "x": 12.5, "y": 4, "w": 1.25},
+ {"label": "Ctrl", "matrix": [4, 12], "x": 13.75, "y": 4, "w": 1.25}
+ ]
+ }
+ }
+}
diff --git a/keyboards/4pplet/waffling60/rev_e/keymaps/6u_ansi/keymap.c b/keyboards/4pplet/waffling60/rev_e/keymaps/6u_ansi/keymap.c
new file mode 100644
index 000000000000..1a0147f148c1
--- /dev/null
+++ b/keyboards/4pplet/waffling60/rev_e/keymaps/6u_ansi/keymap.c
@@ -0,0 +1,40 @@
+/*
+Copyright 2020 Stefan Sundin "4pplet" <4pplet@protonmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+// main layer
+[0] = LAYOUT_6u_ansi(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,
+ KC_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_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_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_APP, KC_RCTL),
+// basic function layer
+[1] = LAYOUT_6u_ansi(
+ QK_BOOT, 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, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_LEFT, KC_DOWN, KC_RIGHT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS)
+};
+#if defined(ENCODER_MAP_ENABLE)
+const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
+ [0] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
+ [1] = { ENCODER_CCW_CW(KC_BRID, KC_BRIU) }
+};
+#endif
diff --git a/keyboards/atlantis/ps17/keymaps/multimedia/rules.mk b/keyboards/4pplet/waffling60/rev_e/keymaps/6u_ansi/rules.mk
similarity index 100%
rename from keyboards/atlantis/ps17/keymaps/multimedia/rules.mk
rename to keyboards/4pplet/waffling60/rev_e/keymaps/6u_ansi/rules.mk
diff --git a/keyboards/4pplet/waffling60/rev_e/keymaps/6u_ansi_split_bs_rshift/keymap.c b/keyboards/4pplet/waffling60/rev_e/keymaps/6u_ansi_split_bs_rshift/keymap.c
new file mode 100644
index 000000000000..1b68fce40e93
--- /dev/null
+++ b/keyboards/4pplet/waffling60/rev_e/keymaps/6u_ansi_split_bs_rshift/keymap.c
@@ -0,0 +1,40 @@
+/*
+Copyright 2020 Stefan Sundin "4pplet" <4pplet@protonmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+// main layer
+[0] = LAYOUT_6u_ansi_split_bs_rshift(
+ 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_BSPC,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
+ KC_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, MO(1),
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_APP, KC_RCTL),
+// basic function layer
+[1] = LAYOUT_6u_ansi_split_bs_rshift(
+ QK_BOOT, 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, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_LEFT, KC_DOWN, KC_RIGHT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS)
+};
+#if defined(ENCODER_MAP_ENABLE)
+const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
+ [0] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
+ [1] = { ENCODER_CCW_CW(KC_BRID, KC_BRIU) }
+};
+#endif
diff --git a/keyboards/keychron/q0/rev_0131/keymaps/default/rules.mk b/keyboards/4pplet/waffling60/rev_e/keymaps/6u_ansi_split_bs_rshift/rules.mk
similarity index 100%
rename from keyboards/keychron/q0/rev_0131/keymaps/default/rules.mk
rename to keyboards/4pplet/waffling60/rev_e/keymaps/6u_ansi_split_bs_rshift/rules.mk
diff --git a/keyboards/4pplet/waffling60/rev_e/keymaps/6u_iso/keymap.c b/keyboards/4pplet/waffling60/rev_e/keymaps/6u_iso/keymap.c
new file mode 100644
index 000000000000..919eec54f9f8
--- /dev/null
+++ b/keyboards/4pplet/waffling60/rev_e/keymaps/6u_iso/keymap.c
@@ -0,0 +1,40 @@
+/*
+Copyright 2020 Stefan Sundin "4pplet" <4pplet@protonmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+// main layer
+[0] = LAYOUT_6u_iso(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,
+ KC_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_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_NUHS ,
+ 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_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_APP, KC_RCTL),
+// basic function layer
+[1] = LAYOUT_6u_iso(
+ QK_BOOT, 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, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_LEFT, KC_DOWN, KC_RIGHT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS)
+};
+#if defined(ENCODER_MAP_ENABLE)
+const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
+ [0] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
+ [1] = { ENCODER_CCW_CW(KC_BRID, KC_BRIU) }
+};
+#endif
diff --git a/keyboards/rgbkb/mun/keymaps/peott-fr/rules.mk b/keyboards/4pplet/waffling60/rev_e/keymaps/6u_iso/rules.mk
similarity index 100%
rename from keyboards/rgbkb/mun/keymaps/peott-fr/rules.mk
rename to keyboards/4pplet/waffling60/rev_e/keymaps/6u_iso/rules.mk
diff --git a/keyboards/4pplet/waffling60/rev_e/keymaps/6u_iso_split_bs_rshift/keymap.c b/keyboards/4pplet/waffling60/rev_e/keymaps/6u_iso_split_bs_rshift/keymap.c
new file mode 100644
index 000000000000..4731a11d4781
--- /dev/null
+++ b/keyboards/4pplet/waffling60/rev_e/keymaps/6u_iso_split_bs_rshift/keymap.c
@@ -0,0 +1,40 @@
+/*
+Copyright 2020 Stefan Sundin "4pplet" <4pplet@protonmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+// main layer
+[0] = LAYOUT_6u_iso_split_bs_rshift(
+ 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_BSPC,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_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_NUHS,
+ 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, MO(1),
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_APP, KC_RCTL),
+// basic function layer
+[1] = LAYOUT_6u_iso_split_bs_rshift(
+ QK_BOOT, 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, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_LEFT, KC_DOWN, KC_RIGHT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS)
+};
+#if defined(ENCODER_MAP_ENABLE)
+const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
+ [0] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
+ [1] = { ENCODER_CCW_CW(KC_BRID, KC_BRIU) }
+};
+#endif
diff --git a/keyboards/4pplet/waffling60/rev_e/keymaps/6u_iso_split_bs_rshift/rules.mk b/keyboards/4pplet/waffling60/rev_e/keymaps/6u_iso_split_bs_rshift/rules.mk
new file mode 100644
index 000000000000..ee325681483f
--- /dev/null
+++ b/keyboards/4pplet/waffling60/rev_e/keymaps/6u_iso_split_bs_rshift/rules.mk
@@ -0,0 +1 @@
+ENCODER_MAP_ENABLE = yes
diff --git a/keyboards/4pplet/waffling60/rev_e/keymaps/default/keymap.c b/keyboards/4pplet/waffling60/rev_e/keymaps/default/keymap.c
new file mode 100644
index 000000000000..8b1bb6a2c4b1
--- /dev/null
+++ b/keyboards/4pplet/waffling60/rev_e/keymaps/default/keymap.c
@@ -0,0 +1,40 @@
+/*
+Copyright 2020 Stefan Sundin "4pplet" <4pplet@protonmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+// main layer
+[0] = LAYOUT_all(
+ 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_BSPC,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
+ KC_CAPS, 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, MO(1),
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_SPC, KC_RALT, KC_RGUI, KC_APP, KC_RCTL),
+// basic function layer
+[1] = LAYOUT_all(
+ QK_BOOT, 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, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_LEFT, KC_DOWN, KC_RIGHT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS)
+};
+#if defined(ENCODER_MAP_ENABLE)
+const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
+ [0] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
+ [1] = { ENCODER_CCW_CW(KC_BRID, KC_BRIU) }
+};
+#endif
diff --git a/keyboards/4pplet/waffling60/rev_e/keymaps/default/rules.mk b/keyboards/4pplet/waffling60/rev_e/keymaps/default/rules.mk
new file mode 100644
index 000000000000..ee325681483f
--- /dev/null
+++ b/keyboards/4pplet/waffling60/rev_e/keymaps/default/rules.mk
@@ -0,0 +1 @@
+ENCODER_MAP_ENABLE = yes
diff --git a/keyboards/4pplet/waffling60/rev_e/keymaps/via/keymap.c b/keyboards/4pplet/waffling60/rev_e/keymaps/via/keymap.c
new file mode 100644
index 000000000000..8b1bb6a2c4b1
--- /dev/null
+++ b/keyboards/4pplet/waffling60/rev_e/keymaps/via/keymap.c
@@ -0,0 +1,40 @@
+/*
+Copyright 2020 Stefan Sundin "4pplet" <4pplet@protonmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+// main layer
+[0] = LAYOUT_all(
+ 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_BSPC,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
+ KC_CAPS, 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, MO(1),
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_SPC, KC_RALT, KC_RGUI, KC_APP, KC_RCTL),
+// basic function layer
+[1] = LAYOUT_all(
+ QK_BOOT, 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, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_LEFT, KC_DOWN, KC_RIGHT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS)
+};
+#if defined(ENCODER_MAP_ENABLE)
+const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
+ [0] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
+ [1] = { ENCODER_CCW_CW(KC_BRID, KC_BRIU) }
+};
+#endif
diff --git a/keyboards/gmmk/pro/rev1/ansi/keymaps/vnmm/rules.mk b/keyboards/4pplet/waffling60/rev_e/keymaps/via/rules.mk
similarity index 100%
rename from keyboards/gmmk/pro/rev1/ansi/keymaps/vnmm/rules.mk
rename to keyboards/4pplet/waffling60/rev_e/keymaps/via/rules.mk
diff --git a/keyboards/4pplet/waffling60/rev_e/matrix_diagram.md b/keyboards/4pplet/waffling60/rev_e/matrix_diagram.md
new file mode 100644
index 000000000000..fb49b758ec3a
--- /dev/null
+++ b/keyboards/4pplet/waffling60/rev_e/matrix_diagram.md
@@ -0,0 +1,37 @@
+# Matrix Diagram for 4pplet Waffling60 Rev E Solder
+
+```
+ ┌───────┐
+ 2u Backspace │2D │
+ └───────┘
+┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
+│00 │01 │02 │03 │04 │05 │06 │07 │08 │09 │0A │0B │0C │0D │2D │
+├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤ ┌─────┐
+│10 │11 │12 │13 │14 │15 │16 │17 │18 │19 │1A │1B │1C │1D │ │ │
+├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤ ┌──┴┐3D │
+│20 │21 │22 │23 │24 │25 │26 │27 │28 │29 │2A │2B │3D │ │2C │ │
+├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┤ └───┴────┘
+│30 │31 │32 │33 │34 │35 │36 │37 │38 │39 │3A │3B │3C │4D │ ISO Enter
+├────┼───┴┬──┴─┬─┴───┴──┬┴───┼───┴───┴──┬┴───┼───┴┬────┬┴───┤
+│40 │41 │42 │44 │46 │48 │49 │4A │4B │4C │
+└────┴────┴────┴────────┴────┴──────────┴────┴────┴────┴────┘
+┌────────┐ ┌──────────┐
+│30 │ 2.25u LShift 2.75u RShift │3C │
+└────────┘ └──────────┘
+┌────┬────┬────┬────────────────────────┬────┬────┬────┬────┐
+│40 │41 │42 │46 │49 │4A │4B │4C │ Standard
+└────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
+┌─────┬───┬─────┬───────────────────────────┬─────┬───┬─────┐
+│40 │41 │42 │46 │4A │4B │4C │ Tsangan/WKL
+└─────┴───┴─────┴───────────────────────────┴─────┴───┴─────┘
+┌────┬────┬────┬────────────────────────┬────┬────┬────┬────┐
+│40 │41 │42 │46 │49 │4A │4B │4C │ 6U bottom row
+└────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
+┌─────┬───┬─────┬──────────┬──────┬─────────┬─────┬───┬─────┐
+│40 │41 │42 │44 │46 │48 │4A │4B │4C │ 3U split space
+└─────┴───┴─────┴──────────┴──────┴─────────┴─────┴───┴─────┘
+┌─────┬───┬───────────────────────────────────────┬───┬─────┐
+│40 │41 │46 │4B │4C │ 10U space
+└─────┴───┴───────────────────────────────────────┴───┴─────┘
+
+```
diff --git a/keyboards/4pplet/waffling60/rev_e/readme.md b/keyboards/4pplet/waffling60/rev_e/readme.md
new file mode 100644
index 000000000000..ee13539e5d1f
--- /dev/null
+++ b/keyboards/4pplet/waffling60/rev_e/readme.md
@@ -0,0 +1,20 @@
+# waffling60
+
+A 60% PCB for MX switches, one hot swap and one solder-pcb version with decent layout support. Revision E adds underglow and 6u space support.
+
+More info: https://github.com/4pplet/waffling60
+
+* Keyboard Maintainer: [4pplet](https://github.com/4pplet)
+* Hardware Supported: [waffling60](https://github.com/4pplet/waffling60)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make 4pplet/waffling60/rev_e:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+How to enter bootloader (DFU):
+* Short the reset-header (labled BL/RESET) on the back of the PCB for about 2 seconds for the keyboard to enter DFU. When in DFU, it's ready to flash the firmware. If using a APM MCU it will not automatically reset after flash. Simply short the reset-header for a very short time to just reset the PCB, alternatively unplug and repluck the USB-cable to the keyboard.
+
+Alternative option if the firmware is already pre-flashed:
+* Unplug your keyboard, hold down the Spacebar and B at the same time, plug in your keyboard and wait a second before releasing the keys. The keyboard will enter DFU and is ready to flash the firmware.
diff --git a/keyboards/4pplet/waffling60/rev_e/rev_e.c b/keyboards/4pplet/waffling60/rev_e/rev_e.c
new file mode 100644
index 000000000000..81941d54bed5
--- /dev/null
+++ b/keyboards/4pplet/waffling60/rev_e/rev_e.c
@@ -0,0 +1,35 @@
+/*
+Copyright 2022 Stefan Sundin "4pplet"
+
+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 .
+*/
+#include "rev_e.h"
+
+void keyboard_pre_init_kb(void) {
+ rgblight_set_effect_range(0, 16);
+ keyboard_pre_init_user();
+}
+
+bool led_update_kb(led_t led_state) {
+ bool res = led_update_user(led_state);
+ if (CAPS_LOCK_ENABLE && res) {
+ if(led_state.caps_lock) {
+ rgblight_sethsv_at(CAPS_LOCK_COLOR, 16);
+ }
+ else{
+ rgblight_sethsv_at(HSV_OFF, 16);
+ }
+ }
+ return res;
+}
diff --git a/keyboards/4pplet/waffling60/rev_e/rev_e.h b/keyboards/4pplet/waffling60/rev_e/rev_e.h
new file mode 100644
index 000000000000..61ebac191202
--- /dev/null
+++ b/keyboards/4pplet/waffling60/rev_e/rev_e.h
@@ -0,0 +1,22 @@
+/*
+Copyright 2022 Stefan Sundin "4pplet"
+
+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 .
+*/
+#pragma once
+
+#include "quantum.h"
+
+#define CAPS_LOCK_ENABLE true
+#define CAPS_LOCK_COLOR HSV_GREEN
diff --git a/keyboards/4pplet/waffling60/rev_e/rules.mk b/keyboards/4pplet/waffling60/rev_e/rules.mk
new file mode 100644
index 000000000000..04fe1eba2acd
--- /dev/null
+++ b/keyboards/4pplet/waffling60/rev_e/rules.mk
@@ -0,0 +1,2 @@
+# Wildcard to allow APM32 MCU
+DFU_SUFFIX_ARGS = -p FFFF -v FFFF
diff --git a/keyboards/4pplet/waffling60/rev_e_ansi/config.h b/keyboards/4pplet/waffling60/rev_e_ansi/config.h
new file mode 100644
index 000000000000..521ddf96a183
--- /dev/null
+++ b/keyboards/4pplet/waffling60/rev_e_ansi/config.h
@@ -0,0 +1,20 @@
+/*
+Copyright 2023 Stefan Sundin "4pplet"
+
+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 .
+*/
+#pragma once
+
+#define WS2812_EXTERNAL_PULLUP
+
diff --git a/keyboards/4pplet/waffling60/rev_e_ansi/info.json b/keyboards/4pplet/waffling60/rev_e_ansi/info.json
new file mode 100644
index 000000000000..c2514700ff00
--- /dev/null
+++ b/keyboards/4pplet/waffling60/rev_e_ansi/info.json
@@ -0,0 +1,255 @@
+{
+ "manufacturer": "4pplet",
+ "keyboard_name": "waffling60 Rev E ANSI HS",
+ "maintainer": "4pplet",
+ "bootloader": "stm32-dfu",
+ "diode_direction": "COL2ROW",
+ "encoder": {
+ "rotary": [
+ {"pin_a": "A2", "pin_b": "A1", "resolution": 2}
+ ]
+ },
+ "features": {
+ "bootmagic": true,
+ "command": false,
+ "console": false,
+ "extrakey": true,
+ "key_lock": true,
+ "mousekey": false,
+ "nkro": true,
+ "rgblight": true
+ },
+ "matrix_pins": {
+ "cols": ["B2", "A4", "A3", "A0", "F1", "F0", "C15", "C14", "C13", "B9", "B8", "B7", "A15", "B3"],
+ "rows": ["B14", "A9", "B6", "B5", "B4"]
+ },
+ "processor": "STM32F072",
+ "rgblight": {
+ "animations": {
+ "alternating": true,
+ "breathing": true,
+ "christmas": true,
+ "knight": true,
+ "rainbow_mood": true,
+ "rainbow_swirl": true,
+ "rgb_test": true,
+ "snake": true,
+ "static_gradient": true,
+ "twinkle": true
+ },
+ "led_count": 17
+ },
+ "url": "https://github.com/4pplet/waffling60",
+ "usb": {
+ "device_version": "0.0.5",
+ "pid": "0x0015",
+ "vid": "0x4444"
+ },
+ "ws2812": {
+ "pin": "A8"
+ },
+ "community_layouts": [
+ "60_tsangan_hhkb",
+ "60_hhkb"
+ ],
+ "layouts": {
+ "LAYOUT_all": {
+ "layout": [
+ {"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
+ {"label": "!", "matrix": [0, 1], "x": 1, "y": 0},
+ {"label": "@", "matrix": [0, 2], "x": 2, "y": 0},
+ {"label": "#", "matrix": [0, 3], "x": 3, "y": 0},
+ {"label": "$", "matrix": [0, 4], "x": 4, "y": 0},
+ {"label": "%", "matrix": [0, 5], "x": 5, "y": 0},
+ {"label": "^", "matrix": [0, 6], "x": 6, "y": 0},
+ {"label": "&", "matrix": [0, 7], "x": 7, "y": 0},
+ {"label": "*", "matrix": [0, 8], "x": 8, "y": 0},
+ {"label": "(", "matrix": [0, 9], "x": 9, "y": 0},
+ {"label": ")", "matrix": [0, 10], "x": 10, "y": 0},
+ {"label": "_", "matrix": [0, 11], "x": 11, "y": 0},
+ {"label": "+", "matrix": [0, 12], "x": 12, "y": 0},
+ {"label": "|", "matrix": [0, 13], "x": 13, "y": 0},
+ {"label": "~", "matrix": [1, 13], "x": 14, "y": 0},
+ {"label": "Tab", "matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"label": "Q", "matrix": [1, 1], "x": 1.5, "y": 1},
+ {"label": "W", "matrix": [1, 2], "x": 2.5, "y": 1},
+ {"label": "E", "matrix": [1, 3], "x": 3.5, "y": 1},
+ {"label": "R", "matrix": [1, 4], "x": 4.5, "y": 1},
+ {"label": "T", "matrix": [1, 5], "x": 5.5, "y": 1},
+ {"label": "Y", "matrix": [1, 6], "x": 6.5, "y": 1},
+ {"label": "U", "matrix": [1, 7], "x": 7.5, "y": 1},
+ {"label": "I", "matrix": [1, 8], "x": 8.5, "y": 1},
+ {"label": "O", "matrix": [1, 9], "x": 9.5, "y": 1},
+ {"label": "P", "matrix": [1, 10], "x": 10.5, "y": 1},
+ {"label": "{", "matrix": [1, 11], "x": 11.5, "y": 1},
+ {"label": "}", "matrix": [1, 12], "x": 12.5, "y": 1},
+ {"label": "|", "matrix": [2, 12], "x": 13.5, "y": 1, "w": 1.5},
+ {"label": "Caps Lock", "matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"label": "A", "matrix": [2, 1], "x": 1.75, "y": 2},
+ {"label": "S", "matrix": [2, 2], "x": 2.75, "y": 2},
+ {"label": "D", "matrix": [2, 3], "x": 3.75, "y": 2},
+ {"label": "F", "matrix": [2, 4], "x": 4.75, "y": 2},
+ {"label": "G", "matrix": [2, 5], "x": 5.75, "y": 2},
+ {"label": "H", "matrix": [2, 6], "x": 6.75, "y": 2},
+ {"label": "J", "matrix": [2, 7], "x": 7.75, "y": 2},
+ {"label": "K", "matrix": [2, 8], "x": 8.75, "y": 2},
+ {"label": "L", "matrix": [2, 9], "x": 9.75, "y": 2},
+ {"label": ":", "matrix": [2, 10], "x": 10.75, "y": 2},
+ {"label": "\"", "matrix": [2, 11], "x": 11.75, "y": 2},
+ {"label": "Enter", "matrix": [2, 13], "x": 12.75, "y": 2, "w": 2.25},
+ {"label": "Shift", "matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
+ {"label": "Z", "matrix": [3, 2], "x": 2.25, "y": 3},
+ {"label": "X", "matrix": [3, 3], "x": 3.25, "y": 3},
+ {"label": "C", "matrix": [3, 4], "x": 4.25, "y": 3},
+ {"label": "V", "matrix": [3, 5], "x": 5.25, "y": 3},
+ {"label": "B", "matrix": [3, 6], "x": 6.25, "y": 3},
+ {"label": "N", "matrix": [3, 7], "x": 7.25, "y": 3},
+ {"label": "M", "matrix": [3, 8], "x": 8.25, "y": 3},
+ {"label": "<", "matrix": [3, 9], "x": 9.25, "y": 3},
+ {"label": ">", "matrix": [3, 10], "x": 10.25, "y": 3},
+ {"label": "?", "matrix": [3, 11], "x": 11.25, "y": 3},
+ {"label": "Shift", "matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75},
+ {"label": "Fn", "matrix": [3, 13], "x": 14, "y": 3},
+ {"label": "Ctrl", "matrix": [4, 0], "x": 0, "y": 4, "w": 1.5},
+ {"label": "Win", "matrix": [4, 1], "x": 1.5, "y": 4},
+ {"label": "Alt", "matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.5},
+ {"label": "Space", "matrix": [4, 4], "x":4, "y":4, "w":3},
+ {"label": "Space", "matrix": [4, 6], "x":7, "y":4},
+ {"label": "Space", "matrix": [4, 8], "x":8, "y":4, "w":3},
+ {"label": "Alt", "matrix": [4, 11], "x": 11, "y": 4, "w": 1.5},
+ {"label": "Win", "matrix": [4, 12], "x": 12.5, "y": 4},
+ {"label": "Ctrl", "matrix": [4, 13], "x": 13.5, "y": 4, "w": 1.5}
+ ]
+ },
+ "LAYOUT_60_tsangan_hhkb": {
+ "layout": [
+ {"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
+ {"label": "!", "matrix": [0, 1], "x": 1, "y": 0},
+ {"label": "@", "matrix": [0, 2], "x": 2, "y": 0},
+ {"label": "#", "matrix": [0, 3], "x": 3, "y": 0},
+ {"label": "$", "matrix": [0, 4], "x": 4, "y": 0},
+ {"label": "%", "matrix": [0, 5], "x": 5, "y": 0},
+ {"label": "^", "matrix": [0, 6], "x": 6, "y": 0},
+ {"label": "&", "matrix": [0, 7], "x": 7, "y": 0},
+ {"label": "*", "matrix": [0, 8], "x": 8, "y": 0},
+ {"label": "(", "matrix": [0, 9], "x": 9, "y": 0},
+ {"label": ")", "matrix": [0, 10], "x": 10, "y": 0},
+ {"label": "_", "matrix": [0, 11], "x": 11, "y": 0},
+ {"label": "+", "matrix": [0, 12], "x": 12, "y": 0},
+ {"label": "|", "matrix": [0, 13], "x": 13, "y": 0},
+ {"label": "~", "matrix": [1, 13], "x": 14, "y": 0},
+ {"label": "Tab", "matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"label": "Q", "matrix": [1, 1], "x": 1.5, "y": 1},
+ {"label": "W", "matrix": [1, 2], "x": 2.5, "y": 1},
+ {"label": "E", "matrix": [1, 3], "x": 3.5, "y": 1},
+ {"label": "R", "matrix": [1, 4], "x": 4.5, "y": 1},
+ {"label": "T", "matrix": [1, 5], "x": 5.5, "y": 1},
+ {"label": "Y", "matrix": [1, 6], "x": 6.5, "y": 1},
+ {"label": "U", "matrix": [1, 7], "x": 7.5, "y": 1},
+ {"label": "I", "matrix": [1, 8], "x": 8.5, "y": 1},
+ {"label": "O", "matrix": [1, 9], "x": 9.5, "y": 1},
+ {"label": "P", "matrix": [1, 10], "x": 10.5, "y": 1},
+ {"label": "{", "matrix": [1, 11], "x": 11.5, "y": 1},
+ {"label": "}", "matrix": [1, 12], "x": 12.5, "y": 1},
+ {"label": "|", "matrix": [2, 12], "x": 13.5, "y": 1, "w": 1.5},
+ {"label": "Caps Lock", "matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"label": "A", "matrix": [2, 1], "x": 1.75, "y": 2},
+ {"label": "S", "matrix": [2, 2], "x": 2.75, "y": 2},
+ {"label": "D", "matrix": [2, 3], "x": 3.75, "y": 2},
+ {"label": "F", "matrix": [2, 4], "x": 4.75, "y": 2},
+ {"label": "G", "matrix": [2, 5], "x": 5.75, "y": 2},
+ {"label": "H", "matrix": [2, 6], "x": 6.75, "y": 2},
+ {"label": "J", "matrix": [2, 7], "x": 7.75, "y": 2},
+ {"label": "K", "matrix": [2, 8], "x": 8.75, "y": 2},
+ {"label": "L", "matrix": [2, 9], "x": 9.75, "y": 2},
+ {"label": ":", "matrix": [2, 10], "x": 10.75, "y": 2},
+ {"label": "\"", "matrix": [2, 11], "x": 11.75, "y": 2},
+ {"label": "Enter", "matrix": [2, 13], "x": 12.75, "y": 2, "w": 2.25},
+ {"label": "Shift", "matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
+ {"label": "Z", "matrix": [3, 2], "x": 2.25, "y": 3},
+ {"label": "X", "matrix": [3, 3], "x": 3.25, "y": 3},
+ {"label": "C", "matrix": [3, 4], "x": 4.25, "y": 3},
+ {"label": "V", "matrix": [3, 5], "x": 5.25, "y": 3},
+ {"label": "B", "matrix": [3, 6], "x": 6.25, "y": 3},
+ {"label": "N", "matrix": [3, 7], "x": 7.25, "y": 3},
+ {"label": "M", "matrix": [3, 8], "x": 8.25, "y": 3},
+ {"label": "<", "matrix": [3, 9], "x": 9.25, "y": 3},
+ {"label": ">", "matrix": [3, 10], "x": 10.25, "y": 3},
+ {"label": "?", "matrix": [3, 11], "x": 11.25, "y": 3},
+ {"label": "Shift", "matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75},
+ {"label": "Fn", "matrix": [3, 13], "x": 14, "y": 3},
+ {"label": "Ctrl", "matrix": [4, 0], "x": 0, "y": 4, "w": 1.5},
+ {"label": "Win", "matrix": [4, 1], "x": 1.5, "y": 4},
+ {"label": "Alt", "matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.5},
+ {"label": "Space", "matrix": [4, 6], "x":4, "y":4, "w": 7},
+ {"label": "Alt", "matrix": [4, 11], "x": 11, "y": 4, "w": 1.5},
+ {"label": "Win", "matrix": [4, 12], "x": 12.5, "y": 4},
+ {"label": "Ctrl", "matrix": [4, 13], "x": 13.5, "y": 4, "w": 1.5}
+ ]
+ },
+ "LAYOUT_60_hhkb": {
+ "layout": [
+ {"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
+ {"label": "!", "matrix": [0, 1], "x": 1, "y": 0},
+ {"label": "@", "matrix": [0, 2], "x": 2, "y": 0},
+ {"label": "#", "matrix": [0, 3], "x": 3, "y": 0},
+ {"label": "$", "matrix": [0, 4], "x": 4, "y": 0},
+ {"label": "%", "matrix": [0, 5], "x": 5, "y": 0},
+ {"label": "^", "matrix": [0, 6], "x": 6, "y": 0},
+ {"label": "&", "matrix": [0, 7], "x": 7, "y": 0},
+ {"label": "*", "matrix": [0, 8], "x": 8, "y": 0},
+ {"label": "(", "matrix": [0, 9], "x": 9, "y": 0},
+ {"label": ")", "matrix": [0, 10], "x": 10, "y": 0},
+ {"label": "_", "matrix": [0, 11], "x": 11, "y": 0},
+ {"label": "+", "matrix": [0, 12], "x": 12, "y": 0},
+ {"label": "|", "matrix": [0, 13], "x": 13, "y": 0},
+ {"label": "~", "matrix": [1, 13], "x": 14, "y": 0},
+ {"label": "Tab", "matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"label": "Q", "matrix": [1, 1], "x": 1.5, "y": 1},
+ {"label": "W", "matrix": [1, 2], "x": 2.5, "y": 1},
+ {"label": "E", "matrix": [1, 3], "x": 3.5, "y": 1},
+ {"label": "R", "matrix": [1, 4], "x": 4.5, "y": 1},
+ {"label": "T", "matrix": [1, 5], "x": 5.5, "y": 1},
+ {"label": "Y", "matrix": [1, 6], "x": 6.5, "y": 1},
+ {"label": "U", "matrix": [1, 7], "x": 7.5, "y": 1},
+ {"label": "I", "matrix": [1, 8], "x": 8.5, "y": 1},
+ {"label": "O", "matrix": [1, 9], "x": 9.5, "y": 1},
+ {"label": "P", "matrix": [1, 10], "x": 10.5, "y": 1},
+ {"label": "{", "matrix": [1, 11], "x": 11.5, "y": 1},
+ {"label": "}", "matrix": [1, 12], "x": 12.5, "y": 1},
+ {"label": "Bsp", "matrix": [2, 12], "x": 13.5, "y": 1, "w": 1.5},
+ {"label": "Ctrl", "matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"label": "A", "matrix": [2, 1], "x": 1.75, "y": 2},
+ {"label": "S", "matrix": [2, 2], "x": 2.75, "y": 2},
+ {"label": "D", "matrix": [2, 3], "x": 3.75, "y": 2},
+ {"label": "F", "matrix": [2, 4], "x": 4.75, "y": 2},
+ {"label": "G", "matrix": [2, 5], "x": 5.75, "y": 2},
+ {"label": "H", "matrix": [2, 6], "x": 6.75, "y": 2},
+ {"label": "J", "matrix": [2, 7], "x": 7.75, "y": 2},
+ {"label": "K", "matrix": [2, 8], "x": 8.75, "y": 2},
+ {"label": "L", "matrix": [2, 9], "x": 9.75, "y": 2},
+ {"label": ":", "matrix": [2, 10], "x": 10.75, "y": 2},
+ {"label": "\"", "matrix": [2, 11], "x": 11.75, "y": 2},
+ {"label": "Enter", "matrix": [2, 13], "x": 12.75, "y": 2, "w": 2.25},
+ {"label": "Shift", "matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
+ {"label": "Z", "matrix": [3, 2], "x": 2.25, "y": 3},
+ {"label": "X", "matrix": [3, 3], "x": 3.25, "y": 3},
+ {"label": "C", "matrix": [3, 4], "x": 4.25, "y": 3},
+ {"label": "V", "matrix": [3, 5], "x": 5.25, "y": 3},
+ {"label": "B", "matrix": [3, 6], "x": 6.25, "y": 3},
+ {"label": "N", "matrix": [3, 7], "x": 7.25, "y": 3},
+ {"label": "M", "matrix": [3, 8], "x": 8.25, "y": 3},
+ {"label": "<", "matrix": [3, 9], "x": 9.25, "y": 3},
+ {"label": ">", "matrix": [3, 10], "x": 10.25, "y": 3},
+ {"label": "?", "matrix": [3, 11], "x": 11.25, "y": 3},
+ {"label": "Shift", "matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75},
+ {"label": "Fn", "matrix": [3, 13], "x": 14, "y": 3},
+ {"label": "Alt", "matrix": [4, 1], "x": 1.5, "y": 4},
+ {"label": "Win", "matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.5},
+ {"label": "Space", "matrix": [4, 6], "x":4, "y":4, "w": 7},
+ {"label": "Win", "matrix": [4, 11], "x": 11, "y": 4, "w": 1.5},
+ {"label": "Alt", "matrix": [4, 12], "x": 12.5, "y": 4},
+ ]
+ }
+ }
+}
diff --git a/keyboards/4pplet/waffling60/rev_e_ansi/keymaps/default/keymap.c b/keyboards/4pplet/waffling60/rev_e_ansi/keymaps/default/keymap.c
new file mode 100644
index 000000000000..706428c00e72
--- /dev/null
+++ b/keyboards/4pplet/waffling60/rev_e_ansi/keymaps/default/keymap.c
@@ -0,0 +1,40 @@
+/*
+Copyright 2023 Stefan Sundin "4pplet"
+
+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 .
+*/
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+// main layer
+[0] = LAYOUT_all(
+ 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_BSPC,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
+ KC_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, MO(1),
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_SPC, KC_RALT, KC_RGUI, KC_RCTL),
+// basic function layer
+[1] = LAYOUT_all(
+ QK_BOOT, 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, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_LEFT, KC_DOWN, KC_RIGHT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS)
+};
+#if defined(ENCODER_MAP_ENABLE)
+const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
+ [0] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
+ [1] = { ENCODER_CCW_CW(KC_BRID, KC_BRIU) }
+};
+#endif
diff --git a/keyboards/4pplet/waffling60/rev_e_ansi/keymaps/default/rules.mk b/keyboards/4pplet/waffling60/rev_e_ansi/keymaps/default/rules.mk
new file mode 100644
index 000000000000..ee325681483f
--- /dev/null
+++ b/keyboards/4pplet/waffling60/rev_e_ansi/keymaps/default/rules.mk
@@ -0,0 +1 @@
+ENCODER_MAP_ENABLE = yes
diff --git a/keyboards/4pplet/waffling60/rev_e_ansi/keymaps/via/keymap.c b/keyboards/4pplet/waffling60/rev_e_ansi/keymaps/via/keymap.c
new file mode 100644
index 000000000000..706428c00e72
--- /dev/null
+++ b/keyboards/4pplet/waffling60/rev_e_ansi/keymaps/via/keymap.c
@@ -0,0 +1,40 @@
+/*
+Copyright 2023 Stefan Sundin "4pplet"
+
+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 .
+*/
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+// main layer
+[0] = LAYOUT_all(
+ 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_BSPC,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
+ KC_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, MO(1),
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_SPC, KC_RALT, KC_RGUI, KC_RCTL),
+// basic function layer
+[1] = LAYOUT_all(
+ QK_BOOT, 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, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_LEFT, KC_DOWN, KC_RIGHT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS)
+};
+#if defined(ENCODER_MAP_ENABLE)
+const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
+ [0] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
+ [1] = { ENCODER_CCW_CW(KC_BRID, KC_BRIU) }
+};
+#endif
diff --git a/keyboards/keychron/q0/rev_0131/keymaps/via/rules.mk b/keyboards/4pplet/waffling60/rev_e_ansi/keymaps/via/rules.mk
similarity index 100%
rename from keyboards/keychron/q0/rev_0131/keymaps/via/rules.mk
rename to keyboards/4pplet/waffling60/rev_e_ansi/keymaps/via/rules.mk
diff --git a/keyboards/4pplet/waffling60/rev_e_ansi/matrix_diagram.md b/keyboards/4pplet/waffling60/rev_e_ansi/matrix_diagram.md
new file mode 100644
index 000000000000..ae47900a9baa
--- /dev/null
+++ b/keyboards/4pplet/waffling60/rev_e_ansi/matrix_diagram.md
@@ -0,0 +1,24 @@
+# Matrix Diagram for 4pplet Waffling60 Rev E ANSI Hotswap
+
+```
+ ┌───────┐
+ 2u Backspace │1D │
+ └───────┘
+┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
+│00 │01 │02 │03 │04 │05 │06 │07 │08 │09 │0A │0B │0C │0D │1D │
+├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤
+│10 │11 │12 │13 │14 │15 │16 │17 │18 │19 │1A │1B │1C │2C │
+├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤
+│20 │21 │22 │23 │24 │25 │26 │27 │28 │29 │2A │2B │2D │
+├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┤
+│30 │32 │33 │34 │35 │36 │37 │38 │39 │3A │3B │3C │3D │
+├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴───┴───┼───┴┬────┬┴───┤
+│40 │41 │42 │46 │4B │4C │4D │ Tsangan/WKL/HHKB
+└────┴────┴────┴─────────────────────────────┴────┴────┴────┘
+┌─────┬───┬─────┬───────────┬───┬───────────┬─────┬───┬─────┐
+│40 │41 │42 │44 │46 │48 │4B │4C │4D │ 7u split spacebar
+└─────┴───┴─────┴───────────┴───┴───────────┴─────┴───┴─────┘
+┌─────┬───┬───────────────────────────────────────┬───┬─────┐
+│40 │41 │46 │4C │4D │ 10u Spacebar
+└─────┴───┴───────────────────────────────────────┴───┴─────┘
+```
diff --git a/keyboards/4pplet/waffling60/rev_e_ansi/readme.md b/keyboards/4pplet/waffling60/rev_e_ansi/readme.md
new file mode 100644
index 000000000000..1b70d5aba864
--- /dev/null
+++ b/keyboards/4pplet/waffling60/rev_e_ansi/readme.md
@@ -0,0 +1,26 @@
+# waffling60 Rev. E ANSI
+
+A 60% PCB for MX switches, one hot swap and one solder-pcb version with decent layout support. Revision E adds underglow and rotary encoder support.
+
+More info: https://github.com/4pplet/waffling60
+
+* Keyboard Maintainer: [4pplet](https://github.com/4pplet)
+* Hardware Supported: [waffling60](https://github.com/4pplet/waffling60)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make 4pplet/waffling60/rev_e_ansi:default
+
+Flashing example for this keyboard:
+
+ make 4pplet/waffling60/rev_e_ansi:default:flash
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+## Bootloader
+
+How to enter bootloader (DFU):
+* Short the reset-header (labled BL/RESET) on the back of the PCB for about 2 seconds for the keyboard to enter DFU. When in DFU, it's ready to flash the firmware. If using a APM MCU it will not automatically reset after flash. Simply short the reset-header for a very short time to just reset the PCB, alternatively unplug and repluck the USB-cable to the keyboard.
+
+Alternative option if the firmware is already pre-flashed:
+* Unplug your keyboard, hold down the Spacebar and B at the same time, plug in your keyboard and wait a second before releasing the keys. The keyboard will enter DFU and is ready to flash the firmware.
diff --git a/keyboards/4pplet/waffling60/rev_e_ansi/rules.mk b/keyboards/4pplet/waffling60/rev_e_ansi/rules.mk
new file mode 100644
index 000000000000..04fe1eba2acd
--- /dev/null
+++ b/keyboards/4pplet/waffling60/rev_e_ansi/rules.mk
@@ -0,0 +1,2 @@
+# Wildcard to allow APM32 MCU
+DFU_SUFFIX_ARGS = -p FFFF -v FFFF
diff --git a/keyboards/4pplet/waffling60/rev_e_iso/config.h b/keyboards/4pplet/waffling60/rev_e_iso/config.h
new file mode 100644
index 000000000000..521ddf96a183
--- /dev/null
+++ b/keyboards/4pplet/waffling60/rev_e_iso/config.h
@@ -0,0 +1,20 @@
+/*
+Copyright 2023 Stefan Sundin "4pplet"
+
+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 .
+*/
+#pragma once
+
+#define WS2812_EXTERNAL_PULLUP
+
diff --git a/keyboards/4pplet/waffling60/rev_e_iso/info.json b/keyboards/4pplet/waffling60/rev_e_iso/info.json
new file mode 100644
index 000000000000..e53dcab891cd
--- /dev/null
+++ b/keyboards/4pplet/waffling60/rev_e_iso/info.json
@@ -0,0 +1,408 @@
+{
+ "manufacturer": "4pplet",
+ "keyboard_name": "waffling60 Rev E ISO HS",
+ "maintainer": "4pplet",
+ "bootloader": "stm32-dfu",
+ "diode_direction": "COL2ROW",
+ "encoder": {
+ "rotary": [
+ {"pin_a": "A2", "pin_b": "A1", "resolution": 2}
+ ]
+ },
+ "features": {
+ "bootmagic": true,
+ "command": false,
+ "console": false,
+ "extrakey": true,
+ "key_lock": true,
+ "mousekey": true,
+ "nkro": true,
+ "rgblight": true
+ },
+ "matrix_pins": {
+ "cols": ["B2", "A4", "A3", "A0", "F1", "F0", "C15", "C14", "C13", "B9", "B8", "B7", "A15", "B3"],
+ "rows": ["B14", "A9", "B6", "B5", "B4"]
+ },
+ "processor": "STM32F072",
+ "rgblight": {
+ "animations": {
+ "alternating": true,
+ "breathing": true,
+ "christmas": true,
+ "knight": true,
+ "rainbow_mood": true,
+ "rainbow_swirl": true,
+ "rgb_test": true,
+ "snake": true,
+ "static_gradient": true,
+ "twinkle": true
+ },
+ "led_count": 17
+ },
+ "url": "https://github.com/4pplet/waffling60",
+ "usb": {
+ "device_version": "0.0.5",
+ "pid": "0x0016",
+ "vid": "0x4444"
+ },
+ "ws2812": {
+ "pin": "A8"
+ },
+ "community_layouts": [
+ "60_iso_tsangan_split_bs_rshift",
+ "60_iso_wkl_split_bs_rshift"
+ ],
+ "layouts": {
+ "LAYOUT_all": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10, "y": 0},
+ {"matrix": [0, 11], "x": 11, "y": 0},
+ {"matrix": [0, 12], "x": 12, "y": 0},
+ {"matrix": [0, 13], "x": 13, "y": 0},
+ {"matrix": [1, 13], "x": 14, "y": 0},
+
+ {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"matrix": [1, 1], "x": 1.5, "y": 1},
+ {"matrix": [1, 2], "x": 2.5, "y": 1},
+ {"matrix": [1, 3], "x": 3.5, "y": 1},
+ {"matrix": [1, 4], "x": 4.5, "y": 1},
+ {"matrix": [1, 5], "x": 5.5, "y": 1},
+ {"matrix": [1, 6], "x": 6.5, "y": 1},
+ {"matrix": [1, 7], "x": 7.5, "y": 1},
+ {"matrix": [1, 8], "x": 8.5, "y": 1},
+ {"matrix": [1, 9], "x": 9.5, "y": 1},
+ {"matrix": [1, 10], "x": 10.5, "y": 1},
+ {"matrix": [1, 11], "x": 11.5, "y": 1},
+ {"matrix": [1, 12], "x": 12.5, "y": 1},
+
+ {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"matrix": [2, 1], "x": 1.75, "y": 2},
+ {"matrix": [2, 2], "x": 2.75, "y": 2},
+ {"matrix": [2, 3], "x": 3.75, "y": 2},
+ {"matrix": [2, 4], "x": 4.75, "y": 2},
+ {"matrix": [2, 5], "x": 5.75, "y": 2},
+ {"matrix": [2, 6], "x": 6.75, "y": 2},
+ {"matrix": [2, 7], "x": 7.75, "y": 2},
+ {"matrix": [2, 8], "x": 8.75, "y": 2},
+ {"matrix": [2, 9], "x": 9.75, "y": 2},
+ {"matrix": [2, 10], "x": 10.75, "y": 2},
+ {"matrix": [2, 11], "x": 11.75, "y": 2},
+ {"matrix": [2, 12], "x": 12.75, "y": 2},
+ {"matrix": [2, 13], "x": 13.75, "y": 1, "w": 1.25, "h": 2},
+
+ {"matrix": [3, 0], "x": 0, "y": 3, "w": 1.25},
+ {"matrix": [3, 1], "x": 1.25, "y": 3},
+ {"matrix": [3, 2], "x": 2.25, "y": 3},
+ {"matrix": [3, 3], "x": 3.25, "y": 3},
+ {"matrix": [3, 4], "x": 4.25, "y": 3},
+ {"matrix": [3, 5], "x": 5.25, "y": 3},
+ {"matrix": [3, 6], "x": 6.25, "y": 3},
+ {"matrix": [3, 7], "x": 7.25, "y": 3},
+ {"matrix": [3, 8], "x": 8.25, "y": 3},
+ {"matrix": [3, 9], "x": 9.25, "y": 3},
+ {"matrix": [3, 10], "x": 10.25, "y": 3},
+ {"matrix": [3, 11], "x": 11.25, "y": 3},
+ {"matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75},
+ {"matrix": [3, 13], "x": 14, "y": 3},
+
+ {"matrix": [4, 0], "x": 0, "y": 4, "w": 1.5},
+ {"matrix": [4, 1], "x": 1.5, "y": 4},
+ {"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.5},
+ {"matrix": [4, 4], "x": 4, "y": 4, "w": 3},
+ {"matrix": [4, 6], "x": 7, "y": 4},
+ {"matrix": [4, 8], "x": 8, "y": 4, "w": 3},
+ {"matrix": [4, 11], "x": 11, "y": 4, "w": 1.5},
+ {"matrix": [4, 12], "x": 12.5, "y": 4},
+ {"matrix": [4, 13], "x": 13.5, "y": 4, "w": 1.5}
+ ]
+ },
+ "LAYOUT_60_iso_tsangan_split_rshift": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10, "y": 0},
+ {"matrix": [0, 11], "x": 11, "y": 0},
+ {"matrix": [0, 12], "x": 12, "y": 0},
+ {"matrix": [1, 13], "x": 13, "y": 0, "w": 2},
+
+ {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"matrix": [1, 1], "x": 1.5, "y": 1},
+ {"matrix": [1, 2], "x": 2.5, "y": 1},
+ {"matrix": [1, 3], "x": 3.5, "y": 1},
+ {"matrix": [1, 4], "x": 4.5, "y": 1},
+ {"matrix": [1, 5], "x": 5.5, "y": 1},
+ {"matrix": [1, 6], "x": 6.5, "y": 1},
+ {"matrix": [1, 7], "x": 7.5, "y": 1},
+ {"matrix": [1, 8], "x": 8.5, "y": 1},
+ {"matrix": [1, 9], "x": 9.5, "y": 1},
+ {"matrix": [1, 10], "x": 10.5, "y": 1},
+ {"matrix": [1, 11], "x": 11.5, "y": 1},
+ {"matrix": [1, 12], "x": 12.5, "y": 1},
+
+ {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"matrix": [2, 1], "x": 1.75, "y": 2},
+ {"matrix": [2, 2], "x": 2.75, "y": 2},
+ {"matrix": [2, 3], "x": 3.75, "y": 2},
+ {"matrix": [2, 4], "x": 4.75, "y": 2},
+ {"matrix": [2, 5], "x": 5.75, "y": 2},
+ {"matrix": [2, 6], "x": 6.75, "y": 2},
+ {"matrix": [2, 7], "x": 7.75, "y": 2},
+ {"matrix": [2, 8], "x": 8.75, "y": 2},
+ {"matrix": [2, 9], "x": 9.75, "y": 2},
+ {"matrix": [2, 10], "x": 10.75, "y": 2},
+ {"matrix": [2, 11], "x": 11.75, "y": 2},
+ {"matrix": [2, 12], "x": 12.75, "y": 2},
+ {"matrix": [2, 13], "x": 13.75, "y": 1, "w": 1.25, "h": 2},
+
+ {"matrix": [3, 0], "x": 0, "y": 3, "w": 1.25},
+ {"matrix": [3, 1], "x": 1.25, "y": 3},
+ {"matrix": [3, 2], "x": 2.25, "y": 3},
+ {"matrix": [3, 3], "x": 3.25, "y": 3},
+ {"matrix": [3, 4], "x": 4.25, "y": 3},
+ {"matrix": [3, 5], "x": 5.25, "y": 3},
+ {"matrix": [3, 6], "x": 6.25, "y": 3},
+ {"matrix": [3, 7], "x": 7.25, "y": 3},
+ {"matrix": [3, 8], "x": 8.25, "y": 3},
+ {"matrix": [3, 9], "x": 9.25, "y": 3},
+ {"matrix": [3, 10], "x": 10.25, "y": 3},
+ {"matrix": [3, 11], "x": 11.25, "y": 3},
+ {"matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75},
+ {"matrix": [3, 13], "x": 14, "y": 3},
+
+ {"matrix": [4, 0], "x": 0, "y": 4, "w": 1.5},
+ {"matrix": [4, 1], "x": 1.5, "y": 4},
+ {"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.5},
+ {"matrix": [4, 6], "x": 4, "y": 4, "w": 7},
+ {"matrix": [4, 11], "x": 11, "y": 4, "w": 1.5},
+ {"matrix": [4, 12], "x": 12.5, "y": 4},
+ {"matrix": [4, 13], "x": 13.5, "y": 4, "w": 1.5}
+ ]
+ },
+ "LAYOUT_60_iso_tsangan_split_bs_rshift": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10, "y": 0},
+ {"matrix": [0, 11], "x": 11, "y": 0},
+ {"matrix": [0, 12], "x": 12, "y": 0},
+ {"matrix": [0, 13], "x": 13, "y": 0},
+ {"matrix": [1, 13], "x": 14, "y": 0},
+
+ {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"matrix": [1, 1], "x": 1.5, "y": 1},
+ {"matrix": [1, 2], "x": 2.5, "y": 1},
+ {"matrix": [1, 3], "x": 3.5, "y": 1},
+ {"matrix": [1, 4], "x": 4.5, "y": 1},
+ {"matrix": [1, 5], "x": 5.5, "y": 1},
+ {"matrix": [1, 6], "x": 6.5, "y": 1},
+ {"matrix": [1, 7], "x": 7.5, "y": 1},
+ {"matrix": [1, 8], "x": 8.5, "y": 1},
+ {"matrix": [1, 9], "x": 9.5, "y": 1},
+ {"matrix": [1, 10], "x": 10.5, "y": 1},
+ {"matrix": [1, 11], "x": 11.5, "y": 1},
+ {"matrix": [1, 12], "x": 12.5, "y": 1},
+
+ {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"matrix": [2, 1], "x": 1.75, "y": 2},
+ {"matrix": [2, 2], "x": 2.75, "y": 2},
+ {"matrix": [2, 3], "x": 3.75, "y": 2},
+ {"matrix": [2, 4], "x": 4.75, "y": 2},
+ {"matrix": [2, 5], "x": 5.75, "y": 2},
+ {"matrix": [2, 6], "x": 6.75, "y": 2},
+ {"matrix": [2, 7], "x": 7.75, "y": 2},
+ {"matrix": [2, 8], "x": 8.75, "y": 2},
+ {"matrix": [2, 9], "x": 9.75, "y": 2},
+ {"matrix": [2, 10], "x": 10.75, "y": 2},
+ {"matrix": [2, 11], "x": 11.75, "y": 2},
+ {"matrix": [2, 12], "x": 12.75, "y": 2},
+ {"matrix": [2, 13], "x": 13.75, "y": 1, "w": 1.25, "h": 2},
+
+ {"matrix": [3, 0], "x": 0, "y": 3, "w": 1.25},
+ {"matrix": [3, 1], "x": 1.25, "y": 3},
+ {"matrix": [3, 2], "x": 2.25, "y": 3},
+ {"matrix": [3, 3], "x": 3.25, "y": 3},
+ {"matrix": [3, 4], "x": 4.25, "y": 3},
+ {"matrix": [3, 5], "x": 5.25, "y": 3},
+ {"matrix": [3, 6], "x": 6.25, "y": 3},
+ {"matrix": [3, 7], "x": 7.25, "y": 3},
+ {"matrix": [3, 8], "x": 8.25, "y": 3},
+ {"matrix": [3, 9], "x": 9.25, "y": 3},
+ {"matrix": [3, 10], "x": 10.25, "y": 3},
+ {"matrix": [3, 11], "x": 11.25, "y": 3},
+ {"matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75},
+ {"matrix": [3, 13], "x": 14, "y": 3},
+
+ {"matrix": [4, 0], "x": 0, "y": 4, "w": 1.5},
+ {"matrix": [4, 1], "x": 1.5, "y": 4},
+ {"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.5},
+ {"matrix": [4, 6], "x": 4, "y": 4, "w": 7},
+ {"matrix": [4, 11], "x": 11, "y": 4, "w": 1.5},
+ {"matrix": [4, 12], "x": 12.5, "y": 4},
+ {"matrix": [4, 13], "x": 13.5, "y": 4, "w": 1.5}
+ ]
+ },
+ "LAYOUT_60_iso_wkl_split_rshift": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10, "y": 0},
+ {"matrix": [0, 11], "x": 11, "y": 0},
+ {"matrix": [0, 12], "x": 12, "y": 0},
+ {"matrix": [1, 13], "x": 13, "y": 0, "w": 2},
+
+ {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"matrix": [1, 1], "x": 1.5, "y": 1},
+ {"matrix": [1, 2], "x": 2.5, "y": 1},
+ {"matrix": [1, 3], "x": 3.5, "y": 1},
+ {"matrix": [1, 4], "x": 4.5, "y": 1},
+ {"matrix": [1, 5], "x": 5.5, "y": 1},
+ {"matrix": [1, 6], "x": 6.5, "y": 1},
+ {"matrix": [1, 7], "x": 7.5, "y": 1},
+ {"matrix": [1, 8], "x": 8.5, "y": 1},
+ {"matrix": [1, 9], "x": 9.5, "y": 1},
+ {"matrix": [1, 10], "x": 10.5, "y": 1},
+ {"matrix": [1, 11], "x": 11.5, "y": 1},
+ {"matrix": [1, 12], "x": 12.5, "y": 1},
+
+ {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"matrix": [2, 1], "x": 1.75, "y": 2},
+ {"matrix": [2, 2], "x": 2.75, "y": 2},
+ {"matrix": [2, 3], "x": 3.75, "y": 2},
+ {"matrix": [2, 4], "x": 4.75, "y": 2},
+ {"matrix": [2, 5], "x": 5.75, "y": 2},
+ {"matrix": [2, 6], "x": 6.75, "y": 2},
+ {"matrix": [2, 7], "x": 7.75, "y": 2},
+ {"matrix": [2, 8], "x": 8.75, "y": 2},
+ {"matrix": [2, 9], "x": 9.75, "y": 2},
+ {"matrix": [2, 10], "x": 10.75, "y": 2},
+ {"matrix": [2, 11], "x": 11.75, "y": 2},
+ {"matrix": [2, 12], "x": 12.75, "y": 2},
+ {"matrix": [2, 13], "x": 13.75, "y": 1, "w": 1.25, "h": 2},
+
+ {"matrix": [3, 0], "x": 0, "y": 3, "w": 1.25},
+ {"matrix": [3, 1], "x": 1.25, "y": 3},
+ {"matrix": [3, 2], "x": 2.25, "y": 3},
+ {"matrix": [3, 3], "x": 3.25, "y": 3},
+ {"matrix": [3, 4], "x": 4.25, "y": 3},
+ {"matrix": [3, 5], "x": 5.25, "y": 3},
+ {"matrix": [3, 6], "x": 6.25, "y": 3},
+ {"matrix": [3, 7], "x": 7.25, "y": 3},
+ {"matrix": [3, 8], "x": 8.25, "y": 3},
+ {"matrix": [3, 9], "x": 9.25, "y": 3},
+ {"matrix": [3, 10], "x": 10.25, "y": 3},
+ {"matrix": [3, 11], "x": 11.25, "y": 3},
+ {"matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75},
+ {"matrix": [3, 13], "x": 14, "y": 3},
+
+ {"matrix": [4, 0], "x": 0, "y": 4, "w": 1.5},
+ {"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.5},
+ {"matrix": [4, 6], "x": 4, "y": 4, "w": 7},
+ {"matrix": [4, 11], "x": 11, "y": 4, "w": 1.5},
+ {"matrix": [4, 13], "x": 13.5, "y": 4, "w": 1.5}
+ ]
+ },
+ "LAYOUT_60_iso_wkl_split_bs_rshift": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10, "y": 0},
+ {"matrix": [0, 11], "x": 11, "y": 0},
+ {"matrix": [0, 12], "x": 12, "y": 0},
+ {"matrix": [0, 13], "x": 13, "y": 0},
+ {"matrix": [1, 13], "x": 14, "y": 0},
+
+ {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"matrix": [1, 1], "x": 1.5, "y": 1},
+ {"matrix": [1, 2], "x": 2.5, "y": 1},
+ {"matrix": [1, 3], "x": 3.5, "y": 1},
+ {"matrix": [1, 4], "x": 4.5, "y": 1},
+ {"matrix": [1, 5], "x": 5.5, "y": 1},
+ {"matrix": [1, 6], "x": 6.5, "y": 1},
+ {"matrix": [1, 7], "x": 7.5, "y": 1},
+ {"matrix": [1, 8], "x": 8.5, "y": 1},
+ {"matrix": [1, 9], "x": 9.5, "y": 1},
+ {"matrix": [1, 10], "x": 10.5, "y": 1},
+ {"matrix": [1, 11], "x": 11.5, "y": 1},
+ {"matrix": [1, 12], "x": 12.5, "y": 1},
+
+ {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"matrix": [2, 1], "x": 1.75, "y": 2},
+ {"matrix": [2, 2], "x": 2.75, "y": 2},
+ {"matrix": [2, 3], "x": 3.75, "y": 2},
+ {"matrix": [2, 4], "x": 4.75, "y": 2},
+ {"matrix": [2, 5], "x": 5.75, "y": 2},
+ {"matrix": [2, 6], "x": 6.75, "y": 2},
+ {"matrix": [2, 7], "x": 7.75, "y": 2},
+ {"matrix": [2, 8], "x": 8.75, "y": 2},
+ {"matrix": [2, 9], "x": 9.75, "y": 2},
+ {"matrix": [2, 10], "x": 10.75, "y": 2},
+ {"matrix": [2, 11], "x": 11.75, "y": 2},
+ {"matrix": [2, 12], "x": 12.75, "y": 2},
+ {"matrix": [2, 13], "x": 13.75, "y": 1, "w": 1.25, "h": 2},
+
+ {"matrix": [3, 0], "x": 0, "y": 3, "w": 1.25},
+ {"matrix": [3, 1], "x": 1.25, "y": 3},
+ {"matrix": [3, 2], "x": 2.25, "y": 3},
+ {"matrix": [3, 3], "x": 3.25, "y": 3},
+ {"matrix": [3, 4], "x": 4.25, "y": 3},
+ {"matrix": [3, 5], "x": 5.25, "y": 3},
+ {"matrix": [3, 6], "x": 6.25, "y": 3},
+ {"matrix": [3, 7], "x": 7.25, "y": 3},
+ {"matrix": [3, 8], "x": 8.25, "y": 3},
+ {"matrix": [3, 9], "x": 9.25, "y": 3},
+ {"matrix": [3, 10], "x": 10.25, "y": 3},
+ {"matrix": [3, 11], "x": 11.25, "y": 3},
+ {"matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75},
+ {"matrix": [3, 13], "x": 14, "y": 3},
+
+ {"matrix": [4, 0], "x": 0, "y": 4, "w": 1.5},
+ {"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.5},
+ {"matrix": [4, 6], "x": 4, "y": 4, "w": 7},
+ {"matrix": [4, 11], "x": 11, "y": 4, "w": 1.5},
+ {"matrix": [4, 13], "x": 13.5, "y": 4, "w": 1.5}
+ ]
+ }
+ }
+}
diff --git a/keyboards/4pplet/waffling60/rev_e_iso/keymaps/default/keymap.c b/keyboards/4pplet/waffling60/rev_e_iso/keymaps/default/keymap.c
new file mode 100644
index 000000000000..545e1e974fb1
--- /dev/null
+++ b/keyboards/4pplet/waffling60/rev_e_iso/keymaps/default/keymap.c
@@ -0,0 +1,40 @@
+/*
+Copyright 2023 Stefan Sundin "4pplet" <4pplet@protonmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+// main layer
+[0] = LAYOUT_all(
+ 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_NO, KC_BSPC,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC,
+ KC_CAPS, 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, MO(1),
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_SPC, KC_RALT, KC_RGUI, KC_RCTL),
+// basic function layer
+[1] = LAYOUT_all(
+ QK_BOOT, 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_DEL,
+ KC_TRNS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_LEFT, KC_DOWN, KC_RIGHT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_NUHS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS)
+};
+#if defined(ENCODER_MAP_ENABLE)
+const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
+ [0] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
+ [1] = { ENCODER_CCW_CW(KC_BRID, KC_BRIU) }
+};
+#endif
diff --git a/keyboards/4pplet/waffling60/rev_e_iso/keymaps/default/rules.mk b/keyboards/4pplet/waffling60/rev_e_iso/keymaps/default/rules.mk
new file mode 100644
index 000000000000..ee325681483f
--- /dev/null
+++ b/keyboards/4pplet/waffling60/rev_e_iso/keymaps/default/rules.mk
@@ -0,0 +1 @@
+ENCODER_MAP_ENABLE = yes
diff --git a/keyboards/4pplet/waffling60/rev_e_iso/keymaps/via/keymap.c b/keyboards/4pplet/waffling60/rev_e_iso/keymaps/via/keymap.c
new file mode 100644
index 000000000000..3254764a0c51
--- /dev/null
+++ b/keyboards/4pplet/waffling60/rev_e_iso/keymaps/via/keymap.c
@@ -0,0 +1,41 @@
+/*
+Copyright 2023 Stefan Sundin "4pplet" <4pplet@protonmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+// main layer
+[0] = LAYOUT_all(
+ 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_BSPC,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC,
+ KC_CAPS, 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, MO(1),
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_SPC, KC_RALT, KC_RGUI, KC_RCTL),
+// basic function layer
+[1] = LAYOUT_all(
+ QK_BOOT, 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_DEL,
+ KC_TRNS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_LEFT, KC_DOWN, KC_RIGHT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+};
+
+#if defined(ENCODER_MAP_ENABLE)
+const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
+ [0] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
+ [1] = { ENCODER_CCW_CW(KC_BRID, KC_BRIU) }
+};
+#endif
diff --git a/keyboards/keychron/q1/ansi_encoder/keymaps/via/rules.mk b/keyboards/4pplet/waffling60/rev_e_iso/keymaps/via/rules.mk
similarity index 100%
rename from keyboards/keychron/q1/ansi_encoder/keymaps/via/rules.mk
rename to keyboards/4pplet/waffling60/rev_e_iso/keymaps/via/rules.mk
diff --git a/keyboards/4pplet/waffling60/rev_e_iso/matrix_diagram.md b/keyboards/4pplet/waffling60/rev_e_iso/matrix_diagram.md
new file mode 100644
index 000000000000..9ccedf98e30e
--- /dev/null
+++ b/keyboards/4pplet/waffling60/rev_e_iso/matrix_diagram.md
@@ -0,0 +1,24 @@
+# Matrix Diagram for 4pplet Waffling60 Rev E ISO
+
+```
+ ┌───────┐
+ 2u Backspace │1D │
+ └───────┘
+┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
+│00 │01 │02 │03 │04 │05 │06 │07 │08 │09 │0A │0B │0C │0D │1D │
+├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤
+│10 │11 │12 │13 │14 │15 │16 │17 │18 │19 │1A │1B │1C │ │
+├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐2D │
+│20 │21 │22 │23 │24 │25 │26 │27 │28 │29 │2A │2B │2C │ │
+├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴┬───┤
+│30 │31 │32 │33 │34 │35 │36 │37 │38 │39 │3A │3B │3C │3D │
+├────┴┬──┴┬──┴──┬┴───┴───┴──┬┴──┬┴───┴───┴──┬┴───┴┬───┬─┴───┤
+│40 │41 │42 │44 │46 │48 │4B │4C │4D │
+└─────┴───┴─────┴───────────┴───┴───────────┴─────┴───┴─────┘
+┌─────┬───┬─────┬───────────────────────────┬─────┬───┬─────┐
+│40 │41 │42 │46 │4B │4C │4D │ Tsangan/WKL/HHKB
+└─────┴───┴─────┴───────────────────────────┴─────┴───┴─────┘
+┌─────┬───┬───────────────────────────────────────┬───┬─────┐
+│40 │41 │46 │4C │4D │ 10u Spacebar
+└─────┴───┴───────────────────────────────────────┴───┴─────┘
+```
\ No newline at end of file
diff --git a/keyboards/4pplet/waffling60/rev_e_iso/readme.md b/keyboards/4pplet/waffling60/rev_e_iso/readme.md
new file mode 100644
index 000000000000..03fa4889c62b
--- /dev/null
+++ b/keyboards/4pplet/waffling60/rev_e_iso/readme.md
@@ -0,0 +1,26 @@
+# waffling60 Rev. E ISO
+
+A 60% PCB for MX switches, one hot swap and one solder-pcb version with decent layout support. Revision E adds underglow and rotary encoder support.
+
+More info: https://github.com/4pplet/waffling60
+
+* Keyboard Maintainer: [4pplet](https://github.com/4pplet)
+* Hardware Supported: [waffling60](https://github.com/4pplet/waffling60)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make 4pplet/waffling60/rev_e_iso:default
+
+Flashing example for this keyboard:
+
+ make 4pplet/waffling60/rev_e_iso:default:flash
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+## Bootloader
+
+How to enter bootloader (DFU):
+* Short the reset-header (labled BL/RESET) on the back of the PCB for about 2 seconds for the keyboard to enter DFU. When in DFU, it's ready to flash the firmware. If using a APM MCU it will not automatically reset after flash. Simply short the reset-header for a very short time to just reset the PCB, alternatively unplug and repluck the USB-cable to the keyboard.
+
+Alternative option if the firmware is already pre-flashed:
+* Unplug your keyboard, hold down the Spacebar and B at the same time, plug in your keyboard and wait a second before releasing the keys. The keyboard will enter DFU and is ready to flash the firmware.
diff --git a/keyboards/4pplet/waffling60/rev_e_iso/rules.mk b/keyboards/4pplet/waffling60/rev_e_iso/rules.mk
new file mode 100644
index 000000000000..04fe1eba2acd
--- /dev/null
+++ b/keyboards/4pplet/waffling60/rev_e_iso/rules.mk
@@ -0,0 +1,2 @@
+# Wildcard to allow APM32 MCU
+DFU_SUFFIX_ARGS = -p FFFF -v FFFF
diff --git a/keyboards/7c8/framework/keymaps/steven/config.h b/keyboards/7c8/framework/keymaps/steven/config.h
deleted file mode 100644
index 2dfd41f7cf86..000000000000
--- a/keyboards/7c8/framework/keymaps/steven/config.h
+++ /dev/null
@@ -1,23 +0,0 @@
-/* Copyright 2020 Steven Nguyen
- *
- * 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 .
- */
-
-/* VIA specific defines to increase dynamic layer count */
-#define VIA_EEPROM_LAYOUT_OPTIONS_SIZE 3
-#define DYNAMIC_KEYMAP_LAYER_COUNT 5
-
-/* defining an extra row for encoder assignment in VIA */
-#undef MATRIX_ROWS
-#define MATRIX_ROWS 11
\ No newline at end of file
diff --git a/keyboards/7c8/framework/keymaps/steven/keymap.c b/keyboards/7c8/framework/keymaps/steven/keymap.c
deleted file mode 100644
index 5cba63e0facc..000000000000
--- a/keyboards/7c8/framework/keymaps/steven/keymap.c
+++ /dev/null
@@ -1,123 +0,0 @@
-/* Copyright 2020 Steven Nguyen
- *
- * 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 .
- */
-
-#include QMK_KEYBOARD_H
-
-enum framework_layers {
- _BASE,
- _LOWER,
- _RAISE,
- _BOTH,
- _FN
-};
-
-enum framework_keycodes {
- LOWER = SAFE_RANGE,
- RAISE,
- BOTH,
- FN
-};
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-[_BASE] = framework_via(
- KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MEDIA_PLAY_PAUSE,
- KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
- KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
- KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT,
- KC_LCTL, KC_LGUI, KC_LALT, MO(_FN), MO(_LOWER), KC_SPC, KC_SPC, MO(_RAISE), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT,
- KC_AUDIO_VOL_DOWN, KC_AUDIO_VOL_UP
-),
-
-[_LOWER] = framework_via(
- _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MINS, KC_EQL, _______,
- QK_LEAD, KC_F1, KC_F2, KC_F3, KC_F4, _______, _______, _______, _______, KC_LBRC, KC_RBRC, KC_BSLS,
- KC_DEL, KC_F5, KC_F6, KC_F7, KC_F8, _______, _______, _______, _______, _______, _______, _______,
- _______, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, MO(_BOTH), KC_HOME, KC_PGDN, KC_PGUP, KC_END,
- C(S(KC_TAB)), C(KC_TAB)
-),
-
-[_RAISE] = framework_via(
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, MO(_BOTH), _______, _______, _______, _______, _______, _______, _______,
- C(KC_LEFT), C(KC_RIGHT)
-),
-
-[_BOTH] = framework_via(
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, EE_CLR, DB_TOGG,
- C(KC_Z), C(KC_Y)
-),
-
-[_FN] = framework_via(
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- KC_MS_WH_LEFT, KC_MS_WH_RIGHT
-)
-};
-
-void leader_end_user(void) {
- // qq, alt+f4 close window
- if (leader_sequence_two_keys(KC_Q, KC_Q)) {
- tap_code16(A(KC_F4));
- }
-
- // ee, open explorer
- if (leader_sequence_two_keys(KC_E, KC_E)) {
- tap_code16(G(KC_E));
- }
-
- // rr, windows run prompt
- if (leader_sequence_two_keys(KC_R, KC_R)) {
- tap_code16(G(KC_R));
- }
-
- // ww, maximize window
- if (leader_sequence_two_keys(KC_W, KC_W)) {
- tap_code16(G(KC_UP));
- }
-
- // ss, minimize window
- if (leader_sequence_two_keys(KC_S, KC_S)) {
- tap_code16(G(KC_DOWN));
- }
-
- // , toggle desktop
- if (leader_sequence_two_keys(KC_SPC, KC_SPC)) {
- tap_code16(G(KC_D));
- }
-}
-
-bool encoder_update_user(uint8_t index, bool clockwise) {
- uint8_t layer = get_highest_layer(layer_state);
- if (index == 0) {
- if (clockwise) {
- tap_code16(dynamic_keymap_get_keycode(layer, 10, 1));
- } else {
- tap_code16(dynamic_keymap_get_keycode(layer, 10, 0));
- }
- }
- return true;
-}
diff --git a/keyboards/7c8/framework/keymaps/steven/readme.md b/keyboards/7c8/framework/keymaps/steven/readme.md
deleted file mode 100644
index c300961c7fe0..000000000000
--- a/keyboards/7c8/framework/keymaps/steven/readme.md
+++ /dev/null
@@ -1,3 +0,0 @@
-# Steven's Framework layout
-
-This is a VIA compatible layout, exactly like the default VIA keymap, but with some leader key sequences that I find convenient.
\ No newline at end of file
diff --git a/keyboards/9key/keymaps/bcat/keymap.c b/keyboards/9key/keymaps/bcat/keymap.c
deleted file mode 100644
index 5a9ba1a88e0f..000000000000
--- a/keyboards/9key/keymaps/bcat/keymap.c
+++ /dev/null
@@ -1,39 +0,0 @@
-/* Copyright 2021 Jonathan Rascher
- *
- * 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 .
- */
-
-#include QMK_KEYBOARD_H
-
-#include "bcat.h"
-
-#define KY_LOCK LGUI(KC_L) /* Chrome OS: Lock screen */
-#define KY_MICM LSG(KC_1) /* Meet Shortcuts: Mute mic */
-#define KY_MICU LSG(KC_2) /* Meet Shortcuts: Unmute mic */
-#define KY_RHAND LSG(KC_3) /* Meet Shortcuts: Raise/lower hand */
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- // clang-format off
- [LAYER_DEFAULT] = LAYOUT(
- KC_MPLY, KC_VOLU, KY_RHAND,
- KY_LOCK, KC_VOLD, KY_MICU,
- LY_FN1, KC_MUTE, KY_MICM
- ),
- [LAYER_FUNCTION_1] = LAYOUT(
- EE_CLR, _______, QK_BOOT,
- _______, _______, _______,
- _______, _______, _______
- ),
- // clang-format on
-};
diff --git a/keyboards/9key/keymaps/bcat/readme.md b/keyboards/9key/keymaps/bcat/readme.md
deleted file mode 100644
index d38ae5463b9b..000000000000
--- a/keyboards/9key/keymaps/bcat/readme.md
+++ /dev/null
@@ -1,5 +0,0 @@
-# bcat's 9-Key layout
-
-This is a super simple PCB-mount macropad with nine keys, used on my
-work-from-home Chromebox for media/volume control and to activate some global
-shortcuts for Google Meet.
diff --git a/keyboards/9key/keymaps/tap_dance/keymap.c b/keyboards/9key/keymaps/tap_dance/keymap.c
deleted file mode 100644
index d8b2945dc5e3..000000000000
--- a/keyboards/9key/keymaps/tap_dance/keymap.c
+++ /dev/null
@@ -1,69 +0,0 @@
-#include QMK_KEYBOARD_H
-
-// Tap Dance Declarations
-enum tap_dances {
- ENT_5 = 0,
- ZERO_7,
-};
-
-// Macro Declarations
-enum custom_keycodes {
- DBL_0 = SAFE_RANGE,
-};
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-
-/* LAYER 0
- * ,-----------------------.
- * | 1 | 2 | 3 |
- * |-------+-------+-------|
- * | 4 | 5/ENT | 6 | Dbl Tap 5 for Enter
- * |-------+-------+-------|
- * | 7/0 | 8 | 9/FN | 7/0 = Dbl Tap 7 for 0 - 9/FN = Hold 9 for FN
- * `-----------------------'
- */
-[0] = LAYOUT(
- KC_1, KC_2, KC_3,
- KC_4, TD(ENT_5), KC_6,
- TD(ZERO_7), KC_8, LT(1, KC_9)
-),
-
-/* LAYER 1
- * ,-----------------------.
- * | ESC | + | - |
- * |-------+-------+-------|
- * | BSPC | * | / |
- * |-------+-------+-------|
- * | 00 | . | |
- * `-----------------------'
- */
-[1] = LAYOUT(
- KC_ESC, KC_PLUS, KC_MINS,
- KC_BSPC, KC_ASTR, KC_SLSH,
- DBL_0, KC_DOT, KC_TRNS
-)
-
-};
-
-tap_dance_action_t tap_dance_actions[] = {
- [ENT_5] = ACTION_TAP_DANCE_DOUBLE(KC_5, KC_ENT),
- [ZERO_7] = ACTION_TAP_DANCE_DOUBLE(KC_7, KC_0)
-};
-
-bool process_record_user(uint16_t keycode, keyrecord_t *record) {
- switch (keycode) {
- case DBL_0:
- if (record->event.pressed) {
- // when keycode QMKBEST is pressed
- tap_code(KC_P0);
- tap_code(KC_P0);
- }
- break;
-
- }
- return true;
-};
-
-
-void matrix_init_user(void) {
-}
diff --git a/keyboards/9key/keymaps/tap_dance/rules.mk b/keyboards/9key/keymaps/tap_dance/rules.mk
deleted file mode 100644
index e5ddcae8d927..000000000000
--- a/keyboards/9key/keymaps/tap_dance/rules.mk
+++ /dev/null
@@ -1 +0,0 @@
-TAP_DANCE_ENABLE = yes
diff --git a/keyboards/a_dux/keymaps/daliusd/config.h b/keyboards/a_dux/keymaps/daliusd/config.h
deleted file mode 100644
index 78a96dd7acdb..000000000000
--- a/keyboards/a_dux/keymaps/daliusd/config.h
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
-Copyright 2021 Dalius Dobravolskas
-
-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 .
-*/
-
-#pragma once
-
-#define UNICODE_SELECTED_MODES UNICODE_MODE_LINUX
-
-#define MOUSEKEY_INTERVAL 12
-#define MOUSEKEY_MAX_SPEED 6
-#define MOUSEKEY_TIME_TO_MAX 50
-
-#define MOUSEKEY_DELAY 20
-// It makes sense to use the same delay for the mouseweel
-#define MOUSEKEY_WHEEL_DELAY 100
-// The default is 100
-#define MOUSEKEY_WHEEL_INTERVAL 50
-// The default is 40
-#define MOUSEKEY_WHEEL_TIME_TO_MAX 100
-
-#define FLOW_COUNT 6
-#define FLOW_LAYERS_COUNT 5
diff --git a/keyboards/a_dux/keymaps/daliusd/flow.c b/keyboards/a_dux/keymaps/daliusd/flow.c
deleted file mode 100644
index 6e4db873fe31..000000000000
--- a/keyboards/a_dux/keymaps/daliusd/flow.c
+++ /dev/null
@@ -1,336 +0,0 @@
-/* Copyright 2022 @daliusd
- *
- * 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 .
- */
-#include "flow.h"
-
-extern const uint16_t flow_config[FLOW_COUNT][2];
-extern const uint16_t flow_layers_config[FLOW_LAYERS_COUNT][2];
-
-// Represents the states a flow key can be in
-typedef enum {
- flow_up_unqueued,
- flow_up_queued,
- flow_up_queued_used,
- flow_down_unused,
- flow_down_used,
-} flow_state_t;
-
-#ifdef FLOW_ONESHOT_TERM
-const int g_flow_oneshot_term = FLOW_ONESHOT_TERM;
-#else
-const int g_flow_oneshot_term = 500;
-#endif
-
-#ifdef FLOW_ONESHOT_WAIT_TERM
-const int g_flow_oneshot_wait_term = FLOW_ONESHOT_WAIT_TERM;
-#else
-const int g_flow_oneshot_wait_term = 500;
-#endif
-
-flow_state_t flow_state[FLOW_COUNT] = { [0 ... FLOW_COUNT - 1] = flow_up_unqueued };
-bool flow_pressed[FLOW_COUNT][2] = { [0 ... FLOW_COUNT - 1] = {false, false} };
-uint16_t flow_timers[FLOW_COUNT] = { [0 ... FLOW_COUNT - 1] = 0 };
-bool flow_timeout_timers_active[FLOW_COUNT] = { [0 ... FLOW_COUNT - 1] = false };
-uint16_t flow_timeout_timers_value[FLOW_COUNT] = { [0 ... FLOW_COUNT - 1] = 0 };
-uint16_t flow_timeout_wait_timers_value[FLOW_COUNT] = { [0 ... FLOW_COUNT - 1] = 0 };
-
-flow_state_t flow_layers_state[FLOW_LAYERS_COUNT] = {
- [0 ... FLOW_LAYERS_COUNT - 1] = flow_up_unqueued
-};
-bool flow_layer_timeout_timers_active[FLOW_LAYERS_COUNT] = { [0 ... FLOW_LAYERS_COUNT - 1] = false };
-uint16_t flow_layer_timeout_timers_value[FLOW_LAYERS_COUNT] = { [0 ... FLOW_LAYERS_COUNT - 1] = 0 };
-uint16_t flow_layer_timeout_wait_timers_value[FLOW_LAYERS_COUNT] = { [0 ... FLOW_LAYERS_COUNT - 1] = 0 };
-
-bool is_flow_ignored_key(uint16_t keycode) {
- for (int i = 0; i < FLOW_COUNT; i++) {
- if (flow_config[i][0] == keycode) {
- return true;
- }
- }
-
- for (int i = 0; i < FLOW_LAYERS_COUNT; i++) {
- if (flow_layers_config[i][0] == keycode) {
- return true;
- }
- }
-
- if (keycode == KC_LSFT || keycode == KC_RSFT
- || keycode == KC_LCTL || keycode == KC_RCTL
- || keycode == KC_LALT || keycode == KC_RALT
- || keycode == KC_LGUI || keycode == KC_RGUI) {
- return true;
- }
-
- return false;
-}
-
-bool update_flow_mods(
- uint16_t keycode,
- bool pressed
-) {
- bool pass = true;
- bool flow_key_list_triggered[FLOW_COUNT] = { [0 ... FLOW_COUNT - 1] = false };
- bool flow_key_list_pressed[FLOW_COUNT] = { [0 ... FLOW_COUNT - 1] = false };
-
- bool flow_triggered = false;
-
- for (uint8_t i = 0; i < FLOW_COUNT; i++) {
- // Layer key
- if (keycode == flow_config[i][0]) {
- if (pressed) {
- flow_pressed[i][0] = true;
- } else {
- flow_pressed[i][0] = false;
- }
- // KC mod key
- } else if (keycode == flow_config[i][1]) {
- if (pressed) {
- if (flow_pressed[i][0]) {
- flow_pressed[i][1] = true;
- flow_key_list_triggered[i] = true;
- flow_triggered = true;
- flow_key_list_pressed[i] = true;
- pass = false;
- }
- } else if (flow_pressed[i][1]) {
- flow_pressed[i][1] = false;
- if (flow_pressed[i][0]) {
- flow_key_list_triggered[i] = true;
- flow_triggered = true;
- pass = false;
- } else if ((flow_state[i] == flow_down_unused)
- || (flow_state[i] == flow_down_used)) {
- flow_key_list_triggered[i] = true;
- flow_triggered = true;
- pass = false;
- }
- }
- }
- }
-
- for (uint8_t i = 0; i < FLOW_COUNT; i++) {
- if (flow_key_list_triggered[i]) {
- if (flow_key_list_pressed[i]) {
- if (flow_state[i] == flow_up_unqueued) {
- register_code(flow_config[i][1]);
- }
- flow_timeout_wait_timers_value[i] = timer_read();
- flow_state[i] = flow_down_unused;
- } else {
- // Trigger keyup
- switch (flow_state[i]) {
- case flow_down_unused:
- if (!flow_pressed[i][1]) {
- if (timer_elapsed(flow_timeout_wait_timers_value[i]) > g_flow_oneshot_wait_term) {
- flow_state[i] = flow_up_unqueued;
- unregister_code(flow_config[i][1]);
- } else {
- // If we didn't use the mod while trigger was held, queue it.
- flow_state[i] = flow_up_queued;
- flow_timeout_timers_active[i] = true;
- flow_timeout_timers_value[i] = timer_read();
- }
- }
- break;
- case flow_down_used:
- // If we did use the mod while trigger was held, unregister it.
- if (!flow_pressed[i][1]) {
- flow_state[i] = flow_up_unqueued;
- unregister_code(flow_config[i][1]);
- }
- break;
- default:
- break;
- }
- }
- } else if (!flow_triggered) {
- if (pressed) {
- if (!is_flow_ignored_key(keycode)) {
- switch (flow_state[i]) {
- case flow_up_queued:
- flow_state[i] = flow_up_queued_used;
- flow_timeout_timers_active[i] = false;
- break;
- case flow_up_queued_used:
- flow_state[i] = flow_up_unqueued;
- unregister_code(flow_config[i][1]);
- break;
- default:
- break;
- }
- }
- } else {
- if (!is_flow_ignored_key(keycode)) {
- // On non-ignored keyup, consider the oneshot used.
- switch (flow_state[i]) {
- case flow_down_unused:
- flow_state[i] = flow_down_used;
- break;
- case flow_up_queued:
- flow_state[i] = flow_up_unqueued;
- unregister_code(flow_config[i][1]);
- break;
- case flow_up_queued_used:
- flow_state[i] = flow_up_unqueued;
- unregister_code(flow_config[i][1]);
- break;
- default:
- break;
- }
- }
- }
- }
- }
-
- return pass;
-}
-
-void change_pressed_status(uint16_t keycode, bool pressed) {
- for (int i = 0; i < FLOW_COUNT; i++) {
- if (flow_config[i][0] == keycode) {
- flow_pressed[i][0] = pressed;
- }
- }
-}
-
-bool update_flow_layers(
- uint16_t keycode,
- bool pressed,
- keypos_t key_position
-) {
- uint8_t key_layer = read_source_layers_cache(key_position);
- bool pass = true;
-
- for (int i = 0; i < FLOW_LAYERS_COUNT; i++) {
- uint16_t trigger = flow_layers_config[i][0];
- uint16_t layer = flow_layers_config[i][1];
-
- if (keycode == trigger) {
- if (pressed) {
- // Trigger keydown
- if (flow_layers_state[i] == flow_up_unqueued) {
- layer_on(layer);
- change_pressed_status(trigger, true);
- }
- flow_layer_timeout_wait_timers_value[i] = timer_read();
- flow_layers_state[i] = flow_down_unused;
- pass = false;
- } else {
- // Trigger keyup
- switch (flow_layers_state[i]) {
- case flow_down_unused:
- if (timer_elapsed(flow_layer_timeout_wait_timers_value[i]) > g_flow_oneshot_wait_term) {
- flow_layers_state[i] = flow_up_unqueued;
- layer_off(layer);
- change_pressed_status(trigger, false);
- pass = false;
- } else {
- // If we didn't use the layer while trigger was held, queue it.
- flow_layers_state[i] = flow_up_queued;
- flow_layer_timeout_timers_active[i] = true;
- flow_layer_timeout_timers_value[i] = timer_read();
- pass = false;
- change_pressed_status(trigger, true);
- }
- break;
- case flow_down_used:
- // If we did use the layer while trigger was held, turn off it.
- flow_layers_state[i] = flow_up_unqueued;
- layer_off(layer);
- change_pressed_status(trigger, false);
- pass = false;
- break;
- default:
- break;
- }
- }
- } else {
- if (pressed) {
- if (key_layer == layer) {
- // On non-ignored keyup, consider the oneshot used.
- switch (flow_layers_state[i]) {
- case flow_down_unused:
- flow_layers_state[i] = flow_down_used;
- break;
- case flow_up_queued:
- flow_layers_state[i] = flow_up_queued_used;
- flow_layer_timeout_timers_active[i] = false;
- break;
- case flow_up_queued_used:
- flow_layers_state[i] = flow_up_unqueued;
- layer_off(layer);
- change_pressed_status(trigger, false);
- pass = false;
- break;
- default:
- break;
- }
- }
- } else {
- // Ignore key ups from other layers
- if (key_layer == layer) {
- // On non-ignored keyup, consider the oneshot used.
- switch (flow_layers_state[i]) {
- case flow_up_queued:
- flow_layers_state[i] = flow_up_unqueued;
- layer_off(layer);
- change_pressed_status(trigger, false);
- break;
- case flow_up_queued_used:
- flow_layers_state[i] = flow_up_unqueued;
- layer_off(layer);
- change_pressed_status(trigger, false);
- break;
- default:
- break;
- }
- }
- }
- }
- }
-
- return pass;
-}
-
-bool update_flow(
- uint16_t keycode,
- bool pressed,
- keypos_t key_position
-) {
- bool pass = update_flow_mods(keycode, pressed);
- pass = update_flow_layers(keycode, pressed, key_position) & pass;
- return pass;
-}
-
-void flow_matrix_scan(void) {
- for (int i = 0; i < FLOW_COUNT; i++) {
- if (flow_timeout_timers_active[i]
- && timer_elapsed(flow_timeout_timers_value[i]) > g_flow_oneshot_term) {
- flow_timeout_timers_active[i] = false;
- flow_state[i] = flow_up_unqueued;
- unregister_code(flow_config[i][1]);
- }
- }
-
- for (int i = 0; i < FLOW_LAYERS_COUNT; i++) {
- if (flow_layer_timeout_timers_active[i]
- && timer_elapsed(flow_layer_timeout_timers_value[i]) > g_flow_oneshot_term) {
- flow_layer_timeout_timers_active[i] = false;
- flow_layers_state[i] = flow_up_unqueued;
- layer_off(flow_layers_config[i][1]);
- change_pressed_status(flow_layers_config[i][0], false);
- }
- }
-}
diff --git a/keyboards/a_dux/keymaps/daliusd/flow.h b/keyboards/a_dux/keymaps/daliusd/flow.h
deleted file mode 100644
index e9ac32c8ed9a..000000000000
--- a/keyboards/a_dux/keymaps/daliusd/flow.h
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
-Copyright 2022 Dalius Dobravolskas
-
-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 .
-*/
-#pragma once
-
-#include QMK_KEYBOARD_H
-
-bool update_flow(
- uint16_t keycode,
- bool pressed,
- keypos_t key_position
-);
-
-void flow_matrix_scan(void);
diff --git a/keyboards/a_dux/keymaps/daliusd/keymap.c b/keyboards/a_dux/keymaps/daliusd/keymap.c
deleted file mode 100644
index dcc41a36ee2c..000000000000
--- a/keyboards/a_dux/keymaps/daliusd/keymap.c
+++ /dev/null
@@ -1,334 +0,0 @@
-/* Copyright 2021 @daliusd
- *
- * 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 .
- */
-#include QMK_KEYBOARD_H
-
-#include "flow.h"
-
-// Each layer gets a name for readability, which is then used in the keymap matrix below.
-// The underscores don't mean anything - you can have a layer called STUFF or any other name.
-// Layer names don't all need to be of the same length, obviously, and you can also skip them
-// entirely and just use numbers.
-enum layers {
- _QWERTY,
- _SYM,
- _NAV,
- _MISC,
- _TMUX,
- _MOUSE,
- _FUNC,
- _LT_MAC,
- _LT_LINUX,
-};
-
-enum custom_keycodes {
- TM_NEXT = SAFE_RANGE,
- TM_PREV,
- TM_LEFT,
- TM_RIGHT,
- TM_NEW,
- TM_SLCT,
- TM_SRCH,
- TM_URL,
- OS_MISC,
- OS_TMUX,
- OS_FUNC,
- LT_OSLNX,
-};
-
-// Shortcut to make keymap more readable
-
-#define L_NAV MO(_NAV)
-#define L_SYM MO(_SYM)
-#define L_MOUSE MO(_MOUSE)
-
-#define K_PRINT (QK_LCTL | QK_LSFT | QK_LGUI | KC_4)
-#define K_VIDEO (QK_LSFT | QK_LGUI | KC_5)
-
-// flow_config should correspond to following format:
-// * layer keycode
-// * modifier keycode
-const uint16_t flow_config[FLOW_COUNT][2] = {
- {L_NAV, KC_LALT},
- {L_NAV, KC_LGUI},
- {L_NAV, KC_LCTL},
- {L_SYM, KC_RCTL},
- {L_SYM, KC_RGUI},
- {L_SYM, KC_RALT},
-};
-
-const uint16_t flow_layers_config[FLOW_LAYERS_COUNT][2] = {
- {OS_MISC, _MISC},
- {OS_TMUX, _TMUX},
- {OS_FUNC, _FUNC},
-};
-
-// Unicode characters
-enum unicode_names {
- SNEK,
- EURO,
- LT_S_A,
- LT_L_A,
- LT_S_C,
- LT_L_C,
- LT_S_E1,
- LT_L_E1,
- LT_S_E2,
- LT_L_E2,
- LT_S_I,
- LT_L_I,
- LT_S_S,
- LT_L_S,
- LT_S_U1,
- LT_L_U1,
- LT_S_U2,
- LT_L_U2,
- LT_S_Z,
- LT_L_Z,
- LT_OB,
- LT_CB,
-};
-
-const uint32_t unicode_map[] PROGMEM = {
- [SNEK] = 0x1F40D, // 🐍
- [EURO] = 0x20ac, // €
- [LT_S_A] = 0x105, // ą
- [LT_L_A] = 0x104, // Ą
- [LT_S_C] = 0x10d, // č
- [LT_L_C] = 0x10c, // Č
- [LT_S_E1] = 0x119, // ę
- [LT_L_E1] = 0x118, // Ę
- [LT_S_E2] = 0x117, // ė
- [LT_L_E2] = 0x116, // Ė
- [LT_S_I] = 0x12f, // į
- [LT_L_I] = 0x12e, // Į
- [LT_S_S] = 0x161, // š
- [LT_L_S] = 0x160, // Š
- [LT_S_U1] = 0x173, // ų
- [LT_L_U1] = 0x172, // Ų
- [LT_S_U2] = 0x16b, // ū
- [LT_L_U2] = 0x16a, // Ū
- [LT_S_Z] = 0x17e, // ž
- [LT_L_Z] = 0x17d, // Ž
- [LT_OB] = 0x201e, // „
- [LT_CB] = 0x201c, // “
-};
-
-#define K_SNEK UM(SNEK)
-#define K_EURO UM(EURO)
-#define K_LT_A UP(LT_S_A, LT_L_A)
-#define K_LT_AU UM(LT_L_A)
-#define K_LT_C UP(LT_S_C, LT_L_C)
-#define K_LT_CU UM(LT_L_C)
-#define K_LT_E1 UP(LT_S_E1, LT_L_E1)
-#define K_LT_E1U UM(LT_L_E1)
-#define K_LT_E2 UP(LT_S_E2, LT_L_E2)
-#define K_LT_E2U UM(LT_L_E2)
-#define K_LT_I UP(LT_S_I, LT_L_I)
-#define K_LT_IU UM(LT_L_I)
-#define K_LT_S UP(LT_S_S, LT_L_S)
-#define K_LT_SU UM(LT_L_S)
-#define K_LT_U1 UP(LT_S_U1, LT_L_U1)
-#define K_LT_U1U UM(LT_L_U1)
-#define K_LT_U2 UP(LT_S_U2, LT_L_U2)
-#define K_LT_U2U UM(LT_L_U2)
-#define K_LT_Z UP(LT_S_Z, LT_L_Z)
-#define K_LT_ZU UM(LT_L_Z)
-#define K_LT_OB UM(LT_OB)
-#define K_LT_CB UM(LT_CB)
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-
- [_QWERTY] = LAYOUT(
- //┌────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┐
- KC_Q ,KC_W ,KC_E ,KC_R ,KC_T, KC_Y ,KC_U ,KC_I ,KC_O ,KC_P ,
- //├────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┤
- KC_A ,KC_S ,KC_D ,KC_F ,KC_G , KC_H ,KC_J ,KC_K ,KC_L ,KC_SCLN ,
- //├────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┤
- KC_Z ,KC_X ,KC_C ,KC_V ,KC_B , KC_N ,KC_M ,KC_COMM ,KC_DOT ,KC_SLSH,
- //└────────┴────────┴────────┴────┬───┴────┬───┼────────┐ ┌────────┼───┬────┴───┬────┴────────┴────────┴────────┘
- L_NAV , KC_SPC , KC_LSFT , L_SYM
- // └────────┘ └────────┘ └────────┘ └────────┘
- ),
-
- [_SYM] = LAYOUT(
- //┌────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┐
- KC_EXLM ,KC_AT ,KC_HASH ,KC_DLR ,KC_PERC , KC_CIRC ,KC_AMPR ,KC_ASTR ,KC_LPRN ,KC_RPRN ,
- //├────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┤
- XXXXXXX ,KC_GRV ,KC_LBRC ,KC_RBRC ,KC_PLUS , KC_MINS ,KC_PIPE ,KC_RCTL ,KC_RGUI ,KC_RALT ,
- //├────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┤
- KC_DEL ,KC_BSPC ,KC_LCBR ,KC_RCBR ,KC_EQL , KC_UNDS ,KC_QUOT ,KC_DQT ,OS_MISC ,KC_BSLS ,
- //└────────┴────────┴────────┴────┬───┴────┬───┼────────┐ ┌────────┼───┬────┴───┬────┴────────┴────────┴────────┘
- _______ , _______ , _______ , XXXXXXX
- // └────────┘ └────────┘ └────────┘ └────────┘
- ),
-
- [_NAV] = LAYOUT(
- //┌────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┐
- KC_1 ,KC_2 ,KC_3 ,KC_4 ,KC_5 , KC_6 ,KC_7 ,KC_8 ,KC_9 ,KC_0 ,
- //├────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┤
- KC_LALT ,KC_LGUI ,KC_LCTL ,KC_TAB ,KC_ENT , KC_LEFT ,KC_DOWN ,KC_UP ,KC_RIGHT,KC_PGUP ,
- //├────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┤
- KC_LSFT ,KC_BSPC ,KC_ESC ,KC_TILDE,OS_TMUX , OS_FUNC ,L_MOUSE ,KC_COMM ,KC_DOT ,KC_PGDN ,
- //└────────┴────────┴────────┴────┬───┴────┬───┼────────┐ ┌────────┼───┬────┴───┬────┴────────┴────────┴────────┘
- XXXXXXX , _______ , _______ , _______
- // └────────┘ └────────┘ └────────┘ └────────┘
- ),
-
- [_MISC] = LAYOUT(
- //┌────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┐
- QK_BOOT ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX , KC_BRID ,KC_BRIU ,KC_PSCR ,XXXXXXX ,K_PRINT ,
- //├────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┤
- XXXXXXX ,XXXXXXX ,DB_TOGG ,LT_OSLNX,XXXXXXX , KC_MPRV ,KC_MPLY ,KC_MNXT ,XXXXXXX ,K_VIDEO ,
- //├────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┤
- XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX , KC_VOLD ,KC_VOLU ,XXXXXXX ,XXXXXXX ,XXXXXXX ,
- //└────────┴────────┴────────┴────┬───┴────┬───┼────────┐ ┌────────┼───┬────┴───┬────┴────────┴────────┴────────┘
- XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX
- // └────────┘ └────────┘ └────────┘ └────────┘
- ),
-
- [_TMUX] = LAYOUT(
- //┌────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┐
- XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX , XXXXXXX ,TM_URL ,XXXXXXX ,XXXXXXX ,XXXXXXX ,
- //├────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┤
- XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX , TM_LEFT ,TM_NEXT ,TM_PREV ,TM_RIGHT,XXXXXXX ,
- //├────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┤
- XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX , TM_NEW ,TM_SLCT ,XXXXXXX ,XXXXXXX ,TM_SRCH ,
- //└────────┴────────┴────────┴────┬───┴────┬───┼────────┐ ┌────────┼───┬────┴───┬────┴────────┴────────┴────────┘
- XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX
- // └────────┘ └────────┘ └────────┘ └────────┘
- ),
-
- [_MOUSE] = LAYOUT(
- //┌────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┐
- XXXXXXX ,XXXXXXX ,KC_MS_U ,KC_BTN3 ,KC_WH_U , XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,
- //├────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┤
- XXXXXXX ,KC_MS_L ,KC_MS_D ,KC_MS_R ,KC_WH_D , XXXXXXX ,XXXXXXX ,KC_RCTL ,KC_RGUI ,KC_RALT ,
- //├────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┤
- XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX , XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,
- //└────────┴────────┴────────┴────┬───┴────┬───┼────────┐ ┌────────┼───┬────┴───┬────┴────────┴────────┴────────┘
- KC_BTN1 , KC_BTN2 , _______ , XXXXXXX
- // └────────┘ └────────┘ └────────┘ └────────┘
- ),
-
- [_FUNC] = LAYOUT(
- //┌────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┐
- KC_F1 ,KC_F2 ,KC_F3 ,KC_F4 ,KC_F5 , XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,
- //├────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┤
- KC_F6 ,KC_F7 ,KC_F8 ,KC_F9 ,KC_F10 , XXXXXXX ,XXXXXXX ,KC_RCTL ,KC_RGUI ,KC_RALT ,
- //├────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┤
- KC_F11 ,KC_F12 ,XXXXXXX ,XXXXXXX ,XXXXXXX , XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,
- //└────────┴────────┴────────┴────┬───┴────┬───┼────────┐ ┌────────┼───┬────┴───┬────┴────────┴────────┴────────┘
- XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX
- // └────────┘ └────────┘ └────────┘ └────────┘
- ),
-
- [_LT_MAC] = LAYOUT(
- //┌────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┐
- KC_EXLM ,KC_AT ,KC_HASH ,KC_DLR ,KC_PERC , KC_CIRC ,KC_AMPR ,KC_ASTR ,KC_PLUS ,XXXXXXX ,
- //├────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┤
- KC_1 ,KC_2 ,KC_3 ,KC_4 ,KC_5 , KC_6 ,KC_7 ,KC_8 ,KC_EQL ,XXXXXXX ,
- //├────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┤
- XXXXXXX ,KC_BSPC ,XXXXXXX ,XXXXXXX ,XXXXXXX , XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,
- //└────────┴────────┴────────┴────┬───┴────┬───┼────────┐ ┌────────┼───┬────┴───┬────┴────────┴────────┴────────┘
- XXXXXXX , XXXXXXX , _______ , XXXXXXX
- // └────────┘ └────────┘ └────────┘ └────────┘
- ),
-
- [_LT_LINUX] = LAYOUT(
- //┌────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┐
- K_LT_AU ,K_LT_CU ,K_LT_E1U,K_LT_E2U,K_LT_IU , K_LT_SU ,K_LT_U1U,K_LT_U2U,K_LT_ZU ,XXXXXXX ,
- //├────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┤
- K_LT_A ,K_LT_C ,K_LT_E1 ,K_LT_E2 ,K_LT_I , K_LT_S ,K_LT_U1 ,K_LT_U2 ,K_LT_Z ,XXXXXXX ,
- //├────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┤
- XXXXXXX ,KC_BSPC ,XXXXXXX ,K_SNEK ,K_LT_OB , K_LT_CB ,K_EURO ,XXXXXXX ,XXXXXXX ,XXXXXXX ,
- //└────────┴────────┴────────┴────┬───┴────┬───┼────────┐ ┌────────┼───┬────┴───┬────┴────────┴────────┴────────┘
- XXXXXXX , XXXXXXX , _______ , XXXXXXX
- // └────────┘ └────────┘ └────────┘ └────────┘
- ),
-};
-
-#define TMUX_PREFIX SS_DOWN(X_LCTL) "b" SS_UP(X_LCTL)
-
-bool lt_os_is_linux = false;
-
-bool process_record_user(uint16_t keycode, keyrecord_t *record) {
- if (!update_flow(keycode, record->event.pressed, record->event.key)) return false;
-
- switch (keycode) {
- case TM_LEFT:
- if (!record->event.pressed) return true;
- SEND_STRING(TMUX_PREFIX "<");
- return false;
- case TM_RIGHT:
- if (!record->event.pressed) return true;
- SEND_STRING(TMUX_PREFIX ">");
- return false;
- case TM_NEXT:
- if (!record->event.pressed) return true;
- SEND_STRING(TMUX_PREFIX "n");
- return false;
- case TM_PREV:
- if (!record->event.pressed) return true;
- SEND_STRING(TMUX_PREFIX "p");
- return false;
- case TM_NEW:
- if (!record->event.pressed) return true;
- SEND_STRING(TMUX_PREFIX "c");
- return false;
- case TM_SLCT:
- if (!record->event.pressed) return true;
- SEND_STRING(TMUX_PREFIX "[");
- return false;
- case TM_SRCH:
- if (!record->event.pressed) return true;
- SEND_STRING(TMUX_PREFIX "\t");
- return false;
- case TM_URL:
- if (!record->event.pressed) return true;
- SEND_STRING(TMUX_PREFIX SS_LCTL("u"));
- return false;
- case LT_OSLNX:
- if (!record->event.pressed) return true;
- lt_os_is_linux = !lt_os_is_linux;
- return false;
- }
- return true;
-}
-
-void matrix_scan_user(void) {
- flow_matrix_scan();
-}
-
-bool lang_layer_on = false;
-
-layer_state_t layer_state_set_user(layer_state_t state) {
- state = update_tri_layer_state(state, _SYM, _NAV, lt_os_is_linux ? _LT_LINUX : _LT_MAC);
-
- uint8_t hl = get_highest_layer(state);
- if (hl == _LT_MAC) {
- if (!lang_layer_on) {
- tap_code16(LCTL(KC_SPC));
- lang_layer_on = true;
- }
- } else {
- if (lang_layer_on) {
- tap_code16(LCTL(KC_SPC));
- lang_layer_on = false;
- }
- }
-
- return state;
-}
diff --git a/keyboards/a_dux/keymaps/daliusd/readme.md b/keyboards/a_dux/keymaps/daliusd/readme.md
deleted file mode 100644
index fde19ee630c3..000000000000
--- a/keyboards/a_dux/keymaps/daliusd/readme.md
+++ /dev/null
@@ -1,306 +0,0 @@
-# My 34 keys layout
-
-This is my principles for layout:
-
-* I am using Callum style layout. Here you can read explanation by
- Callum himself and his reasoning for not using mod-tap:
- [here](../../../../users/callum/readme.md)
-
-* There should be only one way to type key. Key can be on
- different layer but it must maintain its physical location. I
- broke this rule for Shift key only.
-
-* The less features are used the better.
-
-* There is simple TMUX layer.
-
-* Common keys must be accessible using two keys if possible.
-
-* It should be possible to work with left keyboard side and mouse
- in right hand without lifting hands for some scenarios (that's
- why I had to duplicate Shift key).
-
-## Improvements over Callum
-
-* I have added one shot layers compatible with Callum's one shot
- keys.
-
-* There is one issue with accidental uppercase characters fixed
- that exists in original Callum layout's implementation.
-
-* Another annoying feature of Callum layer is one shot keys are
- frozen until you cancel them. This is problem when you use one
- hand for keyboard and another for mouse. E.g. you click Ctrl and
- mouse to get some menu (on Mac OS X), and then you want to click
- some item in that menu. You have to remember to cancel one shot in such
- situation. I have added two settings two handle situations like
- this:
-
- * `FLOW_ONESHOT_WAIT_TERM` - if hold one shot key longer than
- `FLOW_ONESHOT_WAIT_TERM` ms then mod key / layer key is not
- treated as one shot key (defaults to 500ms).
-
- * `FLOW_ONESHOT_TERM` - if you do not click another key in
- `FLOW_ONESHOT_TERM` ms then one shot key / layer key is treated
- as normal key. Therefore if you lift it after `FLOW_ONESHOT_TERM`
- it will not be treated as one shot (defaults to 500ms).
-
- After adding those two settings I have found out that I don't
- need one shot cancel key anymore so I have removed it.
-
-Since differences are significant I named this layout `flow`.
-
-## Using flow with your keyboard
-
-Copy `flow.c` and `flow.h` to keyboard folder.
-
-Add following line to `rules.mk`:
-
-```make
-SRC += flow.c
-```
-
-Define following in `config.h` for modifiers and layers:
-
-```c
-#define FLOW_COUNT 7
-#define FLOW_LAYERS_COUNT 3
-```
-
-In your `keymap.c` add and configure like this:
-
-```c
-#include "flow.h"
-
-...
-
-// flow_config should correspond to following format:
-// * layer keycode
-// * modifier keycode
-const uint16_t flow_config[FLOW_COUNT][2] = {
- {L_NAV, KC_LALT},
- {L_NAV, KC_LGUI},
- {L_NAV, KC_LCTL},
- {L_NAV, KC_LSFT},
- {L_SYM, KC_LCTL},
- {L_SYM, KC_LGUI},
- {L_SYM, KC_LALT},
-};
-
-
-// for layers configuration follow this format:
-// * custom layer key
-// * layer name
-const uint16_t flow_layers_config[FLOW_LAYERS_COUNT][2] = {
- {OS_TMUX, _TMUX},
- {OS_MISC, _MISC},
- {OS_FUNC, _FUNC},
-};
-
-...
-
-// Add following to handle flow
-
-bool process_record_user(uint16_t keycode, keyrecord_t *record) {
- if (!update_flow(keycode, record->event.pressed, record->event.key)) return false;
- return true;
-}
-
-void matrix_scan_user(void) {
- flow_matrix_scan();
-}
-
-```
-
-## Lithuanian letters
-
-There are at least two ways how to enter Lithuanian letters: to
-use Unicode support from QMK or to switch OS language when
-necessary. Unicode support has some problems:
-
-* it is OS specific (you need to change Unicode input mode based
- on your OS and I sometimes switch between Mac OS X and Ubuntu).
- This is minor issue but it is still issue.
-
-* There is bug in Mac OS X and I can't enter `Š` using unicode
- input method.
-
-* Unicode Hex Input in Mac OS X is not perfect and there are some
- minor issue while using it.
-
-On Linux Unicode support meanwhile works perfectly.
-
-This leaves us with other option to use OS language switching as
-you most probably have done before. Still there is space for
-improvement. E.g. I have added Lithuanian letters to trilayer and
-trilayer activation toggles OS language (this works because I use
-only two languages). Check `layer_state_set_user` implementation
-for details.
-
-# Rejected ideas
-
-## Mods as combos
-
-Sometimes when I press `NAV (layer key) + S + Tab` to get `Command
-+ Tab` I ended up with `S + Nav + Tab`. This happened because I
-did that really fast and sometimes clicked S slightly earlier than
-NAV layer key. Initially I have solved this problem using Combo
-keys, but that's additional dependency and combo keys are not
-ideal for Callum layer. You need to release both keys to trigger
-Combo key release. Therefore I have written custom code that
-allows pressing S some milliseconds earlier. This is controlled by
-FLOW_TERM and defaults to 10. I do not recommend setting this to
-higher than 30.
-
-This idea was rejected because it looks like 10ms did not made
-that big difference.
-
-## Swapper
-
-Idea of swapper is to have key that registers Mode key (e.g.
-Command while layer and some key is pressed) to simulate two key
-combo, e.g. Command + Tab. Overall I found that 3 keys combo that
-I have currently for swapping windows is equally good as 2 keys
-swapper. Another problem with swapper is that it is OS specific.
-Still if you want here is swapper implementation I have used:
-
-```c
-bool active;
-
-void update_swapper(
- uint16_t trigger,
- uint16_t keycode,
- bool pressed
-) {
- if (keycode == trigger) {
- if (pressed) {
- if (!active) {
- active = true;
- register_code(KC_LGUI);
- }
- register_code(KC_TAB);
- } else {
- unregister_code(KC_TAB);
- }
- } else if (active && keycode != KC_LSFT && keycode != KC_LEFT && keycode != KC_RIGHT) {
- unregister_code(KC_LGUI);
- active = false;
- }
-}
-```
-
-## Combos
-
-I have seen that some people use two letter horizontal combos for
-some actions, e.g. XC for Command+C, CV for Command+V, JK for ESC
-and etc. I found that this kind of kicks me out of the flow when
-working as it requires different kind of action and I need to
-pause to make that action.
-
-## Comma-space
-
-I have noticed that I put space after comma `,` usually. That
-means I can use comma + letter for something else with backspace,
-e.g. for Lithuanian letters. Performance wise that works OK, but
-practically that does not feel really good. Trilayer with language
-layer switch works better.
-
-Still if you are interested here is comma-space implementation:
-
-```c
-void swap_layout(void) {
- uint8_t saved_mods = get_mods();
- clear_mods();
- tap_code16(LCTL(KC_SPC));
- set_mods(saved_mods);
-}
-
-void press_with_layout_swap(uint16_t keycode) {
- tap_code16(KC_BSPC);
- swap_layout();
- tap_code16(keycode);
- swap_layout();
-}
-
-bool comma_pressed = false;
-
-bool update_commaspace(
- uint16_t keycode,
- bool pressed
-) {
- if (keycode == KC_COMM) {
- if (!(get_mods() & MOD_MASK_SHIFT)) {
- comma_pressed = true;
- }
- } else if (comma_pressed) {
- if (keycode != KC_LSFT) {
- comma_pressed = false;
- }
-
- switch(keycode) {
- case KC_Q:
- if (pressed) {
- press_with_layout_swap(KC_1);
- return false;
- }
- break;
- case KC_W:
- if (pressed) {
- press_with_layout_swap(KC_2);
- return false;
- }
- break;
- case KC_E:
- if (pressed) {
- press_with_layout_swap(KC_3);
- return false;
- }
- break;
- case KC_R:
- if (pressed) {
- press_with_layout_swap(KC_4);
- return false;
- }
- break;
- case KC_T:
- if (pressed) {
- press_with_layout_swap(KC_5);
- return false;
- }
- break;
- case KC_Y:
- if (pressed) {
- press_with_layout_swap(KC_6);
- return false;
- }
- break;
- case KC_U:
- if (pressed) {
- press_with_layout_swap(KC_7);
- return false;
- }
- break;
- case KC_I:
- if (pressed) {
- press_with_layout_swap(KC_8);
- return false;
- }
- break;
- case KC_O:
- if (pressed) {
- press_with_layout_swap(KC_EQL);
- return false;
- }
- break;
- }
- }
-
- return true;
-};
-```
-
-## Using one shot layers on top layer keys (NAV and SYM)
-
-While this looked promising and fun it was really easy to get lost
-in which layer you actually are. You can still use it as `flow`
-supports this scenario, but I do not recommend it.
diff --git a/keyboards/a_dux/keymaps/daliusd/rules.mk b/keyboards/a_dux/keymaps/daliusd/rules.mk
deleted file mode 100644
index dda50a4f783c..000000000000
--- a/keyboards/a_dux/keymaps/daliusd/rules.mk
+++ /dev/null
@@ -1,5 +0,0 @@
-UNICODE_ENABLE = no
-UNICODEMAP_ENABLE = yes
-#CONSOLE_ENABLE = yes
-
-SRC += flow.c
diff --git a/keyboards/a_dux/keymaps/jcmkk3/keymap.c b/keyboards/a_dux/keymaps/jcmkk3/keymap.c
deleted file mode 100644
index 608e0c522ea9..000000000000
--- a/keyboards/a_dux/keymaps/jcmkk3/keymap.c
+++ /dev/null
@@ -1,130 +0,0 @@
-/* Copyright 2021 @jcmkk3
- *
- * 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 .
- */
-#include QMK_KEYBOARD_H
-
-#include "oneshot.h"
-
-#define LA_UPP OSL(UPP)
-#define LA_SYM OSL(SYM)
-#define LA_NAV MO(NAV)
-
-enum layers {
- DEF,
- UPP,
- SYM,
- NAV,
- NUM,
-};
-
-enum keycodes {
- // Custom oneshot mod implementation with no timers.
- OS_SHFT = SAFE_RANGE,
- OS_CTRL,
- OS_ALT,
- OS_GUI,
-};
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [DEF] = LAYOUT(
- KC_Y, KC_C, KC_L, KC_M, KC_K, KC_Z, KC_F, KC_U, KC_QUOT, KC_DQUO,
- KC_I, KC_S, KC_R, KC_T, KC_G, KC_P, KC_N, KC_E, KC_A, KC_O,
- KC_Q, KC_V, KC_W, KC_D, KC_J, KC_B, KC_H, KC_COMM, KC_DOT, KC_X,
- LA_NAV, KC_SPC, LA_UPP, LA_SYM
- ),
-
- [UPP] = LAYOUT(
- S(KC_Y), S(KC_C), S(KC_L), S(KC_M), S(KC_K), S(KC_Z), S(KC_F), S(KC_U), KC_EXLM, KC_QUES,
- S(KC_I), S(KC_S), S(KC_R), S(KC_T), S(KC_G), S(KC_P), S(KC_N), S(KC_E), S(KC_A), S(KC_O),
- S(KC_Q), S(KC_V), S(KC_W), S(KC_D), S(KC_J), S(KC_B), S(KC_H), KC_SCLN, KC_COLN, S(KC_X),
- _______, _______, _______, _______
- ),
-
- [SYM] = LAYOUT(
- KC_LABK, KC_LCBR, KC_LBRC, KC_LPRN, KC_CIRC, KC_DLR, KC_RPRN, KC_RBRC, KC_RCBR, KC_RABK,
- KC_HASH, KC_UNDS, KC_EQL, KC_MINS, KC_PLUS, KC_AMPR, OS_CTRL, OS_SHFT, OS_ALT, OS_GUI,
- KC_PERC, KC_GRV, KC_TILD, KC_SLSH, KC_ASTR, KC_PIPE, KC_BSLS, KC_SCLN, KC_COLN, KC_AT,
- _______, _______, _______, _______
- ),
-
- [NAV] = LAYOUT(
- XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_TAB, KC_UP, KC_ENT, KC_DEL,
- OS_GUI, OS_ALT, OS_SHFT, OS_CTRL, XXXXXXX, KC_HOME, KC_LEFT, KC_DOWN, KC_RGHT, KC_END,
- C(KC_Z), C(KC_X), C(KC_C), C(KC_V), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
- _______, _______, KC_BSPC, _______
- ),
-
- [NUM] = LAYOUT(
- KC_7, KC_5, KC_3, KC_1, KC_9, KC_8, KC_0, KC_2, KC_4, KC_6,
- OS_GUI, OS_ALT, OS_SHFT, OS_CTRL, XXXXXXX, XXXXXXX, OS_CTRL, OS_SHFT, OS_ALT, OS_GUI,
- XXXXXXX, XXXXXXX, XXXXXXX, KC_MINS, XXXXXXX, XXXXXXX, XXXXXXX, KC_COMM, KC_DOT, KC_SLSH,
- _______, _______, KC_BSPC, _______
- ),
-};
-
-bool is_oneshot_cancel_key(uint16_t keycode) {
- switch (keycode) {
- case LA_SYM:
- case LA_NAV:
- return true;
- default:
- return false;
- }
-}
-
-bool is_oneshot_ignored_key(uint16_t keycode) {
- switch (keycode) {
- case LA_SYM:
- case LA_NAV:
- case KC_LSFT:
- case OS_SHFT:
- case OS_CTRL:
- case OS_ALT:
- case OS_GUI:
- return true;
- default:
- return false;
- }
-}
-
-oneshot_state os_shft_state = os_up_unqueued;
-oneshot_state os_ctrl_state = os_up_unqueued;
-oneshot_state os_alt_state = os_up_unqueued;
-oneshot_state os_gui_state = os_up_unqueued;
-
-bool process_record_user(uint16_t keycode, keyrecord_t *record) {
- update_oneshot(
- &os_shft_state, KC_LSFT, OS_SHFT,
- keycode, record
- );
- update_oneshot(
- &os_ctrl_state, KC_LCTL, OS_CTRL,
- keycode, record
- );
- update_oneshot(
- &os_alt_state, KC_LALT, OS_ALT,
- keycode, record
- );
- update_oneshot(
- &os_gui_state, KC_LGUI, OS_GUI,
- keycode, record
- );
-
- return true;
-}
-
-layer_state_t layer_state_set_user(layer_state_t state) {
- return update_tri_layer_state(state, SYM, NAV, NUM);
-}
diff --git a/keyboards/a_dux/keymaps/jcmkk3/oneshot.c b/keyboards/a_dux/keymaps/jcmkk3/oneshot.c
deleted file mode 100644
index e84b5a7b1d66..000000000000
--- a/keyboards/a_dux/keymaps/jcmkk3/oneshot.c
+++ /dev/null
@@ -1,72 +0,0 @@
-/* Copyright 2021 @jcmkk3
- *
- * 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 .
- */
-#include "oneshot.h"
-
-void update_oneshot(
- oneshot_state *state,
- uint16_t mod,
- uint16_t trigger,
- uint16_t keycode,
- keyrecord_t *record
-) {
- if (keycode == trigger) {
- if (record->event.pressed) {
- // Trigger keydown
- if (*state == os_up_unqueued) {
- register_code(mod);
- }
- *state = os_down_unused;
- } else {
- // Trigger keyup
- switch (*state) {
- case os_down_unused:
- // If we didn't use the mod while trigger was held, queue it.
- *state = os_up_queued;
- break;
- case os_down_used:
- // If we did use the mod while trigger was held, unregister it.
- *state = os_up_unqueued;
- unregister_code(mod);
- break;
- default:
- break;
- }
- }
- } else {
- if (record->event.pressed) {
- if (is_oneshot_cancel_key(keycode) && *state != os_up_unqueued) {
- // Cancel oneshot on designated cancel keydown.
- *state = os_up_unqueued;
- unregister_code(mod);
- }
- } else {
- if (!is_oneshot_ignored_key(keycode)) {
- // On non-ignored keyup, consider the oneshot used.
- switch (*state) {
- case os_down_unused:
- *state = os_down_used;
- break;
- case os_up_queued:
- *state = os_up_unqueued;
- unregister_code(mod);
- break;
- default:
- break;
- }
- }
- }
- }
-}
diff --git a/keyboards/a_dux/keymaps/jcmkk3/oneshot.h b/keyboards/a_dux/keymaps/jcmkk3/oneshot.h
deleted file mode 100644
index b88e68d1d5c4..000000000000
--- a/keyboards/a_dux/keymaps/jcmkk3/oneshot.h
+++ /dev/null
@@ -1,46 +0,0 @@
-/* Copyright 2021 @jcmkk3
- *
- * 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 .
- */
-#pragma once
-
-#include QMK_KEYBOARD_H
-
-// Represents the four states a oneshot key can be in
-typedef enum {
- os_up_unqueued,
- os_up_queued,
- os_down_unused,
- os_down_used,
-} oneshot_state;
-
-// Custom oneshot mod implementation that doesn't rely on timers. If a mod is
-// used while it is held it will be unregistered on keyup as normal, otherwise
-// it will be queued and only released after the next non-mod keyup.
-void update_oneshot(
- oneshot_state *state,
- uint16_t mod,
- uint16_t trigger,
- uint16_t keycode,
- keyrecord_t *record
-);
-
-// To be implemented by the consumer. Defines keys to cancel oneshot mods.
-bool is_oneshot_cancel_key(uint16_t keycode);
-
-// To be implemented by the consumer. Defines keys to ignore when determining
-// whether a oneshot mod has been used. Setting this to modifiers and layer
-// change keys allows stacking multiple oneshot modifiers, and carrying them
-// between layers.
-bool is_oneshot_ignored_key(uint16_t keycode);
diff --git a/keyboards/a_dux/keymaps/jcmkk3/rules.mk b/keyboards/a_dux/keymaps/jcmkk3/rules.mk
deleted file mode 100644
index b7dcd87b1ead..000000000000
--- a/keyboards/a_dux/keymaps/jcmkk3/rules.mk
+++ /dev/null
@@ -1 +0,0 @@
-SRC += oneshot.c
diff --git a/keyboards/a_dux/keymaps/manna-harbour_miryoku/config.h b/keyboards/a_dux/keymaps/manna-harbour_miryoku/config.h
deleted file mode 100644
index dbbff11bb61c..000000000000
--- a/keyboards/a_dux/keymaps/manna-harbour_miryoku/config.h
+++ /dev/null
@@ -1,19 +0,0 @@
-// Copyright 2021 Manna Harbour
-// https://github.com/manna-harbour/miryoku
-
-// 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 .
-
-#pragma once
-
-#define LAYOUT_miryoku( \
-K00, 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, \
-N30, N31, K32, K33, K34, K35, K36, K37, N38, N39 \
-) \
-LAYOUT( \
-K00, 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, \
- K33, K34, K35, K36 \
-)
diff --git a/keyboards/a_dux/keymaps/manna-harbour_miryoku/keymap.c b/keyboards/a_dux/keymaps/manna-harbour_miryoku/keymap.c
deleted file mode 100644
index dbab7f982043..000000000000
--- a/keyboards/a_dux/keymaps/manna-harbour_miryoku/keymap.c
+++ /dev/null
@@ -1,4 +0,0 @@
-// Copyright 2019 Manna Harbour
-// https://github.com/manna-harbour/miryoku
-
-// 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 .
diff --git a/keyboards/a_dux/keymaps/manna-harbour_miryoku/rules.mk b/keyboards/a_dux/keymaps/manna-harbour_miryoku/rules.mk
deleted file mode 100644
index ef40279cbcd6..000000000000
--- a/keyboards/a_dux/keymaps/manna-harbour_miryoku/rules.mk
+++ /dev/null
@@ -1,4 +0,0 @@
-# Copyright 2021 Manna Harbour
-# https://github.com/manna-harbour/miryoku
-
-MIRYOKU_KLUDGE_THUMBCOMBOS=yes
diff --git a/keyboards/abacus/config.h b/keyboards/abacus/config.h
index ca764a9eebee..84e1acbb3c71 100644
--- a/keyboards/abacus/config.h
+++ b/keyboards/abacus/config.h
@@ -17,8 +17,6 @@ along with this program. If not, see .
#pragma once
-#define DIP_SWITCH_PINS { D0 }
-
/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
#define LOCKING_SUPPORT_ENABLE
/* Locking resynchronize hack */
diff --git a/keyboards/abacus/info.json b/keyboards/abacus/info.json
index 2e147829973d..ad8ebcc8654f 100644
--- a/keyboards/abacus/info.json
+++ b/keyboards/abacus/info.json
@@ -13,6 +13,9 @@
"rows": ["D3", "D2", "D4", "C6"]
},
"diode_direction": "COL2ROW",
+ "dip_switch": {
+ "pins": ["D0"]
+ },
"encoder": {
"rotary": [
{"pin_a": "F1", "pin_b": "F0"}
diff --git a/keyboards/abacus/keymaps/unicodemap/keymap.c b/keyboards/abacus/keymaps/unicodemap/keymap.c
deleted file mode 100644
index 46e2219f0bd1..000000000000
--- a/keyboards/abacus/keymaps/unicodemap/keymap.c
+++ /dev/null
@@ -1,150 +0,0 @@
-/* Copyright 2020 nickolaij
- *
- * 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 .
- */
-#include QMK_KEYBOARD_H
-
-// wait DELAY ms before unregistering media keys
-#define MEDIA_KEY_DELAY 10
-
-// Defines names for use in layer keycodes and the keymap
-enum layer_names {
- _BASE,
- _UPPER,
- _LOWER
-};
-
-// Defines the keycodes used by our macros in process_record_user
-enum custom_keycodes {
- NICKURL = SAFE_RANGE,
- ALTTAB
-};
-
-enum unicode_names {
- LOVEEYES,
- THINK,
- UPSIDEDOWN,
- NOMOUTH,
- PARTY,
- HEART,
- EGGPLANT,
- PEACH,
- EMOJI100,
- EMOJIB
-};
-
-const uint32_t unicode_map[] PROGMEM = {
- [LOVEEYES] = 0x1f60d,
- [THINK] = 0x1f914,
- [UPSIDEDOWN] = 0x1f643,
- [NOMOUTH] = 0x1f636,
- [PARTY] = 0x1f973,
- [HEART] = 0x1f495,
- [EMOJI100] = 0x1f4af,
- [PEACH] = 0x1f351,
- [EGGPLANT] = 0x1f346,
- [EMOJIB] = 0x1f171
-};
-
-
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- /* Base */
- [_BASE] = LAYOUT(
- KC_ESCAPE, 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_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_BSLS,
- KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMMA, KC_DOT, KC_UP, KC_DELETE,
- KC_LCTL, KC_LGUI, MO(_UPPER), KC_SPACE, KC_ENTER, MO(_LOWER), KC_LEFT, KC_DOWN, KC_RIGHT
- ),
- [_UPPER] = LAYOUT(
- KC_GRAVE, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, _______,
- ALTTAB, _______, _______, _______, _______, _______, _______, _______, KC_LBRC, KC_RBRC, KC_QUOTE, KC_SLASH,
- _______, _______, _______, _______, _______, _______, _______, _______, KC_MINUS, KC_EQUAL, _______, _______,
- KC_LALT, _______, _______, _______, _______, _______, KC_HOME, _______, KC_END
- ),
- [_LOWER] = LAYOUT(
- NICKURL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, _______,
- _______, KC_F11, KC_F12, RGB_MODE_PLAIN, RGB_MODE_BREATHE, RGB_MODE_RAINBOW, RGB_MODE_SWIRL, RGB_MODE_SNAKE, RGB_MODE_KNIGHT, RGB_MODE_GRADIENT, XXXXXXX, RGB_TOG,
- _______, UM(LOVEEYES), UM(THINK), UM(UPSIDEDOWN), UM(NOMOUTH), UM(PARTY), UM(PEACH), UM(HEART), UM(EGGPLANT), UM(EMOJI100), UM(EMOJIB), RGB_HUI,
- KC_CAPS, _______, _______, _______, _______, _______, _______, _______, _______
- )
-
-
-};
-
-bool process_record_user(uint16_t keycode, keyrecord_t *record) {
- switch (keycode) {
- case NICKURL:
- if (record->event.pressed) {
- SEND_STRING("https://www.github.com/nickolaij");
- } else {
- tap_code(KC_ENTER);
- }
- return true;
- break;
-
- case ALTTAB:
- if (record->event.pressed) {
- tap_code16(A(KC_TAB));
- }
- return true;
- break;
-
- default:
- return true;
-
- }
-}
-
-
-bool dip_switch_update_user(uint8_t index, bool active) {
- switch (index) {
- case 0:
- if(active) {
- switch(get_highest_layer(layer_state)) {
- case _BASE:
- tap_code16(LCTL(KC_F));
- break;
- case _UPPER:
- tap_code(KC_MUTE);
- break;
- case _LOWER:
- tap_code(KC_MEDIA_PLAY_PAUSE);
- break;
- }
- }
- }
- return true;
-}
-
-
-void matrix_init_user(void) {
- set_unicode_input_mode(UNICODE_MODE_WINCOMPOSE);
-}
-
-bool encoder_update_user(uint8_t index, bool clockwise) {
-
- switch(get_highest_layer(layer_state)) {
- case _BASE:
- clockwise ? tap_code(KC_PGDN) : tap_code(KC_PGUP);
- break;
- case _UPPER:
- clockwise ? tap_code(KC_VOLU) : tap_code(KC_VOLD);
- break;
- case _LOWER:
- clockwise ? tap_code(KC_MEDIA_NEXT_TRACK) : tap_code(KC_MEDIA_PREV_TRACK);
- break;
- }
- return true;
-}
diff --git a/keyboards/abacus/keymaps/unicodemap/readme.md b/keyboards/abacus/keymaps/unicodemap/readme.md
deleted file mode 100644
index 0c6098f0e980..000000000000
--- a/keyboards/abacus/keymaps/unicodemap/readme.md
+++ /dev/null
@@ -1,4 +0,0 @@
-# The default keymap for Abacus
-
-This is made based on my first few days of playing with it and honing in on what feels right.
-I've repurposed the DIP switch function for the encoder switches and added some functionality for multiple layers also effecting the encoders output.
diff --git a/keyboards/abacus/keymaps/unicodemap/rules.mk b/keyboards/abacus/keymaps/unicodemap/rules.mk
deleted file mode 100644
index 502b2def7623..000000000000
--- a/keyboards/abacus/keymaps/unicodemap/rules.mk
+++ /dev/null
@@ -1 +0,0 @@
-UNICODEMAP_ENABLE = yes
diff --git a/keyboards/abko/ak84bt/ak84bt.c b/keyboards/abko/ak84bt/ak84bt.c
index 0ecd06b177e8..a51f1f458f6a 100644
--- a/keyboards/abko/ak84bt/ak84bt.c
+++ b/keyboards/abko/ak84bt/ak84bt.c
@@ -16,7 +16,7 @@
#include QMK_KEYBOARD_H
-const is31_led PROGMEM g_is31_leds[RGB_MATRIX_LED_COUNT] = {
+const is31fl3733_led_t PROGMEM g_is31fl3733_leds[RGB_MATRIX_LED_COUNT] = {
{0, G_1, I_1, H_1},
{0, G_3, I_3, H_3},
{0, G_4, I_4, H_4},
diff --git a/keyboards/abko/ak84bt/config.h b/keyboards/abko/ak84bt/config.h
index f6a3b55851fc..0a7f31bf7da8 100644
--- a/keyboards/abko/ak84bt/config.h
+++ b/keyboards/abko/ak84bt/config.h
@@ -17,10 +17,9 @@
#pragma once
-#define DRIVER_ADDR_1 0b1010000
-#define DRIVER_ADDR_2 0b1010011
+#define IS31FL3733_I2C_ADDRESS_1 IS31FL3733_I2C_ADDRESS_GND_GND
+#define IS31FL3733_I2C_ADDRESS_2 IS31FL3733_I2C_ADDRESS_GND_VCC
-#define DRIVER_COUNT 2
#define DRIVER_1_LED_TOTAL 45
#define DRIVER_2_LED_TOTAL 45
diff --git a/keyboards/abstract/ellipse/keymaps/abstractkb/config.h b/keyboards/abstract/ellipse/keymaps/abstractkb/config.h
deleted file mode 100644
index 9aca0b31f5ca..000000000000
--- a/keyboards/abstract/ellipse/keymaps/abstractkb/config.h
+++ /dev/null
@@ -1,32 +0,0 @@
-/* Copyright 2019 AbstractKB
- *
- * 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 .
- */
-
-#pragma once
-
-#define BACKLIGHT_BREATHING
-#define BREATHING_PERIOD 2
-#define RGBLIGHT_EFFECT_BREATHING
-#define RGBLIGHT_EFFECT_RAINBOW_MOOD
-#define RGBLIGHT_EFFECT_RAINBOW_SWIRL
-#define RGBLIGHT_EFFECT_SNAKE
-#define RGBLIGHT_EFFECT_KNIGHT
-#define RGBLIGHT_EFFECT_CHRISTMAS
-#define RGBLIGHT_EFFECT_STATIC_GRADIENT
-#define RGBLIGHT_EFFECT_RGB_TEST
-#define RGBLIGHT_EFFECT_ALTERNATING
-#define RGBLIGHT_EFFECT_TWINKLE
-
-// place overrides here
diff --git a/keyboards/abstract/ellipse/keymaps/abstractkb/keymap.c b/keyboards/abstract/ellipse/keymaps/abstractkb/keymap.c
deleted file mode 100644
index 4350423183b6..000000000000
--- a/keyboards/abstract/ellipse/keymaps/abstractkb/keymap.c
+++ /dev/null
@@ -1,51 +0,0 @@
-/* Copyright 2019 AbstractKB
- *
- * 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 .
- */
-#include QMK_KEYBOARD_H
-
-// Defines the keycodes used by our macros in process_record_user
-/*enum custom_keycodes {
- MYKEY = SAFE_RANGE
-};*/
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [0] = LAYOUT( /* Base */
- KC_MUTE, RGB_TOG, BL_TOGG,
- RGB_M_SW, RGB_M_P, BL_BRTG
- )
-};
-
-bool encoder_update_user(uint8_t index, bool clockwise) {
- if (index == 0) { /* First encoder */
- if (clockwise) {
- tap_code(KC_VOLU);
- } else {
- tap_code(KC_VOLD);
- }
- } else if (index == 1) { /* Second encoder */
- if (clockwise) {
- rgblight_increase_hue_noeeprom();
- } else {
- rgblight_decrease_hue_noeeprom();
- }
- } else if (index == 2) { /* Third encoder */
- if (clockwise) {
- backlight_increase();
- } else {
- backlight_decrease();
- }
- }
- return true;
-}
diff --git a/keyboards/abstract/ellipse/keymaps/abstractkb/readme.md b/keyboards/abstract/ellipse/keymaps/abstractkb/readme.md
deleted file mode 100644
index 5db2eb647f72..000000000000
--- a/keyboards/abstract/ellipse/keymaps/abstractkb/readme.md
+++ /dev/null
@@ -1,3 +0,0 @@
-# My keymap
-
-This was used for testing lights but will become my personal keymap
\ No newline at end of file
diff --git a/keyboards/abstract/ellipse/keymaps/abstractkb/rules.mk b/keyboards/abstract/ellipse/keymaps/abstractkb/rules.mk
deleted file mode 100644
index 54a2685bf634..000000000000
--- a/keyboards/abstract/ellipse/keymaps/abstractkb/rules.mk
+++ /dev/null
@@ -1 +0,0 @@
-BACKLIGHT_ENABLE = yes
\ No newline at end of file
diff --git a/keyboards/acekeyboard/titan60/keymaps/utilitarian/keymap.c b/keyboards/acekeyboard/titan60/keymaps/utilitarian/keymap.c
deleted file mode 100644
index 99e619279470..000000000000
--- a/keyboards/acekeyboard/titan60/keymaps/utilitarian/keymap.c
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
-Copyright 2021 keebnewb
-
-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 .
-*/
-#include QMK_KEYBOARD_H
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [0] = LAYOUT_60_utilitarian(
- KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,
- KC_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_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_DEL,
- KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
- ),
-
- [1] = LAYOUT_60_utilitarian(
- 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_DEL,
- RGB_TOG, RGB_RMOD,KC_UP, RGB_MOD, RGB_M_R, RGB_M_T, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_SCRL, KC_PAUS, BS_SWAP,
- KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_INS, KC_HOME, KC_PGUP, KC_TRNS,
- BL_TOGG, BL_DOWN, BL_UP, KC_CALC, KC_MPLY, KC_VOLD, KC_VOLU, KC_MUTE, KC_TRNS, KC_END, KC_PGDN, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
- ),
-};
diff --git a/keyboards/acheron/apollo/87h/gamma/config.h b/keyboards/acheron/apollo/87h/gamma/config.h
index 6209fa21f728..37c0aaef649c 100644
--- a/keyboards/acheron/apollo/87h/gamma/config.h
+++ b/keyboards/acheron/apollo/87h/gamma/config.h
@@ -25,12 +25,10 @@ along with this program. If not, see .
#define EARLY_INIT_PERFORM_BOOTLOADER_JUMP TRUE
// RGB Matrix defines
-#define DRIVER_ADDR_1 0b0110000
+#define IS31FL3741_I2C_ADDRESS_1 IS31FL3741_I2C_ADDRESS_GND
-#define DRIVER_COUNT 1
#define DRIVER_1_LED_TOTAL 87
#define RGB_MATRIX_LED_COUNT DRIVER_1_LED_TOTAL
-#define ISSI_DRIVER_TOTAL RGB_MATRIX_LED_COUNT
#define RGB_MATRIX_DEFAULT_VAL 80
#define RGB_MATRIX_FRAMEBUFFER_EFFECTS
diff --git a/keyboards/acheron/apollo/87h/gamma/gamma.c b/keyboards/acheron/apollo/87h/gamma/gamma.c
index fb381f52ce14..19e91062873e 100644
--- a/keyboards/acheron/apollo/87h/gamma/gamma.c
+++ b/keyboards/acheron/apollo/87h/gamma/gamma.c
@@ -18,7 +18,7 @@ along with this program. If not, see .
#include "quantum.h"
#ifdef RGB_MATRIX_ENABLE
-const is31_led PROGMEM g_is31_leds[RGB_MATRIX_LED_COUNT] = {
+const is31fl3741_led_t PROGMEM g_is31fl3741_leds[RGB_MATRIX_LED_COUNT] = {
/* Refer to IS31 manual for these locations
* driver
* | R location
diff --git a/keyboards/acheron/lasgweloth/keymaps/xoxotus/keymap.c b/keyboards/acheron/lasgweloth/keymaps/xoxotus/keymap.c
deleted file mode 100755
index 24ec0c9a36a0..000000000000
--- a/keyboards/acheron/lasgweloth/keymaps/xoxotus/keymap.c
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
-Copyright 2012,2013 Jun Wako
-
-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 .
-*/
-
-#include QMK_KEYBOARD_H
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [0] = LAYOUT_60_ansi_split_bs_rshift(
- QK_GESC, KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , KC_MINS, KC_EQL , 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_TILD,
- KC_LCTL, 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, MO(1) ,
- KC_LCTL, KC_LGUI, KC_LALT, KC_SPC , KC_RALT, KC_RGUI, MO(1) , KC_RCTL
- ),
- [1] = LAYOUT_60_ansi_split_bs_rshift(
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, KC_UP , _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______
- )
-};
diff --git a/keyboards/acheron/shark/alpha/keymaps/ajp10304/readme.md b/keyboards/acheron/shark/alpha/keymaps/ajp10304/readme.md
deleted file mode 100644
index e091e5d3186c..000000000000
--- a/keyboards/acheron/shark/alpha/keymaps/ajp10304/readme.md
+++ /dev/null
@@ -1,126 +0,0 @@
-# AJP10304 Custom Shark Layout
-# Also available for the Planck, Quark, JJ40 and Atreus50
-
-**Note:** In the tables below where there are two characters on a key,
-the second is the output when shift is applied.
-
-**Note:** The below tables assume a UK layout.
-
-#### Flashing
-Refer to the README.md of the keyboard you want to flash.
-
-##### Main Qwerty Layer
-
-* Tab: when held, operates as shift.
-* Enter: when held, operates as shift.
-* MENU: perform right-click
-
-| | | | | | | | | | | | |
-| ---- |:----:| :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:| ----:|
-| Esc | Q | W | E | R | T | Y | U | I | O | P | Bksp |
-| Tab | A | S | D | F | G | H | J | K | L | ;: | Enter|
-| Shft | Z | X | C | V | B | N | M | ,< | .> | /? | Shft |
-| Fn | Ctrl | Alt | GUI |Lower | Bksp |Space |Raise | Shift| MENU | Ctrl | Fn2 |
-
-##### Main Colemak-DHm Layer
-
-| | | | | | | | | | | | |
-| ---- |:----:| :---:|:---:|:-----:|:----:|:-----:|:-----:|:-----:|:----:|:----:| ----:|
-| Esc | Q | W | F | P | B | J | L | U | Y | ;: | Bksp |
-| Tab | A | R | S | T | G | M | N | E | I | O | Enter|
-| Shft | Z | X | C | D | V | K | H | ,< | .> | /? | Shft |
-| Fn | Ctrl | Alt | GUI | Lower | Bksp | Space | Raise | Shift | MENU | Ctrl | Fn2 |
-
-##### Function Layer
-Activated when `fn` held in the above `qwerty` layer.
-
-| | | | | | | | | | | | |
-| :---: |:----:| :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:|
-| F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 |
-| 1! | 2" | 3£ | 4$ | 5% | 6^ | 7& | 8* | 9( | 0) | ~ |INSERT|
-| Shift | \| | `¬ | #~ | * | -_ | =+ | \| | [{ | ]} | '@ |Shift |
-| Fn | Ctrl | Alt | GUI |Lower | Bksp |Space |Mouse | MENU | Alt | Ctrl | Fn2 |
-
-##### Lower Layer
-Activated when `Lower` is held in the above `qwerty` layer.
-
-* Numbers are along the top row, their shifted counterparts are on row 2.
-* WrdBks: `backspace` with `ctrl` applied. I.e. delete a word.
-* WrdDel: `delete` with `ctrl` applied. I.e. forward delete a word.
-
-| | | | | | | | | | | | |
-| :---: |:----:| :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:|
-| 1! | 2" | 3£ | 4$ | 5% | 6^ | 7& | 8* | 9( | 0) | DEL | Bksp |
-| ! | " | £ | $ | % | ^ | & | * | ( | ) |WrdDel|WrdBks|
-| Shift | \| | `¬ | #~ | '@ | -_ | =+ | #~ | [{ | ]} | '@ |Shift |
-| | | | |Lower | Del |Space | | Next | Vol- | Vol+ | Play |
-
-##### Raise Layer
-Activated when `Raise` is held in the above `qwerty` layer.
-
-* Preferred layer for typing brackets.
-* Allows for cursor navigation to be used solely with the right hand.
-* WRDSEL: Select the word where the cursor is.
-* |< and >|: Apply `ctrl` to `left` and `right` respectively for word jumping.
-
-| | | | | | | | | | | | |
-| :---: |:----:| :---:| :---:| :---:| :---:| :---: | :---:| :---:| :---:| :---: | :---:|
-| ` | |WRDSEL| [ | ] | | | PGUP | HOME |PGDOWN| |PRNTSC|
-| ` | | | ( | ) | | | HOME | UP | END | |ZOOM +|
-| | | | { | } | ||<| LEFT | DOWN |RIGHT |>||ZOOM -|
-| Mouse | | | | | Alt | Enter |Raise | | | | |
-
-##### Lower + Raise
-Activated when `Lower` and `Raise` are held together in the above `qwerty` layer.
-
-* Audio controls in the same position as cursor keys from the `Raise` layer.
-* ????: Runs a macro for outputting a text string. Do not use this store passwords.
-* Reset: Enter bootloader for flashing firmware to the keyboard.
-* CAPS: Toggle caps lock.
-* Macro functions: Allows recording of macros. To start recording the macro, press either REC1 or REC2.
-To finish the recording, press STOP. To replay the macro, press either PLAY1 or PLAY2.
-* MAC: Toggle MAC OS extensions to layers. This allows MLWR to be enabled with LOWER,
-MRSE with RAISE, MFNC with FUNC and MFNC2 with FUNC2 respectively.
-
-| | | | | | | | | | | | |
-| :---: |:----:| :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:|:-------:|
-| ???? | Reset|Qwerty| | | REC1 | REC2 | | | | | Del |
-| CAPS | | | | | PLAY1|PLAY2 | Mute | Vol+ | Play | | Qwerty |
-| MAC | | | | | STOP1|STOP2 | Prev | Vol- | Next | | Colemak |
-| | | | | | | | | DYN | | | |
-
-##### Function 2 Layer
-Activated when `fn` held in the above `qwerty` layer.
-* WRDSEL: Select the word where the cursor is.
-* LNDEL: Delete the line where the cursor is.
-* LNSEL: Select the line where the cursor is.
-* DUP: Duplicate the selected text.
-* LNJOIN: Join the line where the cursor is with the following line.
-* MODE: Print either `PC` or `OSX` depending on what layer mode is active.
-
-| | | | | | | | | | | | |
-| :---: | :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:|
-| | |WRDSEL| | | | LNDEL| | | | | |
-| | | LNSEL| DUP | | | | |LNJOIN| | | |
-| | UNDO | CUT | COPY | PASTE| | | | | | | MODE |
-| | | | | | | | | | | | |
-
-##### Mouse Layer
-Activated when `fn` and `raise` held together.
-
-| | | | | | | | | | | | |
-| :---: | :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:|
-| ESC | | | | | | W_L | W_UP | BTN3 | W_DWN| W_R | |
-| ACC0 | ACC1 | ACC2 | | | | | BTN1 | UP | BTN2 | | |
-| ACC0 | ACC1 | ACC2 | | | | | LEFT | DOWN | RIGHT| | |
-| | | | | | | | | | | | |
-
-##### Number Pad Layout
-Activated when holding `Esc` key.
-
-| | | | | | | | | | | | |
-| :---: | :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:|
-| | | | | | |NMLOCK| 7 | 8 | 9 | / | |
-| | | | | | | | 4 | 5 | 6 | * | |
-| | | | | | | | 1 | 2 | 3 | + | |
-| | | | | | | | 0 | . | , | - | |
diff --git a/keyboards/acheron/shark/beta/info.json b/keyboards/acheron/shark/beta/info.json
index 5ec24036384e..7daab0a2c0eb 100644
--- a/keyboards/acheron/shark/beta/info.json
+++ b/keyboards/acheron/shark/beta/info.json
@@ -9,6 +9,9 @@
"rows": ["A8", "B14", "A4", "A3"]
},
"diode_direction": "COL2ROW",
+ "eeprom": {
+ "driver": "i2c"
+ },
"encoder": {
"rotary": [
{"pin_a": "C15", "pin_b": "C14"}
diff --git a/keyboards/acheron/shark/beta/keymaps/gondolindrim/keymap.c b/keyboards/acheron/shark/beta/keymaps/gondolindrim/keymap.c
deleted file mode 100755
index ffd104c771c9..000000000000
--- a/keyboards/acheron/shark/beta/keymaps/gondolindrim/keymap.c
+++ /dev/null
@@ -1,264 +0,0 @@
-/*
-Copyright 2020 Álvaro "Gondolindrim" Volpato
-
-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 .
-*/
-#include QMK_KEYBOARD_H
-
-#define MEDIA_KEY_DELAY 10
-#define ALT_TAB_DELAY 1000
-
-// Persistent encoder modes: the current encoder mode is written into EEPROM memory, and retrieved at the keyboard initialization. This means the current encoder mode is persistent even if the keyboard is reset or turned off
-#define PERSISTENT_ENCODER_MODES
-
-#define ENCODER_MODE_CHANGE_DELAY 500
-
-// Defining special keycodes
-enum keyboard_keycodes {
- ECLICK = SAFE_RANGE, // Encoder click
- ALTTABF , // ALT-TAB forward
- ALTTABB , // ALT-TAB backwards
- ALTTABC , // For alt-tab-click
- ENCMUP , // Encoder mode up
- ENCMDN , // Encoder mode down
- NEW_SAFE_RANGE
-};
-
-// Creates sample keyevents and keyrecords to be used in the processing of the custom keycodes. Their time should be resampled everytime they are used; their cols and rows are set to be "impossible", that is, outside the normal key matrix bounds.
-const keyevent_t sample_pressed_keyevent = {
- .key = (keypos_t){.row = 5, .col = 13},
- .pressed = true,
- .time = 0
-};
-
-keyrecord_t sample_pressed_keyrecord = {
- .event = sample_pressed_keyevent
-};
-
-const keyevent_t sample_released_keyevent = {
- .key = (keypos_t){.row = 5, .col = 13},
- .pressed = false,
- .time = 0
-};
-
-keyrecord_t sample_released_keyrecord = {
- .event = sample_released_keyevent
-};
-
-// tap_process_record_user calls process_record_user with the pressed and released sample keyrecords with a delay of MEDIA_KEY_DELAY. The idea is to allow custom keycodes a simulation of a key press and release, allowing them to be treated in process_record_user. This, in turn, allows the custom keycodes to be used both in the encoder callback and the keyboard keymap.
-uint16_t temp_timer = 0;
-void tap_process_record_user(uint16_t keycode)
-{
- temp_timer = timer_read();
- sample_pressed_keyrecord.event.time = timer_read();
- process_record_user( keycode, &sample_pressed_keyrecord );
- while (timer_elapsed(temp_timer) < MEDIA_KEY_DELAY);
- sample_released_keyrecord.event.time = timer_read();
- process_record_user( keycode, &sample_released_keyrecord );
-}
-
-// process_special_keycode is a function that distinguishes between the native keycodes and the ones custom-defined here. Normal keycodes are tapped, while keycodes in the SAFE_RANGE - NEW_SAFE_RANGE interval are treated with tap_process_record_user.
-void process_special_keycode(uint16_t keycode) {
- if (SAFE_RANGE <= keycode && keycode < NEW_SAFE_RANGE) tap_process_record_user(keycode);
- else tap_code(keycode);
-}
-
-uint16_t encoder_click_delay = ENCODER_MODE_CHANGE_DELAY;
-
-uint8_t startup_color[3] = {0xFF,0xFF,0xFF};
-
-typedef struct _encoder_mode_t {
- uint8_t indicator_color[3];
- uint16_t clockwise_key[4];
- uint16_t counterclockwise_key[4];
- uint16_t clicked_key[4] ;
- uint16_t hold_key;
-} encoder_mode_t;
-
-encoder_mode_t encoder_modes[] = {
- { .indicator_color = {0x22,0x00,0xFF} , .clockwise_key = {KC_VOLU, KC_VOLU, ENCMUP, KC_VOLU}, .counterclockwise_key = {KC_VOLD, KC_VOLD, ENCMDN, KC_VOLD}, .clicked_key = {KC_MUTE, KC_MPLY, KC_MUTE, KC_MUTE}, .hold_key = ENCMUP },
- { .indicator_color = {0x00,0x33,0xFF} , .clockwise_key = {KC_WH_D, KC_WH_D, ENCMUP, KC_WH_D}, .counterclockwise_key = {KC_WH_U, KC_WH_U, ENCMDN, KC_WH_U}, .clicked_key = {KC_BTN1, KC_BTN1, KC_BTN1, KC_BTN1}, .hold_key = ENCMUP },
- { .indicator_color = {0xFF,0x88,0x00} , .clockwise_key = {ALTTABF, ALTTABF, ENCMUP, ALTTABF}, .counterclockwise_key = {ALTTABB, ALTTABB, ENCMDN, ALTTABB}, .clicked_key = {ALTTABC, ALTTABC, ALTTABC, ALTTABC}, .hold_key = ENCMUP }
- // Insert your custom encoder mode here
-};
-
-#define NUM_ENCODER_MODES ARRAY_SIZE(encoder_modes)
-
-// This counter is used to track what encoder mode is being used at a certain time
-int encoder_mode_count = 0;
-
-
-#ifdef PERSISTENT_ENCODER_MODES
-typedef union {
- uint32_t raw;
- struct {
- int user_encoder_mode_count;
-};
-} user_config_t;
-
-user_config_t user_config;
-#endif
-
-void set_indicator_colors(uint8_t color[3]){
- rgblight_setrgb(color[0], color[1], color[2]);
-}
-
-// Board init: RGB indicator is set to startup_color
-void keyboard_pre_init_user(void){
- set_indicator_colors(startup_color);
-};
-
-void keyboard_post_init_user(void){
-#ifdef PERSISTENT_ENCODER_MODES
- user_config.raw = eeconfig_read_user();
- encoder_mode_count = user_config.user_encoder_mode_count ;
-#else
- encoder_mode_count = 0;
-#endif
- set_indicator_colors(encoder_modes[ encoder_mode_count ].indicator_color);
-};
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [0] = LAYOUT_ortho_4x12(
- KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, ECLICK ,
- KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
- KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT ,
- KC_LCTL, KC_LALT, KC_LGUI, _______, MO(1), KC_SPC, KC_SPC, MO(2), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
- ),
- [1] = LAYOUT_ortho_4x12(
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- 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] = LAYOUT_ortho_4x12(
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
- ),
- [3] = LAYOUT_ortho_4x12(
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
- )
-};
-
-// ------------------------------------------------------------------------------------------------
-
-bool is_alt_tab_active = false; // Flag to check if alt tab is active
-uint32_t alt_tab_timer = 0; // Time trigger for alt tab
-uint16_t mapped_code = 0;
-uint32_t held_keycode_timer = 0;
-
-int current_layer = 0 ; // Updated in layer_state_set_user each time a layer change is made
-
-void cycle_encoder_mode(bool forward){
- if (forward) encoder_mode_count++ ; // Shifts encoder mode forward
- else encoder_mode_count-- ;
- if (encoder_mode_count == -1) encoder_mode_count = NUM_ENCODER_MODES - 1;
- // Shifts encoder mode backward
- encoder_mode_count = encoder_mode_count % NUM_ENCODER_MODES ; // This makes sure encoder_mode_count keeps cycling between 0,1,...,NUM_ENCODER_MODES and doesnt eventually overflow
-#ifdef PERSISTENT_ENCODER_MODES
- user_config.user_encoder_mode_count = encoder_mode_count ;
- eeconfig_update_user(user_config.raw);
-#endif
- set_indicator_colors( encoder_modes[ encoder_mode_count ].indicator_color ); // Set indicator color to the corresponding defined color
-}
-
-bool encoder_update_user(uint8_t index, bool clockwise) {
- process_special_keycode(clockwise ? encoder_modes[ encoder_mode_count ].clockwise_key[ current_layer ] : encoder_modes[ encoder_mode_count ].counterclockwise_key[ current_layer ]);
- return false;
-}
-
-uint32_t held_click_timer = 0;
-bool is_click_held = false;
-bool is_shift_held = false;
-bool automatic_hold_cycle = false; // This flag registers if the encoder hold was automatically cycled
-
-// This bool records if LALT is pressed or not. Due to the automatic disabling of the ALT-TAB of the ALTTABS custom keystroke, the automatic disabling can un-register KC_LALT even when the LALT key is phisically pressed. Hence there needs to be two bools: one that keebs track of the ALT-TAB activity and one that keeps track of LALT so that the automatic disabling will not disable LALT if it is phisically pressed.
-bool is_lalt_pressed = false;
-
-bool process_record_user(uint16_t keycode, keyrecord_t *record) {
- switch (keycode) {
- case KC_LSFT:
- case KC_RSFT:
- if (record->event.pressed) is_shift_held = true;
- else is_shift_held = false;
- return true;
- case ECLICK:
- // Checks if the encoder has been pressed; if so, sets the corresponding flag and starts the corresponding timer
- if (record->event.pressed) {
- is_click_held = true;
- held_click_timer = timer_read32();
- // Checks if the encoder has been released: samples the duration of the encoder push; if this time was less than the encoder_click_delay, processes the clicked key. If it was bigger, processes the hold key. This behavior is adjusted using the ENCODER_MODE_CHANGE_DELAY macro. There is an exception made when automatic_hold_cycle is true; this means that the encoder push has been pressed enough to trigger a hold cycle. This case is taken care of in the housekeeping routine, where the held key is triggered and the timer reset. Hence the automatic_hold_cycle needs to be checked because without this check the function will trigger the clicked key after the hold cycle has been cycled more than once.
- } else {
- is_click_held = false;
- if (timer_elapsed32(held_click_timer) < encoder_click_delay && !automatic_hold_cycle ) process_special_keycode( encoder_modes[ encoder_mode_count ].clicked_key[ current_layer ] ) ;
- automatic_hold_cycle = false;
- }
- return true; // Skip all further processing of this key
- case KC_LALT: // If this is not defined, if the encoder is activated in the alt-tab mode while the LALT key is pressed, the menu goes away.
- if (record->event.pressed) is_lalt_pressed = true;
- else is_lalt_pressed = false;
- return true;
- case ENCMUP:
- case ENCMDN:
- if (record->event.pressed) cycle_encoder_mode(keycode == ENCMUP); // If keycode == ENCMUP the expression returns true and the cycle function cycles the modes forward. If not, then cycles backwards.
- return false;
- case ALTTABF:
- case ALTTABB:
- if (record->event.pressed) {
- if (!is_alt_tab_active) {
- is_alt_tab_active = true;
- register_code(KC_LALT);
-
- }
- tap_code16(keycode == ALTTABF ? KC_TAB : S(KC_TAB)); // Due to S(KC_TAB), the 16-bit tap_code16 is needed.
- alt_tab_timer = timer_read32();
- }
- return true;
- case ALTTABC:
- if (record->event.pressed) {
- if (is_alt_tab_active) {
- if (!is_lalt_pressed) unregister_code(KC_LALT);
- is_alt_tab_active = false;
- }
- }
- return false;
- default:
- return true; // Process all other keycodes normally
- }
-}
-
-void housekeeping_task_user(void) {
- if (is_alt_tab_active) {
- if (is_lalt_pressed) alt_tab_timer = timer_read32();
- else if (timer_elapsed32(alt_tab_timer) > ALT_TAB_DELAY) {
- unregister_code(KC_LALT);
- is_alt_tab_active = false;
- }
- }
-/* This piece of the code checks for the encoder push timer. If the encoder push interval was less than encoder_click_delay then it is automatically processed by process_record_user by triggering the current mode's click key. However, if the encoder push is held for more time than the defined delay, then the encoder hold "cycles", that is, gets activated and the timer needs to be reset. This does three things:
-- (1) Sets the automatic_hold_cycle flag which prevents process_record_user from triggering the click key when the push is released
-- (2) Processes the current mode's hold key in process_record_user
-- (3) Resets the click timer
-*/
- if (is_click_held && timer_elapsed32(held_click_timer) > encoder_click_delay ){
- automatic_hold_cycle = true;
- process_special_keycode( encoder_modes[ encoder_mode_count ].hold_key );
- held_click_timer = timer_read32();
- }
-}
diff --git a/keyboards/acheron/shark/beta/rules.mk b/keyboards/acheron/shark/beta/rules.mk
index a398475a3eb5..94335efa29fc 100644
--- a/keyboards/acheron/shark/beta/rules.mk
+++ b/keyboards/acheron/shark/beta/rules.mk
@@ -12,6 +12,3 @@ RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
AUDIO_ENABLE = no # Audio output
LTO_ENABLE = no
ENCODER_ENABLE = yes
-
-EEPROM_DRIVER = i2c
-
diff --git a/keyboards/acheron/themis/87h/87h.c b/keyboards/acheron/themis/87h/87h.c
new file mode 100644
index 000000000000..dada30ff873f
--- /dev/null
+++ b/keyboards/acheron/themis/87h/87h.c
@@ -0,0 +1,25 @@
+/* Copyright 2023 Gondolindrim
+ *
+ * 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 .
+ */
+
+#include "quantum.h"
+
+bool led_update_kb(led_t led_state) {
+ bool res = led_update_user(led_state);
+ if(res) {
+ led_state.caps_lock ? rgblight_setrgb_at(0xAA,0xAA,0xAA,0) : rgblight_setrgb_at(0x00,0x00,0x00,0) ;
+ }
+ return res;
+}
diff --git a/keyboards/acheron/themis/87h/config.h b/keyboards/acheron/themis/87h/config.h
new file mode 100644
index 000000000000..605594eea209
--- /dev/null
+++ b/keyboards/acheron/themis/87h/config.h
@@ -0,0 +1,30 @@
+/*
+Copyright 2023 Gondolindrim
+
+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 .
+*/
+
+#pragma once
+
+#define LOCKING_SUPPORT_ENABLE
+#define LOCKING_RESYNC_ENABLE
+
+#define RGBLED_NUM 1
+
+#define WS2812_PWM_COMPLEMENTARY_OUTPUT
+#define WS2812_PWM_DRIVER PWMD1
+#define WS2812_PWM_CHANNEL 3
+#define WS2812_PWM_PAL_MODE 1
+#define WS2812_DMA_STREAM STM32_DMA2_STREAM5
+#define WS2812_DMA_CHANNEL 6
diff --git a/keyboards/acheron/themis/87h/halconf.h b/keyboards/acheron/themis/87h/halconf.h
new file mode 100644
index 000000000000..485d48ef3067
--- /dev/null
+++ b/keyboards/acheron/themis/87h/halconf.h
@@ -0,0 +1,22 @@
+/* Copyright 2020 QMK
+ *
+ * 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 .
+ */
+
+#pragma once
+
+#define HAL_USE_PWM TRUE
+#define HAL_USE_PAL TRUE
+
+#include_next
diff --git a/keyboards/acheron/themis/87h/info.json b/keyboards/acheron/themis/87h/info.json
new file mode 100644
index 000000000000..cbff8f4eec55
--- /dev/null
+++ b/keyboards/acheron/themis/87h/info.json
@@ -0,0 +1,141 @@
+{
+ "keyboard_name": "Themis 87H Rev. Alpha",
+ "usb": {
+ "pid": "0x5448",
+ "device_version": "0.0.1"
+ },
+ "matrix_pins": {
+ "cols": ["A8" ,"C9" ,"C8" ,"B14","B12","B10","B1" ,"B0" ,"A7" ,"A6" ,"A5" ,"A4" ,"C5" ,"C7" ,"B3" ,"A2" ,"C12","D2" ],
+ "rows": ["A15","A10","C6" ,"C4" ,"A3" ,"A1" ,"C11","C10","B4"]
+ },
+ "features": {
+ "bootmagic": true,
+ "lto": true,
+ "mousekey": true,
+ "extrakey": true,
+ "console": false,
+ "backlight": false,
+ "rgblight": true,
+ "audio": false,
+ "encoder": false,
+ "nkro": true
+ },
+ "diode_direction": "COL2ROW",
+ "eeprom": {
+ "wear_leveling": {
+ "backing_size": 8192
+ }
+ },
+ "ws2812": {
+ "pin": "B15"
+ },
+ "processor": "STM32F401",
+ "bootloader": "stm32-dfu",
+ "community_layouts": ["tkl_ansi"],
+ "layouts": {
+ "LAYOUT_tkl_ansi": {
+ "layout": [
+ {"label":"Escape", "matrix": [0, 0], "x": 0, "y": 0},
+
+ {"label":"F1", "matrix": [0, 1], "x": 2, "y": 0},
+ {"label":"F2", "matrix": [0, 2], "x": 3, "y": 0},
+ {"label":"F3", "matrix": [0, 3], "x": 4, "y": 0},
+ {"label":"F4", "matrix": [0, 4], "x": 5, "y": 0},
+
+ {"label":"F5", "matrix": [0, 5], "x": 6.5, "y": 0},
+ {"label":"F6", "matrix": [0, 6], "x": 7.5, "y": 0},
+ {"label":"F7", "matrix": [0, 7], "x": 8.5, "y": 0},
+ {"label":"F8", "matrix": [0, 8], "x": 9.5, "y": 0},
+
+ {"label":"F9", "matrix": [0, 9], "x": 11, "y": 0},
+ {"label":"F10", "matrix": [0, 10], "x": 12, "y": 0},
+ {"label":"F11", "matrix": [0, 11], "x": 13, "y": 0},
+ {"label":"F12", "matrix": [0, 12], "x": 14, "y": 0},
+
+ {"label":"Print Screen", "matrix": [6, 14], "x": 15.25, "y": 0},
+ {"label":"Scroll Lock", "matrix": [6, 17], "x": 16.25, "y": 0},
+ {"label":"Pause", "matrix": [6, 16], "x": 17.25, "y": 0},
+
+ {"label":"`~", "matrix": [1, 0], "x": 0, "y": 1.25},
+ {"label":"1!", "matrix": [1, 1], "x": 1, "y": 1.25},
+ {"label":"2@", "matrix": [1, 2], "x": 2, "y": 1.25},
+ {"label":"3#", "matrix": [1, 3], "x": 3, "y": 1.25},
+ {"label":"4$", "matrix": [1, 4], "x": 4, "y": 1.25},
+ {"label":"5%", "matrix": [1, 5], "x": 5, "y": 1.25},
+ {"label":"6^", "matrix": [1, 6], "x": 6, "y": 1.25},
+ {"label":"7&", "matrix": [1, 7], "x": 7, "y": 1.25},
+ {"label":"8*", "matrix": [1, 8], "x": 8, "y": 1.25},
+ {"label":"9(", "matrix": [1, 9], "x": 9, "y": 1.25},
+ {"label":"0)", "matrix": [1, 10], "x": 10, "y": 1.25},
+ {"label":"-_", "matrix": [1, 11], "x": 11, "y": 1.25},
+ {"label":"=+", "matrix": [1, 12], "x": 12, "y": 1.25},
+ {"label":"Backspace", "matrix": [1, 13], "x": 13, "y": 1.25, "w": 2},
+
+ {"label":"Insert", "matrix": [7, 14], "x": 15.25, "y": 1.25},
+ {"label":"Home", "matrix": [7, 17], "x": 16.25, "y": 1.25},
+ {"label":"Page Up","matrix": [7, 16], "x": 17.25, "y": 1.25},
+
+ {"label":"Tab", "matrix": [2, 0], "x": 0, "y": 2.25, "w": 1.5},
+ {"label":"Q", "matrix": [2, 1], "x": 1.5, "y": 2.25},
+ {"label":"W", "matrix": [2, 2], "x": 2.5, "y": 2.25},
+ {"label":"E", "matrix": [2, 3], "x": 3.5, "y": 2.25},
+ {"label":"R", "matrix": [2, 4], "x": 4.5, "y": 2.25},
+ {"label":"T", "matrix": [2, 5], "x": 5.5, "y": 2.25},
+ {"label":"Y", "matrix": [2, 6], "x": 6.5, "y": 2.25},
+ {"label":"U", "matrix": [2, 7], "x": 7.5, "y": 2.25},
+ {"label":"I", "matrix": [2, 8], "x": 8.5, "y": 2.25},
+ {"label":"O", "matrix": [2, 9], "x": 9.5, "y": 2.25},
+ {"label":"P", "matrix": [2, 10], "x": 10.5, "y": 2.25},
+ {"label":"[{", "matrix": [2, 11], "x": 11.5, "y": 2.25},
+ {"label":"]}", "matrix": [2, 12], "x": 12.5, "y": 2.25},
+ {"label":"\\|", "matrix": [2, 13], "x": 13.5, "y": 2.25, "w": 1.5},
+
+ {"label":"Delete", "matrix": [8, 14], "x": 15.25, "y": 2.25},
+ {"label":"End", "matrix": [8, 17], "x": 16.25, "y": 2.25},
+ {"label":"Page Down", "matrix": [8, 16], "x": 17.25, "y": 2.25},
+
+ {"label":"Caps Lock", "matrix": [3, 0], "x": 0, "y": 3.25, "w": 1.75},
+ {"label":"A", "matrix": [3, 1], "x": 1.75, "y": 3.25},
+ {"label":"S", "matrix": [3, 2], "x": 2.75, "y": 3.25},
+ {"label":"D", "matrix": [3, 3], "x": 3.75, "y": 3.25},
+ {"label":"F", "matrix": [3, 4], "x": 4.75, "y": 3.25},
+ {"label":"G", "matrix": [3, 5], "x": 5.75, "y": 3.25},
+ {"label":"H", "matrix": [3, 6], "x": 6.75, "y": 3.25},
+ {"label":"J", "matrix": [3, 7], "x": 7.75, "y": 3.25},
+ {"label":"K", "matrix": [3, 8], "x": 8.75, "y": 3.25},
+ {"label":"L", "matrix": [3, 9], "x": 9.75, "y": 3.25},
+ {"label":";:", "matrix": [3, 10], "x": 10.75, "y": 3.25},
+ {"label":"\'\"", "matrix": [3, 11], "x": 11.75, "y": 3.25},
+ {"label":"Enter", "matrix": [3, 12], "x": 12.75, "y": 3.25, "w": 2.25},
+
+ {"label":"Shift", "matrix": [4, 0], "x": 0, "y": 4.25, "w": 2.25},
+ {"label":"Z", "matrix": [4, 2], "x": 2.25, "y": 4.25},
+ {"label":"X", "matrix": [4, 3], "x": 3.25, "y": 4.25},
+ {"label":"C", "matrix": [4, 4], "x": 4.25, "y": 4.25},
+ {"label":"V", "matrix": [4, 5], "x": 5.25, "y": 4.25},
+ {"label":"B", "matrix": [4, 6], "x": 6.25, "y": 4.25},
+ {"label":"N", "matrix": [4, 7], "x": 7.25, "y": 4.25},
+ {"label":"M", "matrix": [4, 8], "x": 8.25, "y": 4.25},
+ {"label":",<", "matrix": [4, 9], "x": 9.25, "y": 4.25},
+ {"label":".>", "matrix": [4, 10], "x": 10.25, "y": 4.25},
+ {"label":"/?", "matrix": [4, 11], "x": 11.25, "y": 4.25},
+ {"label":"Shift", "matrix": [4, 12], "x": 12.25, "y": 4.25, "w": 2.75},
+
+ {"label":"Up", "matrix": [4, 15], "x": 16.25, "y": 4.25},
+
+ {"label":"LCtrl", "matrix": [5, 0], "x": 0, "y": 5.25, "w": 1.25},
+ {"label":"Lwin", "matrix": [5, 1], "x": 1.25, "y": 5.25, "w": 1.25},
+ {"label":"LAlt", "matrix": [5, 2], "x": 2.5, "y": 5.25, "w": 1.25},
+ {"label":"Space", "matrix": [5, 6], "x": 3.75, "y": 5.25, "w": 6.25},
+ {"label":"RAlt", "matrix": [5, 9], "x": 10, "y": 5.25, "w": 1.25},
+ {"label":"RWin", "matrix": [5, 10], "x": 11.25, "y": 5.25, "w": 1.25},
+ {"label":"MO(1)", "matrix": [5, 11], "x": 12.5, "y": 5.25, "w": 1.25},
+ {"label":"RCtrl", "matrix": [5, 12], "x": 13.75, "y": 5.25, "w": 1.25},
+
+ {"label":"Left", "matrix": [5, 14], "x": 15.25, "y": 5.25},
+ {"label":"Down", "matrix": [5, 15], "x": 16.25, "y": 5.25},
+ {"label":"Right", "matrix": [5, 16], "x": 17.25, "y": 5.25}
+ ]
+ }
+ }
+}
diff --git a/keyboards/acheron/themis/87h/keymaps/default/keymap.c b/keyboards/acheron/themis/87h/keymaps/default/keymap.c
new file mode 100755
index 000000000000..4728331f05ff
--- /dev/null
+++ b/keyboards/acheron/themis/87h/keymaps/default/keymap.c
@@ -0,0 +1,37 @@
+/*
+Copyright 2020 Álvaro "Gondolindrim" Volpato
+
+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 .
+*/
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_tkl_ansi(
+ KC_ESC , KC_F1 , KC_F2 , KC_F3 , KC_F4 , KC_F5 , KC_F6 , KC_F7 , KC_F8 , KC_F9 , KC_F10 , KC_F11 , KC_F12 , KC_PSCR, KC_SCRL, KC_PAUS ,
+ 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_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_LCTL, KC_LGUI, KC_LALT, KC_SPC , KC_RALT, MO(1) , KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+ [1] = LAYOUT_tkl_ansi(
+ QK_BOOT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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_HUI, RGB_SAI, RGB_VAI, RGB_SPI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, RGB_TOG, RGB_MOD, RGB_HUD, RGB_SAD, RGB_VAD, RGB_SPD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ )
+};
diff --git a/keyboards/acheron/themis/87h/keymaps/via/keymap.c b/keyboards/acheron/themis/87h/keymaps/via/keymap.c
new file mode 100755
index 000000000000..4728331f05ff
--- /dev/null
+++ b/keyboards/acheron/themis/87h/keymaps/via/keymap.c
@@ -0,0 +1,37 @@
+/*
+Copyright 2020 Álvaro "Gondolindrim" Volpato
+
+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 .
+*/
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_tkl_ansi(
+ KC_ESC , KC_F1 , KC_F2 , KC_F3 , KC_F4 , KC_F5 , KC_F6 , KC_F7 , KC_F8 , KC_F9 , KC_F10 , KC_F11 , KC_F12 , KC_PSCR, KC_SCRL, KC_PAUS ,
+ 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_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_LCTL, KC_LGUI, KC_LALT, KC_SPC , KC_RALT, MO(1) , KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+ [1] = LAYOUT_tkl_ansi(
+ QK_BOOT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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_HUI, RGB_SAI, RGB_VAI, RGB_SPI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, RGB_TOG, RGB_MOD, RGB_HUD, RGB_SAD, RGB_VAD, RGB_SPD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ )
+};
diff --git a/keyboards/0xcb/1337/keymaps/conor/rules.mk b/keyboards/acheron/themis/87h/keymaps/via/rules.mk
similarity index 100%
rename from keyboards/0xcb/1337/keymaps/conor/rules.mk
rename to keyboards/acheron/themis/87h/keymaps/via/rules.mk
diff --git a/keyboards/acheron/themis/87h/mcuconf.h b/keyboards/acheron/themis/87h/mcuconf.h
new file mode 100644
index 000000000000..3d1d05c307c4
--- /dev/null
+++ b/keyboards/acheron/themis/87h/mcuconf.h
@@ -0,0 +1,25 @@
+/* Copyright 2020 QMK
+ *
+ * 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 .
+ */
+
+#pragma once
+
+#include_next
+
+#undef STM32_PWM_USE_ADVANCED
+#define STM32_PWM_USE_ADVANCED TRUE
+
+#undef STM32_PWM_USE_TIM1
+#define STM32_PWM_USE_TIM1 TRUE
diff --git a/keyboards/planck/keymaps/mitch/rules.mk b/keyboards/acheron/themis/87h/rules.mk
similarity index 100%
rename from keyboards/planck/keymaps/mitch/rules.mk
rename to keyboards/acheron/themis/87h/rules.mk
diff --git a/keyboards/acheron/themis/87htsc/87htsc.c b/keyboards/acheron/themis/87htsc/87htsc.c
new file mode 100644
index 000000000000..dada30ff873f
--- /dev/null
+++ b/keyboards/acheron/themis/87htsc/87htsc.c
@@ -0,0 +1,25 @@
+/* Copyright 2023 Gondolindrim
+ *
+ * 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 .
+ */
+
+#include "quantum.h"
+
+bool led_update_kb(led_t led_state) {
+ bool res = led_update_user(led_state);
+ if(res) {
+ led_state.caps_lock ? rgblight_setrgb_at(0xAA,0xAA,0xAA,0) : rgblight_setrgb_at(0x00,0x00,0x00,0) ;
+ }
+ return res;
+}
diff --git a/keyboards/acheron/themis/87htsc/config.h b/keyboards/acheron/themis/87htsc/config.h
new file mode 100644
index 000000000000..605594eea209
--- /dev/null
+++ b/keyboards/acheron/themis/87htsc/config.h
@@ -0,0 +1,30 @@
+/*
+Copyright 2023 Gondolindrim
+
+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 .
+*/
+
+#pragma once
+
+#define LOCKING_SUPPORT_ENABLE
+#define LOCKING_RESYNC_ENABLE
+
+#define RGBLED_NUM 1
+
+#define WS2812_PWM_COMPLEMENTARY_OUTPUT
+#define WS2812_PWM_DRIVER PWMD1
+#define WS2812_PWM_CHANNEL 3
+#define WS2812_PWM_PAL_MODE 1
+#define WS2812_DMA_STREAM STM32_DMA2_STREAM5
+#define WS2812_DMA_CHANNEL 6
diff --git a/keyboards/acheron/themis/87htsc/halconf.h b/keyboards/acheron/themis/87htsc/halconf.h
new file mode 100644
index 000000000000..485d48ef3067
--- /dev/null
+++ b/keyboards/acheron/themis/87htsc/halconf.h
@@ -0,0 +1,22 @@
+/* Copyright 2020 QMK
+ *
+ * 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 .
+ */
+
+#pragma once
+
+#define HAL_USE_PWM TRUE
+#define HAL_USE_PAL TRUE
+
+#include_next
diff --git a/keyboards/acheron/themis/87htsc/info.json b/keyboards/acheron/themis/87htsc/info.json
new file mode 100644
index 000000000000..5b491690bbc2
--- /dev/null
+++ b/keyboards/acheron/themis/87htsc/info.json
@@ -0,0 +1,140 @@
+{
+ "keyboard_name": "Themis 87H-T-SC Rev. Alpha",
+ "usb": {
+ "pid": "0x5449",
+ "device_version": "0.0.1"
+ },
+ "matrix_pins": {
+ "cols": ["A8" ,"C9" ,"C8" ,"B14","B12","B10","B1" ,"B0" ,"A7" ,"A6" ,"A5" ,"A4" ,"C5" ,"C7" ,"B3" ,"A2" ,"C12","D2" ],
+ "rows": ["A15","A10","C6" ,"C4" ,"A3" ,"A1" ,"C11","C10","B4"]
+ },
+ "features": {
+ "bootmagic": true,
+ "lto": true,
+ "mousekey": true,
+ "extrakey": true,
+ "console": false,
+ "backlight": false,
+ "rgblight": true,
+ "audio": false,
+ "encoder": false,
+ "nkro": true
+ },
+ "diode_direction": "COL2ROW",
+ "eeprom": {
+ "wear_leveling": {
+ "backing_size": 8192
+ }
+ },
+ "ws2812": {
+ "pin": "B15"
+ },
+ "processor": "STM32F401",
+ "bootloader": "stm32-dfu",
+ "community_layouts": ["tkl_ansi_tsangan"],
+ "layouts": {
+ "LAYOUT_tkl_ansi_tsangan": {
+ "layout": [
+ {"label":"Escape", "matrix": [0, 0], "x": 0, "y": 0},
+
+ {"label":"F1", "matrix": [0, 1], "x": 2, "y": 0},
+ {"label":"F2", "matrix": [0, 2], "x": 3, "y": 0},
+ {"label":"F3", "matrix": [0, 3], "x": 4, "y": 0},
+ {"label":"F4", "matrix": [0, 4], "x": 5, "y": 0},
+
+ {"label":"F5", "matrix": [0, 6], "x": 6.5, "y": 0},
+ {"label":"F6", "matrix": [0, 7], "x": 7.5, "y": 0},
+ {"label":"F7", "matrix": [0, 8], "x": 8.5, "y": 0},
+ {"label":"F8", "matrix": [0, 9], "x": 9.5, "y": 0},
+
+ {"label":"F9", "matrix": [0, 10], "x": 11, "y": 0},
+ {"label":"F10", "matrix": [0, 11], "x": 12, "y": 0},
+ {"label":"F11", "matrix": [0, 12], "x": 13, "y": 0},
+ {"label":"F12", "matrix": [0, 13], "x": 14, "y": 0},
+
+ {"label":"Print Screen", "matrix": [6, 14], "x": 15.25, "y": 0},
+ {"label":"Scroll Lock", "matrix": [6, 17], "x": 16.25, "y": 0},
+ {"label":"Pause", "matrix": [6, 16], "x": 17.25, "y": 0},
+
+ {"label":"`~", "matrix": [1, 0], "x": 0, "y": 1.25},
+ {"label":"1!", "matrix": [1, 1], "x": 1, "y": 1.25},
+ {"label":"2@", "matrix": [1, 2], "x": 2, "y": 1.25},
+ {"label":"3#", "matrix": [1, 3], "x": 3, "y": 1.25},
+ {"label":"4$", "matrix": [1, 4], "x": 4, "y": 1.25},
+ {"label":"5%", "matrix": [1, 5], "x": 5, "y": 1.25},
+ {"label":"6^", "matrix": [1, 6], "x": 6, "y": 1.25},
+ {"label":"7&", "matrix": [1, 7], "x": 7, "y": 1.25},
+ {"label":"8*", "matrix": [1, 8], "x": 8, "y": 1.25},
+ {"label":"9(", "matrix": [1, 9], "x": 9, "y": 1.25},
+ {"label":"0)", "matrix": [1, 10], "x": 10, "y": 1.25},
+ {"label":"-_", "matrix": [1, 11], "x": 11, "y": 1.25},
+ {"label":"=+", "matrix": [1, 12], "x": 12, "y": 1.25},
+ {"label":"Backspace", "matrix": [1, 13], "x": 13, "y": 1.25, "w": 2},
+
+ {"label":"Insert", "matrix": [7, 14], "x": 15.25, "y": 1.25},
+ {"label":"Home", "matrix": [7, 17], "x": 16.25, "y": 1.25},
+ {"label":"Page Up","matrix": [7, 16], "x": 17.25, "y": 1.25},
+
+ {"label":"Tab", "matrix": [2, 0], "x": 0, "y": 2.25, "w": 1.5},
+ {"label":"Q", "matrix": [2, 1], "x": 1.5, "y": 2.25},
+ {"label":"W", "matrix": [2, 2], "x": 2.5, "y": 2.25},
+ {"label":"E", "matrix": [2, 3], "x": 3.5, "y": 2.25},
+ {"label":"R", "matrix": [2, 4], "x": 4.5, "y": 2.25},
+ {"label":"T", "matrix": [2, 5], "x": 5.5, "y": 2.25},
+ {"label":"Y", "matrix": [2, 6], "x": 6.5, "y": 2.25},
+ {"label":"U", "matrix": [2, 7], "x": 7.5, "y": 2.25},
+ {"label":"I", "matrix": [2, 8], "x": 8.5, "y": 2.25},
+ {"label":"O", "matrix": [2, 9], "x": 9.5, "y": 2.25},
+ {"label":"P", "matrix": [2, 10], "x": 10.5, "y": 2.25},
+ {"label":"[{", "matrix": [2, 11], "x": 11.5, "y": 2.25},
+ {"label":"]}", "matrix": [2, 12], "x": 12.5, "y": 2.25},
+ {"label":"\\|", "matrix": [2, 13], "x": 13.5, "y": 2.25, "w": 1.5},
+
+ {"label":"Delete", "matrix": [8, 14], "x": 15.25, "y": 2.25},
+ {"label":"End", "matrix": [8, 17], "x": 16.25, "y": 2.25},
+ {"label":"Page Down", "matrix": [8, 16], "x": 17.25, "y": 2.25},
+
+ {"label":"Caps Lock", "matrix": [3, 0], "x": 0, "y": 3.25, "w": 1.75},
+ {"label":"A", "matrix": [3, 1], "x": 1.75, "y": 3.25},
+ {"label":"S", "matrix": [3, 2], "x": 2.75, "y": 3.25},
+ {"label":"D", "matrix": [3, 3], "x": 3.75, "y": 3.25},
+ {"label":"F", "matrix": [3, 4], "x": 4.75, "y": 3.25},
+ {"label":"G", "matrix": [3, 5], "x": 5.75, "y": 3.25},
+ {"label":"H", "matrix": [3, 6], "x": 6.75, "y": 3.25},
+ {"label":"J", "matrix": [3, 7], "x": 7.75, "y": 3.25},
+ {"label":"K", "matrix": [3, 8], "x": 8.75, "y": 3.25},
+ {"label":"L", "matrix": [3, 9], "x": 9.75, "y": 3.25},
+ {"label":";:", "matrix": [3, 10], "x": 10.75, "y": 3.25},
+ {"label":"\'\"", "matrix": [3, 11], "x": 11.75, "y": 3.25},
+ {"label":"Enter", "matrix": [3, 12], "x": 12.75, "y": 3.25, "w": 2.25},
+
+ {"label":"Shift", "matrix": [4, 0], "x": 0, "y": 4.25, "w": 2.25},
+ {"label":"Z", "matrix": [4, 2], "x": 2.25, "y": 4.25},
+ {"label":"X", "matrix": [4, 3], "x": 3.25, "y": 4.25},
+ {"label":"C", "matrix": [4, 4], "x": 4.25, "y": 4.25},
+ {"label":"V", "matrix": [4, 5], "x": 5.25, "y": 4.25},
+ {"label":"B", "matrix": [4, 6], "x": 6.25, "y": 4.25},
+ {"label":"N", "matrix": [4, 7], "x": 7.25, "y": 4.25},
+ {"label":"M", "matrix": [4, 8], "x": 8.25, "y": 4.25},
+ {"label":",<", "matrix": [4, 9], "x": 9.25, "y": 4.25},
+ {"label":".>", "matrix": [4, 10], "x": 10.25, "y": 4.25},
+ {"label":"/?", "matrix": [4, 11], "x": 11.25, "y": 4.25},
+ {"label":"Shift", "matrix": [4, 12], "x": 12.25, "y": 4.25, "w": 2.75},
+
+ {"label":"Up", "matrix": [4, 15], "x": 16.25, "y": 4.25},
+
+ {"label":"LCtrl", "matrix": [5, 0], "x": 0, "y": 5.25, "w": 1.5},
+ {"label":"Lwin", "matrix": [5, 1], "x": 1.5, "y": 5.25},
+ {"label":"LAlt", "matrix": [5, 2], "x": 2.5, "y": 5.25, "w": 1.5},
+ {"label":"Space", "matrix": [5, 6], "x": 4, "y": 5.25, "w": 6.25},
+ {"label":"RAlt", "matrix": [5, 10], "x": 11, "y": 5.25, "w": 1.5},
+ {"label":"RWin", "matrix": [5, 11], "x": 12.5, "y": 5.25},
+ {"label":"RCtrl", "matrix": [5, 12], "x": 13.5, "y": 5.25, "w": 1.5},
+
+ {"label":"Left", "matrix": [5, 14], "x": 15.25, "y": 5.25},
+ {"label":"Down", "matrix": [5, 15], "x": 16.25, "y": 5.25},
+ {"label":"Right", "matrix": [5, 16], "x": 17.25, "y": 5.25}
+ ]
+ }
+ }
+}
diff --git a/keyboards/acheron/themis/87htsc/keymaps/default/keymap.c b/keyboards/acheron/themis/87htsc/keymaps/default/keymap.c
new file mode 100755
index 000000000000..7b29220ec8d4
--- /dev/null
+++ b/keyboards/acheron/themis/87htsc/keymaps/default/keymap.c
@@ -0,0 +1,37 @@
+/*
+Copyright 2023 Gondolindrim
+
+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 .
+*/
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_tkl_ansi_tsangan(
+ 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_SCRL, KC_PAUS ,
+ 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_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_LCTL, KC_LGUI, KC_LALT, KC_SPC , KC_RALT, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+ [1] = LAYOUT_tkl_ansi_tsangan(
+ QK_BOOT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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_HUI, RGB_SAI, RGB_VAI, RGB_SPI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, RGB_TOG, RGB_MOD, RGB_HUD, RGB_SAD, RGB_VAD, RGB_SPD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ )
+};
diff --git a/keyboards/acheron/themis/87htsc/keymaps/via/keymap.c b/keyboards/acheron/themis/87htsc/keymaps/via/keymap.c
new file mode 100755
index 000000000000..7b29220ec8d4
--- /dev/null
+++ b/keyboards/acheron/themis/87htsc/keymaps/via/keymap.c
@@ -0,0 +1,37 @@
+/*
+Copyright 2023 Gondolindrim
+
+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 .
+*/
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_tkl_ansi_tsangan(
+ 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_SCRL, KC_PAUS ,
+ 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_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_LCTL, KC_LGUI, KC_LALT, KC_SPC , KC_RALT, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+ [1] = LAYOUT_tkl_ansi_tsangan(
+ QK_BOOT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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_HUI, RGB_SAI, RGB_VAI, RGB_SPI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, RGB_TOG, RGB_MOD, RGB_HUD, RGB_SAD, RGB_VAD, RGB_SPD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ )
+};
diff --git a/keyboards/0xcb/1337/keymaps/jakob/rules.mk b/keyboards/acheron/themis/87htsc/keymaps/via/rules.mk
similarity index 100%
rename from keyboards/0xcb/1337/keymaps/jakob/rules.mk
rename to keyboards/acheron/themis/87htsc/keymaps/via/rules.mk
diff --git a/keyboards/acheron/themis/87htsc/mcuconf.h b/keyboards/acheron/themis/87htsc/mcuconf.h
new file mode 100644
index 000000000000..3d1d05c307c4
--- /dev/null
+++ b/keyboards/acheron/themis/87htsc/mcuconf.h
@@ -0,0 +1,25 @@
+/* Copyright 2020 QMK
+ *
+ * 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 .
+ */
+
+#pragma once
+
+#include_next
+
+#undef STM32_PWM_USE_ADVANCED
+#define STM32_PWM_USE_ADVANCED TRUE
+
+#undef STM32_PWM_USE_TIM1
+#define STM32_PWM_USE_TIM1 TRUE
diff --git a/layouts/community/65_ansi/mechmerlin/rules.mk b/keyboards/acheron/themis/87htsc/rules.mk
similarity index 100%
rename from layouts/community/65_ansi/mechmerlin/rules.mk
rename to keyboards/acheron/themis/87htsc/rules.mk
diff --git a/keyboards/acheron/themis/88htsc/88htsc.c b/keyboards/acheron/themis/88htsc/88htsc.c
new file mode 100644
index 000000000000..dada30ff873f
--- /dev/null
+++ b/keyboards/acheron/themis/88htsc/88htsc.c
@@ -0,0 +1,25 @@
+/* Copyright 2023 Gondolindrim
+ *
+ * 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 .
+ */
+
+#include "quantum.h"
+
+bool led_update_kb(led_t led_state) {
+ bool res = led_update_user(led_state);
+ if(res) {
+ led_state.caps_lock ? rgblight_setrgb_at(0xAA,0xAA,0xAA,0) : rgblight_setrgb_at(0x00,0x00,0x00,0) ;
+ }
+ return res;
+}
diff --git a/keyboards/acheron/themis/88htsc/config.h b/keyboards/acheron/themis/88htsc/config.h
new file mode 100644
index 000000000000..605594eea209
--- /dev/null
+++ b/keyboards/acheron/themis/88htsc/config.h
@@ -0,0 +1,30 @@
+/*
+Copyright 2023 Gondolindrim
+
+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 .
+*/
+
+#pragma once
+
+#define LOCKING_SUPPORT_ENABLE
+#define LOCKING_RESYNC_ENABLE
+
+#define RGBLED_NUM 1
+
+#define WS2812_PWM_COMPLEMENTARY_OUTPUT
+#define WS2812_PWM_DRIVER PWMD1
+#define WS2812_PWM_CHANNEL 3
+#define WS2812_PWM_PAL_MODE 1
+#define WS2812_DMA_STREAM STM32_DMA2_STREAM5
+#define WS2812_DMA_CHANNEL 6
diff --git a/keyboards/acheron/themis/88htsc/halconf.h b/keyboards/acheron/themis/88htsc/halconf.h
new file mode 100644
index 000000000000..485d48ef3067
--- /dev/null
+++ b/keyboards/acheron/themis/88htsc/halconf.h
@@ -0,0 +1,22 @@
+/* Copyright 2020 QMK
+ *
+ * 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 .
+ */
+
+#pragma once
+
+#define HAL_USE_PWM TRUE
+#define HAL_USE_PAL TRUE
+
+#include_next
diff --git a/keyboards/acheron/themis/88htsc/info.json b/keyboards/acheron/themis/88htsc/info.json
new file mode 100644
index 000000000000..073a16e94616
--- /dev/null
+++ b/keyboards/acheron/themis/88htsc/info.json
@@ -0,0 +1,142 @@
+{
+ "keyboard_name": "Themis 88H-T-SC Rev. Alpha",
+ "usb": {
+ "pid": "0x5450",
+ "device_version": "0.0.1"
+ },
+ "matrix_pins": {
+ "cols": ["A8" ,"C9" ,"C8" ,"B14","B12","B10","B1" ,"B0" ,"A7" ,"A6" ,"A5" ,"A4" ,"C5" ,"C7" ,"B3" ,"A2" ,"C12","D2" ],
+ "rows": ["A15","A10","C6" ,"C4" ,"A3" ,"A1" ,"C11","C10","B4"]
+ },
+ "features": {
+ "bootmagic": true,
+ "lto": true,
+ "mousekey": true,
+ "extrakey": true,
+ "console": false,
+ "backlight": false,
+ "rgblight": true,
+ "audio": false,
+ "encoder": false,
+ "nkro": true
+ },
+ "diode_direction": "COL2ROW",
+ "eeprom": {
+ "wear_leveling": {
+ "backing_size": 8192
+ }
+ },
+ "ws2812": {
+ "pin": "B15"
+ },
+ "processor": "STM32F401",
+ "bootloader": "stm32-dfu",
+ "community_layouts": ["tkl_f13_ansi_tsangan"],
+ "layouts": {
+ "LAYOUT_tkl_f13_ansi_tsangan": {
+ "layout": [
+ {"label":"Escape", "matrix": [0, 0], "x": 0, "y": 0},
+
+ {"label":"F1", "matrix": [0, 1], "x": 1.25, "y": 0},
+ {"label":"F2", "matrix": [0, 2], "x": 2.25, "y": 0},
+ {"label":"F3", "matrix": [0, 3], "x": 3.25, "y": 0},
+ {"label":"F4", "matrix": [0, 4], "x": 4.25, "y": 0},
+
+ {"label":"F5", "matrix": [0, 5], "x": 5.5, "y": 0},
+ {"label":"F6", "matrix": [0, 6], "x": 6.5, "y": 0},
+ {"label":"F7", "matrix": [0, 7], "x": 7.5, "y": 0},
+ {"label":"F8", "matrix": [0, 8], "x": 8.5, "y": 0},
+
+ {"label":"F9", "matrix": [0, 9], "x": 9.75, "y": 0},
+ {"label":"F10", "matrix": [0, 10], "x": 10.75, "y": 0},
+ {"label":"F11", "matrix": [0, 11], "x": 11.75, "y": 0},
+ {"label":"F12", "matrix": [0, 12], "x": 12.75, "y": 0},
+
+ {"label":"F13", "matrix": [0, 13], "x": 14, "y": 0},
+
+ {"label":"Print Screen", "matrix": [6, 14], "x": 15.25, "y": 0},
+ {"label":"Scroll Lock", "matrix": [6, 17], "x": 16.25, "y": 0},
+ {"label":"Pause", "matrix": [6, 16], "x": 17.25, "y": 0},
+
+ {"label":"`~", "matrix": [1, 0], "x": 0, "y": 1.25},
+ {"label":"1!", "matrix": [1, 1], "x": 1, "y": 1.25},
+ {"label":"2@", "matrix": [1, 2], "x": 2, "y": 1.25},
+ {"label":"3#", "matrix": [1, 3], "x": 3, "y": 1.25},
+ {"label":"4$", "matrix": [1, 4], "x": 4, "y": 1.25},
+ {"label":"5%", "matrix": [1, 5], "x": 5, "y": 1.25},
+ {"label":"6^", "matrix": [1, 6], "x": 6, "y": 1.25},
+ {"label":"7&", "matrix": [1, 7], "x": 7, "y": 1.25},
+ {"label":"8*", "matrix": [1, 8], "x": 8, "y": 1.25},
+ {"label":"9(", "matrix": [1, 9], "x": 9, "y": 1.25},
+ {"label":"0)", "matrix": [1, 10], "x": 10, "y": 1.25},
+ {"label":"-_", "matrix": [1, 11], "x": 11, "y": 1.25},
+ {"label":"=+", "matrix": [1, 12], "x": 12, "y": 1.25},
+ {"label":"Backspace", "matrix": [1, 13], "x": 13, "y": 1.25, "w": 2},
+
+ {"label":"Insert", "matrix": [7, 14], "x": 15.25, "y": 1.25},
+ {"label":"Home", "matrix": [7, 17], "x": 16.25, "y": 1.25},
+ {"label":"Page Up","matrix": [7, 16], "x": 17.25, "y": 1.25},
+
+ {"label":"Tab", "matrix": [2, 0], "x": 0, "y": 2.25, "w": 1.5},
+ {"label":"Q", "matrix": [2, 1], "x": 1.5, "y": 2.25},
+ {"label":"W", "matrix": [2, 2], "x": 2.5, "y": 2.25},
+ {"label":"E", "matrix": [2, 3], "x": 3.5, "y": 2.25},
+ {"label":"R", "matrix": [2, 4], "x": 4.5, "y": 2.25},
+ {"label":"T", "matrix": [2, 5], "x": 5.5, "y": 2.25},
+ {"label":"Y", "matrix": [2, 6], "x": 6.5, "y": 2.25},
+ {"label":"U", "matrix": [2, 7], "x": 7.5, "y": 2.25},
+ {"label":"I", "matrix": [2, 8], "x": 8.5, "y": 2.25},
+ {"label":"O", "matrix": [2, 9], "x": 9.5, "y": 2.25},
+ {"label":"P", "matrix": [2, 10], "x": 10.5, "y": 2.25},
+ {"label":"[{", "matrix": [2, 11], "x": 11.5, "y": 2.25},
+ {"label":"]}", "matrix": [2, 12], "x": 12.5, "y": 2.25},
+ {"label":"\\|", "matrix": [2, 13], "x": 13.5, "y": 2.25, "w": 1.5},
+
+ {"label":"Delete", "matrix": [8, 14], "x": 15.25, "y": 2.25},
+ {"label":"End", "matrix": [8, 17], "x": 16.25, "y": 2.25},
+ {"label":"Page Down", "matrix": [8, 16], "x": 17.25, "y": 2.25},
+
+ {"label":"Caps Lock", "matrix": [3, 0], "x": 0, "y": 3.25, "w": 1.75},
+ {"label":"A", "matrix": [3, 1], "x": 1.75, "y": 3.25},
+ {"label":"S", "matrix": [3, 2], "x": 2.75, "y": 3.25},
+ {"label":"D", "matrix": [3, 3], "x": 3.75, "y": 3.25},
+ {"label":"F", "matrix": [3, 4], "x": 4.75, "y": 3.25},
+ {"label":"G", "matrix": [3, 5], "x": 5.75, "y": 3.25},
+ {"label":"H", "matrix": [3, 6], "x": 6.75, "y": 3.25},
+ {"label":"J", "matrix": [3, 7], "x": 7.75, "y": 3.25},
+ {"label":"K", "matrix": [3, 8], "x": 8.75, "y": 3.25},
+ {"label":"L", "matrix": [3, 9], "x": 9.75, "y": 3.25},
+ {"label":";:", "matrix": [3, 10], "x": 10.75, "y": 3.25},
+ {"label":"\'\"", "matrix": [3, 11], "x": 11.75, "y": 3.25},
+ {"label":"Enter", "matrix": [3, 12], "x": 12.75, "y": 3.25, "w": 2.25},
+
+ {"label":"Shift", "matrix": [4, 0], "x": 0, "y": 4.25, "w": 2.25},
+ {"label":"Z", "matrix": [4, 2], "x": 2.25, "y": 4.25},
+ {"label":"X", "matrix": [4, 3], "x": 3.25, "y": 4.25},
+ {"label":"C", "matrix": [4, 4], "x": 4.25, "y": 4.25},
+ {"label":"V", "matrix": [4, 5], "x": 5.25, "y": 4.25},
+ {"label":"B", "matrix": [4, 6], "x": 6.25, "y": 4.25},
+ {"label":"N", "matrix": [4, 7], "x": 7.25, "y": 4.25},
+ {"label":"M", "matrix": [4, 8], "x": 8.25, "y": 4.25},
+ {"label":",<", "matrix": [4, 9], "x": 9.25, "y": 4.25},
+ {"label":".>", "matrix": [4, 10], "x": 10.25, "y": 4.25},
+ {"label":"/?", "matrix": [4, 11], "x": 11.25, "y": 4.25},
+ {"label":"Shift", "matrix": [4, 12], "x": 12.25, "y": 4.25, "w": 2.75},
+
+ {"label":"Up", "matrix": [4, 15], "x": 16.25, "y": 4.25},
+
+ {"label":"LCtrl", "matrix": [5, 0], "x": 0, "y": 5.25, "w": 1.5},
+ {"label":"Lwin", "matrix": [5, 1], "x": 1.5, "y": 5.25},
+ {"label":"LAlt", "matrix": [5, 2], "x": 2.5, "y": 5.25, "w": 1.5},
+ {"label":"Space", "matrix": [5, 6], "x": 4, "y": 5.25, "w": 6.25},
+ {"label":"RAlt", "matrix": [5, 10], "x": 11, "y": 5.25, "w": 1.5},
+ {"label":"RWin", "matrix": [5, 11], "x": 12.5, "y": 5.25},
+ {"label":"RCtrl", "matrix": [5, 12], "x": 13.5, "y": 5.25, "w": 1.5},
+
+ {"label":"Left", "matrix": [5, 14], "x": 15.25, "y": 5.25},
+ {"label":"Down", "matrix": [5, 15], "x": 16.25, "y": 5.25},
+ {"label":"Right", "matrix": [5, 16], "x": 17.25, "y": 5.25}
+ ]
+ }
+ }
+}
diff --git a/keyboards/acheron/themis/88htsc/keymaps/default/keymap.c b/keyboards/acheron/themis/88htsc/keymaps/default/keymap.c
new file mode 100755
index 000000000000..725b294b0d65
--- /dev/null
+++ b/keyboards/acheron/themis/88htsc/keymaps/default/keymap.c
@@ -0,0 +1,37 @@
+/*
+Copyright 2023 Gondolindrim
+
+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 .
+*/
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_tkl_f13_ansi_tsangan(
+ 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_F13, KC_PSCR, KC_SCRL, KC_PAUS ,
+ 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_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_LCTL, KC_LGUI, KC_LALT, KC_SPC , KC_RALT, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+ [1] = LAYOUT_tkl_f13_ansi_tsangan(
+ QK_BOOT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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_HUI, RGB_SAI, RGB_VAI, RGB_SPI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, RGB_TOG, RGB_MOD, RGB_HUD, RGB_SAD, RGB_VAD, RGB_SPD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ )
+};
diff --git a/keyboards/acheron/themis/88htsc/keymaps/via/keymap.c b/keyboards/acheron/themis/88htsc/keymaps/via/keymap.c
new file mode 100755
index 000000000000..725b294b0d65
--- /dev/null
+++ b/keyboards/acheron/themis/88htsc/keymaps/via/keymap.c
@@ -0,0 +1,37 @@
+/*
+Copyright 2023 Gondolindrim
+
+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 .
+*/
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_tkl_f13_ansi_tsangan(
+ 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_F13, KC_PSCR, KC_SCRL, KC_PAUS ,
+ 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_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_LCTL, KC_LGUI, KC_LALT, KC_SPC , KC_RALT, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+ [1] = LAYOUT_tkl_f13_ansi_tsangan(
+ QK_BOOT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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_HUI, RGB_SAI, RGB_VAI, RGB_SPI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, RGB_TOG, RGB_MOD, RGB_HUD, RGB_SAD, RGB_VAD, RGB_SPD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ )
+};
diff --git a/keyboards/acheron/shark/beta/keymaps/gondolindrim/rules.mk b/keyboards/acheron/themis/88htsc/keymaps/via/rules.mk
similarity index 100%
rename from keyboards/acheron/shark/beta/keymaps/gondolindrim/rules.mk
rename to keyboards/acheron/themis/88htsc/keymaps/via/rules.mk
diff --git a/keyboards/acheron/themis/88htsc/mcuconf.h b/keyboards/acheron/themis/88htsc/mcuconf.h
new file mode 100644
index 000000000000..3d1d05c307c4
--- /dev/null
+++ b/keyboards/acheron/themis/88htsc/mcuconf.h
@@ -0,0 +1,25 @@
+/* Copyright 2020 QMK
+ *
+ * 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 .
+ */
+
+#pragma once
+
+#include_next
+
+#undef STM32_PWM_USE_ADVANCED
+#define STM32_PWM_USE_ADVANCED TRUE
+
+#undef STM32_PWM_USE_TIM1
+#define STM32_PWM_USE_TIM1 TRUE
diff --git a/layouts/community/ortho_4x12/alfrdmalr/rules.mk b/keyboards/acheron/themis/88htsc/rules.mk
similarity index 100%
rename from layouts/community/ortho_4x12/alfrdmalr/rules.mk
rename to keyboards/acheron/themis/88htsc/rules.mk
diff --git a/keyboards/acheron/themis/info.json b/keyboards/acheron/themis/info.json
new file mode 100644
index 000000000000..4f9d3b61e615
--- /dev/null
+++ b/keyboards/acheron/themis/info.json
@@ -0,0 +1,8 @@
+{
+ "manufacturer": "AcheronProject",
+ "url": "",
+ "maintainer": "Gondolindrim",
+ "usb": {
+ "vid": "0xAC11"
+ }
+}
diff --git a/keyboards/acheron/themis/readme.md b/keyboards/acheron/themis/readme.md
new file mode 100644
index 000000000000..8c0c7e63e54f
--- /dev/null
+++ b/keyboards/acheron/themis/readme.md
@@ -0,0 +1,23 @@
+# Acheron Themis QMK firmware
+
+![themis](https://i.imgur.com/kwemOsJh.png)
+
+The Themis is Acheron Project's open-source, freely available tenkeyless (TKL) keyboard Printed Circuit Boards (PCB) which features:
+
+- No LED lighting
+- Solderless ("hotswap") MX switches support
+- Fixed layout for each variant
+
+* Keyboard Maintainer: [Gondolindrim](https://github.com/Gondolindrim)
+* Hardware Supported: open-source PCB using the [Joker template](https://acheronproject.com/joker_mcus/joker/). First units were manufactured using STM32F4x1 microcontroller;
+* Hardware Availability: open-source PCBs
+
+In order to flash this PCB, first build the default layout (after setting up your build environment):
+
+ make acheron/themis/:default
+
+After building or downloading the firmware, put the PCB into DFU mode by holding the reset button for at least five seconds and upload the firmware onto the microcontroller through a utility like `dfu-util` or QMK Toolbox. Alternatively, you can build and flash using:
+
+ make acheron/themis/:default:flash
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/adafruit/macropad/keymaps/drashna/config.h b/keyboards/adafruit/macropad/keymaps/drashna/config.h
deleted file mode 100644
index 4d85f039bea6..000000000000
--- a/keyboards/adafruit/macropad/keymaps/drashna/config.h
+++ /dev/null
@@ -1,7 +0,0 @@
-// Copyright 2023 Christopher Courtney, aka Drashna Jael're (@drashna)
-// SPDX-License-Identifier: GPL-2.0-or-later
-
-#pragma once
-
-#define PICO_XOSC_STARTUP_DELAY_MULTIPLIER 64
-#define TAPPING_TERM 499
diff --git a/keyboards/adafruit/macropad/keymaps/drashna/keymap.c b/keyboards/adafruit/macropad/keymaps/drashna/keymap.c
deleted file mode 100644
index d87e4afd6671..000000000000
--- a/keyboards/adafruit/macropad/keymaps/drashna/keymap.c
+++ /dev/null
@@ -1,100 +0,0 @@
-// Copyright 2023 Christopher Courtney, aka Drashna Jael're (@drashna)
-// SPDX-License-Identifier: GPL-2.0-or-later
-
-#include "drashna.h"
-
-// clang-format off
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [0] = LAYOUT(
- LT(1,KC_MUTE),
- KC_ENT, KC_0, KC_BSPC,
- KC_7, KC_8, KC_9,
- KC_4, KC_5, KC_6,
- KC_1, KC_2, KC_3
- ),
- [1] = LAYOUT(
- _______,
- CK_TOGG, AU_TOGG, _______,
- _______, _______, _______,
- _______, _______, _______,
- _______, _______, _______
- ),
-};
-// clang-format on
-
-#ifdef ENCODER_MAP_ENABLE
-const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
- [0] = {ENCODER_CCW_CW(KC_VOLD, KC_VOLU)},
- [1] = {ENCODER_CCW_CW(RGB_RMOD, RGB_MOD)},
-};
-#endif
-
-void render_oled_title(bool side) {
- oled_write_P(PSTR(" Macropad "), true);
-}
-
-void render_rgb_mode(uint8_t col, uint8_t line);
-
-void l_render_keylock_status(led_t led_usb_state, uint8_t col, uint8_t line) {
- oled_set_cursor(col, line);
-#ifdef CAPS_WORD_ENABLE
- led_usb_state.caps_lock |= is_caps_word_on();
-#endif
- oled_write_P(PSTR(OLED_RENDER_LOCK_NUML), led_usb_state.num_lock);
- oled_write_P(PSTR(" "), false);
- oled_write_P(PSTR(OLED_RENDER_LOCK_CAPS), led_usb_state.caps_lock);
- oled_write_P(PSTR(" "), false);
- oled_write_P(PSTR(OLED_RENDER_LOCK_SCLK), led_usb_state.scroll_lock);
-}
-
-bool oled_task_keymap(void) {
- oled_write_raw_P(header_image, sizeof(header_image));
- oled_set_cursor(0, 1);
- oled_write_raw_P(row_2_image, sizeof(row_2_image));
- oled_set_cursor(4, 0);
- render_oled_title(false);
-
- render_kitty(0, 2);
- render_matrix_scan_rate(1, 7, 2);
-
-#ifdef AUDIO_ENABLE
- oled_set_cursor(7, 4);
- bool l_is_audio_on = is_audio_on();
-
- static const char PROGMEM audio_status[2][3] = {{0xE0, 0xE1, 0}, {0xE2, 0xE3, 0}};
- oled_write_P(audio_status[l_is_audio_on], false);
-
-# ifdef AUDIO_CLICKY
- bool l_is_clicky_on = is_clicky_on();
- static const char PROGMEM audio_clicky_status[2][3] = {{0xF4, 0xF5, 0}, {0xF6, 0xF7, 0}};
- oled_write_P(audio_clicky_status[l_is_clicky_on && l_is_audio_on], false);
-# endif
-#endif
-
- static const char PROGMEM cat_mode[3] = {0xF8, 0xF9, 0};
- oled_write_P(cat_mode, get_keyboard_lock());
-
-#ifdef RGB_MATIRX_ENABLE
- static const char PROGMEM rgb_layer_status[2][3] = {{0xEE, 0xEF, 0}, {0xF0, 0xF1, 0}};
- oled_write_P(rgb_layer_status[rgb_matrix_is_enabled()], false);
-#endif
-
-#ifdef HAPTIC_ENABLE
- static const char PROGMEM nukem_good[2] = {0xFA, 0};
- oled_write_P(haptic_get_enable() ? nukem_good : PSTR(" "), false);
-#endif
-
- l_render_keylock_status(host_keyboard_led_state(), 7, 5);
- render_rgb_mode(1, 6);
-
- for (uint8_t i = 1; i < 7; i++) {
- oled_set_cursor(0, i);
- oled_write_raw_P(display_border, sizeof(display_border));
- oled_set_cursor(21, i);
- oled_write_raw_P(display_border, sizeof(display_border));
- }
- oled_set_cursor(0, 7);
- oled_write_raw_P(footer_image, sizeof(footer_image));
-
- return false;
-}
diff --git a/keyboards/adafruit/macropad/keymaps/drashna/rules.mk b/keyboards/adafruit/macropad/keymaps/drashna/rules.mk
deleted file mode 100644
index ea090a575665..000000000000
--- a/keyboards/adafruit/macropad/keymaps/drashna/rules.mk
+++ /dev/null
@@ -1,3 +0,0 @@
-ENCODER_MAP_ENABLE = yes
-DEBUG_MATRIX_SCAN_RATE_ENABLE = api
-WPM_ENABLE = yes
diff --git a/keyboards/adafruit/macropad/keymaps/peterfalken/keymap.c b/keyboards/adafruit/macropad/keymaps/peterfalken/keymap.c
deleted file mode 100644
index f232a998619e..000000000000
--- a/keyboards/adafruit/macropad/keymaps/peterfalken/keymap.c
+++ /dev/null
@@ -1,98 +0,0 @@
-// Copyright 2023 Peter.Falken (@PeterFalken)
-// SPDX-License-Identifier: GPL-2.0-or-later
-
-#include "peterfalken.h"
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [0] = LAYOUT(
- KC_MUTE,
- KC_7, KC_8, KC_9,
- KC_4, KC_5, KC_6,
- KC_1, KC_2, KC_3,
- KC_ENT, KC_0, KC_BSPC
- )
-};
-
-#ifdef ENCODER_MAP_ENABLE
-const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
- [0] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
-};
-#endif
-
-#ifdef OLED_ENABLE
-static void render_qmk_logo(void) {
- static const char PROGMEM qmk_logo[] = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x3f, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x3f, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f,
- 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x3f,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x03, 0x83, 0x83, 0x83, 0x83, 0x83, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xfe,
- 0xfe, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xfe, 0xfe, 0xfe, 0xfe, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x83, 0x83, 0x83, 0x83, 0x03,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x81, 0x83, 0x83, 0x83, 0x83, 0x83, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff,
- 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x83, 0x83, 0x83, 0x83, 0x81,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x01, 0x07, 0x1f, 0x3f, 0x7f, 0x7e, 0xf8, 0xf0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xff, 0xff,
- 0xff, 0xff, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xf0, 0xf8, 0x7e, 0x7f, 0x3f, 0x1f, 0x07, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0xc0, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0xff, 0xff,
- 0xff, 0xff, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc0,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0xfc, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xfc, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc,
- 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xfc,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
- };
-
- oled_write_raw_P(qmk_logo, sizeof(qmk_logo));
-}
-
-bool oled_task_user(void) {
- render_qmk_logo();
- return true;
-}
-#endif // OLED_ENABLE
diff --git a/keyboards/adafruit/macropad/keymaps/peterfalken/rules.mk b/keyboards/adafruit/macropad/keymaps/peterfalken/rules.mk
deleted file mode 100644
index 59ffb099c24b..000000000000
--- a/keyboards/adafruit/macropad/keymaps/peterfalken/rules.mk
+++ /dev/null
@@ -1,3 +0,0 @@
-# Setup QMK features
-ENCODER_MAP_ENABLE = yes
-RGB_MATRIX_ENABLE = no # Disable RGB key matrix
diff --git a/keyboards/adelheid/keymaps/floookay/keymap.c b/keyboards/adelheid/keymaps/floookay/keymap.c
deleted file mode 100644
index 3abe75e02346..000000000000
--- a/keyboards/adelheid/keymaps/floookay/keymap.c
+++ /dev/null
@@ -1,76 +0,0 @@
-/* Copyright 2020 floookay
- *
- * 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 .
- */
-#include QMK_KEYBOARD_H
-
-enum adelheid_layers {
- _BASE,
- _SECONDARY
-};
-
-// tap dance declarations
-enum {
- _TD_CTGU = 0,
- _TD_PGUP = 1,
- _TD_PGDN = 2,
- _TD_HOME = 3,
- _TD_END = 4,
- _TD_RSHC = 5,
- _TD_PSCR = 6
-};
-
-#define MO_SEC MO(_SECONDARY)
-#define TD_CTGU TD(_TD_CTGU)
-#define TD_PGUP TD(_TD_PGUP)
-#define TD_PGDN TD(_TD_PGDN)
-#define TD_HOME TD(_TD_HOME)
-#define TD_END TD(_TD_END)
-#define TD_RSHC TD(_TD_RSHC)
-#define TD_PSCR TD(_TD_PSCR)
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [_BASE] = LAYOUT(
- 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_F13, TD_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_BSLS, KC_DEL, TD_HOME,
- 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, TD_END,
- TD_CTGU, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, TD_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_LCTL, KC_LALT, KC_SPC, MO_SEC, KC_SPC, KC_RALT, KC_LEFT, KC_DOWN, KC_RGHT
- ),
-
- [_SECONDARY] = LAYOUT(
- KC_SLEP, KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_F21, KC_F22, KC_F23, KC_F24, TD_PSCR, KC_VOLU,
-
- _______, 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_INS, BL_STEP,
- _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END, _______, _______, _______, KC_DEL, KC_MUTE,
- _______, _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, _______, _______, KC_MPLY, KC_VOLD,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, TD_RSHC, KC_MPLY,
- _______, _______, _______, _______, _______, _______, KC_MPRV, KC_MSTP, KC_MNXT
- )
-};
-
-
-// Tap Dance Definitions
-tap_dance_action_t tap_dance_actions[] = {
- // Tap once for first parameter, twice for second
- [_TD_CTGU] = ACTION_TAP_DANCE_DOUBLE(KC_LCTL, KC_LGUI),
- [_TD_PGUP] = ACTION_TAP_DANCE_DOUBLE(KC_PGUP, LCTL(KC_PGUP)),
- [_TD_PGDN] = ACTION_TAP_DANCE_DOUBLE(KC_PGDN, LCTL(KC_PGDN)),
- [_TD_HOME] = ACTION_TAP_DANCE_DOUBLE(KC_HOME, LCTL(KC_HOME)),
- [_TD_END] = ACTION_TAP_DANCE_DOUBLE(KC_END, LCTL(KC_END)),
- [_TD_RSHC] = ACTION_TAP_DANCE_DOUBLE(KC_RSFT, KC_CAPS),
- [_TD_PSCR] = ACTION_TAP_DANCE_DOUBLE(KC_PSCR, LSFT(LGUI(KC_S))) // screenshot tool tap dance
-};
diff --git a/keyboards/adelheid/keymaps/floookay/readme.md b/keyboards/adelheid/keymaps/floookay/readme.md
deleted file mode 100644
index a9d624222ea0..000000000000
--- a/keyboards/adelheid/keymaps/floookay/readme.md
+++ /dev/null
@@ -1,9 +0,0 @@
-# The default keymap for the Adelheid
-
-- ANSI QWERTY
-- split backspace
-- ctrl on caps lock with super on tap dance
-- caps lock on fn + right shift tap dance
-
-![adelheid_layout](https://gist.githubusercontent.com/floookay/7bf6511a8d84804d32de4d7bbe3bd0fb/raw/dffd622a762463f341466ffecefad3b31ad3ee4f/layout.png)
-View in [Keyboard-Layout-Editor](http://www.keyboard-layout-editor.com/#/gists/4262535adb5ac81a913edbebc4de8226).
diff --git a/keyboards/adelheid/keymaps/floookay/rules.mk b/keyboards/adelheid/keymaps/floookay/rules.mk
deleted file mode 100644
index e5ddcae8d927..000000000000
--- a/keyboards/adelheid/keymaps/floookay/rules.mk
+++ /dev/null
@@ -1 +0,0 @@
-TAP_DANCE_ENABLE = yes
diff --git a/keyboards/adm42/config.h b/keyboards/adm42/config.h
deleted file mode 100644
index b5ba2eb94eaa..000000000000
--- a/keyboards/adm42/config.h
+++ /dev/null
@@ -1,21 +0,0 @@
-/* Copyright 2020-2022 Lorenzo Leonini
- * SPDX-License-Identifier: GPL-2.0-only
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
- *
- * 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 .
- */
-
-#pragma once
-
-#if defined(CONSOLE_ENABLE)
- #define DEBUG_MATRIX_SCAN_RATE
-#endif
diff --git a/keyboards/adm42/info.json b/keyboards/adm42/info.json
deleted file mode 100644
index b2bdbc4dad0d..000000000000
--- a/keyboards/adm42/info.json
+++ /dev/null
@@ -1,90 +0,0 @@
-{
- "keyboard_name": "ADM42",
- "manufacturer": "Lorenzo Leonini",
- "url": "https://adm42.dev/",
- "maintainer": "lleonini",
- "debounce": 10,
- "usb": {
- "vid": "0x04D8",
- "pid": "0xE873",
- "device_version": "0.0.1"
- },
- "ws2812": {
- "pin": "B7"
- },
- "rgb_matrix": {
- "driver": "ws2812",
- "sat_steps": 24
- },
- "qmk": {
- "tap_keycode_delay": 1
- },
- "build": {
- "debounce_type": "sym_eager_pk"
- },
- "matrix_pins": {
- "cols": ["C6", "B6", "B5", "B4", "D7", "D6", "F0", "F1", "F4", "F5", "F6", "F7"],
- "rows": ["C7", "D5", "D3", "D2"]
- },
- "diode_direction": "ROW2COL",
- "processor": "atmega32u4",
- "bootloader": "atmel-dfu",
- "layout_aliases": {
- "LAYOUT_adm42_3x12_6": "LAYOUT"
- },
- "layouts": {
- "LAYOUT": {
- "layout": [
- {"matrix": [0, 0], "x": 0, "y": 0.8},
- {"matrix": [0, 1], "x": 1, "y": 0.8},
- {"matrix": [0, 2], "x": 2, "y": 0},
- {"matrix": [0, 3], "x": 3, "y": 0},
- {"matrix": [0, 4], "x": 4, "y": 0.5},
- {"matrix": [0, 5], "x": 5, "y": 0.5},
-
- {"matrix": [0, 6], "x": 7.5, "y": 0.5},
- {"matrix": [0, 7], "x": 8.5, "y": 0.5},
- {"matrix": [0, 8], "x": 9.5, "y": 0},
- {"matrix": [0, 9], "x": 10.5, "y": 0},
- {"matrix": [0, 10], "x": 11.5, "y": 0.8},
- {"matrix": [0, 11], "x": 12.5, "y": 0.8},
-
- {"matrix": [1, 0], "x": 0, "y": 1.8},
- {"matrix": [1, 1], "x": 1, "y": 1.8},
- {"matrix": [1, 2], "x": 2, "y": 1},
- {"matrix": [1, 3], "x": 3, "y": 1},
- {"matrix": [1, 4], "x": 4, "y": 1.5},
- {"matrix": [1, 5], "x": 5, "y": 1.5},
-
- {"matrix": [1, 6], "x": 7.5, "y": 1.5},
- {"matrix": [1, 7], "x": 8.5, "y": 1.5},
- {"matrix": [1, 8], "x": 9.5, "y": 1},
- {"matrix": [1, 9], "x": 10.5, "y": 1},
- {"matrix": [1, 10], "x": 11.5, "y": 1.8},
- {"matrix": [1, 11], "x": 12.5, "y": 1.8},
-
- {"matrix": [2, 0], "x": 0, "y": 2.8},
- {"matrix": [2, 1], "x": 1, "y": 2.8},
- {"matrix": [2, 2], "x": 2, "y": 2},
- {"matrix": [2, 3], "x": 3, "y": 2},
- {"matrix": [2, 4], "x": 4, "y": 2.5},
- {"matrix": [2, 5], "x": 5, "y": 2.5},
-
- {"matrix": [2, 6], "x": 7.5, "y": 2.5},
- {"matrix": [2, 7], "x": 8.5, "y": 2.5},
- {"matrix": [2, 8], "x": 9.5, "y": 2},
- {"matrix": [2, 9], "x": 10.5, "y": 2},
- {"matrix": [2, 10], "x": 11.5, "y": 2.8},
- {"matrix": [2, 11], "x": 12.5, "y": 2.8},
-
- {"matrix": [3, 3], "x": 4.25, "y": 3.55},
- {"matrix": [3, 4], "x": 5.25, "y": 3.65},
- {"matrix": [3, 6], "x": 6.25, "y": 1.875, "h": 1.25},
-
- {"matrix": [3, 5], "x": 6.25, "y": 4.05},
- {"matrix": [3, 7], "x": 7.25, "y": 3.65},
- {"matrix": [3, 8], "x": 8.25, "y": 3.55}
- ]
- }
- }
-}
diff --git a/keyboards/adm42/rev4/config.h b/keyboards/adm42/rev4/config.h
deleted file mode 100644
index 5553b18751cc..000000000000
--- a/keyboards/adm42/rev4/config.h
+++ /dev/null
@@ -1,44 +0,0 @@
-/* Copyright 2020-2022 Lorenzo Leonini
- * SPDX-License-Identifier: GPL-2.0-only
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
- *
- * 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 .
- */
-
-#pragma once
-
-#define ADM42_LED E6
-
-#define RGB_MATRIX_LED_COUNT 42
-#define RGB_MATRIX_MAXIMUM_BRIGHTNESS 170
-#define RGB_DISABLE_WHEN_USB_SUSPENDED
-#define RGB_MATRIX_LED_PROCESS_LIMIT 21
-#define RGB_MATRIX_LED_FLUSH_LIMIT 16
-#define RGB_MATRIX_DEFAULT_MODE RGB_MATRIX_CYCLE_LEFT_RIGHT
-#define RGB_MATRIX_TYPING_HEATMAP_DECREASE_DELAY_MS 20
-#define RGB_MATRIX_KEYPRESSES
-#define RGB_MATRIX_FRAMEBUFFER_EFFECTS
-
-#define ENABLE_RGB_MATRIX_BREATHING
-#define ENABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT
-#define ENABLE_RGBLIGHT_MODE_STATIC_LIGHT
-#define ENABLE_RGB_MATRIX_CYCLE_UP_DOWN
-#define ENABLE_RGB_MATRIX_PIXEL_FRACTAL
-#define ENABLE_RGB_MATRIX_TYPING_HEATMAP
-#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE
-#define ENABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS
-#define ENABLE_RGB_MATRIX_CYCLE_OUT_IN
-#define ENABLE_RGB_MATRIX_CYCLE_PINWHEEL
-#define ENABLE_RGB_MATRIX_PIXEL_RAIN
-#define ENABLE_RGB_MATRIX_DIGITAL_RAIN
-#define ENABLE_RGB_MATRIX_BAND_VAL
-#define ENABLE_RGB_MATRIX_SPLASH
diff --git a/keyboards/adm42/rev4/info.json b/keyboards/adm42/rev4/info.json
new file mode 100644
index 000000000000..efb0eea029b2
--- /dev/null
+++ b/keyboards/adm42/rev4/info.json
@@ -0,0 +1,163 @@
+{
+ "keyboard_name": "ADM42",
+ "manufacturer": "Lorenzo Leonini",
+ "url": "https://adm42.dev/",
+ "maintainer": "lleonini",
+ "debounce": 10,
+ "usb": {
+ "vid": "0x04D8",
+ "pid": "0xE873",
+ "device_version": "0.0.1"
+ },
+ "features": {
+ "bootmagic": true,
+ "command": false,
+ "console": false,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true,
+ "rgb_matrix": true
+ },
+ "ws2812": {
+ "pin": "B7"
+ },
+ "rgb_matrix": {
+ "driver": "ws2812",
+ "animations": {
+ "breathing": true,
+ "band_val": true,
+ "cycle_left_right": true,
+ "cycle_up_down": true,
+ "cycle_out_in": true,
+ "cycle_pinwheel": true,
+ "jellybean_raindrops": true,
+ "pixel_fractal": true,
+ "pixel_rain": true,
+ "typing_heatmap": true,
+ "digital_rain": true,
+ "solid_reactive_simple": true,
+ "splash": true
+ },
+ "layout": [
+ {"matrix": [3, 6], "x": 112, "y": 32, "flags": 4},
+ {"matrix": [2, 5], "x": 92, "y": 36, "flags": 4},
+ {"matrix": [1, 5], "x": 94, "y": 25, "flags": 4},
+ {"matrix": [0, 5], "x": 97, "y": 14, "flags": 4},
+ {"matrix": [0, 4], "x": 80, "y": 13, "flags": 4},
+ {"matrix": [1, 4], "x": 77, "y": 24, "flags": 4},
+ {"matrix": [1, 3], "x": 62, "y": 18, "flags": 4},
+ {"matrix": [0, 3], "x": 64, "y": 8, "flags": 4},
+ {"matrix": [0, 2], "x": 49, "y": 6, "flags": 4},
+ {"matrix": [1, 2], "x": 46, "y": 17, "flags": 4},
+ {"matrix": [1, 1], "x": 28, "y": 23, "flags": 4},
+ {"matrix": [0, 1], "x": 30, "y": 13, "flags": 4},
+ {"matrix": [0, 0], "x": 14, "y": 11, "flags": 4},
+ {"matrix": [1, 0], "x": 11, "y": 22, "flags": 4},
+ {"matrix": [2, 0], "x": 8, "y": 32, "flags": 4},
+ {"matrix": [2, 1], "x": 26, "y": 34, "flags": 4},
+ {"matrix": [2, 2], "x": 43, "y": 28, "flags": 4},
+ {"matrix": [2, 3], "x": 61, "y": 29, "flags": 4},
+ {"matrix": [2, 4], "x": 76, "y": 34, "flags": 4},
+ {"matrix": [3, 3], "x": 78, "y": 46, "flags": 4},
+ {"matrix": [3, 4], "x": 97, "y": 49, "flags": 4},
+ {"matrix": [3, 5], "x": 112, "y": 56, "flags": 4},
+ {"matrix": [3, 7], "x": 127, "y": 49, "flags": 4},
+ {"matrix": [3, 8], "x": 146, "y": 46, "flags": 4},
+ {"matrix": [2, 6], "x": 132, "y": 36, "flags": 4},
+ {"matrix": [2, 7], "x": 148, "y": 34, "flags": 4},
+ {"matrix": [2, 8], "x": 164, "y": 29, "flags": 4},
+ {"matrix": [2, 9], "x": 180, "y": 28, "flags": 4},
+ {"matrix": [2, 10], "x": 198, "y": 34, "flags": 4},
+ {"matrix": [2, 11], "x": 215, "y": 32, "flags": 4},
+ {"matrix": [1, 11], "x": 212, "y": 22, "flags": 4},
+ {"matrix": [1, 10], "x": 196, "y": 23, "flags": 4},
+ {"matrix": [1, 9], "x": 178, "y": 17, "flags": 4},
+ {"matrix": [1, 8], "x": 161, "y": 18, "flags": 4},
+ {"matrix": [1, 7], "x": 146, "y": 24, "flags": 4},
+ {"matrix": [1, 6], "x": 130, "y": 25, "flags": 4},
+ {"matrix": [0, 6], "x": 126, "y": 14, "flags": 4},
+ {"matrix": [0, 7], "x": 143, "y": 13, "flags": 4},
+ {"matrix": [0, 8], "x": 159, "y": 8, "flags": 4},
+ {"matrix": [0, 9], "x": 175, "y": 6, "flags": 4},
+ {"matrix": [0, 10], "x": 194, "y": 13, "flags": 4},
+ {"matrix": [0, 11], "x": 210, "y": 11, "flags": 4}
+ ],
+ "led_flush_limit": 16,
+ "led_process_limit": 21,
+ "max_brightness": 170,
+ "sat_steps": 24,
+ "sleep": true
+ },
+ "qmk": {
+ "tap_keycode_delay": 1
+ },
+ "build": {
+ "debounce_type": "sym_eager_pk",
+ "lto": true
+ },
+ "matrix_pins": {
+ "cols": ["C6", "B6", "B5", "B4", "D7", "D6", "F0", "F1", "F4", "F5", "F6", "F7"],
+ "rows": ["C7", "D5", "D3", "D2"]
+ },
+ "diode_direction": "ROW2COL",
+ "processor": "atmega32u4",
+ "bootloader": "atmel-dfu",
+ "layout_aliases": {
+ "LAYOUT_adm42_3x12_6": "LAYOUT"
+ },
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0.8},
+ {"matrix": [0, 1], "x": 1, "y": 0.8},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0.5},
+ {"matrix": [0, 5], "x": 5, "y": 0.5},
+
+ {"matrix": [0, 6], "x": 7.5, "y": 0.5},
+ {"matrix": [0, 7], "x": 8.5, "y": 0.5},
+ {"matrix": [0, 8], "x": 9.5, "y": 0},
+ {"matrix": [0, 9], "x": 10.5, "y": 0},
+ {"matrix": [0, 10], "x": 11.5, "y": 0.8},
+ {"matrix": [0, 11], "x": 12.5, "y": 0.8},
+
+ {"matrix": [1, 0], "x": 0, "y": 1.8},
+ {"matrix": [1, 1], "x": 1, "y": 1.8},
+ {"matrix": [1, 2], "x": 2, "y": 1},
+ {"matrix": [1, 3], "x": 3, "y": 1},
+ {"matrix": [1, 4], "x": 4, "y": 1.5},
+ {"matrix": [1, 5], "x": 5, "y": 1.5},
+
+ {"matrix": [1, 6], "x": 7.5, "y": 1.5},
+ {"matrix": [1, 7], "x": 8.5, "y": 1.5},
+ {"matrix": [1, 8], "x": 9.5, "y": 1},
+ {"matrix": [1, 9], "x": 10.5, "y": 1},
+ {"matrix": [1, 10], "x": 11.5, "y": 1.8},
+ {"matrix": [1, 11], "x": 12.5, "y": 1.8},
+
+ {"matrix": [2, 0], "x": 0, "y": 2.8},
+ {"matrix": [2, 1], "x": 1, "y": 2.8},
+ {"matrix": [2, 2], "x": 2, "y": 2},
+ {"matrix": [2, 3], "x": 3, "y": 2},
+ {"matrix": [2, 4], "x": 4, "y": 2.5},
+ {"matrix": [2, 5], "x": 5, "y": 2.5},
+
+ {"matrix": [2, 6], "x": 7.5, "y": 2.5},
+ {"matrix": [2, 7], "x": 8.5, "y": 2.5},
+ {"matrix": [2, 8], "x": 9.5, "y": 2},
+ {"matrix": [2, 9], "x": 10.5, "y": 2},
+ {"matrix": [2, 10], "x": 11.5, "y": 2.8},
+ {"matrix": [2, 11], "x": 12.5, "y": 2.8},
+
+ {"matrix": [3, 3], "x": 4.25, "y": 3.55},
+ {"matrix": [3, 4], "x": 5.25, "y": 3.65},
+ {"matrix": [3, 6], "x": 6.25, "y": 1.875, "h": 1.25},
+
+ {"matrix": [3, 5], "x": 6.25, "y": 4.05},
+ {"matrix": [3, 7], "x": 7.25, "y": 3.65},
+ {"matrix": [3, 8], "x": 8.25, "y": 3.55}
+ ]
+ }
+ }
+}
diff --git a/keyboards/adm42/rev4/keymaps/default/config.h b/keyboards/adm42/rev4/keymaps/default/config.h
deleted file mode 100644
index abfaf9af7892..000000000000
--- a/keyboards/adm42/rev4/keymaps/default/config.h
+++ /dev/null
@@ -1,2 +0,0 @@
-#define HOLD_ON_OTHER_KEY_PRESS_PER_KEY
-#define QUICK_TAP_TERM_PER_KEY
diff --git a/keyboards/adm42/rev4/keymaps/default/keymap.c b/keyboards/adm42/rev4/keymaps/default/keymap.c
deleted file mode 100644
index 12e4e85a4a14..000000000000
--- a/keyboards/adm42/rev4/keymaps/default/keymap.c
+++ /dev/null
@@ -1,204 +0,0 @@
-/* Copyright 2020-2022 Lorenzo Leonini
- * SPDX-License-Identifier: GPL-2.0-only
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
- *
- * 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 .
- */
-
-#include QMK_KEYBOARD_H
-
-enum custom_layers {
- _QWERTY,
- _COLEMAKDH,
- _SPECIAL,
- _EXTRA,
- _ADM,
- _SETUP,
-};
-
-#define LW_GRV LWIN_T(KC_GRV)
-#define RW_EQU RWIN_T(KC_EQUAL)
-#define RW_BS RWIN_T(KC_BSLS)
-#define LC_TAB LCTL_T(KC_TAB)
-#define RC_QUT RCTL_T(KC_QUOT)
-#define LS_BPC LSFT_T(KC_BSPC)
-#define RS_SPC RSFT_T(KC_SPC)
-#define LA_BS LALT_T(KC_BSLS)
-#define LW_F11 LWIN_T(KC_F11)
-#define LC_APP LCTL_T(KC_APP)
-#define LA_TOG LALT_T(RGB_TOG)
-#define RW_F12 RWIN_T(KC_F12)
-
-#define LLS_ESC LT(_SPECIAL, KC_ESC)
-#define LLS_RALT LT(_SPECIAL, KC_RALT)
-#define LLE_ENT LT(_EXTRA, KC_ENT)
-#define LLA_DEL LT(_ADM, KC_DEL)
-#define SETUP MO(_SETUP)
-
-enum custom_keycodes {
- REFLASH = SAFE_RANGE,
- LC_CIRC,
- RC_DLR,
- DF_QWER,
- DF_COLE,
-};
-
-// Not a mistake to have KC_LALT (also) on the right, RALT is kept for compose (LLS_RALT)
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [_QWERTY] = LAYOUT(
- LW_GRV, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, RW_EQU,
- LC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, RC_QUT,
- KC_LALT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_LALT,
- LLS_ESC, LS_BPC, LLA_DEL, LLE_ENT, RS_SPC, LLS_RALT
- ),
- [_COLEMAKDH] = LAYOUT(
- LW_GRV, KC_Q, KC_W, KC_F, KC_P, KC_B, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, RW_EQU,
- LC_TAB, KC_A, KC_R, KC_S, KC_T, KC_G, KC_M, KC_N, KC_E, KC_I, KC_O, RC_QUT,
- KC_LALT, KC_Z, KC_X, KC_C, KC_D, KC_V, KC_K, KC_H, KC_COMM, KC_DOT, KC_SLSH, KC_LALT,
- LLS_ESC, LS_BPC, LLA_DEL, LLE_ENT, RS_SPC, LLS_RALT
- ),
-
- [_SPECIAL] = LAYOUT(
- _______, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, RW_BS,
- LC_CIRC, KC_LBRC, KC_RBRC, KC_LPRN, KC_RPRN, KC_EXLM, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_MINS, RC_DLR,
- _______, KC_AMPR, KC_AT, KC_LCBR, KC_RCBR, KC_PIPE, KC_UNDS, KC_ASTR, KC_HASH, KC_PERC, KC_TILD, _______,
- KC_ESC, _______, KC_DEL, KC_ENT, _______, KC_RALT
- ),
- [_EXTRA] = LAYOUT(
- LW_F11, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, RW_F12,
- KC_LCTL, KC_PAUS, KC_INS, KC_VOLD, KC_VOLU, KC_MUTE, KC_HOME, KC_PGDN, KC_PGUP, KC_END, KC_APP, KC_RCTL,
- _______, KC_SLEP, KC_PWR, KC_MSTP, KC_MNXT, KC_MPLY, _______, KC_BRID, KC_BRIU, KC_PSCR, KC_WAKE, _______,
- KC_CAPS, _______, _______, _______, _______, KC_CAPS
- ),
- [_ADM] = LAYOUT(
- XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_M_B, RGB_VAD, RGB_VAI, RGB_SAD, RGB_SAI, XXXXXXX,
- XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_TOG, RGB_MOD, RGB_RMOD,RGB_HUD, RGB_HUI, XXXXXXX,
- XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_M_P, RGB_SPD, RGB_SPI, XXXXXXX, XXXXXXX, XXXXXXX,
- XXXXXXX, XXXXXXX, XXXXXXX, SETUP, XXXXXXX, XXXXXXX
- ),
- [_SETUP] = LAYOUT(
- REFLASH, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
- XXXXXXX, DF_QWER, DF_COLE, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
- XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, EE_CLR,
- XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX
- ),
-};
-
-bool get_hold_on_other_key_press(uint16_t keycode, keyrecord_t *record) {
- // Special if-condition outside the switch because `RC_QUT` overlaps with
- // the `QK_MOD_TAP ... QK_MOD_TAP_MAX` range.
- if (keycode == RC_QUT) {
- return false;
- }
- switch (keycode) {
- case QK_MOD_TAP ... QK_MOD_TAP_MAX:
- case QK_LAYER_TAP ... QK_LAYER_TAP_MAX:
- return true;
- default:
- return false;
- }
-}
-
-uint16_t get_quick_tap_term(uint16_t keycode, keyrecord_t *record) {
- switch (keycode) {
- case LLS_ESC:
- case LLS_RALT:
- return 0;
- default:
- return QUICK_TAP_TERM;
- }
-}
-
-static uint16_t last_timer = 0;
-static int last_key = 0;
-bool cleanup_return(uint16_t keycode, keyrecord_t *record, bool value) {
- if (record->event.pressed) {
- last_key = keycode;
- last_timer = timer_read();
- }
- return value;
-}
-
-bool process_record_user(uint16_t keycode, keyrecord_t *record) {
-
-#ifdef CONSOLE_ENABLE
- uprintf("KL: kc: 0x%04X, col: %u, row: %u, pressed: %b, time: %u, interrupt: %b, count: %u\n", keycode, record->event.key.col, record->event.key.row, record->event.pressed, record->event.time, record->tap.interrupted, record->tap.count);
-#endif
-
- switch (keycode) {
-
- case RC_DLR:
- if (record->event.pressed) {
- register_code(KC_RCTL);
- } else {
- unregister_code(KC_RCTL);
- if (last_key == keycode && timer_elapsed(last_timer) <= TAPPING_TERM) {
- send_string("$");
- }
- }
- return cleanup_return(keycode, record, false);
-
- case LC_CIRC:
- if (record->event.pressed) {
- register_code(KC_LCTL);
- } else {
- unregister_code(KC_LCTL);
- if (last_key == keycode && timer_elapsed(last_timer) <= TAPPING_TERM) {
- send_string("^");
- }
- }
- return cleanup_return(keycode, record, false);
-
- case DF_QWER:
- if (record->event.pressed) {
- set_single_persistent_default_layer(_QWERTY);
- send_string("QWERTY layout");
- }
- return false;
- case DF_COLE:
- if (record->event.pressed) {
- set_single_persistent_default_layer(_COLEMAKDH);
- send_string("COLEMAKDH layout");
- }
- return false;
-
- case REFLASH:
- eeconfig_init();
- eeconfig_update_rgb_matrix_default();
- writePinLow(ADM42_LED);
- reset_keyboard();
- return false;
-
- default:
- return cleanup_return(keycode, record, true);
- }
-}
-
-void keyboard_pre_init_kb(void) {
- setPinOutput(ADM42_LED);
- writePinHigh(ADM42_LED);
-}
-
-void keyboard_post_init_kb(void) {
- debug_enable = true;
- debug_matrix = false;
- debug_keyboard = false;
- writePinHigh(ADM42_LED);
-}
-
-void suspend_power_down_kb(void) {
- writePinLow(ADM42_LED);
-}
-
-void suspend_wakeup_init_kb(void) {
- writePinHigh(ADM42_LED);
-}
diff --git a/keyboards/adm42/rev4/keymaps/default/keymap.json b/keyboards/adm42/rev4/keymaps/default/keymap.json
new file mode 100644
index 000000000000..72eb7d50de47
--- /dev/null
+++ b/keyboards/adm42/rev4/keymaps/default/keymap.json
@@ -0,0 +1,44 @@
+{
+ "keyboard": "adm42/rev4",
+ "keymap": "default",
+ "commit": "3bf01bb9ed202b14f78105db2aa2a75d01fc4323",
+ "layout": "LAYOUT",
+ "layers": [
+ [
+ "LWIN_T(KC_GRV)", "KC_Q", "KC_W", "KC_E", "KC_R", "KC_T", "KC_Y", "KC_U", "KC_I", "KC_O", "KC_P", "RWIN_T(KC_EQL)",
+ "LCTL_T(KC_TAB)", "KC_A", "KC_S", "KC_D", "KC_F", "KC_G", "KC_H", "KC_J", "KC_K", "KC_L", "KC_SCLN", "RCTL_T(KC_QUOT)",
+ "KC_LALT", "KC_Z", "KC_X", "KC_C", "KC_V", "KC_B", "KC_N", "KC_M", "KC_COMM", "KC_DOT", "KC_SLSH", "KC_LALT",
+ "LT(2,KC_ESC)", "LSFT_T(KC_BSPC)", "LT(4,KC_DEL)", "LT(3,KC_ENT)", "RSFT_T(KC_SPC)", "LT(2,KC_RALT)"
+ ],
+ [
+ "LWIN_T(KC_GRV)", "KC_Q", "KC_W", "KC_F", "KC_P", "KC_B", "KC_J", "KC_L", "KC_U", "KC_Y", "KC_SCLN", "RWIN_T(KC_EQL)",
+ "LCTL_T(KC_TAB)", "KC_A", "KC_R", "KC_S", "KC_T", "KC_G", "KC_M", "KC_N", "KC_E", "KC_I", "KC_O", "RCTL_T(KC_QUOT)",
+ "KC_LALT", "KC_Z", "KC_X", "KC_C", "KC_D", "KC_V", "KC_K", "KC_H", "KC_COMM", "KC_DOT", "KC_SLSH", "KC_LALT",
+ "LT(2,KC_ESC)", "LSFT_T(KC_BSPC)", "LT(4,KC_DEL)", "LT(3,KC_ENT)", "RSFT_T(KC_SPC)", "LT(2,KC_RALT)"
+ ],
+ [
+ "_______", "KC_1", "KC_2", "KC_3", "KC_4", "KC_5", "KC_6", "KC_7", "KC_8", "KC_9", "KC_0", "RWIN_T(KC_BSLS)",
+ "KC_LCTL", "KC_LBRC", "KC_RBRC", "KC_LPRN", "KC_RPRN", "KC_EXLM", "KC_LEFT", "KC_DOWN", "KC_UP", "KC_RGHT", "KC_MINS", "KC_RCTL",
+ "_______", "KC_AMPR", "KC_AT", "KC_LCBR", "KC_RCBR", "KC_PIPE", "KC_UNDS", "KC_ASTR", "KC_HASH", "KC_PERC", "KC_TILD", "_______",
+ "KC_ESC", "_______", "KC_DEL", "KC_ENT", "_______", "KC_RALT"
+ ],
+ [
+ "LWIN_T(KC_F11)", "KC_F1", "KC_F2", "KC_F3", "KC_F4", "KC_F5", "KC_F6", "KC_F7", "KC_F8", "KC_F9", "KC_F10", "RWIN_T(KC_F12)",
+ "KC_LCTL", "KC_PAUS", "KC_INS", "KC_VOLD", "KC_VOLU", "KC_MUTE", "KC_HOME", "KC_PGDN", "KC_PGUP", "KC_END", "KC_APP", "KC_RCTL",
+ "_______", "KC_SLEP", "KC_PWR", "KC_MSTP", "KC_MNXT", "KC_MPLY", "_______", "KC_BRID", "KC_BRIU", "KC_PSCR", "KC_WAKE", "_______",
+ "KC_CAPS", "_______", "_______", "_______", "_______", "KC_CAPS"
+ ],
+ [
+ "XXXXXXX", "XXXXXXX", "XXXXXXX", "XXXXXXX", "XXXXXXX", "XXXXXXX", "RGB_M_B", "RGB_VAD", "RGB_VAI", "RGB_SAD", "RGB_SAI", "XXXXXXX",
+ "XXXXXXX", "XXXXXXX", "XXXXXXX", "XXXXXXX", "XXXXXXX", "XXXXXXX", "RGB_TOG", "RGB_MOD", "RGB_RMOD", "RGB_HUD", "RGB_HUI", "XXXXXXX",
+ "XXXXXXX", "XXXXXXX", "XXXXXXX", "XXXXXXX", "XXXXXXX", "XXXXXXX", "RGB_M_P", "RGB_SPD", "RGB_SPI", "XXXXXXX", "XXXXXXX", "XXXXXXX",
+ "XXXXXXX", "XXXXXXX", "XXXXXXX", "MO(5)", "XXXXXXX", "XXXXXXX"
+ ],
+ [
+ "XXXXXXX", "XXXXXXX", "XXXXXXX", "XXXXXXX", "XXXXXXX", "XXXXXXX", "XXXXXXX", "XXXXXXX", "XXXXXXX", "XXXXXXX", "XXXXXXX", "XXXXXXX",
+ "XXXXXXX", "DF(0)", "DF(1)", "XXXXXXX", "XXXXXXX", "XXXXXXX", "XXXXXXX", "XXXXXXX", "XXXXXXX", "XXXXXXX", "XXXXXXX", "XXXXXXX",
+ "XXXXXXX", "XXXXXXX", "XXXXXXX", "XXXXXXX", "XXXXXXX", "XXXXXXX", "XXXXXXX", "XXXXXXX", "XXXXXXX", "XXXXXXX", "XXXXXXX", "EE_CLR",
+ "XXXXXXX", "XXXXXXX", "XXXXXXX", "XXXXXXX", "XXXXXXX", "XXXXXXX"
+ ]
+ ]
+}
\ No newline at end of file
diff --git a/keyboards/adm42/rev4/rev4.c b/keyboards/adm42/rev4/rev4.c
deleted file mode 100644
index 623b5cb5a381..000000000000
--- a/keyboards/adm42/rev4/rev4.c
+++ /dev/null
@@ -1,39 +0,0 @@
-/* Copyright 2020-2022 Lorenzo Leonini
- * SPDX-License-Identifier: GPL-2.0-only
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
- *
- * 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 .
- */
-
-#include "quantum.h"
-
-led_config_t g_led_config = {
- {
- {12, 11, 8, 7, 4, 3, 36, 37, 38, 39, 40, 41},
- {13, 10, 9, 6, 5, 2, 35, 34, 33, 32, 31, 30},
- {14, 15, 16, 17, 18, 1, 24, 25, 26, 27, 28, 29},
- {NO_LED, NO_LED, NO_LED, 19, 20, 21, 0, 22, 23, NO_LED, NO_LED, NO_LED}
- }, {
- {112, 32}, {92, 36}, {94, 25}, {97, 14}, {80, 13}, {77, 24},
- {62, 18}, {64, 8}, {49, 6}, {46, 17}, {28, 23}, {30, 13},
- {14, 11}, {11, 22}, {8, 32}, {26, 34}, {43, 28}, {61, 29},
- {76, 34}, {78, 46}, {97, 49}, {112, 56}, {127, 49}, {146, 46},
- {132, 36}, {148, 34}, {164, 29}, {180, 28}, {198, 34}, {215, 32},
- {212, 22}, {196, 23}, {178, 17}, {161, 18}, {146, 24}, {130, 25},
- {126, 14}, {143, 13}, {159, 8}, {175, 6}, {194, 13}, {210, 11}
- }, {
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4
- }
-};
diff --git a/keyboards/adm42/rev4/rules.mk b/keyboards/adm42/rev4/rules.mk
index aad92997d0fa..6e7633bfe015 100644
--- a/keyboards/adm42/rev4/rules.mk
+++ b/keyboards/adm42/rev4/rules.mk
@@ -1 +1 @@
-RGB_MATRIX_ENABLE = yes
+# This file intentionally left blank
diff --git a/keyboards/adm42/rules.mk b/keyboards/adm42/rules.mk
index a2402f19a9b2..06fc88e9f6c6 100644
--- a/keyboards/adm42/rules.mk
+++ b/keyboards/adm42/rules.mk
@@ -1,15 +1 @@
-# Build Options
-# change yes to no to disable
-#
-BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite
-MOUSEKEY_ENABLE = no # Mouse keys
-EXTRAKEY_ENABLE = yes # Audio control and System control
-CONSOLE_ENABLE = no # Console for debug
-COMMAND_ENABLE = no # Commands for debug and configuration
-NKRO_ENABLE = no # Enable N-Key Rollover
-BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
-RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
-AUDIO_ENABLE = no # Audio output
-LTO_ENABLE = yes
-
-DEFAULT_FOLDER = adm42/rev4
+DEFAULT_FOLDER = adm42/rev4
\ No newline at end of file
diff --git a/keyboards/adpenrose/akemipad/keymaps/oled_bongocat/animation_frames.h b/keyboards/adpenrose/akemipad/keymaps/oled_bongocat/animation_frames.h
deleted file mode 100644
index 062448b754ef..000000000000
--- a/keyboards/adpenrose/akemipad/keymaps/oled_bongocat/animation_frames.h
+++ /dev/null
@@ -1,392 +0,0 @@
-// Copyright 2022 Arturo Avila (@ADPenrose)
-// SPDX-License-Identifier: GPL-2.0-or-later
-
-#pragma once
-#ifdef OLED_ENABLE
-
-// Enable OLED bitmpa compression selectively.
-#define USE_OLED_BITMAP_COMPRESSION
-
-#define NUM_IDLE_FRAMES 5
-#define NUM_TAP_FRAMES 2
-#define NUM_OLED_BYTES 512
-
-#ifdef USE_OLED_BITMAP_COMPRESSION
-
-static const char PROGMEM idle_1_block_map[] = { //IDLE_1 and IDLE_2 flipped
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00,
- 0x18, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0xc0, 0xff, 0x7f, 0x00, 0xf0, 0xb0, 0xc1, 0x07,
- 0xf0, 0xcf, 0x00, 0x1c, 0x00, 0xb8, 0x8f, 0x3f, 0x00, 0x98, 0xff, 0x00, 0x00, 0xf0, 0x03, 0x00,
- 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0xc0, 0x01
-};
-
-static const char PROGMEM idle_2_block_map[] = { //IDLE_3 flipped
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00,
- 0x18, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0xc0, 0xff, 0xff, 0x00, 0xf0, 0xd8, 0xe0, 0x03,
- 0xf0, 0x6f, 0x00, 0x3e, 0x00, 0xf8, 0xc7, 0x7f, 0x00, 0x98, 0x7f, 0x00, 0x00, 0xf0, 0x03, 0x00,
- 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0xc0, 0x01
-};
-
-static const char PROGMEM idle_3_block_map[] = { //IDLE_4 flipped
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00,
- 0x18, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0xc0, 0xff, 0xff, 0x01, 0xf0, 0xb0, 0xc1, 0x07,
- 0xf0, 0xcf, 0x00, 0x7c, 0x00, 0xb8, 0x8f, 0xff, 0x00, 0x98, 0xff, 0x00, 0x00, 0xf0, 0x03, 0x00,
- 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0xc0, 0x01
-};
-
-static const char PROGMEM idle_4_block_map[] = { //IDLE_5 flipped
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00,
- 0x18, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0xc0, 0xff, 0xff, 0x00, 0xf0, 0xb0, 0xc1, 0x07,
- 0xf0, 0xcf, 0x00, 0x3c, 0x00, 0xb8, 0x8f, 0x7f, 0x00, 0x98, 0xff, 0x00, 0x00, 0xf0, 0x03, 0x00,
- 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0xc0, 0x01
-};
-
-static const char PROGMEM tap_1_block_map[] = { //TAP_1 flipped
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00,
- 0x18, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0xc0, 0xff, 0xff, 0x01, 0x80, 0xff, 0xc1, 0x07,
- 0x00, 0xce, 0x00, 0x7c, 0x00, 0xb8, 0x8d, 0xff, 0x00, 0x98, 0xff, 0x1f, 0xc0, 0xff, 0xff, 0x1f,
- 0x00, 0x3f, 0xfe, 0x01, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0xc0, 0x01
-};
-
-static const char PROGMEM tap_2_block_map[] = { //TAP_2 flipped
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00,
- 0x18, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0xde, 0xff, 0xff, 0x01, 0xfc, 0x80, 0xc1, 0x07,
- 0xf1, 0xcf, 0x00, 0x7c, 0x00, 0xb8, 0x8d, 0xff, 0x00, 0xe0, 0xff, 0x00, 0x00, 0x80, 0x3f, 0x00,
- 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0xc0, 0x01
-};
-
-static const char PROGMEM idle_1_block_list[] = { //IDLE_1 and IDLE_2 flipped
- 0x3e, 0xc0, 0x07, 0xf8, 0x1f, 0xe0, 0x03, 0x7c, 0x80, 0x07, 0xf9, 0x01, 0x01, 0x02, 0x02, 0x02,
- 0x04, 0x08, 0x08, 0x08, 0x04, 0x04, 0x02, 0x02, 0x04, 0xf8, 0xe0, 0x18, 0x06, 0x01, 0x78, 0x78,
- 0xc0, 0xc0, 0x01, 0x02, 0x04, 0x18, 0xe0, 0x03, 0x04, 0x04, 0x04, 0x04, 0x02, 0x1c, 0xe0, 0x30,
- 0xc8, 0x01, 0x3e, 0xc0, 0x01, 0x3e, 0xc0, 0x03, 0xc2, 0xc0, 0x18, 0x18, 0x80, 0x40, 0x20, 0x10,
- 0x10, 0x08, 0x07, 0xfc, 0x03, 0x80, 0x83, 0x43, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01, 0x01, 0x01,
- 0x01, 0x07, 0x78, 0x80, 0x07, 0x78, 0x80, 0x07, 0xf8, 0x1f, 0xe0, 0x01, 0x1e, 0xe0
-};
-
-static const char PROGMEM idle_2_block_list[] = { //IDLE_3 flipped
- 0x3e, 0xc0, 0x07, 0xf8, 0x1f, 0xe0, 0x03, 0x7c, 0x80, 0x07, 0xf9, 0x01, 0x02, 0x02, 0x06, 0x04,
- 0x08, 0x08, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x82, 0x64, 0x18, 0xe0, 0x18, 0x06, 0x01, 0x78,
- 0x78, 0xc0, 0xc0, 0x01, 0x02, 0x04, 0x18, 0xe0, 0x03, 0x04, 0x04, 0x04, 0x04, 0x02, 0x1c, 0xe0,
- 0x30, 0xc8, 0x01, 0x1e, 0x20, 0x40, 0x80, 0x01, 0x3e, 0xc0, 0x03, 0xc2, 0xc0, 0x18, 0x18, 0x80,
- 0x40, 0x20, 0x10, 0x10, 0x08, 0x08, 0x04, 0x03, 0xfc, 0x03, 0x83, 0x43, 0x20, 0x10, 0x08, 0x04,
- 0x02, 0x01, 0x01, 0x01, 0x01, 0x07, 0x78, 0x80, 0x07, 0x78, 0x80, 0x07, 0xf8, 0x1f, 0xe0, 0x01,
- 0x1e, 0xe0
-};
-
-static const char PROGMEM idle_3_block_list[] = { //IDLE_4 flipped
- 0x3e, 0xc0, 0x07, 0xf8, 0x1f, 0xe0, 0x03, 0x7c, 0x80, 0x07, 0xf9, 0x01, 0x02, 0x02, 0x02, 0x04,
- 0x04, 0x08, 0x08, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x82, 0x64, 0x18, 0xe0, 0x18, 0x06, 0x01,
- 0x78, 0x78, 0xc0, 0xc0, 0x01, 0x02, 0x04, 0x18, 0xe0, 0x03, 0x04, 0x04, 0x04, 0x04, 0x02, 0x1c,
- 0xe0, 0x30, 0xc8, 0x01, 0x1e, 0x20, 0x40, 0x80, 0x01, 0x3e, 0xc0, 0x03, 0xc2, 0xc0, 0x18, 0x18,
- 0x80, 0x40, 0x20, 0x10, 0x10, 0x08, 0x08, 0x04, 0x03, 0xfc, 0x03, 0x80, 0x83, 0x43, 0x20, 0x10,
- 0x08, 0x04, 0x02, 0x01, 0x01, 0x01, 0x01, 0x07, 0x78, 0x80, 0x07, 0x78, 0x80, 0x07, 0xf8, 0x1f,
- 0xe0, 0x01, 0x1e, 0xe0
-};
-
-static const char PROGMEM idle_4_block_list[] = { //IDLE_5 flipped
- 0x3e, 0xc0, 0x07, 0xf8, 0x1f, 0xe0, 0x03, 0x7c, 0x80, 0x07, 0xf9, 0x01, 0x02, 0x02, 0x02, 0x04,
- 0x04, 0x08, 0x08, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0xe4, 0x18, 0xe0, 0x18, 0x06, 0x01, 0x78,
- 0x78, 0xc0, 0xc0, 0x01, 0x02, 0x04, 0x18, 0xe0, 0x03, 0x04, 0x04, 0x04, 0x04, 0x02, 0x1c, 0xe0,
- 0x30, 0xc8, 0x01, 0x1e, 0x60, 0x80, 0x01, 0x3e, 0xc0, 0x03, 0xc2, 0xc0, 0x18, 0x18, 0x80, 0x40,
- 0x20, 0x10, 0x10, 0x10, 0x08, 0x07, 0xfc, 0x03, 0x80, 0x83, 0x43, 0x20, 0x10, 0x08, 0x04, 0x02,
- 0x01, 0x01, 0x01, 0x01, 0x07, 0x78, 0x80, 0x07, 0x78, 0x80, 0x07, 0xf8, 0x1f, 0xe0, 0x01, 0x1e,
- 0xe0
-};
-
-static const char PROGMEM tap_1_block_list[] = { //TAP_1 flipped
- 0x3e, 0xc0, 0x07, 0xf8, 0x1f, 0xe0, 0x03, 0x7c, 0x80, 0x07, 0xf9, 0x01, 0x02, 0x02, 0x42, 0x44,
- 0x84, 0x88, 0x08, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x82, 0x64, 0x18, 0x01, 0x0e, 0xf0, 0x20,
- 0x26, 0x26, 0x29, 0x10, 0xd5, 0xce, 0x01, 0x02, 0x04, 0x18, 0xe0, 0x03, 0x1c, 0xe0, 0x30, 0xc8,
- 0x01, 0x1e, 0x20, 0x40, 0x80, 0x01, 0x3e, 0xc0, 0x03, 0x02, 0x18, 0x18, 0x80, 0x40, 0x20, 0x10,
- 0x10, 0x08, 0x08, 0x04, 0x03, 0xfc, 0x03, 0x80, 0x80, 0x40, 0x20, 0x10, 0x08, 0x84, 0xc2, 0xc1,
- 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xe0, 0xf0, 0xf8, 0xfc, 0xfc, 0xfd, 0xfd, 0x01, 0x07, 0x78,
- 0x80, 0x38, 0xf8, 0xf8, 0xf1, 0xe1, 0xc3, 0x83, 0x03, 0x03, 0x03, 0x03, 0x01, 0x01, 0x03, 0x03,
- 0x07, 0x07, 0x07, 0x78, 0x81, 0x07, 0x07, 0x03, 0x03, 0x01, 0x07, 0xf8, 0x1f, 0xe0, 0x01, 0x1e,
- 0xe0
-};
-
-static const char PROGMEM tap_2_block_list[] = { //TAP_2 flipped
- 0x3e, 0xc0, 0x07, 0xf8, 0x1f, 0xe0, 0x03, 0x7c, 0x80, 0x7e, 0xfe, 0xfe, 0xfe, 0x07, 0xf9, 0x01,
- 0x02, 0x02, 0x02, 0x04, 0x04, 0x08, 0x08, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x82, 0x64, 0x18,
- 0x01, 0x01, 0xe0, 0x18, 0x06, 0x01, 0xc0, 0xc0, 0x01, 0x02, 0x04, 0x18, 0xe0, 0x0f, 0x03, 0x04,
- 0x04, 0x04, 0x04, 0x02, 0x1c, 0xe0, 0x30, 0xc8, 0x01, 0x1e, 0x20, 0x40, 0x80, 0x01, 0x3e, 0xc0,
- 0x03, 0x02, 0x18, 0x18, 0x80, 0x40, 0x20, 0x10, 0x10, 0x08, 0x08, 0x04, 0x03, 0x0f, 0x70, 0x80,
- 0x81, 0x01, 0x31, 0x32, 0x8a, 0x24, 0x86, 0x79, 0x07, 0x78, 0x81, 0x01, 0x01, 0x01, 0x01, 0x07,
- 0x78, 0x80, 0x07, 0xf8, 0x1f, 0xe0, 0x01, 0x1e, 0xe0
-};
-
-// idle_1 and idle_2 are identical, so share them and save some space
-const char* idle_frames[NUM_IDLE_FRAMES] = {
- idle_1_block_list,
- idle_1_block_list,
- idle_2_block_list,
- idle_3_block_list,
- idle_4_block_list
-};
-
-const char* tap_frames[NUM_TAP_FRAMES] = {
- tap_1_block_list,
- tap_2_block_list
-};
-
-// idle_1 and idle_2 are identical, so save some space
-const char* idle_block_map[NUM_IDLE_FRAMES] = {
- idle_1_block_map,
- idle_1_block_map,
- idle_2_block_map,
- idle_3_block_map,
- idle_4_block_map
-};
-
-const char* tap_block_map[NUM_TAP_FRAMES] = {
- tap_1_block_map,
- tap_2_block_map
-};
-
-#else
-
-static const char PROGMEM idle_frames[NUM_IDLE_FRAMES][NUM_OLED_BYTES] = {
- { // IDLE 1 flipped
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x3e, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x07, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x1f, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x03, 0x7c, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xf9, 0x01, 0x01, 0x02, 0x02, 0x02, 0x04, 0x08, 0x08,
- 0x08, 0x04, 0x04, 0x02, 0x02, 0x04, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0xe0, 0x18, 0x06, 0x01, 0x00, 0x00, 0x00, 0x00, 0x78, 0x78, 0x00, 0xc0,
- 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x18, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x03, 0x04, 0x04, 0x04, 0x04, 0x02, 0x1c, 0xe0, 0x00, 0x00, 0x30, 0xc8,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x3e, 0xc0, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x3e, 0xc0, 0x00, 0x03,
- 0xc2, 0xc0, 0x18, 0x18, 0x00, 0x00, 0x00, 0x80, 0x40, 0x20, 0x10, 0x10, 0x08, 0x07, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x03, 0x00, 0x00, 0x80,
- 0x83, 0x43, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x07,
- 0x78, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x07, 0x78, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x1e, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
- },
- { //IDLE 2 flipped
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x3e, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x07, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x1f, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x03, 0x7c, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xf9, 0x01, 0x01, 0x02, 0x02, 0x02, 0x04, 0x08, 0x08,
- 0x08, 0x04, 0x04, 0x02, 0x02, 0x04, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0xe0, 0x18, 0x06, 0x01, 0x00, 0x00, 0x00, 0x00, 0x78, 0x78, 0x00, 0xc0,
- 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x18, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x03, 0x04, 0x04, 0x04, 0x04, 0x02, 0x1c, 0xe0, 0x00, 0x00, 0x30, 0xc8,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x3e, 0xc0, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x3e, 0xc0, 0x00, 0x03,
- 0xc2, 0xc0, 0x18, 0x18, 0x00, 0x00, 0x00, 0x80, 0x40, 0x20, 0x10, 0x10, 0x08, 0x07, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x03, 0x00, 0x00, 0x80,
- 0x83, 0x43, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x07,
- 0x78, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x07, 0x78, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x1e, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
- },
- { //IDLE 3 flipped
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x3e, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x07, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x1f, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x03, 0x7c, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xf9, 0x01, 0x02, 0x02, 0x06, 0x04, 0x08, 0x08, 0x04,
- 0x04, 0x04, 0x02, 0x02, 0x02, 0x82, 0x64, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0xe0, 0x18, 0x06, 0x01, 0x00, 0x00, 0x00, 0x78, 0x78, 0x00, 0xc0, 0xc0,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x18, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x03, 0x04, 0x04, 0x04, 0x04, 0x02, 0x1c, 0xe0, 0x00, 0x30, 0xc8, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x1e, 0x20, 0x40, 0x80, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x3e, 0xc0, 0x03, 0xc2,
- 0xc0, 0x18, 0x18, 0x00, 0x00, 0x00, 0x80, 0x40, 0x20, 0x10, 0x10, 0x08, 0x08, 0x04, 0x03, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x03, 0x00, 0x00, 0x83,
- 0x43, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x07,
- 0x78, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x07, 0x78, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x1e, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
- },
- { //IDLE 4 flipped
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x3e, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x07, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x1f, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x03, 0x7c, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xf9, 0x01, 0x02, 0x02, 0x02, 0x04, 0x04, 0x08, 0x08,
- 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x82, 0x64, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0xe0, 0x18, 0x06, 0x01, 0x00, 0x00, 0x00, 0x00, 0x78, 0x78, 0x00, 0xc0,
- 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x18, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x03, 0x04, 0x04, 0x04, 0x04, 0x02, 0x1c, 0xe0, 0x00, 0x00, 0x30, 0xc8,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x1e, 0x20, 0x40, 0x80, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x3e, 0xc0, 0x00, 0x03,
- 0xc2, 0xc0, 0x18, 0x18, 0x00, 0x00, 0x00, 0x80, 0x40, 0x20, 0x10, 0x10, 0x08, 0x08, 0x04, 0x03,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x03, 0x00, 0x00, 0x80,
- 0x83, 0x43, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x07,
- 0x78, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x07, 0x78, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x1e, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
- },
- { //IDLE 5 flipped
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x3e, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x07, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x1f, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x03, 0x7c, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xf9, 0x01, 0x02, 0x02, 0x02, 0x04, 0x04, 0x08, 0x08,
- 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0xe4, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0xe0, 0x18, 0x06, 0x01, 0x00, 0x00, 0x00, 0x00, 0x78, 0x78, 0x00, 0xc0,
- 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x18, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x03, 0x04, 0x04, 0x04, 0x04, 0x02, 0x1c, 0xe0, 0x00, 0x00, 0x30, 0xc8,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x1e, 0x60, 0x80, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x3e, 0xc0, 0x00, 0x03,
- 0xc2, 0xc0, 0x18, 0x18, 0x00, 0x00, 0x00, 0x80, 0x40, 0x20, 0x10, 0x10, 0x10, 0x08, 0x07, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x03, 0x00, 0x00, 0x80,
- 0x83, 0x43, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x07,
- 0x78, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x07, 0x78, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x1e, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
- }
- };
-static const char PROGMEM tap_frames[NUM_TAP_FRAMES][NUM_OLED_BYTES] = {
- { //Tap 1 flipped
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x3e, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x07, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x1f, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x03, 0x7c, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xf9, 0x01, 0x02, 0x02, 0x42, 0x44, 0x84, 0x88, 0x08,
- 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x82, 0x64, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x0e, 0xf0, 0x20, 0x26, 0x26, 0x29, 0x10, 0xd5,
- 0xce, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x18, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x1c, 0xe0, 0x00, 0x00, 0x30, 0xc8,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x1e, 0x20, 0x40, 0x80, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x3e, 0xc0, 0x00, 0x03,
- 0x02, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x80, 0x40, 0x20, 0x10, 0x10, 0x08, 0x08, 0x04, 0x03,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x03, 0x00, 0x00, 0x80,
- 0x80, 0x40, 0x20, 0x10, 0x08, 0x84, 0xc2, 0xc1, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xe0, 0xf0, 0xf8, 0xfc, 0xfc, 0xfd, 0xfd, 0x01, 0x07,
- 0x78, 0x80, 0x38, 0xf8, 0xf8, 0xf1, 0xe1, 0xc3, 0x83, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x03, 0x03, 0x07, 0x07, 0x00, 0x00,
- 0x00, 0x07, 0x78, 0x81, 0x07, 0x07, 0x03, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x1e, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
- },
- { //Tap 2 flipped
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x3e, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x07, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x1f, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x03, 0x7c, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x7e, 0xfe, 0xfe, 0xfe, 0x00, 0x07, 0xf9, 0x01, 0x02, 0x02, 0x02, 0x04, 0x04, 0x08, 0x08,
- 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x82, 0x64, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x01, 0x01, 0xe0, 0x18, 0x06, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0,
- 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x18, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x0f, 0x00, 0x00, 0x00, 0x03, 0x04, 0x04, 0x04, 0x04, 0x02, 0x1c, 0xe0, 0x00, 0x00, 0x30, 0xc8,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x1e, 0x20, 0x40, 0x80, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x3e, 0xc0, 0x00, 0x03,
- 0x02, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x80, 0x40, 0x20, 0x10, 0x10, 0x08, 0x08, 0x04, 0x03,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x70, 0x80,
- 0x81, 0x01, 0x31, 0x32, 0x8a, 0x24, 0x86, 0x79, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07,
- 0x78, 0x81, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x07, 0x78, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x1e, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
- },
- };
-#endif //USE_BITMAP_COMPRESSION
-#endif //OLED_ENABLE
diff --git a/keyboards/adpenrose/akemipad/keymaps/oled_bongocat/animation_process.h b/keyboards/adpenrose/akemipad/keymaps/oled_bongocat/animation_process.h
deleted file mode 100644
index 4280574a4671..000000000000
--- a/keyboards/adpenrose/akemipad/keymaps/oled_bongocat/animation_process.h
+++ /dev/null
@@ -1,97 +0,0 @@
-// Copyright 2022 Arturo Avila (@ADPenrose)
-// SPDX-License-Identifier: GPL-2.0-or-later
-
-#include QMK_KEYBOARD_H
-#include "animation_frames.h"
-
-#ifdef OLED_ENABLE
-#define IDLE_FRAME_DURATION 200 // Idle animation iteration rate in ms
-
-oled_rotation_t oled_init_user(oled_rotation_t rotation) { return OLED_ROTATION_270; }
-
-uint32_t anim_timer = 0;
-uint32_t anim_sleep = 0;
-uint8_t current_idle_frame = 0;
-
-bool tap_anim = false;
-bool tap_anim_toggle = false;
-
-
-// Decompress and write a precompressed bitmap frame to the OLED.
-// Documentation and python compression script available at:
-// https://github.com/nullbitsco/squeez-o
-#ifdef USE_OLED_BITMAP_COMPRESSION
-static void oled_write_compressed_P(const char* input_block_map, const char* input_block_list) {
- uint16_t block_index = 0;
- for (uint16_t i=0; i IDLE_FRAME_DURATION) {
- anim_timer = timer_read32();
- animation_phase();
- }
- anim_sleep = timer_read32();
- } else { // Turn off screen when timer threshold elapsed or reset time since last input
- if (timer_elapsed32(anim_sleep) > OLED_TIMEOUT) {
- oled_off();
- } else {
- if (timer_elapsed32(anim_timer) > IDLE_FRAME_DURATION) {
- anim_timer = timer_read32();
- animation_phase();
- }
- }
- }
-}
-#endif
-
-// Animate tap
-bool process_record_user(uint16_t keycode, keyrecord_t *record) {
- #ifdef OLED_ENABLE
- // Check if non-mod
- if ((keycode >= KC_TAB && keycode <= KC_SLASH) || // Tab - Slash (Symbols, Punctuation, Space)
- (keycode >= KC_KP_SLASH && keycode <= KC_KP_COMMA) || // Keypad slash - Keypad Dot
- (keycode >= KC_F1 && keycode <= KC_F12)) { // F1 - F12
- if (record->event.pressed) {
- // Display tap frames
- tap_anim_toggle = !tap_anim_toggle;
- #ifdef USE_OLED_BITMAP_COMPRESSION
- oled_write_compressed_P(tap_block_map[tap_anim_toggle], tap_frames[tap_anim_toggle]);
- #else
- oled_write_raw_P(tap_frames[tap_anim_toggle], NUM_OLED_BYTES);
- #endif
- }
- }
- #endif
-
- return true;
-}
diff --git a/keyboards/adpenrose/akemipad/keymaps/oled_bongocat/config.h b/keyboards/adpenrose/akemipad/keymaps/oled_bongocat/config.h
deleted file mode 100644
index 8667314cd4e2..000000000000
--- a/keyboards/adpenrose/akemipad/keymaps/oled_bongocat/config.h
+++ /dev/null
@@ -1,17 +0,0 @@
-// Copyright 2022 Arturo Avila (@ADPenrose)
-// SPDX-License-Identifier: GPL-2.0-or-later
-
-#pragma once
-
-#ifdef AUDIO_ENABLE
-# define NO_MUSIC_MODE
-#endif
-
-#ifdef OLED_ENABLE
-# define OLED_TIMEOUT 120000
-#endif
-
-#undef LOCKING_SUPPORT_ENABLE
-#undef LOCKING_RESYNC_ENABLE
-#define NO_ACTION_ONESHOT
-#define LAYER_STATE_8BIT
diff --git a/keyboards/adpenrose/akemipad/keymaps/oled_bongocat/keymap.c b/keyboards/adpenrose/akemipad/keymaps/oled_bongocat/keymap.c
deleted file mode 100644
index f9ccfbe76979..000000000000
--- a/keyboards/adpenrose/akemipad/keymaps/oled_bongocat/keymap.c
+++ /dev/null
@@ -1,177 +0,0 @@
-// Copyright 2022 Arturo Avila (@ADPenrose), Christopher Courtney/Drashna Jael're (@drashna)
-// SPDX-License-Identifier: GPL-2.0-or-later
-
-#include QMK_KEYBOARD_H
-#include "animation_process.h"
-
-/* Structure that helps store settings in memory and write to the EEPROM: */
-typedef union {
- uint32_t raw;
- struct {
- bool split_zero :1;
- bool split_enter :1;
- bool split_plus :1;
- };
-} via_layout_t;
-
-via_layout_t via_layouts;
-
-/* Keymap */
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [0] = LAYOUT_all(
- MO(1), MO(2), MO(3), CK_TOGG,
- KC_NUM, KC_PSLS, KC_PAST, KC_PMNS,
- KC_P7, KC_P8, KC_P9, KC_PPLS,
- KC_P4, KC_P5, KC_P6, KC_PPLS,
- KC_P1, KC_P2, KC_P3, KC_PENT,
- KC_MUTE, KC_P0, KC_P0, KC_PDOT, KC_PENT
- ),
- [1] = LAYOUT_all(
- KC_TRNS, CK_DOWN, CK_UP, CK_RST,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, 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] = LAYOUT_all(
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
- ),
- [3] = LAYOUT_all(
- QK_BOOT, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
- )
-};
-
-#if defined(ENCODER_MAP_ENABLE)
-const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
- [0] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
- [1] = { ENCODER_CCW_CW(RGB_HUD, RGB_HUI) },
- [2] = { ENCODER_CCW_CW(RGB_SAD, RGB_SAI) },
- [3] = { ENCODER_CCW_CW(RGB_VAD, RGB_VAI) }
-};
-#endif
-
-/* Setting layout options and debuggin text */
-void via_set_layout_options_kb(uint32_t value) {
- via_layouts.raw = value;
- #ifdef CONSOLE_ENABLE
- if (via_layouts.split_zero && via_layouts.split_enter && via_layouts.split_plus){
- xprintf("All three layouts are active with a value of: %d\n", value);
- } else if (!(via_layouts.split_zero) && via_layouts.split_enter && via_layouts.split_plus){
- xprintf("SE and SP layouts are active with a value of: %d\n", value);
- } else if (via_layouts.split_zero && !(via_layouts.split_enter) && via_layouts.split_plus){
- xprintf("SZ and SP layouts are active with a value of: %d\n", value);
- } else if (!(via_layouts.split_zero) && !(via_layouts.split_enter) && via_layouts.split_plus){
- xprintf("SP is the only layout active with a value of: %d\n", value);
- } else if (via_layouts.split_zero && via_layouts.split_enter && !(via_layouts.split_plus)){
- xprintf("SE and SZ layouts are active with a value of: %d\n", value);
- } else if (!(via_layouts.split_zero) && via_layouts.split_enter && !(via_layouts.split_plus)) {
- xprintf("SE is the only layout active with a value of: %d\n", value);
- } else if (via_layouts.split_zero && !(via_layouts.split_enter) && !(via_layouts.split_plus)){
- xprintf("SZ is the only layout active with a value of: %d\n", value);
- } else {
- xprintf("The base layout is active with a value of: %d\n", value);
- }
- #endif
-}
-
-/* Turing LEDs on/off depending on the layout selected on VIA */
-bool rgb_matrix_indicators_user(void){
- if (via_layouts.split_zero && via_layouts.split_enter && via_layouts.split_plus){
- rgb_matrix_set_color(12, 0, 0, 0);
- rgb_matrix_set_color(21, 0, 0, 0);
- rgb_matrix_set_color(23, 0, 0, 0);
- } else if (!(via_layouts.split_zero) && via_layouts.split_enter && via_layouts.split_plus){
- rgb_matrix_set_color(12, 0, 0, 0);
- rgb_matrix_set_color(21, 0, 0, 0);
- rgb_matrix_set_color(22, 0, 0, 0);
- rgb_matrix_set_color(24, 0, 0, 0);
- } else if (via_layouts.split_zero && !(via_layouts.split_enter) && via_layouts.split_plus){
- rgb_matrix_set_color(12, 0, 0, 0);
- rgb_matrix_set_color(20, 0, 0, 0);
- rgb_matrix_set_color(23, 0, 0, 0);
- rgb_matrix_set_color(26, 0, 0, 0);
- } else if (!(via_layouts.split_zero) && !(via_layouts.split_enter) && via_layouts.split_plus){
- rgb_matrix_set_color(12, 0, 0, 0);
- rgb_matrix_set_color(20, 0, 0, 0);
- rgb_matrix_set_color(22, 0, 0, 0);
- rgb_matrix_set_color(24, 0, 0, 0);
- rgb_matrix_set_color(26, 0, 0, 0);
- } else if (via_layouts.split_zero && via_layouts.split_enter && !(via_layouts.split_plus)){
- rgb_matrix_set_color(11, 0, 0, 0);
- rgb_matrix_set_color(16, 0, 0, 0);
- rgb_matrix_set_color(21, 0, 0, 0);
- rgb_matrix_set_color(23, 0, 0, 0);
- } else if (!(via_layouts.split_zero) && via_layouts.split_enter && !(via_layouts.split_plus)) {
- rgb_matrix_set_color(11, 0, 0, 0);
- rgb_matrix_set_color(16, 0, 0, 0);
- rgb_matrix_set_color(21, 0, 0, 0);
- rgb_matrix_set_color(22, 0, 0, 0);
- rgb_matrix_set_color(24, 0, 0, 0);
- } else if (via_layouts.split_zero && !(via_layouts.split_enter) && !(via_layouts.split_plus)){
- rgb_matrix_set_color(11, 0, 0, 0);
- rgb_matrix_set_color(16, 0, 0, 0);
- rgb_matrix_set_color(20, 0, 0, 0);
- rgb_matrix_set_color(23, 0, 0, 0);
- rgb_matrix_set_color(26, 0, 0, 0);
- } else {
- rgb_matrix_set_color(11, 0, 0, 0);
- rgb_matrix_set_color(16, 0, 0, 0);
- rgb_matrix_set_color(20, 0, 0, 0);
- rgb_matrix_set_color(22, 0, 0, 0);
- rgb_matrix_set_color(24, 0, 0, 0);
- rgb_matrix_set_color(26, 0, 0, 0);
- }
- return false;
-}
-
-/* OLED stuff */
-#ifdef OLED_ENABLE
-bool oled_task_user(void) {
- render_anim();
-
- // WPM render
- oled_set_cursor(1, 0);
- oled_write_P(PSTR(">"), false);
- oled_write(get_u8_str(get_current_wpm(), '0'), false);
-
- // Host Keyboard LED Status
- led_t led_state = host_keyboard_led_state();
- oled_set_cursor(0,14);
- oled_write_P(led_state.caps_lock ? PSTR("CPSLK") :" ", true);
- oled_set_cursor(0,15);
- oled_write_P(led_state.num_lock ? PSTR("NUMLK") :" ", true);
-
- return false;
-}
-
-/* WPM calculation considerations */
-bool wpm_keycode_user(uint16_t keycode) {
- if ((keycode >= QK_MOD_TAP && keycode <= QK_MOD_TAP_MAX) ||
- (keycode >= QK_LAYER_TAP && keycode <= QK_LAYER_TAP_MAX) ||
- (keycode >= QK_MODS && keycode <= QK_MODS_MAX)) {
- keycode = keycode & 0xFF;
- } else if (keycode > 0xFF) {
- keycode = 0;
- }
-
- // Include keys in WPM calculation
- if ((keycode >= KC_TAB && keycode <= KC_SLASH) || // Tab - Slash (Symbols, Punctuation, Space)
- (keycode >= KC_KP_SLASH && keycode <= KC_KP_COMMA) || // Keypad numbers - Keypad Dot
- (keycode >= KC_F1 && keycode <= KC_F12)) { // F1 - F12
- return true;
- }
-
- return false;
-}
-#endif
diff --git a/keyboards/adpenrose/akemipad/keymaps/oled_bongocat/readme.md b/keyboards/adpenrose/akemipad/keymaps/oled_bongocat/readme.md
deleted file mode 100644
index 5ae1b2280e89..000000000000
--- a/keyboards/adpenrose/akemipad/keymaps/oled_bongocat/readme.md
+++ /dev/null
@@ -1,19 +0,0 @@
-# The Bongo Cat VIA-compatible keymap for the AkemiPad
-
-# Features
-- Audio Click capabilitiy.
-- RGB Matrix Lighting (cycles left-right and up-down).
-- LEDs turn on and off depending on the layout selected on the VIA UI.
-- Encoder Map feature.
-- Bongo Cat animation with WPM counter and Caps Lock/Num Lock indicators.
-
-This keymap is optimized for a numpad and can fit the RGB matrix (with
-very few animations due to AVR constraints), the encoder map, the audio
-click feature and the display of the OLED animations. This was possible
-thanks to the [squeez-o](https://github.com/nullbitsco/squeez-o) compression tool.
-
-![Bongo Cat](https://i.imgur.com/Ty0qKnV.gif)
-
-___
-
-###### *This keymap is an adaptation designed to work with the AkemiPad. The reference keymap used was created for the Nibble keyboard, and you can check it [here](https://github.com/qmk/qmk_firmware/tree/master/keyboards/nullbitsco/nibble/keymaps/oled_bongocat).*
diff --git a/keyboards/adpenrose/akemipad/keymaps/oled_bongocat/rules.mk b/keyboards/adpenrose/akemipad/keymaps/oled_bongocat/rules.mk
deleted file mode 100644
index d313f3a4f96a..000000000000
--- a/keyboards/adpenrose/akemipad/keymaps/oled_bongocat/rules.mk
+++ /dev/null
@@ -1,8 +0,0 @@
-VIA_ENABLE = yes
-LTO_ENABLE = yes
-SPACE_CADET_ENABLE = no
-GRAVE_ESC_ENABLE = no
-MAGIC_ENABLE = no
-ENCODER_MAP_ENABLE = yes
-OLED_ENABLE = yes
-WPM_ENABLE = yes
diff --git a/keyboards/adpenrose/kintsugi/keymaps/oled_bongocat/animation_frames.h b/keyboards/adpenrose/kintsugi/keymaps/oled_bongocat/animation_frames.h
deleted file mode 100644
index 4a97accdde56..000000000000
--- a/keyboards/adpenrose/kintsugi/keymaps/oled_bongocat/animation_frames.h
+++ /dev/null
@@ -1,405 +0,0 @@
-/* Copyright 2022 adpenrose
- *
- * 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 .
- */
-
-#pragma once
-#ifdef OLED_ENABLE
-
-// Enable OLED bitmpa compression selectively.
-#define USE_OLED_BITMAP_COMPRESSION
-
-#define NUM_IDLE_FRAMES 5
-#define NUM_TAP_FRAMES 2
-#define NUM_OLED_BYTES 512
-
-#ifdef USE_OLED_BITMAP_COMPRESSION
-
-static const char PROGMEM idle_1_block_map[] = { //IDLE_1 and IDLE_2 flipped
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00,
- 0x18, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0xc0, 0xff, 0x7f, 0x00, 0xf0, 0xb0, 0xc1, 0x07,
- 0xf0, 0xcf, 0x00, 0x1c, 0x00, 0xb8, 0x8f, 0x3f, 0x00, 0x98, 0xff, 0x00, 0x00, 0xf0, 0x03, 0x00,
- 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0xc0, 0x01
-};
-
-static const char PROGMEM idle_2_block_map[] = { //IDLE_3 flipped
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00,
- 0x18, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0xc0, 0xff, 0xff, 0x00, 0xf0, 0xd8, 0xe0, 0x03,
- 0xf0, 0x6f, 0x00, 0x3e, 0x00, 0xf8, 0xc7, 0x7f, 0x00, 0x98, 0x7f, 0x00, 0x00, 0xf0, 0x03, 0x00,
- 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0xc0, 0x01
-};
-
-static const char PROGMEM idle_3_block_map[] = { //IDLE_4 flipped
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00,
- 0x18, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0xc0, 0xff, 0xff, 0x01, 0xf0, 0xb0, 0xc1, 0x07,
- 0xf0, 0xcf, 0x00, 0x7c, 0x00, 0xb8, 0x8f, 0xff, 0x00, 0x98, 0xff, 0x00, 0x00, 0xf0, 0x03, 0x00,
- 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0xc0, 0x01
-};
-
-static const char PROGMEM idle_4_block_map[] = { //IDLE_5 flipped
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00,
- 0x18, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0xc0, 0xff, 0xff, 0x00, 0xf0, 0xb0, 0xc1, 0x07,
- 0xf0, 0xcf, 0x00, 0x3c, 0x00, 0xb8, 0x8f, 0x7f, 0x00, 0x98, 0xff, 0x00, 0x00, 0xf0, 0x03, 0x00,
- 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0xc0, 0x01
-};
-
-static const char PROGMEM tap_1_block_map[] = { //TAP_1 flipped
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00,
- 0x18, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0xc0, 0xff, 0xff, 0x01, 0x80, 0xff, 0xc1, 0x07,
- 0x00, 0xce, 0x00, 0x7c, 0x00, 0xb8, 0x8d, 0xff, 0x00, 0x98, 0xff, 0x1f, 0xc0, 0xff, 0xff, 0x1f,
- 0x00, 0x3f, 0xfe, 0x01, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0xc0, 0x01
-};
-
-static const char PROGMEM tap_2_block_map[] = { //TAP_2 flipped
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00,
- 0x18, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0xde, 0xff, 0xff, 0x01, 0xfc, 0x80, 0xc1, 0x07,
- 0xf1, 0xcf, 0x00, 0x7c, 0x00, 0xb8, 0x8d, 0xff, 0x00, 0xe0, 0xff, 0x00, 0x00, 0x80, 0x3f, 0x00,
- 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0xc0, 0x01
-};
-
-static const char PROGMEM idle_1_block_list[] = { //IDLE_1 and IDLE_2 flipped
- 0x3e, 0xc0, 0x07, 0xf8, 0x1f, 0xe0, 0x03, 0x7c, 0x80, 0x07, 0xf9, 0x01, 0x01, 0x02, 0x02, 0x02,
- 0x04, 0x08, 0x08, 0x08, 0x04, 0x04, 0x02, 0x02, 0x04, 0xf8, 0xe0, 0x18, 0x06, 0x01, 0x78, 0x78,
- 0xc0, 0xc0, 0x01, 0x02, 0x04, 0x18, 0xe0, 0x03, 0x04, 0x04, 0x04, 0x04, 0x02, 0x1c, 0xe0, 0x30,
- 0xc8, 0x01, 0x3e, 0xc0, 0x01, 0x3e, 0xc0, 0x03, 0xc2, 0xc0, 0x18, 0x18, 0x80, 0x40, 0x20, 0x10,
- 0x10, 0x08, 0x07, 0xfc, 0x03, 0x80, 0x83, 0x43, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01, 0x01, 0x01,
- 0x01, 0x07, 0x78, 0x80, 0x07, 0x78, 0x80, 0x07, 0xf8, 0x1f, 0xe0, 0x01, 0x1e, 0xe0
-};
-
-static const char PROGMEM idle_2_block_list[] = { //IDLE_3 flipped
- 0x3e, 0xc0, 0x07, 0xf8, 0x1f, 0xe0, 0x03, 0x7c, 0x80, 0x07, 0xf9, 0x01, 0x02, 0x02, 0x06, 0x04,
- 0x08, 0x08, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x82, 0x64, 0x18, 0xe0, 0x18, 0x06, 0x01, 0x78,
- 0x78, 0xc0, 0xc0, 0x01, 0x02, 0x04, 0x18, 0xe0, 0x03, 0x04, 0x04, 0x04, 0x04, 0x02, 0x1c, 0xe0,
- 0x30, 0xc8, 0x01, 0x1e, 0x20, 0x40, 0x80, 0x01, 0x3e, 0xc0, 0x03, 0xc2, 0xc0, 0x18, 0x18, 0x80,
- 0x40, 0x20, 0x10, 0x10, 0x08, 0x08, 0x04, 0x03, 0xfc, 0x03, 0x83, 0x43, 0x20, 0x10, 0x08, 0x04,
- 0x02, 0x01, 0x01, 0x01, 0x01, 0x07, 0x78, 0x80, 0x07, 0x78, 0x80, 0x07, 0xf8, 0x1f, 0xe0, 0x01,
- 0x1e, 0xe0
-};
-
-static const char PROGMEM idle_3_block_list[] = { //IDLE_4 flipped
- 0x3e, 0xc0, 0x07, 0xf8, 0x1f, 0xe0, 0x03, 0x7c, 0x80, 0x07, 0xf9, 0x01, 0x02, 0x02, 0x02, 0x04,
- 0x04, 0x08, 0x08, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x82, 0x64, 0x18, 0xe0, 0x18, 0x06, 0x01,
- 0x78, 0x78, 0xc0, 0xc0, 0x01, 0x02, 0x04, 0x18, 0xe0, 0x03, 0x04, 0x04, 0x04, 0x04, 0x02, 0x1c,
- 0xe0, 0x30, 0xc8, 0x01, 0x1e, 0x20, 0x40, 0x80, 0x01, 0x3e, 0xc0, 0x03, 0xc2, 0xc0, 0x18, 0x18,
- 0x80, 0x40, 0x20, 0x10, 0x10, 0x08, 0x08, 0x04, 0x03, 0xfc, 0x03, 0x80, 0x83, 0x43, 0x20, 0x10,
- 0x08, 0x04, 0x02, 0x01, 0x01, 0x01, 0x01, 0x07, 0x78, 0x80, 0x07, 0x78, 0x80, 0x07, 0xf8, 0x1f,
- 0xe0, 0x01, 0x1e, 0xe0
-};
-
-static const char PROGMEM idle_4_block_list[] = { //IDLE_5 flipped
- 0x3e, 0xc0, 0x07, 0xf8, 0x1f, 0xe0, 0x03, 0x7c, 0x80, 0x07, 0xf9, 0x01, 0x02, 0x02, 0x02, 0x04,
- 0x04, 0x08, 0x08, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0xe4, 0x18, 0xe0, 0x18, 0x06, 0x01, 0x78,
- 0x78, 0xc0, 0xc0, 0x01, 0x02, 0x04, 0x18, 0xe0, 0x03, 0x04, 0x04, 0x04, 0x04, 0x02, 0x1c, 0xe0,
- 0x30, 0xc8, 0x01, 0x1e, 0x60, 0x80, 0x01, 0x3e, 0xc0, 0x03, 0xc2, 0xc0, 0x18, 0x18, 0x80, 0x40,
- 0x20, 0x10, 0x10, 0x10, 0x08, 0x07, 0xfc, 0x03, 0x80, 0x83, 0x43, 0x20, 0x10, 0x08, 0x04, 0x02,
- 0x01, 0x01, 0x01, 0x01, 0x07, 0x78, 0x80, 0x07, 0x78, 0x80, 0x07, 0xf8, 0x1f, 0xe0, 0x01, 0x1e,
- 0xe0
-};
-
-static const char PROGMEM tap_1_block_list[] = { //TAP_1 flipped
- 0x3e, 0xc0, 0x07, 0xf8, 0x1f, 0xe0, 0x03, 0x7c, 0x80, 0x07, 0xf9, 0x01, 0x02, 0x02, 0x42, 0x44,
- 0x84, 0x88, 0x08, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x82, 0x64, 0x18, 0x01, 0x0e, 0xf0, 0x20,
- 0x26, 0x26, 0x29, 0x10, 0xd5, 0xce, 0x01, 0x02, 0x04, 0x18, 0xe0, 0x03, 0x1c, 0xe0, 0x30, 0xc8,
- 0x01, 0x1e, 0x20, 0x40, 0x80, 0x01, 0x3e, 0xc0, 0x03, 0x02, 0x18, 0x18, 0x80, 0x40, 0x20, 0x10,
- 0x10, 0x08, 0x08, 0x04, 0x03, 0xfc, 0x03, 0x80, 0x80, 0x40, 0x20, 0x10, 0x08, 0x84, 0xc2, 0xc1,
- 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xe0, 0xf0, 0xf8, 0xfc, 0xfc, 0xfd, 0xfd, 0x01, 0x07, 0x78,
- 0x80, 0x38, 0xf8, 0xf8, 0xf1, 0xe1, 0xc3, 0x83, 0x03, 0x03, 0x03, 0x03, 0x01, 0x01, 0x03, 0x03,
- 0x07, 0x07, 0x07, 0x78, 0x81, 0x07, 0x07, 0x03, 0x03, 0x01, 0x07, 0xf8, 0x1f, 0xe0, 0x01, 0x1e,
- 0xe0
-};
-
-static const char PROGMEM tap_2_block_list[] = { //TAP_2 flipped
- 0x3e, 0xc0, 0x07, 0xf8, 0x1f, 0xe0, 0x03, 0x7c, 0x80, 0x7e, 0xfe, 0xfe, 0xfe, 0x07, 0xf9, 0x01,
- 0x02, 0x02, 0x02, 0x04, 0x04, 0x08, 0x08, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x82, 0x64, 0x18,
- 0x01, 0x01, 0xe0, 0x18, 0x06, 0x01, 0xc0, 0xc0, 0x01, 0x02, 0x04, 0x18, 0xe0, 0x0f, 0x03, 0x04,
- 0x04, 0x04, 0x04, 0x02, 0x1c, 0xe0, 0x30, 0xc8, 0x01, 0x1e, 0x20, 0x40, 0x80, 0x01, 0x3e, 0xc0,
- 0x03, 0x02, 0x18, 0x18, 0x80, 0x40, 0x20, 0x10, 0x10, 0x08, 0x08, 0x04, 0x03, 0x0f, 0x70, 0x80,
- 0x81, 0x01, 0x31, 0x32, 0x8a, 0x24, 0x86, 0x79, 0x07, 0x78, 0x81, 0x01, 0x01, 0x01, 0x01, 0x07,
- 0x78, 0x80, 0x07, 0xf8, 0x1f, 0xe0, 0x01, 0x1e, 0xe0
-};
-
-// idle_1 and idle_2 are identical, so share them and save some space
-const char* idle_frames[NUM_IDLE_FRAMES] = {
- idle_1_block_list,
- idle_1_block_list,
- idle_2_block_list,
- idle_3_block_list,
- idle_4_block_list
-};
-
-const char* tap_frames[NUM_TAP_FRAMES] = {
- tap_1_block_list,
- tap_2_block_list
-};
-
-// idle_1 and idle_2 are identical, so save some space
-const char* idle_block_map[NUM_IDLE_FRAMES] = {
- idle_1_block_map,
- idle_1_block_map,
- idle_2_block_map,
- idle_3_block_map,
- idle_4_block_map
-};
-
-const char* tap_block_map[NUM_TAP_FRAMES] = {
- tap_1_block_map,
- tap_2_block_map
-};
-
-#else
-
-static const char PROGMEM idle_frames[NUM_IDLE_FRAMES][NUM_OLED_BYTES] = {
- { // IDLE 1 flipped
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x3e, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x07, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x1f, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x03, 0x7c, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xf9, 0x01, 0x01, 0x02, 0x02, 0x02, 0x04, 0x08, 0x08,
- 0x08, 0x04, 0x04, 0x02, 0x02, 0x04, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0xe0, 0x18, 0x06, 0x01, 0x00, 0x00, 0x00, 0x00, 0x78, 0x78, 0x00, 0xc0,
- 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x18, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x03, 0x04, 0x04, 0x04, 0x04, 0x02, 0x1c, 0xe0, 0x00, 0x00, 0x30, 0xc8,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x3e, 0xc0, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x3e, 0xc0, 0x00, 0x03,
- 0xc2, 0xc0, 0x18, 0x18, 0x00, 0x00, 0x00, 0x80, 0x40, 0x20, 0x10, 0x10, 0x08, 0x07, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x03, 0x00, 0x00, 0x80,
- 0x83, 0x43, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x07,
- 0x78, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x07, 0x78, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x1e, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
- },
- { //IDLE 2 flipped
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x3e, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x07, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x1f, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x03, 0x7c, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xf9, 0x01, 0x01, 0x02, 0x02, 0x02, 0x04, 0x08, 0x08,
- 0x08, 0x04, 0x04, 0x02, 0x02, 0x04, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0xe0, 0x18, 0x06, 0x01, 0x00, 0x00, 0x00, 0x00, 0x78, 0x78, 0x00, 0xc0,
- 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x18, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x03, 0x04, 0x04, 0x04, 0x04, 0x02, 0x1c, 0xe0, 0x00, 0x00, 0x30, 0xc8,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x3e, 0xc0, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x3e, 0xc0, 0x00, 0x03,
- 0xc2, 0xc0, 0x18, 0x18, 0x00, 0x00, 0x00, 0x80, 0x40, 0x20, 0x10, 0x10, 0x08, 0x07, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x03, 0x00, 0x00, 0x80,
- 0x83, 0x43, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x07,
- 0x78, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x07, 0x78, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x1e, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
- },
- { //IDLE 3 flipped
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x3e, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x07, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x1f, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x03, 0x7c, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xf9, 0x01, 0x02, 0x02, 0x06, 0x04, 0x08, 0x08, 0x04,
- 0x04, 0x04, 0x02, 0x02, 0x02, 0x82, 0x64, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0xe0, 0x18, 0x06, 0x01, 0x00, 0x00, 0x00, 0x78, 0x78, 0x00, 0xc0, 0xc0,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x18, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x03, 0x04, 0x04, 0x04, 0x04, 0x02, 0x1c, 0xe0, 0x00, 0x30, 0xc8, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x1e, 0x20, 0x40, 0x80, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x3e, 0xc0, 0x03, 0xc2,
- 0xc0, 0x18, 0x18, 0x00, 0x00, 0x00, 0x80, 0x40, 0x20, 0x10, 0x10, 0x08, 0x08, 0x04, 0x03, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x03, 0x00, 0x00, 0x83,
- 0x43, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x07,
- 0x78, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x07, 0x78, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x1e, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
- },
- { //IDLE 4 flipped
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x3e, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x07, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x1f, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x03, 0x7c, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xf9, 0x01, 0x02, 0x02, 0x02, 0x04, 0x04, 0x08, 0x08,
- 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x82, 0x64, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0xe0, 0x18, 0x06, 0x01, 0x00, 0x00, 0x00, 0x00, 0x78, 0x78, 0x00, 0xc0,
- 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x18, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x03, 0x04, 0x04, 0x04, 0x04, 0x02, 0x1c, 0xe0, 0x00, 0x00, 0x30, 0xc8,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x1e, 0x20, 0x40, 0x80, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x3e, 0xc0, 0x00, 0x03,
- 0xc2, 0xc0, 0x18, 0x18, 0x00, 0x00, 0x00, 0x80, 0x40, 0x20, 0x10, 0x10, 0x08, 0x08, 0x04, 0x03,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x03, 0x00, 0x00, 0x80,
- 0x83, 0x43, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x07,
- 0x78, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x07, 0x78, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x1e, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
- },
- { //IDLE 5 flipped
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x3e, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x07, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x1f, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x03, 0x7c, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xf9, 0x01, 0x02, 0x02, 0x02, 0x04, 0x04, 0x08, 0x08,
- 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0xe4, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0xe0, 0x18, 0x06, 0x01, 0x00, 0x00, 0x00, 0x00, 0x78, 0x78, 0x00, 0xc0,
- 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x18, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x03, 0x04, 0x04, 0x04, 0x04, 0x02, 0x1c, 0xe0, 0x00, 0x00, 0x30, 0xc8,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x1e, 0x60, 0x80, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x3e, 0xc0, 0x00, 0x03,
- 0xc2, 0xc0, 0x18, 0x18, 0x00, 0x00, 0x00, 0x80, 0x40, 0x20, 0x10, 0x10, 0x10, 0x08, 0x07, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x03, 0x00, 0x00, 0x80,
- 0x83, 0x43, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x07,
- 0x78, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x07, 0x78, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x1e, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
- }
- };
-static const char PROGMEM tap_frames[NUM_TAP_FRAMES][NUM_OLED_BYTES] = {
- { //Tap 1 flipped
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x3e, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x07, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x1f, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x03, 0x7c, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xf9, 0x01, 0x02, 0x02, 0x42, 0x44, 0x84, 0x88, 0x08,
- 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x82, 0x64, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x0e, 0xf0, 0x20, 0x26, 0x26, 0x29, 0x10, 0xd5,
- 0xce, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x18, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x1c, 0xe0, 0x00, 0x00, 0x30, 0xc8,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x1e, 0x20, 0x40, 0x80, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x3e, 0xc0, 0x00, 0x03,
- 0x02, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x80, 0x40, 0x20, 0x10, 0x10, 0x08, 0x08, 0x04, 0x03,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x03, 0x00, 0x00, 0x80,
- 0x80, 0x40, 0x20, 0x10, 0x08, 0x84, 0xc2, 0xc1, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xe0, 0xf0, 0xf8, 0xfc, 0xfc, 0xfd, 0xfd, 0x01, 0x07,
- 0x78, 0x80, 0x38, 0xf8, 0xf8, 0xf1, 0xe1, 0xc3, 0x83, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x03, 0x03, 0x07, 0x07, 0x00, 0x00,
- 0x00, 0x07, 0x78, 0x81, 0x07, 0x07, 0x03, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x1e, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
- },
- { //Tap 2 flipped
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x3e, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x07, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x1f, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x03, 0x7c, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x7e, 0xfe, 0xfe, 0xfe, 0x00, 0x07, 0xf9, 0x01, 0x02, 0x02, 0x02, 0x04, 0x04, 0x08, 0x08,
- 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x82, 0x64, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x01, 0x01, 0xe0, 0x18, 0x06, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0,
- 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x18, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x0f, 0x00, 0x00, 0x00, 0x03, 0x04, 0x04, 0x04, 0x04, 0x02, 0x1c, 0xe0, 0x00, 0x00, 0x30, 0xc8,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x1e, 0x20, 0x40, 0x80, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x3e, 0xc0, 0x00, 0x03,
- 0x02, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x80, 0x40, 0x20, 0x10, 0x10, 0x08, 0x08, 0x04, 0x03,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x70, 0x80,
- 0x81, 0x01, 0x31, 0x32, 0x8a, 0x24, 0x86, 0x79, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07,
- 0x78, 0x81, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x07, 0x78, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x1e, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
- },
- };
-#endif //USE_BITMAP_COMPRESSION
-#endif //OLED_ENABLE
diff --git a/keyboards/adpenrose/kintsugi/keymaps/oled_bongocat/keymap.c b/keyboards/adpenrose/kintsugi/keymaps/oled_bongocat/keymap.c
deleted file mode 100644
index 900bb3e26511..000000000000
--- a/keyboards/adpenrose/kintsugi/keymaps/oled_bongocat/keymap.c
+++ /dev/null
@@ -1,181 +0,0 @@
-/* Copyright 2022 adpenrose
- *
- * 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 .
- */
-#include QMK_KEYBOARD_H
-#include "animation_frames.h"
-
-/* Base layout:
- * ,---------------------------------------------------------------------|
- * |` |1 |2 |3 |4 |5 |6 |7 |8 |9 |0 |- |= |Backspace| OLED|
- * |--------------------------------------------------------------- |
- * |Tab |Q |W |E |R |T |Y |U |I |O |P |[ | ] | \ OLED|
- * |---------------------------------------------------------------------|
- * |Caps |A |S |D |F |G |H |J |K |L |; |' | Enter | ENC |
- * |---------------------------------------------------------------------|
- * |Shft |Z |X |C |V |B |N |M |, |. |/ |Shift |Up| M0(3) |
- * |---------------------------------------------------------------------|
- * |Ctrl|GUI |Alt | Space |MO(1) |MO(2)| |Lt |Dn |Rt |
- * `---------------------------------------------------------------------|'
- */
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- /* Base */
- [0] = LAYOUT(
- KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,
- KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
- KC_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_MUTE,
- 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, MO(3),
- KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(1), MO(2), KC_LEFT, KC_DOWN, KC_RIGHT
- ),
- [1] = LAYOUT(
- _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MPLY,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______
- ),
- [2] = LAYOUT(
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______
- ),
- [3] = LAYOUT(
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______
- ),
-};
-
-/* Encoder */
-#if defined(ENCODER_MAP_ENABLE)
-const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
- [0] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
- [1] = { ENCODER_CCW_CW(KC_TRNS, KC_TRNS) },
- [2] = { ENCODER_CCW_CW(KC_TRNS, KC_TRNS) },
- [3] = { ENCODER_CCW_CW(KC_TRNS, KC_TRNS) }
-};
-#endif
-
-#ifdef OLED_ENABLE
-#define IDLE_FRAME_DURATION 200 // Idle animation iteration rate in ms
-
-oled_rotation_t oled_init_user(oled_rotation_t rotation) { return OLED_ROTATION_270; }
-
-uint32_t anim_timer = 0;
-uint32_t anim_sleep = 0;
-uint8_t current_idle_frame = 0;
-
-bool tap_anim = false;
-bool tap_anim_toggle = false;
-
-
-// Decompress and write a precompressed bitmap frame to the OLED.
-// Documentation and python compression script available at:
-// https://github.com/nullbitsco/squeez-o
-#ifdef USE_OLED_BITMAP_COMPRESSION
-static void oled_write_compressed_P(const char* input_block_map, const char* input_block_list) {
- uint16_t block_index = 0;
- for (uint16_t i=0; i IDLE_FRAME_DURATION) {
- anim_timer = timer_read32();
- animation_phase();
- }
- anim_sleep = timer_read32();
- } else { // Turn off screen when timer threshold elapsed or reset time since last input
- if (timer_elapsed32(anim_sleep) > OLED_TIMEOUT) {
- oled_off();
- } else {
- if (timer_elapsed32(anim_timer) > IDLE_FRAME_DURATION) {
- anim_timer = timer_read32();
- animation_phase();
- }
- }
- }
-}
-
-bool oled_task_user(void) {
- render_anim();
- oled_set_cursor(0, 0);
-
- uint8_t n = get_current_wpm();
- char wpm_counter[6];
- wpm_counter[5] = '\0';
- wpm_counter[4] = '0' + n % 10;
- wpm_counter[3] = '0' + (n /= 10) % 10;
- wpm_counter[2] = '0' + n / 10 ;
- wpm_counter[1] = '0';
- wpm_counter[0] = '>';
- oled_write_ln(wpm_counter, false);
-
- return false;
-}
-#endif
-
-// Animate tap
-bool process_record_user(uint16_t keycode, keyrecord_t *record) {
- #ifdef OLED_ENABLE
- // Check if non-mod
- if ((keycode >= KC_A && keycode <= KC_0) || (keycode >= KC_TAB && keycode <= KC_SLASH)) {
- if (record->event.pressed) {
- // Display tap frames
- tap_anim_toggle = !tap_anim_toggle;
- #ifdef USE_OLED_BITMAP_COMPRESSION
- oled_write_compressed_P(tap_block_map[tap_anim_toggle], tap_frames[tap_anim_toggle]);
- #else
- oled_write_raw_P(tap_frames[tap_anim_toggle], NUM_OLED_BYTES);
- #endif
- }
- }
- #endif
-
- return true;
-
-}
diff --git a/keyboards/adpenrose/kintsugi/keymaps/oled_bongocat/rules.mk b/keyboards/adpenrose/kintsugi/keymaps/oled_bongocat/rules.mk
deleted file mode 100644
index 24719cefb250..000000000000
--- a/keyboards/adpenrose/kintsugi/keymaps/oled_bongocat/rules.mk
+++ /dev/null
@@ -1,6 +0,0 @@
-VIA_ENABLE = yes
-LTO_ENABLE = yes
-WPM_ENABLE = yes
-SPACE_CADET_ENABLE = no
-MAGIC_ENABLE = no
-ENCODER_MAP_ENABLE = yes
diff --git a/keyboards/adpenrose/kintsugi/keymaps/snailmap_port/keymap.c b/keyboards/adpenrose/kintsugi/keymaps/snailmap_port/keymap.c
deleted file mode 100644
index 7a9e6fb24e61..000000000000
--- a/keyboards/adpenrose/kintsugi/keymaps/snailmap_port/keymap.c
+++ /dev/null
@@ -1,401 +0,0 @@
-/* Copyright 2022 adpenrose
- *
- * 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 .
- */
-#include QMK_KEYBOARD_H
-
-/* Base layout:
- * ,---------------------------------------------------------------------|
- * |` |1 |2 |3 |4 |5 |6 |7 |8 |9 |0 |- |= |Backspace| OLED|
- * |--------------------------------------------------------------- |
- * |Tab |Q |W |E |R |T |Y |U |I |O |P |[ | ] | \ OLED|
- * |---------------------------------------------------------------------|
- * |Caps |A |S |D |F |G |H |J |K |L |; |' | Enter | ENC |
- * |---------------------------------------------------------------------|
- * |Shft |Z |X |C |V |B |N |M |, |. |/ |Shift |Up| M0(3) |
- * |---------------------------------------------------------------------|
- * |Ctrl|GUI |Alt | Space |MO(1) |MO(2)| |Lt |Dn |Rt |
- * `---------------------------------------------------------------------|'
- */
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- /* Base */
- [0] = LAYOUT(
- KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,
- KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
- KC_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_MUTE,
- 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, MO(3),
- KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(1), MO(2), KC_LEFT, KC_DOWN, KC_RIGHT
- ),
- [1] = LAYOUT(
- _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MPLY,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______
- ),
- [2] = LAYOUT(
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______
- ),
- [3] = LAYOUT(
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______
- ),
-};
-
-/* Encoder */
-#if defined(ENCODER_MAP_ENABLE)
-const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
- [0] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
- [1] = { ENCODER_CCW_CW(KC_TRNS, KC_TRNS) },
- [2] = { ENCODER_CCW_CW(KC_TRNS, KC_TRNS) },
- [3] = { ENCODER_CCW_CW(KC_TRNS, KC_TRNS) }
-};
-#endif
-
-#ifdef OLED_ENABLE
-/*=========================================== OLED CONFIGURATION ===========================================*/
-bool oled_horizontal = true; // OLED rotation (true = horizontal, false = vertical)
-bool graph_direction = false; // Graph movement (true = right to left, false = left to right)
-float graph_top_wpm = 100.0; // Minimum WPM required to reach the top of the graph
-int graph_refresh = 1000; // In milliseconds, determines the graph-line frequency
-int icon_med_wpm = 50; // WPM required to display the medium snail
-int icon_fast_wpm = 72; // WPM required to display the fast snail
-// Layer names: Should be exactly 5 characters in length if vertical display, or 6 characters if horizontal
-#define MA_LAYER_NAME "QWRTY" // Layer 0 name
-#define L1_LAYER_NAME "FUNCT" // Layer 1 name
-#define L2_LAYER_NAME "NMPAD" // Layer 2 name
-#define L3_LAYER_NAME "RANDM" // Layer 3 name
-// Constants required for the background render, the graph render and the WPM counter. THESE VALUES SHOULD NOT BE CHANGED.
-bool first_loop = true;
-int timer = 0;
-int wpm_limit = 20;
-int max_wpm = -1;
-int wpm_icon = -1;
-int graph_lines[65];
-/*================================================================================================================*/
-
-/* Rotation of the OLED: */
-oled_rotation_t oled_init_user(oled_rotation_t rotation) {
- if (oled_horizontal) {
- return OLED_ROTATION_180;
- } else {
- return OLED_ROTATION_270;
- }
-}
-
-// Toggles pixel on/off, converts horizontal coordinates to vertical equivalent if necessary
-static void write_pixel(int x, int y, bool onoff) {
- if (oled_horizontal) {
- oled_write_pixel(x, y, onoff);
- } else {
- oled_write_pixel(y, 127 - x, onoff);
- }
-}
-
-/*====================================== BASE KEYBOARD MATRIX IMAGES =======================================*/
-// Draw static background image to OLED (keyboard with no bottom row)
-static void render_background(void) {
- if (oled_horizontal) {
- static const char PROGMEM oled_keymap_horizontal[] = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x84, 0x80, 0x80, 0x80, 0x80, 0x04, 0x00, 0x00, 0x00, 0x80, 0x04, 0x00, 0x00, 0x00, 0x80, 0x04,
- 0x00, 0x00, 0x00, 0x80, 0x04, 0x00, 0x00, 0x00, 0x80, 0x04, 0x00, 0x00, 0x00, 0x80, 0x04, 0x00,
- 0x00, 0x00, 0x80, 0x04, 0x00, 0x00, 0x00, 0x80, 0x04, 0x00, 0x00, 0x00, 0x80, 0x04, 0x00, 0x00,
- 0x00, 0x80, 0x04, 0x00, 0x00, 0x00, 0x80, 0x04, 0x00, 0x00, 0x00, 0x80, 0x04, 0x00, 0x00, 0x00,
- 0x80, 0x04, 0x04, 0x04, 0x04, 0x84, 0x84, 0x84, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x10,
- 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00,
- 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00,
- 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
- 0x00, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x42, 0x42, 0x02, 0x02, 0x02, 0x02, 0x42, 0x42, 0x00, 0x00, 0x00, 0x00, 0x42, 0x40, 0x00, 0x00,
- 0x00, 0x02, 0x40, 0x40, 0x40, 0x40, 0x42, 0x40, 0x40, 0x40, 0x40, 0x42, 0x40, 0x40, 0x40, 0x40,
- 0x42, 0x40, 0x40, 0x40, 0x40, 0x42, 0x40, 0x40, 0x40, 0x40, 0x42, 0x40, 0x40, 0x40, 0x40, 0x42,
- 0x40, 0x40, 0x40, 0x00, 0x02, 0x00, 0x00, 0x40, 0x40, 0x02, 0x00, 0x00, 0x00, 0x40, 0x42, 0x02,
- 0x02, 0x02, 0x02, 0x42, 0x00, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
- };
- oled_write_raw_P(oled_keymap_horizontal, sizeof(oled_keymap_horizontal));
- } else {
- static const char PROGMEM oled_keymap_vertical[] = {
- 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x84, 0x00, 0x00, 0x00,
- 0x00, 0x84, 0x00, 0x00, 0x00, 0x00, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x87, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00,
- 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
- 0x00, 0x43, 0x00, 0x00, 0x00, 0x00, 0x86, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00,
- 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0xe1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x84, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x84, 0x00, 0x00, 0x00,
- 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
- 0x00, 0x84, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x42, 0x00, 0x00, 0x00, 0x00, 0x84, 0x00, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00,
- 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
- 0x00, 0x42, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00,
- 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x84, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00,
- 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0xc3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
- };
- oled_write_raw_P(oled_keymap_vertical, sizeof(oled_keymap_vertical));
- }
-}
-/*================================================================================================================*/
-
-
-/*=============================== PIXEL'S COORDINATES FOR EACH PHYSICAL KEY ================================*/
-// Location of OLED keyboard's top left pixel, relative to the display
-static const int keymap_template[2] = {46, 0};
-// Location of key highlights top left pixels, relative to keymap_template {X, Y, Key length in px}
-static int keymap_coords[MATRIX_ROWS][MATRIX_COLS][3] = {
- { {0, 0, 1}, {5, 0, 1}, {10, 0, 1}, {15, 0, 1}, {20, 0, 1}, {25, 0, 1}, {30, 0, 1} },
- { {0, 5, 5}, {9, 5, 1}, {14, 5, 1}, {19, 5, 1}, {24, 5, 1}, {29, 5, 1}, {34, 5, 1} },
- { {0, 10, 6}, {10, 10, 1}, {15, 10, 1}, {20, 10, 1}, {25, 10, 1}, {30, 10, 1}, {35, 10, 1} },
- { {0, 15, 8}, {12, 15, 1}, {17, 15, 1}, {22, 15, 1}, {27, 15, 1}, {32, 15, 1}, {37, 15, 1} },
- { {0, 20, 2}, {6, 20, 2}, {12, 20, 2}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {18, 20, 33} },
- { {35, 0, 1}, {40, 0, 1}, {45, 0, 1}, {50, 0, 1}, {55, 0, 1}, {60, 0, 1}, {65, 0, 8} },
- { {39, 5, 1}, {44, 5, 1}, {49, 5, 1}, {54, 5, 1}, {59, 5, 1}, {64, 5, 1}, {69, 5, 4} },
- { {40, 10, 1}, {45, 10, 1}, {50, 10, 1}, {55, 10, 1}, {60, 10, 1}, {65, 10, 8}, {77, 10, 1} },
- { {42, 15, 1}, {47, 15, 1}, {52, 15, 1}, {57, 15, 1}, {62, 15, 6}, {72, 15, 1}, {77, 15, 1} },
- { {0, 0, 0}, {0, 0, 0}, {55, 20, 2}, {61, 20, 2}, {67, 20, 1}, {72, 20, 1}, {77, 20, 1} },
- };
-
-// Toggles pixels surrounding key
-static void render_keymap(uint8_t key_row, uint8_t key_col, bool onoff) {
- int length = keymap_coords[key_row][key_col][2] + 4;
- int left = keymap_coords[key_row][key_col][0] + keymap_template[0];
- int top = keymap_coords[key_row][key_col][1] + keymap_template[1];
- int right = left + length - 1;
- int bottom = top + 4;
-
- // Draw top and bottom walls (horizontal for px)
- for (int x = 0; x < length; x++) {
- write_pixel(left + x, top, onoff);
- write_pixel(left + x, bottom, onoff);
- }
- // Draw left and right walls (vertical for 5px)
- for (int y = 0; y < 5; y++) {
- write_pixel(left, top + y, onoff);
- write_pixel(right, top + y, onoff);
- }
-}
-/*================================================================================================================*/
-
-/*============================================= LAYER'S NAME ===============================================*/
-// Write active layer name
-static void render_layer_state(void) {
- if (oled_horizontal) {
- oled_set_cursor(0, 0);
- } else {
- oled_set_cursor(0, 15);
- }
- switch (get_highest_layer(layer_state)) {
- case 0:
- oled_write_P(PSTR(MA_LAYER_NAME), false);
- break;
- case 1:
- oled_write_P(PSTR(L1_LAYER_NAME), false);
- break;
- case 2:
- oled_write_P(PSTR(L2_LAYER_NAME), false);
- break;
- case 3:
- oled_write_P(PSTR(L3_LAYER_NAME), false);
- break;
- default:
- oled_write("ERROR", false);
- break;
- }
-}
-/*================================================================================================================*/
-
-/*==================================== WPM COUNTERS (CURRENT AND MAX) ======================================*/
-// Update WPM counters
-static void render_wpm_counters(int current_wpm) {
- int cursorposition_cur = 2;
- int cursorposition_max = 1;
- if (oled_horizontal == false) {
- cursorposition_cur = 13;
- cursorposition_max = 14;
- }
-
- oled_set_cursor(0, cursorposition_cur);
- oled_write(get_u8_str(get_current_wpm(), '0'), false);
-
- char wpm_counter[4];
- wpm_counter[3] = '\0';
- wpm_counter[2] = '0' + current_wpm % 10;
- wpm_counter[1] = '0' + (current_wpm / 10) % 10;
- wpm_counter[0] = '0' + (current_wpm / 100) % 10;
-
- if (current_wpm > max_wpm) {
- max_wpm = current_wpm;
- wpm_limit = max_wpm + 20;
- oled_set_cursor(0, cursorposition_max);
- oled_write(wpm_counter, false);
- }
-}
-/*================================================================================================================*/
-
-/*============================================== WPM GRAPH =================================================*/
-// Update WPM graph
-static void render_wpm_graph(int current_wpm) {
- int line_height = ((current_wpm / graph_top_wpm) * 7);
- if (line_height > 7) {
- line_height = 7;
- }
- // Count graph line pixels, return if nothing to draw
- int pixel_count = line_height;
- for (int i = 0; i < 64; i++) {
- pixel_count += graph_lines[i];
- }
- if (pixel_count == 0) {
- return;
- }
- // Shift array elements left or right depending on graph_direction, append new graph line
- if (graph_direction) {
- for (int i = 0; i < 64; i++) {
- graph_lines[i] = graph_lines[i + 1];
- }
- graph_lines[64] = line_height;
- } else {
- for (int i = 64; i > 0; i--) {
- graph_lines[i] = graph_lines[i - 1];
- }
- graph_lines[0] = line_height;
- }
- // Draw all graph lines (left to right, bottom to top)
- int draw_count, arrpos;
- for (int x = 1; x <= 127; x += 2) {
- arrpos = x / 2;
- draw_count = graph_lines[arrpos];
- for (int y = 31; y >= 25; y--) {
- if (draw_count > 0) {
- write_pixel(x, y, true);
- draw_count--;
- } else {
- write_pixel(x, y, false);
- }
- }
- }
-}
-/*================================================================================================================*/
-
-/*======================================== WPM BASED SNAIL ICON ============================================*/
-// Update WPM snail icon
-static void render_wpm_icon(int current_wpm) {
- // wpm_icon is used to prevent unnecessary redraw
- if ((current_wpm < icon_med_wpm) && (wpm_icon != 0)) {
- wpm_icon = 0;
- } else if ((current_wpm >= icon_med_wpm) && (current_wpm < icon_fast_wpm) && (wpm_icon != 1)) {
- wpm_icon = 1;
- } else if ((current_wpm >= icon_fast_wpm) && (wpm_icon != 2)) {
- wpm_icon = 2;
- } else {
- return;
- }
- static const char PROGMEM snails[][2][24] = {
- {{0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x20, 0xA0, 0x20, 0x40, 0x40, 0x80, 0x00, 0x00, 0x00, 0x80, 0x40, 0x20, 0x50, 0x88, 0x04, 0x00, 0x00},
- {0x40, 0x60, 0x50, 0x4E, 0x51, 0x64, 0x4A, 0x51, 0x54, 0x49, 0x41, 0x62, 0x54, 0x49, 0x46, 0x41, 0x40, 0x30, 0x09, 0x04, 0x02, 0x01, 0x00, 0x00}},
- {{0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x40, 0x40, 0x40, 0x40, 0x80, 0x80, 0x00, 0x00, 0x00, 0x04, 0x98, 0x60, 0x80, 0x00, 0x00, 0x00, 0x00},
- {0x60, 0x50, 0x54, 0x4A, 0x51, 0x64, 0x4A, 0x51, 0x55, 0x49, 0x41, 0x62, 0x54, 0x49, 0x46, 0x41, 0x21, 0x10, 0x0A, 0x08, 0x05, 0x02, 0x00, 0x00}},
- {{0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x40, 0x40, 0x40, 0x80, 0x80, 0x10, 0x10, 0x10, 0x20, 0x40, 0x40, 0xC0, 0x80, 0x80, 0x00, 0x00, 0x00},
- {0x60, 0x58, 0x54, 0x62, 0x49, 0x54, 0x52, 0x51, 0x55, 0x49, 0x62, 0x52, 0x4D, 0x45, 0x46, 0x22, 0x21, 0x11, 0x10, 0x0A, 0x08, 0x05, 0x02, 0x00}}
- };
- if (oled_horizontal) {
- oled_set_cursor(3, 1);
- oled_write_raw_P(snails[wpm_icon][0], sizeof(snails[wpm_icon][0]));
- oled_set_cursor(3, 2);
- oled_write_raw_P(snails[wpm_icon][1], sizeof(snails[wpm_icon][1]));
- } else {
- oled_set_cursor(0, 11);
- oled_write_raw_P(snails[wpm_icon][0], sizeof(snails[wpm_icon][0]));
- oled_set_cursor(0, 12);
- oled_write_raw_P(snails[wpm_icon][1], sizeof(snails[wpm_icon][1]));
- }
-}
-/*================================================================================================================*/
-
-/* Function that renders stuff on the oled */
-bool oled_task_user(void) {
- // Draw OLED keyboard, preventing redraw.
- if (first_loop) {
- render_background();
- first_loop = false;
- }
-
- // Get current WPM
- int current_wpm = get_current_wpm();
- // Write active layer name to display
- render_layer_state();
- // Update WPM counters
- render_wpm_counters(current_wpm);
- // Update WPM snail icon
- render_wpm_icon(current_wpm);
- // Update WPM graph every graph_refresh milliseconds
- if (timer_elapsed(timer) > graph_refresh) {
- render_wpm_graph(current_wpm);
- timer = timer_read();
- }
-
- return false;
-}
-#endif
-
-// Called by QMK during key processing
-bool process_record_user(uint16_t keycode, keyrecord_t *record) {
- #ifdef OLED_ENABLE
- // Toggle pixels surrounding key
- render_keymap(record->event.key.row, record->event.key.col, record->event.pressed);
- #endif
-
- return true;
-}
diff --git a/keyboards/adpenrose/kintsugi/keymaps/snailmap_port/readme.md b/keyboards/adpenrose/kintsugi/keymaps/snailmap_port/readme.md
deleted file mode 100644
index eb7b7577af0f..000000000000
--- a/keyboards/adpenrose/kintsugi/keymaps/snailmap_port/readme.md
+++ /dev/null
@@ -1,30 +0,0 @@
-# SnailMap-ported keymap for the Kintsugi
-
-## Features
-
-- Keyboard matrix that highlights whichever key is currently pressed.
-- Little cute snail icon that changes acording to the current WPM.
-- Counters for current and max WPM values.
-- Active layer name.
-- Mini WPM graph.
-
-## How to customize
-
-The `OLED configuration variables` can be used to easily customize the display:
-
-```
-oled_horizontal - Horizontal or vertical orientation
-graph_direction - Graph movement direction
-graph_refresh - Frequency of graph lines
-graph_top_wpm - WPM required to reach the top of the graph
-icon_med_wpm - WPM required to display the medium snail
-icon_fast_wpm - WPM required to display the fast snail
-MA_LAYER_NAME - Layer 0 display name
-L1_LAYER_NAME - Layer 1 display name
-L2_LAYER_NAME - Layer 2 display name
-L3_LAYER_NAME - Layer 3 display name
-```
-
-___
-
-###### *This keymap is an adaptation designed to work with the Kintsugi keyboard. The original SnailMap keymap was created by [dogspace](https://github.com/dogspace) for the Nibble keyboard, and you can check it [here](https://github.com/qmk/qmk_firmware/tree/master/keyboards/nullbitsco/nibble/keymaps/snailmap).*
\ No newline at end of file
diff --git a/keyboards/adpenrose/kintsugi/keymaps/snailmap_port/rules.mk b/keyboards/adpenrose/kintsugi/keymaps/snailmap_port/rules.mk
deleted file mode 100644
index 24719cefb250..000000000000
--- a/keyboards/adpenrose/kintsugi/keymaps/snailmap_port/rules.mk
+++ /dev/null
@@ -1,6 +0,0 @@
-VIA_ENABLE = yes
-LTO_ENABLE = yes
-WPM_ENABLE = yes
-SPACE_CADET_ENABLE = no
-MAGIC_ENABLE = no
-ENCODER_MAP_ENABLE = yes
diff --git a/keyboards/adpenrose/mine/keymaps/solenoid/keymap.c b/keyboards/adpenrose/mine/keymaps/solenoid/keymap.c
deleted file mode 100644
index cd9e1768eb6e..000000000000
--- a/keyboards/adpenrose/mine/keymaps/solenoid/keymap.c
+++ /dev/null
@@ -1,43 +0,0 @@
-// Copyright 2022 Arturo Avila (@Arturo Avila)
-// SPDX-License-Identifier: GPL-2.0-or-later
-
-#include QMK_KEYBOARD_H
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [0] = LAYOUT_all(
- HF_TOGG,
- 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_HOME, KC_END, KC_NUM, KC_PSLS, KC_PAST, KC_PMNS,
- 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_P7, KC_P8, KC_P9, KC_PPLS,
- 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_P4, KC_P5, KC_P6,
- 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_NUHS, KC_ENT, KC_P1, KC_P2, KC_P3, KC_PENT,
- KC_LSFT, MO(1), KC_Z, KC_X, KC_C, KC_V, KC_B, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_P0, KC_PDOT,
- KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_RALT, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RIGHT
- ),
-
- [1] = LAYOUT_all(
- KC_TRNS,
- QK_BOOT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_DEL, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
- )
-};
-
-#if defined(ENCODER_MAP_ENABLE)
-const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
- [0] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
- [1] = { ENCODER_CCW_CW(KC_TRNS, KC_TRNS) }
-};
-#endif
-
-#ifdef HAPTIC_ENABLE
-bool get_haptic_enabled_key(uint16_t keycode, keyrecord_t *record) {
- switch (keycode) {
- case KC_VOLU ... KC_VOLD:
- return false;
- }
- return true;
-}
-#endif
diff --git a/keyboards/adpenrose/mine/keymaps/solenoid/rules.mk b/keyboards/adpenrose/mine/keymaps/solenoid/rules.mk
deleted file mode 100644
index 345c10cdd484..000000000000
--- a/keyboards/adpenrose/mine/keymaps/solenoid/rules.mk
+++ /dev/null
@@ -1,4 +0,0 @@
-VIA_ENABLE = yes
-HAPTIC_ENABLE = yes
-HAPTIC_DRIVER = solenoid
-ENCODER_MAP_ENABLE = yes # Encoder mapping functionality
\ No newline at end of file
diff --git a/keyboards/adpenrose/shisaku/keymaps/solenoid/keymap.c b/keyboards/adpenrose/shisaku/keymaps/solenoid/keymap.c
deleted file mode 100644
index 0d69e305d1c2..000000000000
--- a/keyboards/adpenrose/shisaku/keymaps/solenoid/keymap.c
+++ /dev/null
@@ -1,32 +0,0 @@
-// Copyright 2022 Arturo Avila (@ADPenrose)
-// SPDX-License-Identifier: GPL-2.0-or-later
-
-#include QMK_KEYBOARD_H
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [0] = LAYOUT(
- KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
- KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_ENT,
- KC_LSFT, MO(2), KC_Z, KC_X, KC_C, KC_V, KC_B, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_UP, KC_RSFT,
- KC_LCTL, KC_LALT, KC_SPC, MO(1), KC_SPC, KC_LEFT, KC_DOWN, KC_RIGHT
- ),
- [1] = LAYOUT(
- KC_TILD, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, HF_TOGG,
- KC_LGUI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_QUOT, KC_BSLS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_SLSH,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, MO(3), KC_TRNS, KC_TRNS, KC_TRNS
- ),
- [2] = LAYOUT(
- KC_TAB, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_DEL,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, QK_BOOT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
- ),
- [3] = LAYOUT(
- KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
- )
-
-};
diff --git a/keyboards/adpenrose/shisaku/keymaps/solenoid/readme.md b/keyboards/adpenrose/shisaku/keymaps/solenoid/readme.md
deleted file mode 100644
index e9d4bb6af9f8..000000000000
--- a/keyboards/adpenrose/shisaku/keymaps/solenoid/readme.md
+++ /dev/null
@@ -1 +0,0 @@
-# Solenoid keymap for Shisaku
diff --git a/keyboards/adpenrose/shisaku/keymaps/solenoid/rules.mk b/keyboards/adpenrose/shisaku/keymaps/solenoid/rules.mk
deleted file mode 100644
index 6bec144827bc..000000000000
--- a/keyboards/adpenrose/shisaku/keymaps/solenoid/rules.mk
+++ /dev/null
@@ -1,4 +0,0 @@
-VIA_ENABLE = yes
-LTO_ENABLE = yes
-HAPTIC_ENABLE = yes
-HAPTIC_DRIVER = solenoid
\ No newline at end of file
diff --git a/keyboards/aeboards/constellation/rev2/info.json b/keyboards/aeboards/constellation/rev2/info.json
index 87cb103d4a96..b8dae5f20cfa 100644
--- a/keyboards/aeboards/constellation/rev2/info.json
+++ b/keyboards/aeboards/constellation/rev2/info.json
@@ -13,6 +13,9 @@
"rows": ["B15", "A14", "A2", "B13", "B14"]
},
"diode_direction": "COL2ROW",
+ "eeprom": {
+ "driver": "i2c"
+ },
"processor": "STM32L422",
"bootloader": "stm32-dfu",
"layout_aliases": {
diff --git a/keyboards/aeboards/constellation/rev2/rules.mk b/keyboards/aeboards/constellation/rev2/rules.mk
index 0fa89d45d2de..c12086843f1c 100755
--- a/keyboards/aeboards/constellation/rev2/rules.mk
+++ b/keyboards/aeboards/constellation/rev2/rules.mk
@@ -9,5 +9,3 @@ COMMAND_ENABLE = no # Commands for debug and configuration
NKRO_ENABLE = yes # Enable N-Key Rollover
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
AUDIO_ENABLE = no # Audio output
-
-EEPROM_DRIVER = i2c
diff --git a/keyboards/aeboards/ext65/rev1/info.json b/keyboards/aeboards/ext65/rev1/info.json
index ffe8d2443ec1..0e110e92357b 100644
--- a/keyboards/aeboards/ext65/rev1/info.json
+++ b/keyboards/aeboards/ext65/rev1/info.json
@@ -14,8 +14,11 @@
"cols": ["B2", "B3", "B1", "B0", "F7", "F0", "F1", "F4", "F5", "F6"],
"rows": ["C6", "C7", "B5", "B6", "D7", "B4", "D4", "D6", "B7", "E6"]
},
+ "layout_aliases": {
+ "LAYOUT_ext65": "LAYOUT"
+ },
"layouts": {
- "LAYOUT_ext65": {
+ "LAYOUT": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [1, 0], "x": 1, "y": 0},
diff --git a/keyboards/aeboards/ext65/rev1/keymaps/default/keymap.c b/keyboards/aeboards/ext65/rev1/keymaps/default/keymap.c
index c93172925824..e246b5c471d9 100644
--- a/keyboards/aeboards/ext65/rev1/keymaps/default/keymap.c
+++ b/keyboards/aeboards/ext65/rev1/keymaps/default/keymap.c
@@ -29,7 +29,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | . | 0 | | Ctrl | Win | Alt | Space | FN | Ctrl | |Left| Dn | Rght|
* `------------------------------------------------------------------------------------------'
*/
- [0] = LAYOUT_ext65(
+ [0] = LAYOUT(
KC_PMNS, KC_PAST, KC_PSLS, KC_NUM, KC_ESC , KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , KC_MINS, KC_EQL , KC_BSLS, KC_GRV , KC_PSCR,
KC_PPLS, KC_P9 , KC_P8 , KC_P7 , KC_TAB , KC_Q , KC_W , KC_E , KC_R , KC_T , KC_Y , KC_U , KC_I , KC_O , KC_P , KC_LBRC, KC_RBRC, KC_BSPC, KC_DEL ,
KC_PPLS, KC_P6 , KC_P5 , KC_P4 , 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_PGUP,
@@ -37,27 +37,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_PENT, KC_PDOT, KC_P0 , KC_P0 , KC_LCTL, KC_LGUI, KC_LALT, KC_SPC , MO(1) , KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
),
- [1] = LAYOUT_ext65(
+ [1] = LAYOUT(
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, QK_BOOT,
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, KC_TRNS, EE_CLR,
KC_TRNS, RGB_HUI, RGB_SAI, RGB_VAI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, DB_TOGG,
KC_TRNS, RGB_HUD, RGB_SAD, 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, KC_TRNS
- ),
-
- [2] = LAYOUT_ext65(
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
- ),
-
- [3] = LAYOUT_ext65(
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
)
};
diff --git a/keyboards/aeboards/ext65/rev1/keymaps/via/keymap.c b/keyboards/aeboards/ext65/rev1/keymaps/via/keymap.c
index c93172925824..e246b5c471d9 100644
--- a/keyboards/aeboards/ext65/rev1/keymaps/via/keymap.c
+++ b/keyboards/aeboards/ext65/rev1/keymaps/via/keymap.c
@@ -29,7 +29,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | . | 0 | | Ctrl | Win | Alt | Space | FN | Ctrl | |Left| Dn | Rght|
* `------------------------------------------------------------------------------------------'
*/
- [0] = LAYOUT_ext65(
+ [0] = LAYOUT(
KC_PMNS, KC_PAST, KC_PSLS, KC_NUM, KC_ESC , KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , KC_MINS, KC_EQL , KC_BSLS, KC_GRV , KC_PSCR,
KC_PPLS, KC_P9 , KC_P8 , KC_P7 , KC_TAB , KC_Q , KC_W , KC_E , KC_R , KC_T , KC_Y , KC_U , KC_I , KC_O , KC_P , KC_LBRC, KC_RBRC, KC_BSPC, KC_DEL ,
KC_PPLS, KC_P6 , KC_P5 , KC_P4 , 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_PGUP,
@@ -37,27 +37,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_PENT, KC_PDOT, KC_P0 , KC_P0 , KC_LCTL, KC_LGUI, KC_LALT, KC_SPC , MO(1) , KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
),
- [1] = LAYOUT_ext65(
+ [1] = LAYOUT(
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, QK_BOOT,
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, KC_TRNS, EE_CLR,
KC_TRNS, RGB_HUI, RGB_SAI, RGB_VAI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, DB_TOGG,
KC_TRNS, RGB_HUD, RGB_SAD, 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, KC_TRNS
- ),
-
- [2] = LAYOUT_ext65(
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
- ),
-
- [3] = LAYOUT_ext65(
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
)
};
diff --git a/keyboards/aeboards/ext65/rev2/config.h b/keyboards/aeboards/ext65/rev2/config.h
index 78d20f300fe9..c5149f574103 100644
--- a/keyboards/aeboards/ext65/rev2/config.h
+++ b/keyboards/aeboards/ext65/rev2/config.h
@@ -17,7 +17,7 @@
#pragma once
//SPI
-#define WS2812_SPI SPID2
+#define WS2812_SPI_DRIVER SPID2
#define WS2812_SPI_MOSI_PAL_MODE 0
#define WS2812_SPI_SCK_PAL_MODE 0
#define WS2812_SPI_SCK_PIN B13
diff --git a/keyboards/aeboards/ext65/rev2/info.json b/keyboards/aeboards/ext65/rev2/info.json
index d9d0ee62ee1c..ab229e19ec6e 100644
--- a/keyboards/aeboards/ext65/rev2/info.json
+++ b/keyboards/aeboards/ext65/rev2/info.json
@@ -38,8 +38,11 @@
"cols": ["B14", "B6", "A0", "B1", "B0", "A7", "A6", "A5", "A4", "A3"],
"rows": ["A10", "A9", "A8", "B7", "A2", "A1", "B12", "B11", "B10", "B2"]
},
+ "layout_aliases": {
+ "LAYOUT_ext65": "LAYOUT"
+ },
"layouts": {
- "LAYOUT_ext65": {
+ "LAYOUT": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [1, 0], "x": 1, "y": 0},
diff --git a/keyboards/aeboards/ext65/rev2/keymaps/default/keymap.c b/keyboards/aeboards/ext65/rev2/keymaps/default/keymap.c
index c93172925824..e246b5c471d9 100644
--- a/keyboards/aeboards/ext65/rev2/keymaps/default/keymap.c
+++ b/keyboards/aeboards/ext65/rev2/keymaps/default/keymap.c
@@ -29,7 +29,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | . | 0 | | Ctrl | Win | Alt | Space | FN | Ctrl | |Left| Dn | Rght|
* `------------------------------------------------------------------------------------------'
*/
- [0] = LAYOUT_ext65(
+ [0] = LAYOUT(
KC_PMNS, KC_PAST, KC_PSLS, KC_NUM, KC_ESC , KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , KC_MINS, KC_EQL , KC_BSLS, KC_GRV , KC_PSCR,
KC_PPLS, KC_P9 , KC_P8 , KC_P7 , KC_TAB , KC_Q , KC_W , KC_E , KC_R , KC_T , KC_Y , KC_U , KC_I , KC_O , KC_P , KC_LBRC, KC_RBRC, KC_BSPC, KC_DEL ,
KC_PPLS, KC_P6 , KC_P5 , KC_P4 , 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_PGUP,
@@ -37,27 +37,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_PENT, KC_PDOT, KC_P0 , KC_P0 , KC_LCTL, KC_LGUI, KC_LALT, KC_SPC , MO(1) , KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
),
- [1] = LAYOUT_ext65(
+ [1] = LAYOUT(
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, QK_BOOT,
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, KC_TRNS, EE_CLR,
KC_TRNS, RGB_HUI, RGB_SAI, RGB_VAI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, DB_TOGG,
KC_TRNS, RGB_HUD, RGB_SAD, 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, KC_TRNS
- ),
-
- [2] = LAYOUT_ext65(
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
- ),
-
- [3] = LAYOUT_ext65(
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
)
};
diff --git a/keyboards/aeboards/ext65/rev2/keymaps/via/keymap.c b/keyboards/aeboards/ext65/rev2/keymaps/via/keymap.c
index c93172925824..e246b5c471d9 100644
--- a/keyboards/aeboards/ext65/rev2/keymaps/via/keymap.c
+++ b/keyboards/aeboards/ext65/rev2/keymaps/via/keymap.c
@@ -29,7 +29,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | . | 0 | | Ctrl | Win | Alt | Space | FN | Ctrl | |Left| Dn | Rght|
* `------------------------------------------------------------------------------------------'
*/
- [0] = LAYOUT_ext65(
+ [0] = LAYOUT(
KC_PMNS, KC_PAST, KC_PSLS, KC_NUM, KC_ESC , KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , KC_MINS, KC_EQL , KC_BSLS, KC_GRV , KC_PSCR,
KC_PPLS, KC_P9 , KC_P8 , KC_P7 , KC_TAB , KC_Q , KC_W , KC_E , KC_R , KC_T , KC_Y , KC_U , KC_I , KC_O , KC_P , KC_LBRC, KC_RBRC, KC_BSPC, KC_DEL ,
KC_PPLS, KC_P6 , KC_P5 , KC_P4 , 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_PGUP,
@@ -37,27 +37,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_PENT, KC_PDOT, KC_P0 , KC_P0 , KC_LCTL, KC_LGUI, KC_LALT, KC_SPC , MO(1) , KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
),
- [1] = LAYOUT_ext65(
+ [1] = LAYOUT(
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, QK_BOOT,
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, KC_TRNS, EE_CLR,
KC_TRNS, RGB_HUI, RGB_SAI, RGB_VAI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, DB_TOGG,
KC_TRNS, RGB_HUD, RGB_SAD, 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, KC_TRNS
- ),
-
- [2] = LAYOUT_ext65(
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
- ),
-
- [3] = LAYOUT_ext65(
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
)
};
diff --git a/keyboards/aeboards/ext65/rev3/info.json b/keyboards/aeboards/ext65/rev3/info.json
index bb507545a018..0faf6fa135a7 100644
--- a/keyboards/aeboards/ext65/rev3/info.json
+++ b/keyboards/aeboards/ext65/rev3/info.json
@@ -19,8 +19,11 @@
"cols": ["F6", "F7", "B1", "B3", "B2", "D5", "D3", "D2", "D1", "D0"],
"rows": ["B5", "B6", "C6", "C7", "E6", "B0", "B4", "D7", "D4", "D6"]
},
+ "layout_aliases": {
+ "LAYOUT_ext65_hotswap": "LAYOUT"
+ },
"layouts": {
- "LAYOUT_ext65_hotswap": {
+ "LAYOUT": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [1, 0], "x": 1, "y": 0},
diff --git a/keyboards/aeboards/ext65/rev3/keymaps/default/keymap.c b/keyboards/aeboards/ext65/rev3/keymaps/default/keymap.c
index 72a10cae1ba7..ac6dd4dfedea 100644
--- a/keyboards/aeboards/ext65/rev3/keymaps/default/keymap.c
+++ b/keyboards/aeboards/ext65/rev3/keymaps/default/keymap.c
@@ -29,7 +29,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | . | 0 | | Ctrl | Win | Alt | Space | FN | Ctrl | |Left| Dn | Rght|
* `------------------------------------------------------------------------------------------'
*/
- [0] = LAYOUT_ext65_hotswap(
+ [0] = LAYOUT(
KC_PMNS, KC_PAST, KC_PSLS, KC_NUM, KC_ESC , KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , KC_MINS, KC_EQL , KC_BSPC, KC_PSCR,
KC_PPLS, KC_P9 , KC_P8 , KC_P7 , 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_P6 , KC_P5 , KC_P4 , 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_PGUP,
@@ -37,27 +37,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_PDOT, KC_P0 , KC_LCTL, KC_LGUI, KC_LALT, KC_SPC , MO(1) , KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
),
- [1] = LAYOUT_ext65_hotswap(
+ [1] = LAYOUT(
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, QK_BOOT,
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, KC_TRNS, EE_CLR,
RGB_HUI, RGB_SAI, RGB_VAI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, DB_TOGG,
KC_TRNS, RGB_HUD, RGB_SAD, 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
- ),
-
- [2] = LAYOUT_ext65_hotswap(
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
- ),
-
- [3] = LAYOUT_ext65_hotswap(
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
)
};
diff --git a/keyboards/aeboards/ext65/rev3/keymaps/via/keymap.c b/keyboards/aeboards/ext65/rev3/keymaps/via/keymap.c
index 72a10cae1ba7..ac6dd4dfedea 100644
--- a/keyboards/aeboards/ext65/rev3/keymaps/via/keymap.c
+++ b/keyboards/aeboards/ext65/rev3/keymaps/via/keymap.c
@@ -29,7 +29,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | . | 0 | | Ctrl | Win | Alt | Space | FN | Ctrl | |Left| Dn | Rght|
* `------------------------------------------------------------------------------------------'
*/
- [0] = LAYOUT_ext65_hotswap(
+ [0] = LAYOUT(
KC_PMNS, KC_PAST, KC_PSLS, KC_NUM, KC_ESC , KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , KC_MINS, KC_EQL , KC_BSPC, KC_PSCR,
KC_PPLS, KC_P9 , KC_P8 , KC_P7 , 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_P6 , KC_P5 , KC_P4 , 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_PGUP,
@@ -37,27 +37,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_PDOT, KC_P0 , KC_LCTL, KC_LGUI, KC_LALT, KC_SPC , MO(1) , KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
),
- [1] = LAYOUT_ext65_hotswap(
+ [1] = LAYOUT(
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, QK_BOOT,
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, KC_TRNS, EE_CLR,
RGB_HUI, RGB_SAI, RGB_VAI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, DB_TOGG,
KC_TRNS, RGB_HUD, RGB_SAD, 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
- ),
-
- [2] = LAYOUT_ext65_hotswap(
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
- ),
-
- [3] = LAYOUT_ext65_hotswap(
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
)
};
diff --git a/keyboards/aeboards/satellite/rev1/config.h b/keyboards/aeboards/satellite/rev1/config.h
index 508689faf502..429bc2af5461 100644
--- a/keyboards/aeboards/satellite/rev1/config.h
+++ b/keyboards/aeboards/satellite/rev1/config.h
@@ -17,14 +17,13 @@
#pragma once
//RGB Matrix defines
-#define DRIVER_ADDR_1 0x74
-#define DRIVER_ADDR_2 0x76
+#define IS31FL3731_I2C_ADDRESS_1 IS31FL3731_I2C_ADDRESS_GND
+#define IS31FL3731_I2C_ADDRESS_2 IS31FL3731_I2C_ADDRESS_SDA
-#define DRIVER_COUNT 2
#define DRIVER_1_LED_TOTAL 36
#define DRIVER_2_LED_TOTAL 36
-#define ISSI_DRIVER_TOTAL (DRIVER_1_LED_TOTAL + DRIVER_2_LED_TOTAL)
-#define RGB_MATRIX_LED_COUNT ISSI_DRIVER_TOTAL
+#define IS31FL3731_LED_COUNT (DRIVER_1_LED_TOTAL + DRIVER_2_LED_TOTAL)
+#define RGB_MATRIX_LED_COUNT IS31FL3731_LED_COUNT
#define RGB_MATRIX_DEFAULT_VAL 80
#define RGB_MATRIX_FRAMEBUFFER_EFFECTS
diff --git a/keyboards/aeboards/satellite/rev1/rev1.c b/keyboards/aeboards/satellite/rev1/rev1.c
index 785fa8af9ff7..6727894e0671 100644
--- a/keyboards/aeboards/satellite/rev1/rev1.c
+++ b/keyboards/aeboards/satellite/rev1/rev1.c
@@ -18,7 +18,7 @@
#include "drivers/led/issi/is31fl3731.h"
#ifdef RGB_MATRIX_ENABLE
-const is31_led PROGMEM g_is31_leds[RGB_MATRIX_LED_COUNT] = {
+const is31fl3731_led_t PROGMEM g_is31fl3731_leds[IS31FL3731_LED_COUNT] = {
/* Refer to IS31 manual for these locations
* driver
* | R location
@@ -145,38 +145,27 @@ led_config_t g_led_config = { {
// Custom Driver
static void init(void) {
i2c_init();
- is31fl3731_init(DRIVER_ADDR_1);
- is31fl3731_init(DRIVER_ADDR_2);
- for (int index = 0; index < ISSI_DRIVER_TOTAL; index++) {
+
+ is31fl3731_init(IS31FL3731_I2C_ADDRESS_1);
+ is31fl3731_init(IS31FL3731_I2C_ADDRESS_2);
+
+ for (int index = 0; index < IS31FL3731_LED_COUNT; index++) {
bool enabled = !( ( index == 18+5) || //B5
( index == 36+17) || //C17
( index == 54+13) //D13
);
is31fl3731_set_led_control_register(index, enabled, enabled, enabled);
}
- is31fl3731_update_led_control_registers(DRIVER_ADDR_1, 0);
- is31fl3731_update_led_control_registers(DRIVER_ADDR_2, 1);
-}
-
-static void flush(void) {
- is31fl3731_update_pwm_buffers(DRIVER_ADDR_1, 0);
- is31fl3731_update_pwm_buffers(DRIVER_ADDR_2, 1);
-}
-
-static void set_color(int index, uint8_t red, uint8_t green, uint8_t blue) {
- is31fl3731_set_color(index, red, green, blue);
-}
-static void set_color_all(uint8_t red, uint8_t green, uint8_t blue) {
- is31fl3731_set_color_all( red, green, blue );
+ is31fl3731_update_led_control_registers(IS31FL3731_I2C_ADDRESS_1, 0);
+ is31fl3731_update_led_control_registers(IS31FL3731_I2C_ADDRESS_2, 1);
}
-
const rgb_matrix_driver_t rgb_matrix_driver = {
.init = init,
- .flush = flush,
- .set_color = set_color,
- .set_color_all = set_color_all
+ .flush = is31fl3731_flush,
+ .set_color = is31fl3731_set_color,
+ .set_color_all = is31fl3731_set_color_all
};
#endif
diff --git a/keyboards/aeboards/satellite/rev1/rules.mk b/keyboards/aeboards/satellite/rev1/rules.mk
index 1a4657b08c72..f95b0f015d77 100644
--- a/keyboards/aeboards/satellite/rev1/rules.mk
+++ b/keyboards/aeboards/satellite/rev1/rules.mk
@@ -18,4 +18,4 @@ COMMON_VPATH += $(DRIVER_PATH)/issi
# project specific files
SRC += drivers/led/issi/is31fl3731.c
-QUANTUM_LIB_SRC += i2c_master.c
+I2C_DRIVER_REQUIRED = yes
diff --git a/keyboards/afternoonlabs/breeze/keymaps/eithanshavit/keymap.c b/keyboards/afternoonlabs/breeze/keymaps/eithanshavit/keymap.c
deleted file mode 100644
index 9732230b05bc..000000000000
--- a/keyboards/afternoonlabs/breeze/keymaps/eithanshavit/keymap.c
+++ /dev/null
@@ -1,73 +0,0 @@
-/* Copyright 2021 eithanshavit
- *
- * 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 .
- */
-
-#include QMK_KEYBOARD_H
-
-enum layer_names {
- _MAIN,
- _FUNCTION,
- _NUMPAD,
-};
-
-#define FUNCTION MO(_FUNCTION)
-#define NUMPAD MO(_NUMPAD)
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-
- [_NUMPAD] = LAYOUT(
- //┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐┌────────┬────────┬────────┐
- _______, _______, _______, _______, _______, _______, _______, KC_PEQL, KC_PSLS, KC_PAST, KC_PMNS, _______, LCA(KC_D),LCA(KC_F),LCA(KC_G),
- //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤├────────┼────────┼────────┤
- _______, _______, _______, _______, _______, _______, _______, KC_P7, KC_P8, KC_P9, KC_PPLS, _______, LCA(KC_E),LCA(KC_ENT),LCA(KC_T),
- //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤├────────┼────────┼────────┤
- _______, _______, _______, _______, _______, _______, _______, KC_P4, KC_P5, KC_P6, _______, _______, _______,
- //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤├────────┼────────┼────────┤
- _______, _______, _______, _______, _______, _______, _______, KC_P1, KC_P2, KC_P3, _______, _______, KC_MUTE, KC_VOLD, KC_VOLU,
- //└────────┴────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┴────────┴────────┴────────┘└────────┴────────┴────────┘
- _______, _______, _______, _______, _______, _______, KC_P0, KC_PDOT
- // └────────┴────────┴────────┴────────┘ └────────┴────────┴────────┴────────┘
- ),
-
-
- [_FUNCTION] = LAYOUT(
- //┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐┌────────┬────────┬────────┐
- QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, LCA(KC_D),LCA(KC_F),LCA(KC_G),
- //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤├────────┼────────┼────────┤
- _______, _______, _______, _______, _______, _______, _______, _______, KC_UP, _______, _______, _______, LCA(KC_E),LCA(KC_ENT),LCA(KC_T),
- //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤├────────┼────────┼────────┤
- _______, _______, _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_RIGHT, _______,_______, _______,
- //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤├────────┼────────┼────────┤
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MUTE, KC_VOLD, KC_VOLU,
- //└────────┴────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┴────────┴────────┴────────┘└────────┴────────┴────────┘
- _______, _______, _______, _______, _______, _______, _______, _______
- // └────────┴────────┴────────┴────────┘ └────────┴────────┴────────┴────────┘
- ),
-
- [_MAIN] = LAYOUT(
- //┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐┌────────┬────────┬────────┐
- KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, KC_MINS, KC_EQL, KC_GRV,
- //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤├────────┼────────┼────────┤
- KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_DEL, KC_LBRC, KC_RBRC, KC_BSLS,
- //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤├────────┼────────┼────────┤
- KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, 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_LEFT, KC_DOWN, KC_RIGHT,
- //└────────┴────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┴────────┴────────┴────────┘└────────┴────────┴────────┘
- NUMPAD, KC_LALT, KC_LCMD, KC_SPC, KC_ENT, FUNCTION,LCMD(KC_GRV),LALT(KC_SPC)
- // └────────┴────────┴────────┴────────┘ └────────┴────────┴────────┴────────┘
- )
-
-};
diff --git a/keyboards/ah/haven65/info.json b/keyboards/ah/haven65/info.json
index 1cdc337836e0..579cbffd7ad4 100644
--- a/keyboards/ah/haven65/info.json
+++ b/keyboards/ah/haven65/info.json
@@ -24,7 +24,7 @@
"rgblight": true
},
"ws2812": {
- "pin": "C7",
+ "pin": "C7"
},
"rgblight": {
"led_count": 1,
diff --git a/keyboards/ai03/duet/config.h b/keyboards/ai03/duet/config.h
new file mode 100644
index 000000000000..9cebd11c6bad
--- /dev/null
+++ b/keyboards/ai03/duet/config.h
@@ -0,0 +1,6 @@
+// Copyright 2023 QMK
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#define PICO_XOSC_STARTUP_DELAY_MULTIPLIER 128
diff --git a/keyboards/ai03/duet/info.json b/keyboards/ai03/duet/info.json
new file mode 100644
index 000000000000..1d11c868a37f
--- /dev/null
+++ b/keyboards/ai03/duet/info.json
@@ -0,0 +1,139 @@
+{
+ "manufacturer": "ai03 Design Studio",
+ "keyboard_name": "Duet Switch Tester",
+ "maintainer": "ai03-2725",
+ "bootloader": "rp2040",
+ "diode_direction": "COL2ROW",
+ "features": {
+ "bootmagic": true,
+ "command": false,
+ "console": false,
+ "extrakey": true,
+ "mousekey": false,
+ "nkro": true
+ },
+ "matrix_pins": {
+ "cols": ["GP29", "GP28", "GP27", "GP26", "GP25", "GP24", "GP23", "GP22", "GP18", "GP14", "GP13", "GP12", "GP11", "GP10", "GP9", "GP8", "GP7", "GP6"],
+ "rows": ["GP0", "GP1", "GP2", "GP3", "GP4", "GP5"]
+ },
+ "processor": "RP2040",
+ "usb": {
+ "device_version": "1.0.0",
+ "pid": "0x0028",
+ "vid": "0xA103"
+ },
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2.25, "y": 0},
+ {"matrix": [0, 3], "x": 3.25, "y": 0},
+ {"matrix": [0, 4], "x": 4.5, "y": 0},
+ {"matrix": [0, 5], "x": 5.5, "y": 0},
+ {"matrix": [0, 6], "x": 6.75, "y": 0},
+ {"matrix": [0, 7], "x": 7.75, "y": 0},
+ {"matrix": [0, 8], "x": 9, "y": 0},
+ {"matrix": [0, 9], "x": 10, "y": 0},
+ {"matrix": [0, 10], "x": 11.25, "y": 0},
+ {"matrix": [0, 11], "x": 12.25, "y": 0},
+ {"matrix": [0, 12], "x": 13.5, "y": 0},
+ {"matrix": [0, 13], "x": 14.5, "y": 0},
+ {"matrix": [0, 14], "x": 15.75, "y": 0},
+ {"matrix": [0, 15], "x": 16.75, "y": 0},
+ {"matrix": [0, 16], "x": 18, "y": 0},
+ {"matrix": [0, 17], "x": 19, "y": 0},
+ {"matrix": [1, 0], "x": 0, "y": 1},
+ {"matrix": [1, 1], "x": 1, "y": 1},
+ {"matrix": [1, 2], "x": 2.25, "y": 1},
+ {"matrix": [1, 3], "x": 3.25, "y": 1},
+ {"matrix": [1, 4], "x": 4.5, "y": 1},
+ {"matrix": [1, 5], "x": 5.5, "y": 1},
+ {"matrix": [1, 6], "x": 6.75, "y": 1},
+ {"matrix": [1, 7], "x": 7.75, "y": 1},
+ {"matrix": [1, 8], "x": 9, "y": 1},
+ {"matrix": [1, 9], "x": 10, "y": 1},
+ {"matrix": [1, 10], "x": 11.25, "y": 1},
+ {"matrix": [1, 11], "x": 12.25, "y": 1},
+ {"matrix": [1, 12], "x": 13.5, "y": 1},
+ {"matrix": [1, 13], "x": 14.5, "y": 1},
+ {"matrix": [1, 14], "x": 15.75, "y": 1},
+ {"matrix": [1, 15], "x": 16.75, "y": 1},
+ {"matrix": [1, 16], "x": 18, "y": 1},
+ {"matrix": [1, 17], "x": 19, "y": 1},
+ {"matrix": [2, 0], "x": 0, "y": 2},
+ {"matrix": [2, 1], "x": 1, "y": 2},
+ {"matrix": [2, 2], "x": 2.25, "y": 2},
+ {"matrix": [2, 3], "x": 3.25, "y": 2},
+ {"matrix": [2, 4], "x": 4.5, "y": 2},
+ {"matrix": [2, 5], "x": 5.5, "y": 2},
+ {"matrix": [2, 6], "x": 6.75, "y": 2},
+ {"matrix": [2, 7], "x": 7.75, "y": 2},
+ {"matrix": [2, 8], "x": 9, "y": 2},
+ {"matrix": [2, 9], "x": 10, "y": 2},
+ {"matrix": [2, 10], "x": 11.25, "y": 2},
+ {"matrix": [2, 11], "x": 12.25, "y": 2},
+ {"matrix": [2, 12], "x": 13.5, "y": 2},
+ {"matrix": [2, 13], "x": 14.5, "y": 2},
+ {"matrix": [2, 14], "x": 15.75, "y": 2},
+ {"matrix": [2, 15], "x": 16.75, "y": 2},
+ {"matrix": [2, 16], "x": 18, "y": 2},
+ {"matrix": [2, 17], "x": 19, "y": 2},
+ {"matrix": [3, 0], "x": 0, "y": 3},
+ {"matrix": [3, 1], "x": 1, "y": 3},
+ {"matrix": [3, 2], "x": 2.25, "y": 3},
+ {"matrix": [3, 3], "x": 3.25, "y": 3},
+ {"matrix": [3, 4], "x": 4.5, "y": 3},
+ {"matrix": [3, 5], "x": 5.5, "y": 3},
+ {"matrix": [3, 6], "x": 6.75, "y": 3},
+ {"matrix": [3, 7], "x": 7.75, "y": 3},
+ {"matrix": [3, 8], "x": 9, "y": 3},
+ {"matrix": [3, 9], "x": 10, "y": 3},
+ {"matrix": [3, 10], "x": 11.25, "y": 3},
+ {"matrix": [3, 11], "x": 12.25, "y": 3},
+ {"matrix": [3, 12], "x": 13.5, "y": 3},
+ {"matrix": [3, 13], "x": 14.5, "y": 3},
+ {"matrix": [3, 14], "x": 15.75, "y": 3},
+ {"matrix": [3, 15], "x": 16.75, "y": 3},
+ {"matrix": [3, 16], "x": 18, "y": 3},
+ {"matrix": [3, 17], "x": 19, "y": 3},
+ {"matrix": [4, 0], "x": 0, "y": 4},
+ {"matrix": [4, 1], "x": 1, "y": 4},
+ {"matrix": [4, 2], "x": 2.25, "y": 4},
+ {"matrix": [4, 3], "x": 3.25, "y": 4},
+ {"matrix": [4, 4], "x": 4.5, "y": 4},
+ {"matrix": [4, 5], "x": 5.5, "y": 4},
+ {"matrix": [4, 6], "x": 6.75, "y": 4},
+ {"matrix": [4, 7], "x": 7.75, "y": 4},
+ {"matrix": [4, 8], "x": 9, "y": 4},
+ {"matrix": [4, 9], "x": 10, "y": 4},
+ {"matrix": [4, 10], "x": 11.25, "y": 4},
+ {"matrix": [4, 11], "x": 12.25, "y": 4},
+ {"matrix": [4, 12], "x": 13.5, "y": 4},
+ {"matrix": [4, 13], "x": 14.5, "y": 4},
+ {"matrix": [4, 14], "x": 15.75, "y": 4},
+ {"matrix": [4, 15], "x": 16.75, "y": 4},
+ {"matrix": [4, 16], "x": 18, "y": 4},
+ {"matrix": [4, 17], "x": 19, "y": 4},
+ {"matrix": [5, 0], "x": 0, "y": 5},
+ {"matrix": [5, 1], "x": 1, "y": 5},
+ {"matrix": [5, 2], "x": 2.25, "y": 5},
+ {"matrix": [5, 3], "x": 3.25, "y": 5},
+ {"matrix": [5, 4], "x": 4.5, "y": 5},
+ {"matrix": [5, 5], "x": 5.5, "y": 5},
+ {"matrix": [5, 6], "x": 6.75, "y": 5},
+ {"matrix": [5, 7], "x": 7.75, "y": 5},
+ {"matrix": [5, 8], "x": 9, "y": 5},
+ {"matrix": [5, 9], "x": 10, "y": 5},
+ {"matrix": [5, 10], "x": 11.25, "y": 5},
+ {"matrix": [5, 11], "x": 12.25, "y": 5},
+ {"matrix": [5, 12], "x": 13.5, "y": 5},
+ {"matrix": [5, 13], "x": 14.5, "y": 5},
+ {"matrix": [5, 14], "x": 15.75, "y": 5},
+ {"matrix": [5, 15], "x": 16.75, "y": 5},
+ {"matrix": [5, 16], "x": 18, "y": 5},
+ {"matrix": [5, 17], "x": 19, "y": 5}
+ ]
+ }
+ }
+}
diff --git a/keyboards/ai03/duet/keymaps/default/keymap.c b/keyboards/ai03/duet/keymaps/default/keymap.c
new file mode 100644
index 000000000000..29f63678a801
--- /dev/null
+++ b/keyboards/ai03/duet/keymaps/default/keymap.c
@@ -0,0 +1,14 @@
+/* SPDX-License-Identifier: GPL-2.0-or-later */
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT(
+ KC_0, KC_0, KC_0, KC_0, KC_0, KC_0, KC_0, KC_0, KC_0, KC_0, KC_0, KC_0, KC_0, KC_0, KC_0, KC_0, KC_0, KC_0,
+ KC_0, KC_0, KC_0, KC_0, KC_0, KC_0, KC_0, KC_0, KC_0, KC_0, KC_0, KC_0, KC_0, KC_0, KC_0, KC_0, KC_0, KC_0,
+ KC_0, KC_0, KC_0, KC_0, KC_0, KC_0, KC_0, KC_0, KC_0, KC_0, KC_0, KC_0, KC_0, KC_0, KC_0, KC_0, KC_0, KC_0,
+ KC_0, KC_0, KC_0, KC_0, KC_0, KC_0, KC_0, KC_0, KC_0, KC_0, KC_0, KC_0, KC_0, KC_0, KC_0, KC_0, KC_0, KC_0,
+ KC_0, KC_0, KC_0, KC_0, KC_0, KC_0, KC_0, KC_0, KC_0, KC_0, KC_0, KC_0, KC_0, KC_0, KC_0, KC_0, KC_0, KC_0,
+ KC_0, KC_0, KC_0, KC_0, KC_0, KC_0, KC_0, KC_0, KC_0, KC_0, KC_0, KC_0, KC_0, KC_0, KC_0, KC_0, KC_0, KC_0
+ ),
+};
diff --git a/keyboards/ai03/duet/keymaps/default/readme.md b/keyboards/ai03/duet/keymaps/default/readme.md
new file mode 100644
index 000000000000..fdf727dc96f3
--- /dev/null
+++ b/keyboards/ai03/duet/keymaps/default/readme.md
@@ -0,0 +1,4 @@
+# The default keymap for Duet
+
+Since this is a very irregular keyboard with unique use cases, the keymap should be customized to meet one's needs and to match the requirements of the corresponding display software (if any).
+By default, all keys send `KC_0` to simply notify the host that an arbitrary key has been pressed.
diff --git a/keyboards/ai03/duet/readme.md b/keyboards/ai03/duet/readme.md
new file mode 100644
index 000000000000..43c3d6f7c596
--- /dev/null
+++ b/keyboards/ai03/duet/readme.md
@@ -0,0 +1,28 @@
+# Duet Switch Tester
+
+![Cover image](https://i.imgur.com/sFuHJbLh.png)
+
+A switch tester intended for event/storefront use
+
+* Keyboard Maintainer: [ai03](https://github.com/ai03-2725)
+* Hardware Supported: The [Duet PCB](https://github.com/ai03-2725/duet-switch-tester/tree/main/Duet-MainPCB), powered by the RP2040
+* Hardware Availability: [Open-source](https://github.com/ai03-2725/duet-switch-tester)
+
+
+Make example for this keyboard (after setting up your build environment):
+
+ make ai03/duet:default
+
+Flashing example for this keyboard:
+
+ make ai03/duet:default:flash
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+## Bootloader
+
+Enter the bootloader in 3 ways:
+
+* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard
+* **Physical reset button**: Press the reset button on the back of the PCB while holding the Bootmode switch
+* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available
diff --git a/keyboards/ai03/duet/rules.mk b/keyboards/ai03/duet/rules.mk
new file mode 100644
index 000000000000..6e7633bfe015
--- /dev/null
+++ b/keyboards/ai03/duet/rules.mk
@@ -0,0 +1 @@
+# This file intentionally left blank
diff --git a/keyboards/ai03/equinox/keymaps/crd/keymap.c b/keyboards/ai03/equinox/keymaps/crd/keymap.c
deleted file mode 100644
index a3203cd3128a..000000000000
--- a/keyboards/ai03/equinox/keymaps/crd/keymap.c
+++ /dev/null
@@ -1,41 +0,0 @@
-/* Copyright 2019 Ryota Goto
- *
- * 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 .
- */
-#include QMK_KEYBOARD_H
-
-#define KC_CTES RCTL_T(KC_ESC)
-#define KC_BSM1 LT(1, KC_BSPC)
-#define KC_SPM1 LT(1, KC_SPC)
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [0] = LAYOUT_all( /* Base */
- KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_GRV,
- KC_CTES, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, XXXXXXX, KC_ENT,
- KC_LSFT, KC_SLSH, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_RSFT,
- KC_LCTL, XXXXXXX, KC_RGUI, KC_BSM1, MO(2), KC_SPM1, KC_RALT, XXXXXXX, KC_RCTL
- ),
- [1] = LAYOUT_all( /* Extra Keys */
- _______, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSLS,
- _______, _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, XXXXXXX, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_LBRC, KC_RBRC, _______,
- _______, XXXXXXX, _______, _______, _______, _______, _______, _______, _______
- ),
- [2] = LAYOUT_all( /* Num and FN */
- QK_BOOT, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, _______, _______, KC_MINS, KC_EQL, _______,
- _______, KC_VOLD, KC_VOLU, KC_MUTE, _______, _______, _______, _______, KC_SCLN, KC_QUOT, XXXXXXX, _______,
- _______, _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, _______, _______,
- _______, XXXXXXX, _______, _______, _______, _______, _______, XXXXXXX, _______
- )
-};
diff --git a/keyboards/ai03/equinox/keymaps/crd/readme.md b/keyboards/ai03/equinox/keymaps/crd/readme.md
deleted file mode 100644
index c1f50e5ebfbb..000000000000
--- a/keyboards/ai03/equinox/keymaps/crd/readme.md
+++ /dev/null
@@ -1,3 +0,0 @@
-# crd's keymap for equinox
-
-[KLE](http://www.keyboard-layout-editor.com/#/gists/0be9c4a916dba80ebb5533cd00c5304c)
diff --git a/keyboards/ai03/lunar/keymaps/muzfuz/keymap.c b/keyboards/ai03/lunar/keymaps/muzfuz/keymap.c
deleted file mode 100644
index 11c860af7fc8..000000000000
--- a/keyboards/ai03/lunar/keymaps/muzfuz/keymap.c
+++ /dev/null
@@ -1,52 +0,0 @@
-#include QMK_KEYBOARD_H
-
-// Helpful defines
-#define ESC_CTL CTL_T(KC_ESCAPE) // Tap for Esc, hold for Ctrl
-#define FL_KCF LT(1,KC_F)
-#define FL_KCJ LT(1,KC_J)
-#define CMD_ENT LGUI(LSFT(KC_ENT))
-
-enum custom_keycodes {
- HASHRKT = SAFE_RANGE,
- CLNEQLS,
-};
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [0] = LAYOUT( /* Base */
- KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_BSLS, LGUI(KC_C),
- 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, LGUI(KC_V),
- ESC_CTL, KC_A, KC_S, KC_D, FL_KCF, KC_G, KC_H, FL_KCJ, 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_LSFT, KC_UP, KC_PGDN,
- CMD_ENT, KC_LALT, KC_LGUI, KC_SPC, KC_SPC, KC_SPC, MO(2), KC_GRV, KC_LEFT, KC_DOWN, KC_RGHT
- ),
- [1] = LAYOUT( /* FL */
- KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_DEL, KC_VOLU,
- _______, HASHRKT, _______, KC_LCBR, KC_RCBR, _______, _______, KC_UNDS, KC_PLUS, KC_PIPE, _______, _______, _______, _______, KC_VOLD,
- _______, CLNEQLS, _______, KC_LBRC, KC_RBRC, _______, _______, KC_MINS, KC_EQL, KC_BSLS, KC_TILD, KC_GRV, _______, KC_HOME,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_END,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
- ),
- [2] = LAYOUT( /* FN */
- QK_BOOT, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_DEL, _______,
- KC_CAPS, _______, KC_UP, _______, _______, _______, KC_NUM, KC_P7, KC_P8, KC_P9, KC_MPRV, KC_MPLY, KC_MNXT, _______, _______,
- _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, KC_VOLD, KC_VOLU, KC_P4, KC_P5, KC_P6, _______, _______, _______, _______,
- _______, KC_RCTL, KC_RGUI, KC_RALT, _______, _______, KC_P0, KC_P1, KC_P2, KC_P3, _______, _______, KC_PGUP, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_END
- )
-};
-
-bool process_record_user(uint16_t keycode, keyrecord_t *record) {
- switch(keycode) {
- case HASHRKT:
- if (record->event.pressed) {
- SEND_STRING("=>");
- }
- break;
- case CLNEQLS:
- if (record->event.pressed) {
- SEND_STRING(":=");
- }
- break;
- }
- return true;
-}
diff --git a/keyboards/ai03/lunar/keymaps/muzfuz/readme.md b/keyboards/ai03/lunar/keymaps/muzfuz/readme.md
deleted file mode 100644
index f0fef0923528..000000000000
--- a/keyboards/ai03/lunar/keymaps/muzfuz/readme.md
+++ /dev/null
@@ -1,5 +0,0 @@
-# muzfuz's keymap for Lunar
-
-```shell
-make ai03/lunar:muzfuz:dfu
-```
diff --git a/keyboards/ai03/lunar/keymaps/zyber/keymap.c b/keyboards/ai03/lunar/keymaps/zyber/keymap.c
deleted file mode 100644
index 5e2c9f317818..000000000000
--- a/keyboards/ai03/lunar/keymaps/zyber/keymap.c
+++ /dev/null
@@ -1,23 +0,0 @@
-// Copyright 2022 ZyBeR (@ZyberSE)
-// SPDX-License-Identifier: GPL-2.0
-
-#include "zyber.h"
-
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [0] = LAYOUT( /* Base */
- KC_ESC, KC_1, KC_2, KC_3, TD(SSHT), KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC, KC_PGUP,
- KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, TD(LBRC), KC_RBRC, KC_BSLS, KC_PGDN,
- L1_EXPL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, TD(SCLN), TD(QUOT), KC_ENT, KC_DEL,
- KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_LSFT, KC_UP, MO(1),
- KC_LCTL, ROPT_SRH,KC_LCMD, _______, LCMD_T(KC_SPC), _______, ROPT_SRH, KC_GRV, KC_LEFT, KC_DOWN, KC_RGHT
- ),
- [1] = LAYOUT( /* FN */
- QK_BOOT, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_DEL, KC_PAUS,
- C_BLK, _______, KC_UP, _______, _______, _______, KC_NUM, KC_P7, KC_P8, KC_P9, KC_MPRV, KC_MPLY, KC_MNXT, _______, KC_SCRL,
- _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, KC_VOLD, KC_VOLU, KC_P4, KC_P5, KC_P6, _______, _______, _______, _______,
- _______, KC_RCTL, KC_RGUI, KC_RALT, _______, _______, KC_P0, KC_P1, KC_P2, KC_P3, _______, _______, KC_PGUP, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_END
- )
-};
-
diff --git a/keyboards/ai03/orbit/config.h b/keyboards/ai03/orbit/config.h
index f4157a1729cf..53a057875f9c 100644
--- a/keyboards/ai03/orbit/config.h
+++ b/keyboards/ai03/orbit/config.h
@@ -19,9 +19,6 @@ along with this program. If not, see .
#define SELECT_SOFT_SERIAL_SPEED 1
-#define SPLIT_LED_STATE_ENABLE
-#define SPLIT_LAYER_STATE_ENABLE
-
#define SPLIT_HAND_PIN D5
/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
diff --git a/keyboards/ai03/orbit/info.json b/keyboards/ai03/orbit/info.json
index 4c5cd1ee5186..d7ff0b786cca 100644
--- a/keyboards/ai03/orbit/info.json
+++ b/keyboards/ai03/orbit/info.json
@@ -23,6 +23,12 @@
"cols": ["D4", "D6", "F1", "F0", "F4", "F5", "C6"],
"rows": ["B6", "B5", "B4", "D7", "E6"]
}
+ },
+ "transport":{
+ "sync" :{
+ "indicators": true,
+ "layer_state": true
+ }
}
},
"processor": "atmega32u4",
diff --git a/keyboards/ai03/polaris/keymaps/mekberg/config.h b/keyboards/ai03/polaris/keymaps/mekberg/config.h
deleted file mode 100644
index ef8caf870941..000000000000
--- a/keyboards/ai03/polaris/keymaps/mekberg/config.h
+++ /dev/null
@@ -1,22 +0,0 @@
-/*
-Copyright 2019 Ryota Goto
-
-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 .
-*/
-
-#pragma once
-
-// Define some configuration for modtap behavior
-// #define TAPPING_TERM 150
-#define PERMISSIVE_HOLD
diff --git a/keyboards/ai03/polaris/keymaps/mekberg/keymap.c b/keyboards/ai03/polaris/keymaps/mekberg/keymap.c
deleted file mode 100644
index 6a15c93fa139..000000000000
--- a/keyboards/ai03/polaris/keymaps/mekberg/keymap.c
+++ /dev/null
@@ -1,97 +0,0 @@
-/* Copyright 2019 Ryota Goto
- *
- * 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 .
- */
-#include QMK_KEYBOARD_H
-
-enum layer_names {
- _BASE,
- _NAV,
- _FN
-};
-
-#define MY_LOCK C(LCMD(KC_L)) // Mac: Custom lock hotkey in BTT (when Alt/Command have been swapped in macOS)
-
-/*
-KBD6x ANSI physical layout
-1u == 8chars
- ┌─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
- | | | | | | | | | | | | | | | |
- |─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────|
- | 1,5u | | | | | | | | | | | | | 1,5u |
- |─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────|
- | 1,75u | | | | | | | | | | | | 1,25u |
- |─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────|
- | 2,25u | | | | | | | | | | | 1,75u | |
- └─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
- | | 1,25u | | 1,25u | |
- └────────────────────────────────────────────────────────────────────────────────────────────────────┘
-*/
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [_BASE] = LAYOUT_60_tsangan_hhkb(
-// ┌─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
-// | | | | | | | | | | | | | | | |
- QK_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_NUBS, KC_RBRC,
-// |─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────|
-// | 1,5u | | | | | | | | | | | | | 1,5u |
- LT(_NAV,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_NUHS, KC_BSPC,
-// |─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────|
-// | 1,75u | | | | | | | | | | | | 1,25u |
- KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
-// |─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────|
-// | 1,25u | | | | | | | | | | | 1,75u | |
- KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(_FN),
-// └─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
-// | | 1,25u | | 1,25u | |
- XXXXXXX, KC_LGUI, KC_LALT, KC_SPACE, KC_RALT, KC_RGUI, XXXXXXX
-// └────────────────────────────────────────────────────────────────────────────────────────────────────┘
- ),
- [_NAV] = LAYOUT_60_tsangan_hhkb(
-// ┌─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
-// | | | | | | | | | | | | | | | |
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_INS, KC_BSPC,
-// |─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────|
-// | 1,5u | | | | | | | | | | | | | 1,5u |
- _______, _______, _______, _______, _______, _______, KC_END, KC_PGDN, KC_UP, KC_PGUP, KC_HOME, _______, _______, KC_DEL,
-// |─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────|
-// | 1,75u | | | | | | | | | | | | 1,25u |
- _______, _______, _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______,
-// |─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────|
-// | 1,25u | | | | | | | | | | | 1,75u | |
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
-// └─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
-// | | 1,25u | | 1,25u | |
- XXXXXXX, _______, _______, _______, _______, _______, XXXXXXX
-// └────────────────────────────────────────────────────────────────────────────────────────────────────┘
- ),
- [_FN] = LAYOUT_60_tsangan_hhkb(
-// ┌─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
-// | | | | | | | | | | | | | | | |
- QK_BOOT, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______,
-// |─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────|
-// | 1,5u | | | | | | | | | | | | | 1,5u |
- _______, _______, _______, _______, RGB_TOG, RGB_HUI, RGB_SAI, RGB_VAI, _______, _______, _______, _______, _______, _______,
-// |─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────|
-// | 1,75u | | | | | | | | | | | | 1,25u |
- KC_RCTL, KC_VOLD, KC_VOLU, KC_MUTE, RGB_MOD, RGB_HUD, RGB_SAD, RGB_VAD, _______, _______, _______, _______, MY_LOCK,
-// |─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────|
-// | 1,25u | | | | | | | | | | | 1,75u | |
- _______, BL_TOGG, BL_UP, BL_DOWN,BL_STEP, _______, _______, _______, KC_MRWD, KC_MFFD, _______, _______, _______,
-// └─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
-// | | 1,25u | | 1,25u | |
- XXXXXXX, _______, _______, KC_MPLY, _______, _______, XXXXXXX
-// └────────────────────────────────────────────────────────────────────────────────────────────────────┘
- ),
-};
diff --git a/keyboards/ai03/polaris/keymaps/mekberg/readme.md b/keyboards/ai03/polaris/keymaps/mekberg/readme.md
deleted file mode 100644
index b9ae9642f526..000000000000
--- a/keyboards/ai03/polaris/keymaps/mekberg/readme.md
+++ /dev/null
@@ -1,14 +0,0 @@
-# General Information
-
-This is more or less a HHKB base layout, but with completely different Fn layers. I don't use most of the HHKB secondary key positions because, honestly, they make no sense to me at all.
-
-Fn key layer is focused mostly on keyboard firmware features (like RGB) as well as some of the necessary alternate functions. It also hold media controls, F-keys and Reset.
-
-Left Tab-Hold layer is focused on nav cluster functionality, and turns Backspace into Delete (and moves Backspace up into the top right 1u position).
-
-
-# Build instructions
-
-To simply build the firmware file: `make clean && make ai03/polaris:mekberg`
-
-To build and immediately flash: `make clean && make ai03/polaris:mekberg:flash`
diff --git a/keyboards/ai03/polaris/keymaps/mekberg/rules.mk b/keyboards/ai03/polaris/keymaps/mekberg/rules.mk
deleted file mode 100644
index e47bb9e6df68..000000000000
--- a/keyboards/ai03/polaris/keymaps/mekberg/rules.mk
+++ /dev/null
@@ -1,2 +0,0 @@
-BACKLIGHT_ENABLE = no # Disable keyboard backlight functionality
-RGBLIGHT_ENABLE = no # Disable keyboard RGB underglow
diff --git a/keyboards/ai03/quasar/keymaps/ai03/keymap.c b/keyboards/ai03/quasar/keymaps/ai03/keymap.c
deleted file mode 100644
index c564b8aa388f..000000000000
--- a/keyboards/ai03/quasar/keymaps/ai03/keymap.c
+++ /dev/null
@@ -1,35 +0,0 @@
-/* Copyright 2019 Ryota Goto
- *
- * 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 .
- */
-#include QMK_KEYBOARD_H
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [0] = LAYOUT( /* Base */
- 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_SCRL, KC_PAUS,
- KC_LGUI, 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,
- MO(1), 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_LCTL, KC_LALT, KC_SPC, KC_GRV, KC_DEL, KC_LEFT, KC_DOWN, KC_RGHT
- ),
- [1] = LAYOUT( /* FN */
- QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, _______, _______, _______,
- KC_CAPS, _______, KC_UP, _______, _______, _______, _______, _______, KC_PGUP, _______, KC_MPRV, KC_MPLY, KC_MNXT, _______, _______, _______, _______,
- _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, KC_VOLU, KC_VOLD, KC_HOME, KC_PGDN, KC_END, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PSCR, KC_PGUP,
- _______, _______, _______, _______, KC_BSPC, KC_HOME, KC_PGDN, KC_END
- )
-};
diff --git a/keyboards/ai03/quasar/keymaps/ai03/readme.md b/keyboards/ai03/quasar/keymaps/ai03/readme.md
deleted file mode 100644
index 6f6a0b4fef5b..000000000000
--- a/keyboards/ai03/quasar/keymaps/ai03/readme.md
+++ /dev/null
@@ -1,3 +0,0 @@
-# The ai03 keymap for Quasar
-
-Focuses functionality mainly into the 60% cluster.
\ No newline at end of file
diff --git a/keyboards/akb/raine/keymaps/mehadviceguy/keymap.c b/keyboards/akb/raine/keymaps/mehadviceguy/keymap.c
deleted file mode 100644
index 522651f1c65b..000000000000
--- a/keyboards/akb/raine/keymaps/mehadviceguy/keymap.c
+++ /dev/null
@@ -1,75 +0,0 @@
-/* Copyright 2019 Elliot Powell
- *
- * 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 .
- */
-#include QMK_KEYBOARD_H
-
-/*
-BLANK
- ,----------------------------------------------------------------. ,--------------.
- | | | | | | | | | | | | | | | | | |
- |----------------------------------------------------------------| |--------------|
- | | | | | | | | | | | | | | | | |
- |------------------------------------------------------------ | |--------------|
- | | | | | | | | | | | | | | | | |
- |----------------------------------------------------------------' |--------------|
- | | | | | | | | | | | | ,----. | | | |
- |-----------------------------------------------------------' | | `--------------|
- | | | | | | ,--------------. | | |
- `------` '------------------------------` '-----' | | | | `---------'
- `--------------'
-*/
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [0] = LAYOUT( /* Base
- ,----------------------------------------------------------------. ,--------------.
- |Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | Bac| | / | * | + |
- |----------------------------------------------------------------| |--------------|
- | Tab | Q | W | E | R | T | Y | U | I | O | P | Enter| | 7 | 8 | 9 |
- |------------------------------------------------------------ | |--------------|
- |CapsLock | A | S | D | F | G | H | J | K | L | : | | | 4 | 5 | 6 |
- |----------------------------------------------------------------' |--------------|
- |Shift | \ | Z | X | C | V | B | N | M | , | . | ,----. | 1 | 2 | 3 |
- |-----------------------------------------------------------' | Up | `--------------|
- | Ctrl | | SPACE | |AltGr| ,--------------. | 0 | . |
- `------` '------------------------------` '-----' |L/fn|Down|Rght| `---------'
- `--------------'
- */
-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_BSPC, KC_PSLS, KC_PAST, KC_PPLS,
-KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, _______, KC_P7, KC_P8, KC_P9,
-KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_ENT, KC_P4, KC_P5, KC_P6,
-KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMMA, KC_DOT, KC_UP, KC_P1, KC_P2, KC_P3,
-KC_LCTL, _______, _______, _______, KC_SPC, _______, _______, KC_RALT, LT(1, KC_LEFT), KC_DOWN, KC_RGHT, KC_P0, KC_PDOT),
-
- [1] = LAYOUT( /* Second
- ,----------------------------------------------------------------. ,--------------.
- | GRV| F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9| F10| F11| F12 | |Nlck|Pscr| = |
- |----------------------------------------------------------------| |--------------|
- | | | | | | | | | | | ? | DEL | |Home| Up |PgUp|
- |------------------------------------------------------------ | |--------------|
- | | | | | | | | | | | ' |DEL | |Left|ScrL|Rght|
- |----------------------------------------------------------------' |--------------|
- | | | | | | | | | | [ | ] | ,----. |End |Down|PgDn|
- |-----------------------------------------------------------' | | `--------------|
- | GUI | | | | | ,--------------. | |Rest|
- `------` '------------------------------` '-----' | | | | `---------'
- `--------------'
- */
-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_NUM, KC_PSCR, KC_EQUAL,
-_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_SLSH, _______, KC_HOME, KC_UP, KC_PGUP,
-_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_QUOT, KC_DEL, KC_LEFT, KC_SCRL, KC_RGHT,
-_______, _______, _______, _______, _______, _______, _______, _______, _______, KC_LBRC, KC_RBRC, _______, KC_END, KC_DOWN, KC_PGDN,
-KC_LGUI, _______, _______, _______, KC_LALT, _______, _______, _______, _______, _______, _______, _______, QK_BOOT),
-};
-
diff --git a/keyboards/akb/raine/keymaps/mehadviceguy/readme.md b/keyboards/akb/raine/keymaps/mehadviceguy/readme.md
deleted file mode 100644
index e9e411bc5b90..000000000000
--- a/keyboards/akb/raine/keymaps/mehadviceguy/readme.md
+++ /dev/null
@@ -1,68 +0,0 @@
-# Eyecandy
-![Eyecandy](https://i.imgur.com/gYWNDlF.png)
-
-# MehAdviceGuy Raine layout
-
-Welcome to one of the most useless layouts you will find this side of town!
-The layout is born out of the need for AltGr to get to æø and å when you don't have a full bottom row.
-
-## Base Layer (0)
-The base layer borrows alot from the Default Raine layer in regards to the alphas, and the numpad. But deviates ever so slightly by putting the layer key on the Left arrow key, relacing it from its original location with AltGr. And putting , and . on what was normally ? and right shift.
-```
- ,----------------------------------------------------------------. ,--------------.
- |Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | Bac| | / | * | + |
- |----------------------------------------------------------------| |--------------|
- | Tab | Q | W | E | R | T | Y | U | I | O | P | Enter| | 7 | 8 | 9 |
- |------------------------------------------------------------ | |--------------|
- |CapsLock | A | S | D | F | G | H | J | K | L | : | | | 4 | 5 | 6 |
- |----------------------------------------------------------------' |--------------|
- |Shift | \ | Z | X | C | V | B | N | M | , | . | ,----. | 1 | 2 | 3 |
- |-----------------------------------------------------------' | Up | `--------------|
- | Ctrl | | SPACE | |AltGr| ,--------------. | 0 | . |
- `------` '------------------------------` '-----' |L/fn|Down|Rght| `---------'
- `--------------'
-```
-
-## Modifier Layer (1)
-The Modifier layer also borrows a few things from the Default Raine layout, but changes a fair bit of things in it. These changes include:
-* Moving Delete to Enter and completing the F-row
-* Moving [ and ] to , and .
-* Adding GUI to Left Ctrl
-* Replacing insert with =
-* Adding / to the P position
-* Moving ' one to the left
-
-```
- ,----------------------------------------------------------------. ,--------------.
- | GRV| F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9| F10| F11| F12 | |Nlck|Pscr| = |
- |----------------------------------------------------------------| |--------------|
- | | | | | | | | | | | ? | DEL | |Home| Up |PgUp|
- |------------------------------------------------------------ | |--------------|
- | | | | | | | | | | | ' |DEL | |Left|ScrL|Rght|
- |----------------------------------------------------------------' |--------------|
- | | | | | | | | | | [ | ] | ,----. |End |Down|PgDn|
- |-----------------------------------------------------------' | | `--------------|
- | GUI | | | | | ,--------------. | |Rest|
- `------` '------------------------------` '-----' | | | | `---------'
- `--------------'
-```
-
-### Blank ASKII version if anyone needs!
-```
- ,----------------------------------------------------------------. ,--------------.
- | | | | | | | | | | | | | | | | | |
- |----------------------------------------------------------------| |--------------|
- | | | | | | | | | | | | | | | | |
- |------------------------------------------------------------ | |--------------|
- | | | | | | | | | | | | | | | | |
- |----------------------------------------------------------------' |--------------|
- | | | | | | | | | | | | ,----. | | | |
- |-----------------------------------------------------------' | | `--------------|
- | | | | | | ,--------------. | | |
- `------` '------------------------------` '-----' | | | | `---------'
- `--------------'
-```
-
-### KLE
-![KLE Layout](https://i.imgur.com/JDc1oM4.png)
-![KLE Link](http://www.keyboard-layout-editor.com/##@@=Esc%0A%60&=!%0A1&=%2F@%0A2&=%23%0A3&=$%0A4&=%25%0A5&=%5E%0A6&=%2F&%0A7&=*%0A8&=(%0A9&=)%0A0&=%2F_%0A-&=+%0A%2F=&_x:0.25%3B&=%2F%2F&=*&=+%3B&@_w:1.5%3B&=Tab&=Q&=W&=E&=R&=T&=Y&=U&=I&=O&=P&_x:0.25&w:1.25&h:2&w2:1.5&h2:1&x2:-0.25%3B&=Enter&_x:0.25%3B&=7&=8&=9%3B&@_w:1.75%3B&=Caps%20Lock&=A&=S&=D&=F&=G&=H&=J&=K&=L&=%2F:%0A%2F%3B&_x:1.5%3B&=4&=5&=6%3B&@_w:1.25%3B&=Shift&=%7C%0A%5C&=Z&=X&=C&=V&=B&=N&=M&=%3C%0A,&_w:1.5%3B&=%3E%0A.&_x:1.5%3B&=1&=2&=3%3B&@_y:-0.75&x:12%3B&=%E2%86%91%3B&@_y:-0.25&w:1.25%3B&=Ctrl&_x:1&a:7&w:6.25%3B&=&_x:1&a:4&w:1.25%3B&=AltGr&_x:3.5%3B&=0&=.%3B&@_y:-0.75&x:11%3B&=%E2%86%90%0AFN&=%E2%86%93&=%E2%86%92%3B&@_y:0.25%3B&=%60&=F1&=F2&=F3&=F4&=F5&=F6&=F7&=F8&=F9&=F10&=F11&=F12&_x:0.25%3B&=NLock&=Print&=%2F=%3B&@_a:7&w:1.5%3B&=&=&=&=&=&=&=&=&=&=&_a:4%3B&=%2F%2F&_x:0.25&w:1.25&h:2&w2:1.5&h2:1&x2:-0.25%3B&=Del&_x:0.25%3B&=Home&=Up&=PgUp%3B&@_a:7&w:1.75%3B&=&=&=&=&=&=&=&=&=&=&_a:4%3B&='&_x:1.5%3B&=Left&=ScrLc&=Right%3B&@_a:7&w:1.25%3B&=&=&=&=&=&=&=&=&=&_a:4%3B&=%5B&_w:1.5%3B&=%5D&_x:1.5%3B&=End&=Down&=PgDn%3B&@_y:-0.75&x:12&a:7%3B&=%3B&@_y:-0.25&a:4&w:1.25%3B&=Win&_x:1&w:6.25%3B&=RAlt&_x:1&a:7&w:1.25%3B&=&_x:3.5%3B&=&_a:4%3B&=Rst%3B&@_y:-0.75&x:11&a:7%3B&=&=&=)
\ No newline at end of file
diff --git a/keyboards/akko/5087/5087.c b/keyboards/akko/5087/5087.c
new file mode 100644
index 000000000000..4d6cf949009e
--- /dev/null
+++ b/keyboards/akko/5087/5087.c
@@ -0,0 +1,190 @@
+/* Copyright (C) 2023 jonylee@hfd
+ *
+ * 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 .
+ */
+
+#include "quantum.h"
+// clang-format off
+#ifdef RGB_MATRIX_ENABLE
+const ckled2001_led PROGMEM g_ckled2001_leds[RGB_MATRIX_LED_COUNT] = {
+/* Refer to IS31 manual for these locations
+ * driver
+ * | R location
+ * | | G location
+ * | | | B location
+ * | | | | */
+ /*row0*/
+ {1, A_1, B_1, C_1},
+ {1, A_2, B_2, C_2},
+ {1, A_3, B_3, C_3},
+ {1, A_4, B_4, C_4},
+ {1, A_5, B_5, C_5},
+ {1, A_6, B_6, C_6},
+ {1, A_7, B_7, C_7},
+ {1, A_8, B_8, C_8},
+ {1, A_9, B_9, C_9},
+ {1, A_10, B_10, C_10},
+ {1, A_11, B_11, C_11},
+ {1, A_12, B_12, C_12},
+ {1, A_13, B_13, C_13},
+ {1, A_14, B_14, C_14},
+ {1, A_15, B_15, C_15},
+ {1, A_16, B_16, C_16},
+
+ /*row1*/
+ {0, A_1, B_1, C_1},
+ {0, A_2, B_2, C_2},
+ {0, A_3, B_3, C_3},
+ {0, A_4, B_4, C_4},
+ {0, A_5, B_5, C_5},
+ {0, A_6, B_6, C_6},
+ {0, A_7, B_7, C_7},
+ {0, A_8, B_8, C_8},
+ {0, A_9, B_9, C_9},
+ {0, A_10, B_10, C_10},
+ {0, A_11, B_11, C_11},
+ {0, A_12, B_12, C_12},
+ {0, A_13, B_13, C_13},
+ {0, A_14, B_14, C_14},
+ {1, D_1, E_1, F_1},
+ {1, D_2, E_2, F_2},
+ {1, D_3, E_3, F_3},
+
+ /*row2*/
+ {0, D_1, E_1, F_1},
+ {0, D_2, E_2, F_2},
+ {0, D_3, E_3, F_3},
+ {0, D_4, E_4, F_4},
+ {0, D_5, E_5, F_5},
+ {0, D_6, E_6, F_6},
+ {0, D_7, E_7, F_7},
+ {0, D_8, E_8, F_8},
+ {0, D_9, E_9, F_9},
+ {0, D_10, E_10, F_10},
+ {0, D_11, E_11, F_11},
+ {0, D_12, E_12, F_12},
+ {0, D_13, E_13, F_13},
+ {0, D_14, E_14, F_14},
+ {1, G_1, H_1, I_1},
+ {1, G_2, H_2, I_2},
+ {1, G_3, H_3, I_3},
+
+ /*row3*/
+ {0, G_1, H_1, I_1},
+ {0, G_2, H_2, I_2},
+ {0, G_3, H_3, I_3},
+ {0, G_4, H_4, I_4},
+ {0, G_5, H_5, I_5},
+ {0, G_6, H_6, I_6},
+ {0, G_7, H_7, I_7},
+ {0, G_8, H_8, I_8},
+ {0, G_9, H_9, I_9},
+ {0, G_10, H_10, I_10},
+ {0, G_11, H_11, I_11},
+ {0, G_12, H_12, I_12},
+ {0, G_13, H_13, I_13},
+
+ /*row4*/
+ {0, J_1, K_1, L_1},
+ {0, J_2, K_2, L_2},
+ {0, J_3, K_3, L_3},
+ {0, J_4, K_4, L_4},
+ {0, J_5, K_5, L_5},
+ {0, J_6, K_6, L_6},
+ {0, J_7, K_7, L_7},
+ {0, J_8, K_8, L_8},
+ {0, J_9, K_9, L_9},
+ {0, J_10, K_10, L_10},
+ {0, J_11, K_11, L_11},
+ {0, J_12, K_12, L_12},
+ {1, J_4, K_4, L_4},
+
+ /*row5*/
+ {0, J_13, K_13, L_13},
+ {0, J_14, K_14, L_14},
+ {0, J_15, K_15, L_15},
+ {0, J_16, K_16, L_16},
+ {0, G_14, H_14, I_14},
+ {0, G_15, H_15, I_15},
+ {0, G_16, H_16, I_16},
+ {0, D_15, E_15, F_15},
+ {1, J_1, K_1, L_1},
+ {1, J_2, K_2, L_2},
+ {1, J_3, K_3, L_3},
+};
+#endif // RGB_MATRIX_ENABLE
+
+enum __layers {
+ WIN_B,
+ WIN_W,
+ WIN_FN,
+ MAC_B,
+ MAC_W,
+ MAC_FN,
+};
+
+// clang-format on
+
+void matrix_init_kb(void) {
+ setPinOutput(LED_MAC_OS_PIN); // LDE2 MAC\WIN
+ writePinLow(LED_MAC_OS_PIN);
+ setPinOutput(LED_WIN_LOCK_PIN); // LED3 Win Lock
+ writePinLow(LED_WIN_LOCK_PIN);
+
+ matrix_init_user();
+}
+
+void housekeeping_task_kb(void){
+ writePin(LED_MAC_OS_PIN, (get_highest_layer(default_layer_state) == 3));
+ writePin(LED_WIN_LOCK_PIN, keymap_config.no_gui);
+}
+
+bool process_record_kb(uint16_t keycode, keyrecord_t* record) {
+ if (!process_record_user(keycode, record)) {
+ return false;
+ }
+ switch (keycode) {
+ case DF(WIN_B):
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(WIN_B);
+ }
+ return false;
+ case DF(MAC_B):
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(MAC_B);
+ keymap_config.no_gui = 0;
+ eeconfig_update_keymap(keymap_config.raw);
+ }
+ return false;
+ case RGB_TOG:
+ if (record->event.pressed) {
+ switch (rgb_matrix_get_flags()) {
+ case LED_FLAG_ALL: {
+ rgb_matrix_set_flags(LED_FLAG_NONE);
+ rgb_matrix_set_color_all(0, 0, 0);
+ } break;
+ default: {
+ rgb_matrix_set_flags(LED_FLAG_ALL);
+ } break;
+ }
+ }
+ if (!rgb_matrix_is_enabled()) {
+ rgb_matrix_set_flags(LED_FLAG_ALL);
+ rgb_matrix_enable();
+ }
+ return false;
+ default:
+ return true;
+ }
+}
diff --git a/keyboards/akko/5087/config.h b/keyboards/akko/5087/config.h
new file mode 100644
index 000000000000..3a6b7030ee78
--- /dev/null
+++ b/keyboards/akko/5087/config.h
@@ -0,0 +1,51 @@
+/* Copyright (C) 2023 jonylee@hfd
+ *
+ * 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 .
+ */
+
+#pragma once
+
+
+/* LED Indicators */
+#define LED_MAC_OS_PIN C10
+#define LED_WIN_LOCK_PIN C11
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* SPI Config for spi flash*/
+#define SPI_DRIVER SPIDQ
+#define SPI_SCK_PIN B3
+#define SPI_MOSI_PIN B5
+#define SPI_MISO_PIN B4
+#define SPI_MOSI_PAL_MODE 5
+
+#define EXTERNAL_FLASH_SPI_SLAVE_SELECT_PIN C12
+
+/* I2C Config for LED Driver */
+#define DRIVER_COUNT 2
+#define DRIVER_ADDR_1 0b1110100
+#define DRIVER_ADDR_2 0b1110111
+#define I2C1_OPMODE OPMODE_I2C
+#define I2C1_CLOCK_SPEED 400000 /* 400000 */
+
+#define RGB_MATRIX_LED_COUNT 87
+
+#define RGB_TRIGGER_ON_KEYDOWN
+#define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended
+#define RGB_MATRIX_FRAMEBUFFER_EFFECTS
+#define RGB_MATRIX_KEYPRESSES
+
diff --git a/keyboards/akko/5087/halconf.h b/keyboards/akko/5087/halconf.h
new file mode 100644
index 000000000000..55bfe5c97794
--- /dev/null
+++ b/keyboards/akko/5087/halconf.h
@@ -0,0 +1,23 @@
+/* Copyright (C) 2023 jonylee@hfd
+ *
+ * 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 .
+ */
+#pragma once
+
+#define HAL_USE_I2C TRUE
+#define HAL_USE_SPI TRUE
+#define SPI_USE_WAIT TRUE
+#define SPI_SELECT_MODE SPI_SELECT_MODE_PAD
+
+#include_next
diff --git a/keyboards/akko/5087/info.json b/keyboards/akko/5087/info.json
new file mode 100644
index 000000000000..1b4059b0d58d
--- /dev/null
+++ b/keyboards/akko/5087/info.json
@@ -0,0 +1,260 @@
+{
+ "keyboard_name": "5087",
+ "manufacturer": "Akko",
+ "url":"https://www.akkogear.com",
+ "maintainer": "jonylee@hfd",
+ "usb": {
+ "vid": "0xFFFE",
+ "pid": "0x000C",
+ "device_version": "1.0.4",
+ "suspend_wakeup_delay": 400,
+ "force_nkro": true
+ },
+ "processor": "WB32FQ95",
+ "bootloader": "wb32-dfu",
+ "features": {
+ "bootmagic": true,
+ "mousekey": false,
+ "extrakey": true,
+ "console": false,
+ "command": false,
+ "nkro": true,
+ "rgb_matrix": true
+ },
+ "dynamic_keymap": {
+ "layer_count": 6
+ },
+ "matrix_pins": {
+ "cols": ["C1", "C2", "C3", "A0", "A1", "A2", "A3", "A4", "A5", "A6", "A7", "C4", "C5", "B0", "B1", "B2", "B10"],
+ "rows": ["B15", "C6", "C7", "C8", "C9", "A8"]
+ },
+ "diode_direction": "ROW2COL",
+ "eeprom": {
+ "driver": "wear_leveling",
+ "wear_leveling": {
+ "driver": "spi_flash",
+ "backing_size": 8192
+ }
+ },
+ "indicators": {
+ "caps_lock": "A15"
+ },
+ "rgb_matrix": {
+ "driver": "ckled2001",
+ "max_brightness": 180,
+ "animations": {
+ "breathing": true,
+ "cycle_all": true,
+ "cycle_left_right": true,
+ "cycle_up_down": true,
+ "rainbow_moving_chevron": true,
+ "cycle_out_in": true,
+ "cycle_out_in_dual": true,
+ "cycle_pinwheel": true,
+ "cycle_spiral": true,
+ "dual_beacon": true,
+ "rainbow_beacon": true,
+ "raindrops": true,
+ "typing_heatmap": true,
+ "solid_reactive_simple": true,
+ "solid_reactive": true,
+ "solid_reactive_cross": true,
+ "multisplash": true
+ },
+ "layout":[
+ { "flags": 4, "matrix": [0, 0], "x": 0, "y": 0},
+ { "flags": 4, "matrix": [0, 1], "x": 24, "y": 0},
+ { "flags": 4, "matrix": [0, 2], "x": 38, "y": 0},
+ { "flags": 4, "matrix": [0, 3], "x": 52, "y": 0},
+ { "flags": 4, "matrix": [0, 4], "x": 66, "y": 0},
+ { "flags": 4, "matrix": [0, 5], "x": 82, "y": 0},
+ { "flags": 4, "matrix": [0, 6], "x": 96, "y": 0},
+ { "flags": 4, "matrix": [0, 7], "x":110, "y": 0},
+ { "flags": 4, "matrix": [0, 8], "x":124, "y": 0},
+ { "flags": 4, "matrix": [0, 9], "x":140, "y": 0},
+ { "flags": 4, "matrix": [0, 10], "x":154, "y": 0},
+ { "flags": 4, "matrix": [0, 11], "x":168, "y": 0},
+ { "flags": 4, "matrix": [0, 12], "x":182, "y": 0},
+ { "flags": 4, "matrix": [0, 14], "x":196, "y": 0},
+ { "flags": 4, "matrix": [0, 15], "x":210, "y": 0},
+ { "flags": 4, "matrix": [0, 16], "x":224, "y": 0},
+
+ { "flags": 4, "matrix": [1, 0], "x": 0, "y": 12},
+ { "flags": 4, "matrix": [1, 1], "x": 13, "y": 12},
+ { "flags": 4, "matrix": [1, 2], "x": 26, "y": 12},
+ { "flags": 4, "matrix": [1, 3], "x": 39, "y": 12},
+ { "flags": 4, "matrix": [1, 4], "x": 52, "y": 12},
+ { "flags": 4, "matrix": [1, 5], "x": 65, "y": 12},
+ { "flags": 4, "matrix": [1, 6], "x": 79, "y": 12},
+ { "flags": 4, "matrix": [1, 7], "x": 92, "y": 12},
+ { "flags": 4, "matrix": [1, 8], "x":105, "y": 12},
+ { "flags": 4, "matrix": [1, 9], "x":118, "y": 12},
+ { "flags": 4, "matrix": [1, 10], "x":131, "y": 12},
+ { "flags": 4, "matrix": [1, 11], "x":144, "y": 12},
+ { "flags": 4, "matrix": [1, 12], "x":158, "y": 12},
+ { "flags": 4, "matrix": [1, 13], "x":171, "y": 12},
+ { "flags": 4, "matrix": [1, 14], "x":184, "y": 12},
+ { "flags": 4, "matrix": [1, 15], "x":197, "y": 12},
+ { "flags": 4, "matrix": [1, 16], "x":210, "y": 12},
+
+ { "flags": 4, "matrix": [2, 0], "x": 0, "y": 26},
+ { "flags": 4, "matrix": [2, 1], "x": 14, "y": 26},
+ { "flags": 4, "matrix": [2, 2], "x": 28, "y": 26},
+ { "flags": 4, "matrix": [2, 3], "x": 42, "y": 26},
+ { "flags": 4, "matrix": [2, 4], "x": 56, "y": 26},
+ { "flags": 4, "matrix": [2, 5], "x": 70, "y": 26},
+ { "flags": 4, "matrix": [2, 6], "x": 84, "y": 26},
+ { "flags": 4, "matrix": [2, 7], "x": 98, "y": 26},
+ { "flags": 4, "matrix": [2, 8], "x":112, "y": 26},
+ { "flags": 4, "matrix": [2, 9], "x":126, "y": 26},
+ { "flags": 4, "matrix": [2, 10], "x":140, "y": 26},
+ { "flags": 4, "matrix": [2, 11], "x":154, "y": 26},
+ { "flags": 4, "matrix": [2, 12], "x":168, "y": 26},
+ { "flags": 4, "matrix": [2, 13], "x":182, "y": 26},
+ { "flags": 4, "matrix": [2, 14], "x":196, "y": 26},
+ { "flags": 4, "matrix": [2, 15], "x":210, "y": 26},
+ { "flags": 4, "matrix": [2, 16], "x":224, "y": 26},
+
+ { "flags": 4, "matrix": [3, 0], "x": 0, "y": 38},
+ { "flags": 4, "matrix": [3, 1], "x": 14, "y": 38},
+ { "flags": 4, "matrix": [3, 2], "x": 28, "y": 38},
+ { "flags": 4, "matrix": [3, 3], "x": 42, "y": 38},
+ { "flags": 4, "matrix": [3, 4], "x": 56, "y": 38},
+ { "flags": 4, "matrix": [3, 5], "x": 70, "y": 38},
+ { "flags": 4, "matrix": [3, 6], "x": 84, "y": 38},
+ { "flags": 4, "matrix": [3, 7], "x": 98, "y": 38},
+ { "flags": 4, "matrix": [3, 8], "x":112, "y": 38},
+ { "flags": 4, "matrix": [3, 9], "x":126, "y": 38},
+ { "flags": 4, "matrix": [3, 10], "x":140, "y": 38},
+ { "flags": 4, "matrix": [3, 11], "x":154, "y": 38},
+ { "flags": 4, "matrix": [3, 13], "x":182, "y": 38},
+
+ { "flags": 4, "matrix": [4, 0], "x": 0, "y": 51},
+ { "flags": 4, "matrix": [4, 1], "x": 14, "y": 51},
+ { "flags": 4, "matrix": [4, 2], "x": 28, "y": 51},
+ { "flags": 4, "matrix": [4, 3], "x": 42, "y": 51},
+ { "flags": 4, "matrix": [4, 4], "x": 56, "y": 51},
+ { "flags": 4, "matrix": [4, 5], "x": 70, "y": 51},
+ { "flags": 4, "matrix": [4, 6], "x": 84, "y": 51},
+ { "flags": 4, "matrix": [4, 7], "x": 98, "y": 51},
+ { "flags": 4, "matrix": [4, 8], "x":112, "y": 51},
+ { "flags": 4, "matrix": [4, 9], "x":126, "y": 51},
+ { "flags": 4, "matrix": [4, 10], "x":140, "y": 51},
+ { "flags": 4, "matrix": [4, 13], "x":154, "y": 51},
+ { "flags": 4, "matrix": [4, 15], "x":182, "y": 51},
+
+ { "flags": 4, "matrix": [5, 0], "x": 0, "y": 64},
+ { "flags": 4, "matrix": [5, 1], "x": 14, "y": 64},
+ { "flags": 4, "matrix": [5, 2], "x": 28, "y": 64},
+ { "flags": 4, "matrix": [5, 5], "x": 70, "y": 64},
+ { "flags": 4, "matrix": [5, 9], "x":126, "y": 64},
+ { "flags": 4, "matrix": [5, 10], "x":140, "y": 64},
+ { "flags": 4, "matrix": [5, 11], "x":154, "y": 64},
+ { "flags": 4, "matrix": [5, 13], "x":182, "y": 64},
+ { "flags": 4, "matrix": [5, 14], "x":196, "y": 64},
+ { "flags": 4, "matrix": [5, 15], "x":210, "y": 64},
+ { "flags": 4, "matrix": [5, 16], "x":224, "y": 64}
+
+ ]
+ },
+ "community_layouts": ["tkl_ansi"],
+ "layouts": {
+ "LAYOUT_tkl_ansi": {
+ "layout": [
+ { "label": "Esc", "matrix": [0, 0], "x": 0, "y": 0 },
+ { "label": "F1", "matrix": [0, 1], "x": 2, "y": 0 },
+ { "label": "F2", "matrix": [0, 2], "x": 3, "y": 0 },
+ { "label": "F3", "matrix": [0, 3], "x": 4, "y": 0 },
+ { "label": "F4", "matrix": [0, 4], "x": 5, "y": 0 },
+ { "label": "F5", "matrix": [0, 5], "x": 6.5, "y": 0 },
+ { "label": "F6", "matrix": [0, 6], "x": 7.5, "y": 0 },
+ { "label": "F7", "matrix": [0, 7], "x": 8.5, "y": 0 },
+ { "label": "F8", "matrix": [0, 8], "x": 9.5, "y": 0 },
+ { "label": "F9", "matrix": [0, 9], "x": 11, "y": 0 },
+ { "label": "F10", "matrix": [0, 10], "x": 12, "y": 0 },
+ { "label": "F11", "matrix": [0, 11], "x": 13, "y": 0 },
+ { "label": "F12", "matrix": [0, 12], "x": 14, "y": 0 },
+ { "label": "PrtSc", "matrix": [0, 14], "x": 15.25, "y": 0 },
+ { "label": "ScrLk", "matrix": [0, 15], "x": 16.25, "y": 0 },
+ { "label": "Pause", "matrix": [0, 16], "x": 17.25, "y": 0 },
+
+ { "label": "~", "matrix": [1, 0], "x": 0, "y": 1.25 },
+ { "label": "!", "matrix": [1, 1], "x": 1, "y": 1.25 },
+ { "label": "@", "matrix": [1, 2], "x": 2, "y": 1.25 },
+ { "label": "#", "matrix": [1, 3], "x": 3, "y": 1.25 },
+ { "label": "$", "matrix": [1, 4], "x": 4, "y": 1.25 },
+ { "label": "%", "matrix": [1, 5], "x": 5, "y": 1.25 },
+ { "label": "^", "matrix": [1, 6], "x": 6, "y": 1.25 },
+ { "label": "&", "matrix": [1, 7], "x": 7, "y": 1.25 },
+ { "label": "*", "matrix": [1, 8], "x": 8, "y": 1.25 },
+ { "label": "(", "matrix": [1, 9], "x": 9, "y": 1.25 },
+ { "label": ")", "matrix": [1, 10], "x": 10, "y": 1.25 },
+ { "label": "_", "matrix": [1, 11], "x": 11, "y": 1.25 },
+ { "label": "+", "matrix": [1, 12], "x": 12, "y": 1.25 },
+ { "label": "Backspace", "matrix": [1, 13], "x": 13, "y": 1.25, "w": 2 },
+ { "label": "Ins", "matrix": [1, 14], "x": 15.25, "y": 1.25 },
+ { "label": "Home", "matrix": [1, 15], "x": 16.25, "y": 1.25 },
+ { "label": "PgUp", "matrix": [1, 16], "x": 17.25, "y": 1.25 },
+
+ { "label": "Tab", "matrix": [2, 0], "x": 0, "y": 2.25, "w": 1.5 },
+ { "label": "Q", "matrix": [2, 1], "x": 1.5, "y": 2.25 },
+ { "label": "W", "matrix": [2, 2], "x": 2.5, "y": 2.25 },
+ { "label": "E", "matrix": [2, 3], "x": 3.5, "y": 2.25 },
+ { "label": "R", "matrix": [2, 4], "x": 4.5, "y": 2.25 },
+ { "label": "T", "matrix": [2, 5], "x": 5.5, "y": 2.25 },
+ { "label": "Y", "matrix": [2, 6], "x": 6.5, "y": 2.25 },
+ { "label": "U", "matrix": [2, 7], "x": 7.5, "y": 2.25 },
+ { "label": "I", "matrix": [2, 8], "x": 8.5, "y": 2.25 },
+ { "label": "O", "matrix": [2, 9], "x": 9.5, "y": 2.25 },
+ { "label": "P", "matrix": [2, 10], "x": 10.5, "y": 2.25 },
+ { "label": "{", "matrix": [2, 11], "x": 11.5, "y": 2.25 },
+ { "label": "}", "matrix": [2, 12], "x": 12.5, "y": 2.25 },
+ { "label": "|", "matrix": [2, 13], "x": 13.5, "y": 2.25, "w": 1.5 },
+ { "label": "Del", "matrix": [2, 14], "x": 15.25, "y": 2.25 },
+ { "label": "End", "matrix": [2, 15], "x": 16.25, "y": 2.25 },
+ { "label": "PgDn", "matrix": [2, 16], "x": 17.25, "y": 2.25 },
+
+ { "label": "Caps Lock", "matrix": [3, 0], "x": 0, "y": 3.25, "w": 1.75 },
+ { "label": "A", "matrix": [3, 1], "x": 1.75, "y": 3.25 },
+ { "label": "S", "matrix": [3, 2], "x": 2.75, "y": 3.25 },
+ { "label": "D", "matrix": [3, 3], "x": 3.75, "y": 3.25 },
+ { "label": "F", "matrix": [3, 4], "x": 4.75, "y": 3.25 },
+ { "label": "G", "matrix": [3, 5], "x": 5.75, "y": 3.25 },
+ { "label": "H", "matrix": [3, 6], "x": 6.75, "y": 3.25 },
+ { "label": "J", "matrix": [3, 7], "x": 7.75, "y": 3.25 },
+ { "label": "K", "matrix": [3, 8], "x": 8.75, "y": 3.25 },
+ { "label": "L", "matrix": [3, 9], "x": 9.75, "y": 3.25 },
+ { "label": ":", "matrix": [3, 10], "x": 10.75, "y": 3.25 },
+ { "label": "'", "matrix": [3, 11], "x": 11.75, "y": 3.25 },
+ { "label": "Enter", "matrix": [3, 13], "x": 12.75, "y": 3.25, "w": 2.25 },
+
+ { "label": "Shift", "matrix": [4, 0], "x": 0, "y": 4.25, "w": 2.25 },
+ { "label": "Z", "matrix": [4, 1], "x": 2.25, "y": 4.25 },
+ { "label": "X", "matrix": [4, 2], "x": 3.25, "y": 4.25 },
+ { "label": "C", "matrix": [4, 3], "x": 4.25, "y": 4.25 },
+ { "label": "V", "matrix": [4, 4], "x": 5.25, "y": 4.25 },
+ { "label": "B", "matrix": [4, 5], "x": 6.25, "y": 4.25 },
+ { "label": "N", "matrix": [4, 6], "x": 7.25, "y": 4.25 },
+ { "label": "M", "matrix": [4, 7], "x": 8.25, "y": 4.25 },
+ { "label": "<", "matrix": [4, 8], "x": 9.25, "y": 4.25 },
+ { "label": ">", "matrix": [4, 9], "x": 10.25, "y": 4.25 },
+ { "label": "?", "matrix": [4, 10], "x": 11.25, "y": 4.25 },
+ { "label": "Shift", "matrix": [4, 13], "x": 12.25, "y": 4.25, "w": 2.75 },
+ { "label": "Up", "matrix": [4, 15], "x": 16.25, "y": 4.25 },
+
+ { "label": "Ctrl", "matrix": [5, 0], "x": 0, "y": 5.25, "w": 1.25 },
+ { "label": "Win", "matrix": [5, 1], "x": 1.25, "y": 5.25, "w": 1.25 },
+ { "label": "Alt", "matrix": [5, 2], "x": 2.5, "y": 5.25, "w": 1.25 },
+ { "label": "Space", "matrix": [5, 5], "x": 3.75, "y": 5.25, "w": 6.25 },
+ { "label": "Alt", "matrix": [5, 9], "x": 10, "y": 5.25, "w": 1.25 },
+ { "label": "Win", "matrix": [5, 10], "x": 11.25, "y": 5.25, "w": 1.25 },
+ { "label": "Fn", "matrix": [5, 11], "x": 12.5, "y": 5.25, "w": 1.25 },
+ { "label": "Ctrl", "matrix": [5, 13], "x": 13.75, "y": 5.25, "w": 1.25 },
+ { "label": "Left", "matrix": [5, 14], "x": 15.25, "y": 5.25 },
+ { "label": "Down", "matrix": [5, 15], "x": 16.25, "y": 5.25 },
+ { "label": "Right", "matrix": [5, 16], "x": 17.25, "y": 5.25 }
+
+ ]
+ }
+ }
+}
diff --git a/keyboards/akko/5087/keymaps/default/keymap.c b/keyboards/akko/5087/keymaps/default/keymap.c
new file mode 100644
index 000000000000..07763ccc8916
--- /dev/null
+++ b/keyboards/akko/5087/keymaps/default/keymap.c
@@ -0,0 +1,79 @@
+/* Copyright (C) 2023 jonylee@hfd
+ *
+ * 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 .
+ */
+
+#include QMK_KEYBOARD_H
+
+enum __layers {
+ WIN_B,
+ WIN_W,
+ WIN_FN,
+ MAC_B,
+ MAC_W,
+ MAC_FN
+};
+
+// clang-format off
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [WIN_B] = LAYOUT_tkl_ansi( /* Base */
+ 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_SCRL, KC_PAUS,
+ 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_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_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, MO(WIN_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
+
+ [WIN_W] = LAYOUT_tkl_ansi( /* Base */
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, KC_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_W,
+ _______, _______, _______, _______, _______, _______, MO(WIN_FN), _______, KC_A, KC_S, KC_D),
+
+
+ [WIN_FN] = LAYOUT_tkl_ansi( /* FN */
+ _______, KC_MYCM, KC_MAIL, KC_WSCH, KC_WHOM, KC_MSEL, KC_MPLY, KC_MPRV, KC_MNXT, _______,_______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_SPD, RGB_SPI, _______, _______, _______, _______,
+ _______, _______,TG(WIN_W),_______, _______, _______, _______, _______, _______, DF(MAC_B),_______,_______, _______, RGB_MOD, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_TOG, _______, _______, RGB_HUI,
+ _______, _______, _______, KC_CALC, _______, _______, _______, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, RGB_VAI,
+ _______, GU_TOGG, _______, _______, _______, _______, _______, _______, RGB_SAD, RGB_VAD, RGB_SAI),
+
+ [MAC_B] = LAYOUT_tkl_ansi( /* Base */
+ KC_ESC, KC_BRID, KC_BRIU, KC_MCTL, KC_LPAD, KC_F5, KC_F6, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_PSCR, KC_SCRL, KC_PAUS,
+ 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_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_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, KC_RALT, MO(MAC_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
+
+ [MAC_W] = LAYOUT_tkl_ansi( /* Base */
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, KC_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_W,
+ _______, _______, _______, _______, _______, _______, MO(MAC_FN), _______, KC_A, KC_S, KC_D),
+ [MAC_FN] = LAYOUT_tkl_ansi( /* FN */
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, _______, _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_SPD, RGB_SPI, _______, _______, _______, _______,
+ _______, _______,TG(MAC_W),_______, _______, _______, _______, _______, _______, DF(WIN_B),_______,_______, _______, RGB_MOD, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_TOG, _______, _______, RGB_HUI,
+ _______, _______, _______, KC_CALC, _______, _______, _______, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, RGB_VAI,
+ _______, _______, _______, _______, _______, _______, _______, _______, RGB_SAD, RGB_VAD, RGB_SAI)
+};
+// clang-format on
diff --git a/keyboards/akko/5087/keymaps/via/keymap.c b/keyboards/akko/5087/keymaps/via/keymap.c
new file mode 100644
index 000000000000..dd59925fa908
--- /dev/null
+++ b/keyboards/akko/5087/keymaps/via/keymap.c
@@ -0,0 +1,79 @@
+/* Copyright (C) 2023 jonylee@hfd
+ *
+ * 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 .
+ */
+
+#include QMK_KEYBOARD_H
+
+enum __layers {
+ WIN_B,
+ WIN_W,
+ WIN_FN,
+ MAC_B,
+ MAC_W,
+ MAC_FN,
+};
+
+// clang-format off
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [WIN_B] = LAYOUT_tkl_ansi( /* Base */
+ 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_SCRL, KC_PAUS,
+ 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_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_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, MO(WIN_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
+
+ [WIN_W] = LAYOUT_tkl_ansi( /* Base */
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, KC_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_W,
+ _______, _______, _______, _______, _______, _______, MO(WIN_FN), _______, KC_A, KC_S, KC_D),
+
+
+ [WIN_FN] = LAYOUT_tkl_ansi( /* FN */
+ _______, KC_MYCM, KC_MAIL, KC_WSCH, KC_WHOM, KC_MSEL, KC_MPLY, KC_MPRV, KC_MNXT, _______,_______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_SPD, RGB_SPI, _______, _______, _______, _______,
+ _______, _______,TG(WIN_W),_______, _______, _______, _______, _______, _______, DF(MAC_B),_______,_______, _______, RGB_MOD, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_TOG, _______, _______, RGB_HUI,
+ _______, _______, _______, KC_CALC, _______, _______, _______, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, RGB_VAI,
+ _______, GU_TOGG, _______, _______, _______, _______, _______, _______, RGB_SAD, RGB_VAD, RGB_SAI),
+
+ [MAC_B] = LAYOUT_tkl_ansi( /* Base */
+ KC_ESC, KC_BRID, KC_BRIU, KC_MCTL, KC_LPAD, KC_F5, KC_F6, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_PSCR, KC_SCRL, KC_PAUS,
+ 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_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_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, KC_RALT, MO(MAC_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
+
+ [MAC_W] = LAYOUT_tkl_ansi( /* Base */
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, KC_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_W,
+ _______, _______, _______, _______, _______, _______, MO(MAC_FN), _______, KC_A, KC_S, KC_D),
+ [MAC_FN] = LAYOUT_tkl_ansi( /* FN */
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, _______, _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_SPD, RGB_SPI, _______, _______, _______, _______,
+ _______, _______,TG(MAC_W),_______, _______, _______, _______, _______, _______, DF(WIN_B),_______,_______, _______, RGB_MOD, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_TOG, _______, _______, RGB_HUI,
+ _______, _______, _______, KC_CALC, _______, _______, _______, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, RGB_VAI,
+ _______, _______, _______, _______, _______, _______, _______, _______, RGB_SAD, RGB_VAD, RGB_SAI)
+};
+// clang-format on
diff --git a/keyboards/dztech/dz60rgb/keymaps/moults31/rules.mk b/keyboards/akko/5087/keymaps/via/rules.mk
similarity index 100%
rename from keyboards/dztech/dz60rgb/keymaps/moults31/rules.mk
rename to keyboards/akko/5087/keymaps/via/rules.mk
diff --git a/keyboards/akko/5087/mcuconf.h b/keyboards/akko/5087/mcuconf.h
new file mode 100644
index 000000000000..0d16f4f04e46
--- /dev/null
+++ b/keyboards/akko/5087/mcuconf.h
@@ -0,0 +1,24 @@
+/* Copyright (C) 2022 jonylee@hfd
+ *
+ * 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 .
+ */
+#pragma once
+
+#include_next
+
+#undef WB32_SPI_USE_QSPI
+#define WB32_SPI_USE_QSPI TRUE
+
+#undef WB32_I2C_USE_I2C1
+#define WB32_I2C_USE_I2C1 TRUE
diff --git a/keyboards/akko/5087/readme.md b/keyboards/akko/5087/readme.md
new file mode 100644
index 000000000000..1d002fbb9f35
--- /dev/null
+++ b/keyboards/akko/5087/readme.md
@@ -0,0 +1,19 @@
+# 5087
+
+A customizable 80% keyboard.
+
+* Keyboard Maintainer: [jonylee@hfd](https://github.com/jonylee1986)
+* Hardware Supported:Akko 5087
+* Hardware Availability: [akko](https://www.akkogear.com/)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make akko/5087:default
+
+Flashing example for this keyboard:
+
+ make akko/5087:default:flash
+
+**Reset Key**: Hold down the key located at *K000*, which programmed as *Esc* while plugging in the keyboard.
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/akko/5087/rules.mk b/keyboards/akko/5087/rules.mk
new file mode 100644
index 000000000000..6e7633bfe015
--- /dev/null
+++ b/keyboards/akko/5087/rules.mk
@@ -0,0 +1 @@
+# This file intentionally left blank
diff --git a/keyboards/akko/5108/5108.c b/keyboards/akko/5108/5108.c
index a14f02bc76e8..91f53e1e550d 100644
--- a/keyboards/akko/5108/5108.c
+++ b/keyboards/akko/5108/5108.c
@@ -17,8 +17,8 @@
#include "quantum.h"
// clang-format off
#ifdef RGB_MATRIX_ENABLE
-const is31_led PROGMEM g_is31_leds[RGB_MATRIX_LED_COUNT] = {
-/* Refer to IS31 manual for these locations
+const snled27351_led_t PROGMEM g_snled27351_leds[RGB_MATRIX_LED_COUNT] = {
+/* Refer to SNLED27351 manual for these locations
* driver
* | R location
* | | G location
diff --git a/keyboards/akko/5108/config.h b/keyboards/akko/5108/config.h
index f56e825e0501..7154ce44d27e 100644
--- a/keyboards/akko/5108/config.h
+++ b/keyboards/akko/5108/config.h
@@ -16,9 +16,6 @@
#pragma once
-/* Use 5 dynamic keymap layers */
-#define DYNAMIC_KEYMAP_LAYER_COUNT 6
-
/* LED Indicators */
#define LED_WIN_LOCK_PIN C11
@@ -35,12 +32,10 @@
#define SPI_MOSI_PAL_MODE 5
#define EXTERNAL_FLASH_SPI_SLAVE_SELECT_PIN C12
-#define WEAR_LEVELING_BACKING_SIZE (8 * 1024)
/* I2C Config for LED Driver */
-#define DRIVER_COUNT 2
-#define DRIVER_ADDR_1 0b1110100
-#define DRIVER_ADDR_2 0b1110111
+#define SNLED27351_I2C_ADDRESS_1 SNLED27351_I2C_ADDRESS_GND
+#define SNLED27351_I2C_ADDRESS_2 SNLED27351_I2C_ADDRESS_VDDIO
#define I2C1_SCL_PAL_MODE 4
#define I2C1_OPMODE OPMODE_I2C
#define I2C1_CLOCK_SPEED 400000 /* 400000 */
diff --git a/keyboards/akko/5108/info.json b/keyboards/akko/5108/info.json
index 7049b20a648c..662a949a53fe 100644
--- a/keyboards/akko/5108/info.json
+++ b/keyboards/akko/5108/info.json
@@ -26,12 +26,22 @@
"rows": ["B15", "C6", "C7", "C8", "C9", "A8"]
},
"diode_direction": "ROW2COL",
+ "dynamic_keymap": {
+ "layer_count": 6
+ },
+ "eeprom": {
+ "driver": "wear_leveling",
+ "wear_leveling": {
+ "driver": "spi_flash",
+ "backing_size": 8192
+ }
+ },
"indicators": {
"num_lock": "A15",
"caps_lock": "C10"
},
"rgb_matrix": {
- "driver": "is31fl3733",
+ "driver": "snled27351",
"max_brightness": 180,
"animations": {
"breathing": true,
diff --git a/keyboards/akko/5108/rules.mk b/keyboards/akko/5108/rules.mk
index 24d5f6f52ecc..6e7633bfe015 100644
--- a/keyboards/akko/5108/rules.mk
+++ b/keyboards/akko/5108/rules.mk
@@ -1,2 +1 @@
-EEPROM_DRIVER = wear_leveling
-WEAR_LEVELING_DRIVER = spi_flash
+# This file intentionally left blank
diff --git a/keyboards/akko/acr87/acr87.c b/keyboards/akko/acr87/acr87.c
index e175e21368ef..7ee9ec6470c6 100644
--- a/keyboards/akko/acr87/acr87.c
+++ b/keyboards/akko/acr87/acr87.c
@@ -17,8 +17,8 @@
#include "quantum.h"
// clang-format off
#ifdef RGB_MATRIX_ENABLE
-const is31_led PROGMEM g_is31_leds[RGB_MATRIX_LED_COUNT] = {
-/* Refer to IS31 manual for these locations
+const snled27351_led_t PROGMEM g_snled27351_leds[RGB_MATRIX_LED_COUNT] = {
+/* Refer to SNLED27351 manual for these locations
* driver
* | R location
* | | G location
diff --git a/keyboards/akko/acr87/config.h b/keyboards/akko/acr87/config.h
index 221cad86ad1c..4c1fb9afa1f2 100644
--- a/keyboards/akko/acr87/config.h
+++ b/keyboards/akko/acr87/config.h
@@ -16,9 +16,6 @@
#pragma once
-/* Use 5 dynamic keymap layers */
-#define DYNAMIC_KEYMAP_LAYER_COUNT 6
-
/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
#define LOCKING_SUPPORT_ENABLE
/* Locking resynchronize hack */
@@ -32,13 +29,11 @@
#define SPI_MOSI_PAL_MODE 5
#define EXTERNAL_FLASH_SPI_SLAVE_SELECT_PIN C12
-#define WEAR_LEVELING_BACKING_SIZE (8 * 1024)
/* I2C Config for LED Driver */
-#define DRIVER_COUNT 3
-#define DRIVER_ADDR_1 0b1110100
-#define DRIVER_ADDR_2 0b1110111
-#define DRIVER_ADDR_3 0b1110110
+#define SNLED27351_I2C_ADDRESS_1 SNLED27351_I2C_ADDRESS_GND
+#define SNLED27351_I2C_ADDRESS_2 SNLED27351_I2C_ADDRESS_VDDIO
+#define SNLED27351_I2C_ADDRESS_3 SNLED27351_I2C_ADDRESS_SDA
#define I2C1_SCL_PAL_MODE 4
#define I2C1_OPMODE OPMODE_I2C
diff --git a/keyboards/akko/acr87/info.json b/keyboards/akko/acr87/info.json
index 5ff1926d0c50..5ccb0c3f731b 100644
--- a/keyboards/akko/acr87/info.json
+++ b/keyboards/akko/acr87/info.json
@@ -26,8 +26,18 @@
"rows": [ "B15", "C6", "C7", "C8", "C9", "A8"]
},
"diode_direction": "ROW2COL",
+ "dynamic_keymap": {
+ "layer_count": 6
+ },
+ "eeprom": {
+ "driver": "wear_leveling",
+ "wear_leveling": {
+ "driver": "spi_flash",
+ "backing_size": 8192
+ }
+ },
"rgb_matrix": {
- "driver": "is31fl3733",
+ "driver": "snled27351",
"max_brightness": 180,
"animations": {
"breathing": true,
diff --git a/keyboards/akko/acr87/rules.mk b/keyboards/akko/acr87/rules.mk
index 0dc7a3314204..6e7633bfe015 100644
--- a/keyboards/akko/acr87/rules.mk
+++ b/keyboards/akko/acr87/rules.mk
@@ -1,3 +1 @@
-EEPROM_DRIVER = wear_leveling
-WEAR_LEVELING_DRIVER = spi_flash
-
+# This file intentionally left blank
diff --git a/keyboards/akko/top40/config.h b/keyboards/akko/top40/config.h
index bd849292e6af..1d601a189cfc 100644
--- a/keyboards/akko/top40/config.h
+++ b/keyboards/akko/top40/config.h
@@ -16,9 +16,6 @@
#pragma once
-/* Use 5 dynamic keymap layers */
-#define DYNAMIC_KEYMAP_LAYER_COUNT 6
-
/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
#define LOCKING_SUPPORT_ENABLE
/* Locking resynchronize hack */
@@ -32,12 +29,10 @@
#define SPI_MOSI_PAL_MODE 5
#define EXTERNAL_FLASH_SPI_SLAVE_SELECT_PIN C12
-#define WEAR_LEVELING_BACKING_SIZE (8 * 1024)
/* I2C Config for LED Driver */
-#define DRIVER_COUNT 2
-#define DRIVER_ADDR_1 0b1110100
-#define DRIVER_ADDR_2 0b1110111
+#define SNLED27351_I2C_ADDRESS_1 SNLED27351_I2C_ADDRESS_GND
+#define SNLED27351_I2C_ADDRESS_2 SNLED27351_I2C_ADDRESS_VDDIO
#define I2C1_SCL_PAL_MODE 4
#define I2C1_OPMODE OPMODE_I2C
#define I2C1_CLOCK_SPEED 400000 /* 400000 */
diff --git a/keyboards/akko/top40/info.json b/keyboards/akko/top40/info.json
index 48252e6c7769..243952ccc8bb 100644
--- a/keyboards/akko/top40/info.json
+++ b/keyboards/akko/top40/info.json
@@ -26,8 +26,18 @@
"rows": ["C7", "C8", "C9", "A8"]
},
"diode_direction": "ROW2COL",
+ "dynamic_keymap": {
+ "layer_count": 6
+ },
+ "eeprom": {
+ "driver": "wear_leveling",
+ "wear_leveling": {
+ "driver": "spi_flash",
+ "backing_size": 8192
+ }
+ },
"rgb_matrix": {
- "driver": "is31fl3733",
+ "driver": "snled27351",
"max_brightness": 180,
"animations": {
"breathing": true,
diff --git a/keyboards/akko/top40/rules.mk b/keyboards/akko/top40/rules.mk
index b753f0682e56..6e7633bfe015 100644
--- a/keyboards/akko/top40/rules.mk
+++ b/keyboards/akko/top40/rules.mk
@@ -1,6 +1 @@
-# Build Options
-# change yes to no to disable
-#
-EEPROM_DRIVER = wear_leveling
-WEAR_LEVELING_DRIVER = spi_flash
-
+# This file intentionally left blank
diff --git a/keyboards/akko/top40/top40.c b/keyboards/akko/top40/top40.c
index 7fe193447dc6..028e4bdd057b 100644
--- a/keyboards/akko/top40/top40.c
+++ b/keyboards/akko/top40/top40.c
@@ -17,8 +17,8 @@
#include "quantum.h"
// clang-format off
#ifdef RGB_MATRIX_ENABLE
-const is31_led PROGMEM g_is31_leds[RGB_MATRIX_LED_COUNT] = {
-/* Refer to IS31 manual for these locations
+const snled27351_led_t PROGMEM g_snled27351_leds[RGB_MATRIX_LED_COUNT] = {
+/* Refer to SNLED27351 manual for these locations
* driver
* | R location
* | | G location
diff --git a/keyboards/al1/keymaps/splitbs/keymap.c b/keyboards/al1/keymaps/splitbs/keymap.c
deleted file mode 100644
index 71f2b805449d..000000000000
--- a/keyboards/al1/keymaps/splitbs/keymap.c
+++ /dev/null
@@ -1,35 +0,0 @@
-/* Copyright 2018 MechMerlin
- *
- * 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 .
- */
-
-#include QMK_KEYBOARD_H
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- LAYOUT_split_bs(
- 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_GRV, KC_BSPC, KC_INS, KC_NUM, KC_PSLS, KC_PAST, KC_PMNS,
- 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_P7, KC_P8, KC_P9, KC_PPLS,
- 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_P4, KC_P5, KC_P6,
- KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1), KC_UP, KC_P1, KC_P2, KC_P3, KC_PENT,
- KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(1), KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT
- ),
-
- LAYOUT_split_bs(
- _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, KC_DEL, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, BL_TOGG, BL_DOWN, BL_UP, _______, _______
- )
-};
diff --git a/keyboards/aleblazer/zodiark/keymaps/slimoled/config.h b/keyboards/aleblazer/zodiark/keymaps/slimoled/config.h
deleted file mode 100644
index e2df253c3f43..000000000000
--- a/keyboards/aleblazer/zodiark/keymaps/slimoled/config.h
+++ /dev/null
@@ -1,22 +0,0 @@
-/*
-Copyright 2021 Spencer Deven
-
-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 3 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 .
-*/
-#pragma once
-
-#ifdef OLED_ENABLE
- #define OLED_DISPLAY_128X32
- #define OLED_TIMEOUT 400000
-#endif
diff --git a/keyboards/aleblazer/zodiark/keymaps/slimoled/keymap.c b/keyboards/aleblazer/zodiark/keymaps/slimoled/keymap.c
deleted file mode 100644
index 690fe6c71a15..000000000000
--- a/keyboards/aleblazer/zodiark/keymaps/slimoled/keymap.c
+++ /dev/null
@@ -1,332 +0,0 @@
-/*
-Copyright 2021 Spencer Deven
-
-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 3 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 .
-*/
-#include QMK_KEYBOARD_H
-
-enum sofle_layers {
- /* _M_XYZ = Mac Os, _W_XYZ = Win/Linux */
- _QWERTY,
- _COLEMAK,
- _LOWER,
- _RAISE,
- _ADJUST,
-};
-
-enum custom_keycodes {
- KC_QWERTY = SAFE_RANGE,
- KC_COLEMAK,
- KC_LOWER,
- KC_RAISE,
- KC_ADJUST,
- KC_PRVWD,
- KC_NXTWD,
- KC_LSTRT,
- KC_LEND,
- KC_DLINE
-};
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-
- [_QWERTY] = LAYOUT(
- KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
- KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_LBRC, KC_RBRC, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS,
- KC_ADJUST, KC_A, KC_S, KC_D, KC_F, KC_G, KC_MINS, KC_EQL, 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_GRV, KC_MUTE, RGB_TOG, KC_DEL,KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT ,
- KC_LCTL, KC_LALT, KC_LGUI, LALT(KC_TAB), KC_LOWER, KC_SPC, KC_ENT, KC_ENT, KC_SPC, KC_RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
- ),
-
- [_LOWER] = LAYOUT(
- _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
- KC_PSLS, KC_P7, KC_P8, KC_P9, KC_NUM, _______, _______, _______, _______, KC_PSLS, KC_P7, KC_P8, KC_P9, KC_F12,
- KC_CAPS, KC_P4, KC_P5, KC_P6, KC_NUM, _______, _______, _______, _______, _______, KC_P4, KC_P5, KC_P6, KC_NUM,
- _______, KC_P1, KC_P2, KC_P3, _______, _______, _______, _______, _______, _______, _______, _______, KC_P1, KC_P2, KC_P3, _______,
- _______, KC_P0, KC_PDOT, KC_PENT, _______, _______, _______, _______, _______, _______, KC_P0, KC_PDOT, KC_PENT, _______
- ),
-
- [_RAISE] = LAYOUT(
- _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
- KC_PSLS, KC_P7, KC_P8, KC_P9, KC_NUM, _______, _______, _______, _______, KC_PSLS, KC_P7, KC_P8, KC_P9, KC_F12,
- KC_CAPS, KC_P4, KC_P5, KC_P6, KC_NUM, _______, _______, _______, _______, _______, KC_P4, KC_P5, KC_P6, KC_NUM,
- _______, KC_P1, KC_P2, KC_P3, _______, _______, _______, _______, _______, _______, _______, _______, KC_P1, KC_P2, KC_P3, _______,
- _______, KC_P0, KC_PDOT, KC_PENT, _______, _______, _______, _______, _______, _______, KC_P0, KC_PDOT, KC_PENT, _______
- ),
-
- [_ADJUST] = LAYOUT(
- _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, EE_CLR, _______, _______, _______, KC_F12,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_TOG, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_MOD, RGB_SPI, RGB_HUI, RGB_SAI, RGB_VAI,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_RMOD, RGB_SPD, RGB_HUD, RGB_SAD, RGB_VAD
- )
-
-};
-#ifdef OLED_ENABLE
-
-static void render_logo(void) {
- static const char PROGMEM qmk_logo[] = {
- 0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f,0x90,0x91,0x92,0x93,0x94,
- 0xa0,0xa1,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7,0xa8,0xa9,0xaa,0xab,0xac,0xad,0xae,0xaf,0xb0,0xb1,0xb2,0xb3,0xb4,
- 0xc0,0xc1,0xc2,0xc3,0xc4,0xc5,0xc6,0xc7,0xc8,0xc9,0xca,0xcb,0xcc,0xcd,0xce,0xcf,0xd0,0xd1,0xd2,0xd3,0xd4,0
- };
-
- oled_write_P(qmk_logo, false);
-}
-
-static void print_status_narrow(void) {
- // Print current mode
- oled_write_P(PSTR("\n\n"), false);
- oled_write_ln_P(PSTR("MODE"), false);
- oled_write_ln_P(PSTR(""), false);
- if (keymap_config.swap_lctl_lgui) {
- oled_write_ln_P(PSTR("MAC"), false);
- } else {
- oled_write_ln_P(PSTR("WIN"), false);
- }
-
- switch (get_highest_layer(default_layer_state)) {
- case _QWERTY:
- oled_write_ln_P(PSTR("Qwrt"), false);
- break;
- case _COLEMAK:
- oled_write_ln_P(PSTR("Clmk"), false);
- break;
- default:
- oled_write_P(PSTR("Undef"), false);
- }
- oled_write_P(PSTR("\n\n"), false);
- // Print current layer
- oled_write_ln_P(PSTR("LAYER"), false);
- switch (get_highest_layer(layer_state)) {
- case _COLEMAK:
- case _QWERTY:
- oled_write_P(PSTR("Base\n"), false);
- break;
- case _RAISE:
- oled_write_P(PSTR("Raise"), false);
- break;
- case _LOWER:
- oled_write_P(PSTR("Lower"), false);
- break;
- case _ADJUST:
- oled_write_P(PSTR("Adj\n"), false);
- break;
- default:
- oled_write_ln_P(PSTR("Undef"), false);
- }
- oled_write_P(PSTR("\n\n"), false);
- led_t led_usb_state = host_keyboard_led_state();
- oled_write_ln_P(PSTR("CPSLK"), led_usb_state.caps_lock);
-}
-
-oled_rotation_t oled_init_user(oled_rotation_t rotation) {
- if (is_keyboard_master()) {
- return OLED_ROTATION_90;
- }
- return rotation;
-}
-
-bool oled_task_user(void) {
- if (is_keyboard_master()) {
- print_status_narrow();
- } else {
- render_logo();
- }
- return false;
-}
-
-#endif
-
-bool process_record_user(uint16_t keycode, keyrecord_t *record) {
- switch (keycode) {
- case KC_QWERTY:
- if (record->event.pressed) {
- set_single_persistent_default_layer(_QWERTY);
- }
- return false;
- case KC_COLEMAK:
- if (record->event.pressed) {
- set_single_persistent_default_layer(_COLEMAK);
- }
- return false;
- case KC_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;
- case KC_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;
- case KC_ADJUST:
- if (record->event.pressed) {
- layer_on(_ADJUST);
- } else {
- layer_off(_ADJUST);
- }
- return false;
- case KC_PRVWD:
- if (record->event.pressed) {
- if (keymap_config.swap_lctl_lgui) {
- register_mods(mod_config(MOD_LALT));
- register_code(KC_LEFT);
- } else {
- register_mods(mod_config(MOD_LCTL));
- register_code(KC_LEFT);
- }
- } else {
- if (keymap_config.swap_lctl_lgui) {
- unregister_mods(mod_config(MOD_LALT));
- unregister_code(KC_LEFT);
- } else {
- unregister_mods(mod_config(MOD_LCTL));
- unregister_code(KC_LEFT);
- }
- }
- break;
- case KC_NXTWD:
- if (record->event.pressed) {
- if (keymap_config.swap_lctl_lgui) {
- register_mods(mod_config(MOD_LALT));
- register_code(KC_RIGHT);
- } else {
- register_mods(mod_config(MOD_LCTL));
- register_code(KC_RIGHT);
- }
- } else {
- if (keymap_config.swap_lctl_lgui) {
- unregister_mods(mod_config(MOD_LALT));
- unregister_code(KC_RIGHT);
- } else {
- unregister_mods(mod_config(MOD_LCTL));
- unregister_code(KC_RIGHT);
- }
- }
- break;
- case KC_LSTRT:
- if (record->event.pressed) {
- if (keymap_config.swap_lctl_lgui) {
- //CMD-arrow on Mac, but we have CTL and GUI swapped
- register_mods(mod_config(MOD_LCTL));
- register_code(KC_LEFT);
- } else {
- register_code(KC_HOME);
- }
- } else {
- if (keymap_config.swap_lctl_lgui) {
- unregister_mods(mod_config(MOD_LCTL));
- unregister_code(KC_LEFT);
- } else {
- unregister_code(KC_HOME);
- }
- }
- break;
- case KC_LEND:
- if (record->event.pressed) {
- if (keymap_config.swap_lctl_lgui) {
- //CMD-arrow on Mac, but we have CTL and GUI swapped
- register_mods(mod_config(MOD_LCTL));
- register_code(KC_RIGHT);
- } else {
- register_code(KC_END);
- }
- } else {
- if (keymap_config.swap_lctl_lgui) {
- unregister_mods(mod_config(MOD_LCTL));
- unregister_code(KC_RIGHT);
- } else {
- unregister_code(KC_END);
- }
- }
- break;
- case KC_DLINE:
- if (record->event.pressed) {
- register_mods(mod_config(MOD_LCTL));
- register_code(KC_BSPC);
- } else {
- unregister_mods(mod_config(MOD_LCTL));
- unregister_code(KC_BSPC);
- }
- break;
- case KC_COPY:
- if (record->event.pressed) {
- register_mods(mod_config(MOD_LCTL));
- register_code(KC_C);
- } else {
- unregister_mods(mod_config(MOD_LCTL));
- unregister_code(KC_C);
- }
- return false;
- case KC_PASTE:
- if (record->event.pressed) {
- register_mods(mod_config(MOD_LCTL));
- register_code(KC_V);
- } else {
- unregister_mods(mod_config(MOD_LCTL));
- unregister_code(KC_V);
- }
- return false;
- case KC_CUT:
- if (record->event.pressed) {
- register_mods(mod_config(MOD_LCTL));
- register_code(KC_X);
- } else {
- unregister_mods(mod_config(MOD_LCTL));
- unregister_code(KC_X);
- }
- return false;
- break;
- case KC_UNDO:
- if (record->event.pressed) {
- register_mods(mod_config(MOD_LCTL));
- register_code(KC_Z);
- } else {
- unregister_mods(mod_config(MOD_LCTL));
- unregister_code(KC_Z);
- }
- return false;
- }
- return true;
-}
-
-#ifdef ENCODER_ENABLE
-
-bool encoder_update_user(uint8_t index, bool clockwise) {
- if (index == 0) {
- if (clockwise) {
- tap_code(KC_VOLU);
- } else {
- tap_code(KC_VOLD);
- }
- } else if (index == 1) {
- if (clockwise) {
- rgblight_step();
- } else {
- rgblight_step_reverse();
- }
- }
- return true;
-}
-
-#endif
diff --git a/keyboards/aleblazer/zodiark/keymaps/slimoled/rules.mk b/keyboards/aleblazer/zodiark/keymaps/slimoled/rules.mk
deleted file mode 100644
index 1e3cebb14515..000000000000
--- a/keyboards/aleblazer/zodiark/keymaps/slimoled/rules.mk
+++ /dev/null
@@ -1 +0,0 @@
-RGBLIGHT_ENABLE = yes
diff --git a/keyboards/alf/dc60/info.json b/keyboards/alf/dc60/info.json
index 906b78c10e7e..e0aa59f44f67 100644
--- a/keyboards/alf/dc60/info.json
+++ b/keyboards/alf/dc60/info.json
@@ -142,7 +142,7 @@
{"label": "0", "matrix": [0, 10], "x": 10, "y": 0},
{"label": "-", "matrix": [0, 11], "x": 11, "y": 0},
{"label": "=", "matrix": [0, 12], "x": 12, "y": 0},
- {"label": "Backspace", "matrix": [0, 14], "x": 13, "y": 0, "w": 2},
+ {"label": "Backspace", "matrix": [0, 13], "x": 13, "y": 0, "w": 2},
{"label": "Tab", "matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
{"label": "Q", "matrix": [1, 2], "x": 1.5, "y": 1},
@@ -211,7 +211,7 @@
{"label": "0", "matrix": [0, 10], "x": 10, "y": 0},
{"label": "-", "matrix": [0, 11], "x": 11, "y": 0},
{"label": "=", "matrix": [0, 12], "x": 12, "y": 0},
- {"label": "Backspace", "matrix": [0, 14], "x": 13, "y": 0, "w": 2},
+ {"label": "Backspace", "matrix": [0, 13], "x": 13, "y": 0, "w": 2},
{"label": "Tab", "matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
{"label": "Q", "matrix": [1, 2], "x": 1.5, "y": 1},
@@ -282,7 +282,7 @@
{"label": "0", "matrix": [0, 10], "x": 10, "y": 0},
{"label": "-", "matrix": [0, 11], "x": 11, "y": 0},
{"label": "=", "matrix": [0, 12], "x": 12, "y": 0},
- {"label": "Backspace", "matrix": [0, 14], "x": 13, "y": 0, "w": 2},
+ {"label": "Backspace", "matrix": [0, 13], "x": 13, "y": 0, "w": 2},
{"label": "Tab", "matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
{"label": "Q", "matrix": [1, 2], "x": 1.5, "y": 1},
@@ -354,7 +354,7 @@
{"label": "0", "matrix": [0, 10], "x": 10, "y": 0},
{"label": "-", "matrix": [0, 11], "x": 11, "y": 0},
{"label": "=", "matrix": [0, 12], "x": 12, "y": 0},
- {"label": "Backspace", "matrix": [0, 14], "x": 13, "y": 0, "w": 2},
+ {"label": "Backspace", "matrix": [0, 13], "x": 13, "y": 0, "w": 2},
{"label": "Tab", "matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
{"label": "Q", "matrix": [1, 2], "x": 1.5, "y": 1},
@@ -424,7 +424,7 @@
{"label": "0", "matrix": [0, 10], "x": 10, "y": 0},
{"label": "-", "matrix": [0, 11], "x": 11, "y": 0},
{"label": "=", "matrix": [0, 12], "x": 12, "y": 0},
- {"label": "Backspace", "matrix": [0, 14], "x": 13, "y": 0, "w": 2},
+ {"label": "Backspace", "matrix": [0, 13], "x": 13, "y": 0, "w": 2},
{"label": "Tab", "matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
{"label": "Q", "matrix": [1, 2], "x": 1.5, "y": 1},
@@ -496,7 +496,7 @@
{"label": "0", "matrix": [0, 10], "x": 10, "y": 0},
{"label": "-", "matrix": [0, 11], "x": 11, "y": 0},
{"label": "=", "matrix": [0, 12], "x": 12, "y": 0},
- {"label": "Backspace", "matrix": [0, 14], "x": 13, "y": 0, "w": 2},
+ {"label": "Backspace", "matrix": [0, 13], "x": 13, "y": 0, "w": 2},
{"label": "Tab", "matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
{"label": "Q", "matrix": [1, 2], "x": 1.5, "y": 1},
diff --git a/keyboards/alf/dc60/matrix_diagram.md b/keyboards/alf/dc60/matrix_diagram.md
index 368318c1cdec..d2020bda6a4d 100644
--- a/keyboards/alf/dc60/matrix_diagram.md
+++ b/keyboards/alf/dc60/matrix_diagram.md
@@ -2,12 +2,12 @@
Most of these are "best-guess." I was using photos I found on ZFrontier as a
reference and I don't have the PCB on-hand.
- - @noroadsleft
- 2023-01-20
+
+\- @noroadsleft, 2023-11-21
```
┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐ ┌───────┐
-│00 │01 │02 │03 │04 │05 │06 │07 │08 │09 │0A │0B │0C │0D │0E │ │0E │ 2u Backspace
+│00 │01 │02 │03 │04 │05 │06 │07 │08 │09 │0A │0B │0C │0D │0E │ │0D │ 2u Backspace
├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤ └─┬─────┤
│10 │12 │13 │14 │15 │16 │17 │18 │19 │1A │1B │1C │1D │1E │ │ │
├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤ ┌──┴┐2D │ ISO Enter
diff --git a/keyboards/alfredslab/swift65/solder/info.json b/keyboards/alfredslab/swift65/solder/info.json
index 5259316d9d51..83ca4d9b8aa2 100644
--- a/keyboards/alfredslab/swift65/solder/info.json
+++ b/keyboards/alfredslab/swift65/solder/info.json
@@ -349,6 +349,322 @@
{"matrix": [4, 6], "x": 4, "y": 4, "w": 7},
{"matrix": [4, 11], "x": 11, "y": 4, "w": 1.5},
+ {"matrix": [4, 12], "x": 13, "y": 4},
+ {"matrix": [4, 13], "x": 14, "y": 4},
+ {"matrix": [4, 14], "x": 15, "y": 4}
+ ]
+ },
+ "LAYOUT_iso_625u_space": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10, "y": 0},
+ {"matrix": [0, 11], "x": 11, "y": 0},
+ {"matrix": [0, 12], "x": 12, "y": 0},
+ {"matrix": [0, 13], "x": 13, "y": 0, "w": 2},
+
+ {"matrix": [0, 14], "x": 15.25, "y": 0},
+
+ {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"matrix": [1, 1], "x": 1.5, "y": 1},
+ {"matrix": [1, 2], "x": 2.5, "y": 1},
+ {"matrix": [1, 3], "x": 3.5, "y": 1},
+ {"matrix": [1, 4], "x": 4.5, "y": 1},
+ {"matrix": [1, 5], "x": 5.5, "y": 1},
+ {"matrix": [1, 6], "x": 6.5, "y": 1},
+ {"matrix": [1, 7], "x": 7.5, "y": 1},
+ {"matrix": [1, 8], "x": 8.5, "y": 1},
+ {"matrix": [1, 9], "x": 9.5, "y": 1},
+ {"matrix": [1, 10], "x": 10.5, "y": 1},
+ {"matrix": [1, 11], "x": 11.5, "y": 1},
+ {"matrix": [1, 12], "x": 12.5, "y": 1},
+
+ {"matrix": [1, 14], "x": 15.25, "y": 1},
+
+ {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"matrix": [2, 1], "x": 1.75, "y": 2},
+ {"matrix": [2, 2], "x": 2.75, "y": 2},
+ {"matrix": [2, 3], "x": 3.75, "y": 2},
+ {"matrix": [2, 4], "x": 4.75, "y": 2},
+ {"matrix": [2, 5], "x": 5.75, "y": 2},
+ {"matrix": [2, 6], "x": 6.75, "y": 2},
+ {"matrix": [2, 7], "x": 7.75, "y": 2},
+ {"matrix": [2, 8], "x": 8.75, "y": 2},
+ {"matrix": [2, 9], "x": 9.75, "y": 2},
+ {"matrix": [2, 10], "x": 10.75, "y": 2},
+ {"matrix": [2, 11], "x": 11.75, "y": 2},
+ {"matrix": [1, 13], "x": 12.75, "y": 2},
+ {"matrix": [2, 13], "x": 13.75, "y": 1, "w": 1.25, "h": 2},
+
+ {"matrix": [2, 14], "x": 15.25, "y": 2},
+
+ {"matrix": [3, 0], "x": 0, "y": 3, "w": 1.25},
+ {"matrix": [3, 1], "x": 1.25, "y": 3},
+ {"matrix": [3, 2], "x": 2.25, "y": 3},
+ {"matrix": [3, 3], "x": 3.25, "y": 3},
+ {"matrix": [3, 4], "x": 4.25, "y": 3},
+ {"matrix": [3, 5], "x": 5.25, "y": 3},
+ {"matrix": [3, 6], "x": 6.25, "y": 3},
+ {"matrix": [3, 7], "x": 7.25, "y": 3},
+ {"matrix": [3, 8], "x": 8.25, "y": 3},
+ {"matrix": [3, 9], "x": 9.25, "y": 3},
+ {"matrix": [3, 10], "x": 10.25, "y": 3},
+ {"matrix": [3, 11], "x": 11.25, "y": 3},
+ {"matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75},
+ {"matrix": [3, 13], "x": 14, "y": 3},
+
+ {"matrix": [4, 0], "x": 0, "y": 4, "w": 1.25},
+ {"matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.25},
+ {"matrix": [4, 3], "x": 2.5, "y": 4, "w": 1.25},
+ {"matrix": [4, 6], "x": 3.75, "y": 4, "w": 6.25},
+ {"matrix": [4, 10], "x": 10, "y": 4, "w": 1.25},
+ {"matrix": [4, 11], "x": 11.25, "y": 4, "w": 1.25},
+
+ {"matrix": [4, 12], "x": 13, "y": 4},
+ {"matrix": [4, 13], "x": 14, "y": 4},
+ {"matrix": [4, 14], "x": 15, "y": 4}
+ ]
+ },
+ "LAYOUT_iso_625u_space_split_bs": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10, "y": 0},
+ {"matrix": [0, 11], "x": 11, "y": 0},
+ {"matrix": [0, 12], "x": 12, "y": 0},
+ {"matrix": [0, 13], "x": 13, "y": 0},
+ {"matrix": [0, 15], "x": 14, "y": 0},
+
+ {"matrix": [0, 14], "x": 15.25, "y": 0},
+
+ {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"matrix": [1, 1], "x": 1.5, "y": 1},
+ {"matrix": [1, 2], "x": 2.5, "y": 1},
+ {"matrix": [1, 3], "x": 3.5, "y": 1},
+ {"matrix": [1, 4], "x": 4.5, "y": 1},
+ {"matrix": [1, 5], "x": 5.5, "y": 1},
+ {"matrix": [1, 6], "x": 6.5, "y": 1},
+ {"matrix": [1, 7], "x": 7.5, "y": 1},
+ {"matrix": [1, 8], "x": 8.5, "y": 1},
+ {"matrix": [1, 9], "x": 9.5, "y": 1},
+ {"matrix": [1, 10], "x": 10.5, "y": 1},
+ {"matrix": [1, 11], "x": 11.5, "y": 1},
+ {"matrix": [1, 12], "x": 12.5, "y": 1},
+
+ {"matrix": [1, 14], "x": 15.25, "y": 1},
+
+ {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"matrix": [2, 1], "x": 1.75, "y": 2},
+ {"matrix": [2, 2], "x": 2.75, "y": 2},
+ {"matrix": [2, 3], "x": 3.75, "y": 2},
+ {"matrix": [2, 4], "x": 4.75, "y": 2},
+ {"matrix": [2, 5], "x": 5.75, "y": 2},
+ {"matrix": [2, 6], "x": 6.75, "y": 2},
+ {"matrix": [2, 7], "x": 7.75, "y": 2},
+ {"matrix": [2, 8], "x": 8.75, "y": 2},
+ {"matrix": [2, 9], "x": 9.75, "y": 2},
+ {"matrix": [2, 10], "x": 10.75, "y": 2},
+ {"matrix": [2, 11], "x": 11.75, "y": 2},
+ {"matrix": [1, 13], "x": 12.75, "y": 2},
+ {"matrix": [2, 13], "x": 13.75, "y": 1, "w": 1.25, "h": 2},
+
+ {"matrix": [2, 14], "x": 15.25, "y": 2},
+
+ {"matrix": [3, 0], "x": 0, "y": 3, "w": 1.25},
+ {"matrix": [3, 1], "x": 1.25, "y": 3},
+ {"matrix": [3, 2], "x": 2.25, "y": 3},
+ {"matrix": [3, 3], "x": 3.25, "y": 3},
+ {"matrix": [3, 4], "x": 4.25, "y": 3},
+ {"matrix": [3, 5], "x": 5.25, "y": 3},
+ {"matrix": [3, 6], "x": 6.25, "y": 3},
+ {"matrix": [3, 7], "x": 7.25, "y": 3},
+ {"matrix": [3, 8], "x": 8.25, "y": 3},
+ {"matrix": [3, 9], "x": 9.25, "y": 3},
+ {"matrix": [3, 10], "x": 10.25, "y": 3},
+ {"matrix": [3, 11], "x": 11.25, "y": 3},
+ {"matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75},
+ {"matrix": [3, 13], "x": 14, "y": 3},
+
+ {"matrix": [4, 0], "x": 0, "y": 4, "w": 1.25},
+ {"matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.25},
+ {"matrix": [4, 3], "x": 2.5, "y": 4, "w": 1.25},
+ {"matrix": [4, 6], "x": 3.75, "y": 4, "w": 6.25},
+ {"matrix": [4, 10], "x": 10, "y": 4, "w": 1.25},
+ {"matrix": [4, 11], "x": 11.25, "y": 4, "w": 1.25},
+
+ {"matrix": [4, 12], "x": 13, "y": 4},
+ {"matrix": [4, 13], "x": 14, "y": 4},
+ {"matrix": [4, 14], "x": 15, "y": 4}
+ ]
+ },
+ "LAYOUT_iso_7u_space": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10, "y": 0},
+ {"matrix": [0, 11], "x": 11, "y": 0},
+ {"matrix": [0, 12], "x": 12, "y": 0},
+ {"matrix": [0, 13], "x": 13, "y": 0, "w": 2},
+
+ {"matrix": [0, 14], "x": 15.25, "y": 0},
+
+ {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"matrix": [1, 1], "x": 1.5, "y": 1},
+ {"matrix": [1, 2], "x": 2.5, "y": 1},
+ {"matrix": [1, 3], "x": 3.5, "y": 1},
+ {"matrix": [1, 4], "x": 4.5, "y": 1},
+ {"matrix": [1, 5], "x": 5.5, "y": 1},
+ {"matrix": [1, 6], "x": 6.5, "y": 1},
+ {"matrix": [1, 7], "x": 7.5, "y": 1},
+ {"matrix": [1, 8], "x": 8.5, "y": 1},
+ {"matrix": [1, 9], "x": 9.5, "y": 1},
+ {"matrix": [1, 10], "x": 10.5, "y": 1},
+ {"matrix": [1, 11], "x": 11.5, "y": 1},
+ {"matrix": [1, 12], "x": 12.5, "y": 1},
+
+ {"matrix": [1, 14], "x": 15.25, "y": 1},
+
+ {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"matrix": [2, 1], "x": 1.75, "y": 2},
+ {"matrix": [2, 2], "x": 2.75, "y": 2},
+ {"matrix": [2, 3], "x": 3.75, "y": 2},
+ {"matrix": [2, 4], "x": 4.75, "y": 2},
+ {"matrix": [2, 5], "x": 5.75, "y": 2},
+ {"matrix": [2, 6], "x": 6.75, "y": 2},
+ {"matrix": [2, 7], "x": 7.75, "y": 2},
+ {"matrix": [2, 8], "x": 8.75, "y": 2},
+ {"matrix": [2, 9], "x": 9.75, "y": 2},
+ {"matrix": [2, 10], "x": 10.75, "y": 2},
+ {"matrix": [2, 11], "x": 11.75, "y": 2},
+ {"matrix": [1, 13], "x": 12.75, "y": 2},
+ {"matrix": [2, 13], "x": 13.75, "y": 1, "w": 1.25, "h": 2},
+
+ {"matrix": [2, 14], "x": 15.25, "y": 2},
+
+ {"matrix": [3, 0], "x": 0, "y": 3, "w": 1.25},
+ {"matrix": [3, 1], "x": 1.25, "y": 3},
+ {"matrix": [3, 2], "x": 2.25, "y": 3},
+ {"matrix": [3, 3], "x": 3.25, "y": 3},
+ {"matrix": [3, 4], "x": 4.25, "y": 3},
+ {"matrix": [3, 5], "x": 5.25, "y": 3},
+ {"matrix": [3, 6], "x": 6.25, "y": 3},
+ {"matrix": [3, 7], "x": 7.25, "y": 3},
+ {"matrix": [3, 8], "x": 8.25, "y": 3},
+ {"matrix": [3, 9], "x": 9.25, "y": 3},
+ {"matrix": [3, 10], "x": 10.25, "y": 3},
+ {"matrix": [3, 11], "x": 11.25, "y": 3},
+ {"matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75},
+ {"matrix": [3, 13], "x": 14, "y": 3},
+
+ {"matrix": [4, 0], "x": 0, "y": 4, "w": 1.5},
+ {"matrix": [4, 1], "x": 1.5, "y": 4},
+ {"matrix": [4, 3], "x": 2.5, "y": 4, "w": 1.5},
+ {"matrix": [4, 6], "x": 4, "y": 4, "w": 7},
+ {"matrix": [4, 11], "x": 11, "y": 4, "w": 1.5},
+
+ {"matrix": [4, 12], "x": 13, "y": 4},
+ {"matrix": [4, 13], "x": 14, "y": 4},
+ {"matrix": [4, 14], "x": 15, "y": 4}
+ ]
+ },
+ "LAYOUT_iso_7u_space_split_bs": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10, "y": 0},
+ {"matrix": [0, 11], "x": 11, "y": 0},
+ {"matrix": [0, 12], "x": 12, "y": 0},
+ {"matrix": [0, 13], "x": 13, "y": 0},
+ {"matrix": [0, 15], "x": 14, "y": 0},
+
+ {"matrix": [0, 14], "x": 15.25, "y": 0},
+
+ {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"matrix": [1, 1], "x": 1.5, "y": 1},
+ {"matrix": [1, 2], "x": 2.5, "y": 1},
+ {"matrix": [1, 3], "x": 3.5, "y": 1},
+ {"matrix": [1, 4], "x": 4.5, "y": 1},
+ {"matrix": [1, 5], "x": 5.5, "y": 1},
+ {"matrix": [1, 6], "x": 6.5, "y": 1},
+ {"matrix": [1, 7], "x": 7.5, "y": 1},
+ {"matrix": [1, 8], "x": 8.5, "y": 1},
+ {"matrix": [1, 9], "x": 9.5, "y": 1},
+ {"matrix": [1, 10], "x": 10.5, "y": 1},
+ {"matrix": [1, 11], "x": 11.5, "y": 1},
+ {"matrix": [1, 12], "x": 12.5, "y": 1},
+
+ {"matrix": [1, 14], "x": 15.25, "y": 1},
+
+ {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"matrix": [2, 1], "x": 1.75, "y": 2},
+ {"matrix": [2, 2], "x": 2.75, "y": 2},
+ {"matrix": [2, 3], "x": 3.75, "y": 2},
+ {"matrix": [2, 4], "x": 4.75, "y": 2},
+ {"matrix": [2, 5], "x": 5.75, "y": 2},
+ {"matrix": [2, 6], "x": 6.75, "y": 2},
+ {"matrix": [2, 7], "x": 7.75, "y": 2},
+ {"matrix": [2, 8], "x": 8.75, "y": 2},
+ {"matrix": [2, 9], "x": 9.75, "y": 2},
+ {"matrix": [2, 10], "x": 10.75, "y": 2},
+ {"matrix": [2, 11], "x": 11.75, "y": 2},
+ {"matrix": [1, 13], "x": 12.75, "y": 2},
+ {"matrix": [2, 13], "x": 13.75, "y": 1, "w": 1.25, "h": 2},
+
+ {"matrix": [2, 14], "x": 15.25, "y": 2},
+
+ {"matrix": [3, 0], "x": 0, "y": 3, "w": 1.25},
+ {"matrix": [3, 1], "x": 1.25, "y": 3},
+ {"matrix": [3, 2], "x": 2.25, "y": 3},
+ {"matrix": [3, 3], "x": 3.25, "y": 3},
+ {"matrix": [3, 4], "x": 4.25, "y": 3},
+ {"matrix": [3, 5], "x": 5.25, "y": 3},
+ {"matrix": [3, 6], "x": 6.25, "y": 3},
+ {"matrix": [3, 7], "x": 7.25, "y": 3},
+ {"matrix": [3, 8], "x": 8.25, "y": 3},
+ {"matrix": [3, 9], "x": 9.25, "y": 3},
+ {"matrix": [3, 10], "x": 10.25, "y": 3},
+ {"matrix": [3, 11], "x": 11.25, "y": 3},
+ {"matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75},
+ {"matrix": [3, 13], "x": 14, "y": 3},
+
+ {"matrix": [4, 0], "x": 0, "y": 4, "w": 1.5},
+ {"matrix": [4, 1], "x": 1.5, "y": 4},
+ {"matrix": [4, 3], "x": 2.5, "y": 4, "w": 1.5},
+ {"matrix": [4, 6], "x": 4, "y": 4, "w": 7},
+ {"matrix": [4, 11], "x": 11, "y": 4, "w": 1.5},
+
{"matrix": [4, 12], "x": 13, "y": 4},
{"matrix": [4, 13], "x": 14, "y": 4},
{"matrix": [4, 14], "x": 15, "y": 4}
diff --git a/keyboards/alhenkb/macropad5x4/info.json b/keyboards/alhenkb/macropad5x4/info.json
index 29be39249d77..1fb472255d3d 100644
--- a/keyboards/alhenkb/macropad5x4/info.json
+++ b/keyboards/alhenkb/macropad5x4/info.json
@@ -65,7 +65,7 @@
{"label": "K31 (B6,F6)", "matrix": [3, 1], "x": 1, "y": 3},
{"label": "K32 (B6,B1)", "matrix": [3, 2], "x": 2, "y": 3},
{"label": "K40 (B5,F4)", "matrix": [4, 0], "x": 0, "y": 4, "w": 2},
- {"label": "K42 (B5,B1)", "matrix": [4, 2], "x": 2, "y": 4}
+ {"label": "K42 (B5,B1)", "matrix": [4, 2], "x": 2, "y": 4},
{"label": "K43 (B5,B2)", "matrix": [4, 3], "x": 3, "y": 3, "h": 2}
]
}
diff --git a/keyboards/alhenkb/macropad5x4/keymaps/numpad/keymap.c b/keyboards/alhenkb/macropad5x4/keymaps/numpad/keymap.c
deleted file mode 100644
index 7a1e287e38fb..000000000000
--- a/keyboards/alhenkb/macropad5x4/keymaps/numpad/keymap.c
+++ /dev/null
@@ -1,48 +0,0 @@
-// Copyright 2023 QMK
-// SPDX-License-Identifier: GPL-2.0-or-later
-
-#include QMK_KEYBOARD_H
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- /*
- * ┌───┬───┬───┬───┐
- * │TG1│ / │ * │ - │
- * ├───┼───┼───┼───┤
- * │ 7 │ 8 │ 9 │ │
- * ├───┼───┼───┤ + │
- * │ 4 │ 5 │ 6 │ │
- * ├───┼───┼───┼───┤
- * │ 1 │ 2 │ 3 │ │
- * ├───┴───┼───┤Ent│
- * │ 0 │ . │ │
- * └───────┴───┴───┘
- */
- [0] = LAYOUT_numpad_5x4(
- TG(1), KC_PSLS, KC_PAST, KC_PMNS,
- KC_P7, KC_P8, KC_P9,
- KC_P4, KC_P5, KC_P6, KC_PPLS,
- KC_P1, KC_P2, KC_P3,
- KC_P0, KC_PDOT, KC_PENT
- ),
-
- /*
- * ┌───┬───┬───┬───┐
- * │TG1│ / │ * │ - │
- * ┌───┬───┬───┐───┤
- * │Hom│ ↑ │PgU│ │
- * ├───┼───┼───┤ + │
- * │ ← │ │ → │ │
- * ├───┼───┼───┤───┤
- * │End│ ↓ │PgD│ │
- * ├───┴───┼───┤Ent│
- * │Insert │Del│ │
- * └───────┴───┘───┘
- */
- [1] = LAYOUT_numpad_5x4(
- _______, _______, _______, _______,
- KC_HOME, KC_UP, KC_PGUP,
- KC_LEFT, XXXXXXX, KC_RGHT, _______,
- KC_END, KC_DOWN, KC_PGDN,
- KC_INS, KC_DEL, _______
- )
-};
diff --git a/keyboards/alpaca/wfeclipse/info.json b/keyboards/alpaca/wfeclipse/info.json
new file mode 100644
index 000000000000..47288bb190d3
--- /dev/null
+++ b/keyboards/alpaca/wfeclipse/info.json
@@ -0,0 +1,210 @@
+{
+ "manufacturer": "Alpaca",
+ "keyboard_name": "WFEclipse",
+ "bootloader": "stm32duino",
+ "diode_direction": "COL2ROW",
+ "features": {
+ "bootmagic": true,
+ "console": true,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true,
+ "rgb_matrix": true
+ },
+ "matrix_pins": {
+ "cols": ["C11", "C10", "A15", "A10", "A9", "A8", "C9", "C8", "C7", "C6", "B1", "B0", "C5", "C4", "A7", "A6"],
+ "rows": ["A0", "A1", "A2", "A3", "A4"]
+ },
+ "processor": "STM32F103",
+ "rgb_matrix": {
+ "animations": {
+ "band_sat": true,
+ "band_spiral_sat": true,
+ "band_spiral_val": true,
+ "band_val": true,
+ "breathing": true,
+ "cycle_all": true,
+ "cycle_left_right": true,
+ "cycle_up_down": true,
+ "gradient_left_right": true,
+ "gradient_up_down": true,
+ "hue_wave": true,
+ "pixel_fractal": true,
+ "solid_color": true,
+ "solid_reactive_simple": true,
+ "solid_splash": true
+ },
+ "driver": "ws2812",
+ "layout": [
+ {"matrix": [4, 15], "x": 198, "y": 54, "flags": 1},
+ {"matrix": [4, 14], "x": 186, "y": 54, "flags": 1},
+ {"matrix": [4, 13], "x": 174, "y": 54, "flags": 1},
+ {"matrix": [4, 12], "x": 150, "y": 54, "flags": 1},
+ {"matrix": [4, 11], "x": 138, "y": 54, "flags": 1},
+ {"matrix": [4, 10], "x": 126, "y": 54, "flags": 1},
+ {"matrix": [4, 6], "x": 51, "y": 54, "flags": 1},
+ {"matrix": [4, 2], "x": 36, "y": 54, "flags": 1},
+ {"matrix": [4, 1], "x": 21, "y": 54, "flags": 1},
+ {"matrix": [4, 0], "x": 6, "y": 54, "flags": 1},
+ {"matrix": [3, 15], "x": 198, "y": 42, "flags": 1},
+ {"matrix": [3, 14], "x": 186, "y": 42, "flags": 1},
+ {"matrix": [3, 13], "x": 153, "y": 42, "flags": 1},
+ {"matrix": [3, 11], "x": 141, "y": 42, "flags": 1},
+ {"matrix": [3, 10], "x": 129, "y": 42, "flags": 1},
+ {"matrix": [3, 9], "x": 117, "y": 42, "flags": 1},
+ {"matrix": [3, 8], "x": 105, "y": 42, "flags": 1},
+ {"matrix": [3, 7], "x": 93, "y": 42, "flags": 1},
+ {"matrix": [3, 6], "x": 81, "y": 42, "flags": 1},
+ {"matrix": [3, 5], "x": 69, "y": 42, "flags": 1},
+ {"matrix": [3, 4], "x": 57, "y": 42, "flags": 1},
+ {"matrix": [3, 3], "x": 45, "y": 42, "flags": 1},
+ {"matrix": [3, 2], "x": 33, "y": 42, "flags": 1},
+ {"matrix": [3, 0], "x": 6, "y": 42, "flags": 1},
+ {"matrix": [2, 15], "x": 198, "y": 30, "flags": 1},
+ {"matrix": [2, 14], "x": 186, "y": 30, "flags": 1},
+ {"matrix": [2, 13], "x": 159, "y": 30, "flags": 1},
+ {"matrix": [2, 11], "x": 147, "y": 30, "flags": 1},
+ {"matrix": [2, 10], "x": 135, "y": 30, "flags": 1},
+ {"matrix": [2, 9], "x": 123, "y": 30, "flags": 1},
+ {"matrix": [2, 8], "x": 111, "y": 30, "flags": 1},
+ {"matrix": [2, 7], "x": 99, "y": 30, "flags": 1},
+ {"matrix": [2, 6], "x": 87, "y": 30, "flags": 1},
+ {"matrix": [2, 5], "x": 75, "y": 30, "flags": 1},
+ {"matrix": [2, 4], "x": 63, "y": 30, "flags": 1},
+ {"matrix": [2, 3], "x": 51, "y": 30, "flags": 1},
+ {"matrix": [2, 2], "x": 39, "y": 30, "flags": 1},
+ {"matrix": [2, 1], "x": 27, "y": 30, "flags": 1},
+ {"matrix": [2, 0], "x": 6, "y": 30, "flags": 1},
+ {"matrix": [1, 15], "x": 198, "y": 18, "flags": 1},
+ {"matrix": [1, 14], "x": 186, "y": 18, "flags": 1},
+ {"matrix": [1, 13], "x": 168, "y": 18, "flags": 1},
+ {"matrix": [1, 12], "x": 156, "y": 18, "flags": 1},
+ {"matrix": [1, 11], "x": 144, "y": 18, "flags": 1},
+ {"matrix": [1, 10], "x": 132, "y": 18, "flags": 1},
+ {"matrix": [1, 9], "x": 120, "y": 18, "flags": 1},
+ {"matrix": [1, 8], "x": 108, "y": 18, "flags": 1},
+ {"matrix": [1, 7], "x": 96, "y": 18, "flags": 1},
+ {"matrix": [1, 6], "x": 84, "y": 18, "flags": 1},
+ {"matrix": [1, 5], "x": 72, "y": 18, "flags": 1},
+ {"matrix": [1, 4], "x": 60, "y": 18, "flags": 1},
+ {"matrix": [1, 3], "x": 48, "y": 18, "flags": 1},
+ {"matrix": [1, 2], "x": 36, "y": 18, "flags": 1},
+ {"matrix": [1, 1], "x": 24, "y": 18, "flags": 1},
+ {"matrix": [1, 0], "x": 6, "y": 18, "flags": 1},
+ {"matrix": [0, 15], "x": 198, "y": 6, "flags": 1},
+ {"matrix": [0, 14], "x": 186, "y": 6, "flags": 1},
+ {"matrix": [0, 13], "x": 162, "y": 6, "flags": 1},
+ {"matrix": [0, 12], "x": 150, "y": 6, "flags": 1},
+ {"matrix": [0, 11], "x": 138, "y": 6, "flags": 1},
+ {"matrix": [0, 10], "x": 126, "y": 6, "flags": 1},
+ {"matrix": [0, 9], "x": 114, "y": 6, "flags": 1},
+ {"matrix": [0, 8], "x": 102, "y": 6, "flags": 1},
+ {"matrix": [0, 7], "x": 90, "y": 6, "flags": 1},
+ {"matrix": [0, 6], "x": 78, "y": 6, "flags": 1},
+ {"matrix": [0, 5], "x": 66, "y": 6, "flags": 1},
+ {"matrix": [0, 4], "x": 54, "y": 6, "flags": 1},
+ {"matrix": [0, 3], "x": 42, "y": 6, "flags": 1},
+ {"matrix": [0, 2], "x": 30, "y": 6, "flags": 1},
+ {"matrix": [0, 1], "x": 18, "y": 6, "flags": 1},
+ {"matrix": [0, 0], "x": 6, "y": 6, "flags": 1},
+ {"x": 125, "y": 1, "flags": 4},
+ {"x": 125, "y": 2, "flags": 4},
+ {"x": 125, "y": 3, "flags": 4},
+ {"x": 125, "y": 4, "flags": 4},
+ {"x": 125, "y": 5, "flags": 4},
+ {"x": 125, "y": 6, "flags": 4},
+ {"x": 125, "y": 7, "flags": 4},
+ {"x": 125, "y": 8, "flags": 4},
+ {"x": 125, "y": 9, "flags": 4},
+ {"x": 125, "y": 10, "flags": 4},
+ {"x": 125, "y": 11, "flags": 4},
+ {"x": 125, "y": 12, "flags": 4}
+ ],
+ "max_brightness": 50
+ },
+ "usb": {
+ "device_version": "1.0.4",
+ "pid": "0x0038",
+ "vid": "0x308F"
+ },
+ "ws2812": {
+ "pin": "B8"
+ },
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"label": "ESC", "matrix": [0, 0], "x": 0, "y": 0},
+ {"label": "1", "matrix": [0, 1], "x": 1, "y": 0},
+ {"label": "2", "matrix": [0, 2], "x": 2, "y": 0},
+ {"label": "3", "matrix": [0, 3], "x": 3, "y": 0},
+ {"label": "4", "matrix": [0, 4], "x": 4, "y": 0},
+ {"label": "5", "matrix": [0, 5], "x": 5, "y": 0},
+ {"label": "6", "matrix": [0, 6], "x": 6, "y": 0},
+ {"label": "7", "matrix": [0, 7], "x": 7, "y": 0},
+ {"label": "8", "matrix": [0, 8], "x": 8, "y": 0},
+ {"label": "9", "matrix": [0, 9], "x": 9, "y": 0},
+ {"label": "0", "matrix": [0, 10], "x": 10, "y": 0},
+ {"label": "MINS", "matrix": [0, 11], "x": 11, "y": 0},
+ {"label": "EQL", "matrix": [0, 12], "x": 12, "y": 0},
+ {"label": "BSPC", "matrix": [0, 13], "x": 13, "y": 0},
+ {"label": "DEL", "matrix": [0, 14], "x": 15, "y": 0},
+ {"label": "INS", "matrix": [0, 15], "x": 16, "y": 0},
+ {"label": "TAB", "matrix": [1, 0], "x": 0, "y": 1},
+ {"label": "Q", "matrix": [1, 1], "x": 1.5, "y": 1},
+ {"label": "W", "matrix": [1, 2], "x": 2.5, "y": 1},
+ {"label": "E", "matrix": [1, 3], "x": 3.5, "y": 1},
+ {"label": "R", "matrix": [1, 4], "x": 4.5, "y": 1},
+ {"label": "T", "matrix": [1, 5], "x": 5.5, "y": 1},
+ {"label": "Y", "matrix": [1, 6], "x": 6.5, "y": 1},
+ {"label": "U", "matrix": [1, 7], "x": 7.5, "y": 1},
+ {"label": "I", "matrix": [1, 8], "x": 8.5, "y": 1},
+ {"label": "O", "matrix": [1, 9], "x": 9.5, "y": 1},
+ {"label": "P", "matrix": [1, 10], "x": 10.5, "y": 1},
+ {"label": "LBRC", "matrix": [1, 11], "x": 11.5, "y": 1},
+ {"label": "RBRC", "matrix": [1, 12], "x": 12.5, "y": 1},
+ {"label": "BSLS", "matrix": [1, 13], "x": 13.5, "y": 1},
+ {"label": "HOME", "matrix": [1, 14], "x": 15, "y": 1},
+ {"label": "PGUP", "matrix": [1, 15], "x": 16, "y": 1},
+ {"label": "CAPS", "matrix": [2, 0], "x": 0, "y": 2},
+ {"label": "A", "matrix": [2, 1], "x": 1.75, "y": 2},
+ {"label": "S", "matrix": [2, 2], "x": 2.75, "y": 2},
+ {"label": "D", "matrix": [2, 3], "x": 3.75, "y": 2},
+ {"label": "F", "matrix": [2, 4], "x": 4.75, "y": 2},
+ {"label": "G", "matrix": [2, 5], "x": 5.75, "y": 2},
+ {"label": "H", "matrix": [2, 6], "x": 6.75, "y": 2},
+ {"label": "J", "matrix": [2, 7], "x": 7.75, "y": 2},
+ {"label": "K", "matrix": [2, 8], "x": 8.75, "y": 2},
+ {"label": "L", "matrix": [2, 9], "x": 9.75, "y": 2},
+ {"label": "SCLN", "matrix": [2, 10], "x": 10.75, "y": 2},
+ {"label": "QUOT", "matrix": [2, 11], "x": 11.75, "y": 2},
+ {"label": "ENT", "matrix": [2, 13], "x": 12.75, "y": 2},
+ {"label": "END", "matrix": [2, 14], "x": 15, "y": 2},
+ {"label": "PGDN", "matrix": [2, 15], "x": 16, "y": 2},
+ {"label": "LSFT", "matrix": [3, 0], "x": 0, "y": 3},
+ {"label": "Z", "matrix": [3, 2], "x": 2.25, "y": 3},
+ {"label": "X", "matrix": [3, 3], "x": 3.25, "y": 3},
+ {"label": "C", "matrix": [3, 4], "x": 4.25, "y": 3},
+ {"label": "V", "matrix": [3, 5], "x": 5.25, "y": 3},
+ {"label": "B", "matrix": [3, 6], "x": 6.25, "y": 3},
+ {"label": "N", "matrix": [3, 7], "x": 7.25, "y": 3},
+ {"label": "M", "matrix": [3, 8], "x": 8.25, "y": 3},
+ {"label": "COMM", "matrix": [3, 9], "x": 9.25, "y": 3},
+ {"label": "DOT", "matrix": [3, 10], "x": 10.25, "y": 3},
+ {"label": "SLSH", "matrix": [3, 11], "x": 11.25, "y": 3},
+ {"label": "RSFT", "matrix": [3, 13], "x": 12.25, "y": 3},
+ {"label": "UP", "matrix": [3, 14], "x": 15, "y": 3},
+ {"label": "MO(1)", "matrix": [3, 15], "x": 16, "y": 3},
+ {"label": "LCTL", "matrix": [4, 0], "x": 0, "y": 4},
+ {"label": "LGUI", "matrix": [4, 1], "x": 1.25, "y": 4},
+ {"label": "LALT", "matrix": [4, 2], "x": 2.5, "y": 4},
+ {"label": "SPC", "matrix": [4, 6], "x": 3.75, "y": 4},
+ {"label": "RALT", "matrix": [4, 10], "x": 10, "y": 4},
+ {"label": "RGUI", "matrix": [4, 11], "x": 11, "y": 4},
+ {"label": "RCTL", "matrix": [4, 12], "x": 12, "y": 4},
+ {"label": "LEFT", "matrix": [4, 13], "x": 14, "y": 4},
+ {"label": "DOWN", "matrix": [4, 14], "x": 15, "y": 4},
+ {"label": "RGHT", "matrix": [4, 15], "x": 16, "y": 4}
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/keyboards/alpaca/wfeclipse/keymaps/default/keymap.c b/keyboards/alpaca/wfeclipse/keymaps/default/keymap.c
new file mode 100644
index 000000000000..3849b2889c13
--- /dev/null
+++ b/keyboards/alpaca/wfeclipse/keymaps/default/keymap.c
@@ -0,0 +1,39 @@
+/* Copyright 2023 temp4gh
+ *
+ * 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 .
+ */
+
+#include QMK_KEYBOARD_H
+
+enum layer_names {
+ WIN_BASE,
+ WIN_FN,
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [WIN_BASE] =LAYOUT(
+ QK_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_DEL, 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_HOME, KC_PGUP,
+ 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_END , 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, MO(WIN_FN),
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+ [WIN_FN] =LAYOUT(
+ 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_PSCR, KC_SCRL, KC_PAUS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS ,KC_MPRV, QK_BOOT,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_HUI, KC_TRNS, KC_MNXT, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_RMOD,RGB_HUD, RGB_TOG, KC_TRNS, KC_TRNS, KC_TRNS
+ )
+};
diff --git a/keyboards/alpaca/wfeclipse/keymaps/via/keymap.c b/keyboards/alpaca/wfeclipse/keymaps/via/keymap.c
new file mode 100644
index 000000000000..ed0d448fb19b
--- /dev/null
+++ b/keyboards/alpaca/wfeclipse/keymaps/via/keymap.c
@@ -0,0 +1,39 @@
+/* Copyright 2023 temp4gh
+ *
+ * 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 .
+ */
+
+#include QMK_KEYBOARD_H
+
+enum layer_names {
+ WIN_BASE,
+ WIN_FN,
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [WIN_BASE] =LAYOUT(
+ QK_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_DEL, 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_HOME, KC_PGUP,
+ 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_END , 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, MO(WIN_FN),
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+ [WIN_FN] =LAYOUT(
+ 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_PSCR, KC_SCRL, KC_PAUS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS ,KC_MPRV, QK_BOOT,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_HUI, KC_TRNS, KC_MNXT, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_RMOD,RGB_HUD, RGB_TOG, KC_TRNS, KC_TRNS, KC_TRNS
+ )
+};
diff --git a/keyboards/7c8/framework/keymaps/steven/rules.mk b/keyboards/alpaca/wfeclipse/keymaps/via/rules.mk
similarity index 100%
rename from keyboards/7c8/framework/keymaps/steven/rules.mk
rename to keyboards/alpaca/wfeclipse/keymaps/via/rules.mk
diff --git a/keyboards/alpaca/wfeclipse/readme.md b/keyboards/alpaca/wfeclipse/readme.md
new file mode 100644
index 000000000000..55570e1e7ad8
--- /dev/null
+++ b/keyboards/alpaca/wfeclipse/readme.md
@@ -0,0 +1,26 @@
+# Alpaca Keyboards whitefox-eclipse
+
+![Alpaca Keyboards whitefox-eclipse](https://i.imgur.com/VlyDBYGh.jpg)
+
+A customizable 68% keyboard.
+
+- Keyboard Maintainer: [temp4gh](https://github.com/temp4gh)
+- Hardware Supported: whitefox-eclipse PCB
+- Hardware Availability: https://kono.store/collections/all-products-list/products/whitefox-eclipse?variant=43224249991367
+
+Make example for this keyboard (after setting up your build environment):
+
+ make alpaca/wfeclipse:default
+
+Flashing example for this keyboard:
+
+ make alpaca/wfeclipse:default:flash
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+## Bootloader
+
+Enter the bootloader in 2 ways:
+
+* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard
+* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available
diff --git a/keyboards/soda/mango/rules.mk b/keyboards/alpaca/wfeclipse/rules.mk
similarity index 100%
rename from keyboards/soda/mango/rules.mk
rename to keyboards/alpaca/wfeclipse/rules.mk
diff --git a/keyboards/alpha/keymaps/hvp/keymap.c b/keyboards/alpha/keymaps/hvp/keymap.c
deleted file mode 100755
index 13071b08305e..000000000000
--- a/keyboards/alpha/keymaps/hvp/keymap.c
+++ /dev/null
@@ -1,51 +0,0 @@
-#include QMK_KEYBOARD_H
-
-enum layer_names {
- HOME,
- MODS,
- MODS2,
- OTHER,
-};
-
-enum custom_keycodes {
- MACRO1 = SAFE_RANGE
-};
-
-bool process_record_user(uint16_t keycode, keyrecord_t *record) {
- if (record->event.pressed) {
- switch (keycode) {
- case MACRO1:
- SEND_STRING("I'm so sorry... -PyroL");
- return false;
- }
- }
- return true;
-};
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [HOME] = LAYOUT(
- KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, MT(MOD_LCTL,KC_P),
- KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, MT(MOD_LSFT,KC_ENT),
- KC_Z, KC_X, KC_C, LT(MODS2,KC_V), LT(MODS, KC_SPC), LT(OTHER,KC_B), KC_N, KC_M),
-
- [MODS] = LAYOUT(
- KC_TAB, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_BSPC,
- KC_LSFT, KC_ESC, _______, KC_SCLN, KC_QUOT, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, _______,
- KC_LCTL, KC_LGUI, KC_LALT, _______, _______, KC_COMM, KC_DOT, KC_SLSH),
-
- [MODS2] = LAYOUT(
- KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0,
- KC_LSFT, KC_ESC, _______, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, KC_GRV, _______,
- RGB_VAI, RGB_VAD, RGB_HUI, _______, _______, KC_MPLY, KC_VOLD, KC_VOLU),
-
- [OTHER] = LAYOUT(
- KC_ESC, QK_BOOT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_DEL,
- 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_NO, KC_NO),
-};
-
-void matrix_init_user(void) {
-}
-
-void matrix_scan_user(void) {
-}
\ No newline at end of file
diff --git a/keyboards/alpha/keymaps/vderm/README.md b/keyboards/alpha/keymaps/vderm/README.md
deleted file mode 100644
index 26a8ab3e85f5..000000000000
--- a/keyboards/alpha/keymaps/vderm/README.md
+++ /dev/null
@@ -1,35 +0,0 @@
-# Alpha 28-Key Keyboard Alternate Keymap
-Alternate keymap for [Alpha 28-key keyboard](https://github.com/qmk/qmk_firmware/tree/master/keyboards/alpha).
-
-## How-to
-Assuming you've followed all the instructions from the original post, put my "keymap.c" file in "$qmk-firmware-folder$/keyboards/alpha/keymaps/vderm/" and then run your make command ("make alpha:vderm" while in $qmk-firmware-folder$ where this folder is what you've downloaded from the official github page) to compile the hex file to upload to your microcontroller. I've also uploaded my hex file.
-
-## Description
-Instead of going up and down layers like in the original Alpha keyboard, I've made the bottom row keys all have alternate functions:
-+ Like in the original Alpha28 keymap, the 2U spacebar is a shift key when held down and space when tapped
-+ Z and M are Ctrl keys when held down or Z and M when tapped
-+ X and N are Alt keys
-+ C activates the function keys layer (arrows, page up/dn, esc, tab, etc.)
-+ V activates the characters and numbers layer
-+ C and V combined activated the F-keys layer (F1, F2, F3, etc.)
-+ The enter key is an enter key in the home layer, backspace in the function keys and characters/numbers layer and a delete in the F-keys layer
-+ While in the other layers, the bottom row acts like a "regular" bottom modified row: ctrl, alt, winkey
-
-## Keymap
-![keymap](https://imgur.com/ZbDz0eL.jpg)
-
-## Build Images
-Here is my keyboard.
-+ Switches: Aliaz Silent Switches (Tactile), PCB mount, 80g from [KBDfans](https://kbdfans.cn/collections/aliaz-switches/products/pre-orderaliaz-silent-switch-tactile?variant=2519899832333)
-+ PCB board: ordered from JLCPCB, in white
-+ Keycaps: ebay, can't find link :S
-+ Bottom plate: I cut a piece of canary wood that was laying around, needs to be varnished; I also need to actually screw the pcb to the wood instead of relying on double-sided tape
-
-![vderm_alpha0](https://imgur.com/MjjoVtr.jpg)
-![vderm_alpha1](https://imgur.com/mIFu9WV.jpg)
-![vderm_alpha2](https://imgur.com/A70Iemw.jpg)
-![vderm_alpha3](https://imgur.com/eYljPWh.jpg)
-![vderm_alpha4](https://imgur.com/OhUKowj.jpg)
-
-Good luck on your build!
-//vderm
diff --git a/keyboards/alpha/keymaps/vderm/keymap.c b/keyboards/alpha/keymaps/vderm/keymap.c
deleted file mode 100644
index e3ac94807d62..000000000000
--- a/keyboards/alpha/keymaps/vderm/keymap.c
+++ /dev/null
@@ -1,34 +0,0 @@
-#include QMK_KEYBOARD_H
-
-#define HOME 0
-#define FN 1
-#define FNCHAR 2
-#define FKEYS 3
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [HOME] = LAYOUT(
- KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,
- KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_ENT,
- MT(MOD_LCTL, KC_Z), MT(MOD_LALT, KC_X), LT(1, KC_C), LT(2, KC_V), MT(MOD_LSFT, KC_SPC), MT(MOD_RGUI,KC_B), MT(MOD_RALT, KC_N), MT(MOD_RCTL, KC_M)),
-
- [FN] = LAYOUT(
- KC_ESC, KC_MUTE, KC_VOLD, KC_VOLU, KC_MPLY, KC_HOME, KC_PGDN, KC_PGUP, KC_END, KC_NO,
- KC_TAB, KC_NO, KC_NO, KC_NO, KC_NO, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_BSPC,
- KC_LCTL, KC_LALT, KC_TRNS, MO(3), MT(MOD_LSFT, KC_SPC), KC_RGUI, KC_RALT, KC_RCTL),
-
- [FNCHAR] = LAYOUT(
- KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0,
- KC_GRV,KC_NO,KC_MINS,KC_EQL,KC_BSLS,KC_LBRC,KC_RBRC,KC_SCLN,KC_QUOT,KC_BSPC,
- KC_LCTL, KC_LALT, MO(3), KC_TRNS, MT(MOD_LSFT, KC_SPC), KC_COMM, KC_DOT, KC_SLSH),
-
- [FKEYS] = LAYOUT(
- KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10,
- KC_F11,KC_F12,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_DEL,
- KC_LCTL, KC_LALT, KC_TRNS, KC_TRNS, MT(MOD_LSFT, KC_SPC), KC_RGUI, KC_RALT, KC_RCTL),
-};
-
-void matrix_init_user(void) {
-}
-
-void matrix_scan_user(void) {
-}
diff --git a/keyboards/alps64/keymaps/crd/keymap.c b/keyboards/alps64/keymaps/crd/keymap.c
deleted file mode 100644
index e68977d8674e..000000000000
--- a/keyboards/alps64/keymaps/crd/keymap.c
+++ /dev/null
@@ -1,30 +0,0 @@
-#include QMK_KEYBOARD_H
-
-enum keyboard_layers {
- _BL = 0, // Base Layer
- _FL // Function Layer
-};
-
-// Custom #defined keycodes (shorter macros for readability)
-#define KC_CTES CTL_T(KC_ESC)
-#define KC_RSUP RSFT_T(KC_UP)
-#define KC_FNDN LT(_FL, KC_DOWN)
-#define KC_RGLT RCMD_T(KC_LEFT)
-#define KC_RCRT RCTL_T(KC_RIGHT)
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [_BL] = LAYOUT_aek_103(
- KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,
- KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
- KC_CTES, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
- KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSUP,
- MO(_FL), KC_LALT, KC_LGUI, KC_SPC, KC_RGLT, KC_FNDN, KC_RCRT
- ),
- [_FL] = LAYOUT_aek_103(
- KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL,
- _______, KC_HOME, KC_UP, KC_END, _______, _______, _______, _______, KC_MUTE, _______, _______, KC_PGDN, KC_PGUP, QK_BOOT,
- _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, KC_SCRL, KC_VOLD, KC_VOLU, KC_PAUS, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______
- )
-};
diff --git a/keyboards/alps64/keymaps/dbroqua/keymap.c b/keyboards/alps64/keymaps/dbroqua/keymap.c
deleted file mode 100644
index 92fcf1a192a0..000000000000
--- a/keyboards/alps64/keymaps/dbroqua/keymap.c
+++ /dev/null
@@ -1,61 +0,0 @@
-/* Copyright 2020 Damien Broqua
- *
- * 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 .
- */
-
-#include QMK_KEYBOARD_H
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- /* 0: qwerty
- * ,-----------------------------------------------------------------------------------------.
- * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | Backspace |
- * |-----------------------------------------------------------------------------------------+
- * | Tab | Q | W | E | R | T | Y | U | I | O | P | [ | ] | \ |
- * |-----------------------------------------------------------------------------------------+
- * | Caps | A | S | D | F | G | H | J | K | L | ; | ' | Enter |
- * |-----------------------------------------------------------------------------------------+
- * | Shift | Z | X | C | V | B | N | M | , | . | / | RShift |
- * |-----------------------------------------------------------------------------------------+
- * | Ctrl |LGUI | LAlt | Space | RAlt | FN | RCtrl |
- * `-----------------------------------------------------------------------------------------'
- */
- [0] = LAYOUT_all(
- KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, _______, KC_BSPC,
- KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
- KC_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_LCTL, KC_LGUI, KC_LALT, KC_SPC, _______, KC_RALT, MO(1), KC_RCTL
- ),
-
- /* FN Layer (Based on Poker 3 FN layout)
- * ,-----------------------------------------------------------------------------------------.
- * | Esc | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | Delete |
- * |-----------------------------------------------------------------------------------------+
- * | | | | | | | Calc| PgUp| Up | PgDn|PrtSc|Scrlk|Pause| |
- * |-----------------------------------------------------------------------------------------+
- * | | Vol-| Vol+| Mute| | | Home| Left| Down|Right| Ins | Del | |
- * |-----------------------------------------------------------------------------------------+
- * | | App | | | | | End | | | | | |
- * |-----------------------------------------------------------------------------------------+
- * | | | | | | | |
- * `-----------------------------------------------------------------------------------------'
- */
- [1] = LAYOUT_all(
- KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, KC_DEL,
- _______, _______, _______, _______, _______, _______, KC_CALC, KC_PGUP, KC_UP, KC_PGDN, KC_PSCR, KC_SCRL, KC_PAUS, _______,
- _______, KC_VOLD, KC_VOLU, KC_MUTE, _______, _______, KC_HOME, KC_LEFT, KC_DOWN, KC_RIGHT, KC_INS, KC_DEL, _______,
- _______, _______, KC_APP, _______, _______, _______, _______, KC_END, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______
- )
-};
diff --git a/keyboards/alps64/keymaps/mechmerlin/keymap.c b/keyboards/alps64/keymaps/mechmerlin/keymap.c
deleted file mode 100644
index 9b6d1cd71711..000000000000
--- a/keyboards/alps64/keymaps/mechmerlin/keymap.c
+++ /dev/null
@@ -1,26 +0,0 @@
-#include QMK_KEYBOARD_H
-#include "mechmerlin.h"
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- /* 0: qwerty */
- [_BL] = LAYOUT_infinity(
- QK_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_BSPC,
- KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
- KC_CTCP, 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, TG(_AL),
- KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(_FL), KC_RALT, KC_RGUI, KC_RCTL),
-
- [_FL] = LAYOUT_infinity(
- 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_F13, KC_DEL,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MUTE, KC_VOLD, KC_VOLU, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
-
- [_AL] = LAYOUT_infinity(
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RSFT_T(KC_UP), KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_RIGHT),
-};
diff --git a/keyboards/alps64/keymaps/mechmerlin/readme.md b/keyboards/alps64/keymaps/mechmerlin/readme.md
deleted file mode 100644
index 896e7ec3cb6b..000000000000
--- a/keyboards/alps64/keymaps/mechmerlin/readme.md
+++ /dev/null
@@ -1,10 +0,0 @@
-# MechMerlin Alps64 Infinity Keymap
-
-This is the 60% infinity layout used by u/merlin36, host of the [MechMerlin](www.youtube.com/mechmerlin)
-YouTube channel.
-
-## Keymap Notes
-- `Caps Lock` can be held to act as a `Left Control`
-
-### Build
-To build the firmware file associated with this keymap, simply run `make alps64:mechmerlin`.
diff --git a/keyboards/alps64/keymaps/zyber/keymap.c b/keyboards/alps64/keymaps/zyber/keymap.c
deleted file mode 100644
index 5d7cf1a64de3..000000000000
--- a/keyboards/alps64/keymaps/zyber/keymap.c
+++ /dev/null
@@ -1,33 +0,0 @@
-// Copyright 2022 ZyBeR (@ZyberSE)
-// SPDX-License-Identifier: GPL-2.0
-
-#include "zyber.h"
-
-enum keyboard_layers {
- _BL = 0,
- _FL
-};
-
-// Custom #defined keycodes (shorter macros for readability)
-#define KC_CTES CTL_T(KC_ESC)
-#define KC_RSUP RSFT_T(KC_UP)
-#define KC_FNDN LT(_FL, KC_DOWN)
-#define KC_RGLT RCMD_T(KC_LEFT)
-#define KC_RCRT RCTL_T(KC_RIGHT)
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [_BL] = LAYOUT_aek_103(
- KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,
- KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, TD(LBRC), KC_RBRC, KC_BSLS,
- CTRL_C_UP, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, TD(SCLN), TD(QUOT), KC_ENT,
- KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSUP,
- MO(_FL), KC_LALT, KC_LGUI, KC_SPC, KC_RGLT, KC_FNDN, KC_RCRT
- ),
- [_FL] = LAYOUT_aek_103(
- KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL,
- _______, KC_HOME, KC_UP, KC_END, _______, _______, _______, _______, KC_MUTE, _______, _______, KC_PGDN, KC_PGUP, _______,
- _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, KC_SCRL, KC_VOLD, KC_VOLU, KC_PAUS, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, QK_BOOT, _______, _______, _______
- )
-};
diff --git a/keyboards/amag23/keymaps/qwert/keymap.c b/keyboards/amag23/keymaps/qwert/keymap.c
deleted file mode 100644
index 0b29c460729a..000000000000
--- a/keyboards/amag23/keymaps/qwert/keymap.c
+++ /dev/null
@@ -1,40 +0,0 @@
-/* Copyright 2021
- *
- * 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 .
- */
-#include QMK_KEYBOARD_H
-
-// Defines names for use in layer keycodes and the keymap
-enum layer_names {
- BASE,
- FN1
-};
-
-// clang-format off
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [BASE] = LAYOUT( /* Base Layer */
- KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5,
- KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T,
- MO(FN1), KC_A, KC_S, KC_D, KC_F, KC_G,
- KC_LSFT, KC_Z, KC_X, KC_C, KC_SPC
- ),
- [FN1] = LAYOUT( /* Function Layer */
- _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5,
- _______, RGB_TOG, RGB_VAI, RGB_MOD, RGB_HUI, _______,
- _______, _______, RGB_VAD, RGB_RMOD,RGB_HUD, _______,
- _______, _______, _______, _______, _______
- ),
-};
-// clang-format on
-
diff --git a/keyboards/amag23/keymaps/qwert/readme.md b/keyboards/amag23/keymaps/qwert/readme.md
deleted file mode 100644
index c3a7df467d81..000000000000
--- a/keyboards/amag23/keymaps/qwert/readme.md
+++ /dev/null
@@ -1,14 +0,0 @@
-# QWERT Keymap for Koolertron AMAG23
-
-## Additional Notes
-QWERT keymap, based on the left hand of an ortholinear layout.
-
-## Keymap
-
-![AMAG23 QWERT Layout](https://i.imgur.com/fiDUo77.png)
-
-## Build
-
-To build the factory keymap, simply run:
-
- make amag23:qwert
diff --git a/keyboards/amjkeyboard/amj40/keymaps/fabian/keymap.c b/keyboards/amjkeyboard/amj40/keymaps/fabian/keymap.c
deleted file mode 100755
index f810ffc55342..000000000000
--- a/keyboards/amjkeyboard/amj40/keymaps/fabian/keymap.c
+++ /dev/null
@@ -1,224 +0,0 @@
-/* Copyright 2015-2017 Jack Humbert
- *
- * 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 .
- */
-#include QMK_KEYBOARD_H
-
-// Set the custom keymap
-#undef LAYOUT
-#define LAYOUT( \
- k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, \
- k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, \
- k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, \
- k30, k31, k32, k33, k34, k35, k39, k3a, k3b \
-) { \
- {k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b}, \
- {k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b}, \
- {k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b}, \
- {k30, k31, k32, k33, k34, k35, XXX, XXX, XXX, k39, k3a, k3b} \
-}
-
-extern keymap_config_t keymap_config;
-
-enum custom_layers {
- _QWERTY,
- _COLEMAK,
- _DVORAK,
- _LOWER,
- _RAISE,
- _ADJUST
-};
-
-enum custom_keycodes {
- QWERTY = SAFE_RANGE,
- COLEMAK,
- DVORAK,
- LOWER,
- RAISE,
- BACKLIT,
- EXT_PLV
-};
-
-#define CTL_ESC CTL_T(KC_ESC) // Tap for Escape, hold for Control
-#define HPR_TAB ALL_T(KC_TAB) // Tap for Tab, hold for Hyper (Super+Ctrl+Alt+Shift)
-#define MEH_GRV MEH_T(KC_GRV) // Tap for Backtick, hold for Meh (Ctrl+Alt+Shift)
-#define SFT_BSP SFT_T(KC_BSPC) // Tap for Backspace, hold for Shift
-#define SFT_ENT SFT_T(KC_ENT) // Tap for Enter, hold for Shift
-#define SFT_SPC SFT_T(KC_SPC) // Tap for Space, hold for Shift
-#define UMLAUT RALT(KC_U) // Combine Alt and U
-
-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 |
- * |------+------+------+------+------+------+------+------+------+------+------+------|
- * | Ctrl | Meh | Alt | GUI | Lower and Space | Raise | GUI |AltGr | Ctrl |
- * `-----------------------------------------------------------------------------------'
- */
-[_QWERTY] = LAYOUT(
- HPR_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
- CTL_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
- SFT_BSP, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SFT_ENT,
- KC_LCTL, MEH_GRV, KC_LALT, KC_LGUI, LT(_LOWER, KC_SPC), RAISE, KC_RGUI, KC_RALT, KC_RCTL
-),
-
-/* 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 |
- * |------+------+------+------+------+------+------+------+------+------+------+------|
- * | Ctrl | Meh | Alt | GUI | Lower and Space | Raise | GUI |AltGr | Ctrl |
- * `-----------------------------------------------------------------------------------'
- */
-[_COLEMAK] = LAYOUT(
- HPR_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC,
- CTL_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT,
- SFT_BSP, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, SFT_ENT,
- KC_LCTL, MEH_GRV, KC_LALT, KC_LGUI, LT(_LOWER, KC_SPC), RAISE, KC_RGUI, KC_RALT, KC_RCTL
-),
-
-/* 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 |
- * |------+------+------+------+------+------+------+------+------+------+------+------|
- * | Ctrl | Meh | Alt | GUI | Lower and Space | Raise | GUI |AltGr | Ctrl |
- * `-----------------------------------------------------------------------------------'
- */
-[_DVORAK] = LAYOUT(
- HPR_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC,
- CTL_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_SLSH,
- SFT_BSP, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, SFT_ENT,
- KC_LCTL, MEH_GRV, KC_LALT, KC_LGUI, LT(_LOWER, KC_SPC), RAISE, KC_RGUI, KC_RALT, KC_RCTL
-),
-
-/* Lower
- * ,-----------------------------------------------------------------------------------.
- * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Bksp |
- * |------+------+------+------+------+-------------+------+------+------+------+------|
- * | Del | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | |
- * |------+------+------+------+------+------|------+------+------+------+------+------|
- * | | F7 | F8 | F9 | F10 | F11 | F12 | MS L | MS D |MS U | MS R |MS Btn|
- * |------+------+------+------+------+------+------+------+------+------+------+------|
- * | | | | | | Next | Vol- | Vol+ | Play |
- * `-----------------------------------------------------------------------------------'
- */
-[_LOWER] = LAYOUT(
- 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_MS_L, KC_MS_D, KC_MS_U, KC_MS_R, KC_BTN1,
- _______, _______, _______, _______, _______, _______, 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 | Left | Down | Up | Rght |MS_BN2|
- * |------+------+------+------+------+------+------+------+------+------+------+------|
- * | | | | | | Next | Vol- | Vol+ | Play |
- * `-----------------------------------------------------------------------------------'
- */
-[_RAISE] = LAYOUT(
- 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_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_BTN2,
- _______, _______, _______, _______, _______, _______, KC_VOLD, KC_VOLU, KC_MPLY
-),
-
-/* Adjust (Lower + Raise)
- * ,-----------------------------------------------------------------------------------.
- * | | Reset| | | | | | | | | Reset| Del |
- * |------+------+------+------+------+-------------+------+------+------+------+------|
- * | | | |Aud on|Audoff|AGnorm|AGswap|Qwerty|Colemk|Dvorak| | |
- * |------+------+------+------+------+------|------+------+------+------+------+------|
- * | |Voice-|Voice+|Mus on|Musoff|MIDIon|MIDIof| | | | | |
- * |------+------+------+------+------+------+------+------+------+------+------+------|
- * | | | | | | | | | |
- * `-----------------------------------------------------------------------------------'
- */
-[_ADJUST] = LAYOUT(
- _______, QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, QK_BOOT, KC_DEL,
- _______, _______, MU_NEXT, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, _______, _______,
- _______, AU_PREV, AU_NEXT, MU_ON, MU_OFF, MI_ON, MI_OFF, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______
-)
-};
-
-bool process_record_user(uint16_t keycode, keyrecord_t *record) {
- switch (keycode) {
- case QWERTY:
- if (record->event.pressed) {
- set_single_persistent_default_layer(_QWERTY);
- }
- return false;
- break;
- case COLEMAK:
- if (record->event.pressed) {
- set_single_persistent_default_layer(_COLEMAK);
- }
- return false;
- break;
- case DVORAK:
- if (record->event.pressed) {
- set_single_persistent_default_layer(_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;
- }
- return true;
-}
diff --git a/keyboards/amjkeyboard/amj40/keymaps/fabian/rules.mk b/keyboards/amjkeyboard/amj40/keymaps/fabian/rules.mk
deleted file mode 100644
index 59a2cb09a859..000000000000
--- a/keyboards/amjkeyboard/amj40/keymaps/fabian/rules.mk
+++ /dev/null
@@ -1,19 +0,0 @@
-# Build Options
-# change to "no" to disable the options, or define them in the Makefile in
-# the appropriate keymap folder that will get included automatically
-#
-BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite
-MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
-EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
-CONSOLE_ENABLE = no # Console for debug(+400)
-COMMAND_ENABLE = yes # Commands for debug and configuration
-NKRO_ENABLE = 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
-MIDI_ENABLE = no # MIDI controls
-AUDIO_ENABLE = no # Audio output on port C6
-UNICODE_ENABLE = no # Unicode
-BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
-RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
-
-# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
-SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
diff --git a/keyboards/amjkeyboard/amj40/keymaps/jetpacktuxedo/config.h b/keyboards/amjkeyboard/amj40/keymaps/jetpacktuxedo/config.h
deleted file mode 100644
index 73118332013c..000000000000
--- a/keyboards/amjkeyboard/amj40/keymaps/jetpacktuxedo/config.h
+++ /dev/null
@@ -1 +0,0 @@
-#define PERMISSIVE_HOLD
diff --git a/keyboards/amjkeyboard/amj40/keymaps/jetpacktuxedo/keymap.c b/keyboards/amjkeyboard/amj40/keymaps/jetpacktuxedo/keymap.c
deleted file mode 100755
index 87217f43610b..000000000000
--- a/keyboards/amjkeyboard/amj40/keymaps/jetpacktuxedo/keymap.c
+++ /dev/null
@@ -1,43 +0,0 @@
-#include QMK_KEYBOARD_H
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- // Default Layer
- [0] = LAYOUT(
- QK_GESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
- LT(2, KC_TAB), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, LT(2, KC_ENT),
- KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, MT(MOD_RSFT, KC_SLSH),
- KC_LCTL, KC_LGUI, KC_LALT, LT(1, KC_SPC), LT(1, KC_SPC), KC_RALT, MO(3), KC_RCTL
- ),
-
- // Number Layer
- [1] = LAYOUT(
- KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL,
- KC_TRNS, KC_MINS, KC_EQL, KC_SCLN, KC_QUOT, KC_TRNS, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LBRC, KC_RBRC, MT(MOD_RSFT, KC_BSLS),
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
- ),
-
- // Shifted Layer
- [2] = LAYOUT(
- KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL,
- KC_TRNS, KC_UNDS, KC_PLUS, KC_COLN, KC_DQUO, KC_TRNS, KC_HOME, KC_PGDN, KC_PGUP, KC_END, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LCBR, KC_RCBR, KC_PIPE,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
- ),
-
- // Fkey Layer
- [3] = LAYOUT(
- KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, QK_BOOT,
- KC_TRNS, KC_F11, KC_F12, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, TG(4), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
- ),
-
- // Gaming Layer
- [4] = LAYOUT(
- KC_ESC, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_WH_U, KC_BTN1, KC_MS_U, KC_BTN2, KC_TRNS, KC_TRNS,
- KC_TAB, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_WH_D, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_SPC, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
- ),
-};
diff --git a/keyboards/amjkeyboard/amj40/keymaps/jetpacktuxedo/readme.md b/keyboards/amjkeyboard/amj40/keymaps/jetpacktuxedo/readme.md
deleted file mode 100755
index 64ae16c7eb8b..000000000000
--- a/keyboards/amjkeyboard/amj40/keymaps/jetpacktuxedo/readme.md
+++ /dev/null
@@ -1,55 +0,0 @@
-Jetpacktuxedo's AMJ40 layout
-=====================
-
-This is based heavily on my minivan layout, with most difference stemming from the different widths between the minivan and the AMJ40. ![Image of my specific layout](https://i.imgur.com/B9XraJY.jpg)
-
-## Base Layer (0)
-
-The base layer is pretty simple, straight qwerty layout where available. Both spacebars go to layer 1 when held. `tab` is `tab` when pressed and `fn2` when held, `enter` is the same. `GESC` is `esc` when used alone, but `~` when shifted. `/` is `/` when tapped but `rshift` when held.
-```
-|GESC| Q | W | E | R | T | Y | U | I | O | P |BSPC|
-| TAB | A | S | D | F | G | H | J | K | L | ENTER |
-|LSHIFT | Z | X | C | V | B | N | M | , | . | / |
-|LCTRL|LWIN|LALT | SPACE | SPACE |RALT |FN 3|RCTRL |
-```
-
-## Number Layer (1)
-
-Numbers are set up just like on my minivan layout, but symbols are a bit different because the AMJ40 is one key narrower than the minivan and also lacks dedicated arrows. Decided to go with `hjkl` arrows, which takes some getting used to. `;` is on a layer now because of the narrowness I mentioned before, and it (along with `-`, `=`, and `'`) moves to the right hand to leave room for the `hjkl` arrows. `delete` on `backspace`, `[` and `]` on `<` and `>`, and `\` on `/` are all stolen straight from my minivan layout.
-```
-| ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 |DEL |
-| | - | = | ; | ' | | ← | ↓ | ↑ | → | |
-| | | | | | | | | [ | ] | \ |
-| | | | | | | | |
-```
-
-## Shifted Layer (2)
-
-I don't want to be using two key combos constantly, so I also added this symbol layer that is basically shift+numeric layer. Also has nav keys on top of where arrows sit on the previous layer
-```
-| ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) |DEL |
-| | _ | + | : | " | |HOME|PGDN|PGUP|END | |
-| | | | | | | | | { | } | | |
-| | | | | | | | |
-```
-
-## Fkey Layer (3)
-
-Honestly, I use this more for jumping to my gaming layer and for reset than I use it for Fkeys. Lol. Hitting the left windows key while in this layer locks the gaming layer listed below
-```
-| | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 |F10 |RSET|
-| |F11 |F12 | | | | | | | | |
-| | | | | | | | | | | |
-| |FN 4| | | | | | |
-```
-
-## "Gaming" Layer (4)
-
-Based on the "gaming" layer on my minivan that I mostly just use for mouse keys. To toggle this back off you hit the right windows key (to go to layer 3) and then the left windows key again.
-```
-|ESC | | | | | |MWUP|MLCK|M UP|MRCK| | |
-| TAB | | | | | |MWDN|M L |M DN|M R | |
-| | | | | | | | | | | |
-| | | | SPACE | | | | |
-```
-
diff --git a/keyboards/amjkeyboard/amj40/keymaps/jetpacktuxedo/rules.mk b/keyboards/amjkeyboard/amj40/keymaps/jetpacktuxedo/rules.mk
deleted file mode 100644
index 780d48a438a8..000000000000
--- a/keyboards/amjkeyboard/amj40/keymaps/jetpacktuxedo/rules.mk
+++ /dev/null
@@ -1,19 +0,0 @@
-# Build Options
-# change to "no" to disable the options, or define them in the Makefile in
-# the appropriate keymap folder that will get included automatically
-#
-BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite
-MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
-EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
-CONSOLE_ENABLE = no # Console for debug(+400)
-COMMAND_ENABLE = no # Commands for debug and configuration
-NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
-BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
-MIDI_ENABLE = no # MIDI controls
-AUDIO_ENABLE = no # Audio output on port C6
-UNICODE_ENABLE = no # Unicode
-BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
-RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
-
-# Do not enable SLEEP_LED_ENABLE. It uses the same timer as BACKLIGHT_ENABLE
-SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
diff --git a/keyboards/amjkeyboard/amj40/keymaps/myee/config.h b/keyboards/amjkeyboard/amj40/keymaps/myee/config.h
deleted file mode 100644
index 8e6c4dfa4305..000000000000
--- a/keyboards/amjkeyboard/amj40/keymaps/myee/config.h
+++ /dev/null
@@ -1,10 +0,0 @@
-#ifndef CONFIG_USER_H
-#define CONFIG_USER_H
-#include "../../config.h"
-
-#define TAPPING_TERM 25
-#define RETRO_TAPPING
-#define PERMISSIVE_HOLD
-
-
-#endif
\ No newline at end of file
diff --git a/keyboards/amjkeyboard/amj40/keymaps/myee/keymap.c b/keyboards/amjkeyboard/amj40/keymaps/myee/keymap.c
deleted file mode 100644
index a39e2af96907..000000000000
--- a/keyboards/amjkeyboard/amj40/keymaps/myee/keymap.c
+++ /dev/null
@@ -1,93 +0,0 @@
-
-
-
-#include QMK_KEYBOARD_H
-
-// Keymap myee
-// 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 _LOWER 1
-#define _RAISE 2
-#define _ADJUST 3
-
-#define LOW_SPC LT(_LOWER, KC_SPC)
-#define RSE_SPC LT(_RAISE, KC_SPC)
-#define ADJ_TAB LT(ADJUST, KC_TAB)
-
-enum custom_keycodes {
- QWERTY = SAFE_RANGE,
- LOWER,
- RAISE,
- ADJUST,
-};
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-
- [_QWERTY] = LAYOUT(
- KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
- ADJ_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, 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_LCTL, KC_LGUI,KC_LALT, LOW_SPC, RSE_SPC, KC_RGUI,KC_RALT, KC_RCTL
- ),
-
- [_LOWER] = LAYOUT(
- KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_UP, KC_MINS, KC_EQL, KC_DEL,
- _______, _______, KC_ASTR, KC_LBRC, KC_RBRC, KC_QUOT, KC_DQUO, KC_LEFT, KC_DOWN, KC_RGHT, KC_BSLS,
- _______, _______, _______, KC_LPRN, KC_RPRN, KC_HOME, KC_PGUP, KC_PGDN, KC_END, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______
- ),
-
- [_RAISE] = LAYOUT(
- KC_GRV, KC_LPRN, KC_RPRN, KC_DQUO, KC_QUOT, KC_SCLN, KC_COLON,KC_UNDS, KC_PLUS, _______, _______, KC_BSPC,
- _______, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0,
- _______, _______, _______, KC_LCBR, KC_RCBR, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, BL_UP, BL_DOWN
- ),
-
- [_ADJUST] = LAYOUT(
- _______, QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- KC_SYSTEM_SLEEP, _______, _______, _______, _______, _______, _______, _______
- ),
-
-};
-
-bool process_record_user(uint16_t keycode, keyrecord_t *record) {
-
- switch (keycode) {
-
- 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;
-}
diff --git a/keyboards/amjkeyboard/amj40/keymaps/myee/readme.md b/keyboards/amjkeyboard/amj40/keymaps/myee/readme.md
deleted file mode 100644
index 2659292ae54f..000000000000
--- a/keyboards/amjkeyboard/amj40/keymaps/myee/readme.md
+++ /dev/null
@@ -1,11 +0,0 @@
-AMJ40 Default Layout
-=====================
-
-##Quantum MK Firmware
-For the full Quantum feature list, see the parent readme.md.
-
-# Features
-* Based on a combination of the original AMJ40 keymap from the TMK firmware as well as the Planck Ortholinear keyboard's "Lower," "Raise," and "Adjust" layers.
-* View the keymap.c file to understand they layout of the keymap.
-* Has keys to toggle both the switch LEDs and underglow LEDs.
-
diff --git a/keyboards/amjkeyboard/amj40/keymaps/myee/rules.mk b/keyboards/amjkeyboard/amj40/keymaps/myee/rules.mk
deleted file mode 100644
index b8cc8b42c7bb..000000000000
--- a/keyboards/amjkeyboard/amj40/keymaps/myee/rules.mk
+++ /dev/null
@@ -1,19 +0,0 @@
-# Build Options
-# change to "no" to disable the options, or define them in the Makefile in
-# the appropriate keymap folder that will get included automatically
-#
-BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite
-MOUSEKEY_ENABLE = no # Mouse keys(+4700)
-EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
-CONSOLE_ENABLE = no # Console for debug(+400)
-COMMAND_ENABLE = yes # Commands for debug and configuration
-NKRO_ENABLE = 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
-MIDI_ENABLE = no # MIDI controls
-AUDIO_ENABLE = no # Audio output on port C6
-UNICODE_ENABLE = no # Unicode
-BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
-RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
-
-# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
-SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
diff --git a/keyboards/amjkeyboard/amj40/keymaps/myee/updatemerge.sh b/keyboards/amjkeyboard/amj40/keymaps/myee/updatemerge.sh
deleted file mode 100644
index da5457e19531..000000000000
--- a/keyboards/amjkeyboard/amj40/keymaps/myee/updatemerge.sh
+++ /dev/null
@@ -1,4 +0,0 @@
-#!/bin/bash
-git checkout amj60 # gets you on branch amj60
-git fetch origin # gets you up to date with origin
-git merge origin/master
diff --git a/keyboards/amjkeyboard/amjpad/keymaps/max/keymap.c b/keyboards/amjkeyboard/amjpad/keymaps/max/keymap.c
deleted file mode 100644
index 8b6fd4da5163..000000000000
--- a/keyboards/amjkeyboard/amjpad/keymaps/max/keymap.c
+++ /dev/null
@@ -1,63 +0,0 @@
-#include QMK_KEYBOARD_H
-
-#ifdef RGBLIGHT_ENABLE
-#include "rgblight.h"
-#endif
-
-// 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 _BL 0
-#define _FL 1
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- /* Keymap _BL: (Base Layer) Default Layer
- * ,-------------------.
- * |Esc |Setp| - | = |
- * |----|----|----|----|
- * | F1 | F2 | F3 | F4 |
- * |----|----|----|----|
- * | 7 | 8 | 9 | - |
- * |----|----|----|----|
- * | 4 | 5 | 6 | LF |
- * |----|----|----|----|
- * | 1 | 2 | 3 | \ |
- * |----|----|----|----|
- * |Left|Down| Up |Rght|
- * `-------------------'
- */
-
- [_BL] = LAYOUT_ortho_6x4(
- KC_ESC, KC_TAB, KC_MINS,KC_EQL,
- KC_F1, KC_F2, KC_F3, KC_F4,
- KC_P7, KC_P8, KC_P9, KC_PMNS,
- KC_P4, KC_P5, KC_P6, KC_PENT,
- KC_P1, KC_P2, KC_P3, KC_BSLS,
- KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT
- ),
-
- /* Keymap _FL: Function Layer
- * ,-------------------.
- * |Esc |TAB |BS | = |
- * |----|----|----|----|
- * | NL | / | * | - |
- * |----|----|----|----|
- * | 7 | 8 | 9 | |
- * |----|----|----|RST |
- * | 4 | 5 | 6 | |
- * |----|----|----|----|
- * | 1 | 2 | 3 | |
- * |----|----|----| En |
- * | 0 |./FN| |
- * `-------------------'
- */
- [_FL] = LAYOUT_ortho_6x4(
- KC_ESC, KC_TAB, KC_BSPC, KC_PEQL,
- KC_NUM, KC_PSLS, KC_PAST, KC_PMNS,
- KC_P7, KC_P8, KC_P9, QK_BOOT,
- KC_P4, KC_P5, KC_P6, KC_PENT,
- KC_P1, KC_P2, KC_P3, KC_PENT,
- KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT
- ),
-};
diff --git a/keyboards/an_achronism/tetromino/keymaps/indicators/config.h b/keyboards/an_achronism/tetromino/keymaps/indicators/config.h
deleted file mode 100644
index f117063fb1a5..000000000000
--- a/keyboards/an_achronism/tetromino/keymaps/indicators/config.h
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
-Copyright 2022 an_achronism (@an-achronism)
-
-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 .
-*/
-
-#pragma once
-#define RGB_TRIGGER_ON_KEYDOWN
-
-/* disable debug print */
-//#define NO_DEBUG
-
-/* disable print */
-//#define NO_PRINT
-
-/* disable action features */
-//#define NO_ACTION_LAYER
-//#define NO_ACTION_TAPPING
-//#define NO_ACTION_ONESHOT
diff --git a/keyboards/an_achronism/tetromino/keymaps/indicators/keymap.c b/keyboards/an_achronism/tetromino/keymaps/indicators/keymap.c
deleted file mode 100644
index 17d838608953..000000000000
--- a/keyboards/an_achronism/tetromino/keymaps/indicators/keymap.c
+++ /dev/null
@@ -1,125 +0,0 @@
-/*
-Copyright 2022 an_achronism (@an-achronism)
-
-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 .
-*/
-
-#include QMK_KEYBOARD_H
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- /*
- * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
- * │ ` │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │Del│
- * ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
- * │Tab| Q │ W │ E | R │ T │ Y │ U │ I │ O │ P │ [ │ ] │Bsp│
- * ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
- * │Ctl│ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │UK#│Rtn|
- * ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
- * │Sft│ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │Sft│ ↑ │App|
- * ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
- * │Esc│Ctl│Alt│GUI│L_1│Spc│L_2|GUI│Alt│Ctl|UK\│ ← │ ↓ │ → │
- * └───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┘
- */
- [0] = LAYOUT_ortho_5x14(
- 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_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_BSPC,
- KC_LCTL, 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_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, RSFT_T(KC_APP),
- KC_ESC, KC_LCTL, KC_LALT, KC_LGUI, MO(1), KC_SPC, MO(2), KC_RGUI, KC_RALT, KC_RCTL, KC_NUBS, KC_LEFT, KC_DOWN, KC_RGHT
- ),
- [1] = LAYOUT_ortho_5x14(
- KC_BRID, KC_BRIU, _______, _______, _______, _______, KC_NUM, KC_PSLS, KC_PAST, KC_PEQL, _______, _______, _______, KC_PWR,
- _______, _______, KC_UP, _______, _______, _______, KC_P7, KC_P8, KC_P9, KC_PMNS, KC_PAUS, KC_ESC, _______, KC_SLEP,
- _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, KC_P4, KC_P5, KC_P6, KC_PPLS, _______, _______, _______, KC_CALC,
- KC_CAPS, _______, _______, _______, _______, KC_PAUS, KC_P1, KC_P2, KC_P3, KC_PENT, _______, KC_CAPS, _______, _______,
- _______, _______, _______, _______, _______, _______, KC_P0, KC_PDOT, _______, _______, _______, _______, _______, _______
- ),
- [2] = LAYOUT_ortho_5x14(
- _______, _______, _______, _______, _______, _______, KC_SCRL, _______, _______, _______, KC_MUTE, KC_VOLD, KC_VOLU, KC_MSTP,
- _______, KC_F4, KC_F3, KC_F2, KC_F1, _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END, C(KC_BRK), KC_ESC, _______, _______,
- _______, KC_F8, KC_F7, KC_F6, KC_F5, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, _______, KC_MPRV, KC_MNXT, KC_MPLY,
- KC_CAPS, KC_F12, KC_F11, KC_F10, KC_F9, C(KC_BRK),_______, _______, _______, _______, _______, KC_CAPS, _______, KC_PSCR,
- _______, _______, _______, _______, MO(3), _______, _______, _______, _______, _______, _______, _______, _______, _______
- ),
- [3] = LAYOUT_ortho_5x14(
- QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
- )
-};
-
-// Initialise RBG matrix with all LEDs set to solid colour and zero HSV (i.e. off):
-void keyboard_post_init_user(void) {
- rgb_matrix_mode_noeeprom(RGB_MATRIX_SOLID_COLOR);
- rgb_matrix_sethsv_noeeprom(HSV_OFF);
-};
-
-// Custom RGB indicator behaviour:
-bool rgb_matrix_indicators_advanced_user(uint8_t led_min, uint8_t led_max) {
- uint8_t led_processed_count = 0;
- for (uint8_t row = 0; row < MATRIX_ROWS; ++row) {
- for (uint8_t col = 0; col < MATRIX_COLS; ++col) {
- if (led_processed_count == RGB_MATRIX_LED_PROCESS_LIMIT){
- return;
- }
- uint8_t led_index = g_led_config.matrix_co[row][col];
- uint16_t keycode = keymap_key_to_keycode(0, (keypos_t){col,row});
- if (led_index >= led_min && led_index <= led_max && led_index != NO_LED) {
- // Light base layer arrow keys orange if Scroll Lock is on, otherwise light them magenta:
- led_processed_count++;
- if (keycode >= KC_RIGHT && keycode <= KC_UP) {
- if (host_keyboard_led_state().scroll_lock) {
- rgb_matrix_set_color(led_index, RGB_ORANGE);
- } else {
- rgb_matrix_set_color(led_index, RGB_MAGENTA);
- }
- }
- // Light alpha keys (A-Z only) red if Caps Lock is on:
- if (host_keyboard_led_state().caps_lock && keycode >= KC_A && keycode <= KC_Z) {
- rgb_matrix_set_color(led_index, RGB_RED);
- }
- // Whenever a layer above base is active, recolour only the keys that are different on that layer:
- if (get_highest_layer(layer_state) > 0) {
- uint8_t layer = get_highest_layer(layer_state);
- uint16_t momentary_keycode = keymap_key_to_keycode(layer, (keypos_t){col,row});
- if (momentary_keycode > KC_TRNS) {
- switch(layer) {
- case 2:
- // The uppermost layer is blue:
- rgb_matrix_set_color(led_index, RGB_BLUE);
- break;
- case 1:
- // The middle layer is green, except that the numpad section turns
- // orange when Num Lock is on:
- if (host_keyboard_led_state().num_lock &&
- (momentary_keycode == KC_KP_EQUAL ||
- (momentary_keycode >= KC_NUM_LOCK && momentary_keycode <= KC_KP_DOT)
- )) {
- rgb_matrix_set_color(led_index, RGB_ORANGE);
- } else {
- rgb_matrix_set_color(led_index, RGB_GREEN);
- }
- break;
- default:
- break;
- }
- }
- }
- }
- }
- }
- return false;
-}
diff --git a/keyboards/anavi/arrows/arrows.c b/keyboards/anavi/arrows/arrows.c
new file mode 100644
index 000000000000..6ecc8745f872
--- /dev/null
+++ b/keyboards/anavi/arrows/arrows.c
@@ -0,0 +1,38 @@
+// Copyright 2023 Leon Anavi
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include "quantum.h"
+
+#ifdef OLED_ENABLE
+
+bool oled_task_kb(void) {
+
+ if (!oled_task_user()) {
+ return false;
+ }
+
+ // Host Keyboard Layer Status
+ oled_write_ln_P(PSTR("ANAVI Arrows"), false);
+ oled_write_ln_P(PSTR("Keymap: Default"), false);
+
+ // Host Keyboard LED Status
+ led_t led_state = host_keyboard_led_state();
+ oled_write_P(PSTR("Num Lock: "), false);
+ oled_write_ln_P(led_state.num_lock ? PSTR("On") : PSTR("Off"), false);
+ oled_write_P(PSTR("Caps Lock: "), false);
+ oled_write_ln_P(led_state.caps_lock ? PSTR("On") : PSTR("Off"), false);
+ oled_write_P(PSTR("Scroll Lock: "), false);
+ oled_write_ln_P(led_state.scroll_lock ? PSTR("On") : PSTR("Off"), false);
+# ifdef RGBLIGHT_ENABLE
+ oled_write_P(PSTR("RGB Mode: "), false);
+ oled_write_ln(get_u8_str(rgblight_get_mode(), ' '), false);
+ oled_write_P(PSTR("h: "), false);
+ oled_write(get_u8_str(rgblight_get_hue(), ' '), false);
+ oled_write_P(PSTR("s: "), false);
+ oled_write(get_u8_str(rgblight_get_sat(), ' '), false);
+ oled_write_P(PSTR("v: "), false);
+ oled_write_ln(get_u8_str(rgblight_get_val(), ' '), false);
+# endif
+ return false;
+}
+#endif
diff --git a/keyboards/anavi/arrows/config.h b/keyboards/anavi/arrows/config.h
new file mode 100644
index 000000000000..02e7781e5707
--- /dev/null
+++ b/keyboards/anavi/arrows/config.h
@@ -0,0 +1,25 @@
+// Copyright 2023 Leon Anavi
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#define RGBLIGHT_DEFAULT_MODE RGBLIGHT_MODE_RAINBOW_MOOD
+
+/* Double tap reset button to enter bootloader */
+#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET
+#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET_LED GP17
+#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET_TIMEOUT 500U
+
+#ifdef BACKLIGHT_ENABLE
+# define BACKLIGHT_PWM_DRIVER PWMD5
+# define BACKLIGHT_PWM_CHANNEL RP2040_PWM_CHANNEL_A
+#endif
+
+#define I2C1_SDA_PIN GP6
+#define I2C1_SCL_PIN GP7
+
+#ifdef OLED_ENABLE
+# define OLED_DISPLAY_128X64
+# define OLED_TIMEOUT 60000
+# define OLED_BRIGHTNESS 128
+#endif
diff --git a/keyboards/anavi/arrows/halconf.h b/keyboards/anavi/arrows/halconf.h
new file mode 100644
index 000000000000..8a17a5c1676b
--- /dev/null
+++ b/keyboards/anavi/arrows/halconf.h
@@ -0,0 +1,9 @@
+// Copyright 2023 Leon Anavi
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#define HAL_USE_I2C TRUE
+#define HAL_USE_PWM TRUE
+
+#include_next
diff --git a/keyboards/anavi/arrows/info.json b/keyboards/anavi/arrows/info.json
new file mode 100644
index 000000000000..bdda15695acf
--- /dev/null
+++ b/keyboards/anavi/arrows/info.json
@@ -0,0 +1,68 @@
+{
+ "keyboard_name": "arrows",
+ "manufacturer": "ANAVI",
+ "url": "https://github.com/AnaviTechnology/anavi-arrows",
+ "maintainer": "leon-anavi",
+ "processor": "RP2040",
+ "bootloader": "rp2040",
+ "matrix_pins": {
+ "direct": [
+ ["GP4", "GP0", "GP27", "GP28", "GP29"]
+ ]
+ },
+ "features": {
+ "bootmagic": true,
+ "command": false,
+ "console": false,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true,
+ "rgblight": true,
+ "backlight": true,
+ "oled": true,
+ "encoder": true
+ },
+ "rgblight": {
+ "led_count": 4,
+ "animations": {
+ "alternating": true,
+ "breathing": true,
+ "christmas": true,
+ "knight": true,
+ "rainbow_mood": true,
+ "rainbow_swirl": true,
+ "rgb_test": true,
+ "snake": true,
+ "static_gradient": true,
+ "twinkle": true
+ }
+ },
+ "ws2812": {
+ "pin": "GP3",
+ "driver": "vendor"
+ },
+ "backlight": {
+ "pin": "GP26"
+ },
+ "encoder": {
+ "rotary": [
+ {"pin_a": "GP1", "pin_b": "GP2", "resolution": 2}
+ ]
+ },
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"matrix": [0, 0], "x": 2, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 1},
+ {"matrix": [0, 2], "x": 0, "y": 2},
+ {"matrix": [0, 3], "x": 1, "y": 2},
+ {"matrix": [0, 4], "x": 2, "y": 2}
+ ]
+ }
+ },
+ "usb": {
+ "device_version": "1.0.0",
+ "pid": "0x9A25",
+ "vid": "0xFEED"
+ }
+}
diff --git a/keyboards/anavi/arrows/keymaps/default/keymap.c b/keyboards/anavi/arrows/keymaps/default/keymap.c
new file mode 100644
index 000000000000..59ff1d5cf9c1
--- /dev/null
+++ b/keyboards/anavi/arrows/keymaps/default/keymap.c
@@ -0,0 +1,20 @@
+// Copyright 2023 Leon Anavi
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+enum layer_names {
+ _BASE
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_BASE] = LAYOUT(
+ KC_MUTE,
+ KC_UP,
+ KC_RIGHT, KC_DOWN, KC_LEFT)
+};
+
+const uint16_t PROGMEM backlight_combo[] = {KC_UP, KC_DOWN, COMBO_END};
+combo_t key_combos[] = {
+ COMBO(backlight_combo, BL_STEP)
+};
diff --git a/keyboards/anavi/arrows/keymaps/default/rules.mk b/keyboards/anavi/arrows/keymaps/default/rules.mk
new file mode 100644
index 000000000000..2553d273cad6
--- /dev/null
+++ b/keyboards/anavi/arrows/keymaps/default/rules.mk
@@ -0,0 +1 @@
+COMBO_ENABLE = yes # Enables combo keys
diff --git a/keyboards/anavi/arrows/mcuconf.h b/keyboards/anavi/arrows/mcuconf.h
new file mode 100644
index 000000000000..23519c8977cb
--- /dev/null
+++ b/keyboards/anavi/arrows/mcuconf.h
@@ -0,0 +1,15 @@
+// Copyright 2023 Leon Anavi (@leon-anavi)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#include_next
+
+#undef RP_I2C_USE_I2C0
+#define RP_I2C_USE_I2C0 FALSE
+
+#undef RP_I2C_USE_I2C1
+#define RP_I2C_USE_I2C1 TRUE
+
+#undef RP_PWM_USE_PWM5
+#define RP_PWM_USE_PWM5 TRUE
diff --git a/keyboards/anavi/arrows/readme.md b/keyboards/anavi/arrows/readme.md
new file mode 100644
index 000000000000..a4535627966c
--- /dev/null
+++ b/keyboards/anavi/arrows/readme.md
@@ -0,0 +1,21 @@
+# ANAVI Arrows
+
+ANAVI Arrows is a compact inverted T mechanical keyboard with hot-swappable Cherry MX compatible mechanical switches, translucent keycaps, rotary encoder, USB-C, RP2040 microcontroller, backlighting and under lighting.
+
+* Keyboard Maintainer: [Leon Anavi](https://github.com/leon-anavi)
+* Hardware Supported: ANAVI Arrows
+* Hardware Availability: [Crowd Supply](https://www.crowdsupply.com/anavi-technology/anavi-macro-pad-12-and-arrows), [GitHub repository](https://github.com/AnaviTechnology/anavi-arrows)
+
+Make example for this keyboard (after setting up your build environment):
+
+ qmk compile -kb anavi/arrows -km default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+## Bootloader
+
+Enter the bootloader in 3 ways:
+
+* **Bootmagic reset**: Hold down the top left key on the left half, or top right key on the right half, and then plug in the USB cable on that keyboard half.
+* **Physical reset button**: Double tap the reset button on the XIAO RP2040.
+* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available.
diff --git a/keyboards/anavi/arrows/rules.mk b/keyboards/anavi/arrows/rules.mk
new file mode 100644
index 000000000000..6e7633bfe015
--- /dev/null
+++ b/keyboards/anavi/arrows/rules.mk
@@ -0,0 +1 @@
+# This file intentionally left blank
diff --git a/keyboards/anavi/knob1/rules.mk b/keyboards/anavi/knob1/rules.mk
index 0e5631b02b3f..dd68e9d3b090 100644
--- a/keyboards/anavi/knob1/rules.mk
+++ b/keyboards/anavi/knob1/rules.mk
@@ -1,3 +1 @@
OLED_ENABLE = yes
-
-OPT_DEFS += -DHAL_USE_I2C=TRUE
diff --git a/keyboards/anavi/knobs3/rules.mk b/keyboards/anavi/knobs3/rules.mk
index 0e5631b02b3f..dd68e9d3b090 100644
--- a/keyboards/anavi/knobs3/rules.mk
+++ b/keyboards/anavi/knobs3/rules.mk
@@ -1,3 +1 @@
OLED_ENABLE = yes
-
-OPT_DEFS += -DHAL_USE_I2C=TRUE
diff --git a/keyboards/anavi/macropad8/keymaps/git/config.h b/keyboards/anavi/macropad8/keymaps/git/config.h
deleted file mode 100644
index 370eb86ca871..000000000000
--- a/keyboards/anavi/macropad8/keymaps/git/config.h
+++ /dev/null
@@ -1,24 +0,0 @@
-/* Copyright 2021 Leon Anavi
- *
- * 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 .
- */
-
-#pragma once
-
-#undef RGBLIGHT_EFFECT_RAINBOW_SWIRL
-#undef RGBLIGHT_EFFECT_KNIGHT
-#undef RGBLIGHT_EFFECT_STATIC_GRADIENT
-#undef RGBLIGHT_EFFECT_RGB_TEST
-#undef RGBLIGHT_EFFECT_ALTERNATING
-#undef RGBLIGHT_EFFECT_TWINKLE
diff --git a/keyboards/anavi/macropad8/keymaps/git/keymap.c b/keyboards/anavi/macropad8/keymaps/git/keymap.c
deleted file mode 100644
index 9b7afb5d6956..000000000000
--- a/keyboards/anavi/macropad8/keymaps/git/keymap.c
+++ /dev/null
@@ -1,145 +0,0 @@
-/* Copyright 2021 Leon Anavi
- *
- * 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 .
- */
-
-#include QMK_KEYBOARD_H
-
-#define _MAIN 0
-#define _FN 1
-
-/*
- * This keymap contains the following shortcuts for Git. On the
- * first row from left to right:
- *
- * git status
- * git log
- * git pull
- * git push
- *
- * On the second row from left to right:
- *
- * git diff
- * git add
- * git commit
- * FN key to switch to the 2nd layout and control lights
- *
- */
-
-enum custom_keycodes {
- GITCOMMIT = SAFE_RANGE,
- GITPUSH,
- GITPULL,
- GITSTATUS,
- GITDIFF,
- GITLOG,
- GITADD
-};
-
-bool process_record_user(uint16_t keycode, keyrecord_t *record) {
- switch (keycode) {
- case GITCOMMIT:
- if (record->event.pressed) {
- SEND_STRING("git commit -s\n");
- }
- break;
- case GITPUSH:
- if (record->event.pressed) {
- SEND_STRING("git push\n");
- }
- break;
- case GITPULL:
- if (record->event.pressed) {
- SEND_STRING("git pull\n");
- }
- break;
- case GITSTATUS:
- if (record->event.pressed) {
- SEND_STRING("git status\n");
- }
- break;
- case GITDIFF:
- if (record->event.pressed) {
- SEND_STRING("git diff ");
- }
- break;
- case GITLOG:
- if (record->event.pressed) {
- SEND_STRING("git log\n");
- }
- break;
- case GITADD:
- if (record->event.pressed) {
- SEND_STRING("git add ");
- }
- break;
- }
- return true;
-};
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [_MAIN] = LAYOUT_ortho_2x4(
- GITSTATUS, GITLOG, GITPULL, GITPUSH,
- GITDIFF, GITADD, GITCOMMIT, MO(_FN)
- ),
-
- [_FN] = LAYOUT_ortho_2x4(
- RGB_TOG, RGB_MOD, RGB_M_R, RGB_M_SN,
- BL_TOGG, BL_STEP, BL_BRTG, _______
- )
-};
-
-#ifdef OLED_ENABLE
-oled_rotation_t oled_init_user(oled_rotation_t rotation) {
- return OLED_ROTATION_180; // flips the display 180 degrees if offhand
-}
-
-bool oled_task_user(void) {
- // Host Keyboard Layer Status
- oled_write_ln_P(PSTR("ANAVI Macro Pad 8"), false);
- oled_write_P(PSTR("Active layer: "), false);
-
- switch (get_highest_layer(layer_state)) {
- case _MAIN:
- oled_write_ln_P(PSTR("Git"), false);
- break;
- case _FN:
- oled_write_ln_P(PSTR("FN"), false);
- break;
- default:
- // Or use the write_ln shortcut over adding '\n' to the end of your string
- oled_write_ln_P(PSTR("N/A"), false);
- }
-
- // Host Keyboard LED Status
- led_t led_state = host_keyboard_led_state();
- oled_write_P(PSTR("Num Lock: "), false);
- oled_write_ln_P(led_state.num_lock ? PSTR("On") : PSTR("Off"), false);
- oled_write_P(PSTR("Caps Lock: "), false);
- oled_write_ln_P(led_state.caps_lock ? PSTR("On") : PSTR("Off"), false);
- oled_write_P(PSTR("Scroll Lock: "), false);
- oled_write_ln_P(led_state.scroll_lock ? PSTR("On") : PSTR("Off"), false);
- oled_write_P(PSTR("Backlit: "), false);
- oled_write_ln_P(is_backlight_enabled() ? PSTR("On") : PSTR("Off"), false);
-#ifdef RGBLIGHT_ENABLE
- static char rgbStatusLine1[26] = {0};
- snprintf(rgbStatusLine1, sizeof(rgbStatusLine1), "RGB Mode: %d", rgblight_get_mode());
- oled_write_ln(rgbStatusLine1, false);
- static char rgbStatusLine2[26] = {0};
- snprintf(rgbStatusLine2, sizeof(rgbStatusLine2), "h:%d s:%d v:%d", rgblight_get_hue(), rgblight_get_sat(), rgblight_get_val());
- oled_write_ln(rgbStatusLine2, false);
-#endif
- return false;
-}
-#endif
diff --git a/keyboards/anavi/macropad8/keymaps/kicad/keymap.c b/keyboards/anavi/macropad8/keymaps/kicad/keymap.c
deleted file mode 100644
index e75d588478ca..000000000000
--- a/keyboards/anavi/macropad8/keymaps/kicad/keymap.c
+++ /dev/null
@@ -1,118 +0,0 @@
- /* Copyright 2020 Leon Anavi
- *
- * 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 .
- */
-
-#include QMK_KEYBOARD_H
-
-#define _SCH 0
-#define _PCB 1
-#define _FN 2
-
-#define KC_X0 LT(_FN, KC_ESC)
-
-#ifdef RGBLIGHT_ENABLE
-// How long (in ms) to wait between animation steps for the rainbow mode
-const uint8_t RGBLED_RAINBOW_MOOD_INTERVALS[] PROGMEM = {60, 30, 15};
-// How long (in milliseconds) to wait between animation steps for each of the "Swirling rainbow" animations
-const uint8_t RGBLED_RAINBOW_SWIRL_INTERVALS[] PROGMEM = {20, 10, 4};
-#endif
-
-/*
- * The keymap contains 2 layers for KiCad hotkeys and a 3rd layer
- * for controlling the backlighting and the underlighting.
- *
- * - Layer for KiCad Schematic hotkeys:
- * m - to move selected component
- * r - to rotate selected component
- * w - to wire components
- * v - to edit component value
- * F1 - zoom in
- * F2 - zoom out
- * F4 - zoom center
- *
- * - Layer for KiCad PCB layout hotkets:
- * m - to move selected component
- * r - to rotate selected component
- * x - to route a new track
- * v - to add a via
- * F1 - zoom in
- * F2 - zoom out
- * F4 - zoom center
- *
- */
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [_SCH] = LAYOUT_ortho_2x4(
- KC_M, KC_R, KC_W, KC_V,
- KC_F1, KC_F2, KC_F4, TO(_PCB)
- ),
-
- [_PCB] = LAYOUT_ortho_2x4(
- KC_M, KC_R, KC_X, KC_V,
- KC_F1, KC_F2, KC_F4, TO(_FN)
- ),
-
- [_FN] = LAYOUT_ortho_2x4(
- RGB_TOG, RGB_MOD, RGB_M_R, RGB_M_SN,
- BL_TOGG, BL_STEP, BL_BRTG, TO(_SCH)
- )
-};
-
-#ifdef OLED_ENABLE
-oled_rotation_t oled_init_user(oled_rotation_t rotation) {
- return OLED_ROTATION_180; // flips the display 180 degrees if offhand
-}
-
-bool oled_task_user(void) {
- // Host Keyboard Layer Status
- oled_write_ln_P(PSTR("ANAVI Macro Pad 8"), false);
- oled_write_P(PSTR("Layer: "), false);
-
- switch (get_highest_layer(layer_state)) {
- case _SCH:
- oled_write_ln_P(PSTR("KiCad Schema"), false);
- break;
- case _PCB:
- oled_write_ln_P(PSTR("KiCad PCB"), false);
- break;
- case _FN:
- oled_write_ln_P(PSTR("FN "), false);
- break;
- default:
- // Or use the write_ln shortcut over adding '\n' to the end of your string
- oled_write_ln_P(PSTR("N/A"), false);
- }
-
- // Host Keyboard LED Status
- led_t led_state = host_keyboard_led_state();
- oled_write_P(PSTR("Num Lock: "), false);
- oled_write_ln_P(led_state.num_lock ? PSTR("On") : PSTR("Off"), false);
- oled_write_P(PSTR("Caps Lock: "), false);
- oled_write_ln_P(led_state.caps_lock ? PSTR("On") : PSTR("Off"), false);
- oled_write_P(PSTR("Scroll Lock: "), false);
- oled_write_ln_P(led_state.scroll_lock ? PSTR("On") : PSTR("Off"), false);
- oled_write_P(PSTR("Backlit: "), false);
- oled_write_ln_P(is_backlight_enabled() ? PSTR("On") : PSTR("Off"), false);
-#ifdef RGBLIGHT_ENABLE
- static char rgbStatusLine1[26] = {0};
- snprintf(rgbStatusLine1, sizeof(rgbStatusLine1), "RGB Mode: %d", rgblight_get_mode());
- oled_write_ln(rgbStatusLine1, false);
- static char rgbStatusLine2[26] = {0};
- snprintf(rgbStatusLine2, sizeof(rgbStatusLine2), "h:%d s:%d v:%d", rgblight_get_hue(), rgblight_get_sat(), rgblight_get_val());
- oled_write_ln(rgbStatusLine2, false);
-#endif
- return false;
-}
-#endif
diff --git a/keyboards/anavi/macropad8/keymaps/kodi/keymap.c b/keyboards/anavi/macropad8/keymaps/kodi/keymap.c
deleted file mode 100644
index f99a22d72338..000000000000
--- a/keyboards/anavi/macropad8/keymaps/kodi/keymap.c
+++ /dev/null
@@ -1,81 +0,0 @@
-#include QMK_KEYBOARD_H
-
-#define _MAIN 0
-#define _FN 1
-
-#define KC_X0 LT(_FN, KC_ESC)
-
-#ifdef RGBLIGHT_ENABLE
-// How long (in ms) to wait between animation steps for the rainbow mode
-const uint8_t RGBLED_RAINBOW_MOOD_INTERVALS[] PROGMEM = {60, 30, 15};
-// How long (in milliseconds) to wait between animation steps for each of the "Swirling rainbow" animations
-const uint8_t RGBLED_RAINBOW_SWIRL_INTERVALS[] PROGMEM = {20, 10, 4};
-#endif
-
-/**
- * Kodi shortcuts:
- *
- * ESC - Previous menu OR Home screen
- * Enter - Select
- * X - Stop
- * Arrows to move
- *
- * For details have a look at:
- * https://kodi.wiki/view/Keyboard_controls
- */
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [_MAIN] = LAYOUT_ortho_2x4(
- KC_ESC, KC_UP, KC_ENTER, KC_X,
- KC_LEFT, KC_DOWN, KC_RIGHT, MO(_FN)
- ),
-
- [_FN] = LAYOUT_ortho_2x4(
- RGB_TOG, RGB_MOD, RGB_M_R, RGB_M_SN,
- BL_TOGG, BL_STEP, BL_BRTG, _______
- )
-};
-
-#ifdef OLED_ENABLE
-oled_rotation_t oled_init_user(oled_rotation_t rotation) {
- return OLED_ROTATION_180; // flips the display 180 degrees if offhand
-}
-
-bool oled_task_user(void) {
- // Host Keyboard Layer Status
- oled_write_ln_P(PSTR("ANAVI Macro Pad 8"), false);
- oled_write_P(PSTR("Active layer: "), false);
-
- switch (get_highest_layer(layer_state)) {
- case _MAIN:
- oled_write_ln_P(PSTR("Kodi"), false);
- break;
- case _FN:
- oled_write_ln_P(PSTR("FN"), false);
- break;
- default:
- // Or use the write_ln shortcut over adding '\n' to the end of your string
- oled_write_ln_P(PSTR("N/A"), false);
- }
-
- // Host Keyboard LED Status
- led_t led_state = host_keyboard_led_state();
- oled_write_P(PSTR("Num Lock: "), false);
- oled_write_ln_P(led_state.num_lock ? PSTR("On") : PSTR("Off"), false);
- oled_write_P(PSTR("Caps Lock: "), false);
- oled_write_ln_P(led_state.caps_lock ? PSTR("On") : PSTR("Off"), false);
- oled_write_P(PSTR("Scroll Lock: "), false);
- oled_write_ln_P(led_state.scroll_lock ? PSTR("On") : PSTR("Off"), false);
- oled_write_P(PSTR("Backlit: "), false);
- oled_write_ln_P(is_backlight_enabled() ? PSTR("On") : PSTR("Off"), false);
-#ifdef RGBLIGHT_ENABLE
- static char rgbStatusLine1[26] = {0};
- snprintf(rgbStatusLine1, sizeof(rgbStatusLine1), "RGB Mode: %d", rgblight_get_mode());
- oled_write_ln(rgbStatusLine1, false);
- static char rgbStatusLine2[26] = {0};
- snprintf(rgbStatusLine2, sizeof(rgbStatusLine2), "h:%d s:%d v:%d", rgblight_get_hue(), rgblight_get_sat(), rgblight_get_val());
- oled_write_ln(rgbStatusLine2, false);
-#endif
- return false;
-}
-#endif
diff --git a/keyboards/anavi/macropad8/keymaps/obs/keymap.c b/keyboards/anavi/macropad8/keymaps/obs/keymap.c
deleted file mode 100644
index 1d9fd38eed1a..000000000000
--- a/keyboards/anavi/macropad8/keymaps/obs/keymap.c
+++ /dev/null
@@ -1,98 +0,0 @@
- /* Copyright 2020 Leon Anavi
- *
- * 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 .
- */
-
-#include QMK_KEYBOARD_H
-
-#define _MAIN 0
-#define _FN 1
-
-#define KC_X0 LT(_FN, KC_ESC)
-
-#ifdef RGBLIGHT_ENABLE
-// How long (in ms) to wait between animation steps for the rainbow mode
-const uint8_t RGBLED_RAINBOW_MOOD_INTERVALS[] PROGMEM = {60, 30, 15};
-// How long (in milliseconds) to wait between animation steps for each of the "Swirling rainbow" animations
-const uint8_t RGBLED_RAINBOW_SWIRL_INTERVALS[] PROGMEM = {20, 10, 4};
-#endif
-
-/*
- * This keymap contains the following shortcuts for OBS:
- *
- * - Shortcuts useful for switching scenes on the 1st row:
- * Hold Left Control, Shift, Alt and GUI and press F9
- * Hold Left Control, Shift, Alt and GUI and press F10
- * Hold Left Control, Shift, Alt and GUI and press F11
- * Hold Left Control, Shift, Alt and GUI and press F12
- * - Center to screen: Ctrl+D
- * - Fit to screen: Ctrl+F
- * - Move source to top of sources list: Ctrl+Home
- */
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [_MAIN] = LAYOUT_ortho_2x4(
- HYPR(KC_F9), HYPR(KC_F10), HYPR(KC_F11), HYPR(KC_F12),
- LCTL(KC_D), LCTL(KC_F), LCTL(KC_HOME), MO(_FN)
- ),
-
- [_FN] = LAYOUT_ortho_2x4(
- RGB_TOG, RGB_MOD, RGB_M_R, RGB_M_SN,
- BL_TOGG, BL_STEP, BL_BRTG, _______
- )
-};
-
-#ifdef OLED_ENABLE
-oled_rotation_t oled_init_user(oled_rotation_t rotation) {
- return OLED_ROTATION_180; // flips the display 180 degrees if offhand
-}
-
-bool oled_task_user(void) {
- // Host Keyboard Layer Status
- oled_write_ln_P(PSTR("ANAVI Macro Pad 8"), false);
- oled_write_P(PSTR("Active layer: "), false);
-
- switch (get_highest_layer(layer_state)) {
- case _MAIN:
- oled_write_ln_P(PSTR("OBS"), false);
- break;
- case _FN:
- oled_write_ln_P(PSTR("FN"), false);
- break;
- default:
- // Or use the write_ln shortcut over adding '\n' to the end of your string
- oled_write_ln_P(PSTR("N/A"), false);
- }
-
- // Host Keyboard LED Status
- led_t led_state = host_keyboard_led_state();
- oled_write_P(PSTR("Num Lock: "), false);
- oled_write_ln_P(led_state.num_lock ? PSTR("On") : PSTR("Off"), false);
- oled_write_P(PSTR("Caps Lock: "), false);
- oled_write_ln_P(led_state.caps_lock ? PSTR("On") : PSTR("Off"), false);
- oled_write_P(PSTR("Scroll Lock: "), false);
- oled_write_ln_P(led_state.scroll_lock ? PSTR("On") : PSTR("Off"), false);
- oled_write_P(PSTR("Backlit: "), false);
- oled_write_ln_P(is_backlight_enabled() ? PSTR("On") : PSTR("Off"), false);
-#ifdef RGBLIGHT_ENABLE
- static char rgbStatusLine1[26] = {0};
- snprintf(rgbStatusLine1, sizeof(rgbStatusLine1), "RGB Mode: %d", rgblight_get_mode());
- oled_write_ln(rgbStatusLine1, false);
- static char rgbStatusLine2[26] = {0};
- snprintf(rgbStatusLine2, sizeof(rgbStatusLine2), "h:%d s:%d v:%d", rgblight_get_hue(), rgblight_get_sat(), rgblight_get_val());
- oled_write_ln(rgbStatusLine2, false);
-#endif
- return false;
-}
-#endif
diff --git a/keyboards/anavi/macropad8/keymaps/vlc/keymap.c b/keyboards/anavi/macropad8/keymaps/vlc/keymap.c
deleted file mode 100644
index 3e15a81861de..000000000000
--- a/keyboards/anavi/macropad8/keymaps/vlc/keymap.c
+++ /dev/null
@@ -1,138 +0,0 @@
- /* Copyright 2021 Marc Nause
- *
- * 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 .
- */
-
-#include QMK_KEYBOARD_H
-
-enum custom_layers {
- _PLAY,
- _FRAME,
- _DVD,
- _FN
-};
-
-#define KC_X0 LT(_FN, KC_ESC)
-
-#ifdef RGBLIGHT_ENABLE
-// How long (in ms) to wait between animation steps for the rainbow mode
-const uint8_t RGBLED_RAINBOW_MOOD_INTERVALS[] PROGMEM = {60, 30, 15};
-// How long (in milliseconds) to wait between animation steps for each of the "Swirling rainbow" animations
-const uint8_t RGBLED_RAINBOW_SWIRL_INTERVALS[] PROGMEM = {20, 10, 4};
-#endif
-
-/*
- * The keymap contains 3 layers for vlc hotkeys and a 4th layer
- * for controlling the backlighting and the underlighting.
- *
- * See https://wiki.videolan.org/QtHotkeys/ for VLC hotkeys
- *
- * - Layer for VLC media play hotkeys:
- * Space - Play/pause
- * P - Previous track
- * S - Stop
- * N - Next track
- * + - Slower
- * - - Faster
- * = - Normal rate
- *
- * - Layer for VLC frame control hotkeys:
- * Shift + right arrow - Jump 5 seconds forward
- * Alt + right arrow - Jump 10 seconds forward
- * Control + right arrow - Jump 1 minute forward
- * E - Next frame
- * Shift + left arrow - Jump 5 seconds back
- * Alt + left arrow - Jump 10 seconds back
- * Control + left arrow - Jump 1 minute back
- *
- * - Layer for VLC DVD hotkeys:
- * Shift + M - Disc menu
- * Arrow up - Navigate menu (up)
- * Enter - Select menu entry
- * Shift + V - Toggle subtitles
- * Arrow left - Navigate menu (left)
- * Arrow down - Navigate menu (down)
- * Arrow right - Navigate menu (right)
- */
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [_PLAY] = LAYOUT_ortho_2x4(
- KC_SPC, KC_P, KC_S, KC_N,
- KC_KP_PLUS, KC_KP_MINUS, KC_KP_EQUAL, TO(_FRAME)
- ),
-
- [_FRAME] = LAYOUT_ortho_2x4(
- LSFT(KC_RIGHT), LALT(KC_RIGHT), LCTL(KC_RIGHT), KC_E,
- LSFT(KC_LEFT), LALT(KC_LEFT), LCTL(KC_LEFT), TO(_DVD)
- ),
-
- [_DVD] = LAYOUT_ortho_2x4(
- LSFT(KC_M), KC_UP, KC_ENTER, LSFT(KC_V),
- KC_LEFT, KC_DOWN, KC_RIGHT, TO(_FN)
- ),
-
- [_FN] = LAYOUT_ortho_2x4(
- RGB_TOG, RGB_MOD, RGB_M_R, RGB_M_SN,
- BL_TOGG, BL_STEP, BL_BRTG, TO(_PLAY)
- )
-};
-
-#ifdef OLED_ENABLE
-oled_rotation_t oled_init_user(oled_rotation_t rotation) {
- return OLED_ROTATION_180; // flips the display 180 degrees if offhand
-}
-
-void oled_task_user(void) {
- // Host Keyboard Layer Status
- oled_write_ln_P(PSTR("ANAVI Macro Pad 8"), false);
- oled_write_P(PSTR("Layer: "), false);
-
- switch (get_highest_layer(layer_state)) {
- case _PLAY:
- oled_write_ln_P(PSTR("VLC Play"), false);
- break;
- case _FRAME:
- oled_write_ln_P(PSTR("VLC Frame"), false);
- break;
- case _DVD:
- oled_write_ln_P(PSTR("VLC DVD"), false);
- break;
- case _FN:
- oled_write_ln_P(PSTR("FN "), false);
- break;
- default:
- // Or use the write_ln shortcut over adding '\n' to the end of your string
- oled_write_ln_P(PSTR("N/A"), false);
- }
-
- // Host Keyboard LED Status
- led_t led_state = host_keyboard_led_state();
- oled_write_P(PSTR("Num Lock: "), false);
- oled_write_ln_P(led_state.num_lock ? PSTR("On") : PSTR("Off"), false);
- oled_write_P(PSTR("Caps Lock: "), false);
- oled_write_ln_P(led_state.caps_lock ? PSTR("On") : PSTR("Off"), false);
- oled_write_P(PSTR("Scroll Lock: "), false);
- oled_write_ln_P(led_state.scroll_lock ? PSTR("On") : PSTR("Off"), false);
- oled_write_P(PSTR("Backlit: "), false);
- oled_write_ln_P(is_backlight_enabled() ? PSTR("On") : PSTR("Off"), false);
-#ifdef RGBLIGHT_ENABLE
- static char rgbStatusLine1[26] = {0};
- snprintf(rgbStatusLine1, sizeof(rgbStatusLine1), "RGB Mode: %d", rgblight_get_mode());
- oled_write_ln(rgbStatusLine1, false);
- static char rgbStatusLine2[26] = {0};
- snprintf(rgbStatusLine2, sizeof(rgbStatusLine2), "h:%d s:%d v:%d", rgblight_get_hue(), rgblight_get_sat(), rgblight_get_val());
- oled_write_ln(rgbStatusLine2, false);
-#endif
-}
-#endif
diff --git a/keyboards/anavi/macropad8/keymaps/vscode/config.h b/keyboards/anavi/macropad8/keymaps/vscode/config.h
deleted file mode 100644
index dd687cad58f3..000000000000
--- a/keyboards/anavi/macropad8/keymaps/vscode/config.h
+++ /dev/null
@@ -1,19 +0,0 @@
-/* Copyright 2021 QMK
- *
- * 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 .
- */
-
-#pragma once
-
-#define LAYER_STATE_8BIT
diff --git a/keyboards/anavi/macropad8/keymaps/vscode/keymap.c b/keyboards/anavi/macropad8/keymaps/vscode/keymap.c
deleted file mode 100644
index 46d4a7d8b374..000000000000
--- a/keyboards/anavi/macropad8/keymaps/vscode/keymap.c
+++ /dev/null
@@ -1,227 +0,0 @@
- /* Copyright 2022 Efthimis Iosifidis
- *
- * 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 .
- */
-
-#include QMK_KEYBOARD_H
-
-enum layers {
- _BASIC,
- _BRACKETS,
- _SELECTORS,
- _FN,
-};
-
-
-#define KC_X0 LT(_FN, KC_ESC)
-
-static char current_alpha_oled [12] = "None";
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-/* _BASIC Layer
- * ,-------------------------------------.
- * | Toggle | Toggle | | |
- * | Block | Line | Undo | Search |
- * | Comment | Comment | | |
- * |---------+---------+--------+---------+
- * | | | | TO |
- * | Cut | Copy | Paste | _BASIC |
- * | | | | |
- * `-------------------------------------'
- */
- [_BASIC] = LAYOUT_ortho_2x4(
- RCS(KC_A), LCTL(KC_SLASH), LCTL(KC_Z), LCTL(KC_F),
- LCTL(KC_X), LCTL(KC_C), LCTL(KC_V), TO(_BRACKETS)
- ),
-/* _BRACKETS Layer
- * ,-----------------------------------------.
- * | | | | |
- * | ( | [ | { | Bksp |
- * | | | | |
- * |---------+---------+--------+------------+
- * | | | | TO |
- * | Del | Copy | Paste | _SELECTORS |
- * | | | | |
- * `----------------------------------------'
- */
- [_BRACKETS] = LAYOUT_ortho_2x4(
- S(KC_9), KC_LBRC, S(KC_LBRC), KC_BACKSPACE,
- KC_DEL, C(KC_C), C(KC_V), TO(_SELECTORS)
- ),
-/* _SELECTORS Layer
-* ,-------------------------------------.
-* | | | | |
-* | Select | Save | Undo | Bksp |
-* | All | | | |
-* |---------+---------+--------+---------+
-* | | | | TO |
-* | Cut | Copy | Paste | _FN |
-* | | | | |
-* `-------------------------------------'
-*/
- [_SELECTORS] = LAYOUT_ortho_2x4(
- C(KC_A), C(KC_S), C(KC_Z), KC_BACKSPACE,
- C(KC_X), C(KC_C), C(KC_V), TO(_FN)
- ),
-/* _FN Layer
- * ,--------------------------------------------.
- * | RGB | RGB | RGB | RGB |
- * | Toggle | Mode | Mode | Snake |
- * | | Forward | Reverse | Mode |
- * |-----------+-----------+-----------+---------+
- * | | Cycle | Toggle | TO |
- * | BackLight | BackLight | BackLight | _BASIC |
- * | Toggle | Levels | Breathing | |
- * `--------------------------------------------'
- */
- [_FN] = LAYOUT_ortho_2x4(
- RGB_TOG, RGB_MOD, RGB_M_R, RGB_M_SN,
- BL_TOGG, BL_STEP, BL_BRTG, TO(_BASIC)
- )
-};
-
-#ifdef OLED_ENABLE
-oled_rotation_t oled_init_user(oled_rotation_t rotation) {
- return OLED_ROTATION_180; // flips the display 180 degrees if offhand
-}
-
-bool process_record_user(uint16_t keycode, keyrecord_t *record) {
- if (record->event.pressed) {
- char string [33];
- switch(keycode)
- {
- //First Layer with Basic Keys
- case LCTL(KC_X):
- strncpy(current_alpha_oled, "Cut", sizeof(current_alpha_oled));
- break;
- case LCTL(KC_F):
- strncpy(current_alpha_oled, "Search", sizeof(current_alpha_oled));
- break;
- case LCTL(KC_Z):
- strncpy(current_alpha_oled, "Undo", sizeof(current_alpha_oled));
- break;
- case LCTL(KC_C):
- strncpy(current_alpha_oled, "Copy", sizeof(current_alpha_oled));
- break;
- case LCTL(KC_V):
- strncpy(current_alpha_oled, "Paste", sizeof(current_alpha_oled));
- break;
- case RCS(KC_A):
- strncpy(current_alpha_oled, "Block cmt.", sizeof(current_alpha_oled));
- break;
- case LCTL(KC_SLASH):
- strncpy(current_alpha_oled, "Line cmt.", sizeof(current_alpha_oled));
- break;
- //Second Layer with Brackets
- case S(KC_9):
- strncpy(current_alpha_oled, "()", sizeof(current_alpha_oled));
- break;
- case KC_LBRC:
- strncpy(current_alpha_oled, "[]", sizeof(current_alpha_oled));
- break;
- case S(KC_LBRC):
- strncpy(current_alpha_oled, "{}", sizeof(current_alpha_oled));
- break;
- case KC_BACKSPACE:
- strncpy(current_alpha_oled, "Backspace", sizeof(current_alpha_oled));
- break;
- case KC_DEL:
- strncpy(current_alpha_oled, "Del", sizeof(current_alpha_oled));
- break;
- // Selector Layer keys
- case C(KC_A):
- strncpy(current_alpha_oled, "Select All", sizeof(current_alpha_oled));
- break;
- case C(KC_S):
- strncpy(current_alpha_oled, "Save", sizeof(current_alpha_oled));
- break;
- // FN Layer keys
- case RGB_TOG:
- strncpy(current_alpha_oled, "RGB Toggle", sizeof(current_alpha_oled));
- break;
- case RGB_MOD:
- strncpy(current_alpha_oled, "RGB Fwd", sizeof(current_alpha_oled));
- break;
- case RGB_M_R:
- strncpy(current_alpha_oled, "RGB Rev", sizeof(current_alpha_oled));
- break;
- case RGB_MODE_SNAKE:
- strncpy(current_alpha_oled, "RGB Snk", sizeof(current_alpha_oled));
- break;
- case BL_TOGG:
- strncpy(current_alpha_oled, "BkLgt Tog", sizeof(current_alpha_oled));
- break;
- case BL_STEP:
- strncpy(current_alpha_oled, "BkLgt Lvl", sizeof(current_alpha_oled));
- break;
- case BL_BRTG:
- strncpy(current_alpha_oled, "BkLgt Brth", sizeof(current_alpha_oled));
- break;
- //FN Key keycodes
- case TO(_BASIC) ... TO(_FN):
- strncpy(current_alpha_oled, "Switcher", sizeof(current_alpha_oled));
- break;
- default:
- strncpy(current_alpha_oled, itoa(keycode, string, 10), sizeof(current_alpha_oled));
- break;
- }
- }
- return true;
-}
-
-bool oled_task_user(void) {
- // Host Keyboard Layer Status
- oled_write_ln_P(PSTR("ANAVI Macro Pad 8"), false);
- oled_write_P(PSTR("Active layer: "), false);
-
- switch (get_highest_layer(layer_state)) {
- case _BASIC:
- oled_write_ln_P(PSTR("Basic"), false);
- break;
- case _BRACKETS:
- oled_write_ln_P(PSTR("Brkts"), false);
- break;
- case _SELECTORS:
- oled_write_ln_P(PSTR("Selct"), false);
- break;
- case _FN:
- oled_write_ln_P(PSTR("FN"), false);
- break;
- default:
- // Or use the write_ln shortcut over adding '\n' to the end of your string
- oled_write_ln_P(PSTR("N/A"), false);
- }
-
-
- // Host Keyboard LED Status
- led_t led_state = host_keyboard_led_state();
- oled_write_P(PSTR("Num Lock: "), false);
- oled_write_ln_P(led_state.num_lock ? PSTR("On") : PSTR("Off"), false);
- oled_write_P(PSTR("Caps Lock: "), false);
- oled_write_ln_P(led_state.caps_lock ? PSTR("On") : PSTR("Off"), false);
- oled_write_P(PSTR("Backlit: "), false);
- oled_write_ln_P(is_backlight_enabled() ? PSTR("On") : PSTR("Off"), false);
- oled_write_P(PSTR("Last Key: "), false);
- oled_write_ln(current_alpha_oled, false);
-#ifdef RGBLIGHT_ENABLE
- static char rgbStatusLine1[26] = {0};
- snprintf(rgbStatusLine1, sizeof(rgbStatusLine1), "RGB Mode: %d", rgblight_get_mode());
- oled_write_ln(rgbStatusLine1, false);
- static char rgbStatusLine2[26] = {0};
- snprintf(rgbStatusLine2, sizeof(rgbStatusLine2), "h:%d s:%d v:%d", rgblight_get_hue(), rgblight_get_sat(), rgblight_get_val());
- oled_write_ln(rgbStatusLine2, false);
-#endif
- return false;
-}
-#endif
diff --git a/keyboards/anavi/macropad8/keymaps/zoom/keymap.c b/keyboards/anavi/macropad8/keymaps/zoom/keymap.c
deleted file mode 100644
index 965bbec42926..000000000000
--- a/keyboards/anavi/macropad8/keymaps/zoom/keymap.c
+++ /dev/null
@@ -1,97 +0,0 @@
- /* Copyright 2020 Leon Anavi
- *
- * 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 .
- */
-
-#include QMK_KEYBOARD_H
-
-#define _MAIN 0
-#define _FN 1
-
-#define KC_X0 LT(_FN, KC_ESC)
-
-#ifdef RGBLIGHT_ENABLE
-// How long (in ms) to wait between animation steps for the rainbow mode
-const uint8_t RGBLED_RAINBOW_MOOD_INTERVALS[] PROGMEM = {60, 30, 15};
-// How long (in milliseconds) to wait between animation steps for each of the "Swirling rainbow" animations
-const uint8_t RGBLED_RAINBOW_SWIRL_INTERVALS[] PROGMEM = {20, 10, 4};
-#endif
-
-/*
- * The keymap contains the following shortcuts for Zoom meeting:
- *
- * Alt+V: Start/stop video
- * Alt+A: Mute/unmute my audio
- * Alt+M: Mute/unmute audio for everyone except the host
- * Alt+S: Start/stop screen sharing
- * Alt+R: Start/stop local recording
- * Alt+P: Pause/resume recording
- * Alt+C: Start/stop cloud recording
- */
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [_MAIN] = LAYOUT_ortho_2x4(
- LALT(KC_V), LALT(KC_A), LALT(KC_M), LALT(KC_S),
- LALT(KC_R), LALT(KC_P), LALT(KC_C), MO(_FN)
- ),
-
- [_FN] = LAYOUT_ortho_2x4(
- RGB_TOG, RGB_MOD, RGB_M_R, RGB_M_SN,
- BL_TOGG, BL_STEP, BL_BRTG, _______
- )
-};
-
-#ifdef OLED_ENABLE
-oled_rotation_t oled_init_user(oled_rotation_t rotation) {
- return OLED_ROTATION_180; // flips the display 180 degrees if offhand
-}
-
-bool oled_task_user(void) {
- // Host Keyboard Layer Status
- oled_write_ln_P(PSTR("ANAVI Macro Pad 8"), false);
- oled_write_P(PSTR("Active layer: "), false);
-
- switch (get_highest_layer(layer_state)) {
- case _MAIN:
- oled_write_ln_P(PSTR("Zoom"), false);
- break;
- case _FN:
- oled_write_ln_P(PSTR("FN"), false);
- break;
- default:
- // Or use the write_ln shortcut over adding '\n' to the end of your string
- oled_write_ln_P(PSTR("N/A"), false);
- }
-
- // Host Keyboard LED Status
- led_t led_state = host_keyboard_led_state();
- oled_write_P(PSTR("Num Lock: "), false);
- oled_write_ln_P(led_state.num_lock ? PSTR("On") : PSTR("Off"), false);
- oled_write_P(PSTR("Caps Lock: "), false);
- oled_write_ln_P(led_state.caps_lock ? PSTR("On") : PSTR("Off"), false);
- oled_write_P(PSTR("Scroll Lock: "), false);
- oled_write_ln_P(led_state.scroll_lock ? PSTR("On") : PSTR("Off"), false);
- oled_write_P(PSTR("Backlit: "), false);
- oled_write_ln_P(is_backlight_enabled() ? PSTR("On") : PSTR("Off"), false);
-#ifdef RGBLIGHT_ENABLE
- static char rgbStatusLine1[26] = {0};
- snprintf(rgbStatusLine1, sizeof(rgbStatusLine1), "RGB Mode: %d", rgblight_get_mode());
- oled_write_ln(rgbStatusLine1, false);
- static char rgbStatusLine2[26] = {0};
- snprintf(rgbStatusLine2, sizeof(rgbStatusLine2), "h:%d s:%d v:%d", rgblight_get_hue(), rgblight_get_sat(), rgblight_get_val());
- oled_write_ln(rgbStatusLine2, false);
-#endif
- return false;
-}
-#endif
diff --git a/keyboards/annepro2/annepro2_ble.c b/keyboards/annepro2/annepro2_ble.c
index 375f551cc23c..a382c61638f0 100644
--- a/keyboards/annepro2/annepro2_ble.c
+++ b/keyboards/annepro2/annepro2_ble.c
@@ -31,7 +31,7 @@ static void ap2_ble_swtich_ble_driver(void);
/* -------------------- Static Local Variables ------------------------------ */
static host_driver_t ap2_ble_driver = {
- ap2_ble_leds, ap2_ble_keyboard, ap2_ble_mouse, ap2_ble_extra
+ ap2_ble_leds, ap2_ble_keyboard, NULL, ap2_ble_mouse, ap2_ble_extra
};
static uint8_t ble_mcu_wakeup[11] = {0x7b, 0x12, 0x53, 0x00, 0x03, 0x00, 0x01, 0x7d, 0x02, 0x01, 0x02};
@@ -167,5 +167,5 @@ static void ap2_ble_extra(report_extra_t *report) {
static void ap2_ble_keyboard(report_keyboard_t *report) {
sdPut(&SD1, 0x0);
sdWrite(&SD1, ble_mcu_send_report, sizeof(ble_mcu_send_report));
- sdWrite(&SD1, &report->raw[0], KEYBOARD_REPORT_SIZE);
+ sdWrite(&SD1, (uint8_t *)report, KEYBOARD_REPORT_SIZE);
}
diff --git a/keyboards/annepro2/c15/config.h b/keyboards/annepro2/c15/config.h
index ea38f4dce3e1..f488b9d8f388 100644
--- a/keyboards/annepro2/c15/config.h
+++ b/keyboards/annepro2/c15/config.h
@@ -57,7 +57,3 @@
#define EXTERNAL_FLASH_SECTOR_SIZE 4096
#define EXTERNAL_FLASH_BLOCK_SIZE 4096
#define EXTERNAL_FLASH_SIZE (256 * 1024) // 2M-bit flash size
-
-// Wear-leveling driver configuration
-#define WEAR_LEVELING_LOGICAL_SIZE 1024
-#define WEAR_LEVELING_BACKING_SIZE (WEAR_LEVELING_LOGICAL_SIZE * 2)
diff --git a/keyboards/annepro2/c15/info.json b/keyboards/annepro2/c15/info.json
index 15c3ca8ba1d3..b7624dd6c50f 100644
--- a/keyboards/annepro2/c15/info.json
+++ b/keyboards/annepro2/c15/info.json
@@ -3,6 +3,13 @@
"usb": {
"pid": "0xAC15"
},
+ "eeprom": {
+ "driver": "wear_leveling",
+ "wear_leveling": {
+ "driver": "spi_flash",
+ "backing_size": 2048
+ }
+ },
"rgb_matrix": {
"driver": "custom"
},
diff --git a/keyboards/annepro2/c15/rules.mk b/keyboards/annepro2/c15/rules.mk
index 05b715e034f0..8694893ac2e9 100644
--- a/keyboards/annepro2/c15/rules.mk
+++ b/keyboards/annepro2/c15/rules.mk
@@ -26,10 +26,6 @@ BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
AUDIO_ENABLE = no # Audio output
-# Wear-levelling driver
-EEPROM_DRIVER = wear_leveling
-WEAR_LEVELING_DRIVER = spi_flash
-
# Custom RGB matrix handling
RGB_MATRIX_ENABLE = yes
diff --git a/keyboards/annepro2/c18/config.h b/keyboards/annepro2/c18/config.h
index 6b6307c3d0fc..36f4a25c8d46 100644
--- a/keyboards/annepro2/c18/config.h
+++ b/keyboards/annepro2/c18/config.h
@@ -55,7 +55,3 @@
#define EXTERNAL_FLASH_SECTOR_SIZE 4096
#define EXTERNAL_FLASH_BLOCK_SIZE 4096
#define EXTERNAL_FLASH_SIZE (256 * 1024) // 2M-bit flash size
-
-// Wear-leveling driver configuration
-#define WEAR_LEVELING_LOGICAL_SIZE 1024
-#define WEAR_LEVELING_BACKING_SIZE (WEAR_LEVELING_LOGICAL_SIZE * 2)
diff --git a/keyboards/annepro2/c18/info.json b/keyboards/annepro2/c18/info.json
index f7acff808cea..c8f524e3cfdb 100644
--- a/keyboards/annepro2/c18/info.json
+++ b/keyboards/annepro2/c18/info.json
@@ -3,6 +3,13 @@
"usb": {
"pid": "0xAC18"
},
+ "eeprom": {
+ "driver": "wear_leveling",
+ "wear_leveling": {
+ "driver": "spi_flash",
+ "backing_size": 2048
+ }
+ },
"rgb_matrix": {
"driver": "custom"
},
diff --git a/keyboards/annepro2/c18/rules.mk b/keyboards/annepro2/c18/rules.mk
index 1d53851df604..dab7269570fe 100644
--- a/keyboards/annepro2/c18/rules.mk
+++ b/keyboards/annepro2/c18/rules.mk
@@ -26,10 +26,6 @@ BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
AUDIO_ENABLE = no # Audio output
-# Wear-levelling driver
-EEPROM_DRIVER = wear_leveling
-WEAR_LEVELING_DRIVER = spi_flash
-
# Custom RGB matrix handling
RGB_MATRIX_ENABLE = yes
diff --git a/keyboards/aos/tkl/keymaps/aholland909/keymap.c b/keyboards/aos/tkl/keymaps/aholland909/keymap.c
deleted file mode 100644
index 87f12d1763ce..000000000000
--- a/keyboards/aos/tkl/keymaps/aholland909/keymap.c
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
-Copyright 2020 aholland909
-
-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 .
-*/
-
-#include QMK_KEYBOARD_H
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [0] = LAYOUT_tkl_iso_wkl(
- QK_GESC, 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_SCRL, KC_PAUSE,
-
- 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_DEL, KC_END, KC_PGDN,
- LT(1,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_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_LCTL, KC_LALT, KC_SPC, KC_RGUI, TG(1), KC_LEFT, KC_DOWN, KC_RGHT),
-
- [1] = LAYOUT_tkl_iso_wkl(
- QK_BOOT, KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_F21, KC_F22, KC_F23, KC_F24, _______, _______, _______,
-
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, KC_VOLU, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_M_P, RGB_M_B, _______,
- _______, KC_MPRV, KC_VOLD, KC_MNXT, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, _______, _______, _______, _______,
- _______, _______, _______, _______, KC_CALC, _______, _______, _______, _______, _______, _______, _______, _______, RGB_HUI,
- _______, _______, KC_MPLY, _______, _______, RGB_SAD, RGB_HUD, RGB_VAI),
-};
diff --git a/keyboards/aozora/config.h b/keyboards/aozora/config.h
deleted file mode 100644
index 5171d0c312de..000000000000
--- a/keyboards/aozora/config.h
+++ /dev/null
@@ -1,20 +0,0 @@
-/* Copyright 2021 Salmon Cat Studio
- *
- * 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 .
- */
-
-#pragma once
-
-/* EEPROM for via */
-#define DYNAMIC_KEYMAP_LAYER_COUNT 2
diff --git a/keyboards/argo_works/ishi/80/mk0_avr_extra/keymaps/bongocat/keymap.c b/keyboards/argo_works/ishi/80/mk0_avr_extra/keymaps/bongocat/keymap.c
deleted file mode 100644
index b96e5ce64840..000000000000
--- a/keyboards/argo_works/ishi/80/mk0_avr_extra/keymaps/bongocat/keymap.c
+++ /dev/null
@@ -1,187 +0,0 @@
-/* Copyright 2022 Jason Devadoss (@jasonj2232)
- *
- * 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 .
- */
-
-#include QMK_KEYBOARD_H
-
-enum custom_layers {
- BL,
- UL,
-};
-
-// OLED setup for bongocat
-#define IDLE_FRAMES 5
-#define IDLE_SPEED 30
-#define TAP_FRAMES 2
-#define TAP_SPEED 40
-#define ANIM_FRAME_DURATION 200
-#define ANIM_SIZE 512
-
-static long int oled_timeout = 600000; // 10 minutes
-bool gui_on = true;
-char wpm_str[10];
-uint32_t anim_timer = 0;
-uint32_t anim_sleep = 0;
-uint8_t current_idle_frame = 0;
-uint8_t current_tap_frame = 0;
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-
- [BL] = LAYOUT(
- KC_PMNS, KC_PAST, KC_PSLS, KC_NUM, KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,
- KC_PPLS, KC_P9, KC_P8, KC_P7, 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_P6, KC_P5, KC_P4, KC_CAPS_LOCK, 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_PENT, KC_P3, KC_P2, KC_P1, 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_PDOT, KC_P0, KC_LCTL, KC_LGUI, LT(1, KC_LALT), KC_SPC, KC_RALT, KC_RGUI, KC_APP, KC_RCTL, KC_AUDIO_MUTE
-
- ),
-
- [UL] = LAYOUT(
- KC_TRNS, KC_TRNS, 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_DEL,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_PSCR, KC_SCRL, KC_PAUS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_UP,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_RIGHT, KC_MPLY
- ),
-};
-
-#ifdef ENCODER_MAP_ENABLE
- const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
- [BL] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
- [UL] = { ENCODER_CCW_CW(KC_BRID, KC_BRIU) },
- };
-#endif
-
-#ifdef OLED_ENABLE
-
-//Uncomment the below if OLED orientation is incorrect
-/*
-oled_rotation_t oled_init_user(oled_rotation_t rotation) {
- return OLED_ROTATION_180; // flips the display 180 degrees
-}
-*/
-
-static void render_anim(void) {
-
- // Idle animation
- static const char PROGMEM idle[IDLE_FRAMES][ANIM_SIZE] = {
-
- {
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,64,64,32,32,32,32,16,16,16,16,16,8,8,4,4,4,8,48,64,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,128,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24,100,130,2,2,2,2,2,1,0,0,0,0,128,128,0,0,0,0,0,0,0,0,0,128,0,48,48,0,192,193,193,194,4,8,16,32,64,128,0,0,0,128,128,128,128,64,64,
- 64,64,32,32,32,32,16,16,16,16,8,8,8,8,8,4,4,4,4,4,2,2,2,2,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,192,56,4,3,0,0,0,0,0,0,0,12,12,12,13,1,0,64,160,33,34,18,17,17,17,9,8,8,8,8,4,4,8,8,16,16,16,16,16,17,15,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,128,128,128,128,64,64,64,64,64,32,32,32,32,32,16,16,16,16,16,8,8,8,8,8,4,4,4,4,4,2,3,2,2,1,1,1,1,1,1,2,2,4,4,8,8,8,8,8,7,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
- },
-
- {
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,64,64,32,32,32,32,16,16,16,16,16,8,8,4,4,4,8,48,64,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,128,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24,100,130,2,2,2,2,2,1,0,0,0,0,128,128,0,0,0,0,0,0,0,0,0,128,0,48,48,0,192,193,193,194,4,8,16,32,64,128,0,0,0,128,128,128,128,64,64,
- 64,64,32,32,32,32,16,16,16,16,8,8,8,8,8,4,4,4,4,4,2,2,2,2,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,192,56,4,3,0,0,0,0,0,0,0,12,12,12,13,1,0,64,160,33,34,18,17,17,17,9,8,8,8,8,4,4,8,8,16,16,16,16,16,17,15,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,128,128,128,128,64,64,64,64,64,32,32,32,32,32,16,16,16,16,16,8,8,8,8,8,4,4,4,4,4,2,3,2,2,1,1,1,1,1,1,2,2,4,4,8,8,8,8,8,
- 7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
- },
-
- {
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,128,64,64,64,64,32,32,32,32,16,8,4,2,2,4,24,96,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,128,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,60,194,1,1,2,2,4,4,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,96,96,0,129,130,130,132,8,16,32,64,128,0,0,0,0,128,128,128,128,64,64,64,64,32,
- 32,32,32,16,16,16,16,8,8,8,8,8,4,4,4,4,4,2,2,2,2,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,112,25,6,0,0,0,0,0,0,0,24,24,24,27,3,0,64,160,34,36,20,18,18,18,11,8,8,8,8,5,5,9,9,16,16,16,16,16,17,15,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,128,128,128,128,64,64,64,64,64,32,32,32,32,32,16,16,16,16,16,8,8,8,8,8,4,4,4,4,4,2,3,2,2,1,1,1,1,1,1,2,2,4,4,8,8,8,8,8,7,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
- },
-
- {
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,128,0,0,0,0,0,128,64,64,32,32,32,32,16,16,16,16,8,4,2,1,1,2,12,48,64,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,128,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,30,225,0,0,1,1,2,2,1,0,0,0,0,128,128,0,0,0,0,0,0,0,0,0,128,0,48,48,0,192,193,193,194,4,8,16,32,64,128,0,0,0,128,128,128,128,64,64,
- 64,64,32,32,32,32,16,16,16,16,8,8,8,8,8,4,4,4,4,4,2,2,2,2,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,112,12,3,0,0,0,0,0,0,0,12,12,12,13,1,0,64,160,33,34,18,17,17,17,9,8,8,8,8,4,4,8,8,16,16,16,16,16,17,15,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,128,128,128,128,64,64,64,64,64,32,32,32,32,32,16,16,16,16,16,8,8,8,8,8,4,4,4,4,4,2,3,2,2,1,1,1,1,1,1,2,2,4,4,8,8,8,8,8,
- 7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
- },
-
- {
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,64,64,32,32,32,32,16,16,16,16,8,8,4,2,2,2,4,56,64,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,128,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,28,226,1,1,2,2,2,2,1,0,0,0,0,128,128,0,0,0,0,0,0,0,0,0,128,0,48,48,0,192,193,193,194,4,8,16,32,64,128,0,0,0,128,128,128,128,64,64,64,64,
- 32,32,32,32,16,16,16,16,8,8,8,8,8,4,4,4,4,4,2,2,2,2,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,112,12,3,0,0,0,0,0,0,0,12,12,12,13,1,0,64,160,33,34,18,17,17,17,9,8,8,8,8,4,4,8,8,16,16,16,16,16,17,15,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,128,128,128,128,64,64,64,64,64,32,32,32,32,32,16,16,16,16,16,8,8,8,8,8,4,4,4,4,4,2,3,2,2,1,1,1,1,1,1,2,2,4,4,8,8,8,8,8,7,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
- }
-
- };
-
- // Prep animation
- static const char PROGMEM prep[][ANIM_SIZE] = {
-
- {
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,128,0,0,0,0,0,128,64,64,32,32,32,32,16,16,16,16,8,4,2,1,1,2,12,48,64,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,128,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,30,225,0,0,1,1,2,2,129,128,128,0,0,128,128,0,0,0,0,0,0,0,0,0,128,0,48,48,0,0,1,225,26,6,9,49,53,1,138,124,0,0,128,128,128,128,64,64,
- 64,64,32,32,32,32,16,16,16,16,8,8,8,8,8,4,4,4,4,4,2,2,2,2,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,112,12,3,0,0,24,6,5,152,153,132,195,124,65,65,64,64,32,33,34,18,17,17,17,9,8,8,8,8,4,4,4,4,4,4,2,2,2,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,128,128,128,128,64,64,64,64,64,32,32,32,32,32,16,16,16,16,16,8,8,8,8,8,4,4,4,4,4,2,3,2,2,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
- }
-
- };
-
- // Typing animation
- static const char PROGMEM tap[TAP_FRAMES][ANIM_SIZE] = {
-
- {
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,128,0,0,0,0,0,128,64,64,32,32,32,32,16,16,16,16,8,4,2,1,1,2,12,48,64,128,0,0,0,0,0,0,0,248,248,248,248,0,0,0,0,0,128,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,128,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,30,225,0,0,1,1,2,2,129,128,128,0,0,128,128,0,0,0,0,0,0,0,0,0,128,0,48,48,0,0,1,1,2,4,8,16,32,67,135,7,1,0,184,188,190,159,
- 95,95,79,76,32,32,32,32,16,16,16,16,8,8,8,8,8,4,4,4,4,4,2,2,2,2,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,112,12,3,0,0,24,6,5,152,153,132,67,124,65,65,64,64,32,33,34,18,17,17,17,9,8,8,8,8,4,4,8,8,16,16,16,16,16,17,15,1,61,124,252,252,252,252,252,60,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,128,128,128,128,64,64,64,64,64,32,32,32,32,32,16,16,16,16,16,8,8,8,8,8,4,4,4,4,4,2,3,2,2,1,1,1,
- 1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
- },
-
- {
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,128,0,0,0,0,0,128,64,64,32,32,32,32,16,16,16,16,8,4,2,1,1,2,12,48,64,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,128,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,30,225,0,0,1,1,2,2,1,0,0,0,0,128,128,0,0,0,0,0,0,0,0,0,128,0,48,48,0,0,1,225,26,6,9,49,53,1,138,124,0,0,128,128,128,128,64,64,64,64,32,
- 32,32,32,16,16,16,16,8,8,8,8,8,4,4,4,4,4,2,2,2,2,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,112,12,3,0,0,0,0,0,0,0,0,0,0,1,1,0,64,160,33,34,18,17,17,17,9,8,8,8,8,4,4,4,4,4,4,2,2,2,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,128,128,128,128,64,64,64,64,64,32,32,32,32,32,16,16,16,16,16,8,8,8,8,8,4,4,4,4,4,2,3,122,122,121,121,121,121,57,49,2,2,4,4,8,8,8,136,136,135,128,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
- }
-
- };
-
- void animation_phase(void) {
- if (get_current_wpm() <=IDLE_SPEED) {
- current_idle_frame = (current_idle_frame + 1) % IDLE_FRAMES;
- oled_write_raw_P(idle[abs((IDLE_FRAMES-1)-current_idle_frame)], ANIM_SIZE);
- }
-
- if (get_current_wpm() >IDLE_SPEED && get_current_wpm() =TAP_SPEED) {
- current_tap_frame = (current_tap_frame + 1) % TAP_FRAMES;
- oled_write_raw_P(tap[abs((TAP_FRAMES-1)-current_tap_frame)], ANIM_SIZE);
- }
- }
-
- if (get_current_wpm() != 000) {
- oled_on();
-
- if (timer_elapsed32(anim_timer) > ANIM_FRAME_DURATION) {
- anim_timer = timer_read32();
- animation_phase();
- }
-
- anim_sleep = timer_read32();
- } else {
- if (timer_elapsed32(anim_sleep) > oled_timeout) {
- oled_off();
- } else {
- if (timer_elapsed32(anim_timer) > ANIM_FRAME_DURATION) {
- anim_timer = timer_read32();
- animation_phase();
- }
- }
- }
-}
-
-bool oled_task_user(void) {
- render_anim();
- oled_set_cursor(0,4);
- sprintf(wpm_str, "WPM: %03d", get_current_wpm());
- oled_write(wpm_str, false);
-
- return false;
-}
-
-#endif
\ No newline at end of file
diff --git a/keyboards/argyle/info.json b/keyboards/argyle/info.json
new file mode 100755
index 000000000000..82dbe1562af4
--- /dev/null
+++ b/keyboards/argyle/info.json
@@ -0,0 +1,975 @@
+{
+ "manufacturer": "Yiancar-Designs",
+ "keyboard_name": "Argyle",
+ "maintainer": "Yiancar-Designs",
+ "bootloader": "usbasploader",
+ "diode_direction": "COL2ROW",
+ "features": {
+ "extrakey": true,
+ "mousekey": true,
+ "rgblight": true
+ },
+ "matrix_pins": {
+ "cols": ["D1", "D4", "D5", "D6", "D7", "B0", "NO_PIN", "NO_PIN", "NO_PIN", "NO_PIN", "NO_PIN", "NO_PIN", "NO_PIN", "NO_PIN"],
+ "custom": true,
+ "custom_lite": true,
+ "rows": ["D0", "C3", "B1", "B2", "B3"]
+ },
+ "processor": "atmega328p",
+ "rgblight": {
+ "animations": {
+ "alternating": true,
+ "breathing": true,
+ "christmas": true,
+ "knight": true,
+ "rainbow_mood": true,
+ "rainbow_swirl": true,
+ "rgb_test": true,
+ "snake": true,
+ "static_gradient": true,
+ "twinkle": true
+ },
+ "led_count": 10,
+ "sleep": true
+ },
+ "url": "https://prototypist.net/",
+ "usb": {
+ "device_version": "0.0.1",
+ "pid": "0x4152",
+ "vid": "0x8968"
+ },
+ "ws2812": {
+ "pin": "C2"
+ },
+ "community_layouts": [
+ "60_ansi",
+ "60_ansi_split_bs_rshift",
+ "60_ansi_tsangan",
+ "60_tsangan_hhkb",
+ "60_ansi_wkl",
+ "60_ansi_wkl_split_bs_rshift",
+ "60_hhkb",
+ "60_iso",
+ "60_iso_split_bs_rshift",
+ "60_iso_tsangan",
+ "60_iso_tsangan_split_bs_rshift",
+ "60_iso_wkl",
+ "60_iso_wkl_split_bs_rshift"
+ ],
+ "layouts": {
+ "LAYOUT_60_ansi": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10, "y": 0},
+ {"matrix": [0, 11], "x": 11, "y": 0},
+ {"matrix": [0, 12], "x": 12, "y": 0},
+ {"matrix": [0, 13], "x": 13, "y": 0, "w": 2},
+ {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"matrix": [1, 1], "x": 1.5, "y": 1},
+ {"matrix": [1, 2], "x": 2.5, "y": 1},
+ {"matrix": [1, 3], "x": 3.5, "y": 1},
+ {"matrix": [1, 4], "x": 4.5, "y": 1},
+ {"matrix": [1, 5], "x": 5.5, "y": 1},
+ {"matrix": [1, 6], "x": 6.5, "y": 1},
+ {"matrix": [1, 7], "x": 7.5, "y": 1},
+ {"matrix": [1, 8], "x": 8.5, "y": 1},
+ {"matrix": [1, 9], "x": 9.5, "y": 1},
+ {"matrix": [1, 10], "x": 10.5, "y": 1},
+ {"matrix": [1, 11], "x": 11.5, "y": 1},
+ {"matrix": [1, 12], "x": 12.5, "y": 1},
+ {"matrix": [2, 12], "x": 13.5, "y": 1, "w": 1.5},
+ {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"matrix": [2, 1], "x": 1.75, "y": 2},
+ {"matrix": [2, 2], "x": 2.75, "y": 2},
+ {"matrix": [2, 3], "x": 3.75, "y": 2},
+ {"matrix": [2, 4], "x": 4.75, "y": 2},
+ {"matrix": [2, 5], "x": 5.75, "y": 2},
+ {"matrix": [2, 6], "x": 6.75, "y": 2},
+ {"matrix": [2, 7], "x": 7.75, "y": 2},
+ {"matrix": [2, 8], "x": 8.75, "y": 2},
+ {"matrix": [2, 9], "x": 9.75, "y": 2},
+ {"matrix": [2, 10], "x": 10.75, "y": 2},
+ {"matrix": [2, 11], "x": 11.75, "y": 2},
+ {"matrix": [2, 13], "x": 12.75, "y": 2, "w": 2.25},
+ {"matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
+ {"matrix": [3, 2], "x": 2.25, "y": 3},
+ {"matrix": [3, 3], "x": 3.25, "y": 3},
+ {"matrix": [3, 4], "x": 4.25, "y": 3},
+ {"matrix": [3, 5], "x": 5.25, "y": 3},
+ {"matrix": [3, 6], "x": 6.25, "y": 3},
+ {"matrix": [3, 7], "x": 7.25, "y": 3},
+ {"matrix": [3, 8], "x": 8.25, "y": 3},
+ {"matrix": [3, 9], "x": 9.25, "y": 3},
+ {"matrix": [3, 10], "x": 10.25, "y": 3},
+ {"matrix": [3, 11], "x": 11.25, "y": 3},
+ {"matrix": [3, 12], "x": 12.25, "y": 3, "w": 2.75},
+ {"matrix": [4, 0], "x": 0, "y": 4, "w": 1.25},
+ {"matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.25},
+ {"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.25},
+ {"matrix": [4, 6], "x": 3.75, "y": 4, "w": 6.25},
+ {"matrix": [4, 10], "x": 10, "y": 4, "w": 1.25},
+ {"matrix": [4, 11], "x": 11.25, "y": 4, "w": 1.25},
+ {"matrix": [4, 12], "x": 12.5, "y": 4, "w": 1.25},
+ {"matrix": [4, 13], "x": 13.75, "y": 4, "w": 1.25}
+ ]
+ },
+ "LAYOUT_60_ansi_split_bs_rshift": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10, "y": 0},
+ {"matrix": [0, 11], "x": 11, "y": 0},
+ {"matrix": [0, 12], "x": 12, "y": 0},
+ {"matrix": [0, 13], "x": 13, "y": 0},
+ {"matrix": [1, 13], "x": 14, "y": 0},
+ {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"matrix": [1, 1], "x": 1.5, "y": 1},
+ {"matrix": [1, 2], "x": 2.5, "y": 1},
+ {"matrix": [1, 3], "x": 3.5, "y": 1},
+ {"matrix": [1, 4], "x": 4.5, "y": 1},
+ {"matrix": [1, 5], "x": 5.5, "y": 1},
+ {"matrix": [1, 6], "x": 6.5, "y": 1},
+ {"matrix": [1, 7], "x": 7.5, "y": 1},
+ {"matrix": [1, 8], "x": 8.5, "y": 1},
+ {"matrix": [1, 9], "x": 9.5, "y": 1},
+ {"matrix": [1, 10], "x": 10.5, "y": 1},
+ {"matrix": [1, 11], "x": 11.5, "y": 1},
+ {"matrix": [1, 12], "x": 12.5, "y": 1},
+ {"matrix": [2, 12], "x": 13.5, "y": 1, "w": 1.5},
+ {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"matrix": [2, 1], "x": 1.75, "y": 2},
+ {"matrix": [2, 2], "x": 2.75, "y": 2},
+ {"matrix": [2, 3], "x": 3.75, "y": 2},
+ {"matrix": [2, 4], "x": 4.75, "y": 2},
+ {"matrix": [2, 5], "x": 5.75, "y": 2},
+ {"matrix": [2, 6], "x": 6.75, "y": 2},
+ {"matrix": [2, 7], "x": 7.75, "y": 2},
+ {"matrix": [2, 8], "x": 8.75, "y": 2},
+ {"matrix": [2, 9], "x": 9.75, "y": 2},
+ {"matrix": [2, 10], "x": 10.75, "y": 2},
+ {"matrix": [2, 11], "x": 11.75, "y": 2},
+ {"matrix": [2, 13], "x": 12.75, "y": 2, "w": 2.25},
+ {"matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
+ {"matrix": [3, 2], "x": 2.25, "y": 3},
+ {"matrix": [3, 3], "x": 3.25, "y": 3},
+ {"matrix": [3, 4], "x": 4.25, "y": 3},
+ {"matrix": [3, 5], "x": 5.25, "y": 3},
+ {"matrix": [3, 6], "x": 6.25, "y": 3},
+ {"matrix": [3, 7], "x": 7.25, "y": 3},
+ {"matrix": [3, 8], "x": 8.25, "y": 3},
+ {"matrix": [3, 9], "x": 9.25, "y": 3},
+ {"matrix": [3, 10], "x": 10.25, "y": 3},
+ {"matrix": [3, 11], "x": 11.25, "y": 3},
+ {"matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75},
+ {"matrix": [3, 13], "x": 14, "y": 3},
+ {"matrix": [4, 0], "x": 0, "y": 4, "w": 1.25},
+ {"matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.25},
+ {"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.25},
+ {"matrix": [4, 6], "x": 3.75, "y": 4, "w": 6.25},
+ {"matrix": [4, 10], "x": 10, "y": 4, "w": 1.25},
+ {"matrix": [4, 11], "x": 11.25, "y": 4, "w": 1.25},
+ {"matrix": [4, 12], "x": 12.5, "y": 4, "w": 1.25},
+ {"matrix": [4, 13], "x": 13.75, "y": 4, "w": 1.25}
+ ]
+ },
+ "LAYOUT_60_ansi_tsangan": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10, "y": 0},
+ {"matrix": [0, 11], "x": 11, "y": 0},
+ {"matrix": [0, 12], "x": 12, "y": 0},
+ {"matrix": [0, 13], "x": 13, "y": 0, "w": 2},
+ {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"matrix": [1, 1], "x": 1.5, "y": 1},
+ {"matrix": [1, 2], "x": 2.5, "y": 1},
+ {"matrix": [1, 3], "x": 3.5, "y": 1},
+ {"matrix": [1, 4], "x": 4.5, "y": 1},
+ {"matrix": [1, 5], "x": 5.5, "y": 1},
+ {"matrix": [1, 6], "x": 6.5, "y": 1},
+ {"matrix": [1, 7], "x": 7.5, "y": 1},
+ {"matrix": [1, 8], "x": 8.5, "y": 1},
+ {"matrix": [1, 9], "x": 9.5, "y": 1},
+ {"matrix": [1, 10], "x": 10.5, "y": 1},
+ {"matrix": [1, 11], "x": 11.5, "y": 1},
+ {"matrix": [1, 12], "x": 12.5, "y": 1},
+ {"matrix": [2, 12], "x": 13.5, "y": 1, "w": 1.5},
+ {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"matrix": [2, 1], "x": 1.75, "y": 2},
+ {"matrix": [2, 2], "x": 2.75, "y": 2},
+ {"matrix": [2, 3], "x": 3.75, "y": 2},
+ {"matrix": [2, 4], "x": 4.75, "y": 2},
+ {"matrix": [2, 5], "x": 5.75, "y": 2},
+ {"matrix": [2, 6], "x": 6.75, "y": 2},
+ {"matrix": [2, 7], "x": 7.75, "y": 2},
+ {"matrix": [2, 8], "x": 8.75, "y": 2},
+ {"matrix": [2, 9], "x": 9.75, "y": 2},
+ {"matrix": [2, 10], "x": 10.75, "y": 2},
+ {"matrix": [2, 11], "x": 11.75, "y": 2},
+ {"matrix": [2, 13], "x": 12.75, "y": 2, "w": 2.25},
+ {"matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
+ {"matrix": [3, 2], "x": 2.25, "y": 3},
+ {"matrix": [3, 3], "x": 3.25, "y": 3},
+ {"matrix": [3, 4], "x": 4.25, "y": 3},
+ {"matrix": [3, 5], "x": 5.25, "y": 3},
+ {"matrix": [3, 6], "x": 6.25, "y": 3},
+ {"matrix": [3, 7], "x": 7.25, "y": 3},
+ {"matrix": [3, 8], "x": 8.25, "y": 3},
+ {"matrix": [3, 9], "x": 9.25, "y": 3},
+ {"matrix": [3, 10], "x": 10.25, "y": 3},
+ {"matrix": [3, 11], "x": 11.25, "y": 3},
+ {"matrix": [3, 12], "x": 12.25, "y": 3, "w": 2.75},
+ {"matrix": [4, 0], "x": 0, "y": 4, "w": 1.5},
+ {"matrix": [4, 1], "x": 1.5, "y": 4},
+ {"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.5},
+ {"matrix": [4, 6], "x": 4, "y": 4, "w": 7},
+ {"matrix": [4, 11], "x": 11, "y": 4, "w": 1.5},
+ {"matrix": [4, 12], "x": 12.5, "y": 4},
+ {"matrix": [4, 13], "x": 13.5, "y": 4, "w": 1.5}
+ ]
+ },
+ "LAYOUT_60_ansi_wkl": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10, "y": 0},
+ {"matrix": [0, 11], "x": 11, "y": 0},
+ {"matrix": [0, 12], "x": 12, "y": 0},
+ {"matrix": [0, 13], "x": 13, "y": 0, "w": 2},
+ {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"matrix": [1, 1], "x": 1.5, "y": 1},
+ {"matrix": [1, 2], "x": 2.5, "y": 1},
+ {"matrix": [1, 3], "x": 3.5, "y": 1},
+ {"matrix": [1, 4], "x": 4.5, "y": 1},
+ {"matrix": [1, 5], "x": 5.5, "y": 1},
+ {"matrix": [1, 6], "x": 6.5, "y": 1},
+ {"matrix": [1, 7], "x": 7.5, "y": 1},
+ {"matrix": [1, 8], "x": 8.5, "y": 1},
+ {"matrix": [1, 9], "x": 9.5, "y": 1},
+ {"matrix": [1, 10], "x": 10.5, "y": 1},
+ {"matrix": [1, 11], "x": 11.5, "y": 1},
+ {"matrix": [1, 12], "x": 12.5, "y": 1},
+ {"matrix": [2, 12], "x": 13.5, "y": 1, "w": 1.5},
+ {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"matrix": [2, 1], "x": 1.75, "y": 2},
+ {"matrix": [2, 2], "x": 2.75, "y": 2},
+ {"matrix": [2, 3], "x": 3.75, "y": 2},
+ {"matrix": [2, 4], "x": 4.75, "y": 2},
+ {"matrix": [2, 5], "x": 5.75, "y": 2},
+ {"matrix": [2, 6], "x": 6.75, "y": 2},
+ {"matrix": [2, 7], "x": 7.75, "y": 2},
+ {"matrix": [2, 8], "x": 8.75, "y": 2},
+ {"matrix": [2, 9], "x": 9.75, "y": 2},
+ {"matrix": [2, 10], "x": 10.75, "y": 2},
+ {"matrix": [2, 11], "x": 11.75, "y": 2},
+ {"matrix": [2, 13], "x": 12.75, "y": 2, "w": 2.25},
+ {"matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
+ {"matrix": [3, 2], "x": 2.25, "y": 3},
+ {"matrix": [3, 3], "x": 3.25, "y": 3},
+ {"matrix": [3, 4], "x": 4.25, "y": 3},
+ {"matrix": [3, 5], "x": 5.25, "y": 3},
+ {"matrix": [3, 6], "x": 6.25, "y": 3},
+ {"matrix": [3, 7], "x": 7.25, "y": 3},
+ {"matrix": [3, 8], "x": 8.25, "y": 3},
+ {"matrix": [3, 9], "x": 9.25, "y": 3},
+ {"matrix": [3, 10], "x": 10.25, "y": 3},
+ {"matrix": [3, 11], "x": 11.25, "y": 3},
+ {"matrix": [3, 12], "x": 12.25, "y": 3, "w": 2.75},
+ {"matrix": [4, 0], "x": 0, "y": 4, "w": 1.5},
+ {"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.5},
+ {"matrix": [4, 6], "x": 4, "y": 4, "w": 7},
+ {"matrix": [4, 11], "x": 11, "y": 4, "w": 1.5},
+ {"matrix": [4, 13], "x": 13.5, "y": 4, "w": 1.5}
+ ]
+ },
+ "LAYOUT_60_ansi_wkl_split_bs_rshift": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10, "y": 0},
+ {"matrix": [0, 11], "x": 11, "y": 0},
+ {"matrix": [0, 12], "x": 12, "y": 0},
+ {"matrix": [0, 13], "x": 13, "y": 0},
+ {"matrix": [1, 13], "x": 14, "y": 0},
+ {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"matrix": [1, 1], "x": 1.5, "y": 1},
+ {"matrix": [1, 2], "x": 2.5, "y": 1},
+ {"matrix": [1, 3], "x": 3.5, "y": 1},
+ {"matrix": [1, 4], "x": 4.5, "y": 1},
+ {"matrix": [1, 5], "x": 5.5, "y": 1},
+ {"matrix": [1, 6], "x": 6.5, "y": 1},
+ {"matrix": [1, 7], "x": 7.5, "y": 1},
+ {"matrix": [1, 8], "x": 8.5, "y": 1},
+ {"matrix": [1, 9], "x": 9.5, "y": 1},
+ {"matrix": [1, 10], "x": 10.5, "y": 1},
+ {"matrix": [1, 11], "x": 11.5, "y": 1},
+ {"matrix": [1, 12], "x": 12.5, "y": 1},
+ {"matrix": [2, 12], "x": 13.5, "y": 1, "w": 1.5},
+ {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"matrix": [2, 1], "x": 1.75, "y": 2},
+ {"matrix": [2, 2], "x": 2.75, "y": 2},
+ {"matrix": [2, 3], "x": 3.75, "y": 2},
+ {"matrix": [2, 4], "x": 4.75, "y": 2},
+ {"matrix": [2, 5], "x": 5.75, "y": 2},
+ {"matrix": [2, 6], "x": 6.75, "y": 2},
+ {"matrix": [2, 7], "x": 7.75, "y": 2},
+ {"matrix": [2, 8], "x": 8.75, "y": 2},
+ {"matrix": [2, 9], "x": 9.75, "y": 2},
+ {"matrix": [2, 10], "x": 10.75, "y": 2},
+ {"matrix": [2, 11], "x": 11.75, "y": 2},
+ {"matrix": [2, 13], "x": 12.75, "y": 2, "w": 2.25},
+ {"matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
+ {"matrix": [3, 2], "x": 2.25, "y": 3},
+ {"matrix": [3, 3], "x": 3.25, "y": 3},
+ {"matrix": [3, 4], "x": 4.25, "y": 3},
+ {"matrix": [3, 5], "x": 5.25, "y": 3},
+ {"matrix": [3, 6], "x": 6.25, "y": 3},
+ {"matrix": [3, 7], "x": 7.25, "y": 3},
+ {"matrix": [3, 8], "x": 8.25, "y": 3},
+ {"matrix": [3, 9], "x": 9.25, "y": 3},
+ {"matrix": [3, 10], "x": 10.25, "y": 3},
+ {"matrix": [3, 11], "x": 11.25, "y": 3},
+ {"matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75},
+ {"matrix": [3, 13], "x": 14, "y": 3},
+ {"matrix": [4, 0], "x": 0, "y": 4, "w": 1.5},
+ {"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.5},
+ {"matrix": [4, 6], "x": 4, "y": 4, "w": 7},
+ {"matrix": [4, 11], "x": 11, "y": 4, "w": 1.5},
+ {"matrix": [4, 13], "x": 13.5, "y": 4, "w": 1.5}
+ ]
+ },
+ "LAYOUT_60_hhkb": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10, "y": 0},
+ {"matrix": [0, 11], "x": 11, "y": 0},
+ {"matrix": [0, 12], "x": 12, "y": 0},
+ {"matrix": [0, 13], "x": 13, "y": 0},
+ {"matrix": [1, 13], "x": 14, "y": 0},
+ {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"matrix": [1, 1], "x": 1.5, "y": 1},
+ {"matrix": [1, 2], "x": 2.5, "y": 1},
+ {"matrix": [1, 3], "x": 3.5, "y": 1},
+ {"matrix": [1, 4], "x": 4.5, "y": 1},
+ {"matrix": [1, 5], "x": 5.5, "y": 1},
+ {"matrix": [1, 6], "x": 6.5, "y": 1},
+ {"matrix": [1, 7], "x": 7.5, "y": 1},
+ {"matrix": [1, 8], "x": 8.5, "y": 1},
+ {"matrix": [1, 9], "x": 9.5, "y": 1},
+ {"matrix": [1, 10], "x": 10.5, "y": 1},
+ {"matrix": [1, 11], "x": 11.5, "y": 1},
+ {"matrix": [1, 12], "x": 12.5, "y": 1},
+ {"matrix": [2, 12], "x": 13.5, "y": 1, "w": 1.5},
+ {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"matrix": [2, 1], "x": 1.75, "y": 2},
+ {"matrix": [2, 2], "x": 2.75, "y": 2},
+ {"matrix": [2, 3], "x": 3.75, "y": 2},
+ {"matrix": [2, 4], "x": 4.75, "y": 2},
+ {"matrix": [2, 5], "x": 5.75, "y": 2},
+ {"matrix": [2, 6], "x": 6.75, "y": 2},
+ {"matrix": [2, 7], "x": 7.75, "y": 2},
+ {"matrix": [2, 8], "x": 8.75, "y": 2},
+ {"matrix": [2, 9], "x": 9.75, "y": 2},
+ {"matrix": [2, 10], "x": 10.75, "y": 2},
+ {"matrix": [2, 11], "x": 11.75, "y": 2},
+ {"matrix": [2, 13], "x": 12.75, "y": 2, "w": 2.25},
+ {"matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
+ {"matrix": [3, 2], "x": 2.25, "y": 3},
+ {"matrix": [3, 3], "x": 3.25, "y": 3},
+ {"matrix": [3, 4], "x": 4.25, "y": 3},
+ {"matrix": [3, 5], "x": 5.25, "y": 3},
+ {"matrix": [3, 6], "x": 6.25, "y": 3},
+ {"matrix": [3, 7], "x": 7.25, "y": 3},
+ {"matrix": [3, 8], "x": 8.25, "y": 3},
+ {"matrix": [3, 9], "x": 9.25, "y": 3},
+ {"matrix": [3, 10], "x": 10.25, "y": 3},
+ {"matrix": [3, 11], "x": 11.25, "y": 3},
+ {"matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75},
+ {"matrix": [3, 13], "x": 14, "y": 3},
+ {"matrix": [4, 1], "x": 1.5, "y": 4},
+ {"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.5},
+ {"matrix": [4, 6], "x": 4, "y": 4, "w": 7},
+ {"matrix": [4, 11], "x": 11, "y": 4, "w": 1.5},
+ {"matrix": [4, 12], "x": 12.5, "y": 4}
+ ]
+ },
+ "LAYOUT_60_iso": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10, "y": 0},
+ {"matrix": [0, 11], "x": 11, "y": 0},
+ {"matrix": [0, 12], "x": 12, "y": 0},
+ {"matrix": [0, 13], "x": 13, "y": 0, "w": 2},
+ {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"matrix": [1, 1], "x": 1.5, "y": 1},
+ {"matrix": [1, 2], "x": 2.5, "y": 1},
+ {"matrix": [1, 3], "x": 3.5, "y": 1},
+ {"matrix": [1, 4], "x": 4.5, "y": 1},
+ {"matrix": [1, 5], "x": 5.5, "y": 1},
+ {"matrix": [1, 6], "x": 6.5, "y": 1},
+ {"matrix": [1, 7], "x": 7.5, "y": 1},
+ {"matrix": [1, 8], "x": 8.5, "y": 1},
+ {"matrix": [1, 9], "x": 9.5, "y": 1},
+ {"matrix": [1, 10], "x": 10.5, "y": 1},
+ {"matrix": [1, 11], "x": 11.5, "y": 1},
+ {"matrix": [1, 12], "x": 12.5, "y": 1},
+ {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"matrix": [2, 1], "x": 1.75, "y": 2},
+ {"matrix": [2, 2], "x": 2.75, "y": 2},
+ {"matrix": [2, 3], "x": 3.75, "y": 2},
+ {"matrix": [2, 4], "x": 4.75, "y": 2},
+ {"matrix": [2, 5], "x": 5.75, "y": 2},
+ {"matrix": [2, 6], "x": 6.75, "y": 2},
+ {"matrix": [2, 7], "x": 7.75, "y": 2},
+ {"matrix": [2, 8], "x": 8.75, "y": 2},
+ {"matrix": [2, 9], "x": 9.75, "y": 2},
+ {"matrix": [2, 10], "x": 10.75, "y": 2},
+ {"matrix": [2, 11], "x": 11.75, "y": 2},
+ {"matrix": [2, 12], "x": 12.75, "y": 2},
+ {"matrix": [2, 13], "x": 13.75, "y": 1, "w": 1.25, "h": 2},
+ {"matrix": [3, 0], "x": 0, "y": 3, "w": 1.25},
+ {"matrix": [3, 1], "x": 1.25, "y": 3},
+ {"matrix": [3, 2], "x": 2.25, "y": 3},
+ {"matrix": [3, 3], "x": 3.25, "y": 3},
+ {"matrix": [3, 4], "x": 4.25, "y": 3},
+ {"matrix": [3, 5], "x": 5.25, "y": 3},
+ {"matrix": [3, 6], "x": 6.25, "y": 3},
+ {"matrix": [3, 7], "x": 7.25, "y": 3},
+ {"matrix": [3, 8], "x": 8.25, "y": 3},
+ {"matrix": [3, 9], "x": 9.25, "y": 3},
+ {"matrix": [3, 10], "x": 10.25, "y": 3},
+ {"matrix": [3, 11], "x": 11.25, "y": 3},
+ {"matrix": [3, 12], "x": 12.25, "y": 3, "w": 2.75},
+ {"matrix": [4, 0], "x": 0, "y": 4, "w": 1.25},
+ {"matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.25},
+ {"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.25},
+ {"matrix": [4, 6], "x": 3.75, "y": 4, "w": 6.25},
+ {"matrix": [4, 10], "x": 10, "y": 4, "w": 1.25},
+ {"matrix": [4, 11], "x": 11.25, "y": 4, "w": 1.25},
+ {"matrix": [4, 12], "x": 12.5, "y": 4, "w": 1.25},
+ {"matrix": [4, 13], "x": 13.75, "y": 4, "w": 1.25}
+ ]
+ },
+ "LAYOUT_60_iso_split_bs_rshift": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10, "y": 0},
+ {"matrix": [0, 11], "x": 11, "y": 0},
+ {"matrix": [0, 12], "x": 12, "y": 0},
+ {"matrix": [0, 13], "x": 13, "y": 0},
+ {"matrix": [1, 13], "x": 14, "y": 0},
+ {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"matrix": [1, 1], "x": 1.5, "y": 1},
+ {"matrix": [1, 2], "x": 2.5, "y": 1},
+ {"matrix": [1, 3], "x": 3.5, "y": 1},
+ {"matrix": [1, 4], "x": 4.5, "y": 1},
+ {"matrix": [1, 5], "x": 5.5, "y": 1},
+ {"matrix": [1, 6], "x": 6.5, "y": 1},
+ {"matrix": [1, 7], "x": 7.5, "y": 1},
+ {"matrix": [1, 8], "x": 8.5, "y": 1},
+ {"matrix": [1, 9], "x": 9.5, "y": 1},
+ {"matrix": [1, 10], "x": 10.5, "y": 1},
+ {"matrix": [1, 11], "x": 11.5, "y": 1},
+ {"matrix": [1, 12], "x": 12.5, "y": 1},
+ {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"matrix": [2, 1], "x": 1.75, "y": 2},
+ {"matrix": [2, 2], "x": 2.75, "y": 2},
+ {"matrix": [2, 3], "x": 3.75, "y": 2},
+ {"matrix": [2, 4], "x": 4.75, "y": 2},
+ {"matrix": [2, 5], "x": 5.75, "y": 2},
+ {"matrix": [2, 6], "x": 6.75, "y": 2},
+ {"matrix": [2, 7], "x": 7.75, "y": 2},
+ {"matrix": [2, 8], "x": 8.75, "y": 2},
+ {"matrix": [2, 9], "x": 9.75, "y": 2},
+ {"matrix": [2, 10], "x": 10.75, "y": 2},
+ {"matrix": [2, 11], "x": 11.75, "y": 2},
+ {"matrix": [2, 12], "x": 12.75, "y": 2},
+ {"matrix": [2, 13], "x": 13.75, "y": 1, "w": 1.25, "h": 2},
+ {"matrix": [3, 0], "x": 0, "y": 3, "w": 1.25},
+ {"matrix": [3, 1], "x": 1.25, "y": 3},
+ {"matrix": [3, 2], "x": 2.25, "y": 3},
+ {"matrix": [3, 3], "x": 3.25, "y": 3},
+ {"matrix": [3, 4], "x": 4.25, "y": 3},
+ {"matrix": [3, 5], "x": 5.25, "y": 3},
+ {"matrix": [3, 6], "x": 6.25, "y": 3},
+ {"matrix": [3, 7], "x": 7.25, "y": 3},
+ {"matrix": [3, 8], "x": 8.25, "y": 3},
+ {"matrix": [3, 9], "x": 9.25, "y": 3},
+ {"matrix": [3, 10], "x": 10.25, "y": 3},
+ {"matrix": [3, 11], "x": 11.25, "y": 3},
+ {"matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75},
+ {"matrix": [3, 13], "x": 14, "y": 3},
+ {"matrix": [4, 0], "x": 0, "y": 4, "w": 1.25},
+ {"matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.25},
+ {"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.25},
+ {"matrix": [4, 6], "x": 3.75, "y": 4, "w": 6.25},
+ {"matrix": [4, 10], "x": 10, "y": 4, "w": 1.25},
+ {"matrix": [4, 11], "x": 11.25, "y": 4, "w": 1.25},
+ {"matrix": [4, 12], "x": 12.5, "y": 4, "w": 1.25},
+ {"matrix": [4, 13], "x": 13.75, "y": 4, "w": 1.25}
+ ]
+ },
+ "LAYOUT_60_iso_tsangan": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10, "y": 0},
+ {"matrix": [0, 11], "x": 11, "y": 0},
+ {"matrix": [0, 12], "x": 12, "y": 0},
+ {"matrix": [0, 13], "x": 13, "y": 0, "w": 2},
+ {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"matrix": [1, 1], "x": 1.5, "y": 1},
+ {"matrix": [1, 2], "x": 2.5, "y": 1},
+ {"matrix": [1, 3], "x": 3.5, "y": 1},
+ {"matrix": [1, 4], "x": 4.5, "y": 1},
+ {"matrix": [1, 5], "x": 5.5, "y": 1},
+ {"matrix": [1, 6], "x": 6.5, "y": 1},
+ {"matrix": [1, 7], "x": 7.5, "y": 1},
+ {"matrix": [1, 8], "x": 8.5, "y": 1},
+ {"matrix": [1, 9], "x": 9.5, "y": 1},
+ {"matrix": [1, 10], "x": 10.5, "y": 1},
+ {"matrix": [1, 11], "x": 11.5, "y": 1},
+ {"matrix": [1, 12], "x": 12.5, "y": 1},
+ {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"matrix": [2, 1], "x": 1.75, "y": 2},
+ {"matrix": [2, 2], "x": 2.75, "y": 2},
+ {"matrix": [2, 3], "x": 3.75, "y": 2},
+ {"matrix": [2, 4], "x": 4.75, "y": 2},
+ {"matrix": [2, 5], "x": 5.75, "y": 2},
+ {"matrix": [2, 6], "x": 6.75, "y": 2},
+ {"matrix": [2, 7], "x": 7.75, "y": 2},
+ {"matrix": [2, 8], "x": 8.75, "y": 2},
+ {"matrix": [2, 9], "x": 9.75, "y": 2},
+ {"matrix": [2, 10], "x": 10.75, "y": 2},
+ {"matrix": [2, 11], "x": 11.75, "y": 2},
+ {"matrix": [2, 12], "x": 12.75, "y": 2},
+ {"matrix": [2, 13], "x": 13.75, "y": 1, "w": 1.25, "h": 2},
+ {"matrix": [3, 0], "x": 0, "y": 3, "w": 1.25},
+ {"matrix": [3, 1], "x": 1.25, "y": 3},
+ {"matrix": [3, 2], "x": 2.25, "y": 3},
+ {"matrix": [3, 3], "x": 3.25, "y": 3},
+ {"matrix": [3, 4], "x": 4.25, "y": 3},
+ {"matrix": [3, 5], "x": 5.25, "y": 3},
+ {"matrix": [3, 6], "x": 6.25, "y": 3},
+ {"matrix": [3, 7], "x": 7.25, "y": 3},
+ {"matrix": [3, 8], "x": 8.25, "y": 3},
+ {"matrix": [3, 9], "x": 9.25, "y": 3},
+ {"matrix": [3, 10], "x": 10.25, "y": 3},
+ {"matrix": [3, 11], "x": 11.25, "y": 3},
+ {"matrix": [3, 12], "x": 12.25, "y": 3, "w": 2.75},
+ {"matrix": [4, 0], "x": 0, "y": 4, "w": 1.5},
+ {"matrix": [4, 1], "x": 1.5, "y": 4},
+ {"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.5},
+ {"matrix": [4, 6], "x": 4, "y": 4, "w": 7},
+ {"matrix": [4, 11], "x": 11, "y": 4, "w": 1.5},
+ {"matrix": [4, 12], "x": 12.5, "y": 4},
+ {"matrix": [4, 13], "x": 13.5, "y": 4, "w": 1.5}
+ ]
+ },
+ "LAYOUT_60_iso_tsangan_split_bs_rshift": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10, "y": 0},
+ {"matrix": [0, 11], "x": 11, "y": 0},
+ {"matrix": [0, 12], "x": 12, "y": 0},
+ {"matrix": [0, 13], "x": 13, "y": 0},
+ {"matrix": [1, 13], "x": 14, "y": 0},
+ {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"matrix": [1, 1], "x": 1.5, "y": 1},
+ {"matrix": [1, 2], "x": 2.5, "y": 1},
+ {"matrix": [1, 3], "x": 3.5, "y": 1},
+ {"matrix": [1, 4], "x": 4.5, "y": 1},
+ {"matrix": [1, 5], "x": 5.5, "y": 1},
+ {"matrix": [1, 6], "x": 6.5, "y": 1},
+ {"matrix": [1, 7], "x": 7.5, "y": 1},
+ {"matrix": [1, 8], "x": 8.5, "y": 1},
+ {"matrix": [1, 9], "x": 9.5, "y": 1},
+ {"matrix": [1, 10], "x": 10.5, "y": 1},
+ {"matrix": [1, 11], "x": 11.5, "y": 1},
+ {"matrix": [1, 12], "x": 12.5, "y": 1},
+ {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"matrix": [2, 1], "x": 1.75, "y": 2},
+ {"matrix": [2, 2], "x": 2.75, "y": 2},
+ {"matrix": [2, 3], "x": 3.75, "y": 2},
+ {"matrix": [2, 4], "x": 4.75, "y": 2},
+ {"matrix": [2, 5], "x": 5.75, "y": 2},
+ {"matrix": [2, 6], "x": 6.75, "y": 2},
+ {"matrix": [2, 7], "x": 7.75, "y": 2},
+ {"matrix": [2, 8], "x": 8.75, "y": 2},
+ {"matrix": [2, 9], "x": 9.75, "y": 2},
+ {"matrix": [2, 10], "x": 10.75, "y": 2},
+ {"matrix": [2, 11], "x": 11.75, "y": 2},
+ {"matrix": [2, 12], "x": 12.75, "y": 2},
+ {"matrix": [2, 13], "x": 13.75, "y": 1, "w": 1.25, "h": 2},
+ {"matrix": [3, 0], "x": 0, "y": 3, "w": 1.25},
+ {"matrix": [3, 1], "x": 1.25, "y": 3},
+ {"matrix": [3, 2], "x": 2.25, "y": 3},
+ {"matrix": [3, 3], "x": 3.25, "y": 3},
+ {"matrix": [3, 4], "x": 4.25, "y": 3},
+ {"matrix": [3, 5], "x": 5.25, "y": 3},
+ {"matrix": [3, 6], "x": 6.25, "y": 3},
+ {"matrix": [3, 7], "x": 7.25, "y": 3},
+ {"matrix": [3, 8], "x": 8.25, "y": 3},
+ {"matrix": [3, 9], "x": 9.25, "y": 3},
+ {"matrix": [3, 10], "x": 10.25, "y": 3},
+ {"matrix": [3, 11], "x": 11.25, "y": 3},
+ {"matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75},
+ {"matrix": [3, 13], "x": 14, "y": 3},
+ {"matrix": [4, 0], "x": 0, "y": 4, "w": 1.5},
+ {"matrix": [4, 1], "x": 1.5, "y": 4},
+ {"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.5},
+ {"matrix": [4, 6], "x": 4, "y": 4, "w": 7},
+ {"matrix": [4, 11], "x": 11, "y": 4, "w": 1.5},
+ {"matrix": [4, 12], "x": 12.5, "y": 4},
+ {"matrix": [4, 13], "x": 13.5, "y": 4, "w": 1.5}
+ ]
+ },
+ "LAYOUT_60_iso_wkl": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10, "y": 0},
+ {"matrix": [0, 11], "x": 11, "y": 0},
+ {"matrix": [0, 12], "x": 12, "y": 0},
+ {"matrix": [0, 13], "x": 13, "y": 0, "w": 2},
+ {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"matrix": [1, 1], "x": 1.5, "y": 1},
+ {"matrix": [1, 2], "x": 2.5, "y": 1},
+ {"matrix": [1, 3], "x": 3.5, "y": 1},
+ {"matrix": [1, 4], "x": 4.5, "y": 1},
+ {"matrix": [1, 5], "x": 5.5, "y": 1},
+ {"matrix": [1, 6], "x": 6.5, "y": 1},
+ {"matrix": [1, 7], "x": 7.5, "y": 1},
+ {"matrix": [1, 8], "x": 8.5, "y": 1},
+ {"matrix": [1, 9], "x": 9.5, "y": 1},
+ {"matrix": [1, 10], "x": 10.5, "y": 1},
+ {"matrix": [1, 11], "x": 11.5, "y": 1},
+ {"matrix": [1, 12], "x": 12.5, "y": 1},
+ {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"matrix": [2, 1], "x": 1.75, "y": 2},
+ {"matrix": [2, 2], "x": 2.75, "y": 2},
+ {"matrix": [2, 3], "x": 3.75, "y": 2},
+ {"matrix": [2, 4], "x": 4.75, "y": 2},
+ {"matrix": [2, 5], "x": 5.75, "y": 2},
+ {"matrix": [2, 6], "x": 6.75, "y": 2},
+ {"matrix": [2, 7], "x": 7.75, "y": 2},
+ {"matrix": [2, 8], "x": 8.75, "y": 2},
+ {"matrix": [2, 9], "x": 9.75, "y": 2},
+ {"matrix": [2, 10], "x": 10.75, "y": 2},
+ {"matrix": [2, 11], "x": 11.75, "y": 2},
+ {"matrix": [2, 12], "x": 12.75, "y": 2},
+ {"matrix": [2, 13], "x": 13.75, "y": 1, "w": 1.25, "h": 2},
+ {"matrix": [3, 0], "x": 0, "y": 3, "w": 1.25},
+ {"matrix": [3, 1], "x": 1.25, "y": 3},
+ {"matrix": [3, 2], "x": 2.25, "y": 3},
+ {"matrix": [3, 3], "x": 3.25, "y": 3},
+ {"matrix": [3, 4], "x": 4.25, "y": 3},
+ {"matrix": [3, 5], "x": 5.25, "y": 3},
+ {"matrix": [3, 6], "x": 6.25, "y": 3},
+ {"matrix": [3, 7], "x": 7.25, "y": 3},
+ {"matrix": [3, 8], "x": 8.25, "y": 3},
+ {"matrix": [3, 9], "x": 9.25, "y": 3},
+ {"matrix": [3, 10], "x": 10.25, "y": 3},
+ {"matrix": [3, 11], "x": 11.25, "y": 3},
+ {"matrix": [3, 12], "x": 12.25, "y": 3, "w": 2.75},
+ {"matrix": [4, 0], "x": 0, "y": 4, "w": 1.5},
+ {"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.5},
+ {"matrix": [4, 6], "x": 4, "y": 4, "w": 7},
+ {"matrix": [4, 11], "x": 11, "y": 4, "w": 1.5},
+ {"matrix": [4, 13], "x": 13.5, "y": 4, "w": 1.5}
+ ]
+ },
+ "LAYOUT_60_iso_wkl_split_bs_rshift": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10, "y": 0},
+ {"matrix": [0, 11], "x": 11, "y": 0},
+ {"matrix": [0, 12], "x": 12, "y": 0},
+ {"matrix": [0, 13], "x": 13, "y": 0},
+ {"matrix": [1, 13], "x": 14, "y": 0},
+ {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"matrix": [1, 1], "x": 1.5, "y": 1},
+ {"matrix": [1, 2], "x": 2.5, "y": 1},
+ {"matrix": [1, 3], "x": 3.5, "y": 1},
+ {"matrix": [1, 4], "x": 4.5, "y": 1},
+ {"matrix": [1, 5], "x": 5.5, "y": 1},
+ {"matrix": [1, 6], "x": 6.5, "y": 1},
+ {"matrix": [1, 7], "x": 7.5, "y": 1},
+ {"matrix": [1, 8], "x": 8.5, "y": 1},
+ {"matrix": [1, 9], "x": 9.5, "y": 1},
+ {"matrix": [1, 10], "x": 10.5, "y": 1},
+ {"matrix": [1, 11], "x": 11.5, "y": 1},
+ {"matrix": [1, 12], "x": 12.5, "y": 1},
+ {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"matrix": [2, 1], "x": 1.75, "y": 2},
+ {"matrix": [2, 2], "x": 2.75, "y": 2},
+ {"matrix": [2, 3], "x": 3.75, "y": 2},
+ {"matrix": [2, 4], "x": 4.75, "y": 2},
+ {"matrix": [2, 5], "x": 5.75, "y": 2},
+ {"matrix": [2, 6], "x": 6.75, "y": 2},
+ {"matrix": [2, 7], "x": 7.75, "y": 2},
+ {"matrix": [2, 8], "x": 8.75, "y": 2},
+ {"matrix": [2, 9], "x": 9.75, "y": 2},
+ {"matrix": [2, 10], "x": 10.75, "y": 2},
+ {"matrix": [2, 11], "x": 11.75, "y": 2},
+ {"matrix": [2, 12], "x": 12.75, "y": 2},
+ {"matrix": [2, 13], "x": 13.75, "y": 1, "w": 1.25, "h": 2},
+ {"matrix": [3, 0], "x": 0, "y": 3, "w": 1.25},
+ {"matrix": [3, 1], "x": 1.25, "y": 3},
+ {"matrix": [3, 2], "x": 2.25, "y": 3},
+ {"matrix": [3, 3], "x": 3.25, "y": 3},
+ {"matrix": [3, 4], "x": 4.25, "y": 3},
+ {"matrix": [3, 5], "x": 5.25, "y": 3},
+ {"matrix": [3, 6], "x": 6.25, "y": 3},
+ {"matrix": [3, 7], "x": 7.25, "y": 3},
+ {"matrix": [3, 8], "x": 8.25, "y": 3},
+ {"matrix": [3, 9], "x": 9.25, "y": 3},
+ {"matrix": [3, 10], "x": 10.25, "y": 3},
+ {"matrix": [3, 11], "x": 11.25, "y": 3},
+ {"matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75},
+ {"matrix": [3, 13], "x": 14, "y": 3},
+ {"matrix": [4, 0], "x": 0, "y": 4, "w": 1.5},
+ {"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.5},
+ {"matrix": [4, 6], "x": 4, "y": 4, "w": 7},
+ {"matrix": [4, 11], "x": 11, "y": 4, "w": 1.5},
+ {"matrix": [4, 13], "x": 13.5, "y": 4, "w": 1.5}
+ ]
+ },
+ "LAYOUT_60_tsangan_hhkb": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10, "y": 0},
+ {"matrix": [0, 11], "x": 11, "y": 0},
+ {"matrix": [0, 12], "x": 12, "y": 0},
+ {"matrix": [0, 13], "x": 13, "y": 0},
+ {"matrix": [1, 13], "x": 14, "y": 0},
+ {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"matrix": [1, 1], "x": 1.5, "y": 1},
+ {"matrix": [1, 2], "x": 2.5, "y": 1},
+ {"matrix": [1, 3], "x": 3.5, "y": 1},
+ {"matrix": [1, 4], "x": 4.5, "y": 1},
+ {"matrix": [1, 5], "x": 5.5, "y": 1},
+ {"matrix": [1, 6], "x": 6.5, "y": 1},
+ {"matrix": [1, 7], "x": 7.5, "y": 1},
+ {"matrix": [1, 8], "x": 8.5, "y": 1},
+ {"matrix": [1, 9], "x": 9.5, "y": 1},
+ {"matrix": [1, 10], "x": 10.5, "y": 1},
+ {"matrix": [1, 11], "x": 11.5, "y": 1},
+ {"matrix": [1, 12], "x": 12.5, "y": 1},
+ {"matrix": [2, 12], "x": 13.5, "y": 1, "w": 1.5},
+ {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"matrix": [2, 1], "x": 1.75, "y": 2},
+ {"matrix": [2, 2], "x": 2.75, "y": 2},
+ {"matrix": [2, 3], "x": 3.75, "y": 2},
+ {"matrix": [2, 4], "x": 4.75, "y": 2},
+ {"matrix": [2, 5], "x": 5.75, "y": 2},
+ {"matrix": [2, 6], "x": 6.75, "y": 2},
+ {"matrix": [2, 7], "x": 7.75, "y": 2},
+ {"matrix": [2, 8], "x": 8.75, "y": 2},
+ {"matrix": [2, 9], "x": 9.75, "y": 2},
+ {"matrix": [2, 10], "x": 10.75, "y": 2},
+ {"matrix": [2, 11], "x": 11.75, "y": 2},
+ {"matrix": [2, 13], "x": 12.75, "y": 2, "w": 2.25},
+ {"matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
+ {"matrix": [3, 2], "x": 2.25, "y": 3},
+ {"matrix": [3, 3], "x": 3.25, "y": 3},
+ {"matrix": [3, 4], "x": 4.25, "y": 3},
+ {"matrix": [3, 5], "x": 5.25, "y": 3},
+ {"matrix": [3, 6], "x": 6.25, "y": 3},
+ {"matrix": [3, 7], "x": 7.25, "y": 3},
+ {"matrix": [3, 8], "x": 8.25, "y": 3},
+ {"matrix": [3, 9], "x": 9.25, "y": 3},
+ {"matrix": [3, 10], "x": 10.25, "y": 3},
+ {"matrix": [3, 11], "x": 11.25, "y": 3},
+ {"matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75},
+ {"matrix": [3, 13], "x": 14, "y": 3},
+ {"matrix": [4, 0], "x": 0, "y": 4, "w": 1.5},
+ {"matrix": [4, 1], "x": 1.5, "y": 4},
+ {"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.5},
+ {"matrix": [4, 6], "x": 4, "y": 4, "w": 7},
+ {"matrix": [4, 11], "x": 11, "y": 4, "w": 1.5},
+ {"matrix": [4, 12], "x": 12.5, "y": 4},
+ {"matrix": [4, 13], "x": 13.5, "y": 4, "w": 1.5}
+ ]
+ },
+ "LAYOUT_all": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10, "y": 0},
+ {"matrix": [0, 11], "x": 11, "y": 0},
+ {"matrix": [0, 12], "x": 12, "y": 0},
+ {"matrix": [0, 13], "x": 13, "y": 0},
+ {"matrix": [1, 13], "x": 14, "y": 0},
+ {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"matrix": [1, 1], "x": 1.5, "y": 1},
+ {"matrix": [1, 2], "x": 2.5, "y": 1},
+ {"matrix": [1, 3], "x": 3.5, "y": 1},
+ {"matrix": [1, 4], "x": 4.5, "y": 1},
+ {"matrix": [1, 5], "x": 5.5, "y": 1},
+ {"matrix": [1, 6], "x": 6.5, "y": 1},
+ {"matrix": [1, 7], "x": 7.5, "y": 1},
+ {"matrix": [1, 8], "x": 8.5, "y": 1},
+ {"matrix": [1, 9], "x": 9.5, "y": 1},
+ {"matrix": [1, 10], "x": 10.5, "y": 1},
+ {"matrix": [1, 11], "x": 11.5, "y": 1},
+ {"matrix": [1, 12], "x": 12.5, "y": 1},
+ {"matrix": [2, 12], "x": 13.5, "y": 1, "w": 1.5},
+ {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"matrix": [2, 1], "x": 1.75, "y": 2},
+ {"matrix": [2, 2], "x": 2.75, "y": 2},
+ {"matrix": [2, 3], "x": 3.75, "y": 2},
+ {"matrix": [2, 4], "x": 4.75, "y": 2},
+ {"matrix": [2, 5], "x": 5.75, "y": 2},
+ {"matrix": [2, 6], "x": 6.75, "y": 2},
+ {"matrix": [2, 7], "x": 7.75, "y": 2},
+ {"matrix": [2, 8], "x": 8.75, "y": 2},
+ {"matrix": [2, 9], "x": 9.75, "y": 2},
+ {"matrix": [2, 10], "x": 10.75, "y": 2},
+ {"matrix": [2, 11], "x": 11.75, "y": 2},
+ {"matrix": [2, 13], "x": 12.75, "y": 2, "w": 2.25},
+ {"matrix": [3, 0], "x": 0, "y": 3, "w": 1.25},
+ {"matrix": [3, 1], "x": 1.25, "y": 3},
+ {"matrix": [3, 2], "x": 2.25, "y": 3},
+ {"matrix": [3, 3], "x": 3.25, "y": 3},
+ {"matrix": [3, 4], "x": 4.25, "y": 3},
+ {"matrix": [3, 5], "x": 5.25, "y": 3},
+ {"matrix": [3, 6], "x": 6.25, "y": 3},
+ {"matrix": [3, 7], "x": 7.25, "y": 3},
+ {"matrix": [3, 8], "x": 8.25, "y": 3},
+ {"matrix": [3, 9], "x": 9.25, "y": 3},
+ {"matrix": [3, 10], "x": 10.25, "y": 3},
+ {"matrix": [3, 11], "x": 11.25, "y": 3},
+ {"matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75},
+ {"matrix": [3, 13], "x": 14, "y": 3},
+ {"matrix": [4, 0], "x": 0, "y": 4, "w": 1.25},
+ {"matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.25},
+ {"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.25},
+ {"matrix": [4, 6], "x": 3.75, "y": 4, "w": 6.25},
+ {"matrix": [4, 10], "x": 10, "y": 4, "w": 1.25},
+ {"matrix": [4, 11], "x": 11.25, "y": 4, "w": 1.25},
+ {"matrix": [4, 12], "x": 12.5, "y": 4, "w": 1.25},
+ {"matrix": [4, 13], "x": 13.75, "y": 4, "w": 1.25}
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/keyboards/argyle/keymaps/default/keymap.c b/keyboards/argyle/keymaps/default/keymap.c
new file mode 100644
index 000000000000..e4cdf5625df9
--- /dev/null
+++ b/keyboards/argyle/keymaps/default/keymap.c
@@ -0,0 +1,34 @@
+/* Copyright 2020 Yiancar
+ *
+ * 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 .
+ */
+#include QMK_KEYBOARD_H
+
+//This is the ANSI version of the PCB
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+[0] = LAYOUT_60_ansi_split_bs_rshift( /* Base */
+ QK_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, 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_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_RSFT,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1) , KC_APP, KC_RCTL),
+
+[1] = LAYOUT_60_ansi_split_bs_rshift( /* FN */
+ 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_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS)
+};
diff --git a/keyboards/argyle/keymaps/iso/keymap.c b/keyboards/argyle/keymaps/iso/keymap.c
new file mode 100644
index 000000000000..fe2de3a3e58b
--- /dev/null
+++ b/keyboards/argyle/keymaps/iso/keymap.c
@@ -0,0 +1,34 @@
+/* Copyright 2020 Yiancar
+ *
+ * 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 .
+ */
+#include QMK_KEYBOARD_H
+
+//This is the ISO version of the PCB
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+[0] = LAYOUT_60_iso_split_bs_rshift( /* Base */
+ QK_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, 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_CAPS, 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_RSFT,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1) , KC_APP, KC_RCTL),
+
+[1] = LAYOUT_60_iso_split_bs_rshift( /* FN */
+ 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_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS ,
+ KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, 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, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS)
+};
diff --git a/keyboards/argyle/keymaps/via/keymap.c b/keyboards/argyle/keymaps/via/keymap.c
new file mode 100644
index 000000000000..4efbdb2f3061
--- /dev/null
+++ b/keyboards/argyle/keymaps/via/keymap.c
@@ -0,0 +1,34 @@
+/* Copyright 2020 Yiancar
+ *
+ * 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 .
+ */
+#include QMK_KEYBOARD_H
+
+// This keymaps is used for VIA, it reflects the default keymap.
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+[0] = LAYOUT_all( /* Base */
+ QK_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, 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_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_BSLS, 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, MO(1),
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1) , KC_APP, KC_RCTL),
+
+[1] = LAYOUT_all( /* FN */
+ 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_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, 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, 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)
+};
diff --git a/keyboards/dztech/og60/keymaps/via/rules.mk b/keyboards/argyle/keymaps/via/rules.mk
similarity index 100%
rename from keyboards/dztech/og60/keymaps/via/rules.mk
rename to keyboards/argyle/keymaps/via/rules.mk
diff --git a/keyboards/argyle/matrix.c b/keyboards/argyle/matrix.c
new file mode 100644
index 000000000000..7430c6d9d80a
--- /dev/null
+++ b/keyboards/argyle/matrix.c
@@ -0,0 +1,169 @@
+/*
+Copyright 2012-2020 Jun Wako, Jack Humbert, Yiancar
+
+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 .
+*/
+#include "atomic_util.h"
+#include "wait.h"
+#include "matrix.h"
+#include "i2c_master.h"
+
+#define PORT_EXPANDER_ADDRESS 0x20
+
+static const pin_t row_pins[MATRIX_ROWS] = MATRIX_ROW_PINS;
+static const pin_t col_pins[MATRIX_COLS] = MATRIX_COL_PINS;
+
+static inline void setPinOutput_writeLow(pin_t pin) {
+ ATOMIC_BLOCK_FORCEON {
+ setPinOutput(pin);
+ writePinLow(pin);
+ }
+}
+
+static inline void setPinOutput_writeHigh(pin_t pin) {
+ ATOMIC_BLOCK_FORCEON {
+ setPinOutput(pin);
+ writePinHigh(pin);
+ }
+}
+
+static inline void setPinInputHigh_atomic(pin_t pin) {
+ ATOMIC_BLOCK_FORCEON {
+ setPinInputHigh(pin);
+ }
+}
+
+static inline uint8_t readMatrixPin(pin_t pin) {
+ if (pin != NO_PIN) {
+ return (readPin(pin) == 0) ? 0 : 1;
+ } else {
+ return 1;
+ }
+}
+
+static bool select_row(uint8_t row) {
+ pin_t pin = row_pins[row];
+ if (pin != NO_PIN) {
+ setPinOutput_writeLow(pin);
+ return true;
+ }
+ return false;
+}
+
+static void unselect_row(uint8_t row) {
+ pin_t pin = row_pins[row];
+ if (pin != NO_PIN) {
+ setPinInputHigh_atomic(pin);
+ }
+}
+
+static void unselect_rows(void) {
+ for (uint8_t x = 0; x < MATRIX_ROWS; x++) {
+ unselect_row(x);
+ }
+}
+
+static void init_pins(void) {
+ unselect_rows();
+ // Set I/O
+ uint8_t send_data = 0xFF;
+ i2c_writeReg((PORT_EXPANDER_ADDRESS << 1), 0x00, &send_data, 1, 20);
+ // Set Pull-up
+ i2c_writeReg((PORT_EXPANDER_ADDRESS << 1), 0x06, &send_data, 1, 20);
+
+ for (uint8_t x = 0; x < MATRIX_COLS; x++) {
+ if (col_pins[x] != NO_PIN) {
+ setPinInputHigh_atomic(col_pins[x]);
+ }
+ }
+}
+
+void matrix_init_custom(void) {
+ // TODO: initialize hardware here
+ // Initialize I2C
+ i2c_init();
+
+ // initialize key pins
+ init_pins();
+ wait_ms(50);
+}
+
+static bool matrix_read_cols_on_row(matrix_row_t current_matrix[], uint8_t current_row) {
+ // Store last value of row prior to reading
+ matrix_row_t last_row_value = current_matrix[current_row];
+
+ // Clear data in matrix row
+ current_matrix[current_row] = 0;
+
+ // Select row and wait for row selecton to stabilize
+ select_row(current_row);
+ matrix_output_select_delay();
+
+ uint8_t port_expander_buffer;
+ i2c_readReg((PORT_EXPANDER_ADDRESS << 1), 0x09, &port_expander_buffer, 1, 20);
+
+ // For each col...
+ // matrix_row_t row_shifter = MATRIX_ROW_SHIFTER;
+ for(uint8_t col_index = 0; col_index < MATRIX_COLS; col_index++) {
+ uint8_t pin_state;
+ // Select the col pin to read (active low)
+ switch (col_index) {
+ case 6 :
+ pin_state = port_expander_buffer & (1 << 0);
+ break;
+ case 7 :
+ pin_state = port_expander_buffer & (1 << 1);
+ break;
+ case 8 :
+ pin_state = port_expander_buffer & (1 << 2);
+ break;
+ case 9 :
+ pin_state = port_expander_buffer & (1 << 3);
+ break;
+ case 10 :
+ pin_state = port_expander_buffer & (1 << 4);
+ break;
+ case 11 :
+ pin_state = port_expander_buffer & (1 << 5);
+ break;
+ case 12 :
+ pin_state = port_expander_buffer & (1 << 6);
+ break;
+ case 13 :
+ pin_state = port_expander_buffer & (1 << 7);
+ break;
+ default :
+ pin_state = readMatrixPin(col_pins[col_index]);
+ }
+
+ // Populate the matrix row with the state of the col pin
+ current_matrix[current_row] |= pin_state ? 0 : (MATRIX_ROW_SHIFTER << col_index);
+ }
+
+ // Unselect row
+ unselect_row(current_row);
+
+ return (last_row_value != current_matrix[current_row]);
+}
+
+bool matrix_scan_custom(matrix_row_t current_matrix[]) {
+ bool matrix_has_changed = false;
+
+ // Set row, read cols
+ for (uint8_t current_row = 0; current_row < MATRIX_ROWS; current_row++) {
+ matrix_has_changed |= matrix_read_cols_on_row(current_matrix, current_row);
+ }
+
+ return matrix_has_changed;
+}
diff --git a/keyboards/argyle/readme.md b/keyboards/argyle/readme.md
new file mode 100644
index 000000000000..4a473a33ac77
--- /dev/null
+++ b/keyboards/argyle/readme.md
@@ -0,0 +1,23 @@
+# Argyle
+
+![argyle](https://i.imgur.com/6x7ZYhxh.png)
+
+A 60 percent through hole keyboard with RGB and windows
+
+Keyboard Maintainer: [Yiancar](http://yiancar-designs.com/) and on [GitHub](https://github.com/yiancar)
+Hardware Supported: ATMEGA328p with vusb
+Hardware Availability: https://prototypist.net/
+
+Make example for this keyboard (after setting up your build environment):
+
+ make argyle:default
+
+Flashing example for this keyboard:
+
+ make argyle:default:flash
+
+Bootloader:
+use usbasploader HSGW's my repository.
+https://github.com/hsgw/USBaspLoader/tree/plaid
+To put the board in bootloader, either press and hold escape as you plug in, or press the button under the spacebar as you plug in.
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/argyle/rules.mk b/keyboards/argyle/rules.mk
new file mode 100644
index 000000000000..ae480278de22
--- /dev/null
+++ b/keyboards/argyle/rules.mk
@@ -0,0 +1,2 @@
+SRC += matrix.c
+I2C_DRIVER_REQUIRED = yes
diff --git a/keyboards/arisu/keymaps/fate/keymap.c b/keyboards/arisu/keymaps/fate/keymap.c
deleted file mode 100644
index 9db8fcdbd13c..000000000000
--- a/keyboards/arisu/keymaps/fate/keymap.c
+++ /dev/null
@@ -1,67 +0,0 @@
-/* Copyright 2019 Fate
- *
- * 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 .
- */
-#include QMK_KEYBOARD_H
-
-enum arisu_layers {
- _QWERTY,
- _FN,
- _ADJUST
-};
-
-// Tap Dance Declarations
-enum {
- TD_LALT_LGUI = 0,
- TD_RALT_RGUI
-};
-
-#define FN MO(_FN)
-#define ADJUST MO(_ADJUST)
-#define LALT_LG TD(TD_LALT_LGUI)
-#define RALT_RG TD(TD_RALT_RGUI)
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [_QWERTY] = LAYOUT(
- KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_GRV, 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_BSPC, KC_PGDN,
- KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, ADJUST,
- 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, LALT_LG, KC_SPC, FN, KC_SPC, RALT_RG, KC_LEFT, KC_DOWN, KC_RGHT
- ),
-
- [_FN] = LAYOUT(
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- KC_CAPS, _______, _______, _______, _______, _______, _______, KC_PSCR, KC_SCRL, KC_PAUS, _______, _______, _______, KC_DEL, _______,
- _______, 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_APP, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______
- ),
-
- [_ADJUST] = LAYOUT(
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_HOME,
- KC_CAPS, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL, KC_END,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MPLY, _______,
- _______, _______, _______, _______, _______, QK_BOOT, _______, _______, _______, _______, _______, _______, KC_VOLU,
- _______, _______, _______, _______, _______, _______, KC_MPRV, KC_VOLD, KC_MNXT
- )
-};
-
-// Tap Dance Definitions
-tap_dance_action_t tap_dance_actions[] = {
- // Tap once for L-Alt, twice for L-GUI
- [TD_LALT_LGUI] = ACTION_TAP_DANCE_DOUBLE(KC_LALT, KC_LGUI),
- // Tap once for R-Alt, twice for R-GUI
- [TD_RALT_RGUI] = ACTION_TAP_DANCE_DOUBLE(KC_RALT, KC_RGUI)
-};
diff --git a/keyboards/arisu/keymaps/fate/readme.md b/keyboards/arisu/keymaps/fate/readme.md
deleted file mode 100644
index c1239a09ffc1..000000000000
--- a/keyboards/arisu/keymaps/fate/readme.md
+++ /dev/null
@@ -1 +0,0 @@
-# The keymap of arisu's creator
\ No newline at end of file
diff --git a/keyboards/arisu/keymaps/fate/rules.mk b/keyboards/arisu/keymaps/fate/rules.mk
deleted file mode 100644
index e5ddcae8d927..000000000000
--- a/keyboards/arisu/keymaps/fate/rules.mk
+++ /dev/null
@@ -1 +0,0 @@
-TAP_DANCE_ENABLE = yes
diff --git a/keyboards/arisu/keymaps/kresnak/keymap.c b/keyboards/arisu/keymaps/kresnak/keymap.c
deleted file mode 100644
index 05a0e6ba4cd0..000000000000
--- a/keyboards/arisu/keymaps/kresnak/keymap.c
+++ /dev/null
@@ -1,39 +0,0 @@
-/* Copyright 2019 Fate
- *
- * 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 .
- */
-#include QMK_KEYBOARD_H
-
-
-// Defines the keycodes used by our macros in process_record_user
-
-#define FN MO(1)
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [0] = LAYOUT( /* Base */
- 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_GRV, KC_BSPC, 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_BSPC, 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, FN,
- 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_LALT, KC_SPC, KC_LGUI, KC_SPC, KC_RALT, KC_LEFT, KC_DOWN, KC_RGHT
- ),
-
- [1] = LAYOUT(
- _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, KC_DEL, KC_HOME,
- _______, _______, _______, _______, QK_BOOT, _______, _______, _______, _______, _______, KC_PSCR, _______, _______, _______, KC_END,
- _______, 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_BSLS, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______
- )
-};
diff --git a/keyboards/arisu/keymaps/stanrc85/keymap.c b/keyboards/arisu/keymaps/stanrc85/keymap.c
deleted file mode 100644
index 417b1663b5df..000000000000
--- a/keyboards/arisu/keymaps/stanrc85/keymap.c
+++ /dev/null
@@ -1,50 +0,0 @@
-/* Copyright 2021 Stanrc85
- *
- * 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 .
- */
-#include QMK_KEYBOARD_H
-#include "stanrc85.h"
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [_QWERTY] = LAYOUT(
- 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_BSPC, 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_PGDN,
- KC_CTLE, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, MO(_FN2_60),
- 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_LALT, LT_BPCF, KC_LGUI, LT_SPCF, TD_TWIN, KC_LEFT, KC_DOWN, KC_RGHT
- ),
-
- [_DEFAULT] = LAYOUT(
- QK_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_GRV, 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_BSPC, 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, MO(_FN2_60),
- 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_LALT, KC_SPC, MO(_FN1_60), KC_SPC, KC_RALT, KC_LEFT, KC_DOWN, KC_RGHT
- ),
-
- [_FN1_60] = LAYOUT(
- KC_TILD, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_DEL, _______,
- _______, _______, CA_QUOT, _______, CA_SCLN, KC_VOLU, KC_PGUP, KC_BSPC, KC_UP, KC_DEL, KC_PSCR, _______, _______, KC_INS, _______,
- KC_CAPS, _______, _______, KC_LCTL, KC_LSFT, KC_VOLD, KC_PGDN, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______,
- _______, KC_RDP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______
- ),
- [_FN2_60] = LAYOUT(
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, QK_BOOT, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MAKE, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, TG(_DEFAULT)
- )
-};
diff --git a/keyboards/arisu/keymaps/stanrc85/rules.mk b/keyboards/arisu/keymaps/stanrc85/rules.mk
deleted file mode 100644
index 9db643c8e64d..000000000000
--- a/keyboards/arisu/keymaps/stanrc85/rules.mk
+++ /dev/null
@@ -1 +0,0 @@
-USER_NAME := stanrc85
\ No newline at end of file
diff --git a/keyboards/artifact/lvl/rev_hs01/config.h b/keyboards/artifact/lvl/rev_hs01/config.h
new file mode 100755
index 000000000000..674fb1110c86
--- /dev/null
+++ b/keyboards/artifact/lvl/rev_hs01/config.h
@@ -0,0 +1,25 @@
+/*
+Copyright 2024 Yiancar-Designs
+
+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 .
+*/
+
+#pragma once
+
+/* RGB Light */
+#define WS2812_PWM_DRIVER PWMD1
+#define WS2812_DMA_STREAM STM32_DMA1_STREAM5
+#define WS2812_DMA_CHANNEL 5
+
+#define WS2812_BYTE_ORDER WS2812_BYTE_ORDER_RGB
diff --git a/keyboards/artifact/lvl/rev_hs01/halconf.h b/keyboards/artifact/lvl/rev_hs01/halconf.h
new file mode 100644
index 000000000000..c7f5bab5c855
--- /dev/null
+++ b/keyboards/artifact/lvl/rev_hs01/halconf.h
@@ -0,0 +1,21 @@
+/* Copyright 2024 Yiancar-Designs
+ *
+ * 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 .
+ */
+
+#pragma once
+
+#define HAL_USE_PWM TRUE
+
+#include_next
diff --git a/keyboards/artifact/lvl/rev_hs01/info.json b/keyboards/artifact/lvl/rev_hs01/info.json
new file mode 100755
index 000000000000..1b5875015503
--- /dev/null
+++ b/keyboards/artifact/lvl/rev_hs01/info.json
@@ -0,0 +1,232 @@
+{
+ "manufacturer": "Yiancar-Designs",
+ "keyboard_name": "LvL Type-01/80",
+ "maintainer": "Yiancar-Designs",
+ "bootloader": "stm32-dfu",
+ "diode_direction": "COL2ROW",
+ "features": {
+ "bootmagic": true,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true,
+ "rgblight": true
+ },
+ "indicators": {
+ "caps_lock": "B6",
+ "on_state": 0
+ },
+ "matrix_pins": {
+ "cols": ["A1", "B9", "A3", "A4", "A5", "A6", "A7", "B0", "B1", "B2", "B10", "B11", "B12", "B13", "B14", "B15", "A8"],
+ "rows": ["A2", "A14", "A15", "B3", "B4", "B5"]
+ },
+ "processor": "STM32F072",
+ "rgblight": {
+ "animations": {
+ "alternating": true,
+ "breathing": true,
+ "christmas": true,
+ "knight": true,
+ "rainbow_mood": true,
+ "rainbow_swirl": true,
+ "rgb_test": true,
+ "snake": true,
+ "static_gradient": true,
+ "twinkle": true
+ },
+ "default": {
+ "sat": 0
+ },
+ "led_count": 1
+ },
+ "url": "https://yiancar-designs.com",
+ "usb": {
+ "device_version": "0.0.1",
+ "pid": "0x4C56",
+ "vid": "0x8968"
+ },
+ "ws2812": {
+ "driver": "pwm",
+ "pin": "A9"
+ },
+ "community_layouts": ["tkl_ansi_tsangan"],
+ "layouts": {
+ "LAYOUT_tkl_ansi_tsangan": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 2, "y": 0},
+ {"matrix": [0, 2], "x": 3, "y": 0},
+ {"matrix": [0, 3], "x": 4, "y": 0},
+ {"matrix": [0, 4], "x": 5, "y": 0},
+ {"matrix": [0, 5], "x": 6.5, "y": 0},
+ {"matrix": [0, 6], "x": 7.5, "y": 0},
+ {"matrix": [0, 7], "x": 8.5, "y": 0},
+ {"matrix": [0, 8], "x": 9.5, "y": 0},
+ {"matrix": [0, 9], "x": 11, "y": 0},
+ {"matrix": [0, 10], "x": 12, "y": 0},
+ {"matrix": [0, 11], "x": 13, "y": 0},
+ {"matrix": [0, 12], "x": 14, "y": 0},
+ {"matrix": [0, 14], "x": 15.25, "y": 0},
+ {"matrix": [0, 15], "x": 16.25, "y": 0},
+ {"matrix": [0, 16], "x": 17.25, "y": 0},
+ {"matrix": [1, 0], "x": 0, "y": 1.25},
+ {"matrix": [1, 1], "x": 1, "y": 1.25},
+ {"matrix": [1, 2], "x": 2, "y": 1.25},
+ {"matrix": [1, 3], "x": 3, "y": 1.25},
+ {"matrix": [1, 4], "x": 4, "y": 1.25},
+ {"matrix": [1, 5], "x": 5, "y": 1.25},
+ {"matrix": [1, 6], "x": 6, "y": 1.25},
+ {"matrix": [1, 7], "x": 7, "y": 1.25},
+ {"matrix": [1, 8], "x": 8, "y": 1.25},
+ {"matrix": [1, 9], "x": 9, "y": 1.25},
+ {"matrix": [1, 10], "x": 10, "y": 1.25},
+ {"matrix": [1, 11], "x": 11, "y": 1.25},
+ {"matrix": [1, 12], "x": 12, "y": 1.25},
+ {"matrix": [1, 13], "x": 13, "y": 1.25, "w": 2},
+ {"matrix": [1, 14], "x": 15.25, "y": 1.25},
+ {"matrix": [1, 15], "x": 16.25, "y": 1.25},
+ {"matrix": [1, 16], "x": 17.25, "y": 1.25},
+ {"matrix": [2, 0], "x": 0, "y": 2.25, "w": 1.5},
+ {"matrix": [2, 1], "x": 1.5, "y": 2.25},
+ {"matrix": [2, 2], "x": 2.5, "y": 2.25},
+ {"matrix": [2, 3], "x": 3.5, "y": 2.25},
+ {"matrix": [2, 4], "x": 4.5, "y": 2.25},
+ {"matrix": [2, 5], "x": 5.5, "y": 2.25},
+ {"matrix": [2, 6], "x": 6.5, "y": 2.25},
+ {"matrix": [2, 7], "x": 7.5, "y": 2.25},
+ {"matrix": [2, 8], "x": 8.5, "y": 2.25},
+ {"matrix": [2, 9], "x": 9.5, "y": 2.25},
+ {"matrix": [2, 10], "x": 10.5, "y": 2.25},
+ {"matrix": [2, 11], "x": 11.5, "y": 2.25},
+ {"matrix": [2, 12], "x": 12.5, "y": 2.25},
+ {"matrix": [3, 12], "x": 13.5, "y": 2.25, "w": 1.5},
+ {"matrix": [2, 14], "x": 15.25, "y": 2.25},
+ {"matrix": [2, 15], "x": 16.25, "y": 2.25},
+ {"matrix": [2, 16], "x": 17.25, "y": 2.25},
+ {"matrix": [3, 0], "x": 0, "y": 3.25, "w": 1.75},
+ {"matrix": [3, 1], "x": 1.75, "y": 3.25},
+ {"matrix": [3, 2], "x": 2.75, "y": 3.25},
+ {"matrix": [3, 3], "x": 3.75, "y": 3.25},
+ {"matrix": [3, 4], "x": 4.75, "y": 3.25},
+ {"matrix": [3, 5], "x": 5.75, "y": 3.25},
+ {"matrix": [3, 6], "x": 6.75, "y": 3.25},
+ {"matrix": [3, 7], "x": 7.75, "y": 3.25},
+ {"matrix": [3, 8], "x": 8.75, "y": 3.25},
+ {"matrix": [3, 9], "x": 9.75, "y": 3.25},
+ {"matrix": [3, 10], "x": 10.75, "y": 3.25},
+ {"matrix": [3, 11], "x": 11.75, "y": 3.25},
+ {"matrix": [3, 13], "x": 12.75, "y": 3.25, "w": 2.25},
+ {"matrix": [4, 0], "x": 0, "y": 4.25, "w": 2.25},
+ {"matrix": [4, 2], "x": 2.25, "y": 4.25},
+ {"matrix": [4, 3], "x": 3.25, "y": 4.25},
+ {"matrix": [4, 4], "x": 4.25, "y": 4.25},
+ {"matrix": [4, 5], "x": 5.25, "y": 4.25},
+ {"matrix": [4, 6], "x": 6.25, "y": 4.25},
+ {"matrix": [4, 7], "x": 7.25, "y": 4.25},
+ {"matrix": [4, 8], "x": 8.25, "y": 4.25},
+ {"matrix": [4, 9], "x": 9.25, "y": 4.25},
+ {"matrix": [4, 10], "x": 10.25, "y": 4.25},
+ {"matrix": [4, 11], "x": 11.25, "y": 4.25},
+ {"matrix": [4, 12], "x": 12.25, "y": 4.25, "w": 2.75},
+ {"matrix": [4, 15], "x": 16.25, "y": 4.25},
+ {"matrix": [5, 0], "x": 0, "y": 5.25, "w": 1.5},
+ {"matrix": [5, 1], "x": 1.5, "y": 5.25},
+ {"matrix": [5, 2], "x": 2.5, "y": 5.25, "w": 1.5},
+ {"matrix": [5, 6], "x": 4, "y": 5.25, "w": 7},
+ {"matrix": [5, 11], "x": 11, "y": 5.25, "w": 1.5},
+ {"matrix": [5, 12], "x": 12.5, "y": 5.25},
+ {"matrix": [5, 13], "x": 13.5, "y": 5.25, "w": 1.5},
+ {"matrix": [5, 14], "x": 15.25, "y": 5.25},
+ {"matrix": [5, 15], "x": 16.25, "y": 5.25},
+ {"matrix": [5, 16], "x": 17.25, "y": 5.25}
+ ]
+ },
+ "LAYOUT_tkl_ansi_wkl": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 2, "y": 0},
+ {"matrix": [0, 2], "x": 3, "y": 0},
+ {"matrix": [0, 3], "x": 4, "y": 0},
+ {"matrix": [0, 4], "x": 5, "y": 0},
+ {"matrix": [0, 5], "x": 6.5, "y": 0},
+ {"matrix": [0, 6], "x": 7.5, "y": 0},
+ {"matrix": [0, 7], "x": 8.5, "y": 0},
+ {"matrix": [0, 8], "x": 9.5, "y": 0},
+ {"matrix": [0, 9], "x": 11, "y": 0},
+ {"matrix": [0, 10], "x": 12, "y": 0},
+ {"matrix": [0, 11], "x": 13, "y": 0},
+ {"matrix": [0, 12], "x": 14, "y": 0},
+ {"matrix": [0, 14], "x": 15.25, "y": 0},
+ {"matrix": [0, 15], "x": 16.25, "y": 0},
+ {"matrix": [0, 16], "x": 17.25, "y": 0},
+ {"matrix": [1, 0], "x": 0, "y": 1.25},
+ {"matrix": [1, 1], "x": 1, "y": 1.25},
+ {"matrix": [1, 2], "x": 2, "y": 1.25},
+ {"matrix": [1, 3], "x": 3, "y": 1.25},
+ {"matrix": [1, 4], "x": 4, "y": 1.25},
+ {"matrix": [1, 5], "x": 5, "y": 1.25},
+ {"matrix": [1, 6], "x": 6, "y": 1.25},
+ {"matrix": [1, 7], "x": 7, "y": 1.25},
+ {"matrix": [1, 8], "x": 8, "y": 1.25},
+ {"matrix": [1, 9], "x": 9, "y": 1.25},
+ {"matrix": [1, 10], "x": 10, "y": 1.25},
+ {"matrix": [1, 11], "x": 11, "y": 1.25},
+ {"matrix": [1, 12], "x": 12, "y": 1.25},
+ {"matrix": [1, 13], "x": 13, "y": 1.25, "w": 2},
+ {"matrix": [1, 14], "x": 15.25, "y": 1.25},
+ {"matrix": [1, 15], "x": 16.25, "y": 1.25},
+ {"matrix": [1, 16], "x": 17.25, "y": 1.25},
+ {"matrix": [2, 0], "x": 0, "y": 2.25, "w": 1.5},
+ {"matrix": [2, 1], "x": 1.5, "y": 2.25},
+ {"matrix": [2, 2], "x": 2.5, "y": 2.25},
+ {"matrix": [2, 3], "x": 3.5, "y": 2.25},
+ {"matrix": [2, 4], "x": 4.5, "y": 2.25},
+ {"matrix": [2, 5], "x": 5.5, "y": 2.25},
+ {"matrix": [2, 6], "x": 6.5, "y": 2.25},
+ {"matrix": [2, 7], "x": 7.5, "y": 2.25},
+ {"matrix": [2, 8], "x": 8.5, "y": 2.25},
+ {"matrix": [2, 9], "x": 9.5, "y": 2.25},
+ {"matrix": [2, 10], "x": 10.5, "y": 2.25},
+ {"matrix": [2, 11], "x": 11.5, "y": 2.25},
+ {"matrix": [2, 12], "x": 12.5, "y": 2.25},
+ {"matrix": [3, 12], "x": 13.5, "y": 2.25, "w": 1.5},
+ {"matrix": [2, 14], "x": 15.25, "y": 2.25},
+ {"matrix": [2, 15], "x": 16.25, "y": 2.25},
+ {"matrix": [2, 16], "x": 17.25, "y": 2.25},
+ {"matrix": [3, 0], "x": 0, "y": 3.25, "w": 1.75},
+ {"matrix": [3, 1], "x": 1.75, "y": 3.25},
+ {"matrix": [3, 2], "x": 2.75, "y": 3.25},
+ {"matrix": [3, 3], "x": 3.75, "y": 3.25},
+ {"matrix": [3, 4], "x": 4.75, "y": 3.25},
+ {"matrix": [3, 5], "x": 5.75, "y": 3.25},
+ {"matrix": [3, 6], "x": 6.75, "y": 3.25},
+ {"matrix": [3, 7], "x": 7.75, "y": 3.25},
+ {"matrix": [3, 8], "x": 8.75, "y": 3.25},
+ {"matrix": [3, 9], "x": 9.75, "y": 3.25},
+ {"matrix": [3, 10], "x": 10.75, "y": 3.25},
+ {"matrix": [3, 11], "x": 11.75, "y": 3.25},
+ {"matrix": [3, 13], "x": 12.75, "y": 3.25, "w": 2.25},
+ {"matrix": [4, 0], "x": 0, "y": 4.25, "w": 2.25},
+ {"matrix": [4, 2], "x": 2.25, "y": 4.25},
+ {"matrix": [4, 3], "x": 3.25, "y": 4.25},
+ {"matrix": [4, 4], "x": 4.25, "y": 4.25},
+ {"matrix": [4, 5], "x": 5.25, "y": 4.25},
+ {"matrix": [4, 6], "x": 6.25, "y": 4.25},
+ {"matrix": [4, 7], "x": 7.25, "y": 4.25},
+ {"matrix": [4, 8], "x": 8.25, "y": 4.25},
+ {"matrix": [4, 9], "x": 9.25, "y": 4.25},
+ {"matrix": [4, 10], "x": 10.25, "y": 4.25},
+ {"matrix": [4, 11], "x": 11.25, "y": 4.25},
+ {"matrix": [4, 12], "x": 12.25, "y": 4.25, "w": 2.75},
+ {"matrix": [4, 15], "x": 16.25, "y": 4.25},
+ {"matrix": [5, 0], "x": 0, "y": 5.25, "w": 1.5},
+ {"matrix": [5, 2], "x": 2.5, "y": 5.25, "w": 1.5},
+ {"matrix": [5, 6], "x": 4, "y": 5.25, "w": 7},
+ {"matrix": [5, 11], "x": 11, "y": 5.25, "w": 1.5},
+ {"matrix": [5, 13], "x": 13.5, "y": 5.25, "w": 1.5},
+ {"matrix": [5, 14], "x": 15.25, "y": 5.25},
+ {"matrix": [5, 15], "x": 16.25, "y": 5.25},
+ {"matrix": [5, 16], "x": 17.25, "y": 5.25}
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/keyboards/artifact/lvl/rev_hs01/keymaps/default/keymap.c b/keyboards/artifact/lvl/rev_hs01/keymaps/default/keymap.c
new file mode 100644
index 000000000000..0cca681ba672
--- /dev/null
+++ b/keyboards/artifact/lvl/rev_hs01/keymaps/default/keymap.c
@@ -0,0 +1,27 @@
+/* Copyright 2024 Yiancar-Designs
+ *
+ * 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 .
+ */
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+[0] = LAYOUT_tkl_ansi_tsangan( /* Base */
+ 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_SCRL, KC_PAUS,
+
+ 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_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_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT)
+};
diff --git a/keyboards/artifact/lvl/rev_hs01/keymaps/via/keymap.c b/keyboards/artifact/lvl/rev_hs01/keymaps/via/keymap.c
new file mode 100644
index 000000000000..0cca681ba672
--- /dev/null
+++ b/keyboards/artifact/lvl/rev_hs01/keymaps/via/keymap.c
@@ -0,0 +1,27 @@
+/* Copyright 2024 Yiancar-Designs
+ *
+ * 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 .
+ */
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+[0] = LAYOUT_tkl_ansi_tsangan( /* Base */
+ 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_SCRL, KC_PAUS,
+
+ 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_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_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT)
+};
diff --git a/keyboards/gray_studio/space65/keymaps/conor/rules.mk b/keyboards/artifact/lvl/rev_hs01/keymaps/via/rules.mk
old mode 100644
new mode 100755
similarity index 100%
rename from keyboards/gray_studio/space65/keymaps/conor/rules.mk
rename to keyboards/artifact/lvl/rev_hs01/keymaps/via/rules.mk
diff --git a/keyboards/artifact/lvl/rev_hs01/mcuconf.h b/keyboards/artifact/lvl/rev_hs01/mcuconf.h
new file mode 100644
index 000000000000..73c8c7d3f4f9
--- /dev/null
+++ b/keyboards/artifact/lvl/rev_hs01/mcuconf.h
@@ -0,0 +1,22 @@
+/* Copyright 2024 Yiancar-Designs
+ *
+ * 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 .
+ */
+
+#pragma once
+
+#include_next
+
+#undef STM32_PWM_USE_TIM1
+#define STM32_PWM_USE_TIM1 TRUE
diff --git a/keyboards/artifact/lvl/rev_hs01/readme.md b/keyboards/artifact/lvl/rev_hs01/readme.md
new file mode 100755
index 000000000000..af724bd85cf0
--- /dev/null
+++ b/keyboards/artifact/lvl/rev_hs01/readme.md
@@ -0,0 +1,32 @@
+# LvL Type-01/80
+
+This is a standard TKL layout PCB. It supports VIA.
+
+* Keyboard Maintainer: [Yiancar](http://yiancar-designs.com/) and on [GitHub](https://github.com/yiancar)
+* Hardware Supported: A TKL keyboard with STM32F072CB
+* Hardware Availability: https://artifact-industries.com
+
+## Instructions
+
+### Build
+
+Make example for this keyboard (after setting up your build environment):
+
+ make artifact/lvl/rev_hs01:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+### Reset
+
+- Unplug
+- Hold Escape
+- Plug In
+- Unplug
+- Release Escape
+
+### Flash
+
+- Unplug
+- Hold Escape
+- Plug In
+- Flash using QMK Toolbox or CLI (`make artifact/lvl/rev_hs01::flash`)
diff --git a/keyboards/artifact/lvl/rev_hs01/rev_hs01.c b/keyboards/artifact/lvl/rev_hs01/rev_hs01.c
new file mode 100755
index 000000000000..6266ef69ad5b
--- /dev/null
+++ b/keyboards/artifact/lvl/rev_hs01/rev_hs01.c
@@ -0,0 +1,21 @@
+/* Copyright 2024 Yiancar-Designs
+ *
+ * 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 .
+ */
+#include "quantum.h"
+
+void led_init_ports(void) {
+ // Set our LED pins as open drain outputs
+ setPinOutputOpenDrain(LED_CAPS_LOCK_PIN);
+}
diff --git a/keyboards/artifact/lvl/rev_hs01/rules.mk b/keyboards/artifact/lvl/rev_hs01/rules.mk
new file mode 100755
index 000000000000..0ab54aaaf718
--- /dev/null
+++ b/keyboards/artifact/lvl/rev_hs01/rules.mk
@@ -0,0 +1,2 @@
+# Wildcard to allow APM32 MCU
+DFU_SUFFIX_ARGS = -v FFFF -p FFFF
diff --git a/keyboards/ask55/keymaps/iic/keymap.c b/keyboards/ask55/keymaps/iic/keymap.c
deleted file mode 100644
index 5784307af9f3..000000000000
--- a/keyboards/ask55/keymaps/iic/keymap.c
+++ /dev/null
@@ -1,33 +0,0 @@
-/* Copyright 2022 Yiancar / Keyboard-Magpie
- *
- * 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 .
- */
-#include QMK_KEYBOARD_H
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [0] = LAYOUT( /* Base */
- LT(1,KC_ESC),KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,
- KC_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_NUBS,
- KC_LCTL, 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_RSFT,
- KC_LCAP, KC_GRV, KC_LGUI, KC_LALT, KC_SPC, KC_LGUI, KC_LEFT, KC_RGHT, KC_DOWN, KC_UP
-),
- [1] = LAYOUT( /* Momentary Layer 1 */
- KC_TRNS,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,
- KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
- KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
- KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
- KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS
-),
-};
diff --git a/keyboards/ask55/keymaps/iic/readme.md b/keyboards/ask55/keymaps/iic/readme.md
deleted file mode 100644
index e9300cc04db9..000000000000
--- a/keyboards/ask55/keymaps/iic/readme.md
+++ /dev/null
@@ -1 +0,0 @@
-# The IIc keymap for the ASK55
\ No newline at end of file
diff --git a/keyboards/ask55/keymaps/m0118/keymap.c b/keyboards/ask55/keymaps/m0118/keymap.c
deleted file mode 100644
index 541944f5d6ff..000000000000
--- a/keyboards/ask55/keymaps/m0118/keymap.c
+++ /dev/null
@@ -1,33 +0,0 @@
-/* Copyright 2022 Yiancar / Keyboard-Magpie
- *
- * 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 .
- */
-#include QMK_KEYBOARD_H
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [0] = LAYOUT( /* Base */
- LT(1,KC_ESC),KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,
- KC_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_ENT,
- KC_LCAP, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUBS, KC_TRNS,
- KC_LSFT, KC_GRV, 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_LALT, KC_LGUI, KC_LGUI, KC_SPC, KC_RGUI, KC_RGUI, KC_LEFT, KC_RGHT, KC_DOWN
-),
- [1] = LAYOUT( /* Momentary Layer 1 */
- KC_TRNS,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,
- KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
- KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
- KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
- KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS
-),
-};
diff --git a/keyboards/ask55/keymaps/m0118/readme.md b/keyboards/ask55/keymaps/m0118/readme.md
deleted file mode 100644
index 1bf1a90266e5..000000000000
--- a/keyboards/ask55/keymaps/m0118/readme.md
+++ /dev/null
@@ -1 +0,0 @@
-# The M0118 keymap for the ASK55
\ No newline at end of file
diff --git a/keyboards/ask55/keymaps/mac-portable/keymap.c b/keyboards/ask55/keymaps/mac-portable/keymap.c
deleted file mode 100644
index 056d0aee5a9a..000000000000
--- a/keyboards/ask55/keymaps/mac-portable/keymap.c
+++ /dev/null
@@ -1,33 +0,0 @@
-/* Copyright 2022 Yiancar / Keyboard-Magpie
- *
- * 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 .
- */
-#include QMK_KEYBOARD_H
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [0] = LAYOUT( /* Base */
- LT(1,KC_ESC),KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,
- KC_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_NUBS,
- KC_LCTL, 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_RSFT,
- KC_LCAP, KC_LALT, KC_LGUI, KC_GRV, KC_SPC, KC_ENT, KC_LEFT, KC_RGHT, KC_DOWN, KC_UP
-),
- [1] = LAYOUT( /* Momentary Layer 1 */
- KC_TRNS,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,
- KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
- KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
- KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
- KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS
-),
-};
diff --git a/keyboards/ask55/keymaps/mac-portable/readme.md b/keyboards/ask55/keymaps/mac-portable/readme.md
deleted file mode 100644
index 9c24da473625..000000000000
--- a/keyboards/ask55/keymaps/mac-portable/readme.md
+++ /dev/null
@@ -1 +0,0 @@
-# The Mac Portable keymap for the ASK55
diff --git a/keyboards/ask55/keymaps/next/keymap.c b/keyboards/ask55/keymaps/next/keymap.c
deleted file mode 100644
index ea095ed7959c..000000000000
--- a/keyboards/ask55/keymaps/next/keymap.c
+++ /dev/null
@@ -1,33 +0,0 @@
-/* Copyright 2022 Yiancar / Keyboard-Magpie
- *
- * 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 .
- */
-#include QMK_KEYBOARD_H
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [0] = LAYOUT( /* Base */
- LT(1,KC_ESC),KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,
- KC_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_NUBS,
- KC_LCTL, 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_RSFT,
- KC_LALT, KC_LGUI, KC_TRNS, KC_TRNS, KC_SPC, KC_TRNS, KC_TRNS, KC_RGUI, KC_RGUI, KC_RALT
-),
- [1] = LAYOUT( /* Momentary Layer 1 */
- KC_TRNS,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,
- KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
- KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
- KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
- KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS
-),
-};
diff --git a/keyboards/ask55/keymaps/next/readme.md b/keyboards/ask55/keymaps/next/readme.md
deleted file mode 100644
index 5cb6d33d1b61..000000000000
--- a/keyboards/ask55/keymaps/next/readme.md
+++ /dev/null
@@ -1 +0,0 @@
-# The NeXT (both) keymaps for the ASK55
\ No newline at end of file
diff --git a/keyboards/atlantis/ak81_ve/config.h b/keyboards/atlantis/ak81_ve/config.h
index 28a4e88893b9..c6e12504a3cb 100644
--- a/keyboards/atlantis/ak81_ve/config.h
+++ b/keyboards/atlantis/ak81_ve/config.h
@@ -27,9 +27,7 @@
#define RGB_DISABLE_WHEN_USB_SUSPENDED true
#define RGB_MATRIX_LED_COUNT 96
#define RGB_MATRIX_DEFAULT_HUE 170
-#define RGB_MATRIX_DEFAULT_SAT 255
#define RGB_MATRIX_MAXIMUM_BRIGHTNESS 130
-#define RGB_MATRIX_DEFAULT_VAL RGB_MATRIX_MAXIMUM_BRIGHTNESS
#define ENABLE_RGB_MATRIX_ALPHAS_MODS // Static dual hue, speed is hue for secondary hue
#define ENABLE_RGB_MATRIX_GRADIENT_UP_DOWN // Static gradient top to bottom, speed controls how much gradient changes
diff --git a/keyboards/atlantis/ps17/keymaps/multimedia/keymap.c b/keyboards/atlantis/ps17/keymaps/multimedia/keymap.c
deleted file mode 100644
index 8546cfb71f24..000000000000
--- a/keyboards/atlantis/ps17/keymaps/multimedia/keymap.c
+++ /dev/null
@@ -1,49 +0,0 @@
-// Copyright 2023 mjbogusz (@mjbogusz)
-// SPDX-License-Identifier: GPL-2.0-or-later
-
-#include QMK_KEYBOARD_H
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- // Default layer: numpad + volume control
- [0] = LAYOUT(
- KC_MUTE,
- TO(1), KC_PSLS, KC_PAST, KC_PMNS,
- KC_KP_7, KC_KP_8, KC_KP_9, KC_PPLS,
- KC_KP_4, KC_KP_5, KC_KP_6,
- KC_KP_1, KC_KP_2, KC_KP_3, KC_PENT,
- KC_KP_0, KC_PDOT
- ),
- [1] = LAYOUT(
- KC_MUTE,
- TO(2), XXXXXXX, XXXXXXX, KC_VOLD,
- XXXXXXX, XXXXXXX, XXXXXXX, KC_VOLU,
- KC_MRWD, KC_MPLY, KC_MFFD,
- KC_MPRV, KC_MSTP, KC_MNXT, KC_MSEL,
- XXXXXXX, XXXXXXX
- ),
- [2] = LAYOUT(
- RGB_MOD,
- TO(3), KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS
- ),
- [3] = LAYOUT(
- KC_TRNS,
- TO(0), KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS
- ),
-};
-
-#if defined(ENCODER_MAP_ENABLE)
-const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
- [0] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
- [1] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
- [2] = { ENCODER_CCW_CW(RGB_HUI, RGB_HUD) },
- [3] = { ENCODER_CCW_CW(RGB_HUI, RGB_HUD) },
-};
-#endif
diff --git a/keyboards/atomic/keymaps/abienz/keymap.c b/keyboards/atomic/keymaps/abienz/keymap.c
deleted file mode 100644
index c499807d769c..000000000000
--- a/keyboards/atomic/keymaps/abienz/keymap.c
+++ /dev/null
@@ -1,19 +0,0 @@
-#include QMK_KEYBOARD_H
-#include "keymap_colemak.h"
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [0] = LAYOUT_ortho_5x15(/* Colemak */
- KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, XXXXXXX,
- KC_TAB, CM_Q, CM_W, CM_F, CM_P, CM_G, CM_J, CM_L, CM_U, CM_Y, CM_SCLN, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL,
- KC_BSPC, CM_A, CM_R, CM_S, CM_T, CM_D, CM_H, CM_N, CM_E, CM_I, CM_O, KC_QUOT, KC_ENT, XXXXXXX, KC_PGUP,
- KC_LSFT, CM_Z, CM_X, CM_C, CM_V, CM_B, CM_K, CM_M, CM_COMM, CM_DOT, CM_SLSH, KC_RSFT, XXXXXXX, KC_UP, KC_PGDN,
- KC_LCTL, KC_LGUI, XXXXXXX, KC_LALT, MO(1), KC_SPC, XXXXXXX, KC_RALT, MO(1), KC_RGUI, XXXXXXX, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
- ),
- [1] = LAYOUT_ortho_5x15(/* function */
- 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_BSPC, XXXXXXX,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, KC_SLEP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, KC_CALC, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_VOLU, KC_MPLY,
- _______, _______, XXXXXXX, _______, MO(1), _______, XXXXXXX, _______, MO(1), _______, XXXXXXX, _______, KC_MPRV, KC_VOLD, KC_MNXT
- ),
-};
diff --git a/keyboards/atomic/keymaps/michelle/keymap.c b/keyboards/atomic/keymaps/michelle/keymap.c
deleted file mode 100644
index da6942716801..000000000000
--- a/keyboards/atomic/keymaps/michelle/keymap.c
+++ /dev/null
@@ -1,25 +0,0 @@
-#include QMK_KEYBOARD_H
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [0] = LAYOUT_ortho_5x15( /* Dvorak */
- KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_LBRC, KC_RBRC, KC_BSPC, XXXXXXX,
- KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_SLSH, KC_EQL, KC_INS, KC_DEL,
- KC_CAPS, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS, KC_ENT, XXXXXXX, KC_PGUP,
- KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_RSFT, XXXXXXX, KC_UP, KC_PGDN,
- KC_LCTL, MO(1), XXXXXXX, KC_LALT, XXXXXXX, XXXXXXX, KC_SPC, XXXXXXX, XXXXXXX, XXXXXXX, KC_LGUI, MO(2), KC_LEFT, KC_DOWN, KC_RGHT
- ),
- [1] = LAYOUT_ortho_5x15( /* Qwerty + F keys */
- 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_BSPC, XXXXXXX,
- 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_INS, KC_DEL,
- KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, XXXXXXX, 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, XXXXXXX, KC_UP, KC_PGDN,
- KC_LCTL, _______, XXXXXXX, KC_LALT, XXXXXXX, XXXXXXX, KC_SPC, XXXXXXX, XXXXXXX, XXXXXXX, KC_LGUI, _______, KC_LEFT, KC_DOWN, KC_RGHT
- ),
- [2] = LAYOUT_ortho_5x15( /* Numpad + qwerty shortcut keys */
- KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_P7, KC_P8, KC_P9, KC_0, KC_LBRC, KC_RBRC, KC_BSPC, XXXXXXX,
- KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_P4, KC_P5, KC_P6, KC_L, KC_SLSH, KC_EQL, KC_INS, KC_DEL,
- KC_CAPS, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_P1, KC_P2, KC_P3, KC_S, KC_MINS, KC_ENT, XXXXXXX, KC_PGUP,
- KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_X, KC_B, KC_P0, KC_P0, KC_PENT, KC_Z, KC_RSFT, XXXXXXX, KC_UP, KC_PGDN,
- KC_LCTL, _______, XXXXXXX, KC_LALT, XXXXXXX, XXXXXXX, KC_SPC, XXXXXXX, XXXXXXX, XXXXXXX, KC_LGUI, _______, KC_LEFT, KC_DOWN, KC_RGHT
- ),
-};
diff --git a/keyboards/atomic/keymaps/twolayer/keymap.c b/keyboards/atomic/keymaps/twolayer/keymap.c
deleted file mode 100644
index af235441baec..000000000000
--- a/keyboards/atomic/keymaps/twolayer/keymap.c
+++ /dev/null
@@ -1,46 +0,0 @@
-#include QMK_KEYBOARD_H
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-
- /* QWERTY - MIT ENHANCED / GRID COMPATIBLE
- * .---------------------------------------------------------------------------------------------------------------------- 2u ------------.
- * | ESC | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | XXXXXX . BACKSP |
- * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------|
- * | TAB | Q | W | E | R | T | Y | U | I | O | P | [ | ] | \ | DEL |
- * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ------------+--------|
- * | LCTRL1 | A | S | D | F | G | H | J | K | L | ; | ' | XXXXXX . ENTER | PG UP |
- * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ---------------------+--------|
- * | LSHIFT | Z | X | C | V | B | N | M | , | . | / | XXXXXX . RSHIFT | UP | PG DN |
- * |--------+--------+--------+--------+--------+- 6.25u ---------+--------+--------+--------+--------+-----------------+--------+--------|
- * | BRITE | LALT | FN | XXXXXX . SPACE | RCTRL | RALT | FN | LEFT | DOWN | RIGHT |
- * '--------------------------------------------------------------------------------------------------------------------------------------'
- */
- [0] = LAYOUT_ortho_5x15( /* QWERTY */
- KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC,
- KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL,
- KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_ENT, KC_PGUP,
- KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_RSFT, KC_UP, KC_PGDN,
- BL_STEP, KC_LALT, MO(1), KC_SPC, KC_SPC, KC_SPC, KC_SPC, KC_SPC, KC_SPC, KC_RCTL, KC_RALT, MO(1), KC_LEFT, KC_DOWN, KC_RGHT
- ),
-
- /* FUNCTION
- * .---------------------------------------------------------------------------------------------------------------------- 2u ------------.
- * | GRV | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | XXXXXX . |
- * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------|
- * | SCR LK | F13 | F14 | F15 | F16 | F17 | F18 | F19 | F20 | F21 | F22 | F23 | F24 | PAUSE | PR SCR |
- * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ------------+--------|
- * | CAP LK | MS BT5 | MS BT4 | MS BT3 | MS BT2 | SLOW M | FAST M | NEXT | VOL+ | VOL- | PLAY | | XXXXXX . | WHEEL+ |
- * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ---------------------+--------|
- * | NUM LK | | | | | | | | INSERT | END1 | HOME | XXXXXX . | MOUS U | WHEEL- |
- * |--------+--------+--------+--------+--------+- 6.25 ------------+--------+--------+------+--------+-----------------+--------+--------|
- * | | | FN | XXXXXX . MS BT1 | | | FN | MOUS L | MOUS D | MOUS R |
- * '--------------------------------------------------------------------------------------------------------------------------------------'
- */
- [1] = LAYOUT_ortho_5x15( /* FUNCTION LAYER*/
- 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_SCRL, KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_F21, KC_F22, KC_F23, KC_F24, KC_PAUS, KC_PSCR,
- KC_CAPS, KC_BTN5, KC_BTN4, KC_BTN3, KC_BTN2, KC_ACL0, KC_ACL2, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY, _______, _______, _______, KC_WH_U,
- KC_NUM, _______, _______, _______, _______, _______, _______, _______, KC_INS, KC_END, KC_HOME, _______, _______, KC_MS_U, KC_WH_D,
- _______, _______, MO(1), _______, _______, KC_BTN1, KC_BTN1, _______, _______, _______, _______, MO(1), KC_MS_L, KC_MS_D, KC_MS_R
- ),
-};
diff --git a/keyboards/atreus/keymaps/clash/keymap.c b/keyboards/atreus/keymaps/clash/keymap.c
deleted file mode 100644
index 449f816f79b5..000000000000
--- a/keyboards/atreus/keymaps/clash/keymap.c
+++ /dev/null
@@ -1,41 +0,0 @@
-#include QMK_KEYBOARD_H
-
-// Each layer gets a name for readability, which is then used in the keymap matrix below.
-// The underscores don't mean anything - you can have a layer called STUFF or any other name.
-// Layer names don't all need to be of the same length, obviously, and you can also skip them
-// entirely and just use numbers.
-#define _QW 0
-#define _RS 1
-#define _LW 2
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [_QW] = LAYOUT( /* Qwerty */
- KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P ,
- KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN ,
- KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH ,
- KC_ESC, KC_TAB, KC_LGUI, KC_LSFT, KC_BSPC, KC_LCTL, KC_LALT, KC_SPC, MO(_RS), KC_MINS, KC_QUOT, KC_ENT
- ),
-
- /*
- * ! @ up { } || pgup 7 8 9 *
- * # left down right $ || pgdn 4 5 6 +
- * [ ] ( ) & || ` 1 2 3 \
- * lower insert super shift del ctrl || alt space fn . 0 =
- */
- [_RS] = LAYOUT( /* [> RAISE <] */
- KC_EXLM, KC_AT, KC_UP, KC_LCBR, KC_RCBR, KC_PGUP, KC_7, KC_8, KC_9, KC_ASTR ,
- KC_HASH, KC_LEFT, KC_DOWN, KC_RGHT, KC_DLR, KC_PGDN, KC_4, KC_5, KC_6, KC_PLUS ,
- KC_LBRC, KC_RBRC, KC_LPRN, KC_RPRN, KC_AMPR, KC_GRV, KC_1, KC_2, KC_3, KC_BSLS ,
- TG(_LW), KC_INS, KC_LGUI, KC_LSFT, KC_DEL, KC_LCTL, KC_LALT, KC_SPC, KC_TRNS, KC_DOT, KC_0, KC_EQL ),
- /*
- * insert home mup end pgup || mouse1 F7 F8 F9 F10
- * USB mlft mdwn mrght pgdn || mouse2 F4 F5 F6 F11
- * Blue volup reset || mouse3 F1 F2 F3 F12
- * auto voldn super shift bksp ctrl || alt space L0 prtsc scroll pause
- */
- [_LW] = LAYOUT( /* [> LOWER <] */
- KC_INS, KC_HOME, KC_MS_U, KC_END, KC_PGUP, KC_BTN1, KC_F7, KC_F8, KC_F9, KC_F10 ,
- OU_USB, KC_MS_L, KC_MS_D, KC_MS_R, KC_PGDN, KC_BTN2, KC_F4, KC_F5, KC_F6, KC_F11 ,
- OU_BT, KC_VOLU, KC_NO, KC_NO, QK_BOOT, KC_BTN3, KC_F1, KC_F2, KC_F3, KC_F12 ,
- OU_AUTO, KC_VOLD, KC_LGUI, KC_LSFT, KC_BSPC, KC_LCTL, KC_LALT, KC_SPC, TO(_QW), KC_PSCR, KC_SCRL, KC_PAUS )
-};
diff --git a/keyboards/atreus/keymaps/clash/rules.mk b/keyboards/atreus/keymaps/clash/rules.mk
deleted file mode 100644
index db1870fb1570..000000000000
--- a/keyboards/atreus/keymaps/clash/rules.mk
+++ /dev/null
@@ -1 +0,0 @@
-BLUETOOTH_ENABLE=yes
diff --git a/keyboards/atreus/keymaps/classic/keymap.c b/keyboards/atreus/keymaps/classic/keymap.c
deleted file mode 100644
index 2777edd8e51e..000000000000
--- a/keyboards/atreus/keymaps/classic/keymap.c
+++ /dev/null
@@ -1,32 +0,0 @@
-#include QMK_KEYBOARD_H
-
-// Each layer gets a name for readability, which is then used in the keymap matrix below.
-// The underscores don't mean anything - you can have a layer called STUFF or any other name.
-// Layer names don't all need to be of the same length, obviously, and you can also skip them
-// entirely and just use numbers.
-#define _QW 0
-#define _RS 1
-#define _LW 2
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [_QW] = LAYOUT( /* Qwerty */
- KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P ,
- KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN ,
- KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH ,
- KC_ESC, KC_TAB, KC_LGUI, KC_LSFT, KC_BSPC, KC_LCTL, KC_LALT, KC_SPC, MO(_RS), KC_MINS, KC_QUOT, KC_ENT
- ),
-
- [_RS] = LAYOUT( /* [> RAISE <] */
- KC_EXLM, KC_AT, KC_LCBR, KC_RCBR, KC_PIPE, KC_PGUP, KC_7, KC_8, KC_9, KC_ASTR ,
- KC_HASH, KC_DLR, KC_LPRN, KC_RPRN, KC_GRV, KC_PGDN, KC_4, KC_5, KC_6, KC_PLUS ,
- KC_PERC, KC_CIRC, KC_LBRC, KC_RBRC, KC_TILD, KC_AMPR, KC_1, KC_2, KC_3, KC_BSLS ,
- TG(_LW), KC_INS, KC_LGUI, KC_LSFT, KC_BSPC, KC_LCTL, KC_LALT, KC_SPC, KC_TRNS, KC_DOT, KC_0, KC_EQL
- ),
-
- [_LW] = LAYOUT( /* [> LOWER <] */
- KC_INS, KC_HOME, KC_UP, KC_END, KC_PGUP, KC_UP, KC_F7, KC_F8, KC_F9, KC_F10 ,
- KC_DEL, KC_LEFT, KC_DOWN, KC_RGHT, KC_DOWN, KC_DOWN, KC_F4, KC_F5, KC_F6, KC_F11 ,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F12 ,
- KC_TRNS, KC_TRNS, KC_LGUI, KC_LSFT, KC_BSPC, KC_LCTL, KC_LALT, KC_SPC, DF(_QW), KC_TRNS, KC_TRNS, QK_BOOT
- ),
-};
diff --git a/keyboards/atreus/keymaps/dvorak_42_key/README.md b/keyboards/atreus/keymaps/dvorak_42_key/README.md
deleted file mode 100644
index 86ce7380238c..000000000000
--- a/keyboards/atreus/keymaps/dvorak_42_key/README.md
+++ /dev/null
@@ -1,21 +0,0 @@
-Overview
-========
-
-This is a dvorak based layout for the Atreus. Its basic key layout is similar to the ergodox_ez "dvorak_42_key" layout. In fact this layout was created for seamless switching between the Ergodox EZ and Atreus.
-
-How to build and flash
-----------------------
-
-to build;
-make atreus:dvorak_42_key
-
-to flash:
-avrdude -p atmega32u4 -c avr109 -U flash:w:atreus_dvorak_42_key.hex -P COM7
-
-Layers
-------
-* BASE: basic dvorak layout
-* KEYNAV: arrow-key navigation. Momentary toggle held by thumb allows the right hand to navigate through text as well as copy/paste/cut, page up/page down
-* KEYSEL: similar to KEYNAV, except for shift-selection
-* COMBINED: this is a layer that combines numbers, brackets and special characters. !@#$%^&*( can be type by shift+COMBINED+1/2/3/etc..
-* MOUSE: mouse navigation, as well as browser tab-left/tab-right shortcuts
\ No newline at end of file
diff --git a/keyboards/atreus/keymaps/dvorak_42_key/config.h b/keyboards/atreus/keymaps/dvorak_42_key/config.h
deleted file mode 100644
index ac5db196d96c..000000000000
--- a/keyboards/atreus/keymaps/dvorak_42_key/config.h
+++ /dev/null
@@ -1,15 +0,0 @@
-#pragma once
-
-// place overrides here
-
-// mouse speed
-
-#define MOUSEKEY_INTERVAL 15
-#define MOUSEKEY_DELAY 100
-#define MOUSEKEY_TIME_TO_MAX 100
-#define MOUSEKEY_MAX_SPEED 3
-
-#define MOUSEKEY_WHEEL_DELAY 500
-#define MOUSEKEY_WHEEL_DELTA 1
-#define MOUSEKEY_WHEEL_MAX_SPEED 1
-#define MOUSEKEY_WHEEL_TIME_TO_MAX 100
diff --git a/keyboards/atreus/keymaps/dvorak_42_key/keymap.c b/keyboards/atreus/keymaps/dvorak_42_key/keymap.c
deleted file mode 100644
index c6a628e21768..000000000000
--- a/keyboards/atreus/keymaps/dvorak_42_key/keymap.c
+++ /dev/null
@@ -1,167 +0,0 @@
-
-#include QMK_KEYBOARD_H
-
-// layers
-#define BASE 0
-#define KEYNAV 1
-#define KEYSEL 2
-#define COMBINED 3
-#define BROWSER_CONTROL 4
-
-// aliases
-// shell
-#define SHELL_DEL_WORD RCTL(KC_W)
-
-// comment out to use android studio macros instead
-#define USE_VSCODE_MACROS
-
-// android studio shortcuts
-#define AS_TABLEFT LALT(KC_LEFT)
-#define AS_TABRIGHT LALT(KC_RIGHT)
-#define AS_SYMBOL LCTL(LALT(KC_N))
-#define AS_CLASS LCTL(KC_N)
-#define AS_FINDUSAGE LALT(KC_F7)
-#define AS_BACK LCTL(LALT(KC_LEFT))
-#define AS_GO_DECLARATION LCTL(KC_B)
-#define AS_GO_IMPLEMENTATION LCTL(LALT(KC_B))
-#define AS_CLOSETAB LCTL(KC_F4)
-#define AS_CLOSETOOLWINDOW LCTL(LSFT(KC_F4))
-#define AS_ALTENTER LALT(KC_ENTER)
-
-// visual studio code shortcuts
-#define VS_FILE LCTL(KC_P)
-#define VS_OPEN_FILE LCTL(KC_O)
-#define VS_LINE LCTL(KC_G)
-#define VS_SYMBOLEDITOR LCTL(LSFT(KC_O))
-#define VS_DEFINITION MEH(KC_F5)
-#define VS_IMPLEMENTATION MEH(KC_F6)
-#define VS_REFERENCES MEH(KC_F7)
-#define VS_BACK LALT(KC_LEFT)
-#define VS_BRACKET LCTL(LSFT(KC_BSLS))
-#define VS_TABLEFT MEH(KC_F1)
-#define VS_TABRIGHT MEH(KC_F2)
-#define VS_CLOSETAB MEH(KC_F3)
-#define VS_CLOSEPANEL LCTL(LSFT(KC_W))
-#define VS_GROUP_1 LCTL(KC_1)
-#define VS_GROUP_2 LCTL(KC_2)
-#define VS_TERMINAL LCTL(KC_GRAVE)
-#define VS_BUILD LCTL(LSFT(KC_B))
-#define VS_COMMANDS MEH(KC_F4)
-#define VS_CMT_BLOCK LSFT(LALT(KC_A))
-#define VS_CMT_LINE LCTL(KC_SLSH)
-#define VS_DEL_LINE LCTL(LSFT(KC_K))
-#define VS_COPYLINEDOWN LSFT(LALT(KC_DOWN))
-// visual studio bookmark commands
-#define VS_BM_LIST LCTL(LALT(KC_L))
-#define VS_BM_LISTALL LCTL(LALT(KC_A))
-#define VS_BM_PREV LCTL(LALT(KC_P))
-#define VS_BM_NEXT LCTL(LALT(KC_N))
-#define VS_BM_TOGGLE LCTL(LALT(KC_K))
-#define VS_BM_CLEARALL LCTL(LALT(KC_C))
-// visual studio code navigation shortcuts
-#define VS_FOCUS_EDITOR MEH(KC_F8)
-#define VS_FOCUS_TERMINAL MEH(KC_F9)
-#define VS_TOGGLE_TERMINAL MEH(KC_F10)
-#define VS_CLEAR_TERMINAL MEH(KC_F11)
-#define VS_TERMINAL_PREV MEH(KC_F12)
-#define VS_TERMINAL_NEXT MEH(KC_F13)
-#define VS_TERMINAL_NEW MEH(KC_F14)
-#define VS_TERMINAL_DETACH MEH(KC_F15)
-#define VS_TERMINAL_RENAME MEH(KC_F16)
-#define VS_JUMPY MEH(KC_F17)
-
-/*
-// VS code bookmark prev/next requires the following in vscode shortcuts config
- {
- "key": "ctrl+alt+p",
- "command": "bookmarks.jumpToPrevious"
- },
- {
- "key": "ctrl+alt+n",
- "command": "bookmarks.jumpToNext"
- },
-*/
-
-enum custom_keycodes {
- PLACEHOLDER = SAFE_RANGE, // can always be here
-
- // Windows 10 macros
- W10_TASKVIEW,
- W10_WORKSPACE_LEFT,
- W10_WORKSPACE_RIGHT,
-
-};
-
-// building/flashing instructions:
-// make atreus/astar:dvorak_42_key:flash
-// or
-// qmk compile -kb atreus -km dvorak_42_key
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [BASE] = LAYOUT(
- KC_QUOTE, KC_COMMA, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L,
- KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S,
- KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z,
- OSM(MOD_LSFT), OSM(MOD_LCTL), MO(KEYSEL), MO(BROWSER_CONTROL), MO(COMBINED), MO(KEYNAV), KC_ENTER, KC_SPACE, KC_BSPC, RCTL(KC_BSPC), KC_CAPS, OSM(MOD_LSFT)
- ),
-
-#ifdef USE_VSCODE_MACROS
-// use visual studio code macros on the KEYNAV layer
- [KEYNAV] = LAYOUT(
- KC_ESC, VS_DEFINITION, RCTL(KC_Z), RCTL(KC_S), MEH(KC_A), MEH(KC_B), KC_HOME, KC_UP, KC_END, KC_PGUP,
- VS_BACK, VS_SYMBOLEDITOR, RSFT(KC_TAB), KC_TAB, SHELL_DEL_WORD, LCTL(KC_LEFT), KC_LEFT, KC_DOWN, KC_RIGHT, LCTL(KC_RIGHT),
- VS_LINE, VS_FILE, VS_TABLEFT, VS_TABRIGHT, VS_CLOSETAB, KC_TRNS, RCTL(KC_C), RCTL(KC_X), RCTL(KC_V), KC_PGDN,
- VS_COMMANDS, VS_CMT_LINE, VS_BM_PREV, VS_BM_NEXT, VS_BM_TOGGLE, KC_TRNS, KC_ENTER, KC_SPACE, KC_BSPC, RCTL(KC_BSPC), KC_DELETE, LCTL(KC_DELETE)
- ),
-#else
-// use android studio macros on the KEYNAV layer
- [KEYNAV] = LAYOUT(
- KC_ESC, AS_GO_IMPLEMENTATION, RCTL(KC_Z), RCTL(KC_S), MEH(KC_A), MEH(KC_B), KC_HOME, KC_UP, KC_END, KC_PGUP,
- AS_BACK, AS_SYMBOL, RSFT(KC_TAB), KC_TAB, SHELL_DEL_WORD, LCTL(KC_LEFT), KC_LEFT, KC_DOWN, KC_RIGHT, LCTL(KC_RIGHT),
- AS_FINDUSAGE, AS_CLASS, AS_TABLEFT, AS_TABRIGHT, AS_CLOSETAB, KC_TRNS, RCTL(KC_C), RCTL(KC_X), RCTL(KC_V), KC_PGDN,
- AS_CLOSETOOLWINDOW, AS_GO_DECLARATION, KC_TRNS, KC_TRNS, AS_ALTENTER, KC_TRNS, KC_ENTER, KC_SPACE, KC_BSPC, RCTL(KC_BSPC), KC_DELETE, LCTL(KC_DELETE)
- ),
-#endif
-
- [KEYSEL] = LAYOUT(
- MEH(KC_G), MEH(KC_H),MEH(KC_I), MEH(KC_J), MEH(KC_K), KC_TRNS, RSFT(KC_HOME), RSFT(KC_UP), RSFT(KC_END), RSFT(KC_PGUP),
- MEH(KC_L), MEH(KC_M),MEH(KC_N), MEH(KC_O), MEH(KC_P), RSFT(RCTL(KC_LEFT)), RSFT(KC_LEFT), RSFT(KC_DOWN), RSFT(KC_RIGHT), RSFT(RCTL(KC_RIGHT)),
- MEH(KC_Q), MEH(KC_R),MEH(KC_S), MEH(KC_T), MEH(KC_U), KC_TRNS, RCTL(KC_C), RCTL(KC_X), RCTL(KC_V), RSFT(KC_PGDN),
- QK_BOOT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_ENTER, KC_SPACE, KC_BSPC, RCTL(KC_BSPC), KC_DELETE, LCTL(KC_DELETE)
- ),
-
- [COMBINED] = LAYOUT(
- KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_PLUS, KC_7, KC_8, KC_9, KC_ASTR,
- KC_LPRN, KC_RPRN, KC_LBRC, KC_RBRC, KC_UNDS, KC_MINS, KC_4, KC_5, KC_6, KC_SLSH,
- KC_COLN, KC_DQUO, KC_LCBR, KC_RCBR, KC_AMPR, KC_EQUAL, KC_1, KC_2, KC_3, KC_QUES,
- KC_TRNS, KC_TILD, KC_GRAVE, KC_CIRC, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_0, KC_DOT, KC_PIPE, KC_BSLS
- ),
-
- [BROWSER_CONTROL] = LAYOUT(
- MEH(KC_C), KC_BTN3, KC_MS_U, KC_BTN1, KC_BTN2, KC_UP, KC_PGUP, KC_PGDN, KC_MS_WH_UP, MEH(KC_9),
- MEH(KC_D), KC_MS_L, KC_MS_D, KC_MS_R, MEH(KC_6), KC_DOWN, RSFT(RCTL(KC_TAB)), RCTL(KC_TAB), KC_MS_WH_DOWN, LALT(KC_LEFT),
- MEH(KC_E), W10_TASKVIEW, W10_WORKSPACE_LEFT, W10_WORKSPACE_RIGHT, MEH(KC_7), MEH(KC_8), RCTL(KC_1), RCTL(KC_9), KC_F6, KC_F5,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RCTL(KC_W), RCTL(KC_T), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
- ),
-};
-
-bool process_record_user(uint16_t keycode, keyrecord_t *record) {
- if(record->event.pressed) {
- switch (keycode) {
- // windows 10 workspace shortcuts
- case W10_TASKVIEW:
- tap_code16(G(KC_TAB));
- return true;
- break;
- case W10_WORKSPACE_LEFT:
- tap_code16(G(C(KC_LEFT)));
- return true;
- break;
- case W10_WORKSPACE_RIGHT:
- tap_code16(G(C(KC_RIGHT)));
- break;
- }
- }
-
- return true;
-}
diff --git a/keyboards/atreus/keymaps/erlandsona/config.h b/keyboards/atreus/keymaps/erlandsona/config.h
deleted file mode 100644
index aa1d8445c613..000000000000
--- a/keyboards/atreus/keymaps/erlandsona/config.h
+++ /dev/null
@@ -1,6 +0,0 @@
-#pragma once
-
-// place overrides here
-
-/* Make Overloaded Keys switch faster */
-#define TAPPING_TERM 150
diff --git a/keyboards/atreus/keymaps/erlandsona/keymap.c b/keyboards/atreus/keymaps/erlandsona/keymap.c
deleted file mode 100644
index 64d240804010..000000000000
--- a/keyboards/atreus/keymaps/erlandsona/keymap.c
+++ /dev/null
@@ -1,32 +0,0 @@
-#include QMK_KEYBOARD_H
-
-// Each layer gets a name for readability, which is then used in the keymap matrix below.
-// The underscores don't mean anything - you can have a layer called STUFF or any other name.
-// Layer names don't all need to be of the same length, obviously, and you can also skip them
-// entirely and just use numbers.
-#define BASE 0
-#define NUMS 1
-#define MOUS 2
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [BASE] = LAYOUT( /* Qwerty */
- KC_Q , KC_W , KC_E , KC_R , KC_T , KC_Y , KC_U , KC_I , KC_O , KC_P ,
- KC_A , KC_S , KC_D , KC_F , KC_G , KC_H , KC_J , KC_K , KC_L , KC_SCLN ,
- SFT_T(KC_Z), KC_X , KC_C , KC_V , KC_B , KC_N , KC_M , KC_COMM, KC_DOT , SFT_T(KC_QUOT),
- KC_LCTL , KC_LALT, KC_LALT, KC_LGUI, KC_BSPC, KC_ESC, KC_ENT, KC_SPC, MO(NUMS),KC_RALT, KC_SLSH, KC_BSLS
- ),
-
- [NUMS] = LAYOUT( /* Numbers / Arrows / Symbols */
- KC_GRV , KC_1 , KC_2 , KC_3 , KC_4 , KC_LPRN, KC_RPRN, KC_MINS, KC_EQL , KC_LBRC,
- KC_TAB , KC_5 , KC_6 , KC_7 , KC_8 , KC_LEFT, KC_DOWN, KC_UP , KC_RGHT, KC_RBRC,
- _______, KC_9 , KC_0 , KC_DOT , KC_COMM, KC_HOME, KC_PGDN, KC_PGUP, KC_END , _______,
- _______, _______, _______, _______, KC_DEL , TG(MOUS), _______, _______, _______, _______, _______, _______
- ),
-
- [MOUS] = LAYOUT( /* Mouse and Media Keys */
- KC_SCRL, KC_PAUSE, KC_F11 , KC_F10 , KC_F9 , KC_F8 , KC_F7 , KC_F6 , KC_F5 , KC_F4,
- KC_VOLD, KC_ACL0 , KC_ACL1, KC_ACL2, KC_VOLU, KC_MS_L, KC_MS_D, KC_MS_U, KC_MS_R, KC_F3,
- KC_MUTE, KC_MPRV , KC_MPLY, KC_MNXT, KC_MUTE, KC_WH_R, KC_WH_U, KC_WH_D, KC_WH_L, KC_F2,
- _______, _______ , _______, _______, _______, _______, _______, KC_BTN1, TO(BASE), QK_BOOT, KC_F12 , KC_F1
- ),
-};
diff --git a/keyboards/atreus/keymaps/gerb/keymap.c b/keyboards/atreus/keymaps/gerb/keymap.c
deleted file mode 100644
index e122c5f12f61..000000000000
--- a/keyboards/atreus/keymaps/gerb/keymap.c
+++ /dev/null
@@ -1,47 +0,0 @@
-// This is the personal keymap of Chris Gerber (@gerbercj). I haven't worked out the kinks
-// with the Colemak and Dvorak support yet, but everything else works nicely.
-
-#include QMK_KEYBOARD_H
-
-// Each layer gets a name for readability, which is then used in the keymap matrix below.
-// The underscores don't mean anything - you can have a layer called STUFF or any other name.
-// Layer names don't all need to be of the same length, obviously, and you can also skip them
-// entirely and just use numbers.
-#define _QW 0
-#define _CM 1
-#define _DV 2
-#define _L1 3
-#define _L2 4
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [_QW] = LAYOUT( /* Qwerty */
- KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,
- KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,
- KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH,
- KC_ESC, KC_TAB, KC_LGUI, KC_LSFT, KC_BSPC, KC_LALT, KC_RCTL, KC_SPC, MO(_L1), KC_MINS, KC_QUOT, KC_ENT
- ),
- [_CM] = LAYOUT( /* Colemak */
- KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN,
- KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O,
- KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH,
- KC_ESC, KC_TAB, KC_LGUI, KC_LSFT, KC_BSPC, KC_LALT, KC_RCTL, KC_SPC, MO(_L1), KC_MINS, KC_QUOT, KC_ENT
- ),
- [_DV] = LAYOUT( /* Dvorak */
- KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L,
- KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S,
- KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z,
- KC_ESC, KC_TAB, KC_LGUI, KC_LSFT, KC_BSPC, KC_LALT, KC_RCTL, KC_SPC, MO(_L1), KC_MINS, KC_SLSH, KC_ENT
- ),
- [_L1] = LAYOUT( /* LAYER 1 */
- KC_INS, KC_HOME, KC_UP, KC_END, KC_PGUP, KC_VOLU, KC_7, KC_8, KC_9, KC_LBRC,
- KC_DEL, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, KC_VOLD, KC_4, KC_5, KC_6, KC_RBRC,
- KC_GRV, KC_MPRV, KC_MPLY, KC_MNXT, KC_MINS, KC_MUTE, KC_1, KC_2, KC_3, KC_BSLS,
- TG(_L2), KC_APP, KC_LGUI, KC_LSFT, KC_BSPC, KC_LALT, KC_RCTL, KC_SPC, KC_TRNS, KC_DOT, KC_0, KC_EQL
- ),
- [_L2] = LAYOUT( /* LAYER 2 */
- KC_TRNS, KC_WH_L, KC_MS_U, KC_WH_R, KC_WH_U, DF(_QW), KC_F7, KC_F8, KC_F9, KC_F10,
- KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_WH_D, DF(_CM), KC_F6, KC_F5, KC_F6, KC_F11,
- KC_BTN4, KC_BTN1, KC_BTN2, KC_BTN3, KC_BTN4, DF(_DV), KC_F1, KC_F2, KC_F3, KC_F12,
- KC_TRNS, KC_TRNS, KC_LGUI, KC_LSFT, KC_BSPC, KC_LALT, KC_RCTL, KC_SPC, KC_TRNS, KC_TRNS, KC_TRNS, QK_BOOT
- ),
-};
diff --git a/keyboards/atreus/keymaps/henxing/Readme.md b/keyboards/atreus/keymaps/henxing/Readme.md
deleted file mode 100644
index a615adf9665c..000000000000
--- a/keyboards/atreus/keymaps/henxing/Readme.md
+++ /dev/null
@@ -1,6 +0,0 @@
-# Hugh's Atreus Keymap
-
-This keymap is the same as the [default](../default) layout for the Atreus, but
-uses the programming style found in the Let's
-Split [default](../../../lets_split/keymaps/default) keymap. See
-[`keymap.c`](keymap.c) for the layout.
diff --git a/keyboards/atreus/keymaps/henxing/keymap.c b/keyboards/atreus/keymaps/henxing/keymap.c
deleted file mode 100644
index 8db85d04c38b..000000000000
--- a/keyboards/atreus/keymaps/henxing/keymap.c
+++ /dev/null
@@ -1,103 +0,0 @@
-#include QMK_KEYBOARD_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 _LOWER 1
-#define _RAISE 2
-
-enum custom_keycodes {
- QWERTY = SAFE_RANGE,
- LOWER,
- RAISE
-};
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- /*
- * q w e r t || y u i o p
- * a s d f g || h j k l ;
- * z x c v b || n m , . /
- * esc tab gui shift bksp ctrl || alt space lower - ' enter
- */
- [_QWERTY] = LAYOUT(
- KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,
- KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,
- KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH,
- KC_ESC, KC_TAB, KC_LGUI, KC_LSFT, KC_BSPC, KC_LCTL, KC_LALT, KC_SPC, LOWER, KC_MINS, KC_QUOT, KC_ENT
- ),
-
- /*
- * ! @ up { } || pgup 7 8 9 *
- * # left down right $ || pgdn 4 5 6 +
- * [ ] ( ) & || ` 1 2 3 \
- * raise insert gui shift bksp ctrl || alt space ____ . 0 =
- */
- [_LOWER] = LAYOUT(
- KC_EXLM, KC_AT, KC_UP, KC_LCBR, KC_RCBR, KC_PGUP, KC_7, KC_8, KC_9, KC_ASTR,
- KC_HASH, KC_LEFT, KC_DOWN, KC_RGHT, KC_DEL, KC_PGDN, KC_4, KC_5, KC_6, KC_PLUS,
- KC_LBRC, KC_RBRC, KC_LPRN, KC_RPRN, KC_AMPR, KC_GRV, KC_1, KC_2, KC_3, KC_BSLS,
- RAISE, KC_INS, KC_LGUI, KC_LSFT, KC_BSPC, KC_LCTL, KC_LALT, KC_SPC, KC_TRNS, KC_DOT, KC_0, KC_EQL
- ),
-
- /*
- * insert home up end pgup || up F7 F8 F9 F10
- * del left down right pgdn || down F4 F5 F6 F11
- * volup reset || F1 F2 F3 F12
- * voldn super shift bksp ctrl || alt space QWERTY prtsc scroll pause
- */
- [_RAISE] = LAYOUT(
- KC_INS, KC_HOME, KC_UP, KC_END, KC_PGUP, KC_UP, KC_F7, KC_F8, KC_F9, KC_F10,
- KC_DEL, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, KC_DOWN, KC_F4, KC_F5, KC_F6, KC_F11,
- KC_TRNS, KC_VOLU, KC_TRNS, KC_TRNS, QK_BOOT, KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F12,
- KC_NO, KC_VOLD, KC_LGUI, KC_LSFT, KC_BSPC, KC_LCTL, KC_LALT, KC_SPC, QWERTY, KC_PSCR, KC_SCRL, KC_PAUS
- ),
-};
-
-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) {
-
- // The value to return
- bool return_value = false;
-
- switch (keycode) {
- case QWERTY:
- if (record->event.pressed) {
- persistent_default_layer_set(1UL<<_QWERTY);
- }
- break;
-
- case LOWER:
- // Toggle LOWER layer on when key pressed and off when released
- if (record->event.pressed) {
- layer_on(_LOWER);
- } else {
- layer_off(_LOWER);
- }
- break;
-
- case RAISE:
- if (record->event.pressed) {
- persistent_default_layer_set(1UL<<_RAISE);
- }
- break;
-
- default:
-
- // If the keycode is not handled by any of the other cases, the
- // function should return true
- return_value = true;
- break;
- }
-
- return return_value;
-}
diff --git a/keyboards/atreus/keymaps/ibnuda/keymap.c b/keyboards/atreus/keymaps/ibnuda/keymap.c
deleted file mode 100644
index 3bdfccad980b..000000000000
--- a/keyboards/atreus/keymaps/ibnuda/keymap.c
+++ /dev/null
@@ -1,47 +0,0 @@
-#include QMK_KEYBOARD_H
-
-#include "ibnuda.h"
-
-// clang-format off
-#define LAYOUT_atreus_base( \
- K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, \
- K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, \
- K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, \
- KTA, KTB, KTC, KTD \
- ) \
- LAYOUT_wrapper( \
- K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, \
- K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, \
- K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, \
- ___, ___, ___, ___, KTA, KTB, KTC, KTD, ___, ___, ___, ___ \
- )
-#define LAYOUT_atreus_base_wrapper(...) LAYOUT_atreus_base(__VA_ARGS__)
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-[_BASE] = LAYOUT_atreus_base_wrapper(
- ________________DVORAK_L1_______________, ________________DVORAK_R1_______________,
- ________________DVORAK_L2_______________, ________________DVORAK_R2_______________,
- ________________DVORAK_L3_______________, ________________DVORAK_R3_______________,
- LW_BSPC,SFT_ESC, ALT_ENT,RS_SPC
-),
-
-[_RAISE] = LAYOUT_atreus_base_wrapper(
- ________________RAISE_L1________________, ________________RAISE_R1________________,
- ________________RAISE_L2________________, ________________RAISE_R2________________,
- ________________RAISE_L3________________, ________________RAISE_R3________________,
- ADDDD, _______, _______,_______
-),
-[_LOWER] = LAYOUT_atreus_base_wrapper(
- ________________LOWER_L1________________, ________________LOWER_R1________________,
- ________________LOWER_L2________________, ________________LOWER_R2________________,
- ________________LOWER_L3________________, ________________LOWER_R3________________,
- _______,_______, _______,ADDDD
-),
-[_ADJUST] = LAYOUT_atreus_base_wrapper(
- ________________ADJUST_L1_______________, ________________ADJUST_R1_______________,
- ________________ADJUST_L2_______________, ________________ADJUST_R2_______________,
- ________________ADJUST_L3_______________, ________________ADJUST_R3_______________,
- _______,_______, _______,_______
-),
-};
-// clang-format on
diff --git a/keyboards/atreus/keymaps/ibnuda/rules.mk b/keyboards/atreus/keymaps/ibnuda/rules.mk
deleted file mode 100644
index 14227c90d793..000000000000
--- a/keyboards/atreus/keymaps/ibnuda/rules.mk
+++ /dev/null
@@ -1 +0,0 @@
-LTO_ENABLE=yes
diff --git a/keyboards/atreus/keymaps/jeremy/keymap.c b/keyboards/atreus/keymaps/jeremy/keymap.c
deleted file mode 100644
index 7ca35b3d9abb..000000000000
--- a/keyboards/atreus/keymaps/jeremy/keymap.c
+++ /dev/null
@@ -1,56 +0,0 @@
-// This is the personal keymap of Jeremy Cowgar (@jcowgar). It is written for the programmer.
-
-#include QMK_KEYBOARD_H
-#include "action_layer.h"
-#include "keymap_colemak.h"
-
-// Each layer gets a name for readability, which is then used in the keymap matrix below.
-#define ALPH 0
-#define NUMS 1
-#define CURS 2
-#define SYMB 3
-#define FKEY 4
-
-// Some handy macros to keep the keymaps clean and easier to maintain
-#define KM_SAVE LGUI(CM_S)
-#define KM_CLSE LGUI(CM_W)
-#define KM_OPEN LGUI(CM_O)
-
-#define KM_COPY LGUI(KC_C)
-#define KM_CUT LGUI(KC_X)
-#define KM_PAST LGUI(KC_V)
-#define KM_UNDO LGUI(KC_Z)
-#define KM_REDO LGUI(LSFT(KC_Z))
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [ALPH] = LAYOUT(
- KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,
- KC_A, LT(NUMS, KC_S), LT(FKEY, KC_D), KC_F, KC_G, KC_H, KC_J, LT(CURS, KC_K), LT(SYMB, KC_L), KC_SCLN,
- KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH,
- KC_LCTL, KC_ESC, KC_NO, KC_LSFT, KC_SPC, KC_LALT, KC_LGUI, KC_ENT, KC_RSFT, KC_NO, KC_ESC, KC_RCTL
- ),
- [NUMS] = LAYOUT(
- KC_TRNS, KC_TRNS, KC_TRNS, KC_ASTR, KC_SLSH, KC_TRNS, KC_7, KC_8, KC_9, KC_SLSH,
- KC_TRNS, KC_TRNS, KC_EQL, KC_PLUS, KC_MINS, KC_LPRN, KC_4, KC_5, KC_6, KC_ASTR,
- KC_TRNS, KC_TRNS, KC_DOT, KC_COMM, CM_SCLN, KC_RPRN, KC_1, KC_2, KC_3, KC_MINS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_0, KC_DOT, KC_EQL, KC_PLUS
- ),
- [CURS] = LAYOUT(
- KC_TRNS, KC_BSPC, KC_UP, KC_DEL, KC_PGUP, KC_TRNS, KM_SAVE, KC_TRNS, KM_OPEN, KC_TRNS,
- KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, KM_UNDO, KC_LALT, KC_TRNS, KC_LGUI, KC_TRNS,
- KC_TRNS, KC_VOLD, KC_MUTE, KC_VOLU, KC_MPLY, KM_REDO, KM_CLSE, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, QK_BOOT, KC_TRNS, KC_TAB, KM_COPY, KM_CUT, KM_PAST, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
- ),
- [SYMB] = LAYOUT(
- KC_BSLS, KC_EXLM, KC_LABK, KC_RABK, CM_COLN, KC_UNDS, KC_DLR, KC_QUES, KC_TRNS, KC_PERC,
- KC_AT, KC_AMPR, KC_LPRN, KC_RPRN, CM_SCLN, KC_COMM, KC_DOT, KC_QUOT, KC_TRNS, KC_TILD,
- KC_HASH, KC_PIPE, KC_LCBR, KC_RCBR, KC_SLSH, KC_TRNS, KC_GRV, KC_DQT, KC_TRNS, KC_CIRC,
- KC_TRNS, KC_TRNS, KC_LBRC, KC_RBRC, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
- ),
- [FKEY] = LAYOUT(
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_F9, KC_F10, KC_F11, KC_F12,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_F5, KC_F6, KC_F7, KC_F8,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
- ),
-};
diff --git a/keyboards/atreus/keymaps/jeremy/readme.md b/keyboards/atreus/keymaps/jeremy/readme.md
deleted file mode 100644
index df0179a8e009..000000000000
--- a/keyboards/atreus/keymaps/jeremy/readme.md
+++ /dev/null
@@ -1,45 +0,0 @@
-Jeremy's Atreus Key Mapping
-===========================
-
-I am a programmer by trade that suffers from the beginning stages of RSI. As a programmer I use letters, symbols and cursor navigation most often. To prevent strange finger gymnastics, I wrote a script to rank which non-letter characters occurred in my primary source projects most often and then placed these characters in the easiest to reach locations, for me. I made heavy use of momentary layer toggling.
-
-My layout is also geared toward a software based Colemak mapping. I would like it to be hardware, but I use my Laptop on the go frequently and thus my laptop keyboard. I have moved the keycaps to reflect the Colemak layout. My laptop is a MacBook Pro (2015).
-
-## Main Layers
-
-1. [Letters](http://www.keyboard-layout-editor.com/#/gists/6861cb9df09ce78efaddf8aa7471e3ac)
-2. [Symbols](http://www.keyboard-layout-editor.com/#/gists/8956a18b508a78e93b9c38ec3fcccaa5)
-3. [Navigation](http://www.keyboard-layout-editor.com/#/gists/6ed492b714a7f54eb1c5de09b87fd8c4)
-4. [Numbers](http://www.keyboard-layout-editor.com/#/gists/399ceb5624e8388e48a3a5eacac8e973)
-5. [Function Keys](http://www.keyboard-layout-editor.com/#/gists/7fd7dc24c7048316f3724b1893c64e89)
-
-## Notes
-
-### General
-
-Some characters can be accessed multiple ways. This was done because you may be in a given layer, such as numbers, where when doing math, you may need quick access to the parentheses characters for grouping. This prevents some layer switching.
-
-I own an ErgoDox and plan on porting this as a base layer, then using the extra keys the ErgoDox provides accordingly. My goal, though, is to be fully functional on this base setup and build everything into muscle memory.
-
-### Symbol Layer
-
-1. I placed characters that deal with an if statement close together, such as !, & and |.
-2. All matching brace/bracket characters are together as well.
-
-### Number Layer
-
-1. Everything I did was a compromise when trying to mimic a ten-key. I did the best I could.
-2. Operators are duplicated on the right and left. I do not find it comfortable to use my pinky much, so I tend to use my left hand for +, -, * and / but those were also placed on the right hand to mimic the ten-key.
-3. Parentheses were added for typing on the calculator.
-
-### Cursor Layer
-
-1. It includes basic audio controls because they didn't really fit anywhere else
-2. It contains basic file manipulation. I'm not sure that was a good idea. I do save all the time, but Cmd+S isn't exactly hard.
-3. It contains the backspace and delete keys right on top of the left and right arrows.
-4. Cmd and Opt keys are duplicated. This makes for very easy navigation, for example on a Mac, Opt+Left/Right moves word by word. It also backspaces or deletes word by word.
-
-### Function Layer
-
-1. Almost all other layers I saw grouped the F keys into a bunch of three. This only gives nine function keys in order if you attempt to stay as close to the home row as possible. I went with a group of four, which gives all twelve function keys to the right hand, one row below and above the home row.
-2. I duplicated the Command and Option keys the same as on the cursor layer. This makes it dead easy to hit modified function keys such as Cmd+Opt+F5. It's also easy to toss in a Shift modifier in there with the right thumb since the bottom row is preserved.
diff --git a/keyboards/atreus/keymaps/kejadlen/README.md b/keyboards/atreus/keymaps/kejadlen/README.md
deleted file mode 100644
index f3b8be3ee0ae..000000000000
--- a/keyboards/atreus/keymaps/kejadlen/README.md
+++ /dev/null
@@ -1,4 +0,0 @@
-```shell
-make atreus/teensy2:kejadlen
-make atreus/teensy2:kejadlen:flash
-```
diff --git a/keyboards/atreus/keymaps/kejadlen/config.h b/keyboards/atreus/keymaps/kejadlen/config.h
deleted file mode 100644
index a75070e199ad..000000000000
--- a/keyboards/atreus/keymaps/kejadlen/config.h
+++ /dev/null
@@ -1,12 +0,0 @@
-#pragma once
-
-#undef MATRIX_ROW_PINS
-#undef MATRIX_COL_PINS
-#define MATRIX_ROW_PINS { D0, D1, D2, D3 }
-#define MATRIX_COL_PINS { F6, F5, F4, F1, F0, F7, B0, B1, B2, B3, B7 }
-
-#define DIODE_DIRECTION COL2ROW
-
-#define QUICK_TAP_TERM 0
-
-#define USB_MAX_POWER_CONSUMPTION 50
diff --git a/keyboards/atreus/keymaps/kejadlen/keymap.c b/keyboards/atreus/keymaps/kejadlen/keymap.c
deleted file mode 100644
index 45de7824c205..000000000000
--- a/keyboards/atreus/keymaps/kejadlen/keymap.c
+++ /dev/null
@@ -1,32 +0,0 @@
-#include QMK_KEYBOARD_H
-
-#define BASE 0
-#define SYMB 1
-#define ETC 2
-
-enum macro_id {
- TEENSY,
-};
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [BASE] = LAYOUT(
- KC_Q, KC_W, KC_D, KC_F, KC_K, KC_J, KC_U, KC_R, KC_L, KC_SCLN,
- LT(ETC,KC_A), KC_S, KC_E, KC_T, KC_G, KC_Y, KC_N, KC_I, KC_O, KC_H,
- SFT_T(KC_Z), KC_X, KC_C, KC_V, KC_B, KC_P, KC_M, KC_COMM, KC_DOT, SFT_T(KC_SLSH),
- KC_GRV, KC_DEL, KC_LALT, GUI_T(KC_TAB), LT(SYMB,KC_BSPC), CTL_T(KC_ESC), SFT_T(KC_ENT), LT(SYMB,KC_SPC), GUI_T(KC_LEFT), ALT_T(KC_DOWN), KC_UP, LCAG_T(KC_RGHT)
- ),
-
- [SYMB] = LAYOUT(
- KC_EXLM, KC_AT, KC_LCBR, KC_RCBR, KC_PIPE, KC_EQL, KC_7, KC_8, KC_9, KC_PLUS,
- KC_HASH, KC_DLR, KC_LPRN, KC_RPRN, KC_BSLS, KC_MINS, KC_4, KC_5, KC_6, KC_QUOT,
- KC_PERC, KC_CIRC, KC_LBRC, KC_RBRC, KC_ASTR, KC_UNDS, KC_1, KC_2, KC_3, KC_DQUO,
- KC_TILD, KC_AMPR, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_0, KC_NO, KC_DOT, KC_TRNS
- ),
-
- [ETC] = LAYOUT(
- QK_BOOT, KC_NO, KC_NO, KC_NO, KC_PGUP, KC_VOLU, KC_F7, KC_F8, KC_F9, KC_HOME,
- LT(ETC,KC_A), KC_NO, KC_NO, KC_NO, KC_PGDN, KC_VOLD, KC_F4, KC_F5, KC_F6, KC_END,
- KC_NO, KC_NO, KC_NO, KC_NO, KC_DEL, KC_MUTE, KC_F1, KC_F2, KC_F3, KC_INS,
- KC_TRNS, KC_NO, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO
- ),
-};
diff --git a/keyboards/atreus/keymaps/khitsule/config.h b/keyboards/atreus/keymaps/khitsule/config.h
deleted file mode 100644
index 7fa3bf328ec9..000000000000
--- a/keyboards/atreus/keymaps/khitsule/config.h
+++ /dev/null
@@ -1,6 +0,0 @@
-#ifndef CONFIG_USER_H
-#define CONFIG_USER_H
-
-#include "../../config.h"
-
-#endif
diff --git a/keyboards/atreus/keymaps/khitsule/keymap.c b/keyboards/atreus/keymaps/khitsule/keymap.c
deleted file mode 100644
index 79f4da0b81e6..000000000000
--- a/keyboards/atreus/keymaps/khitsule/keymap.c
+++ /dev/null
@@ -1,50 +0,0 @@
-// Personal keymap of khitsule
-
-#include QMK_KEYBOARD_H
-
-enum layers {
- ALPH,
- GAME,
- LOWR,
- RAIS,
- ADJS
-};
-
-// define any macros here to keep keymap clean and readable
-
-#define KM_DLEFT LGUI(LCTL(KC_LEFT))
-#define KM_DRIGHT LGUI(LCTL(KC_RIGHT))
-#define TSKMGR LCTL(LSFT(KC_ESC))
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [ALPH] = LAYOUT(
- KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,
- KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,
- KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH,
- KC_ESC, KC_TRNS, KC_TRNS, ALT_T(KC_ENT), LT(LOWR, KC_TAB), CTL_T(KC_SPC), SFT_T(KC_BSPC), LT(RAIS, KC_DEL), KC_LGUI, TO(GAME), KC_QUOT, KC_MINUS
- ),
- [GAME] = LAYOUT(
- KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,
- KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,
- KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH,
- KC_ESC, KC_TRNS, KC_ENT, KC_LALT, KC_TAB, KC_LCTL, KC_LSFT, KC_DEL, KC_LGUI, TO(ALPH), KC_QUOT, KC_MINUS
- ),
- [LOWR] = LAYOUT(
- KC_PSCR, KC_HOME, KC_UP, KC_END, KC_TRNS, KC_LPRN, KC_F7, KC_F8, KC_F9, KC_RPRN,
- KC_VOLU, KC_LEFT, KC_DOWN, KC_RIGHT, KC_PGUP, KC_LBRC, KC_F4, KC_F5, KC_F6, KC_RBRC,
- KC_VOLD, KC_MPRV, KC_MPLY, KC_MNXT, KC_PGDN, LSFT(KC_LBRC), KC_F1, KC_F2, KC_F3, LSFT(KC_RBRC),
- KM_DLEFT, KM_DRIGHT, LALT(KC_TAB), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, MO(ADJS), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
- ),
- [RAIS] = LAYOUT(
- KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_TRNS, KC_7, KC_8, KC_9, KC_TRNS,
- KC_CIRC, KC_AMPR, KC_GRV, KC_TILD, KC_PIPE, KC_PLUS, KC_4, KC_5, KC_6, KC_ASTR,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_BSLS, KC_MINUS, KC_1, KC_2, KC_3, KC_SLASH,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, MO(ADJS), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_0, KC_DOT, KC_EQL
- ),
- [ADJS] = LAYOUT(
- KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, TSKMGR, KC_TRNS, KC_TRNS, KC_F11, KC_F12,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- QK_BOOT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
- )
-};
diff --git a/keyboards/atreus/keymaps/khitsule/readme.md b/keyboards/atreus/keymaps/khitsule/readme.md
deleted file mode 100644
index bf984b52b3b2..000000000000
--- a/keyboards/atreus/keymaps/khitsule/readme.md
+++ /dev/null
@@ -1,23 +0,0 @@
-# Atreus Layout by Khitsule
-![Khitsule](https://i.imgur.com/wuki3aM.png)
-
-[KLE link](http://www.keyboard-layout-editor.com/#/gists/35ed66c55456699fd8f5d06750984a07)
-
-## Layers
-| Layer | Legend |
-| ----- | ------ |
-| Base | Top left (black) |
-| Lower | Top right (purple) |
-| Raise | Bottom right (pink) |
-
-## Features
-* Raise/lower layers focus first on one-handed use
-* Numpad on right hand with raise layer
-* Navigation on left hand with lower layer (ESDF)
- * D refers to desktop left/right on Win 10 (win+ctrl+left/right)
-* Heavy use of hold/tap dual function keys
- * Ctrl/Space
- * Shift/Backspace
- * Alt/Enter
- * Lower/Tab
- * Raise/Delete
\ No newline at end of file
diff --git a/keyboards/atreus/keymaps/manna-harbour_miryoku/config.h b/keyboards/atreus/keymaps/manna-harbour_miryoku/config.h
deleted file mode 100644
index 30a066fa5be0..000000000000
--- a/keyboards/atreus/keymaps/manna-harbour_miryoku/config.h
+++ /dev/null
@@ -1,21 +0,0 @@
-// Copyright 2019 Manna Harbour
-// https://github.com/manna-harbour/miryoku
-
-// 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 .
-
-#pragma once
-
-#define XXX KC_NO
-
-#define LAYOUT_miryoku(\
-K00, 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,\
-N30, N31, K32, K33, K34, K35, K36, K37, N38, N39\
-)\
-LAYOUT(\
-K00, 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,\
-XXX, XXX, XXX, K32, K33, K34, K35, K36, K37, XXX, XXX, XXX\
-)
diff --git a/keyboards/atreus/keymaps/manna-harbour_miryoku/keymap.c b/keyboards/atreus/keymaps/manna-harbour_miryoku/keymap.c
deleted file mode 100644
index dbab7f982043..000000000000
--- a/keyboards/atreus/keymaps/manna-harbour_miryoku/keymap.c
+++ /dev/null
@@ -1,4 +0,0 @@
-// Copyright 2019 Manna Harbour
-// https://github.com/manna-harbour/miryoku
-
-// 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 .
diff --git a/keyboards/atreus/keymaps/nojjan/config.h b/keyboards/atreus/keymaps/nojjan/config.h
deleted file mode 100644
index bc5c25d416ae..000000000000
--- a/keyboards/atreus/keymaps/nojjan/config.h
+++ /dev/null
@@ -1,8 +0,0 @@
-#pragma once
-
-#undef MATRIX_ROW_PINS
-#undef MATRIX_COL_PINS
-
-// Pin configuration for falbatech atreus
-#define MATRIX_ROW_PINS { D0, D1, D3, D2 }
-#define MATRIX_COL_PINS { D7, C6, B5, B4, E6, D4, B6, F6, F7, D6, B7 }
diff --git a/keyboards/atreus/keymaps/nojjan/keymap.c b/keyboards/atreus/keymaps/nojjan/keymap.c
deleted file mode 100644
index 189a5c8e05cc..000000000000
--- a/keyboards/atreus/keymaps/nojjan/keymap.c
+++ /dev/null
@@ -1,42 +0,0 @@
-// this is the style you want to emulate.
-// This is the canonical layout file for the Quantum project. If you want to add another keyboard,
-
-#include QMK_KEYBOARD_H
-
-// Each layer gets a name for readability, which is then used in the keymap matrix below.
-// The underscores don't mean anything - you can have a layer called STUFF or any other name.
-// Layer names don't all need to be of the same length, obviously, and you can also skip them
-// entirely and just use numbers.
-#define _QW 0
-#define _RS 1
-#define _LW 2
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-[_QW] = LAYOUT( /* Qwerty */
- KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P ,
- KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN ,
- KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH ,
- KC_ESC, KC_TAB, KC_LGUI, KC_LSFT, KC_BSPC, KC_LCTL, KC_LALT, KC_SPC, MO(_RS), KC_MINS, KC_QUOT, KC_ENT ),
-/*
- * ! @ up { } || pgup 7 8 9 *
- * # left down right $ || pgdn 4 5 6 +
- * [ ] ( ) & || ` 1 2 3 \
- * lower insert super shift bksp ctrl || alt space fn . 0 =
- */
-[_RS] = LAYOUT( /* [> RAISE <] */
- KC_EXLM, KC_AT, KC_UP, KC_LCBR, KC_RCBR, KC_PGUP, KC_7, KC_8, KC_9, KC_ASTR ,
- KC_HASH, KC_LEFT, KC_DOWN, KC_RGHT, KC_DLR, KC_PGDN, KC_4, KC_5, KC_6, KC_PLUS ,
- KC_LBRC, KC_RBRC, KC_LPRN, KC_RPRN, KC_AMPR, KC_GRV, KC_1, KC_2, KC_3, KC_BSLS ,
- TG(_LW), KC_INS, KC_LGUI, KC_LSFT, KC_BSPC, KC_LCTL, KC_LALT, KC_SPC, KC_TRNS, KC_DOT, KC_0, KC_EQL ),
-/*
- * insert home up end pgup || up F7 F8 F9 F10
- * del left down right pgdn || down F4 F5 F6 F11
- * volup reset || F1 F2 F3 F12
- * voldn super shift bksp ctrl || alt space L0 prtsc scroll pause
- */
-[_LW] = LAYOUT( /* [> LOWER <] */
- KC_INS, KC_HOME, KC_UP, KC_END, KC_PGUP, KC_UP, KC_F7, KC_F8, KC_F9, KC_F10 ,
- KC_DEL, KC_LEFT, KC_DOWN, KC_RGHT, KC_DOWN, KC_DOWN, KC_F4, KC_F5, KC_F6, KC_F11 ,
- KC_NO, KC_VOLU, KC_NO, KC_NO, QK_BOOT, KC_NO, KC_F1, KC_F2, KC_F3, KC_F12 ,
- KC_NO, KC_VOLD, KC_LGUI, KC_LSFT, KC_BSPC, KC_LCTL, KC_LALT, KC_SPC, TO(_QW), KC_PSCR, KC_SCRL, KC_PAUS )
-};
diff --git a/keyboards/atreus/keymaps/ptillemans/keymap.c b/keyboards/atreus/keymaps/ptillemans/keymap.c
deleted file mode 100644
index 0c9655f5b142..000000000000
--- a/keyboards/atreus/keymaps/ptillemans/keymap.c
+++ /dev/null
@@ -1,49 +0,0 @@
-// this is the style you want to emulate.
-// This is the canonical layout file for the Quantum project. If you want to add another keyboard,
-
-#include QMK_KEYBOARD_H
-
-// Each layer gets a name for readability, which is then used in the keymap matrix below.
-// The underscores don't mean anything - you can have a layer called STUFF or any other name.
-// Layer names don't all need to be of the same length, obviously, and you can also skip them
-// entirely and just use numbers.
-#define _QW 0
-#define _RS 1
-#define _LW 2
-
-#define MY_SHEN MT(MOD_LSFT, KC_ENT)
-#define MY_CTES MT(MOD_LCTL, KC_ESC)
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [_QW] = LAYOUT( /* Qwerty */
- KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P ,
- KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN ,
- KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH ,
- TT(_LW), KC_TAB, KC_LGUI, KC_LSFT, KC_BSPC, MY_CTES, KC_LALT, KC_SPC, TT(_RS), KC_MINS, KC_QUOT, MY_SHEN
- ),
-
- /*
- * ! @ up { } || pgup 7 8 9 *
- * # left down right $ || pgdn 4 5 6 +
- * [ ] ( ) & || ` 1 2 3 \
- * lower insert super shift bksp ctrl || alt space fn . 0 =
- */
- [_RS] = LAYOUT( /* [> RAISE <] */
- KC_EXLM, KC_AT, KC_UP, KC_UNDS, KC_PLUS, KC_PGUP, KC_7, KC_8, KC_9, KC_ASTR ,
- KC_HASH, KC_LEFT, KC_DOWN, KC_RGHT, KC_DLR, KC_PGDN, KC_4, KC_5, KC_6, KC_PLUS ,
- KC_RBRC, KC_LBRC, KC_LPRN, KC_RPRN, KC_AMPR, KC_GRV, KC_1, KC_2, KC_3, KC_BSLS ,
- TT(_LW), _______, _______, _______, _______, _______, _______, _______, TO(_QW), KC_DOT, KC_0, KC_EQL
- ),
- /*
- * insert home up end pgup || up F7 F8 F9 F10
- * del left down right pgdn || down F4 F5 F6 F11
- * volup reset || F1 F2 F3 F12
- * voldn super shift next ctrl || alt space L0 prtsc scroll pause
- */
- [_LW] = LAYOUT( /* [> LOWER <] */
- KC_INS, KC_HOME, KC_UP, KC_END, KC_PGUP, KC_UP, KC_F7, KC_F8, KC_F9, KC_F10 ,
- KC_DEL, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, KC_DOWN, KC_F4, KC_F5, KC_F6, KC_F11 ,
- KC_NO, KC_VOLU, KC_NO, KC_NO, QK_BOOT, KC_TILD, KC_F1, KC_F2, KC_F3, KC_F12 ,
- KC_NO, KC_VOLD, _______, _______, KC_MNXT, _______, _______, _______, TO(_QW), KC_PSCR, KC_SCRL, KC_MPLY
- )
-};
diff --git a/keyboards/atreus/keymaps/quartz64/keymap.c b/keyboards/atreus/keymaps/quartz64/keymap.c
deleted file mode 100644
index eb882bce3198..000000000000
--- a/keyboards/atreus/keymaps/quartz64/keymap.c
+++ /dev/null
@@ -1,137 +0,0 @@
-/*
-Copyright 2022 DmNosachev
-
-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 .
-*/
-
-#include QMK_KEYBOARD_H
-
-// Defines names for use in layer keycodes and the keymap
-enum layer_names {
- _QW,
- _RS,
- _LW
-};
-
-#define MC1 COMP_FR_QUOTES
-#define MC2 COMP_NBSP_EM_DASH
-#define MC3 COMP_NBSP
-
-enum custom_keycodes {
- COMP_FR_QUOTES = SAFE_RANGE, // Compose: french quotes
- COMP_NBSP_EM_DASH, // Compose: nbsp followed by em dash
- COMP_NBSP, // Compose: nbsp
- PWD1,
- PWD2,
- PWD3, // KP password
-};
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-/*
- ,----------------------------------. ,----------------------------------.
- |Q/Alt | W | E | R | T | | Y | U | I | O | P |
- |------+------+------+------+------| |------+------+------+------+------|
- |A/Ctrl| S | D | F | G | | H | J | K | L |;/Ctrl|
- |------+------+------+------+------|------.,------|------+------+------+------+------|
- |Z/Shft| X | C | V | B |Bkspc ||Delete| N | M | , | . |?/Shft|
- |------+------+------+------+------| || |------+------+------+------+------|
- | ~ | Tab | - | GUI |Spc/LW|------'`------|Ent/RS| |\ | [ | ] | "' |
- `----------------------------------' `----------------------------------'
-*/
- [_QW] = LAYOUT( /* QWERTY */
- LALT_T(KC_Q), KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,
- LCTL_T(KC_A), KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, RCTL_T(KC_SCLN),
- LSFT_T(KC_Z), KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, RSFT_T(KC_SLSH),
- KC_GRV, KC_TAB, KC_MINS, KC_LGUI, LT(_LW, KC_SPC), KC_BSPC, KC_DEL, LT(_RS, KC_ENT), KC_BSLS, KC_LBRC, KC_RBRC, KC_QUOT
- ),
-
-/*
- ,----------------------------------. ,----------------------------------.
- | PrnSc| pwd1 | up | pwd2 | PgUp | | Home | F7 | F8 | F9 | |
- |------+------+------+------+------| |------+------+------+------+------|
- | trns | left | down | right| PgDn | | End | F4 | F5 | F6 | trns |
- |------+------+------+------+------|------.,------|------+------+------+------+------|
- | trns | MC2 | MC3 | ( | ) | || | AltGr| F1 | F2 | F3 | trns |
- |------+------+------+------+------| || |------+------+------+------+------|
- | trns | C+S | Ins | MC1 | trns |------'`------| trns | F10 | F11 | F12 | trns |
- `----------------------------------' `----------------------------------'
-*/
-
- [_RS] = LAYOUT( /* RAISE */
- KC_PSCR, PWD1, KC_UP, PWD2, KC_PGUP, KC_HOME, KC_F7, KC_F8, KC_F9, _______,
- _______, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, KC_END, KC_F4, KC_F5, KC_F6, _______,
- _______, MC2, MC3, KC_LPRN, KC_RPRN, KC_RALT, KC_F1, KC_F2, KC_F3, _______,
- _______, LCTL(KC_LSFT), _______, MC1, _______, _______, _______, _______, KC_F10, KC_F11, KC_F12, _______
- ),
-
-/*
- ,----------------------------------. ,----------------------------------.
- | ! | @ | # | $ | % | | / | 7 | 8 | 9 | . |
- |------+------+------+------+------| |------+------+------+------+------|
- | trns | ^ | & | * | PWD3 | | * | 4 | 5 | 6 | trns |
- |------+------+------+------+------|------.,------|------+------+------+------+------|
- | trns |r_tog | r_hue| r_sat| r_val| || | + | 1 | 2 | 3 | trns |
- |------+------+------+------+------| || |------+------+------+------+------|
- | trns | Esc |QK_BOOT |capslk| trns |------'`------| trns | 0 | - | += | trns |
- `----------------------------------' `----------------------------------'
-*/
-
- [_LW] = LAYOUT( /* LOWER */
- KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_PSLS, KC_7, KC_8, KC_9, KC_PDOT,
- _______, KC_CIRC, KC_AMPR, KC_ASTR, PWD3, KC_PAST, KC_4, KC_5, KC_6, _______,
- _______, RGB_TOG, RGB_HUI, RGB_SAI, RGB_VAI, KC_PPLS, KC_1, KC_2, KC_3, _______,
- _______, KC_ESC , QK_BOOT, KC_CAPS, _______, _______, _______, _______, KC_0, KC_PMNS, KC_EQL, _______
- )
-};
-
-bool process_record_user(uint16_t keycode, keyrecord_t *record) {
- switch (keycode) {
- case MC1: /* French quotes */
- if (record->event.pressed) {
- SEND_STRING(SS_TAP(X_RALT) SS_DELAY(100) "<<" SS_DELAY(100) SS_TAP(X_RALT) SS_DELAY(100) ">>" SS_TAP(X_LEFT));
- }
- break;
-
- case MC2: /* NB-space + mdash + space */
- if (record->event.pressed) {
- SEND_STRING(SS_TAP(X_RALT) SS_DELAY(100) " " SS_DELAY(100) SS_TAP(X_RALT) SS_DELAY(100) "--- ");
- }
- break;
-
- case MC3: /* NB-space */
- if (record->event.pressed) {
- SEND_STRING(SS_TAP(X_RALT) SS_DELAY(100) " ");
- }
- break;
-
- case PWD1:
- if (record->event.pressed) {
- SEND_STRING("NakedLunch1991\n");
- }
- break;
-
- case PWD2:
- if (record->event.pressed) {
- SEND_STRING("O94nx4sUWHc4akud\n");
- }
- break;
-
- case PWD3:
- if (record->event.pressed) {
- SEND_STRING("Q123qQ123q\n");
- }
- break;
- }
- return true;
-};
\ No newline at end of file
diff --git a/keyboards/atreus/keymaps/ridingqwerty/config.h b/keyboards/atreus/keymaps/ridingqwerty/config.h
deleted file mode 100644
index 349d7b1c493d..000000000000
--- a/keyboards/atreus/keymaps/ridingqwerty/config.h
+++ /dev/null
@@ -1,13 +0,0 @@
-#pragma once
-
-#undef MATRIX_ROWS
-#define MATRIX_ROWS 8
-
-#undef MATRIX_COLS
-#define MATRIX_COLS 6
-
-#undef MATRIX_ROW_PINS
-#define MATRIX_ROW_PINS { A6, A7, A8, A15, B11, B12, A14, A13 }
-
-#undef MATRIX_COL_PINS
-#define MATRIX_COL_PINS { B5, B4, B3, B2, B1, B0 }
diff --git a/keyboards/atreus/keymaps/ridingqwerty/keymap.c b/keyboards/atreus/keymaps/ridingqwerty/keymap.c
deleted file mode 100644
index 9b0826402ec8..000000000000
--- a/keyboards/atreus/keymaps/ridingqwerty/keymap.c
+++ /dev/null
@@ -1,153 +0,0 @@
-/* Copyright 2019 George Koenig
- *
- * 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 .
- */
-
-#include QMK_KEYBOARD_H
-#include "ridingqwerty.h"
-
-/* Atreus
- ┏━━━━━━━━┯━━━━━━━━┯━━━━━━━━┯━━━━━━━━┯━━━━━━━━┓ ┏━━━━━━━━┯━━━━━━━━┯━━━━━━━━┯━━━━━━━━┯━━━━━━━━┓
- ┃ Q │ W │ E │ R │ T ┃ ┃ Y │ U │ I │ O │ P ┃
- ┠────────┼────────┼────────┼────────┼────────┨ ┠────────┼────────┼────────┼────────┼────────┨
- /┃ ¶ A │ S │ D │ F │ G ┃ ┃ H │ J │ K │ L │ 🔢 ; ┃
- ┠────────┼────────┼────────┼────────┼────────┞━━━━━━━━┳━━━━━━━━┞────────┼────────┼────────┼────────┼────────┨
- /┃ ⇧ Z │ X │ C │ V │ B │ ┃ │ N │ M │ , │ 𝔽 . │ ⇧ / ┃
- ┠────────┼────────┼────────┼────────┼────────┤ ¶ ⎋ ┃ ❦ ⇥ ├────────┼────────┼────────┼────────┼────────┨
- ┃ ⎈ ⎋ │ ⌘ ⇥ │ ⎇ [ │ ⇧ ] │ 🔢 ⌫ │ ┃ │ ★ ␣ │ ⇧ - │ ⎇ = │ ⌘ ' │ ⎈ ↵ ┃
- ┗━━━━━━━━┷━━━━━━━━┷━━━━━━━━┷━━━━━━━━┷━━━━━━━━┷━━━━━━━━┻━━━━━━━━┷━━━━━━━━┷━━━━━━━━┷━━━━━━━━┷━━━━━━━━┷━━━━━━━━┛
- MODS // LAYERS // MODS //
-*/
-
-#define LAYOUT_atreus( \
- K00, K01, K02, K03, K04, K40, K41, K42, K43, K44, \
- K10, K11, K12, K13, K14, K50, K51, K52, K53, K54, \
- K20, K21, K22, K23, K24, K60, K61, K62, K63, K64, \
- K30, K31, K32, K33, K34, K35, K70, K71, K72, K73, K74, K75 \
-) { \
- { K00, K01, K02, K03, K04, KC_NO }, \
- { K10, K11, K12, K13, K14, KC_NO }, \
- { K20, K21, K22, K23, K24, KC_NO }, \
- { K30, K31, K32, K33, K34, K35 }, \
- { K44, K43, K42, K41, K40, KC_NO }, \
- { K54, K53, K52, K51, K50, KC_NO }, \
- { K64, K63, K62, K61, K60, KC_NO }, \
- { K75, K74, K73, K72, K71, K70 } \
-}
-
-//#define ALPHA UP(UCM_LDEL, UCM_UDEL)
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [_QWERTY] = LAYOUT_atreus_wrapper( /* Qwerty */
- ________________ATREUS_L1__________________, ________________ATREUS_R1__________________,
- ________________ATREUS_L2__________________, ________________ATREUS_R2__________________,
- ________________ATREUS_L3__________________, ________________ATREUS_R3__________________,
- ________________BOTTOM_L4__________________, ____THUMBS_R4___, ________________BOTTOM_R4__________________
- ),
- [_DVORAK] = LAYOUT_atreus_wrapper( /* Qwerty */
- ________________DVORAK_L1__________________, ________________DVORAK_R1__________________,
- ________________DVORAK_L2__________________, ________________DVORAK_R2__________________,
- ________________DVORAK_L3__________________, ________________DVORAK_R3__________________,
- ________________BOTTOM_L4__________________, ____THUMBS_R4___, ________________BOTTOM_R4__________________
- ),
- [_COLEMAK] = LAYOUT_atreus_wrapper( /* Qwerty */
- ________________COLEMAK_L1_________________, ________________COLEMAK_R1_________________,
- ________________COLEMAK_L2_________________, ________________COLEMAK_R2_________________,
- ________________COLEMAK_L3_________________, ________________COLEMAK_R3_________________,
- ________________BOTTOM_L4__________________, ____THUMBS_R4___, ________________BOTTOM_R4__________________
- ),
-//#if defined(UNICODEMAP_ENABLE)
-//#ifdef UNICODE_H
-#ifdef UNICODEMAP_ENABLE
- [_GREEK] = LAYOUT_atreus_wrapper(
- ________________GREEK_L1___________________, ________________GREEK_R1___________________,
- ________________GREEK_L2___________________, ________________GREEK_R2___________________,
- ________________GREEK_L3___________________, ________________GREEK_R3___________________,
- ________________BOTTOM_L4__________________, ____THUMBS_R4___, ________________BOTTOM_R4__________________
- ),
- [_RUSSIAN] = LAYOUT_atreus_wrapper(
- ________________CYRLC_L1___________________, ________________CYRLC_R1___________________,
- ________________CYRLC_L2___________________, ________________CYRLC_R2___________________,
- ________________CYRLC_L3___________________, ________________CYRLC_R3___________________,
- ________________BOTTOM_L4__________________, ____THUMBS_R4___, ________________CYRLC_R4___________________
- ),
- [_RUNES] = LAYOUT_atreus_wrapper(
- ________________FTHRK_L1___________________, ________________FTHRK_R1___________________,
- ________________FTHRK_L2___________________, ________________FTHRK_R2___________________,
- ________________FTHRK_L3___________________, ________________FTHRK_R3___________________,
- ________________BOTTOM_L4__________________, ____THUMBS_R4___, ________________BOTTOM_R4__________________
- ),
- [_HIRA1] = LAYOUT_atreus_wrapper(
- ________________JIS1_L1____________________, ________________JIS1_R1____________________,
- ________________JIS1_L2____________________, ________________JIS1_R2____________________,
- ________________JIS1_L3____________________, ________________JIS1_R3____________________,
- ________________BOTTOM_L4__________________, ____THUMBS_R4___, ________________BOTTOM_R4__________________
- ),
- [_HIRA2] = LAYOUT_atreus_wrapper(
- ________________JIS2_L1____________________, ________________JIS2_R1____________________,
- ________________JIS2_L2____________________, ________________JIS2_R2____________________,
- ________________JIS2_L3____________________, ________________JIS2_R3____________________,
- ________________BOTTOM_L4__________________, ____THUMBS_R4___, ________________BOTTOM_R4__________________
- ),
-#endif
- [_EDITOR] = LAYOUT_atreus_wrapper( /* ED_A, ED_ESC */
- ________________EDITOR_L1__________________, ________________EDITOR_R1__________________,
- ________________EDITOR_L2__________________, ________________EDITOR_R2__________________,
- ________________EDITOR_L3__________________, ________________EDITOR_R3__________________,
- _______, _______, _______, _______, _______, ________________, _______, _______, _______, _______, _______
- ),
- [_NUMBER] = LAYOUT_atreus_wrapper( /* NM_SCLN, NM_BSPC */
- ________________NUMROW_L1__________________, ________________NUMROW_R1__________________,
- ________________NUMROW_R1__________________, ________________NUMPAD_R2__________________,
- ___________________________________________, ________________NUMPAD_R3__________________,
- ___________________________________________, ________________, ________________NUMPAD_R4__________________
- ),
- [_SYMBOL] = LAYOUT_atreus_wrapper( /* SM_SPC */
- ________________SYMROW_L1__________________, ________________SYMROW_R1__________________,
- ________________SYMROW_R1__________________, ________________SYMROW_R1__________________,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_BSLS,
- KC_LBRC, _______, _______, _______, _______, ________________, _______, _______, _______, _______, KC_RBRC
- ),
- [_F_KEYS] = LAYOUT_atreus_wrapper( /* FK_DOT */
- ________________FKEYROW_L1_________________, ________________FKEYROW_R1_________________,
- ________________FKEYROW_R1_________________, ________________FKEYROW_L1_________________,
- KC_F11, KC_F12, _______, _______, _______, KC_F11, KC_F12, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
- ),
- [_DEBUG] = LAYOUT_atreus_wrapper( /* shhhh... */
- ________________DEBUG_L1___________________, ________________DEBUG_R1___________________,
- ________________DEBUG_L2___________________, ________________DEBUG_R2___________________,
- ________________DEBUG_L3___________________, ________________DEBUG_R3___________________,
- _______, _______, _______, _______, _______, ________________, _______, _______, _______, _______, _______
- ),
- [_SECRET] = LAYOUT_atreus_wrapper( /* shhhh... */
-/*
- _______, _______, _______, RUSTY, FUEL, _______, _______, _______, _______, _______,
- AR1ST, SYSNOC, _______, _______, _______, _______, _______, _______, OS_LAB, _______,
- CDLOCAL, _______, C0RE, VAXIS, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
-*/
- ________________SECRET_L1__________________, ________________SECRET_R1__________________,
- ________________SECRET_L2__________________, ________________SECRET_R2__________________,
- ________________SECRET_L3__________________, ________________SECRET_R3__________________,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
-
- ),
- [_FINAL] = LAYOUT_atreus( /* . */
- _______, _______, _______, _______, TESTING, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
- )
-};
diff --git a/keyboards/atreus/keymaps/ridingqwerty/readme.md b/keyboards/atreus/keymaps/ridingqwerty/readme.md
deleted file mode 100644
index 936df360993b..000000000000
--- a/keyboards/atreus/keymaps/ridingqwerty/readme.md
+++ /dev/null
@@ -1 +0,0 @@
-This is a handwired Atreus42 using a Proton C
diff --git a/keyboards/atreus/keymaps/ridingqwerty/rules.mk b/keyboards/atreus/keymaps/ridingqwerty/rules.mk
deleted file mode 100644
index ecead0e01bce..000000000000
--- a/keyboards/atreus/keymaps/ridingqwerty/rules.mk
+++ /dev/null
@@ -1,22 +0,0 @@
-# MCU name
-MCU = STM32F303
-BOARD = QMK_PROTON_C
-
-# Bootloader selection
-BOOTLOADER = stm32-dfu
-
-# Build Options
-# comment out to disable the options.
-#
-BACKLIGHT_ENABLE = no
-BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite
-MOUSEKEY_ENABLE = no # Mouse keys
-EXTRAKEY_ENABLE = yes # Audio control and System control
-CONSOLE_ENABLE = no # Console for debug
-COMMAND_ENABLE = no # Commands for debug and configuration
-NKRO_ENABLE = yes # USB Nkey Rollover
-AUDIO_ENABLE = yes # Doot
-RGBLIGHT_ENABLE = no
-TAP_DANCE_ENABLE = no
-UNICODE_ENABLE = no
-UNICODEMAP_ENABLE = yes
diff --git a/keyboards/atreus/keymaps/talljoe/config.h b/keyboards/atreus/keymaps/talljoe/config.h
deleted file mode 100644
index 71c7864b7ced..000000000000
--- a/keyboards/atreus/keymaps/talljoe/config.h
+++ /dev/null
@@ -1,53 +0,0 @@
-/* Copyright 2020 Joseph Wasson
- *
- * 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 .
- */
-
-#pragma once
-
-#define SPACE_COUNT 3
-
-#define TEMPLATE_TKL( \
- KESC, KF01, KF02, KF03, KF04, KF05, KF06, KF07, KF08, KF09, KF10, KF11, KF12, KSCL, KPRS, KADJ, \
- KGRV, K_1 , K_2 , K_3 , K_4 , K_5 , K_6 , K_7 , K_8 , K_9 , K_0 , KMIN, KEQL, KBSP, KINS, KHOM, KPUP, \
- KTAB, K_Q , K_W , K_E , K_R , K_T , K_Y , K_U , K_I , K_O , K_P , KLBR, KRBR, KBLS, KDEL, KEND, LPDN, \
- KCAP, K_A , K_S , K_D , K_F , K_G , K_H , K_J , K_K , K_L , KSMI, KQUO, KENT, \
- KLSH, K_Z , K_X , K_C , K_V , K_B , K_N , K_M , KCMA, KDOT, KSLS, KRSH, K_UP, \
- KLCT, KLOS, KLAL, KSP3, KSP2, KSP1, KRAL, KROS, KRCT, KPTT, K_LT, K_DN, K_RT \
-) LAYOUT( \
- K_Q , K_W , K_E , K_R , K_T , K_Y , K_U , K_I , K_O , K_P , \
- K_A , K_S , K_D , K_F , K_G , K_H , K_J , K_K , K_L , KSMI, \
- K_Z , K_X , K_C , K_V , K_B , K_N , K_M , KCMA, KDOT, KSLS, \
- KTAB, KLOS, KLAL, KLSH, KSP3, KSP2, KCAP, KSP1, KRSH, KBLS, KQUO, KADJ \
-)
-
-#define TEMPLATE_NUM( \
- KGRV, K_1 , K_2 , K_3 , K_4 , K_5 , K_6 , K_7 , K_8 , K_9 , K_0 , KMIN, KEQL, KBSL, KESC, \
- KTAB, K_Q , K_W , K_E , K_R , K_T , K_Y , K_U , K_I , K_O , K_P , KLBR, KRBR, KBSP, \
- KCAP, K_A , K_S , K_D , K_F , K_G , K_H , K_J , K_K , K_L , KSMI, KQUO, KENT, \
- KLSH, K_Z , K_X , K_C , K_V , K_B , K_N , K_M , KCMA, KDOT, KSLS, KRSH, KADJ, \
- KLCT, KLOS, KLAL, KSP3, KSP2, KSP1, KRAL, KROS, KRCT, KPTT \
-) LAYOUT( \
- K_Q , K_W , K_E , K_R , K_T , K_Y , K_U , K_I , K_O , K_P , \
- K_A , K_S , K_D , K_F , K_G , K_H , K_J , K_K , K_L , KSMI, \
- K_Z , K_X , K_C , K_V , K_B , K_N , K_M , KCMA, KDOT, KSLS, \
- KTAB, KLOS, KLAL, KLSH, KSP3, KSP2, KCAP, KSP1, KRAL, KROS, KQUO, KADJ \
-)
-
-#define TEMPLATE_RESET LAYOUT( \
- QK_BOOT, 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, \
- QK_BOOT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, QK_BOOT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX \
-)
diff --git a/keyboards/atreus/keymaps/talljoe/keymap.c b/keyboards/atreus/keymaps/talljoe/keymap.c
deleted file mode 100644
index 7812add812b3..000000000000
--- a/keyboards/atreus/keymaps/talljoe/keymap.c
+++ /dev/null
@@ -1 +0,0 @@
-// This space intentionally left blank
diff --git a/keyboards/atreus/keymaps/talljoe/rules.mk b/keyboards/atreus/keymaps/talljoe/rules.mk
deleted file mode 100644
index 92007fe8ad71..000000000000
--- a/keyboards/atreus/keymaps/talljoe/rules.mk
+++ /dev/null
@@ -1 +0,0 @@
-USER_NAME := talljoe
diff --git a/keyboards/atreus/keymaps/xyverz/config.h b/keyboards/atreus/keymaps/xyverz/config.h
deleted file mode 100644
index 037c9f3180ca..000000000000
--- a/keyboards/atreus/keymaps/xyverz/config.h
+++ /dev/null
@@ -1,4 +0,0 @@
-#pragma once
-
-#undef DEBOUNCE
-#define DEBOUNCE 6
diff --git a/keyboards/atreus/keymaps/xyverz/keymap.c b/keyboards/atreus/keymaps/xyverz/keymap.c
deleted file mode 100644
index 3fea40287313..000000000000
--- a/keyboards/atreus/keymaps/xyverz/keymap.c
+++ /dev/null
@@ -1,106 +0,0 @@
-// This is the personal keymap of Ian Sterling (@xyverz). It is based on the keymap by
-// Chris Gerber (@gerbercj), with the addition of persistent layers like the Planck and
-// Preonic keyboards by Jack Humbert.
-
-#include QMK_KEYBOARD_H
-
-// Each layer gets a name for readability, which is then used in the keymap matrix below.
-// The underscores don't mean anything - you can have a layer called STUFF or any other name.
-// Layer names don't all need to be of the same length, obviously, and you can also skip them
-// entirely and just use numbers.
-
-enum layer_names {
- _DVORAK,
- _LOWER,
- _RAISE,
- _ADJUST
-};
-
-enum planck_keycodes {
- LOWER = SAFE_RANGE,
- RAISE,
- ADJUST
-};
-
-// Adding macros to make the keymaps below much easier to read.
-#define SFTSCLN SFT_T(KC_SCLN)
-#define SFTZED SFT_T(KC_Z)
-#define ALTENT ALT_T(KC_ENT)
-#define DELGUI GUI_T(KC_DEL)
-#define ESCTRL CTL_T(KC_ESC)
-#define TABALT ALT_T(KC_TAB)
-#define ADJUST MO(_ADJUST)
-#define LOWER MO(_LOWER)
-#define RAISE MO(_RAISE)
-#define MACLOCK LGUI(LCTL(KC_Q))
-#define WINLOCK LGUI(KC_L)
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- /* Dvorak Layer
- ,----------------------------------. ,----------------------------------.
- | ' | , | . | P | Y | | F | G | C | R | L |
- |------+------+------+------+------| |------+------+------+------+------|
- | A | O | E | U | I | | D | H | T | N | S |
- |------+------+------+------+------|------.,------|------+------+------+------+------|
- |SFT/ ;| Q | J | K | X |Delete||Enter | B | M | W | V |SFT/ Z|
- |------+------+------+------+------| / GUI|| / ALT|------+------+------+------+------|
- | Esc | Tab | GUI | LOWER| BkSp |------'`------| Spc | RAISE| - | / | \ |
- `----------------------------------' `----------------------------------' */
- [_DVORAK] = LAYOUT(
- KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L ,
- KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S ,
- SFTSCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, SFTZED ,
- ESCTRL, TABALT, KC_LGUI, LOWER, KC_BSPC, DELGUI, ALTENT, KC_SPC, RAISE, KC_MINS, KC_SLSH, KC_BSLS
- ),
-
- /* LOWER Layer
- ,----------------------------------. ,----------------------------------.
- | ! | @ | # | $ | % | | ^ | & | * | ( | ) |
- |------+------+------+------+------| |------+------+------+------+------|
- | CAPS | | UP | | Home | | PgDn | | + | { | } |
- |------+------+------+------+------|------.,------|------+------+------+------+------|
- | | Left | Down | Right| End | || | PgUp | Mute | Vol- | Vol+ | |
- |------+------+------+------+------| || |------+------+------+------+------|
- | ~ | | | | Del |------'`------| Ins | | | | |
- `----------------------------------' `----------------------------------'*/
- [_LOWER] = LAYOUT(
- KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN,
- KC_CAPS, _______, KC_UP, _______, KC_HOME, KC_PGUP, _______, KC_PLUS, KC_LCBR, KC_RCBR,
- _______, KC_LEFT, KC_DOWN, KC_RGHT, KC_END, KC_PGDN, KC_MUTE, KC_VOLD, KC_VOLU, _______,
- KC_TILD, _______, _______, _______, KC_DEL, _______, _______, KC_INS, ADJUST, _______, _______, _______
- ),
-
- /* RAISE Layer
- ,----------------------------------. ,----------------------------------.
- | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 |
- |------+------+------+------+------| |------+------+------+------+------|
- | CAPS | | UP | | Home | | PgDn | | = | [ | ] |
- |------+------+------+------+------|------.,------|------+------+------+------+------|
- | | Left | Down | Right| End | || | PgUp | Prev | Play | Next | |
- |------+------+------+------+------| || |------+------+------+------+------|
- | ` | | | | Del |------'`------| Ins | | | | |
- `----------------------------------' `----------------------------------'*/
- [_RAISE] = LAYOUT(
- KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0 ,
- KC_CAPS, _______, KC_UP, _______, KC_HOME, KC_PGUP, _______, KC_EQL, KC_LBRC, KC_RBRC,
- _______, KC_LEFT, KC_DOWN, KC_RGHT, KC_END, KC_PGDN, KC_MPRV, KC_MPLY, KC_MNXT, _______,
- KC_GRV, _______, _______, ADJUST, KC_DEL, _______, _______, KC_INS, _______, _______, _______, _______
- ),
-
- /* ADJUST Layer
- ,----------------------------------. ,----------------------------------.
- | F1 | F2 | F3 | F4 | F5 | | F6 | F7 | F8 | F9 | F10 |
- |------+------+------+------+------| |------+------+------+------+------|
- | F11 | | | | | | | PrSc | ScLk | Paus | F12 |
- |------+------+------+------+------|------.,------|------+------+------+------+------|
- | | | | | | || | | | | | |
- |------+------+------+------+------|MACLCK||WINLCK|------+------+------+------+------|
- | | | | | |------'`------| | | | |QKBOOT|
- `----------------------------------' `----------------------------------'*/
- [_ADJUST] = LAYOUT(
- KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10 ,
- KC_F11, _______, _______, _______, _______, _______, KC_PSCR, KC_SCRL, KC_PAUS, KC_F12 ,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, MACLOCK, WINLOCK, _______, _______, _______, _______, QK_BOOT
- ),
-};
\ No newline at end of file
diff --git a/keyboards/atreus/keymaps/xyverz/readme.md b/keyboards/atreus/keymaps/xyverz/readme.md
deleted file mode 100644
index de9ae3f4847d..000000000000
--- a/keyboards/atreus/keymaps/xyverz/readme.md
+++ /dev/null
@@ -1,107 +0,0 @@
-# Xyverz's Atreus Keymap
-
-## About this keymap:
-
-This is the second iteration of my Atreus keymap. The first one was as close to the planck as I could get at the
-time, but still very much like the original Atreus keymap. I've managed to get things working better now and have
-implemented (more like copied) the RAISE/LOWER/ADJUST layers. This is a work in progress, but I think I'm closer
-to a final go with this.
-
-I'm using MOD_TAP quite a bit in this keymap. On all layers, R4 pinky keys use mod-tap and are SHIFT when held
-and their normal keys when tapped. In addition, ESC and TAB are also set as Ctrl and ALT respectively when held,
-and Enter/ALT on the right thumb key for all alpha layers.
-
-I've enabled persistent keymaps for Qwerty, Dvorak and Colemak layers, similar to the default Planck layouts.
-
-Recently added: Documentation, Formatting, and another Dvorak layer that has Command on the left thumb, instead of
-Control.
-
-## Still to do:
-
- * Enjoy this revision; figure out new things later.
-
-### Layer 0: Dvorak layer
-
- ,----------------------------------. ,----------------------------------.
- | ' | , | . | P | Y | | F | G | C | R | L |
- |------+------+------+------+------| |------+------+------+------+------|
- | A | O | E | U | I | | D | H | T | N | S |
- |------+------+------+------+------|------.,------|------+------+------+------+------|
- |Shft ;| Q | J | K | X | CTRL ||Alt / | B | M | W | V |Shft Z|
- |------+------+------+------+------| ||Enter |------+------+------+------+------|
- | Esc | Tab | GUI | LOWER| BkSp |------'`------| Spc | RAISE| - | / | \ |
- `----------------------------------' `----------------------------------'
-
-### Layer 1: QWERTY layer
-
- ,----------------------------------. ,----------------------------------.
- | Q | W | E | R | T | | Y | U | I | O | P |
- |------+------+------+------+------| |------+------+------+------+------|
- | A | S | D | F | G | | H | J | K | L | ; |
- |------+------+------+------+------|------.,------|------+------+------+------+------|
- |Shft Z| X | C | V | B | CTRL ||Alt / | N | M | , | . |Shft /|
- |------+------+------+------+------| ||Enter |------+------+------+------+------|
- | Esc | Tab | GUI | LOWER| BkSp |------'`------| Spc | RAISE| - | ' | \ |
- `----------------------------------' `----------------------------------'
-
-### Layer 2: Colemak layer
-
- ,----------------------------------. ,----------------------------------.
- | Q | W | F | P | G | | J | L | U | Y | L |
- |------+------+------+------+------| |------+------+------+------+------|
- | A | R | S | T | D | | H | N | E | I | S |
- |------+------+------+------+------|------.,------|------+------+------+------+------|
- |Shft Z| X | C | V | B | CTRL ||Alt / | K | M | , | . |Shft /|
- |------+------+------+------+------| ||Enter |------+------+------+------+------|
- | Esc | Tab | GUI | LOWER| BkSp |------'`------| Spc | RAISE| - | ' | \ |
- `----------------------------------' `----------------------------------'
-
-### Layer 3: Dvorak for Mac layer
-
- ,----------------------------------. ,----------------------------------.
- | ' | , | . | P | Y | | F | G | C | R | L |
- |------+------+------+------+------| |------+------+------+------+------|
- | A | O | E | U | I | | D | H | T | N | S |
- |------+------+------+------+------|------.,------|------+------+------+------+------|
- |SFT/ ;| Q | J | K | X | CMD ||Alt / | B | M | W | V |SFT/ Z|
- |------+------+------+------+------| ||Enter |------+------+------+------+------|
- | Esc | Tab | GUI | LOWER| BkSp |------'`------| Spc | RAISE| - | / | \ |
- `----------------------------------' `----------------------------------'
-
-### Layer 4: LOWER layer
-
- ,----------------------------------. ,----------------------------------.
- | ! | @ | # | $ | % | | ^ | & | * | ( | ) |
- |------+------+------+------+------| |------+------+------+------+------|
- | CAPS | | UP | | Home | | PgDn | | + | { | } |
- |------+------+------+------+------|------.,------|------+------+------+------+------|
- | | Left | Down | Right| End | || | PgUp | Mute | Vol- | Vol+ | |
- |------+------+------+------+------| || |------+------+------+------+------|
- | ~ | | | | Del |------'`------| Ins | | | |MACLCK|
- `----------------------------------' `----------------------------------'
-
-
-### Layer 5: RAISE layer
-
- ,----------------------------------. ,----------------------------------.
- | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 |
- |------+------+------+------+------| |------+------+------+------+------|
- | CAPS | | UP | | Home | | PgDn | | = | [ | ] |
- |------+------+------+------+------|------.,------|------+------+------+------+------|
- | | Left | Down | Right| End | || | PgUp | Prev | Play | Next | |
- |------+------+------+------+------| || |------+------+------+------+------|
- | ` | | | | Del |------'`------| Ins | | | |MACLCK|
- `----------------------------------' `----------------------------------'
-
-### Layer 6: ADJUST layer
-
- ,----------------------------------. ,----------------------------------.
- | F1 | F2 | F3 | F4 | F5 | | F6 | F7 | F8 | F9 | F10 |
- |------+------+------+------+------| |------+------+------+------+------|
- | F11 | | | | | | | PScr | SLck | Paus | F12 |
- |------+------+------+------+------|------.,------|------+------+------+------+------|
- | |QWERTY|COLEMK|DVORAK|DVORMC| || | | | | | |
- |------+------+------+------+------| || |------+------+------+------+------|
- | | | | | |------'`------| | | | | RESET|
- `----------------------------------' `----------------------------------'
-
diff --git a/keyboards/atreus/keymaps/yttyx/README.md b/keyboards/atreus/keymaps/yttyx/README.md
deleted file mode 100644
index ba8fa47faab3..000000000000
--- a/keyboards/atreus/keymaps/yttyx/README.md
+++ /dev/null
@@ -1,103 +0,0 @@
-# Overview
-
-This layout is based on Balance Twelve (mirror variant) by Sasha Viminitz. Please see [this page](https://mathematicalmulticore.wordpress.com/the-keyboard-layout-project/)
-for more information. It's designed for left-handers who use their right hand for the mouse.
-
-## To build
-
-```
-sudo make atreus:yttyx
-```
-
-## To flash (example)
-
-```
-sudo avrdude -p atmega32u4 -c avr109 -U flash:w:atreus_yttyx.hex -P /dev/ttyACM0
-```
-
-## Layers
-
-### Base:
-
- .--------.-------.-------.-------.--------. .-------.-------.-------.-------.------.
- | P | L | C | D | W | | U | O | Y | K | Q |
- |--------+-------+-------+-------+--------| |-------+-------+-------+-------+------|
- | N | R | S | T | M | | A | E | I | H | V |
- |--------+-------+-------+-------+--------| |-------+-------+-------+-------+------|
- | Z Sft | J Ctl | F Alt | G | B | | , | . Alt | ; Ctl | X Sft | Sup |
- '--------'-------'-------+-------+--------+-----. .-----+-------+-------+-------'-------'------'
- | BS P1 | Spc P2 | P3 | | | Sft | |
- '-------'--------'-----' '-----'-------'-------'
-
-### P1: Punctuation (1)
-
-
- .--------.-------.-------.-------.-------. .------.-------.-------.-------.------.
- | Esc | | | | RS | | | | / | ^ | £ | ~ |
- |--------+-------+-------+-------+-------| |------+-------+-------+-------+------|
- | Tab | | | | | | & | \ | ` | $ | Ent |
- |--------+-------+-------+-------+-------| |------+-------+-------+-------+------|
- | Sft | Ctl | Alt | Del | | | % | Alt | Ctl | Sft | Sup |
- '--------'-------'-------+-------+-------+-----. .-----+------+-------+-------'-------'------'
- | P1 | | | | | Sft | |
- '-------'-------'-----' '-----'------'-------'
-
-### P2: Punctuation (2)
-
- .-------.-------.-------.-------.-------. .-------.-------.-------.-------.------.
- | Esc | | NC | FV | | | ( | ) | " | ? | |
- |-------+-------+-------+-------+-------| |-------+-------+-------+-------+------|
- | Tab | Ctl-X | Ctl-C | Ctl-V | Ctl-Z | | { | } | ' | ! | Ent |
- |-------+-------+-------+-------+-------| |-------+-------+-------+-------+------|
- | Sft | Ctl | Alt | Del | Ent | | # | Alt | Ctl | Sft | Sup |
- '-------'-------'-------+-------+-------+-----. .-----+-------+-------+-------'-------'------'
- | BS | P2 | | | | Sft | |
- '-------'-------'-----' '-----'-------'-------'
-
-### P3: Punctuation (3)
-
- .-------.-------.-------.-------.-------. .------.-------.-------.-------.------.
- | Esc | | Break | Pscr | ScLk | | < | > | + | _ | = |
- |-------+-------+-------+-------+-------| |------+-------+-------+-------+------|
- | Tab | | | Caps | | | [ | ] | * | - | Ent |
- |-------+-------+-------+-------+-------| |------+-------+-------+-------+------|
- | Sft | Ctl | Alt | Del | | | @ | Alt | Ctl | Sft | Sup |
- '-------'-------'-------+-------+-------+-----. .-----+------+-------+-------'-------'------'
- | BS | | P3 | | | Sft | |
- '-------'-------'-----' '-----'------'-------'
-
-### Numerals / Cursor control
-
- .-------.-------.-------.------.-------. .------.-------.-------.------.------.
- | 1 | 2 | 3 | 4 | 5 | | Home | Up | End | PgUp | |
- |-------+-------+-------+------+-------| |------+-------+-------+------+------|
- | 6 | 7 | 8 | 9 | 0 | | Left | Down | Right | PgDn | |
- |-------+-------+-------+------+-------| |------+-------+-------+------+------|
- | Sft | Ctl | Alt | Del | . | | Ins | Alt | Ctl | Sft | Sup |
- '-------'-------'-------+------+-------+-----. .-----+------+-------+-------'------'------'
- | BS | BA | | | | Sft | |
- '------'-------'-----' '-----'------'-------'
-
-### FV: Function keys / Cursor control (Vim)
-
- .-------.------.-------.-----.-------. .------.-------.-----.-------.------.
- | F1 | F2 | F3 | F4 | F5 | | 0 | K | $ | Ctl-B | |
- |-------+------+-------+-----+-------| |------+-------+-----+-------+------|
- | F6 | F7 | F8 | F9 | F10 | | H | J | L | Ctl-F | |
- |-------+------+-------+-----+-------| |------+-------+-----+-------+------|
- | Sft | Ctl | Alt | F11 | F12 | | | Alt | Ctl | Sft | Sup |
- '-------'------'-------+-----+-------+-----. .-----+------+-------+-----'-------'------'
- | BS | BA | | | | Sft | |
- '-----'-------'-----' '-----'------'-------'
-
-### RS: Reset
-
- .-------.------.-------.-----.-------. .------.-------.-----.-------.------.
- | RESET | | | | | | | | | | |
- |-------+------+-------+-----+-------| |------+-------+-----+-------+------|
- | | | | | | | | | | | |
- |-------+------+-------+-----+-------| |------+-------+-----+-------+------|
- | | | | | | | | | | | |
- '-------'------'-------+-----+-------+-----. .-----+------+-------+-----'-------'------'
- | | BA | | | | | |
- '-----'-------'-----' '-----'------'-------'
diff --git a/keyboards/atreus/keymaps/yttyx/config.h b/keyboards/atreus/keymaps/yttyx/config.h
deleted file mode 100644
index b9e113ec0bb4..000000000000
--- a/keyboards/atreus/keymaps/yttyx/config.h
+++ /dev/null
@@ -1,4 +0,0 @@
-#pragma once
-#define NO_ACTION_ONESHOT
-#define NO_ACTION_MACRO
-#define NO_ACTION_FUNCTION
diff --git a/keyboards/atreus/keymaps/yttyx/keymap.c b/keyboards/atreus/keymaps/yttyx/keymap.c
deleted file mode 100644
index ce19fc7da5ab..000000000000
--- a/keyboards/atreus/keymaps/yttyx/keymap.c
+++ /dev/null
@@ -1,159 +0,0 @@
-
-#include QMK_KEYBOARD_H
-
-enum layers {
- BA, // Base (Balance Twelve mirror variant)
- P1, // Punctuation (1)
- P2, // Punctuation (2)
- P3, // Punctuation (2)
- NC, // Numerals / Cursor control
- FV, // Function keys / Cursor control (Vim)
- RS // Reset
-};
-
-// Abbreviations - base
-#define KX_P1_BSPC LT(P1, KC_BSPC)
-#define KX_P2_SPC LT(P2, KC_SPC)
-
-#define KX_SFT_Z MT(MOD_LSFT, KC_Z)
-#define KX_CTL_J MT(MOD_LCTL, KC_J)
-#define KX_ALT_F MT(MOD_LALT, KC_F)
-
-#define KX_ALT_DOT MT(MOD_LALT, KC_DOT)
-#define KX_CTL_SCLN MT(MOD_LCTL, KC_SCLN)
-#define KX_SFT_X MT(MOD_LSFT, KC_X)
-
-#define KX_AT LSFT(KC_QUOT)
-#define KX_DQUOT LSFT(KC_2)
-#define KX_PIPE LSFT(KC_NUBS)
-#define KX_TILDA LSFT(KC_NUHS)
-
-
-const uint16_t PROGMEM keymaps[][ MATRIX_ROWS ][ MATRIX_COLS ] = {
- /*
- .--------.-------.-------.-------.--------. .-------.-------.-------.-------.------.
- | P | L | C | D | W | | U | O | Y | K | Q |
- |--------+-------+-------+-------+--------| |-------+-------+-------+-------+------|
- | N | R | S | T | M | | A | E | I | H | V |
- |--------+-------+-------+-------+--------| |-------+-------+-------+-------+------|
- | Z Sft | J Ctl | F Alt | G | B | | , | . Alt | ; Ctl | X Sft | Sup |
- '--------'-------'-------+-------+--------+-----. .-----+-------+-------+-------'-------'------'
- | BS P1 | Spc P2 | P3 | | | Sft | |
- '-------'--------'-----' '-----'-------'-------'
- */
- [BA] = LAYOUT(
- KC_P, KC_L, KC_C, KC_D, KC_W, KC_U, KC_O, KC_Y, KC_K, KC_Q,
- KC_N, KC_R, KC_S, KC_T, KC_M, KC_A, KC_E, KC_I, KC_H, KC_V,
- KX_SFT_Z, KX_CTL_J, KX_ALT_F, KC_G, KC_B, KC_COMM, KX_ALT_DOT, KX_CTL_SCLN, KX_SFT_X, KC_LGUI,
- XXXXXXX, XXXXXXX, XXXXXXX, KX_P1_BSPC, KX_P2_SPC, MO(P3), XXXXXXX, KC_RSFT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX
- ),
-
- /* P1: Punctuation (1)
- .--------.-------.-------.-------.-------. .------.-------.-------.-------.------.
- | Esc | | | | RS | | | | / | ^ | | ~ |
- |--------+-------+-------+-------+-------| |------+-------+-------+-------+------|
- | Tab | | | | | | & | \ | ` | $ | Ent |
- |--------+-------+-------+-------+-------| |------+-------+-------+-------+------|
- | Sft | Ctl | Alt | Del | | | % | Alt | Ctl | Sft | Sup |
- '--------'-------'-------+-------+-------+-----. .-----+------+-------+-------'-------'------'
- | P1 | | | | | Sft | |
- '-------'-------'-----' '-----'------'-------'
- */
- [P1] = LAYOUT(
- KC_ESC, XXXXXXX, XXXXXXX, XXXXXXX, TO(RS), KX_PIPE, KC_SLSH, KC_CIRC, KC_HASH, KX_TILDA,
- KC_TAB, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_AMPR, KC_NUBS, KC_GRV, KC_DLR, KC_ENT,
- KC_LSFT, KC_LCTL, KC_LALT, KC_DEL, XXXXXXX, KC_PERC, KC_LALT, KC_LCTL, KC_LSFT, _______,
- XXXXXXX, XXXXXXX, XXXXXXX, _______, XXXXXXX, XXXXXXX, XXXXXXX, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX
- ),
-
- /* P2: Punctuation (2)
- .-------.-------.-------.-------.-------. .-------.-------.-------.-------.------.
- | Esc | | NC | FV | | | ( | ) | " | ? | |
- |-------+-------+-------+-------+-------| |-------+-------+-------+-------+------|
- | Tab | Ctl-X | Ctl-C | Ctl-V | Ctl-Z | | { | } | ' | ! | Ent |
- |-------+-------+-------+-------+-------| |-------+-------+-------+-------+------|
- | Sft | Ctl | Alt | Del | Ent | | # | Alt | Ctl | Sft | Sup |
- '-------'-------'-------+-------+-------+-----. .-----+-------+-------+-------'-------'------'
- | BS | P2 | | | | Sft | |
- '-------'-------'-----' '-----'-------'-------'
- */
- [P2] = LAYOUT(
- KC_ESC, XXXXXXX, TO(NC), TO(FV), XXXXXXX, KC_LPRN, KC_RPRN, KX_DQUOT, KC_QUES, XXXXXXX,
- KC_TAB, LCTL(KC_X), LCTL(KC_C), LCTL(KC_V), LCTL(KC_Z), KC_LCBR, KC_RCBR, KC_QUOT, KC_EXLM, KC_ENT,
- KC_LSFT, KC_LCTL, KC_LALT, KC_DEL, KC_ENT, KC_NUHS, KC_LALT, KC_LCTL, KC_LSFT, _______,
- XXXXXXX, XXXXXXX, XXXXXXX, KC_BSPC, _______, XXXXXXX, XXXXXXX, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX
- ),
-
- /* P3: Punctuation (3)
- .-------.-------.-------.-------.-------. .------.-------.-------.-------.------.
- | Esc | | Break | Pscr | ScLk | | < | > | + | _ | = |
- |-------+-------+-------+-------+-------| |------+-------+-------+-------+------|
- | Tab | | | Caps | | | [ | ] | * | - | Ent |
- |-------+-------+-------+-------+-------| |------+-------+-------+-------+------|
- | Sft | Ctl | Alt | Del | | | @ | Alt | Ctl | Sft | Sup |
- '-------'-------'-------+-------+-------+-----. .-----+------+-------+-------'-------'------'
- | BS | | P3 | | | Sft | |
- '-------'-------'-----' '-----'------'-------'
- */
- [P3] = LAYOUT(
- KC_ESC, XXXXXXX, KC_BRK, KC_PSCR, KC_SCRL, KC_LABK, KC_RABK, KC_PLUS, KC_UNDS, KC_EQL,
- KC_TAB, XXXXXXX, XXXXXXX, KC_CAPS, XXXXXXX, KC_LBRC, KC_RBRC, KC_ASTR, KC_MINS, KC_ENT,
- KC_LSFT, KC_LCTL, KC_LALT, KC_DEL, XXXXXXX, KX_AT, KC_LALT, KC_LCTL, KC_LSFT, _______,
- XXXXXXX, XXXXXXX, XXXXXXX, KC_BSPC, XXXXXXX, _______, XXXXXXX, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX
- ),
-
- /* NC: Numerals / Cursor control
- .-------.-------.-------.------.-------. .------.-------.-------.------.------.
- | 1 | 2 | 3 | 4 | 5 | | Home | Up | End | PgUp | |
- |-------+-------+-------+------+-------| |------+-------+-------+------+------|
- | 6 | 7 | 8 | 9 | 0 | | Left | Down | Right | PgDn | |
- |-------+-------+-------+------+-------| |------+-------+-------+------+------|
- | Sft | Ctl | Alt | Del | . | | Ins | Alt | Ctl | Sft | Sup |
- '-------'-------'-------+------+-------+-----. .-----+------+-------+-------'------'------'
- | BS | BA | | | | Sft | |
- '------'-------'-----' '-----'------'-------'
- */
- [NC] = LAYOUT(
- KC_1, KC_2, KC_3, KC_4, KC_5, KC_HOME, KC_UP, KC_END, KC_PGUP, XXXXXXX,
- KC_6, KC_7, KC_8, KC_9, KC_0, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, XXXXXXX,
- KC_LSFT, KC_LCTL, KC_LALT, KC_DEL, KC_DOT, KC_INS, KC_LALT, KC_LCTL, KC_LSFT, _______,
- XXXXXXX, XXXXXXX, XXXXXXX, KC_BSPC, TO(BA), XXXXXXX, XXXXXXX, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX
- ),
-
- /* FV: Function keys / Cursor control (Vim)
- .-------.------.-------.-----.-------. .------.-------.-----.-------.------.
- | F1 | F2 | F3 | F4 | F5 | | 0 | K | $ | Ctl-B | |
- |-------+------+-------+-----+-------| |------+-------+-----+-------+------|
- | F6 | F7 | F8 | F9 | F10 | | H | J | L | Ctl-F | |
- |-------+------+-------+-----+-------| |------+-------+-----+-------+------|
- | Sft | Ctl | Alt | F11 | F12 | | | Alt | Ctl | Sft | Sup |
- '-------'------'-------+-----+-------+-----. .-----+------+-------+-----'-------'------'
- | BS | BA | | | | Sft | |
- '-----'-------'-----' '-----'------'-------'
- */
- [FV] = LAYOUT(
- KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_0, KC_K, KC_DLR, LCTL(KC_B), XXXXXXX,
- KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_H, KC_J, KC_L, LCTL(KC_F), XXXXXXX,
- KC_LSFT, KC_LCTL, KC_LALT, KC_F11, KC_F12, XXXXXXX, KC_LALT, KC_LCTL, KC_LSFT, _______,
- XXXXXXX, XXXXXXX, XXXXXXX, KC_BSPC, TO(BA), XXXXXXX, XXXXXXX, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX
- ),
-
- /* RS: Reset
- .-------.------.-------.-----.-------. .------.-------.-----.-------.------.
- | QK_BOOT | | | | | | | | | | |
- |-------+------+-------+-----+-------| |------+-------+-----+-------+------|
- | | | | | | | | | | | |
- |-------+------+-------+-----+-------| |------+-------+-----+-------+------|
- | | | | | | | | | | | |
- '-------'------'-------+-----+-------+-----. .-----+------+-------+-----'-------'------'
- | | BA | | | | | |
- '-----'-------'-----' '-----'------'-------'
- */
- [RS] = LAYOUT(
- QK_BOOT, 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, TO(BA), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX
- )
-};
-
diff --git a/keyboards/atreus62/info.json b/keyboards/atreus62/info.json
index a745eb5e2727..d27f97ce9749 100644
--- a/keyboards/atreus62/info.json
+++ b/keyboards/atreus62/info.json
@@ -4,7 +4,7 @@
"url": "",
"maintainer": "qmk",
"usb": {
- "vid": "0xFEED",
+ "vid": "0x5072",
"pid": "0x6062",
"device_version": "0.0.1"
},
diff --git a/keyboards/atreus62/keymaps/194h/config.h b/keyboards/atreus62/keymaps/194h/config.h
deleted file mode 100644
index f5306a07f188..000000000000
--- a/keyboards/atreus62/keymaps/194h/config.h
+++ /dev/null
@@ -1,6 +0,0 @@
-#pragma once
-#define ONESHOT_TIMEOUT 3000
-#define TAPPING_TERM 200
-#define FORCE_NKRO
-#define LEADER_TIMEOUT 1000
-#define TAPPING_TOGGLE 3
diff --git a/keyboards/atreus62/keymaps/194h/keymap.c b/keyboards/atreus62/keymaps/194h/keymap.c
deleted file mode 100644
index 557b43cd8c61..000000000000
--- a/keyboards/atreus62/keymaps/194h/keymap.c
+++ /dev/null
@@ -1,149 +0,0 @@
-#include QMK_KEYBOARD_H
-
-//The current Nordic and Norwegian layout files are a mess. I'll do it myself:
-//Norwegian
-#define NO_AE KC_QUOT // Æ
-#define NO_AO KC_LBRC // Å
-#define NO_BSLS KC_EQL // Backslash
-#define NO_LT KC_NUBS // <
-#define NO_MINS KC_SLSH // -
-#define NO_OE KC_SCLN // Ø
-#define NO_PIPE KC_GRV // |
-#define NO_PLUS KC_MINS // +
-#define NO_QUOT KC_NUHS // '
-#define NO_UMLA KC_RBRC // ¨
-//Norwegian - Modifier dependant definitions
-#define NO_EXLM LSFT(KC_1) // !
-#define NO_DQT LSFT(KC_2) // "
-#define NO_AT RALT(KC_2) // @
-#define NO_HASH LSFT(KC_3) // #
-#define NO_EUR LSFT(KC_4) // €
-#define NO_DLR RALT(KC_4) // $
-#define NO_PERC LSFT(KC_5) // %
-#define NO_AND LSFT(KC_6) // &
-#define NO_SLSH LSFT(KC_7) // /
-#define NO_PO LSFT(KC_8) // (
-#define NO_PC LSFT(KC_9) // )
-#define NO_EQL LSFT(KC_0) // =
-#define NO_LCBR RALT(KC_7) // {
-#define NO_LBRC RALT(KC_8) // [
-#define NO_RBRC RALT(KC_9) // ]
-#define NO_RCBR RALT(KC_0) // }
-#define NO_COLN LSFT(KC_DOT) // :
-#define NO_SCLN LSFT(KC_COMM) // ;
-#define NO_MICR RALT(KC_M) // µ
-#define NO_EURO RALT(KC_E) // €
-#define NO_SECT LSFT(KC_GRV) // §
-#define NO_GERC RALT(KC_COMM) // ¸
-#define NO_QUAR LSFT(RALT(KC_4)) // ¼
-//Norwegian layout - dependant on previous definitions
-#define NO_UNDS LSFT(NO_MINS) // _
-#define NO_QUES LSFT(NO_PLUS) // ?
-#define NO_ACUT RALT(NO_BSLS) // Acute
-#define NO_GRAV LSFT(NO_BSLS) // `
-#define NO_GT LSFT(NO_LT) // >
-#define NO_HALF RALT(NO_LT) // ½
-#define NO_HAT LSFT(NO_UMLA) // ^
-#define NO_ASTR LSFT(NO_QUOT) // *
-#define NO_TILD RALT(NO_UMLA) // ~
-
-//One Shot Modifier
-#define OSM_LCTL OSM(MOD_LCTL)
-#define OSM_LALT OSM(MOD_LALT)
-#define OSM_LSFT OSM(MOD_LSFT)
-#define OSM_LGUI OSM(MOD_LGUI)
-#define OSM_RCTL OSM(MOD_RCTL)
-#define OSM_RALT OSM(MOD_RALT)
-#define OSM_RSFT OSM(MOD_RSFT)
-#define OSM_RGUI OSM(MOD_RGUI)
-
-//CTRL on hold, ESC on tap
-#define CTL_ESC CTL_T(KC_ESC)
-
-//Layers
-#define L1 0
-#define L2 1
-#define L3 2
-#define L4 3
-#define L5 4
-
-// Momentary switch to layer
-#define MO_L2 MO(L2)
-#define MO_L4 MO(L4)
-#define MO_L5 MO(L5)
-// Momentary switch to layer - One Shot Layer
-#define OSL_L2 OSL(L2)
-#define OSL_L3 OSL(L3)
-#define OSL_L4 OSL(L4)
-
-//Tap Dance Declarations
-enum {
- SCLN_OE = 0,
- QUOT_AE,
- DQT_AO
-};
-
-//Tap Dance Definitions
-tap_dance_action_t tap_dance_actions[] = {
- //Tap once for semicolon, twice for ø
- [SCLN_OE] = ACTION_TAP_DANCE_DOUBLE(NO_SCLN, NO_OE),
- //Tap once for single quote, twice for æ
- [QUOT_AE] = ACTION_TAP_DANCE_DOUBLE(NO_QUOT, NO_AE),
- //Tap once for double quote, twice for å
- [DQT_AO] = ACTION_TAP_DANCE_DOUBLE(NO_DQT, NO_AO),
-// Other declarations would go here, separated by commas, if you have them
-};
-
-//Tap Dance keys
-#define TD_SCLN_OE TD(SCLN_OE)
-#define TD_QUOT_AE TD(QUOT_AE)
-#define TD_DQT_AO TD(DQT_AO)
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-
- [L1] = LAYOUT(
- KC_LGUI, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_RGUI,
- KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, TD_DQT_AO,
- KC_BSPC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, TD_SCLN_OE, TD_QUOT_AE,
- OSM_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, NO_MINS, OSM_RSFT,
- CTL_ESC, MO_L5, KC_TAB, OSM_LALT, MO_L4, OSL_L3, KC_SPC, KC_ENT, OSL_L3, MO_L4, OSM_LALT, NO_EQL, NO_PLUS, KC_RCTL
- ),
- [L2] = LAYOUT(
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, NO_DQT,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, NO_SCLN, NO_QUOT,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
- ),
- [L3] = LAYOUT(
- NO_LBRC, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, NO_RBRC,
- NO_LCBR, XXXXXXX, XXXXXXX, NO_AT, XXXXXXX, NO_TILD, NO_QUES, NO_EXLM, NO_PIPE, XXXXXXX, XXXXXXX, NO_RCBR,
- _______, NO_ASTR, NO_BSLS, NO_DLR, NO_HASH, XXXXXXX, NO_HAT, XXXXXXX, NO_COLN, NO_SLSH, NO_SCLN, NO_QUOT,
- NO_PO, KC_0, NO_SECT, NO_PERC, XXXXXXX, NO_GRAV, NO_AND, NO_UMLA, NO_LT, NO_GT, NO_UNDS, NO_PC,
- XXXXXXX, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, XXXXXXX
- ),
- [L4] = LAYOUT(
- KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
- XXXXXXX, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_HOME, KC_PGDN, KC_PGUP, KC_END, XXXXXXX, XXXXXXX,
- _______, KC_F11, KC_F12, KC_F13, KC_F14, KC_F15, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, XXXXXXX, KC_DEL,
- XXXXXXX, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, XXXXXXX, KC_APP, XXXXXXX, XXXXXXX, KC_VOLD, XXXXXXX,
- OSM_LCTL, _______, XXXXXXX, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, OSM_RALT, KC_MUTE, KC_VOLU, OSM_RCTL
- ),
- [L5] = LAYOUT(
- XXXXXXX, TO(L1), TO(L2), TO(L3), TO(L4), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
- XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, QK_BOOT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
- XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
- XXXXXXX, XXXXXXX, XXXXXXX, KC_CAPS, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
- XXXXXXX, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX
- )
-};
-
-//TODO: Is there productivity gain in the use of unicode?
-// - Won't work in xterm.
-// Create a layer for macros and/or unicode?
-// Are macros useful?
-// - Found no gain in having sendstring for commands.
-// - Find repeated tasks that cannot be done easily on the OS.
-// - Most other keymaps have macros for game/fun stuff, hard to find "serious" onces.
-// Screw Norwegian layout, switch to US with unicode æøå or US/English International?
-// - Will be different from laptop keyboard, requiring a switch on the OS side when only using the laptop.
diff --git a/keyboards/atreus62/keymaps/194h/rules.mk b/keyboards/atreus62/keymaps/194h/rules.mk
deleted file mode 100644
index 2c97aee09345..000000000000
--- a/keyboards/atreus62/keymaps/194h/rules.mk
+++ /dev/null
@@ -1,7 +0,0 @@
-TAP_DANCE_ENABLE = yes
-NKRO_ENABLE = true
-MOUSEKEY_ENABLE = no
-EXTRAKEY_ENABLE = yes
-CONSOLE_ENABLE = no
-KEY_LOCK_ENABLE = no
-LEADER_ENABLE = no
diff --git a/keyboards/atreus62/keymaps/d4mation/keymap.c b/keyboards/atreus62/keymaps/d4mation/keymap.c
deleted file mode 100644
index e01f5b9ec61a..000000000000
--- a/keyboards/atreus62/keymaps/d4mation/keymap.c
+++ /dev/null
@@ -1,196 +0,0 @@
-#include QMK_KEYBOARD_H
-#include "d4mation.h"
-
-enum layer_names {
- _DVR,
- _QWR,
- _LOWER,
- _RAISE,
- _NUM,
- _ADJUST
-};
-
-enum keymap_custom_keycodes {
- LOWER = NEW_SAFE_RANGE,
- RAISE
-};
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-
- /* Default/Dvorak layer
- * ,-----------------------------------------. ,-----------------------------------------.
- * | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | / |
- * |------+------+------+------+------+------| |------+------+------+------+------+------|
- * | Tab | ' | , | . | P | Y | | F | G | C | R | L | = |
- * |------+------+------+------+------+------| |------+------+------+------+------+------|
- * | Ctrl | A | O | E | U | I |,------.,------.| D | H | T | N | S | - |
- * |------+------+------+------+------+------|| || ||------+------+------+------+------+------|
- * |Shift | ; | Q | J | K | X ||Super ||Enter || B | M | W | V | Z | \ |
- * |------+------+------+------+------+------|| || ||------+------+------+------+------+------|
- * | NUM | Alt | Home | End |Lower | Bksp |`------'`------'|Space |Raise | Left | Down | Up |Right |
- * `-----------------------------------------' `-----------------------------------------'
- */
-
- [_DVR] = LAYOUT(
- _GRAVE_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, 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_EQL,
- KC_LCTL, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS,
- TD(SHIFT_CAPS), KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_BSLS,
- TG(_NUM), KC_RALT, KC_HOME, KC_END, LOWER, KC_BSPC, KC_LGUI, KC_ENT, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT
- ),
-
- /* Qwerty layer, more "standard" for other people who may need to use my keyboard or for games where using Qwerty is just easier
- * ,-----------------------------------------. ,-----------------------------------------.
- * | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | - |
- * |------+------+------+------+------+------| |------+------+------+------+------+------|
- * | Tab | Q | W | E | R | T | | Y | U | I | O | P | \ |
- * |------+------+------+------+------+------| |------+------+------+------+------+------|
- * | Ctrl | A | S | D | F | G |,------.,------.| H | J | K | L | ; | ' |
- * |------+------+------+------+------+------|| || ||------+------+------+------+------+------|
- * |Shift | Z | X | C | V | B ||Super ||Enter || N | M | , | . | / | = |
- * |------+------+------+------+------+------|| || ||------+------+------+------+------+------|
- * | NUM | Alt | Home | End |Lower | Bksp |`------'`------'|Space |Raise | Left | Down | Up |Right |
- * `-----------------------------------------' `-----------------------------------------'
- */
-
- [_QWR] = LAYOUT(
- _GRAVE_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,
- KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS,
- KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
- TD(SHIFT_CAPS), KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_EQL,
- TG(_NUM), KC_RALT, KC_HOME, KC_END, LOWER, KC_BSPC, KC_LGUI, KC_ENT, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT
- ),
-
- /* "Lower" layer
- * ,-----------------------------------------. ,-----------------------------------------.
- * | F11 | F1 | F2 | F3 | F4 | F5 | | F6 | F7 | F8 | F9 | F10 | F12 |
- * |------+------+------+------+------+------| |------+------+------+------+------+------|
- * | | | | |SLEEP | | | | | SCRGB| | | |
- * |------+------+------+------+------+------| |------+------+------+------+------+------|
- * | | | | | | |,------.,------.| | | | { | } | |
- * |------+------+------+------+------+------|| || ||------+------+------+------+------+------|
- * | | | | | | || || || | Mute | VolD | VolU | | |
- * |------+------+------+------+------+------|| || ||------+------+------+------+------+------|
- * | | |PageUp|PgDown| | Del |`------'`------'| Ins | | | | | |
- * `-----------------------------------------' `-----------------------------------------'
- */
-
- [_LOWER] = LAYOUT(
- KC_F11, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F12,
- _______, _______, _______, _______, SLEEP, _______, _______, _______, SCRGB, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_LCBR, KC_RCBR, _______,
- _______, _______, _______, _______, _______, _______, _______, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______,
- _______, _______, KC_PGUP, KC_PGDN, _______, KC_DEL, _______, _______, KC_INS, _______, _______, _______, _______, _______
- ),
-
- /* "Raise" layer
- * ,-----------------------------------------. ,-----------------------------------------.
- * | F11 | F1 | F2 | F3 | F4 | F5 | | F6 | F7 | F8 | F9 | F10 | F12 |
- * |------+------+------+------+------+------| |------+------+------+------+------+------|
- * | | || ?> | | | |ZALGO | | | | | |
- * |------+------+------+------+------+------| |------+------+------+------+------+------|
- * | | Shrug|Lenny |Magic |Disfac| |,------.,------.| | | | [ | ] | |
- * |------+------+------+------+------+------|| || ||------+------+------+------+------+------|
- * | | Ameno| Tflip| Tput | | || || || | Prev | Play | Next | | |
- * |------+------+------+------+------+------|| || ||------+------+------+------+------+------|
- * | | |PageUp|PgDown| | Del |`------'`------'| Ins | | | | | |
- * `-----------------------------------------' `-----------------------------------------'
- */
-
- [_RAISE] = LAYOUT(
- KC_F11, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F12,
- _______, _______, PHPOPEN, PHPCLSE, _______, _______, ZALGO, _______, _______, _______, _______, _______,
- _______, SHRUG, LENNY, MAGIC, DISFACE, _______, _______, _______, _______, KC_LBRC, KC_RBRC,_______,
- _______, AMENO, TFLIP, TPUT, _______, _______, _______, KC_MPRV, KC_MPLY, KC_MNXT, _______, _______,
- _______, _______, KC_PGUP, KC_PGDN, _______, KC_DEL, _______, _______, KC_INS, _______, _______, _______, _______, _______
- ),
-
- /* "Numpad" layer
- * ,-----------------------------------------. ,-----------------------------------------.
- * | | | / | * | - | | | | | / | * | - | |
- * |------+------+------+------+------+------| |------+------+------+------+------+------|
- * | | 7 | 8 | 9 | + | | | | 7 | 8 | 9 | + | |
- * |------+------+------+------+------+------| |------+------+------+------+------+------|
- * | | 4 | 5 | 6 | + | |,------.,------.| | 4 | 5 | 6 | + | |
- * |------+------+------+------+------+------|| || ||------+------+------+------+------+------|
- * | | 1 | 2 | 3 | Enter| || || || | 1 | 2 | 3 | Enter| |
- * |------+------+------+------+------+------|| || ||------+------+------+------+------+------|
- * | | 0 | 0 | . | Enter| |`------'`------'| | 0 | 0 | . | Enter| |
- * `-----------------------------------------' `-----------------------------------------'
- */
-
- [_NUM] = LAYOUT(
- _______, _______, KC_PSLS, KC_PAST, KC_PMNS, _______, _______, _______, KC_PSLS, KC_PAST, KC_PMNS, _______,
- _______, KC_KP_7, KC_KP_8, KC_KP_9, KC_PPLS, _______, _______, KC_KP_7, KC_KP_8, KC_KP_9, KC_PPLS, _______,
- _______, KC_KP_4, KC_KP_5, KC_KP_6, KC_PPLS, _______, _______, KC_KP_4, KC_KP_5, KC_KP_6, KC_PPLS, _______,
- _______, KC_KP_1, KC_KP_2, KC_KP_3, KC_PENT, _______, _______, KC_KP_1, KC_KP_2, KC_KP_3, KC_PENT, _______,
- _______, KC_KP_0, KC_KP_0, KC_PDOT, KC_PENT, _______, _______, _______, _______, KC_KP_0, KC_KP_0, KC_PDOT, KC_PENT, _______
- ),
-
- /* "Adjust" layer, only active if both "Lower" and "Raise" are active at the same time
- * All unused keys are blanked out for this layer
- * ,-----------------------------------------. ,-----------------------------------------.
- * | NO | NO | NO | NO | NO | NO | | NO | NO | NO | NO | NO | NO |
- * |------+------+------+------+------+------| |------+------+------+------+------+------|
- * | NO |QK_BOOT | NO | NO | NO | NO | | NO | NO | NO | NO | NO | NO |
- * |------+------+------+------+------+------| |------+------+------+------+------+------|
- * | NO | NO | NO |UC WIN|UC OSX| NO |,------.,------.| NO |Dvorak|Qwerty| NO | NO | NO |
- * |------+------+------+------+------+------|| Swap || ||------+------+------+------+------+------|
- * | NO | NO | NO | NO | NO | NO || to || Swap || NO | NO | NO | NO | NO | NO |
- * |------+------+------+------+------+------|| Ctrl || Back ||------+------+------+------+------+------|
- * | NO | NO | NO | NO | | NO |`------'`------'| NO | | NO | NO | NO | NO |
- * `-----------------------------------------' `-----------------------------------------'
- */
-
- [_ADJUST] = LAYOUT(
- XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
- XXXXXXX, QK_BOOT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
- XXXXXXX, XXXXXXX, XXXXXXX, UC_WIN, UC_MAC, XXXXXXX, XXXXXXX, DF(_DVR),DF(_QWR),XXXXXXX, XXXXXXX, XXXXXXX,
- XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
- XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, XXXXXXX, CG_SWAP, CG_NORM, XXXXXXX, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX
- ),
-
-};
-
-/* Runs just one time when the keyboard initializes. */
-void eeconfig_init_keymap( void ) {
- set_unicode_input_mode( UNICODE_MODE_MACOS );
-};
-
-bool process_record_keymap( uint16_t keycode, keyrecord_t *record ) {
-
- switch ( keycode ) {
-
- case LOWER:
-
- if ( record->event.pressed ) {
- layer_on( _LOWER );
- update_tri_layer( _LOWER, _RAISE, _ADJUST );
- }
- else {
- layer_off( _LOWER );
- update_tri_layer( _LOWER, _RAISE, _ADJUST );
- }
-
- return false;
- break;
-
- case RAISE :
-
- if ( record->event.pressed ) {
- layer_on( _RAISE );
- update_tri_layer( _LOWER, _RAISE, _ADJUST );
- }
- else {
- layer_off( _RAISE );
- update_tri_layer( _LOWER, _RAISE, _ADJUST );
- }
-
- return false;
- break;
-
- }
-
- return true;
-
-};
\ No newline at end of file
diff --git a/keyboards/atreus62/keymaps/d4mation/readme.md b/keyboards/atreus62/keymaps/d4mation/readme.md
deleted file mode 100644
index 5642e8e43289..000000000000
--- a/keyboards/atreus62/keymaps/d4mation/readme.md
+++ /dev/null
@@ -1,40 +0,0 @@
-# d4mation's keymap for the Atreus62
-
-This is a bit of a work in-progress, but for the most part I like what I have done here.
-
-I switched to Dvorak some time ago and software-based support in most OS's for Dvorak isn't very great, so this keymap by default is set to Dvorak.
-
-## Table of Contents
-
-* [Layers](#layers)
- - [Base layer](#base)
- - [Num](#num)
- - [Lower](#lower)
- - [Raise](#raise)
- - [Adjust](#adjust)
-
-# Layers
-
-## Base
-
-* By default, this layer is Dvorak. But using the Adjust layer you can switch to Qwerty
-* Double-tapping Shift enables and disables Caps Lock
-* Quickly tapping the Grave accent key will output a Grave Accent, but holding it for 200ms will output the ESC key instead
-
-## Num
-
-This layer gets toggled off and on to place a numpad on both the left and right sides of the keyboard.
-
-## Lower
-
-This layer holds some handy shortcuts that I use often, like the screen grab shortcut and sleep shortcut in OS X.
-
-It also has quick access to {} as they are inaccessible in the base layer
-
-## Raise
-
-Aside from quick access to [] and Play/Pause/Next/Previous, this layer is mostly just goofy things I decided to program into the keyboard because I could. There's a bunch of [kaomoji](https://en.wikipedia.org/wiki/Emoticon#Japanese_style_(kaomoji))/"unicode smileys" and I added a toggle switch to enable a [Zalgo Text](https://zalgo.org/) mode.
-
-## Adjust
-
-This layer is a "here be dragons" layer. It can only be accessed by holding down the keys for Lower and Raise at the same time. I added exclusively keys that drastically transformed the keyboard's layout or function on this layer. The ability to switch to Qwerty is on this layer, a way to switch CTRL and CMD back and forth is on this layer, and a hotkey to enter bootloader mode also exists.
diff --git a/keyboards/atreus62/keymaps/d4mation/rules.mk b/keyboards/atreus62/keymaps/d4mation/rules.mk
deleted file mode 100644
index 517f2700e142..000000000000
--- a/keyboards/atreus62/keymaps/d4mation/rules.mk
+++ /dev/null
@@ -1,2 +0,0 @@
-UNICODE_ENABLE = yes
-TAP_DANCE_ENABLE = yes
\ No newline at end of file
diff --git a/keyboards/atreus62/keymaps/hvp/config.h b/keyboards/atreus62/keymaps/hvp/config.h
deleted file mode 100644
index 8013c0cb6d83..000000000000
--- a/keyboards/atreus62/keymaps/hvp/config.h
+++ /dev/null
@@ -1,4 +0,0 @@
-#pragma once
-
-#define TAPPING_TERM 150
-#define PERMISSIVE_HOLD
diff --git a/keyboards/atreus62/keymaps/hvp/keymap.c b/keyboards/atreus62/keymaps/hvp/keymap.c
deleted file mode 100644
index 1a49f838fa7e..000000000000
--- a/keyboards/atreus62/keymaps/hvp/keymap.c
+++ /dev/null
@@ -1,67 +0,0 @@
-
-#include QMK_KEYBOARD_H
-#include "hvp.c"
-
-// 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 LT3_ESC LT(3, KC_ESC)
-#define LT4_TAB LT(4, KC_TAB)
-#define LT1_ENT LT(1, KC_ENTER)
-#define LT2_BSP LT(2, KC_BSPC)
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- LAYOUT( /* qwerty */
- KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC ,
- LT4_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC ,
- LT3_ESC, KC_A, KC_S, KC_D, LT(3,KC_F), LT(4,KC_G), KC_H, KC_J, KC_K, KC_L, TD(TD1), TD(TD2) ,
- KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, TD(TD3), SC_SENT ,
- KC_LCTL, KC_APP, _______, KC_LGUI, KC_LALT,SFT_T(KC_SPC), LT2_BSP, LT1_ENT, SFT_T(KC_SPC), KC_LSFT, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
- ),
-
- LAYOUT( /* Right */
- 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_DEL, 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_LEFT_PAREN, KC_RIGHT_PAREN, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS,
- _______, _______, _______, _______, _______, KC_LBRC, KC_RBRC, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END
- ),
-
- LAYOUT(/* Left */
- 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_TILDE, KC_EXCLAIM, KC_AT, KC_HASH, KC_DOLLAR, KC_PERCENT, KC_CIRCUMFLEX, KC_AMPERSAND, KC_ASTERISK, KC_LEFT_PAREN, KC_RIGHT_PAREN, KC_BSPC,
- KC_DELETE, _______, _______, _______, _______, KC_LEFT_PAREN, KC_RIGHT_PAREN, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_BSLS,
- _______ , _______ , _______ , _______ , _______ , KC_LEFT_CURLY_BRACE , KC_RIGHT_CURLY_BRACE ,KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_TILD,
- _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , KC_HOME, KC_PGDN, KC_PGUP, KC_END
- ),
-
-
- LAYOUT(/* 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_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_NO, KC_NO, D_NAVI, KC_NO, KC_NO, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_NO, KC_NO ,
- KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_HOME, KC_PGDN, KC_PGUP, KC_END, KC_NO, KC_NO ,
- KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_MSTP, KC_MPLY, KC_NO, KC_MUTE, KC_MPRV, KC_VOLD, KC_VOLU, KC_MNXT
- ),
-
-
-
- LAYOUT(/* Tab */
- _______, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, _______ ,
- _______, _______, _______, _______, _______, _______, _______, KC_4, KC_5, KC_6, _______, _______ ,
- _______, _______, _______, _______, _______, _______, KC_0, KC_1, KC_2, KC_3, _______, _______ ,
- KC_PSCR, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ ,
- QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
- ),
- /*
- [_TRNS] = LAYOUT(
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ ,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ ,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ ,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ ,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
- ),
- */
-};
diff --git a/keyboards/atreus62/keymaps/hvp/readme.md b/keyboards/atreus62/keymaps/hvp/readme.md
deleted file mode 100644
index 766533d3be13..000000000000
--- a/keyboards/atreus62/keymaps/hvp/readme.md
+++ /dev/null
@@ -1,10 +0,0 @@
-Keyboard: Atreus62
-Keys: 62 keyed ortho staggered keyboard with a split layout and num row.
-Layout: Swedish characters on main layer using tap dance. Built for Eurkey keyboard layout.
-Flash instructions: Flash using avrdude, will req the hvp user space to compile.
-
-> make make atreus62:hvp:avrdude
-
-Links:
-Github - https://github.com/qmk/qmk_firmware/tree/master/keyboards/atreus62
-Eurkey layout - https://eurkey.steffen.bruentjen.eu/
diff --git a/keyboards/atreus62/keymaps/hvp/rules.mk b/keyboards/atreus62/keymaps/hvp/rules.mk
deleted file mode 100644
index 1ba2fa8fbefa..000000000000
--- a/keyboards/atreus62/keymaps/hvp/rules.mk
+++ /dev/null
@@ -1 +0,0 @@
-TAP_DANCE_ENABLE = yes
\ No newline at end of file
diff --git a/keyboards/atreus62/keymaps/jarred/config.h b/keyboards/atreus62/keymaps/jarred/config.h
deleted file mode 100644
index 34ab0baaf0b9..000000000000
--- a/keyboards/atreus62/keymaps/jarred/config.h
+++ /dev/null
@@ -1,21 +0,0 @@
-/* Copyright 2018 Jarred Steenvoorden
- *
- * 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 .
- */
-
-#pragma once
-
-// My hand wire diodes are in the opposite direction to the Atreus62 PCB
-#undef DIODE_DIRECTION
-#define DIODE_DIRECTION COL2ROW
diff --git a/keyboards/atreus62/keymaps/jarred/keymap.c b/keyboards/atreus62/keymaps/jarred/keymap.c
deleted file mode 100644
index 7a49b2890c4a..000000000000
--- a/keyboards/atreus62/keymaps/jarred/keymap.c
+++ /dev/null
@@ -1,26 +0,0 @@
-/* Copyright 2018 Jarred Steenvoorden
- *
- * 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 .
- */
-
-#include QMK_KEYBOARD_H
-#include "jarred.h"
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [_QW] = LAYOUT_atreus62_grid_wrapper(BLANK_12, QWERTY_1_12, QWERTY_2_12, QWERTY_3_12, QWERTY_L4, KC_NO, KC_NO, QWERTY_R4),
- [_LW] = LAYOUT_atreus62_grid_wrapper(BLANK_12, LOWER_1_12 , LOWER_2_12 , LOWER_3_12 , LOWER_L4 , KC_NO, KC_NO, LOWER_R4 ),
- [_NV] = LAYOUT_atreus62_grid_wrapper(BLANK_12, NAV_1_12 , NAV_2_12 , NAV_3_12 , NAV_L4 , KC_NO, KC_NO, NAV_R4 ),
- [_NP] = LAYOUT_atreus62_grid_wrapper(BLANK_12, NUMPAD_1_12, NUMPAD_2_12, NUMPAD_3_12, NUMPAD_L4, KC_NO, KC_NO, NUMPAD_R4),
- [_MS] = LAYOUT_atreus62_grid_wrapper(BLANK_12, MOUSE_1_12 , MOUSE_2_12 , MOUSE_3_12 , MOUSE_L4 , KC_NO, KC_NO, MOUSE_R4 )
-};
diff --git a/keyboards/atreus62/keymaps/mfluid/keymap.c b/keyboards/atreus62/keymaps/mfluid/keymap.c
deleted file mode 100644
index 40eeb8b85834..000000000000
--- a/keyboards/atreus62/keymaps/mfluid/keymap.c
+++ /dev/null
@@ -1,39 +0,0 @@
-#include QMK_KEYBOARD_H
-
-#include "action_layer.h"
-
-#define OOOOOOO KC_TRNS
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [0] = LAYOUT(
- 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_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS,
- KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
- SC_LSPO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SC_RSPC,
- KC_LCTL, KC_LGUI, KC_LALT, MO(3), MO(1), KC_BSPC, KC_RCTL, KC_ENT, KC_SPC, MO(2), KC_DEL, KC_EQL, KC_LBRC, KC_RBRC
- ),
-
- [1] = LAYOUT(
- _______, _______, _______, _______, _______, _______, _______, KC_P7, KC_P8, KC_P9, KC_PSLS, _______,
- _______, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, KC_P4, KC_P5, KC_P6, KC_PAST, _______,
- _______, KC_F5, KC_F6, KC_F7, KC_F8, _______, _______, KC_P1, KC_P2, KC_P3, KC_PMNS, KC_PGUP,
- _______, KC_F1, KC_F2, KC_F3, KC_F4, _______, _______, KC_P0, KC_PDOT, KC_PENT, KC_PPLS, KC_PGDN,
- _______, _______, _______, _______, OOOOOOO, _______, _______, _______, _______, _______, _______, _______, _______, _______
- ),
-
- [2] = LAYOUT(
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, KC_ACL0, KC_ACL1, KC_ACL2, _______, _______,
- _______, _______, KC_MUTE, KC_VOLD, KC_VOLU, _______, KC_MS_L, KC_MS_D, KC_MS_U, KC_MS_R, _______, _______,
- _______, _______, KC_MPLY, KC_MRWD, KC_MFFD, _______, _______, KC_BTN1, KC_BTN2, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, OOOOOOO, _______, _______, _______, _______
- ),
-
- [3] = LAYOUT(
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, KC_COPY, KC_PGUP, _______, _______, KC_PASTE, KC_DEL,
- _______, _______, _______, KC_PGDN, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, _______, _______,
- _______, _______, KC_CUT, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, OOOOOOO, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
- )
-};
diff --git a/keyboards/atreus62/keymaps/mfluid/readme.md b/keyboards/atreus62/keymaps/mfluid/readme.md
deleted file mode 100644
index fa341b893c66..000000000000
--- a/keyboards/atreus62/keymaps/mfluid/readme.md
+++ /dev/null
@@ -1,16 +0,0 @@
-# Mfluid Keymap for the Atreus62
-
-## Program
-
-`make atreus62:mfluid:avrdude`
-
-## Layers
-
-[0-default](https://i.imgur.com/dpBdPn8.png)
-
-[1-numpad](https://i.imgur.com/JMN8Fk9.png)
-
-[2-multimedia](https://i.imgur.com/ZCSzKsZ.png)
-
-[3-vim](https://i.imgur.com/J15xCqW.png)
-
diff --git a/keyboards/atreus62/keymaps/pcewing/keymap.c b/keyboards/atreus62/keymaps/pcewing/keymap.c
deleted file mode 100644
index c8dfd5734bb3..000000000000
--- a/keyboards/atreus62/keymaps/pcewing/keymap.c
+++ /dev/null
@@ -1,76 +0,0 @@
-#include QMK_KEYBOARD_H
-
-#define FN MO(_FN)
-#define TODO KC_NO
-
-enum atreus62_layers {
- _DEFAULT,
- _FN,
- _RESET
-};
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-
- /* Default layer
- * ,-----------------------------------------. ,-----------------------------------------.
- * | = | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | - |
- * |------+------+------+------+------+------| |------+------+------+------+------+------|
- * | Tab | Q | W | E | R | T | | Y | U | I | O | P | \ |
- * |------+------+------+------+------+------| |------+------+------+------+------+------|
- * | Esc | A | S | D | F | G |,------.,------.| H | J | K | L | ; | " |
- * |------+------+------+------+------+------|| || ||------+------+------+------+------+------|
- * |Shift | Z | X | C | V | B ||Delete||Enter || N | M | , | . | / |Shift |
- * |------+------+------+------+------+------|| || ||------+------+------+------+------+------|
- * | Ctrl | Win | Alt | ` | Fn | Bksp |`------'`------'|Space | Fn | | Alt | Win | Ctrl |
- * `-----------------------------------------' `-----------------------------------------'
- */
- [_DEFAULT] = LAYOUT( /* qwerty */
- KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,
- KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS,
- 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_LCTL, KC_LGUI, KC_LALT, KC_GRV, FN, KC_BSPC, KC_DEL, KC_ENT, KC_SPC, FN, TODO, KC_RALT, KC_RGUI, KC_RCTL
- ),
-
- /* Function layer
- * ,-----------------------------------------. ,-----------------------------------------.
- * | | | | | | | | | F10 | F11 | F12 | | |
- * |------+------+------+------+------+------| |------+------+------+------+------+------|
- * | | Home | Up | End | PgUp | | | PrSc | F7 | F8 | F9 | | |
- * |------+------+------+------+------+------| |------+------+------+------+------+------|
- * | Caps | Left | Down |Right | PgDn | |,------.,------.|Pause | F4 | F5 | F6 | | |
- * |------+------+------+------+------+------|| || ||------+------+------+------+------+------|
- * | | { | } | [ | ] | || || ||Insert| F1 | F2 | F3 | | |
- * |------+------+------+------+------+------|| || ||------+------+------+------+------+------|
- * | | | | | | |`------'`------'| | | | | | |
- * `-----------------------------------------' `-----------------------------------------'
- */
- [_FN] = LAYOUT(
- _______, _______, _______, _______, _______, _______, _______, KC_F10, KC_F11, KC_F12, _______, TO(_RESET),
- _______, KC_HOME, KC_UP, KC_END, KC_PGDN, _______, KC_PSCR, KC_F7, KC_F8, KC_F9, _______, _______,
- _______, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGUP, _______, KC_PAUS, KC_F4, KC_F5, KC_F6, _______, _______,
- _______, KC_LCBR, KC_RCBR, KC_LBRC, KC_RBRC, _______, KC_INS, KC_F1, KC_F2, KC_F3, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
- ),
-
- /*
- * This layer makes it possible to reset the firmware; don't get rid of it and make sure there is a way to activate it.
- */
- [_RESET] = LAYOUT(
- TO(_DEFAULT), 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_NO, KC_NO, QK_BOOT
- )
-
- /*
- [_TRNS] = LAYOUT(
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
- ),
- */
-};
diff --git a/keyboards/atreus62/keymaps/scheiklp/config.h b/keyboards/atreus62/keymaps/scheiklp/config.h
deleted file mode 100644
index d8b7abe8d395..000000000000
--- a/keyboards/atreus62/keymaps/scheiklp/config.h
+++ /dev/null
@@ -1,51 +0,0 @@
-/* Copyright 2017 Benjamin Kesselring
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- */
-
-#pragma once
-// place overrides here
-#define AUTO_SHIFT_TIMEOUT 125
-#define NO_AUTO_SHIFT_SPECIAL
-#define NO_AUTO_SHIFT_NUMERIC
-
-// require two taps for a TT layer switch (default 5)
-#define TAPPING_TOGGLE 2
-
-// Mouse control
-// constant mode (velocity)
-#define MK_3_SPEED
-// KC_ACL0 < KC_ACL1 < unmodified < KC_ACL2
-
-// Cursor offset per movement (unmodified)
-#define MK_C_OFFSET_UNMOD 20
-// Time between cursor movements (unmodified)
-#define MK_C_INTERVAL_UNMOD 1
-/* #define MK_C_INTERVAL_UNMOD 16 */
-
-// Cursor offset per movement (KC_ACL0)
-#define MK_C_OFFSET_0 1
-// Time between cursor movements (KC_ACL0)
-#define MK_C_INTERVAL_0 10
-
-// Cursor offset per movement (KC_ACL1)
-#define MK_C_OFFSET_1 4
-// Time between cursor movements (KC_ACL1)
-#define MK_C_INTERVAL_1 16
-
-// Cursor offset per movement (KC_ACL2)
-#define MK_C_OFFSET_2 20
-/* #define MK_C_OFFSET_2 32 */
-// Time between cursor movements (KC_ACL2)
-#define MK_C_INTERVAL_2 16
diff --git a/keyboards/atreus62/keymaps/scheiklp/keymap.c b/keyboards/atreus62/keymaps/scheiklp/keymap.c
deleted file mode 100644
index 13ad3e4f5108..000000000000
--- a/keyboards/atreus62/keymaps/scheiklp/keymap.c
+++ /dev/null
@@ -1,43 +0,0 @@
-#include QMK_KEYBOARD_H
-#include "koy_keys_on_quertz_de_latin1.h"
-// Layer shorthand
-#define _1 0
-#define _3 1
-#define _4 2
-#define _7 3
-
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-
- [_1] = LAYOUT(
- KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
- KC_TAB, KC_K, KC_DOT, KC_O, KC_COMM, N_Y, KC_V, KC_G, KC_C, KC_L, N_SS, N_Z,
- MO(_3), KC_H, KC_A, KC_E, KC_I, KC_U, KC_D, KC_T, KC_R, KC_N, KC_S, KC_F,
- KC_LSFT, KC_X, KC_Q, N_AE, N_UE, N_OE, KC_B, KC_P, KC_W, KC_M, KC_J, KC_RSFT,
- KC_LCTL, N_COPY, N_PASTE, KC_LGUI, KC_LALT, KC_SPC, KC_ENTER, KC_RCTL, MO(_3), MO(_4), KC_TRNS, KC_TRNS, KC_CAPS, TT(_7)
- ),
-
- [_3] = LAYOUT(
- KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_BSPC,
- KC_TAB, N_DOTS, N_USC, N_LSQBR, N_RSQBR, N_CIRC, N_EXKL, N_LT, N_GT, N_EQ, N_AMP, N_ACUT,
- KC_TRNS, N_BSLS, N_SLSH, N_LCUBR, N_RCUBR, N_ASTR, N_QUES, N_LPARN, N_RPARN, N_MINS, N_COLN, N_AT,
- KC_LSFT, N_HASH, N_DLR, N_PIPE, N_TILD, N_GRAVE, N_PLUS, N_PERC, N_QUOT, N_SING, N_SEMI, KC_RSFT,
- KC_LCTL, N_COPY, N_PASTE, KC_LGUI, KC_LALT, KC_SPC, KC_ENTER, KC_TRNS, KC_TRNS, KC_RCTL, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
- ),
-
- [_4] = LAYOUT(
- KC_ESC, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_BSPC,
- KC_TAB, KC_PGUP, KC_BSPC, KC_UP, KC_DEL, KC_PGDN, KC_KP_SLASH, KC_7, KC_8, KC_9, KC_KP_MINUS, KC_TRNS,
- KC_TRNS, KC_HOME, KC_LEFT, KC_DOWN, KC_RIGHT, KC_END, KC_KP_ASTERISK, KC_4, KC_5, KC_6, KC_KP_PLUS, KC_TRNS,
- KC_LSFT, KC_ESC, KC_TAB, KC_INS, KC_ENTER, N_UNDO, KC_KP_ENTER, KC_1, KC_2, KC_3, KC_KP_DOT, KC_RSFT,
- KC_LCTL, N_COPY, N_PASTE, KC_LGUI, KC_LALT, KC_0, KC_ENTER, KC_0, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
- ),
-
- [_7] = LAYOUT(
- KC_ESC, KC_TRNS, KC_TRNS, KC_MS_BTN3, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, QK_BOOT,
- KC_TAB, KC_MS_WH_UP, KC_MS_BTN2, KC_MS_UP, KC_MS_BTN1, KC_MS_WH_DOWN, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_MS_ACCEL0, KC_MS_LEFT, KC_MS_DOWN, KC_MS_RIGHT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_LSFT, KC_MS_ACCEL1, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_LCTL, KC_MS_ACCEL2, KC_TRNS, KC_LALT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
- )
-};
diff --git a/keyboards/atreus62/keymaps/scheiklp/readme.md b/keyboards/atreus62/keymaps/scheiklp/readme.md
deleted file mode 100644
index b5590b6f2f46..000000000000
--- a/keyboards/atreus62/keymaps/scheiklp/readme.md
+++ /dev/null
@@ -1,13 +0,0 @@
-# KOY Layout for the atreus62 pcb board
-Compile the layout
-```bash
-qmk compile -kb atreus62 -km scheiklp
-```
-disable this service that interfers with the pro micro
-```
-sudo systemctl stop ModemManager.service
-```
-and flash it to the board
-```bash
-qmk flash -kb atreus62 -km scheiklp
-```
diff --git a/keyboards/atreus62/keymaps/scheiklp/rules.mk b/keyboards/atreus62/keymaps/scheiklp/rules.mk
deleted file mode 100644
index 681e7507b40d..000000000000
--- a/keyboards/atreus62/keymaps/scheiklp/rules.mk
+++ /dev/null
@@ -1,4 +0,0 @@
-AUTO_SHIFT_ENABLE = yes
-CONSOLE_ENABLE = no
-COMMAND_ENABLE = no
-NKRO_ENABLE = yes
diff --git a/keyboards/atreus62/keymaps/via/keymap.c b/keyboards/atreus62/keymaps/via/keymap.c
new file mode 100644
index 000000000000..408886f82c18
--- /dev/null
+++ b/keyboards/atreus62/keymaps/via/keymap.c
@@ -0,0 +1,50 @@
+/* Copyright 2024 Tommi Pääkkö (@Glenf)
+ *
+ * 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 .
+ */
+
+#include QMK_KEYBOARD_H
+
+enum layers {
+ _DEFAULT,
+ _NAV,
+ _RESET,
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_DEFAULT] = LAYOUT( /* qwerty */
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS ,
+ KC_BSLS, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_RBRC ,
+ KC_TAB, 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_LBRC ,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_GRV, MO(_NAV),KC_BSPC, KC_DEL, KC_ENT, KC_SPC, KC_EQL, KC_MINS, KC_QUOT, KC_ENT, KC_RGUI
+ ),
+
+ [_NAV] = LAYOUT(
+ TO(_DEFAULT), KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11 ,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_F12, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS ,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, KC_TRNS ,
+ TO(_RESET), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS ,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ ),
+
+ [_RESET] = LAYOUT(
+ TO(_DEFAULT), 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_NO , KC_NO , QK_BOOT
+ )
+
+};
diff --git a/keyboards/hs60/v2/ansi/keymaps/stanrc85/rules.mk b/keyboards/atreus62/keymaps/via/rules.mk
similarity index 100%
rename from keyboards/hs60/v2/ansi/keymaps/stanrc85/rules.mk
rename to keyboards/atreus62/keymaps/via/rules.mk
diff --git a/keyboards/atreus62/keymaps/xyverz/keymap.c b/keyboards/atreus62/keymaps/xyverz/keymap.c
deleted file mode 100644
index 11c7c33d673c..000000000000
--- a/keyboards/atreus62/keymaps/xyverz/keymap.c
+++ /dev/null
@@ -1,155 +0,0 @@
-/* This is the Atreus62 keyboard layout by Xyverz aka u/Zrevyx on r/mk
- I've blatantly stolen what works for me from the Planck and Preonic
- layouts and modified this file to fit me. Initial credet goes to
- u/profet23 for the doing all the work and adding this keyboard to
- QMK in the first place.
-
- I've got Dvorak, Qwerty, and Colemak layouts at this time, with the
- possibility of adding more in the future.
-
- The bottom row is fairly Kinesis-ish since the Contour and Advantage
- keyboards have been my daily drivers for the last 17 years. I hope
- You can get some enjoyment out of this layout should you chose it!
-
-CHANGELOG:
-
- 0.1 - Initial commit. Based off of Profet's default keymap.
- 0.2 - Converted to a more Planck/Preonic keymap style file with
- persistent layers enabled. Renamed layers to reflect OLKB maps.
- Added a TODO list.
- 0.3 - Moved location of media & volume keys. Added Print Screen,
- Scroll Lock and Pause keys. Added a WOW gaming layer that
- changes the location of Ctrl & Alt to the thumb keys. Added
- readme.
- 0.4 - After more useage, I realized that the ESC key was in the way
- of my muscle memory (gee, thanks, Planck!) so I moved it to
- the normal Caps Lock position, and moved Caps Lock to the same
- position on the RAISE and LOWER layers. Added code to turn off
- the Pro Micro LEDs after flashing.
- 0.5 - Converted keymap to LAYOUT standard.
- 0.6 - Swapped ESC and GRV in all layers.
- 0.7 - Brought code up to current standards.
- 0.8 - Added MACLOCK macro.
- 0.9 - Updated code to correspond to new setPinInput behaviour
- 0.10 - Re-ordered the layers (swapped Destiny & WoW layers in the
- list). Removed duplicated keys from RAISE and LOWER layers.
- Updated readme.md and fixed an aesthetic typo in keymap.c.
- 0.11 - Added DEL_GUI macro. Removed WOW layer since I'm no longer
- supporting Blizzard in any way.
-
-TODO:
-
- * Make the layout more efficient, even if it means changing the RAISE
- and LOWER functionality.
- * Add legends in comments for each layer. Maybe.
-
-*/
-
-// this is the style you want to emulate.
-// This is the canonical layout file for the Quantum project. If you want to add another keyboard,
-#include QMK_KEYBOARD_H
-
-enum layer_names { _DVORAK, _QWERTY, _COLEMAK, _DESTINY, _LOWER, _RAISE, _ADJUST };
-
-enum atreus62_keycodes { DVORAK = SAFE_RANGE, QWERTY, COLEMAK, DESTINY, LOWER, RAISE, ADJUST };
-
-// Aliases to make the keymap clearer.
-#define CTL_ENT CTL_T(KC_ENT)
-#define DEL_GUI GUI_T(KC_DEL)
-#define LOWER MO(_LOWER)
-#define RAISE MO(_RAISE)
-#define ADJUST MO(_ADJUST)
-#define MACLOCK LGUI(LCTL(KC_Q))
-
-// clang-format off
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [_DVORAK] = LAYOUT ( /* dvorak */
- KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSLS,
- 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_GRV, 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_LCTL, KC_LALT, KC_LEFT, KC_RGHT, LOWER, KC_BSPC, DEL_GUI, KC_ENT, KC_SPC, RAISE, KC_UP, KC_DOWN, KC_RGUI, KC_RCTL
- ),
-
- [_QWERTY] = LAYOUT ( /* qwerty */
- KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,
- KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_DEL,
- KC_GRV, 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_LCTL, KC_LALT, KC_LEFT, KC_RGHT, LOWER, KC_BSPC, KC_LGUI, KC_ENT, KC_SPC, RAISE, KC_UP, KC_DOWN, KC_RGUI, KC_RCTL
- ),
-
- [_COLEMAK] = LAYOUT ( /* colemak */
- KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,
- KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_DEL,
- KC_GRV, 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_LCTL, KC_LALT, KC_LEFT, KC_RGHT, LOWER, KC_BSPC, KC_LGUI, KC_ENT, KC_SPC, RAISE, KC_UP, KC_DOWN, KC_RGUI, KC_RCTL
- ),
-
- [_DESTINY] = LAYOUT ( /* Dvorak with minor modifications for playing Destiny 2 and other FPS Looters */
- KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSLS,
- 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_GRV, 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_LCTL, KC_LALT, KC_LEFT, KC_RGHT, LOWER, KC_BSPC, KC_DEL, KC_ENT, KC_SPC, RAISE, KC_UP, KC_DOWN, KC_RGUI, KC_RCTL
- ),
-
- [_LOWER] = LAYOUT (
- 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_CAPS, _______, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, _______, KC_PLUS, KC_LCBR, KC_RCBR, _______,
- _______, _______, KC_MPRV, KC_MPLY, KC_MNXT, _______, _______, _______, KC_PSCR, KC_SCRL, KC_PAUS, _______,
- _______, _______, KC_HOME, KC_END, _______, KC_DEL, MACLOCK, _______, KC_INS, _______, KC_PGUP, KC_PGDN, _______, _______
- ),
- [_RAISE] = LAYOUT (
- 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_CAPS, _______, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, _______, KC_EQL, KC_LBRC, KC_RBRC, _______,
- _______, _______, KC_MPRV, KC_MPLY, KC_MNXT, _______, _______, _______, KC_PSCR, KC_SCRL, KC_PAUS, _______,
- _______, _______, KC_HOME, KC_END, _______, KC_DEL, MACLOCK, _______, KC_INS, _______, KC_PGUP, KC_PGDN, _______, _______
- ),
- [_ADJUST] = LAYOUT (
- _______, _______, _______, KC_F13, KC_F14, KC_F15, _______, _______, _______, _______, _______, _______,
- _______, QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, QWERTY, COLEMAK, DVORAK, DESTINY, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
- ),
-};
-//clang-format on
-
-void matrix_init_user(void) {
-#ifdef BOOTLOADER_CATERINA
- // This will disable the red LEDs on the ProMicros
- setPinInput(D5);
- setPinInput(B0);
-#endif
-};
-
-layer_state_t layer_state_set_user(layer_state_t state) {
- return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST);
-};
-
-bool process_record_user(uint16_t keycode, keyrecord_t *record) {
- if (record->event.pressed) {
- switch (keycode) {
- case DVORAK:
- set_single_persistent_default_layer(_DVORAK);
- return false;
- case QWERTY:
- set_single_persistent_default_layer(_QWERTY);
- return false;
- case COLEMAK:
- set_single_persistent_default_layer(_COLEMAK);
- return false;
- case DESTINY:
- set_single_persistent_default_layer(_DESTINY);
- return false;
- case WOW:
- set_single_persistent_default_layer(_WOW);
- return false;
- }
- }
- return true;
-};
diff --git a/keyboards/atreus62/keymaps/xyverz/readme.md b/keyboards/atreus62/keymaps/xyverz/readme.md
deleted file mode 100644
index 5a3949727c46..000000000000
--- a/keyboards/atreus62/keymaps/xyverz/readme.md
+++ /dev/null
@@ -1,146 +0,0 @@
-# Xyverz's Atreus62 Keymap
-
-## About this keymap:
-
-This is the Atreus62 keyboard layout by Xyverz aka u/Zrevyx on r/mk. I've blatantly stolen what works for me from the Planck and Preonic layouts and modified this file to fit me. Initial credet goes to u/profet23 for the doing all the work and adding this keyboard to QMK in the first place.
-
-I've got Dvorak, Qwerty, and Colemak layouts at this time, with the possibility of adding more in the future.
-
-The bottom row is fairly Kinesis-ish since the Contour and Advantage keyboards have been my daily drivers for the last 17 years. I hope You can get some enjoyment out of this layout should you chose it!
-
-### CHANGELOG:
-
-#### 0.1
- * Initial commit. Based off of Profet's default keymap.
-#### 0.2
- * Converted to a more Planck/Preonic keymap style file with persistent layers enabled. Renamed layers to reflect OLKB maps.
- * Added a TODO list.
-#### 0.3
- * Moved location of media & volume keys. Added Print Screen, Scroll Lock and Pause keys.
- * Added a WOW gaming layer that changes the location of Ctrl & Alt to the thumb keys. Right thumb is Ctrl when held, Enter when tapped.
- * Added readme.
-#### 0.4
- * Moved location of Escape key to Caps Lock position. Moved Caps Lock to same position on Raise/Lower Layers.
- * Put Tilde/Grave in the upper-left corner
- * Added code to turn off the red LEDs on the Pro Micro after flashing. They were annoying me.
-### 0.5
- * Converted keymap to LAYOUT standard.
-### 0.6
- * Swapped ESC and GRV in all layers.
-### 0.7
- * Brought code up to new standards (as of 27 June 2019).
- * Updated this readme file.
-### 0.8
- * Added MACLOCK macro.
-### 0.9
- * Updated code to correspond to new setPinInput behaviour.
-### 0.10
- * Re-ordered the layers (swapped Destiny & WoW layers in the list).
- * Removed duplicated keys from RAISE and LOWER layers.
- * Updated readme.md and fixed an aesthetic typo in keymap.c.
-### 0.11
- * Added DEL_GUI macro.
- * Removed WOW layer since I'm no longer supporting Blizzard in any way.
-
-### TODO:
-
- * Enjoy this revision; figure out new things later.
-
-### Layer 0: Dvorak layer
-
- ,-----------------------------------------. ,-----------------------------------------.
- | Esc | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | \ |
- |------+------+------+------+------+------| |------+------+------+------+------+------|
- | Tab | ' | , | . | P | Y | | F | G | C | R | L | / |
- |------+------+------+------+------+------| |------+------+------+------+------+------|
- | Grv | A | O | E | U | I | | D | H | T | N | S | - |
- |------+------+------+------+------+------|------.,------|------+------+------+------+------+------|
- | Shft | ; | Q | J | K | X | Del/ ||Enter | B | M | W | V | Z | Shft |
- |------+------+------+------+------+------| Gui || |------+------+------+------+------+------|
- | Ctrl | Alt | Left | Rght | LOWER| BkSp |------'`------| Spc | RAISE| Up | Down | Gui | Ctrl |
- `-----------------------------------------' `-----------------------------------------'
-
-### Layer 1: QWERTY layer
-
- ,-----------------------------------------. ,-----------------------------------------.
- | Esc | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | - |
- |------+------+------+------+------+------| |------+------+------+------+------+------|
- | Tab | Q | W | E | R | T | | Y | U | I | O | P | Del |
- |------+------+------+------+------+------| |------+------+------+------+------+------|
- | Grv | A | S | D | F | G | | D | H | T | N | S | ' |
- |------+------+------+------+------+------|------.,------|------+------+------+------+------+------|
- | Shft | Z | X | C | V | B | Gui ||Enter | N | M | , | . | / | Shft |
- |------+------+------+------+------+------| || |------+------+------+------+------+------|
- | Ctrl | Alt | Left | Rght | LOWER| BkSp |------'`------| Spc | RAISE| Up | Down | Gui | Ctrl |
- `-----------------------------------------' `-----------------------------------------'
-
-### Layer 2: Colemak layer
-
- ,-----------------------------------------. ,-----------------------------------------.
- | Esc | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | - |
- |------+------+------+------+------+------| |------+------+------+------+------+------|
- | Tab | Q | W | F | P | G | | J | U | U | Y | ; | Del |
- |------+------+------+------+------+------| |------+------+------+------+------+------|
- | Grv | A | R | S | T | D | | H | N | E | I | O | ' |
- |------+------+------+------+------+------|------.,------|------+------+------+------+------+------|
- | Shft | Z | X | C | V | B | Gui ||Enter | K | M | , | . | / | Shft |
- |------+------+------+------+------+------| || |------+------+------+------+------+------|
- | Ctrl | Alt | Left | Rght | LOWER| BkSp |------'`------| Spc | RAISE| Up | Down | Gui | Ctrl |
- `-----------------------------------------' `-----------------------------------------'
-
-### Layer 3: Destiny layer
-
- ,-----------------------------------------. ,-----------------------------------------.
- | Esc | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | \ |
- |------+------+------+------+------+------| |------+------+------+------+------+------|
- | Tab | ' | , | . | P | Y | | F | G | C | R | L | / |
- |------+------+------+------+------+------| |------+------+------+------+------+------|
- | Grv | A | O | E | U | I | | D | H | T | N | S | - |
- |------+------+------+------+------+------|------.,------|------+------+------+------+------+------|
- | Shft | ; | Q | J | K | X | Del ||Enter | B | M | W | V | Z | Shft |
- |------+------+------+------+------+------| || |------+------+------+------+------+------|
- | Ctrl | Alt | Left | Rght | LOWER| BkSp |------'`------| Spc | RAISE| Up | Down | Gui | Ctrl |
- `-----------------------------------------' `-----------------------------------------'
-
-### Layer 4: LOWER layer
-
- ,-----------------------------------------. ,-----------------------------------------.
- | F11 | F1 | F2 | F3 | F4 | F5 | | F6 | F7 | F8 | F9 | F10 | F12 |
- |------+------+------+------+------+------| |------+------+------+------+------+------|
- | | | | | | | | | | | | | |
- |------+------+------+------+------+------| |------+------+------+------+------+------|
- | Caps | | Mute | Vol- | Vol+ | | | | | + | { | } | |
- |------+------+------+------+------+------|------.,------|------+------+------+------+------+------|
- | | | Prev | Play | Next | | || | | | PScr | ScLk | Pause| |
- |------+------+------+------+------+------| || |------+------+------+------+------+------|
- | | | Home | End | | Del |------'`------| Ins | | PgUp | PgDn | | |
- `-----------------------------------------' `-----------------------------------------'
-
-
-### Layer 5: RAISE layer
-
- ,-----------------------------------------. ,-----------------------------------------.
- | F11 | F1 | F2 | F3 | F4 | F5 | | F6 | F7 | F8 | F9 | F10 | F12 |
- |------+------+------+------+------+------| |------+------+------+------+------+------|
- | | | | | | | | | | | | | |
- |------+------+------+------+------+------| |------+------+------+------+------+------|
- | Caps | | Mute | Vol- | Vol+ | | | | | = | [ | ] | |
- |------+------+------+------+------+------|------.,------|------+------+------+------+------+------|
- | | | Prev | Play | Next | | || | | | PScr | ScLk | Pause| |
- |------+------+------+------+------+------| || |------+------+------+------+------+------|
- | | | Home | End | | Del |------'`------| Ins | | PgUp | PgDn | | |
- `-----------------------------------------' `-----------------------------------------'
-
-### Layer 6: ADJUST layer
-
- ,-----------------------------------------. ,-----------------------------------------.
- | | | | | | | | | | | | | |
- |------+------+------+------+------+------| |------+------+------+------+------+------|
- | |RESET | | | | | | | | | | | |
- |------+------+------+------+------+------| |------+------+------+------+------+------|
- | | | | | | | | |Qwerty|Colemk|Dvorak|Destny| |
- |------+------+------+------+------+------|------.,------|------+------+------+------+------+------|
- | | | | | | | || | | | | | | |
- |------+------+------+------+------+------| || |------+------+------+------+------+------|
- | | | | | | |------'`------| | | | | | |
- `-----------------------------------------' `-----------------------------------------'
diff --git a/keyboards/avalanche/v4/keymaps/winder/config.h b/keyboards/avalanche/v4/keymaps/winder/config.h
deleted file mode 100644
index ca4b822f1b1d..000000000000
--- a/keyboards/avalanche/v4/keymaps/winder/config.h
+++ /dev/null
@@ -1,12 +0,0 @@
-// Copyright 2022 Will Winder (@winder)
-// SPDX-License-Identifier: GPL-2.0-or-later
-
-#pragma once
-
-#undef RGBLIGHT_EFFECT_BREATHING
-#undef RGBLIGHT_EFFECT_KNIGHT
-#undef RGBLIGHT_EFFECT_SNAKE
-#undef RGBLIGHT_EFFECT_CHRISTMAS
-#undef RGBLIGHT_EFFECT_RGB_TEST
-#undef RGBLIGHT_EFFECT_STATIC_GRADIENT
-#undef RGBLIGHT_EFFECT_ALTERNATING
diff --git a/keyboards/avalanche/v4/keymaps/winder/images.h b/keyboards/avalanche/v4/keymaps/winder/images.h
deleted file mode 100644
index 2202e3157484..000000000000
--- a/keyboards/avalanche/v4/keymaps/winder/images.h
+++ /dev/null
@@ -1,69 +0,0 @@
-// Copyright 2022 Will Winder (@winder)
-// SPDX-License-Identifier: GPL-2.0-or-later
-
-static const char display [] PROGMEM = {
-0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-0xff, 0xff, 0xff, 0x7f, 0x3f, 0x9f, 0xcf, 0x8f, 0x1f, 0x3f, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff,
-0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-0xff, 0xff, 0x7f, 0x7f, 0x3f, 0x3f, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x1f, 0xcf, 0xef,
-0xe7, 0xcf, 0x8f, 0x1e, 0x3f, 0x7f, 0xff, 0xff, 0xff, 0xfe, 0xfc, 0xf8, 0xf1, 0xe3, 0xf7, 0xff,
-0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x3f, 0xbf, 0x9f, 0x1f, 0x3f,
-0x7b, 0xf0, 0xfe, 0xff, 0xff, 0xfe, 0x7c, 0x78, 0x71, 0x03, 0x87, 0xff, 0xff, 0xff, 0xff, 0xff,
-0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-0xff, 0xff, 0xff, 0xff, 0xff, 0x9f, 0x3f, 0xff, 0xf3, 0xe3, 0xd7, 0xef, 0xdf, 0x9c, 0x39, 0x73,
-0xe7, 0xef, 0xcf, 0xcf, 0xce, 0xe0, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-0xff, 0xff, 0xff, 0xff, 0xdf, 0x9f, 0xbf, 0x3f, 0x1f, 0xc8, 0xe1, 0xc7, 0x9f, 0x3f, 0xff, 0xff,
-0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-0xff, 0xff, 0x7f, 0x7f, 0x7f, 0xe7, 0xc7, 0x9f, 0x3f, 0x7d, 0xf0, 0xe3, 0xc7, 0x8f, 0x9f, 0x3e,
-0x3c, 0xb8, 0x81, 0xc3, 0xff, 0xff, 0xfe, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-0xff, 0xff, 0xff, 0xbf, 0x1f, 0x3f, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xcf, 0xe7,
-0xf3, 0xf9, 0x71, 0x03, 0x87, 0x8f, 0x1e, 0x3c, 0x79, 0xf3, 0xee, 0x9d, 0xfb, 0xf3, 0xf7, 0xfe,
-0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xe7, 0xf3,
-0xf9, 0xfc, 0xf9, 0xf3, 0xe7, 0xcf, 0x9f, 0x3f, 0x7e, 0xfe, 0xfc, 0xfd, 0xf9, 0xf8, 0xf8, 0xff,
-0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0x9f, 0x3f, 0x7f,
-0xff, 0xfe, 0xfe, 0xfc, 0xf0, 0xe6, 0xcd, 0x9d, 0x3b, 0x7a, 0xf0, 0xf1, 0xe1, 0xf3, 0xff, 0xff,
-0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0x47, 0x1f,
-0x3d, 0xf9, 0xf9, 0xf3, 0x83, 0x30, 0x78, 0x78, 0x71, 0x23, 0x87, 0xcf, 0xff, 0xff, 0xff, 0xff,
-0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xe7, 0xef, 0xcf, 0x0e, 0x0c, 0xe1, 0xe3, 0xe7, 0xcf,
-0x1f, 0x3e, 0x7e, 0xff, 0xef, 0xe7, 0xf3, 0xf8, 0xfc, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xf9, 0xf3, 0xe7, 0xcf, 0x9f, 0x3f, 0x7f,
-0x7f, 0x3f, 0x9f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-0xff, 0xff, 0xff, 0xbf, 0x9f, 0xbf, 0x3f, 0x3b, 0x33, 0x87, 0x8f, 0x9f, 0x3f, 0x7f, 0xff, 0xfe,
-0xfc, 0xb9, 0x83, 0xc7, 0xe7, 0xf3, 0xf9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-0xff, 0xff, 0xff, 0xbf, 0x9f, 0xcf, 0xc7, 0x33, 0x7f, 0xfe, 0xfc, 0xfc, 0xf9, 0xf8, 0xf6, 0xe7,
-0xee, 0xc8, 0x83, 0xcf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfc, 0xf9, 0xf9, 0xf9, 0xf9,
-0xfc, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xf8, 0xfc,
-0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0x07, 0x73,
-0xfb, 0xfb, 0xf3, 0xe7, 0xcf, 0x9f, 0x3f, 0xf8, 0xf0, 0xe7, 0xe7, 0xe7, 0xe7, 0xf0, 0xf8, 0xfd,
-0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0x87, 0x33,
-0x3b, 0x39, 0x3b, 0x9f, 0x9f, 0x9f, 0x3f, 0x7f, 0xfe, 0xfc, 0xd9, 0xc3, 0xe3, 0xf3, 0xf9, 0xff,
-0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xdf, 0xdf, 0xdf, 0xbf, 0x7f, 0xff, 0xff, 0xff,
-0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xe7, 0xf3, 0xf9, 0xf8, 0xf1, 0xe3, 0xc7, 0x8f, 0x1f, 0x3e,
-0x7c, 0xf9, 0xf3, 0xf3, 0xf3, 0xf3, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xf3, 0xf9, 0xfc, 0xbe, 0x9c, 0xc1, 0xe3, 0xe7, 0xcf,
-0x1f, 0x3f, 0xff, 0xf3, 0xf3, 0xfb, 0xf8, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xbf,
-0xff, 0xff, 0xe7, 0xdb, 0xbb, 0x7b, 0xf7, 0xee, 0xdc, 0xbd, 0xff, 0xf7, 0xf7, 0xf6, 0xff, 0xff,
-0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe,
-0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xf9, 0xfc,
-0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfe, 0xfc,
-0xf9, 0xf3, 0xa7, 0xcf, 0xef, 0xff, 0xfc, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
-};
diff --git a/keyboards/avalanche/v4/keymaps/winder/keymap.c b/keyboards/avalanche/v4/keymaps/winder/keymap.c
deleted file mode 100644
index 75de2f11a867..000000000000
--- a/keyboards/avalanche/v4/keymaps/winder/keymap.c
+++ /dev/null
@@ -1,135 +0,0 @@
-// Copyright 2022 Viatly Volkov (@vlkv)
-// SPDX-License-Identifier: GPL-2.0-or-later
-
-/*
-qmk compile -kb avalanche/v4 -km default
-qmk flash -kb avalanche/v4 -km default
-*/
-
-#include QMK_KEYBOARD_H
-
-enum layer {
- _QWERTY,
- _LOWER,
- _RAISE,
-};
-
-#define FN_1 MO(_LOWER)
-#define FN_2 MO(_RAISE)
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [_QWERTY] = LAYOUT(
- KC_GRV , KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , KC_DEL ,
- KC_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_LCTL, KC_A , KC_S , KC_D , KC_F , KC_G , KC_H , KC_J , KC_K , KC_L , KC_SCLN, KC_QUOT, KC_UNDS,
- KC_LSFT, KC_Z , KC_X , KC_C , KC_V , KC_B , KC_DEL , KC_LGUI, /**/ KC_INS , KC_BSPC, KC_N , KC_M , KC_COMM, KC_DOT , KC_SLSH, KC_RSFT,
- KC_LGUI, KC_LALT, KC_LGUI, FN_1 , KC_ENT , /**/ FN_2 , KC_SPC , KC_BSPC, KC_RALT, KC_RGUI
- ),
- [_LOWER] = LAYOUT(
- _______, KC_F1 , KC_F2 , KC_F3 , KC_F4 , KC_F5 , KC_F6 , KC_F7 , KC_F8 , KC_F9 , KC_F10 , KC_F11 ,
- KC_GRV , KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , KC_DEL ,
- _______ , KC_TILD, KC_EXLM, KC_AT , KC_HASH, KC_DLR , KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_PIPE, _______,
- _______, KC_EQL , KC_MINS, KC_PLUS, KC_LCBR, KC_RCBR, _______, _______, /**/ _______, _______, KC_LBRC, KC_RBRC, KC_SCLN, KC_COLN, KC_BSLS, _______,
- _______, _______, _______, _______, _______, /**/ _______, _______, _______, _______, _______
- ),
- [_RAISE] = LAYOUT(
- _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_VOLD, KC_VOLU, KC_MUTE, XXXXXXX, XXXXXXX, XXXXXXX,
- _______, KC_0, KC_1, KC_2, KC_3, KC_BSPC, KC_PGUP, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
- _______, _______, KC_0, KC_4, KC_5, KC_6, KC_DEL, KC_LEFT, KC_DOWN, KC_UP , KC_RGHT, XXXXXXX, XXXXXXX, XXXXXXX,
- _______, KC_0, KC_7, KC_8, KC_9, KC_DOT, _______, _______, /**/ _______, _______, KC_PGDN, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______,
- _______, _______, _______, _______, _______, /**/ _______, _______, _______, _______, _______
- ),
-};
-
-#ifdef OLED_ENABLE
-
-#include "images.h"
-
-oled_rotation_t oled_init_user(oled_rotation_t rotation) {
- return OLED_ROTATION_0;
-}
-
-void shiftright(char* buf, int size, int num) {
- for (int i = size-1; i > 0; i--) {
- buf[i] >>= 1;
- if (buf[i-1] & 0x01) {
- buf[i] |= 0x80;
- }
- }
- buf[0] >>= 1;
-}
-
-// right to left, 8 bit vertical strips.
-void mask(char* enable) {
- char rowenable[3];
- const char* data = display;
- int i = 0;
- char blockmask[2] = { 0x00, 0x00 };
-
- while (i < sizeof(display)) {
- if (i % 128 == 0) {
- // shift enable-mask right 1 at each row, reinitialize row copy
- if (i != 0) {
- shiftright(enable, 3, 2);
- }
- rowenable[0] = enable[0];
- rowenable[1] = enable[1];
- rowenable[2] = enable[2];
- }
-
- if (i % 8 == 0) {
- if (rowenable[2] & 0x01) {
- blockmask[1] = 0xff;
- } else {
- blockmask[1] = 0x00;
- }
-
- if (rowenable[2] & 0x02) {
- blockmask[0] = 0xff;
- } else {
- blockmask[0] = 0x00;
- }
- shiftright(rowenable, 3, 2);
- }
-
- uint8_t c = pgm_read_byte(data++);
- oled_write_raw_byte(c & blockmask[1], i++);
- shiftright(blockmask, 2, 1);
- }
-}
-
-void setmask(char* mask) {
- mask[0] = 0x00;
- mask[1] = 0x00;
- mask[2] = 0x00;
-
- uint8_t mod = get_mods() | get_oneshot_mods();
- if (mod & MOD_MASK_CTRL) {
- mask[1] |= 0xf0;
- }
- if (mod & MOD_MASK_ALT) {
- mask[1] |= 0x0f;
- }
- if (mod & MOD_MASK_GUI) {
- mask[0] |= 0xf0;
- }
-
- switch (get_highest_layer(layer_state)) {
- case _LOWER:
- mask[2] |= 0xf0;
- break;
- case _RAISE:
- mask[0] |= 0x0f;
- break;
- }
-}
-
-bool oled_task_user(void) {
- char m[3];
- setmask(m);
- mask(m);
- return false;
-}
-
-#endif
-
diff --git a/keyboards/avalanche/v4/keymaps/winder/rules.mk b/keyboards/avalanche/v4/keymaps/winder/rules.mk
deleted file mode 100644
index 1e3cebb14515..000000000000
--- a/keyboards/avalanche/v4/keymaps/winder/rules.mk
+++ /dev/null
@@ -1 +0,0 @@
-RGBLIGHT_ENABLE = yes
diff --git a/keyboards/axolstudio/yeti/hotswap/config.h b/keyboards/axolstudio/yeti/hotswap/config.h
index 694a6449f0f9..02077e05a7d3 100644
--- a/keyboards/axolstudio/yeti/hotswap/config.h
+++ b/keyboards/axolstudio/yeti/hotswap/config.h
@@ -61,7 +61,6 @@ along with this program. If not, see .
# define ENABLE_RGB_MATRIX_SOLID_MULTISPLASH
# define RGB_MATRIX_LED_FLUSH_LIMIT 16 // 16 is equivalent to limiting to 60fps
# define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended
-# define DRIVER_ADDR_1 0b1010000
-# define DRIVER_COUNT 1
+# define IS31FL3733_I2C_ADDRESS_1 IS31FL3733_I2C_ADDRESS_GND_GND
# define RGB_MATRIX_LED_COUNT 64
#endif
diff --git a/keyboards/axolstudio/yeti/hotswap/hotswap.c b/keyboards/axolstudio/yeti/hotswap/hotswap.c
index 98d37290e6fd..527bec17ee16 100644
--- a/keyboards/axolstudio/yeti/hotswap/hotswap.c
+++ b/keyboards/axolstudio/yeti/hotswap/hotswap.c
@@ -17,7 +17,7 @@
#include "quantum.h"
#ifdef RGB_MATRIX_ENABLE
-const is31_led g_is31_leds[RGB_MATRIX_LED_COUNT] = {
+const is31fl3733_led_t g_is31fl3733_leds[RGB_MATRIX_LED_COUNT] = {
{ 0, B_1, A_1, C_1 },
{ 0, B_2, A_2, C_2 },
{ 0, B_3, A_3, C_3 },
diff --git a/keyboards/b_sides/rev41lp/keymaps/cyril/config.h b/keyboards/b_sides/rev41lp/keymaps/cyril/config.h
deleted file mode 100644
index 7029bdddb730..000000000000
--- a/keyboards/b_sides/rev41lp/keymaps/cyril/config.h
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
-Copyright 2021 @cyril279
-
-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 .
-*/
-#pragma once
-
-#define TAPPING_TERM 150
-#define TAPPING_TERM_PER_KEY
diff --git a/keyboards/b_sides/rev41lp/keymaps/cyril/keymap.c b/keyboards/b_sides/rev41lp/keymaps/cyril/keymap.c
deleted file mode 100644
index 72eb2bb5c86b..000000000000
--- a/keyboards/b_sides/rev41lp/keymaps/cyril/keymap.c
+++ /dev/null
@@ -1,105 +0,0 @@
-/*
-Copyright 2021 @cyril279
-
-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 .
-*/
-#include QMK_KEYBOARD_H
-
-enum layer_names {
- _BASE,
- _LOWER,
- _RAISE,
- _ADJUST,
- _NAVIG,
- _FUNCTION
-};
-
-#define LOWER MO(_LOWER)
-#define RAISE MO(_RAISE)
-#define ADJUST MO(_ADJUST)
-#define SPC_NAV LT(_NAVIG,KC_SPC)
-#define FUNCT MO(_FUNCTION)
-#define NAVIG MO(_NAVIG)
-
-#define LGUI_A LGUI_T(KC_A)
-#define LALT_S LALT_T(KC_S)
-#define LSFT_D LSFT_T(KC_D)
-#define LCTL_F LCTL_T(KC_F)
-#define RCTL_J RCTL_T(KC_J)
-#define RSFT_K RSFT_T(KC_K)
-#define RALT_L LALT_T(KC_L)
-#define RGUI_SCLN RGUI_T(KC_SCLN)
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [_BASE] = LAYOUT_rev41lp(
- 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, LALT_S, LSFT_D, LCTL_F, KC_G, KC_H, RCTL_J, RSFT_K, RALT_L, KC_SCLN, KC_QUOT,
- KC_LCTL, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT,
- KC_LGUI, LOWER, SPC_NAV, RAISE, FUNCT
- ),
-
- [_LOWER] = LAYOUT_rev41lp(
- 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_TILD, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE,
- _______, _______, KC_LGUI, KC_LALT, KC_CAPS, _______, KC_PSCR, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______
- ),
-
- [_RAISE] = LAYOUT_rev41lp(
- KC_TILD, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
- _______, _______, _______, _______, _______, _______, KC_GRV, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS,
- _______, _______, KC_LGUI, KC_LALT, KC_CAPS, _______, KC_PSCR, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______
- ),
-
- [_NAVIG] = LAYOUT_rev41lp(
- KC_DEL, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_DEL,
- _______, _______, _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_NO,
- _______, _______, KC_LGUI, KC_LALT, KC_CAPS, _______, _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END, _______,
- _______, _______, _______, _______, _______
- ),
-
- [_FUNCTION] = LAYOUT_rev41lp(
- KC_DEL, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_DEL,
- _______, _______, _______, _______, _______, _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6,
- _______, _______, KC_LGUI, KC_LALT, KC_CAPS, _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,
- _______, _______, _______, _______, _______
- ),
-
- [_ADJUST] = LAYOUT_rev41lp(
- XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, BL_DOWN,BL_TOGG, BL_BRTG, BL_UP, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
- XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
- XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, QK_BOOT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
- _______, _______, _______, _______, _______
- )
-};
-
-layer_state_t layer_state_set_user(layer_state_t state) {
- return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST);
-}
-
-uint16_t get_tapping_term(uint16_t keycode, keyrecord_t *record) {
- switch (keycode) {
- case LGUI_A:
- case RGUI_SCLN:
- case LALT_S:
- case RALT_L:
- case LCTL_F:
- case RCTL_J:
- case SPC_NAV:
- return 225;
- default:
- return TAPPING_TERM;
- }
-}
diff --git a/keyboards/b_sides/rev41lp/keymaps/namnlos/config.h b/keyboards/b_sides/rev41lp/keymaps/namnlos/config.h
deleted file mode 100644
index 10f5ddf146ba..000000000000
--- a/keyboards/b_sides/rev41lp/keymaps/namnlos/config.h
+++ /dev/null
@@ -1,40 +0,0 @@
-/* Copyright 2022 Jan Lindblom (@janlindblom)
- *
- * 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 .
- */
-#pragma once
-
-#undef BACKLIGHT_LEVELS
-#define BACKLIGHT_LEVELS 11
-#undef BACKLIGHT_LIMIT_VAL
-#define BACKLIGHT_LIMIT_VAL 255
-#define BACKLIGHT_DEFAULT_LEVEL 3
-
-#define UNICODE_SELECTED_MODES UNICODE_MODE_WINCOMPOSE, UNICODE_MODE_WINDOWS, UNICODE_MODE_MACOS, UNICODE_MODE_LINUX
-
-#define QUICK_TAP_TERM 0
-#define TAPPING_TERM 200
-#define TAPPING_TERM_PER_KEY
-
-#define LAYER_STATE_8BIT
-#define NO_ACTION_MACRO
-#define NO_ACTION_FUNCTION
-#define NO_ACTION_ONESHOT
-
-/* Bootmagic Lite key configuration */
-#define BOOTMAGIC_LITE_ROW 0
-#define BOOTMAGIC_LITE_COLUMN 0
-
-/* key combination for command */
-#define IS_COMMAND() (get_mods() == (MOD_BIT(KC_LCTL) | MOD_BIT(KC_RCTL)) || get_mods() == (MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT)))
diff --git a/keyboards/b_sides/rev41lp/keymaps/namnlos/keymap.c b/keyboards/b_sides/rev41lp/keymaps/namnlos/keymap.c
deleted file mode 100644
index c90f7e25a135..000000000000
--- a/keyboards/b_sides/rev41lp/keymaps/namnlos/keymap.c
+++ /dev/null
@@ -1,176 +0,0 @@
-/* Copyright 2022 Jan Lindblom (@janlindblom)
- *
- * 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 .
- */
-
-#include QMK_KEYBOARD_H
-#include "keymap_swedish.h"
-#include "sendstring_swedish.h"
-
-enum layer_names {
- _BASE,
- _LOWER,
- _RAISE,
- _ADJUST
-};
-
-enum custom_keycodes {
- SK_NOT_EQL = SAFE_RANGE,
- SK_LEQ,
- SK_GEQ,
-};
-
-// Custom send_string keys
-bool process_record_user(uint16_t keycode, keyrecord_t *record) {
- switch (keycode) {
- case SK_NOT_EQL:
- if (record->event.pressed) {
- SEND_STRING("!=");
- }
- break;
- case SK_LEQ:
- if (record->event.pressed) {
- SEND_STRING("<=");
- }
- break;
- case SK_GEQ:
- if (record->event.pressed) {
- SEND_STRING(">=");
- }
- break;
- }
- return true;
-}
-
-// Combos, if enabled
-#ifdef COMBO_ENABLE
-enum combo_events {
- ZC_COPY,
- XV_PASTE,
- ZX_CUT,
-};
-
-const uint16_t PROGMEM copy_combo[] = {KC_Z, KC_C, COMBO_END};
-const uint16_t PROGMEM paste_combo[] = {KC_X, KC_V, COMBO_END};
-const uint16_t PROGMEM cut_combo[] = {KC_Z, KC_X, COMBO_END};
-
-combo_t key_combos[] = {
- [ZC_COPY] = COMBO_ACTION(copy_combo),
- [XV_PASTE] = COMBO_ACTION(paste_combo),
- [ZX_CUT] = COMBO_ACTION(cut_combo),
-};
-
-void process_combo_event(uint16_t combo_index, bool pressed) {
- switch (combo_index) {
- case ZC_COPY:
- if (pressed) {
- tap_code16(LCTL(KC_C));
- }
- break;
- case XV_PASTE:
- if (pressed) {
- tap_code16(LCTL(KC_V));
- }
- break;
- case ZX_CUT:
- if (pressed) {
- tap_code16(LCTL(KC_X));
- }
- break;
- }
-}
-#endif
-
-// Tap Dance definitions
-#ifdef TAP_DANCE_ENABLE
-enum dances {
- TD_SHFT_CAPS,
- TD_DOT_COL,
- TD_COM_SCL,
- TD_DASH_USCR,
-};
-
-tap_dance_action_t tap_dance_actions[] = {
- // Tap once for Shift, twice for Caps Lock
- [TD_SHFT_CAPS] = ACTION_TAP_DANCE_DOUBLE(KC_LSFT, KC_CAPS),
- [TD_COM_SCL] = ACTION_TAP_DANCE_DOUBLE(KC_COMM, SE_SCLN),
- [TD_DOT_COL] = ACTION_TAP_DANCE_DOUBLE(KC_DOT, SE_COLN),
- [TD_DASH_USCR] = ACTION_TAP_DANCE_DOUBLE(SE_MINS, S(SE_MINS)),
-};
-# define CK_LSFT TD(TD_SHFT_CAPS)
-# define CK_COMM TD(TD_COM_SCL)
-# define CK_DOT TD(TD_DOT_COL)
-# define CK_DASH TD(TD_DASH_USCR)
-#else
-# define CK_LSFT KC_LSFT
-# define CK_COMM KC_COMM
-# define CK_DOT KC_DOT
-# define CK_DASH SE_MINS
-#endif
-
-// Some defines for the keys below
-#define CK_ESC LT(_RAISE, KC_ESC)
-#define CK_BSPC LCTL_T(KC_BSPC)
-#define CK_DEL LALT_T(KC_DEL)
-#define CK_ENT1 LT(_LOWER, KC_ENT)
-#define CK_ENT2 LT(_RAISE, KC_ENT)
-#define CK_TAB RALT_T(KC_TAB)
-#define CK_ADIA RCTL_T(SE_ADIA)
-#define CK_QUOT RSFT_T(SE_QUOT)
-#define CK_SPC RSFT_T(KC_SPC)
-
-// Alt + [-] => – (en-dash)
-const key_override_t mins_ndash_override = ko_make_basic(MOD_MASK_ALT, SE_MINS, UC(0x2013));
- // Shift + Alt + [-] => — (em-dash)
-const key_override_t mins_mdash_override = ko_make_basic(MOD_MASK_SA, SE_MINS, UC(0x2014));
-
-const key_override_t **key_overrides = (const key_override_t *[]){
- &mins_ndash_override,
- &mins_mdash_override,
- NULL
-};
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [_BASE] = LAYOUT_rev41lp(
- CK_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, SE_ARNG,
- CK_BSPC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, SE_ODIA, CK_ADIA,
- CK_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, SE_COMM, SE_DOT, SE_MINS, CK_QUOT,
- CK_DEL, CK_ENT1, KC_SPC, CK_ENT2, CK_TAB
- ),
-
- [_LOWER] = LAYOUT_rev41lp(
- SK_NOT_EQL, SE_EXLM, SE_AT, SE_HASH, SE_DLR, SE_PERC, SE_CIRC, SE_AMPR, SE_ASTR, SE_LPRN, SE_RPRN, SE_DIAE,
- SK_LEQ, SE_UNDS, SE_PLUS, SE_LCBR, SE_RCBR, SE_PIPE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, SE_GRV, SE_TILD,
- SK_GEQ, KC_ESC, KC_LGUI, KC_LALT, KC_CAPS, SE_DQUO, KC_HOME, KC_END, KC_PGUP, KC_PGDN, KC_PSCR, CK_SPC,
- _______, _______, KC_ENT, _______, _______
- ),
-
- [_RAISE] = LAYOUT_rev41lp(
- _______, SE_1, SE_2, SE_3, SE_4, SE_5, SE_6, SE_7, SE_8, SE_9, SE_0, SE_GRV,
- _______, SE_MINS, SE_EQL, SE_LBRC, SE_RBRC, SE_BSLS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6,
- _______, KC_ESC, KC_RGUI, KC_RALT, KC_CAPS, SE_ACUT, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,
- SE_LABK, SE_RABK, KC_BSPC, _______, _______
- ),
-
- [_ADJUST] = LAYOUT_rev41lp(
- XXXXXXX, XXXXXXX, XXXXXXX, BL_OFF, BL_DOWN, BL_TOGG, BL_BRTG, BL_UP, BL_ON, XXXXXXX, XXXXXXX, XXXXXXX,
- XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, BL_STEP, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
- XXXXXXX, UC_WINC, UC_MAC, UC_LINX, XXXXXXX, XXXXXXX, QK_BOOT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
- _______, _______, _______, _______, _______
- )
-};
-
-layer_state_t layer_state_set_user(layer_state_t state) {
- return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST);
-}
diff --git a/keyboards/b_sides/rev41lp/keymaps/namnlos/readme.md b/keyboards/b_sides/rev41lp/keymaps/namnlos/readme.md
deleted file mode 100644
index cc307b3a9706..000000000000
--- a/keyboards/b_sides/rev41lp/keymaps/namnlos/readme.md
+++ /dev/null
@@ -1,3 +0,0 @@
-# Namnlos custom keymap for Rev41lp
-
-This is a nordic keymap for the Rev41lp by [cyril](https://github.com/cyril279), it's based on the default keymap but has customisations for nordic languages.
diff --git a/keyboards/b_sides/rev41lp/keymaps/namnlos/rules.mk b/keyboards/b_sides/rev41lp/keymaps/namnlos/rules.mk
deleted file mode 100644
index 59c3380a3b88..000000000000
--- a/keyboards/b_sides/rev41lp/keymaps/namnlos/rules.mk
+++ /dev/null
@@ -1,7 +0,0 @@
-SLEEP_LED_ENABLE = yes
-NKRO_ENABLE = yes
-UNICODE_ENABLE = yes
-TAP_DANCE_ENABLE = yes
-KEY_OVERRIDE_ENABLE = yes
-DEBOUNCE_TYPE = sym_defer_pk
-LTO_ENABLE = yes
diff --git a/keyboards/bacca70/keymaps/debaccabean/keymap.c b/keyboards/bacca70/keymaps/debaccabean/keymap.c
deleted file mode 100644
index 1c40669fc8af..000000000000
--- a/keyboards/bacca70/keymaps/debaccabean/keymap.c
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
-Copyright 2022 keebnewb
-
-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 .
-*/
-#include QMK_KEYBOARD_H
-
-#define CAP_GUI MT(MOD_LGUI, KC_CAPS)
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-
- [0] = LAYOUT_debaccabean(
- KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL,
- KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_LBRC,KC_INS, KC_RBRC,KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
- KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_P7, KC_P8, KC_P9, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS,
- CAP_GUI,KC_A, KC_S, KC_D, KC_F, KC_G, KC_P4, KC_P5, KC_P6, 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_P1, KC_P2, KC_P3, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH,KC_ENT,
- KC_LCTL, KC_LALT, KC_SPC, KC_SPC, KC_SPC, MO(1), KC_RCTL
- ),
-
- [1] = LAYOUT_debaccabean(
- QK_BOOT, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
- KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_PSCR,KC_SCRL,KC_PAUS,KC_TRNS,KC_TRNS,
- KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_INS, KC_UP, KC_PGUP,KC_TRNS,KC_TRNS,
- KC_TRNS,KC_MPLY,KC_MUTE,KC_VOLD,KC_VOLU,KC_MPRV,KC_MNXT,KC_TRNS,KC_TRNS,KC_TRNS,KC_LEFT,KC_DOWN,KC_RGHT,KC_TRNS,KC_TRNS,
- KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_HOME,KC_END, KC_PGDN,KC_TRNS,KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS
- )
-};
diff --git a/keyboards/bacca70/keymaps/dede-special/keymap.c b/keyboards/bacca70/keymaps/dede-special/keymap.c
deleted file mode 100644
index e213e7940963..000000000000
--- a/keyboards/bacca70/keymaps/dede-special/keymap.c
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
-Copyright 2022 keebnewb
-
-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 .
-*/
-#include QMK_KEYBOARD_H
-
-// Windows mods
-#define GRV_CTL MT(MOD_LCTL, KC_GRV)
-#define BLS_CTL MT(MOD_RCTL, KC_BSLS)
-#define TAB_ALT MT(MOD_LALT, KC_TAB)
-
-// MacOS mods
-#define GRV_GUI MT(MOD_LGUI, KC_GRV)
-#define BLS_GUI MT(MOD_RGUI, KC_BSLS)
-#define TAB_CTL MT(MOD_LCTL, KC_TAB)
-
-// mod tap bracket shifts
-#define LBR_SFT MT(MOD_LSFT, KC_LBRC)
-#define RBR_SFT MT(MOD_RSFT, KC_RBRC)
-
-// Arrow/TenKey/Media Keys/Reset hold with Backspace tap
-#define BSPC_LR LT(3, KC_BSPC)
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-
- [0] = LAYOUT_debaccabean(
- 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_F13,
- KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_LBRC,KC_GRV, KC_RBRC,KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL,
- KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_P7, KC_P8, KC_P9, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_ENT,
- TAB_ALT,KC_A, KC_S, KC_D, KC_F, KC_G, KC_P4, KC_P5, KC_P6, KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_QUOT,
- LBR_SFT,KC_Z, KC_X, KC_C, KC_V, KC_B, KC_P1, KC_P2, KC_P3, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH,RBR_SFT,
- KC_LGUI, GRV_CTL, BSPC_LR,MO(2), KC_SPC, BLS_CTL, KC_RGUI
- ),
-
- // MacOS layer
- [1] = LAYOUT_debaccabean(
- KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
- KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
- KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
- TAB_CTL,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
- KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
- KC_LALT, GRV_GUI, KC_TRNS,KC_TRNS,KC_TRNS, BLS_GUI, KC_RALT
- ),
-
- [2] = LAYOUT_debaccabean(
- KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
- KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
- KC_UNDS,KC_EXLM,KC_AT, KC_HASH,KC_DLR, KC_DLR, KC_TRNS,KC_TRNS,KC_TRNS,KC_CIRC,KC_AMPR,KC_ASTR,KC_LPRN,KC_RPRN,KC_PLUS,
- KC_MINS,KC_1, KC_2, KC_3, KC_4, KC_5, KC_TRNS,KC_TRNS,KC_TRNS,KC_6, KC_7, KC_8, KC_9, KC_0, KC_EQL,
- KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS
- ),
-
- [3] = LAYOUT_debaccabean(
- QK_BOOT, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,TG(1),
- KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_PSCR,KC_SCRL,KC_PAUS,KC_TRNS,KC_TRNS,
- KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_INS, KC_UP, KC_PGUP,KC_TRNS,KC_TRNS,
- KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_MNXT,KC_TRNS,KC_TRNS,KC_TRNS,KC_LEFT,KC_DOWN,KC_RGHT,KC_TRNS,
- KC_MPLY,KC_MUTE,KC_VOLD,KC_VOLU,KC_MPRV,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_HOME,KC_END, KC_PGDN,KC_TRNS,KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS
- )
-};
diff --git a/keyboards/bajjak/rules.mk b/keyboards/bajjak/rules.mk
index 13148ecb0489..21db4112e069 100644
--- a/keyboards/bajjak/rules.mk
+++ b/keyboards/bajjak/rules.mk
@@ -26,4 +26,4 @@ AUDIO_SUPPORTED = no
# project specific files
SRC += matrix.c
-QUANTUM_LIB_SRC += i2c_master.c
+I2C_DRIVER_REQUIRED = yes
diff --git a/keyboards/bandominedoni/config.h b/keyboards/bandominedoni/config.h
index df0ebb0fdc43..7dfa48fbd435 100644
--- a/keyboards/bandominedoni/config.h
+++ b/keyboards/bandominedoni/config.h
@@ -35,7 +35,6 @@
# define LED_HITS_TO_REMEMBER 10
# define RGB_MATRIX_MAXIMUM_BRIGHTNESS 50
-# define RGB_MATRIX_DEFAULT_SPD 127
// the above brighness setting has no effect on rgb_matrix_set_color().
// Use darker colors instead.
/* RGB darker COLORS */
diff --git a/keyboards/bandominedoni/keymaps/led/config.h b/keyboards/bandominedoni/keymaps/led/config.h
deleted file mode 100644
index 04bd66bf1ac7..000000000000
--- a/keyboards/bandominedoni/keymaps/led/config.h
+++ /dev/null
@@ -1,18 +0,0 @@
-/* Copyright 2021 3araht
- *
- * 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 .
- */
- #pragma once
-
-#define DYNAMIC_KEYMAP_LAYER_COUNT 6
diff --git a/keyboards/bandominedoni/keymaps/led/keymap.c b/keyboards/bandominedoni/keymaps/led/keymap.c
deleted file mode 100644
index 0ae2185eceec..000000000000
--- a/keyboards/bandominedoni/keymaps/led/keymap.c
+++ /dev/null
@@ -1,255 +0,0 @@
-/* Copyright 2021 3araht
- *
- * 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 .
- */
-#include QMK_KEYBOARD_H
-#include "version.h"
-
-#define DF_COLE DF(_COLEMAK)
-
-#define _________________QWERTY_L1_________________ KC_Q, KC_W, KC_E, KC_R, KC_T
-#define _________________QWERTY_L2_________________ KC_A, KC_S, KC_D, KC_F, KC_G
-#define _________________QWERTY_L3_________________ KC_Z, KC_X, KC_C, KC_V, KC_B
-
-#define _________________QWERTY_R1_________________ KC_Y, KC_U, KC_I, KC_O, KC_P
-#define _________________QWERTY_R2_________________ KC_H, KC_J, KC_K, KC_L, KC_SCLN
-#define _________________QWERTY_R3_________________ KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH
-
-#define _________________COLEMAK_L1________________ KC_Q, KC_W, KC_F, KC_P, KC_G
-#define _________________COLEMAK_L2________________ KC_A, KC_R, KC_S, KC_T, KC_D
-#define _________________COLEMAK_L3________________ KC_Z, KC_X, KC_C, KC_V, KC_B
-
-#define _________________COLEMAK_R1________________ KC_J, KC_L, KC_U, KC_Y, KC_SCLN
-#define _________________COLEMAK_R2________________ KC_H, KC_N, KC_E, KC_I, KC_O
-#define _________________COLEMAK_R3________________ KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH
-
-#define _________________NUMBER_L__________________ KC_1, KC_2, KC_3, KC_4, KC_5
-// #define _________________NUMBER_R__________________ KC_6, KC_7, KC_8, KC_9, KC_0
-
-#define _________________FUNC__L___________________ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5
-// #define _________________FUNC__R___________________ KC_F6, KC_F7, KC_F8, KC_F9, KC_F10
-
-// Defines names for use in layer keycodes and the keymap
-enum layer_names {
-#ifndef PEDAL_NORMALLY_CLOSED
- _OPEN,
-#endif
- _CLOSE,
-#ifdef PEDAL_NORMALLY_CLOSED
- _OPEN,
-#endif
- _QWERTY,
- _COLEMAK,
- _MISC,
- _FN
-};
-
-enum custom_keycodes {
- VERSION = SAFE_RANGE
-};
-
-// Alias layout macros that expand groups of keys.
-#define LAYOUT_wrapper(...) LAYOUT(__VA_ARGS__)
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [_OPEN] = LAYOUT(
- MI_Gs1, MI_As1, MI_Cs2, MI_F2, MI_Gs3,
- MI_E1, MI_A1, MI_G2, MI_Ds2, MI_F3, MI_As2, MI_F1,
- MI_D2, MI_A2, MI_C3, MI_E3, MI_C2, MI_G1, TG_SWAP,
- MI_E2, MI_Gs2, MI_B2, MI_D3, MI_Fs3, MI_Cs3, MI_Fs1,
- MI_D1, MI_B1, MI_G3, MI_A3, MI_Ds3, MI_Fs2, MI_Ds1, MI_C1,
-
- MO_SWAP, MI_B5, MI_Gs5, MI_G5, MI_F5, FN_MUTE,
- MI_Cs3, MI_A5, MI_Fs5, MI_E5, MI_Ds5,
- MI_C3, MI_D3, MI_G3, MI_As4, MI_C5, MI_D5,
- TG_SWAP, MI_B2, MI_E3, MI_Cs4, MI_Fs3, MI_A3, MI_C4, MI_E4,
- MI_A2, MI_F3, MI_As3, MI_Gs3, MI_B3, MI_D4, MI_Gs4, MI_B4,
- MI_Gs2, MI_As2, MI_Ds3, MI_F4, MI_Ds4, MI_Fs4, MI_A4, MI_Cs5, MI_G4
- ),
-
- [_CLOSE] = LAYOUT(
- MI_Gs1, MI_As1, MI_Ds2, MI_Ds3, MI_G3,
- MI_D1, MI_D2, MI_As2, MI_C3, MI_Cs2, MI_C2, MI_Fs1,
- MI_G1, MI_G2, MI_B2, MI_D3, MI_F3, MI_Fs2, TG_SWAP,
- MI_A1, MI_E2, MI_A2, MI_Cs3, MI_E3, MI_Gs2, MI_B1,
- MI_E1, MI_E2, MI_Fs3, MI_Gs3, MI_B3, MI_F2, MI_Cs1, MI_F1,
-
- MO_SWAP, MI_A5, MI_Gs5, MI_Fs5, MI_F5, FN_MUTE,
- MI_C3, MI_G5, MI_As4, MI_C5, MI_Ds5,
- MI_D3, MI_Cs3, MI_Gs3, MI_As3, MI_C4, MI_D5,
- TG_SWAP, MI_B2, MI_Fs3, MI_Fs4, MI_G3, MI_B3, MI_D4, MI_G4,
- MI_A2, MI_F3, MI_E3, MI_A3, MI_Cs4, MI_E4, MI_A4, MI_Cs5,
- MI_Gs2, MI_As2, MI_Ds3, MI_F4, MI_E4, MI_Gs4, MI_B4, MI_E5, MI_Ds4
- ),
-
- [_QWERTY] = LAYOUT_wrapper(
- _________________NUMBER_L__________________,
- QK_GESC, KC_TAB, _________________QWERTY_L1_________________,
- KC_CAPS, _________________QWERTY_L2_________________, KC_H,
- KC_LSFT, _________________QWERTY_L3_________________, KC_N,
- KC_LCTL, KC_GRV, KC_LGUI, KC_LALT, MIS_EIS, KC_SPC, KC_SPC, KC_PSCR,
-
- MO(_MISC), KC_LBRC, KC_RBRC, KC_BSLS, KC_0, _______,
- KC_6, KC_7, KC_8, KC_9, KC_BSPC,
- _________________QWERTY_R1_________________, KC_DEL,
- KC_PGUP, KC_G, _________________QWERTY_R2_________________, KC_ENT,
- KC_PGDN, KC_B, _________________QWERTY_R3_________________, KC_RSFT,
- KC_HOME, KC_END, KC_SPC, MIS_KAN, KC_RALT, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
- ),
-
- [_COLEMAK] = LAYOUT_wrapper(
- _________________NUMBER_L__________________,
- QK_GESC, KC_TAB, _________________COLEMAK_L1________________,
- KC_LCTL, _________________COLEMAK_L2________________, KC_ENT,
- KC_LSFT, _________________COLEMAK_L3________________, KC_M,
- KC_CAPS, KC_GRV, KC_LGUI, KC_LALT, MIS_EIS, KC_SPC, KC_SPC, KC_PSCR,
-
- MO(_MISC), KC_LBRC, KC_RBRC, KC_BSLS, KC_0, _______,
- KC_6, KC_7, KC_8, KC_9, KC_BSPC,
- _________________COLEMAK_R1________________, KC_DEL,
- KC_PGUP, KC_D, _________________COLEMAK_R2________________, KC_ENT,
- KC_PGDN, KC_B, _________________COLEMAK_R3________________, KC_RSFT,
- KC_HOME, KC_END, KC_SPC, MIS_KAN, KC_RALT, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
- ),
-
- [_MISC] = LAYOUT_wrapper(
- _________________FUNC__L___________________,
- _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______,
-
- _______, _______, _______, _______, KC_F10, _______,
- KC_F6, KC_F7, KC_F8, KC_F9, _______,
- _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, KC_QUOT, _______,
- _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______
- ),
-
- [_FN] = LAYOUT(
- DF_SWAP, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
- XXXXXXX, DF_QWER, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
- DF_COLE, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______,
- XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
- XXXXXXX, XXXXXXX, AG_NORM, AG_SWAP, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
-
- _______, MI_OCTD, MI_OCTU, MI_VELD, MI_VELU, _______,
- XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
- XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, VERSION,
- _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
- RGB_SAD, RGB_SAI, RGB_HUD, RGB_HUI, RGB_SPD, RGB_SPI, RGB_VAD, RGB_VAI,
- XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_RMOD, RGB_MOD, EE_CLR, RGB_TOG
- )
-};
-
-#if defined(ENCODER_MAP_ENABLE)
-const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
- [_OPEN] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
- [_CLOSE] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
- [_QWERTY] = { ENCODER_CCW_CW(_______, _______) },
- [_COLEMAK] = { ENCODER_CCW_CW(_______, _______) },
- [_MISC] = { ENCODER_CCW_CW(_______, _______) },
- [_FN] = { ENCODER_CCW_CW(RGB_RMOD, RGB_MOD) },
-};
-#endif
-
-void my_init(void){
- // Set octave to 0
- midi_config.octave = QK_MIDI_OCTAVE_0 - MIDI_OCTAVE_MIN;
-
- // avoid using 127 since it is used as a special number in some sound sources.
- midi_config.velocity = MIDI_INITIAL_VELOCITY;
-}
-
-void eeconfig_init_user(void) { // EEPROM is getting reset!
- midi_init();
- my_init();
-#ifdef RGB_MATRIX_ENABLE
- rgb_matrix_enable();
- rgb_matrix_set_speed(RGB_MATRIX_DEFAULT_SPD);
- rgb_matrix_sethsv(HSV_BLUE);
-
- rgb_matrix_mode(RGB_MATRIX_SOLID_REACTIVE);
- // rgb_matrix_mode(RGB_MATRIX_RAINBOW_MOVING_CHEVRON);
-#endif
-}
-
-void keyboard_post_init_user(void) {
- my_init();
-
- // party mode (for LED soldering test. Enable rainbow color effect, and disable led_indicator to check all LEDs)
- rgb_matrix_mode(RGB_MATRIX_RAINBOW_MOVING_CHEVRON);
-};
-
-bool process_record_user(uint16_t keycode, keyrecord_t *record) {
- switch (keycode) {
- case VERSION: // Output firmware info.
- if (record->event.pressed) {
- SEND_STRING(QMK_KEYBOARD ":" QMK_KEYMAP " @ " QMK_VERSION " | " QMK_BUILDDATE);
- }
- break;
- }
- return true;
-}
-
-#ifdef RGB_MATRIX_ENABLE
-bool rgb_matrix_indicators_user(void) {
- if (rgb_matrix_is_enabled()) { // turn the lights on when it is enabled.
- uint8_t layer = get_highest_layer(layer_state);
- switch (layer) {
- case _CLOSE:
- // rgb_matrix_set_color(pgm_read_byte(&convert_led_location2number[11]), RGB_RED); // RGB_TOG <- too heavy.
-
- // Close state indicator
- rgb_matrix_set_color( 0, RGB_DARKWHITE); // oc
- break;
-
- case _FN:
- // left hand side
- rgb_matrix_set_color( 46, RGB_DARKORANGE); // DF_OPEN
- rgb_matrix_set_color( 48, RGB_DARKWHITE); // DF_QWER
- rgb_matrix_set_color( 60, RGB_DARKWHITE); // DF_COLE
-
- rgb_matrix_set_color( 73, RGB_DARKYELLOW); // AG_SWAP
- rgb_matrix_set_color( 72, RGB_DARKYELLOW); // AG_NORM
-
-
- // right hand side
- rgb_matrix_set_color( 1, RGB_DARKYELLOW); // MI_OCTD
- rgb_matrix_set_color(13, RGB_DARKGREEN); // MI_OCTU
- rgb_matrix_set_color(14, RGB_DARKYELLOW); // MI_VELD
- rgb_matrix_set_color(25, RGB_DARKGREEN); // MI_VELU
-
- rgb_matrix_set_color( 6, RGB_DARKBLUE); // RGB_SAD
- rgb_matrix_set_color( 9, RGB_DARKBLUE); // RGB_SAI
- rgb_matrix_set_color(18, RGB_DARKBLUE); // RGB_HUD
- rgb_matrix_set_color(21, RGB_DARKBLUE); // RGB_HUI
- rgb_matrix_set_color(29, RGB_DARKBLUE); // RGB_SPD
- rgb_matrix_set_color(32, RGB_DARKBLUE); // RGB_SPI
- rgb_matrix_set_color(36, RGB_DARKBLUE); // RGB_VAD
- rgb_matrix_set_color(39, RGB_DARKBLUE); // RGB_VAI
-
- rgb_matrix_set_color(31, RGB_DARKBLUE); // RGB_RMOD
- rgb_matrix_set_color(37, RGB_DARKBLUE); // RGB_MOD
- rgb_matrix_set_color(38, RGB_DARKPINK); // EE_CLR
- rgb_matrix_set_color(40, RGB_DARKRED); // RGB_TOG
-
- rgb_matrix_set_color(41, RGB_DARKORANGE); // _FN
- break;
- }
- }
- return false;
-}
-#endif
diff --git a/keyboards/bandominedoni/keymaps/led/readme.md b/keyboards/bandominedoni/keymaps/led/readme.md
deleted file mode 100644
index 77e709c70bab..000000000000
--- a/keyboards/bandominedoni/keymaps/led/readme.md
+++ /dev/null
@@ -1 +0,0 @@
-# The keymap with led for bandominedoni
diff --git a/keyboards/bandominedoni/keymaps/led/rules.mk b/keyboards/bandominedoni/keymaps/led/rules.mk
deleted file mode 100644
index 0a1c4b1858e0..000000000000
--- a/keyboards/bandominedoni/keymaps/led/rules.mk
+++ /dev/null
@@ -1,4 +0,0 @@
-RGB_MATRIX_ENABLE = yes # Use RGB matrix (Don't enable this when RGBLIGHT_ENABLE is used.)
-RGB_MATRIX_CUSTOM_KB = yes #
-
-ENCODER_MAP_ENABLE = yes # replacing ENCODERS_CW_KEY method to this on 2022/08/31.
diff --git a/keyboards/bandominedoni/keymaps/lednotg/keymap.c b/keyboards/bandominedoni/keymaps/lednotg/keymap.c
deleted file mode 100644
index 6f904a06d2b3..000000000000
--- a/keyboards/bandominedoni/keymaps/lednotg/keymap.c
+++ /dev/null
@@ -1,255 +0,0 @@
-/* Copyright 2021 3araht
- *
- * 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 .
- */
-#include QMK_KEYBOARD_H
-#include "version.h"
-
-#define DF_COLE DF(_COLEMAK)
-
-#define _________________QWERTY_L1_________________ KC_Q, KC_W, KC_E, KC_R, KC_T
-#define _________________QWERTY_L2_________________ KC_A, KC_S, KC_D, KC_F, KC_G
-#define _________________QWERTY_L3_________________ KC_Z, KC_X, KC_C, KC_V, KC_B
-
-#define _________________QWERTY_R1_________________ KC_Y, KC_U, KC_I, KC_O, KC_P
-#define _________________QWERTY_R2_________________ KC_H, KC_J, KC_K, KC_L, KC_SCLN
-#define _________________QWERTY_R3_________________ KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH
-
-#define _________________COLEMAK_L1________________ KC_Q, KC_W, KC_F, KC_P, KC_G
-#define _________________COLEMAK_L2________________ KC_A, KC_R, KC_S, KC_T, KC_D
-#define _________________COLEMAK_L3________________ KC_Z, KC_X, KC_C, KC_V, KC_B
-
-#define _________________COLEMAK_R1________________ KC_J, KC_L, KC_U, KC_Y, KC_SCLN
-#define _________________COLEMAK_R2________________ KC_H, KC_N, KC_E, KC_I, KC_O
-#define _________________COLEMAK_R3________________ KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH
-
-#define _________________NUMBER_L__________________ KC_1, KC_2, KC_3, KC_4, KC_5
-// #define _________________NUMBER_R__________________ KC_6, KC_7, KC_8, KC_9, KC_0
-
-#define _________________FUNC__L___________________ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5
-// #define _________________FUNC__R___________________ KC_F6, KC_F7, KC_F8, KC_F9, KC_F10
-
-// Defines names for use in layer keycodes and the keymap
-enum layer_names {
-#ifndef PEDAL_NORMALLY_CLOSED
- _OPEN,
-#endif
- _CLOSE,
-#ifdef PEDAL_NORMALLY_CLOSED
- _OPEN,
-#endif
- _QWERTY,
- _COLEMAK,
- _MISC,
- _FN
-};
-
-enum custom_keycodes {
- VERSION = SAFE_RANGE
-};
-
-// Alias layout macros that expand groups of keys.
-#define LAYOUT_wrapper(...) LAYOUT(__VA_ARGS__)
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [_OPEN] = LAYOUT(
- MI_Gs1, MI_As1, MI_Cs2, MI_F2, MI_Gs3,
- MI_E1, MI_A1, MI_G2, MI_Ds2, MI_F3, MI_As2, MI_F1,
- MI_D2, MI_A2, MI_C3, MI_E3, MI_C2, MI_G1, MI_B,
- MI_E2, MI_Gs2, MI_B2, MI_D3, MI_Fs3, MI_Cs3, MI_Fs1,
- MI_D1, MI_B1, MI_G3, MI_A3, MI_Ds3, MI_Fs2, MI_Ds1, MI_C1,
-
- MO_SWAP, MI_B5, MI_Gs5, MI_G5, MI_F5, FN_MUTE,
- MI_Cs3, MI_A5, MI_Fs5, MI_E5, MI_Ds5,
- MI_C3, MI_D3, MI_G3, MI_As4, MI_C5, MI_D5,
- MI_G2, MI_B2, MI_E3, MI_Cs4, MI_Fs3, MI_A3, MI_C4, MI_E4,
- MI_A2, MI_F3, MI_As3, MI_Gs3, MI_B3, MI_D4, MI_Gs4, MI_B4,
- MI_Gs2, MI_As2, MI_Ds3, MI_F4, MI_Ds4, MI_Fs4, MI_A4, MI_Cs5, MI_G4
- ),
-
- [_CLOSE] = LAYOUT(
- MI_Gs1, MI_As1, MI_Ds2, MI_Ds3, MI_G3,
- MI_D1, MI_D2, MI_As2, MI_C3, MI_Cs2, MI_C2, MI_Fs1,
- MI_G1, MI_G2, MI_B2, MI_D3, MI_F3, MI_Fs2, MI_B,
- MI_A1, MI_E2, MI_A2, MI_Cs3, MI_E3, MI_Gs2, MI_B1,
- MI_E1, MI_E2, MI_Fs3, MI_Gs3, MI_B3, MI_F2, MI_Cs1, MI_F1,
-
- MO_SWAP, MI_A5, MI_Gs5, MI_Fs5, MI_F5, FN_MUTE,
- MI_C3, MI_G5, MI_As4, MI_C5, MI_Ds5,
- MI_D3, MI_Cs3, MI_Gs3, MI_As3, MI_C4, MI_D5,
- MI_G2, MI_B2, MI_Fs3, MI_Fs4, MI_G3, MI_B3, MI_D4, MI_G4,
- MI_A2, MI_F3, MI_E3, MI_A3, MI_Cs4, MI_E4, MI_A4, MI_Cs5,
- MI_Gs2, MI_As2, MI_Ds3, MI_F4, MI_E4, MI_Gs4, MI_B4, MI_E5, MI_Ds4
- ),
-
- [_QWERTY] = LAYOUT_wrapper(
- _________________NUMBER_L__________________,
- QK_GESC, KC_TAB, _________________QWERTY_L1_________________,
- KC_CAPS, _________________QWERTY_L2_________________, KC_H,
- KC_LSFT, _________________QWERTY_L3_________________, KC_N,
- KC_LCTL, KC_GRV, KC_LGUI, KC_LALT, MIS_EIS, KC_SPC, KC_SPC, KC_PSCR,
-
- MO(_MISC), KC_LBRC, KC_RBRC, KC_BSLS, KC_0, _______,
- KC_6, KC_7, KC_8, KC_9, KC_BSPC,
- _________________QWERTY_R1_________________, KC_DEL,
- KC_PGUP, KC_G, _________________QWERTY_R2_________________, KC_ENT,
- KC_PGDN, KC_B, _________________QWERTY_R3_________________, KC_RSFT,
- KC_HOME, KC_END, KC_SPC, MIS_KAN, KC_RALT, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
- ),
-
- [_COLEMAK] = LAYOUT_wrapper(
- _________________NUMBER_L__________________,
- QK_GESC, KC_TAB, _________________COLEMAK_L1________________,
- KC_LCTL, _________________COLEMAK_L2________________, KC_ENT,
- KC_LSFT, _________________COLEMAK_L3________________, KC_M,
- KC_CAPS, KC_GRV, KC_LGUI, KC_LALT, MIS_EIS, KC_SPC, KC_SPC, KC_PSCR,
-
- MO(_MISC), KC_LBRC, KC_RBRC, KC_BSLS, KC_0, _______,
- KC_6, KC_7, KC_8, KC_9, KC_BSPC,
- _________________COLEMAK_R1________________, KC_DEL,
- KC_PGUP, KC_D, _________________COLEMAK_R2________________, KC_ENT,
- KC_PGDN, KC_B, _________________COLEMAK_R3________________, KC_RSFT,
- KC_HOME, KC_END, KC_SPC, MIS_KAN, KC_RALT, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
- ),
-
- [_MISC] = LAYOUT_wrapper(
- _________________FUNC__L___________________,
- _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______,
-
- _______, _______, _______, _______, KC_F10, _______,
- KC_F6, KC_F7, KC_F8, KC_F9, _______,
- _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, KC_QUOT, _______,
- _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______
- ),
-
- [_FN] = LAYOUT(
- DF_SWAP, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
- XXXXXXX, DF_QWER, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
- DF_COLE, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______,
- XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
- XXXXXXX, XXXXXXX, AG_NORM, AG_SWAP, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
-
- _______, KC_VOLD, KC_VOLU, MI_VELD, MI_VELU, _______,
- XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
- XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, VERSION,
- _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
- RGB_SAD, RGB_SAI, RGB_HUD, RGB_HUI, RGB_SPD, RGB_SPI, RGB_VAD, RGB_VAI,
- XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_RMOD, RGB_MOD, EE_CLR, RGB_TOG
- )
-};
-
-#if defined(ENCODER_MAP_ENABLE)
-const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
- [_OPEN] = { ENCODER_CCW_CW(MI_OCTD, MI_OCTU) },
- [_CLOSE] = { ENCODER_CCW_CW(MI_OCTD, MI_OCTU) },
- [_QWERTY] = { ENCODER_CCW_CW(_______, _______) },
- [_COLEMAK] = { ENCODER_CCW_CW(_______, _______) },
- [_MISC] = { ENCODER_CCW_CW(_______, _______) },
- [_FN] = { ENCODER_CCW_CW(RGB_RMOD, RGB_MOD) },
-};
-#endif
-
-void my_init(void){
- // Set octave to 0
- midi_config.octave = QK_MIDI_OCTAVE_0 - MIDI_OCTAVE_MIN;
-
- // avoid using 127 since it is used as a special number in some sound sources.
- midi_config.velocity = MIDI_INITIAL_VELOCITY;
-}
-
-void eeconfig_init_user(void) { // EEPROM is getting reset!
- midi_init();
- my_init();
-#ifdef RGB_MATRIX_ENABLE
- rgb_matrix_enable();
- rgb_matrix_set_speed(RGB_MATRIX_DEFAULT_SPD);
- rgb_matrix_sethsv(HSV_BLUE);
-
- rgb_matrix_mode(RGB_MATRIX_SOLID_REACTIVE);
- // rgb_matrix_mode(RGB_MATRIX_RAINBOW_MOVING_CHEVRON);
-#endif
-}
-
-void keyboard_post_init_user(void) {
- my_init();
-
- // party mode (for LED soldering test. Enable rainbow color effect, and disable led_indicator to check all LEDs)
- rgb_matrix_mode(RGB_MATRIX_RAINBOW_MOVING_CHEVRON);
-};
-
-bool process_record_user(uint16_t keycode, keyrecord_t *record) {
- switch (keycode) {
- case VERSION: // Output firmware info.
- if (record->event.pressed) {
- SEND_STRING(QMK_KEYBOARD ":" QMK_KEYMAP " @ " QMK_VERSION " | " QMK_BUILDDATE);
- }
- break;
- }
- return true;
-}
-
-#ifdef RGB_MATRIX_ENABLE
-bool rgb_matrix_indicators_user(void) {
- if (rgb_matrix_is_enabled()) { // turn the lights on when it is enabled.
- uint8_t layer = biton32(layer_state);
- switch (layer) {
- case _CLOSE:
- // rgb_matrix_set_color(pgm_read_byte(&convert_led_location2number[11]), RGB_RED); // RGB_TOG <- too heavy.
-
- // Close state indicator
- rgb_matrix_set_color( 0, RGB_DARKWHITE); // oc
- break;
-
- case _FN:
- // left hand side
- rgb_matrix_set_color( 46, RGB_DARKORANGE); // DF_OPEN
- rgb_matrix_set_color( 48, RGB_DARKWHITE); // DF_QWER
- rgb_matrix_set_color( 60, RGB_DARKWHITE); // DF_COLE
-
- rgb_matrix_set_color( 73, RGB_DARKYELLOW); // AG_SWAP
- rgb_matrix_set_color( 72, RGB_DARKYELLOW); // AG_NORM
-
-
- // right hand side
- rgb_matrix_set_color( 1, RGB_DARKYELLOW); // MI_OCTD
- rgb_matrix_set_color(13, RGB_DARKGREEN); // MI_OCTU
- rgb_matrix_set_color(14, RGB_DARKYELLOW); // MI_VELD
- rgb_matrix_set_color(25, RGB_DARKGREEN); // MI_VELU
-
- rgb_matrix_set_color( 6, RGB_DARKBLUE); // RGB_SAD
- rgb_matrix_set_color( 9, RGB_DARKBLUE); // RGB_SAI
- rgb_matrix_set_color(18, RGB_DARKBLUE); // RGB_HUD
- rgb_matrix_set_color(21, RGB_DARKBLUE); // RGB_HUI
- rgb_matrix_set_color(29, RGB_DARKBLUE); // RGB_SPD
- rgb_matrix_set_color(32, RGB_DARKBLUE); // RGB_SPI
- rgb_matrix_set_color(36, RGB_DARKBLUE); // RGB_VAD
- rgb_matrix_set_color(39, RGB_DARKBLUE); // RGB_VAI
-
- rgb_matrix_set_color(31, RGB_DARKBLUE); // RGB_RMOD
- rgb_matrix_set_color(37, RGB_DARKBLUE); // RGB_MOD
- rgb_matrix_set_color(38, RGB_DARKPINK); // EE_CLR
- rgb_matrix_set_color(40, RGB_DARKRED); // RGB_TOG
-
- rgb_matrix_set_color(41, RGB_DARKORANGE); // _FN
- break;
- }
- }
- return false;
-}
-#endif
diff --git a/keyboards/bandominedoni/keymaps/lednotg/readme.md b/keyboards/bandominedoni/keymaps/lednotg/readme.md
deleted file mode 100644
index 803d1d39f82f..000000000000
--- a/keyboards/bandominedoni/keymaps/lednotg/readme.md
+++ /dev/null
@@ -1 +0,0 @@
-# The keymap with led and no TG keys on the layout for bandominedoni
diff --git a/keyboards/bandominedoni/keymaps/lednotg/rules.mk b/keyboards/bandominedoni/keymaps/lednotg/rules.mk
deleted file mode 100644
index 0a1c4b1858e0..000000000000
--- a/keyboards/bandominedoni/keymaps/lednotg/rules.mk
+++ /dev/null
@@ -1,4 +0,0 @@
-RGB_MATRIX_ENABLE = yes # Use RGB matrix (Don't enable this when RGBLIGHT_ENABLE is used.)
-RGB_MATRIX_CUSTOM_KB = yes #
-
-ENCODER_MAP_ENABLE = yes # replacing ENCODERS_CW_KEY method to this on 2022/08/31.
diff --git a/keyboards/barleycorn_smd/rules.mk b/keyboards/barleycorn_smd/rules.mk
index 173368a047c7..69ecebae2ae1 100644
--- a/keyboards/barleycorn_smd/rules.mk
+++ b/keyboards/barleycorn_smd/rules.mk
@@ -14,4 +14,4 @@ AUDIO_ENABLE = no # Audio output
CUSTOM_MATRIX = lite
SRC += matrix.c
-QUANTUM_LIB_SRC += i2c_master.c
+I2C_DRIVER_REQUIRED = yes
diff --git a/keyboards/basekeys/slice/rev1/keymaps/2moons/config.h b/keyboards/basekeys/slice/rev1/keymaps/2moons/config.h
deleted file mode 100644
index 3807c29fa7b4..000000000000
--- a/keyboards/basekeys/slice/rev1/keymaps/2moons/config.h
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
-Copyright 2020 2Moons
-
-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 .
-*/
-#pragma once
-
-/* Select hand configuration */
-
-#define QUICK_TAP_TERM 0
-#define TAPPING_TERM 180
-//#define MASTER_RIGHT
diff --git a/keyboards/basekeys/slice/rev1/keymaps/2moons/keymap.c b/keyboards/basekeys/slice/rev1/keymaps/2moons/keymap.c
deleted file mode 100644
index 7d84ce3ae0bb..000000000000
--- a/keyboards/basekeys/slice/rev1/keymaps/2moons/keymap.c
+++ /dev/null
@@ -1,195 +0,0 @@
-/* Copyright 2020 2Moons
- *
- * 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 .
- */
-#include QMK_KEYBOARD_H
-#include "keymap_japanese.h"
-
-#ifdef RGBLIGHT_ENABLE
-//Following line allows macro to read current RGB settings
-extern rgblight_config_t rgblight_config;
-#endif
-
-extern uint8_t is_master;
-
-// Each layer gets a name for readability, which is then used in the keymap matrix below.
-// The underscores don't mean anything - you can have a layer called STUFF or any other name.
-// Layer names don't all need to be of the same length, obviously, and you can also skip them
-// entirely and just use numbers.
-enum layer_number {
- _QWERTY = 0,
- _FLOCK,
- _FN,
- _LOWER,
- _RAISE,
- _ADJUST,
-};
-
-enum custom_keycodes {
- RGB_RST = SAFE_RANGE
-};
-
-enum tapdances{
- TD_ESFL = 0,
- TD_ESQW,
-};
-
-tap_dance_action_t tap_dance_actions[] = {
- [TD_ESFL] = ACTION_TAP_DANCE_LAYER_MOVE(KC_ESC, _FLOCK),
- [TD_ESQW] = ACTION_TAP_DANCE_LAYER_MOVE(KC_ESC, _QWERTY),
-};
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [_QWERTY] = LAYOUT_all(
- //,------------------------------------------------------------------------| |----------------------------------------------------------------.
- KC_ESC, KC_GRAVE, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC, KC_BSPC,
- //|--------+---------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+----------|
- RGB_MODE_FORWARD, 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,
- //|--------+---------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+----------|
- RGB_MODE_GRADIENT, 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,
- //|--------+---------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+----------|
- RGB_MODE_XMAS, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_RSFT, KC_RSFT,
- //|--------+---------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+----------|
- RGB_TOG, KC_LCTL, KC_LALT, KC_LALT, KC_SPC, KC_SPC, KC_SPC, KC_SPC, KC_SPC, KC_RALT, KC_RCTL, MO(_FN)
- //`----------------------------------------------------------------| |--------------------------------------------'
- ),
-
- [_FLOCK] = LAYOUT_all(
- //,------------------------------------------------------------------------| |----------------------------------------------------------------.
- KC_ESC, KC_GRAVE, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC, KC_BSPC,
- //|--------+---------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+----------|
- RGB_MODE_FORWARD, 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,
- //|--------+---------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+----------|
- RGB_MODE_GRADIENT, 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,
- //|--------+---------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+----------|
- RGB_MODE_XMAS, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_RSFT, KC_RSFT,
- //|--------+---------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+----------|
- RGB_TOG, KC_LCTL, KC_LALT, KC_LALT, KC_SPC, KC_SPC, KC_SPC, KC_SPC, KC_SPC, KC_RALT, KC_RCTL, MO(_FN)
- //`----------------------------------------------------------------| |--------------------------------------------'
- ),
-
- [_FN] = LAYOUT_all(
- //,------------------------------------------------------------------------| |----------------------------------------------------------------.
- KC_ESC, TG(_ADJUST), 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_INS, KC_BSPC, KC_DEL,
- //|--------+---------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+----------|
- _______, _______, _______, _______, _______, _______, _______, _______, KC_PSCR, KC_SCRL, KC_PAUSE, KC_UP, _______, _______, _______,
- //|--------+---------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+----------|
- _______, _______, _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGUP, KC_LEFT, KC_RIGHT, _______, _______,
- //|--------+---------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+----------|
- _______, _______, _______, _______, _______, _______, _______, _______, KC_END, KC_PGDN, KC_DOWN, _______, _______, _______, _______, _______,
- //|--------+---------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+----------|
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
- //`----------------------------------------------------------------| |--------------------------------------------'
- ),
-
- [_LOWER] = LAYOUT_all(
- //,------------------------------------------------------------------------| |----------------------------------------------------------------.
- KC_ESC, KC_GRAVE, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC, KC_BSPC,
- //|--------+---------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+----------|
- RGB_MODE_FORWARD, 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,
- //|--------+---------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+----------|
- RGB_MODE_GRADIENT, 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,
- //|--------+---------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+----------|
- RGB_MODE_XMAS, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_RSFT, KC_RSFT,
- //|--------+---------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+----------|
- RGB_TOG, KC_LCTL, KC_LALT, KC_LALT, KC_SPC, KC_SPC, KC_SPC, KC_SPC, KC_SPC, KC_RALT, KC_RCTL, MO(_FN)
- //`----------------------------------------------------------------| |--------------------------------------------'
- ),
-
- [_RAISE] = LAYOUT_all(
- //,------------------------------------------------------------------------| |----------------------------------------------------------------.
- KC_ESC, KC_GRAVE, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC, KC_BSPC,
- //|--------+---------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+----------|
- RGB_MODE_FORWARD, 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,
- //|--------+---------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+----------|
- RGB_MODE_GRADIENT, 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,
- //|--------+---------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+----------|
- RGB_MODE_XMAS, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_RSFT, KC_RSFT,
- //|--------+---------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+----------|
- RGB_TOG, KC_LCTL, KC_LALT, KC_LALT, KC_SPC, KC_SPC, KC_SPC, KC_SPC, KC_SPC, KC_RALT, KC_RCTL, MO(_FN)
- //`----------------------------------------------------------------| |--------------------------------------------'
- ),
-
- [_ADJUST] = LAYOUT_all( /* Base */
- //,------------------------------------------------------------------------| |----------------------------------------------------------------.
- XXXXXXX, TG(_ADJUST), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, QK_BOOT, XXXXXXX,
- //|--------+---------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+----------|
- XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_RST, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
- //|--------+---------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+----------|
- XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_TOG, RGB_MOD, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
- //|--------+---------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+----------|
- XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_VAD, RGB_VAI, RGB_HUD, RGB_HUI, RGB_SAD, RGB_SAI, XXXXXXX, XXXXXXX, XXXXXXX,
- //|--------+---------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+----------|
- XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX
- //`----------------------------------------------------------------| |--------------------------------------------'
- )
-};
-
-
-//A description for expressing the layer position in LED mode.
-layer_state_t layer_state_set_user(layer_state_t state) {
- state = update_tri_layer_state(state, _RAISE, _LOWER, _ADJUST);
-#ifdef RGBLIGHT_ENABLE
- switch (get_highest_layer(state)) {
- case _FLOCK:
- rgblight_sethsv_at(HSV_YELLOW, 0);
- break;
- case _FN:
- rgblight_sethsv_at(HSV_GREEN, 0);
- break;
- case _LOWER:
- rgblight_sethsv_at(HSV_BLUE, 0);
- break;
- case _RAISE:
- rgblight_sethsv_at(HSV_RED, 0);
- break;
- case _ADJUST:
- rgblight_sethsv_at(HSV_PURPLE, 0);
- break;
- default: // for any other layers, or the default layer
- rgblight_sethsv_at( 0, 0, 0, 0);
- break;
- }
- rgblight_set_effect_range( 1, 4);
-#endif
-return state;
-}
-
-int RGB_current_mode;
-bool process_record_user(uint16_t keycode, keyrecord_t *record) {
- bool result = false;
- switch (keycode) {
- #ifdef RGBLIGHT_ENABLE
- case RGB_MOD:
- if (record->event.pressed) {
- rgblight_mode(RGB_current_mode);
- rgblight_step();
- RGB_current_mode = rgblight_config.mode;
- }
- break;
- case RGB_RST:
- if (record->event.pressed) {
- eeconfig_update_rgblight_default();
- rgblight_enable();
- RGB_current_mode = rgblight_config.mode;
- }
- break;
- #endif
- default:
- result = true;
- break;
- }
-
- return result;
-}
diff --git a/keyboards/basekeys/slice/rev1/keymaps/2moons/rules.mk b/keyboards/basekeys/slice/rev1/keymaps/2moons/rules.mk
deleted file mode 100644
index e5ddcae8d927..000000000000
--- a/keyboards/basekeys/slice/rev1/keymaps/2moons/rules.mk
+++ /dev/null
@@ -1 +0,0 @@
-TAP_DANCE_ENABLE = yes
diff --git a/keyboards/bastardkb/charybdis/3x5/blackpill/info.json b/keyboards/bastardkb/charybdis/3x5/blackpill/info.json
index 89e181b8f93d..a20b2ce636ab 100644
--- a/keyboards/bastardkb/charybdis/3x5/blackpill/info.json
+++ b/keyboards/bastardkb/charybdis/3x5/blackpill/info.json
@@ -3,6 +3,9 @@
"usb": {
"device_version": "1.0.0"
},
+ "eeprom": {
+ "driver": "spi"
+ },
"rgb_matrix": {
"driver": "ws2812"
},
diff --git a/keyboards/bastardkb/charybdis/3x5/blackpill/rules.mk b/keyboards/bastardkb/charybdis/3x5/blackpill/rules.mk
index 9cc216bb71fb..4bd570ddd8c3 100644
--- a/keyboards/bastardkb/charybdis/3x5/blackpill/rules.mk
+++ b/keyboards/bastardkb/charybdis/3x5/blackpill/rules.mk
@@ -23,5 +23,4 @@ POINTING_DEVICE_DRIVER = pmw3360
MOUSE_SHARED_EP = no # Unify multiple HID interfaces into a single Endpoint
KEYBOARD_SHARED_EP = yes
-EEPROM_DRIVER = spi
SERIAL_DRIVER = usart
diff --git a/keyboards/bastardkb/charybdis/3x5/keymaps/bstiq/config.h b/keyboards/bastardkb/charybdis/3x5/keymaps/bstiq/config.h
deleted file mode 100644
index d7b6d01bcea0..000000000000
--- a/keyboards/bastardkb/charybdis/3x5/keymaps/bstiq/config.h
+++ /dev/null
@@ -1,155 +0,0 @@
-/**
- * Copyright 2021 Quentin LEBASTARD
- * Copyright 2021 Charly Delay (@0xcharly)
- *
- * 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 .
- */
-#pragma once
-
-#ifdef VIA_ENABLE
-/* Via configuration. */
-# define DYNAMIC_KEYMAP_LAYER_COUNT 8
-#endif // VIA_ENABLE
-
-#ifndef __arm__
-/* Disable unused features. */
-# define NO_ACTION_ONESHOT
-#endif // __arm__
-
-/**
- * Configure the global tapping term (default: 200ms).
- * If you have a lot of accidental mod activations, crank up the tapping term.
- *
- * See docs.qmk.fm/using-qmk/software-features/tap_hold#tapping-term
- */
-#ifndef TAPPING_TERM
-# define TAPPING_TERM 160
-#endif // TAPPING_TERM
-
-/**
- * Enable rapid switch from tap to hold. Disable auto-repeat when pressing key
- * twice, except for one-shot keys.
- *
- * See docs.qmk.fm/using-qmk/software-features/tap_hold#tapping-force-hold
- */
-#define QUICK_TAP_TERM 0
-
-/*
- * Tap-or-Hold decision modes.
- *
- * Note that the following flags behave differently when combined (ie. when 2 or
- * more are enabled).
- *
- * See bit.ly/tap-or-hold for a visual explanation of the following tap-or-hold
- * decision modes.
- */
-
-/**
- * Faster tap-hold trigger.
- *
- * Without `PERMISSIVE_HOLD`, within `TAPPING_TERM`:
- * Mod(a)🠗 e🠗 e🠕 Mod(a)🠕 ➞ ae
- * With `PERMISSIVE_HOLD`, within `TAPPING_TERM`:
- * Mod(a)🠗 e🠗 e🠕 Mod(a)🠕 ➞ Mod+e
- *
- * See docs.qmk.fm/using-qmk/software-features/tap_hold#permissive-hold
- */
-#define PERMISSIVE_HOLD
-
-/** Charybdis-specific features. */
-
-#ifdef POINTING_DEVICE_ENABLE
-// Automatically enable the pointer layer when moving the trackball. See also:
-// - `CHARYBDIS_AUTO_POINTER_LAYER_TRIGGER_TIMEOUT_MS`
-// - `CHARYBDIS_AUTO_POINTER_LAYER_TRIGGER_THRESHOLD`
-// #define CHARYBDIS_AUTO_POINTER_LAYER_TRIGGER_ENABLE
-
-// Flip horizontal direction for drag-scroll.
-# define CHARYBDIS_DRAGSCROLL_REVERSE_X
-// #define CHARYBDIS_DRAGSCROLL_REVERSE_Y
-#endif // POINTING_DEVICE_ENABLE
-
-/** RGB Matrix. */
-
-#ifdef RGB_MATRIX_ENABLE
-# ifdef __arm__
-// Enable all animations on ARM boards since they have plenty of memory
-// available for it.
-# define ENABLE_RGB_MATRIX_ALPHAS_MODS
-# define ENABLE_RGB_MATRIX_GRADIENT_UP_DOWN
-# define ENABLE_RGB_MATRIX_GRADIENT_LEFT_RIGHT
-# define ENABLE_RGB_MATRIX_BREATHING
-# define ENABLE_RGB_MATRIX_BAND_SAT
-# define ENABLE_RGB_MATRIX_BAND_VAL
-# define ENABLE_RGB_MATRIX_BAND_PINWHEEL_SAT
-# define ENABLE_RGB_MATRIX_BAND_PINWHEEL_VAL
-# define ENABLE_RGB_MATRIX_BAND_SPIRAL_SAT
-# define ENABLE_RGB_MATRIX_BAND_SPIRAL_VAL
-# define ENABLE_RGB_MATRIX_CYCLE_ALL
-# define ENABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT
-# define ENABLE_RGB_MATRIX_CYCLE_UP_DOWN
-# define ENABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON
-# define ENABLE_RGB_MATRIX_CYCLE_OUT_IN
-# define ENABLE_RGB_MATRIX_CYCLE_OUT_IN_DUAL
-# define ENABLE_RGB_MATRIX_CYCLE_PINWHEEL
-# define ENABLE_RGB_MATRIX_CYCLE_SPIRAL
-# define ENABLE_RGB_MATRIX_DUAL_BEACON
-# define ENABLE_RGB_MATRIX_RAINBOW_BEACON
-# define ENABLE_RGB_MATRIX_RAINBOW_PINWHEELS
-# define ENABLE_RGB_MATRIX_RAINDROPS
-# define ENABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS
-# define ENABLE_RGB_MATRIX_HUE_BREATHING
-# define ENABLE_RGB_MATRIX_HUE_PENDULUM
-# define ENABLE_RGB_MATRIX_HUE_WAVE
-# define ENABLE_RGB_MATRIX_TYPING_HEATMAP
-# define ENABLE_RGB_MATRIX_DIGITAL_RAIN
-# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE
-# define ENABLE_RGB_MATRIX_SOLID_REACTIVE
-# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE
-# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE
-# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS
-# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTICROSS
-# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS
-# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS
-# define ENABLE_RGB_MATRIX_SPLASH
-# define ENABLE_RGB_MATRIX_MULTISPLASH
-# define ENABLE_RGB_MATRIX_SOLID_SPLASH
-# define ENABLE_RGB_MATRIX_SOLID_MULTISPLASH
-# else
-// Disable control of RGB matrix by keycodes (must use firmware implementation
-// to control the feature).
-# define RGB_MATRIX_DISABLE_KEYCODES
-# endif
-
-// Limit maximum brightness to keep power consumption reasonable, and avoid
-// disconnects.
-# undef RGB_MATRIX_MAXIMUM_BRIGHTNESS
-# define RGB_MATRIX_MAXIMUM_BRIGHTNESS 64
-
-// Rainbow swirl as startup mode.
-# define ENABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT
-# define RGB_MATRIX_DEFAULT_MODE RGB_MATRIX_CYCLE_LEFT_RIGHT
-
-// Slow swirl at startup.
-# undef RGB_MATRIX_DEFAULT_SPD
-# define RGB_MATRIX_DEFAULT_SPD 32
-
-// Startup values.
-# undef RGB_MATRIX_DEFAULT_HUE
-# define RGB_MATRIX_DEFAULT_HUE 0
-# undef RGB_MATRIX_DEFAULT_SAT
-# define RGB_MATRIX_DEFAULT_SAT 255
-# undef RGB_MATRIX_DEFAULT_VAL
-# define RGB_MATRIX_DEFAULT_VAL RGB_MATRIX_MAXIMUM_BRIGHTNESS
-#endif // RGB_MATRIX_ENABLE
diff --git a/keyboards/bastardkb/charybdis/3x5/keymaps/bstiq/keymap.c b/keyboards/bastardkb/charybdis/3x5/keymaps/bstiq/keymap.c
deleted file mode 100644
index 8f02227c0182..000000000000
--- a/keyboards/bastardkb/charybdis/3x5/keymaps/bstiq/keymap.c
+++ /dev/null
@@ -1,224 +0,0 @@
-/**
- * Copyright 2021 Quentin LEBASTARD
- * Copyright 2021 Charly Delay (@0xcharly)
- *
- * 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 .
- */
-#include QMK_KEYBOARD_H
-
-enum charybdis_keymap_bstiq_layers {
- LAYER_BASE = 0,
- LAYER_MBO,
- LAYER_MEDIA,
- LAYER_NAV,
- LAYER_MOUSE,
- LAYER_SYM,
- LAYER_NUM,
- LAYER_FUN,
-};
-
-// Automatically enable sniping when the mouse layer is on.
-#define CHARYBDIS_AUTO_SNIPING_ON_LAYER LAYER_MOUSE
-
-#define BSP_NAV LT(LAYER_NAV, KC_BSPC)
-#define ENT_MBO LT(LAYER_MBO, KC_ENT)
-#define TAB_MED LT(LAYER_MEDIA, KC_TAB)
-#define ESC_SYM LT(LAYER_SYM, KC_ESC)
-#define SPC_NUM LT(LAYER_NUM, KC_SPC)
-#define MOUSE(KC) LT(LAYER_MOUSE, KC)
-
-#define USR_RDO KC_AGAIN
-#define USR_PST S(KC_INS)
-#define USR_CPY C(KC_INS)
-#define USR_CUT S(KC_DEL)
-#define USR_UND KC_UNDO
-
-#define MS_L KC_MS_LEFT
-#define MS_R KC_MS_RIGHT
-#define MS_D KC_MS_DOWN
-#define MS_U KC_MS_UP
-
-#define WH_L KC_MS_WH_LEFT
-#define WH_R KC_MS_WH_RIGHT
-#define WH_D KC_MS_WH_DOWN
-#define WH_U KC_MS_WH_UP
-
-// clang-format off
-/** Convenience macro. */
-#define _KC_LAYOUT_wrapper( \
- k00, 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, \
- ...) \
- KC_##k00, KC_##k01, KC_##k02, KC_##k03, KC_##k04, KC_##k05, KC_##k06, KC_##k07, KC_##k08, KC_##k09, \
- KC_##k10, KC_##k11, KC_##k12, KC_##k13, KC_##k14, KC_##k15, KC_##k16, KC_##k17, KC_##k18, KC_##k19, \
- KC_##k20, KC_##k21, KC_##k22, KC_##k23, KC_##k24, KC_##k25, KC_##k26, KC_##k27, KC_##k28, KC_##k29, \
- __VA_ARGS__
-#define KC_LAYOUT_wrapper(...) _KC_LAYOUT_wrapper(__VA_ARGS__)
-
-/** Base layer with BÉPO layout. */
-#define LAYOUT_LAYER_BASE_BEPO KC_LAYOUT_wrapper( \
- B, Z, P, O, QUOT, DOT, V, D, L, J, \
- A, U, I, E, COMM, C, T, S, R, N, \
- W, Y, X, SLSH, K, M, Q, G, H, F, \
- BSP_NAV, ENT_MBO, TAB_MED, ESC_SYM, SPC_NUM)
-
-/** Convenience key shorthands. */
-#define U_NA KC_NO // Present but not available for use.
-#define U_NU KC_NO // Available but not used.
-
-/** Convenience row shorthands. */
-#define __________________RESET_L__________________ QK_BOOT, U_NA, U_NA, U_NA, U_NA
-#define __________________RESET_R__________________ U_NA, U_NA, U_NA, U_NA, QK_BOOT
-#define ______________HOME_ROW_GASC_L______________ KC_LGUI, KC_LALT, KC_LSFT, KC_LCTL, U_NA
-#define ______________HOME_ROW_ALGR_L______________ U_NA, KC_ALGR, U_NA, U_NA, U_NA
-#define ______________HOME_ROW_GASC_R______________ U_NA, KC_LCTL, KC_LSFT, KC_LALT, KC_LGUI
-#define ______________HOME_ROW_ALGR_R______________ U_NA, U_NA, U_NA, KC_ALGR, U_NA
-
-/** Layers. */
-
-// Buttons.
-#define LAYOUT_LAYER_MBO \
- __________________RESET_L__________________, USR_RDO, USR_PST, USR_CPY, USR_CUT, USR_UND, \
- ______________HOME_ROW_GASC_L______________, KC_CAPS, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, \
- KC_BTN3, KC_ALGR, KC_BTN2, KC_BTN1, U_NA, KC_INS, KC_HOME, KC_PGDN, KC_PGUP, KC_END, \
- U_NA, U_NA, U_NA, KC_ENT, KC_DEL
-
-// Media.
-#define LAYOUT_LAYER_MEDIA \
- __________________RESET_L__________________, USR_RDO, USR_PST, USR_CPY, USR_CUT, USR_UND, \
- ______________HOME_ROW_GASC_L______________, U_NU, MS_L, MS_D, MS_U, MS_R, \
- ______________HOME_ROW_ALGR_L______________, U_NU, WH_L, WH_D, WH_U, WH_R, \
- U_NA, U_NA, U_NA, KC_BTN1, KC_BTN3
-
-// Navigation.
-#define LAYOUT_LAYER_NAV \
- __________________RESET_L__________________, RGB_TOG, RGB_MOD, RGB_HUI, RGB_SAI, RGB_VAI, \
- ______________HOME_ROW_GASC_L______________, U_NU, KC_MPRV, KC_VOLD, KC_VOLU, KC_MNXT, \
- ______________HOME_ROW_ALGR_L______________, U_NU, U_NU, U_NU, U_NU, U_NU, \
- U_NA, U_NA, U_NA, KC_MSTP, KC_MPLY
-
-// Mouse.
-#define LAYOUT_LAYER_MOUSE \
- S_D_MOD, USR_PST, USR_CPY, USR_CUT, USR_UND, USR_RDO, USR_PST, USR_CPY, USR_CUT, USR_UND, \
- DPI_MOD, DRGSCRL, KC_LSFT, KC_LCTL, _______, U_NU, MS_L, MS_D, MS_U, MS_R, \
- USR_RDO, USR_PST, USR_CPY, USR_CUT, USR_UND, U_NU, WH_L, WH_D, WH_U, WH_R, \
- KC_BTN2, KC_BTN1, KC_BTN3, KC_BTN1, KC_BTN3
-
-// Symbols.
-#define LAYOUT_LAYER_SYM \
- KC_LCBR, KC_AMPR, KC_ASTR, KC_LPRN, KC_RCBR, __________________RESET_R__________________, \
- KC_COLN, KC_DLR, KC_PERC, KC_CIRC, KC_PLUS, ______________HOME_ROW_GASC_R______________, \
- KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_PIPE, ______________HOME_ROW_ALGR_R______________, \
- KC_LPRN, KC_RPRN, KC_UNDS, U_NA, U_NA
-
-// Numerals.
-#define LAYOUT_LAYER_NUM \
- KC_LBRC, KC_7, KC_8, KC_9, KC_RBRC, __________________RESET_R__________________, \
- KC_SCLN, KC_4, KC_5, KC_6, KC_EQL, ______________HOME_ROW_GASC_R______________, \
- KC_GRV, KC_1, KC_2, KC_3, KC_BSLS, ______________HOME_ROW_ALGR_R______________, \
- KC_DOT, KC_0, KC_MINS, U_NA, U_NA
-
-// Function keys.
-#define LAYOUT_LAYER_FUN \
- KC_F12, KC_F7, KC_F8, KC_F9, KC_PSCR, __________________RESET_R__________________, \
- KC_F11, KC_F4, KC_F5, KC_F6, KC_SCRL, ______________HOME_ROW_GASC_R______________, \
- KC_F10, KC_F1, KC_F2, KC_F3, KC_PAUS, ______________HOME_ROW_ALGR_R______________,\
- KC_APP, KC_SPC, KC_TAB, U_NA, U_NA
-
-/**
- * Add Home Row mod to a layout.
- *
- * Expects a 10-key per row layout. Adds support for GASC (Gui, Alt, Shift, Ctl)
- * home row. The layout passed in parameter must contain at least 20 keycodes.
- *
- * This is meant to be used with `LAYOUT_LAYER_BASE_BEPO` defined above, eg.:
- *
- * HOME_ROW_MOD_GASC(LAYOUT_LAYER_BASE_BEPO)
- */
-#define _HOME_ROW_MOD_GASC( \
- L00, L01, L02, L03, L04, R05, R06, R07, R08, R09, \
- L10, L11, L12, L13, L14, R15, R16, R17, R18, R19, \
- ...) \
- L00, L01, L02, L03, L04, \
- R05, R06, R07, R08, R09, \
- LGUI_T(L10), LALT_T(L11), LSFT_T(L12), LCTL_T(L13), L14, \
- R15, RCTL_T(R16), RSFT_T(R17), LALT_T(R18), RGUI_T(R19), \
- __VA_ARGS__
-#define HOME_ROW_MOD_GASC(...) _HOME_ROW_MOD_GASC(__VA_ARGS__)
-
-/**
- * Add mouse layer keys to a layout.
- *
- * Expects a 10-key per row layout. The layout passed in parameter must contain
- * at least 30 keycodes.
- *
- * This is meant to be used with `LAYOUT_LAYER_BASE_BEPO` defined above, eg.:
- *
- * MOUSE_MOD(LAYOUT_LAYER_BASE_BEPO)
- */
-#define _MOUSE_MOD( \
- L00, L01, L02, L03, L04, R05, R06, R07, R08, R09, \
- L10, L11, L12, L13, L14, R15, R16, R17, R18, R19, \
- L20, L21, L22, L23, L24, R25, R26, R27, R28, R29, \
- ...) \
- L00, L01, L02, L03, L04, \
- R05, R06, R07, R08, R09, \
- L10, L11, L12, L13, L14, \
- R15, R16, R17, R18, R19, \
- MOUSE(L20), L21, L22, L23, L24, \
- R25, R26, R27, R28, MOUSE(R29), \
- __VA_ARGS__
-#define MOUSE_MOD(...) _MOUSE_MOD(__VA_ARGS__)
-
-#define LAYOUT_wrapper(...) LAYOUT(__VA_ARGS__)
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [LAYER_BASE] = LAYOUT_wrapper(
- MOUSE_MOD(HOME_ROW_MOD_GASC(LAYOUT_LAYER_BASE_BEPO))
- ),
- [LAYER_MBO] = LAYOUT_wrapper(LAYOUT_LAYER_MBO),
- [LAYER_MEDIA] = LAYOUT_wrapper(LAYOUT_LAYER_MEDIA),
- [LAYER_NAV] = LAYOUT_wrapper(LAYOUT_LAYER_NAV),
- [LAYER_MOUSE] = LAYOUT_wrapper(LAYOUT_LAYER_MOUSE),
- [LAYER_SYM] = LAYOUT_wrapper(LAYOUT_LAYER_SYM),
- [LAYER_NUM] = LAYOUT_wrapper(LAYOUT_LAYER_NUM),
- [LAYER_FUN] = LAYOUT_wrapper(LAYOUT_LAYER_FUN),
-};
-// clang-format on
-
-#if defined(POINTING_DEVICE_ENABLE) && defined(CHARYBDIS_AUTO_SNIPING_ON_LAYER)
-layer_state_t layer_state_set_kb(layer_state_t state) {
- state = layer_state_set_user(state);
- charybdis_set_pointer_sniping_enabled(layer_state_cmp(state, CHARYBDIS_AUTO_SNIPING_ON_LAYER));
- return state;
-}
-#endif // POINTING_DEVICE_ENABLE && CHARYBDIS_AUTO_SNIPING_ON_LAYER
-
-#ifdef RGB_MATRIX_ENABLE
-// Forward-declare this helper function since it is defined in rgb_matrix.c.
-void rgb_matrix_update_pwm_buffers(void);
-#endif
-
-void shutdown_user(void) {
-#ifdef RGBLIGHT_ENABLE
- rgblight_enable_noeeprom();
- rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_LIGHT);
- rgblight_setrgb(RGB_RED);
-#endif // RGBLIGHT_ENABLE
-#ifdef RGB_MATRIX_ENABLE
- rgb_matrix_set_color_all(RGB_RED);
- rgb_matrix_update_pwm_buffers();
-#endif // RGB_MATRIX_ENABLE
-}
diff --git a/keyboards/bastardkb/charybdis/3x5/keymaps/bstiq/readme.md b/keyboards/bastardkb/charybdis/3x5/keymaps/bstiq/readme.md
deleted file mode 100644
index 5d9f7fcd5f3d..000000000000
--- a/keyboards/bastardkb/charybdis/3x5/keymaps/bstiq/readme.md
+++ /dev/null
@@ -1,3 +0,0 @@
-# Charybdis (3x5) @bstiq keymap
-
-Inspired from Miryoku, using home-rows.
diff --git a/keyboards/bastardkb/charybdis/3x5/keymaps/bstiq/rules.mk b/keyboards/bastardkb/charybdis/3x5/keymaps/bstiq/rules.mk
deleted file mode 100644
index 5d9106460788..000000000000
--- a/keyboards/bastardkb/charybdis/3x5/keymaps/bstiq/rules.mk
+++ /dev/null
@@ -1,10 +0,0 @@
-ifeq ($(MCU),atmega32u4)
- # Space saving settings.
- TAP_DANCE_ENABLE = no
- COMBO_ENABLE = no
- QMK_SETTINGS = no
-else ifeq ($(MCU),STM32F411)
- EEPROM_DRIVER = vendor
-endif
-
-VIA_ENABLE = yes
diff --git a/keyboards/bastardkb/charybdis/3x5/keymaps/drashna/config.h b/keyboards/bastardkb/charybdis/3x5/keymaps/drashna/config.h
deleted file mode 100644
index 6d24808af2d1..000000000000
--- a/keyboards/bastardkb/charybdis/3x5/keymaps/drashna/config.h
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
-
-Copyright 2021 Quentin LEBASTARD
-
-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 .
-*/
-
-#pragma once
-
-#ifdef KEYBOARD_bastardkb_charybdis_3x5_blackpill
-
-# undef MATRIX_ROW_PINS
-# define MATRIX_ROW_PINS \
- { B12, B13, B14, B15 }
-# undef MATRIX_COL_PINS
-# define MATRIX_COL_PINS \
- { A15, B3, B4, B5, B6 }
-
-# undef MATRIX_ROW_PINS_RIGHT
-# define MATRIX_ROW_PINS_RIGHT \
- { B12, B13, B14, B15 }
-# undef MATRIX_COL_PINS_RIGHT
-# define MATRIX_COL_PINS_RIGHT \
- { A15, B3, B4, B5, B6 }
-
-# define USB_VBUS_PIN B10
-# undef SPLIT_HAND_PIN
-# define SPLIT_HAND_PIN C14 // high = left, low = right
-
-// WS2812 RGB LED strip input and number of LEDs
-# undef WS2812_DI_PIN
-# define WS2812_DI_PIN A1
-# undef RGB_MATRIX_MAXIMUM_BRIGHTNESS
-# define RGB_MATRIX_MAXIMUM_BRIGHTNESS 150
-# define WS2812_PWM_DRIVER PWMD2 // default: PWMD2
-# define WS2812_PWM_CHANNEL 2 // default: 2
-# define WS2812_PWM_PAL_MODE 1 // Pin "alternate function", see the respective datasheet for the appropriate values for your MCU. default: 2
-# define WS2812_EXTERNAL_PULLUP
-//#define WS2812_PWM_COMPLEMENTARY_OUTPUT // Define for a complementary timer output (TIMx_CHyN); omit for a normal timer output (TIMx_CHy).
-# undef WS2812_DMA_STREAM
-# define WS2812_DMA_STREAM STM32_DMA1_STREAM7 // DMA Stream for TIMx_UP, see the respective reference manual for the appropriate values for your MCU.
-# define WS2812_DMA_CHANNEL 3 // DMA Channel for TIMx_UP, see the respective reference manual for the appropriate values for your MCU.
-# define WS2812_PWM_TARGET_PERIOD 800000
-
-# define DEBUG_LED_PIN C13
-
-/* Audio config */
-# define AUDIO_PIN B1
-# define AUDIO_PWM_DRIVER PWMD3
-# define AUDIO_PWM_CHANNEL 4
-# define AUDIO_PWM_PAL_MODE 2
-
-/* serial.c configuration for split keyboard */
-# undef SOFT_SERIAL_PIN
-# define SERIAL_USART_FULL_DUPLEX // Enable full duplex operation mode.
-# undef SERIAL_USART_TX_PIN
-# define SERIAL_USART_TX_PIN A2
-# undef SERIAL_USART_RX_PIN
-# define SERIAL_USART_RX_PIN A3
-# define SERIAL_USART_DRIVER SD2
-# define SERIAL_USART_TX_PAL_MODE 7 // Pin "alternate function", see the respective datasheet for the appropriate values for your MCU. default: 7
-# define SERIAL_USART_RX_PAL_MODE 7 // Pin "alternate function", see the respective datasheet for the appropriate values for your MCU. default: 7
-# define SERIAL_USART_TIMEOUT 100 // USART driver timeout. default 100
-# define SERIAL_USART_SPEED 921600
-// #define SERIAL_USART_PIN_SWAP // swap RX and TX pins on master
-// To use the highest possible baudrate (3.75Mbit/s) uncomment the following
-// line, this can result in dropped communications so lower the speed if there
-// are many timeouts.
-// #define SERIAL_USART_SPEED (STM32_PCLK2 >> 4)
-
-# define CRC8_USE_TABLE
-# define CRC8_OPTIMIZE_SPEED
-
-/* spi config for eeprom and pmw3360 sensor */
-# define SPI_DRIVER SPID1
-# define SPI_SCK_PIN A5
-# define SPI_SCK_PAL_MODE 5
-# define SPI_MOSI_PIN A7
-# define SPI_MOSI_PAL_MODE 5
-# define SPI_MISO_PIN A6
-# define SPI_MISO_PAL_MODE 5
-
-/* eeprom config */
-# define EXTERNAL_EEPROM_SPI_SLAVE_SELECT_PIN A4
-# define EXTERNAL_EEPROM_SPI_CLOCK_DIVISOR 64
-// #define EXTERNAL_EEPROM_BYTE_COUNT 8196
-// #define EXTERNAL_EEPROM_PAGE_SIZE 32
-// #define EXTERNAL_EEPROM_ADDRESS_SIZE 2
-
-/* pmw3360 config */
-# undef PMW33XX_CS_PIN
-# define PMW33XX_CS_PIN B0
-#endif
-
-#define CHARYBDIS_MINIMUM_DEFAULT_DPI 1200
-#define CHARYBDIS_DEFAULT_DPI_CONFIG_STEP 400
-#define CHARYBDIS_MINIMUM_SNIPING_DPI 200
-#define CHARYBDIS_SNIPING_DPI_CONFIG_STEP 100
diff --git a/keyboards/bastardkb/charybdis/3x5/keymaps/drashna/halconf.h b/keyboards/bastardkb/charybdis/3x5/keymaps/drashna/halconf.h
deleted file mode 100644
index 3b254172b483..000000000000
--- a/keyboards/bastardkb/charybdis/3x5/keymaps/drashna/halconf.h
+++ /dev/null
@@ -1,27 +0,0 @@
-/* Copyright 2020 Nick Brassel (tzarc)
- *
- * 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 3 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 .
- */
-#pragma once
-
-#if defined(KEYBOARD_bastardkb_charybdis_3x5_blackpill)
-# define HAL_USE_PWM TRUE
-# define HAL_USE_SERIAL TRUE
-# define HAL_USE_I2C TRUE
-# define HAL_USE_SPI TRUE
-# define SPI_USE_WAIT TRUE
-# define SPI_SELECT_MODE SPI_SELECT_MODE_PAD
-#endif
-
-#include_next
diff --git a/keyboards/bastardkb/charybdis/3x5/keymaps/drashna/keymap.c b/keyboards/bastardkb/charybdis/3x5/keymaps/drashna/keymap.c
deleted file mode 100644
index e458a8437334..000000000000
--- a/keyboards/bastardkb/charybdis/3x5/keymaps/drashna/keymap.c
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- * Copyright 2021 Quentin LEBASTARD
- * Copyright 2021 Drashna Jael're @drashna
- *
- * 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 .
- */
-
-#include "drashna.h"
-
-#define LAYOUT_charybdis_3x5_wrapper(...) LAYOUT_charybdis_3x5(__VA_ARGS__)
-#define LAYOUT_charybdis_3x5_base( \
- K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, \
- K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, \
- K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A \
- ) \
- LAYOUT_charybdis_3x5 ( \
- K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, \
- ALT_T(K11), K12, K13, K14, GUI_T(K15), LGUI_T(K16), K17, K18, K19, LALT_T(K1A), \
- CTL_T(K21), K22, K23, K24, K25, K26, K27, K28, K29, RCTL_T(K2A), \
- LSFT_T(KC_GRV), KC_SPC, BK_LWER, DL_RAIS, RSFT_T(KC_ENT) \
- )
-#define LAYOUT_charybdis_3x5_base_wrapper(...) LAYOUT_charybdis_3x5_base(__VA_ARGS__)
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-
- [_DEFAULT_LAYER_1] = LAYOUT_charybdis_3x5_base_wrapper(
- _________________QWERTY_L1_________________, _________________QWERTY_R1_________________,
- _________________QWERTY_L2_________________, _________________QWERTY_R2_________________,
- _________________QWERTY_L3_________________, _________________QWERTY_R3_________________
- ),
-
- [_DEFAULT_LAYER_2] = LAYOUT_charybdis_3x5_base_wrapper(
- ______________COLEMAK_MOD_DH_L1____________, ______________COLEMAK_MOD_DH_R1____________,
- ______________COLEMAK_MOD_DH_L2____________, ______________COLEMAK_MOD_DH_R2____________,
- ______________COLEMAK_MOD_DH_L3____________, ______________COLEMAK_MOD_DH_R3____________
- ),
- [_DEFAULT_LAYER_3] = LAYOUT_charybdis_3x5_base_wrapper(
- _________________COLEMAK_L1________________, _________________COLEMAK_R1________________,
- _________________COLEMAK_L2________________, _________________COLEMAK_R2________________,
- _________________COLEMAK_L3________________, _________________COLEMAK_R3________________
- ),
-
- [_DEFAULT_LAYER_4] = LAYOUT_charybdis_3x5_base_wrapper(
- _________________DVORAK_L1_________________, _________________DVORAK_R1_________________,
- _________________DVORAK_L2_________________, _________________DVORAK_R2_________________,
- _________________DVORAK_L3_________________, _________________DVORAK_R3_________________
- ),
-
- [_MOUSE] = LAYOUT_charybdis_3x5(
- _______, _______, _______, _______, _______, KC_WH_U, DPI_RMOD,DPI_MOD, S_D_RMOD,S_D_MOD,
- _______, _______, _______, _______, _______, KC_WH_D, KC_BTN1, KC_BTN3, KC_BTN2, KC_BTN6,
- _______, _______, _______, _______, _______, KC_BTN7, KC_BTN4, KC_BTN5, KC_BTN8, _______,
- _______, SNIPING, _______, _______, _______
- ),
- [_LOWER] = LAYOUT_charybdis_3x5_wrapper(
- _________________LOWER_L1__________________, _________________LOWER_R1__________________,
- _________________LOWER_L2__________________, _________________LOWER_R2__________________,
- _________________LOWER_L3__________________, _________________LOWER_R3__________________,
- _______, _______, _______, _______, AUTO_CTN
- ),
- [_RAISE] = LAYOUT_charybdis_3x5_wrapper(
- _________________RAISE_L1__________________, _________________RAISE_R1__________________,
- _________________RAISE_L2__________________, _________________RAISE_R2__________________,
- _________________RAISE_L3__________________, _________________RAISE_R3__________________,
- QK_RBT, _______, _______, _______, _______
- ),
- [_ADJUST] = LAYOUT_charybdis_3x5_wrapper(
- _________________ADJUST_L1_________________, _________________ADJUST_R1_________________,
- _________________ADJUST_L2_________________, _________________ADJUST_R2_________________,
- _________________ADJUST_L3_________________, _________________ADJUST_R3_________________,
- EE_CLR, KC_NUKE, _______, _______, QK_BOOT
- ),
-};
diff --git a/keyboards/bastardkb/charybdis/3x5/keymaps/drashna/mcuconf.h b/keyboards/bastardkb/charybdis/3x5/keymaps/drashna/mcuconf.h
deleted file mode 100644
index 3defeed4dd64..000000000000
--- a/keyboards/bastardkb/charybdis/3x5/keymaps/drashna/mcuconf.h
+++ /dev/null
@@ -1,44 +0,0 @@
-/* Copyright 2020 Nick Brassel (tzarc)
- *
- * 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 3 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 .
- */
-
-#pragma once
-
-#include_next
-
-#if defined(KEYBOARD_bastardkb_charybdis_3x5_blackpill)
-# undef STM32_I2C_USE_I2C1
-# define STM32_I2C_USE_I2C1 TRUE
-
-// #undef STM32_I2C_I2C1_RX_DMA_STREAM
-// #define STM32_I2C_I2C1_RX_DMA_STREAM STM32_DMA_STREAM_ID(1, 0)
-# undef STM32_I2C_I2C1_TX_DMA_STREAM
-# define STM32_I2C_I2C1_TX_DMA_STREAM STM32_DMA_STREAM_ID(1, 1)
-
-# undef STM32_PWM_USE_TIM2
-# define STM32_PWM_USE_TIM2 TRUE
-
-# undef STM32_PWM_USE_TIM3
-# define STM32_PWM_USE_TIM3 TRUE
-
-# undef STM32_SPI_USE_SPI1
-# define STM32_SPI_USE_SPI1 TRUE
-
-# undef STM32_SERIAL_USE_USART2
-# define STM32_SERIAL_USE_USART2 TRUE
-
-# undef STM32_ST_USE_TIMER
-# define STM32_ST_USE_TIMER 5
-#endif
diff --git a/keyboards/bastardkb/charybdis/3x5/keymaps/drashna/rules.mk b/keyboards/bastardkb/charybdis/3x5/keymaps/drashna/rules.mk
deleted file mode 100644
index 029b4a498b30..000000000000
--- a/keyboards/bastardkb/charybdis/3x5/keymaps/drashna/rules.mk
+++ /dev/null
@@ -1,43 +0,0 @@
-RGB_MATRIX_ENABLE = no
-CUSTOM_UNICODE_ENABLE = no
-CUSTOM_POINTING_DEVICE = no
-CUSTOM_SPLIT_TRANSPORT_SYNC = no
-
-
-ifeq ($(strip $(KEYBOARD)), bastardkb/charybdis/3x5/blackpill)
- # Bootloader selection
- BOOTLOADER := tinyuf2
-
- LTO_ENABLE := no
-
- AUDIO_SUPPORTED = yes
- AUDIO_ENABLE = yes
- AUDIO_DRIVER = pwm_hardware
-
- OVERLOAD_FEATURES = yes
-endif
-
-ifeq ($(strip $(KEYBOARD)), bastardkb/charybdis/3x5/v2/stemcell)
- OVERLOAD_FEATURES = yes
-endif
-ifeq ($(strip $(KEYBOARD)), bastardkb/charybdis/3x5/v2/splinky)
- OVERLOAD_FEATURES = yes
-endif
-
-
-ifeq ($(strip $(OVERLOAD_FEATURES)), yes)
- BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite
- KEYBOARD_SHARED_EP = yes
- MOUSE_SHARED_EP = yes
-
- MOUSEKEY_ENABLE = yes
- NKRO_ENABLE = yes
- CONSOLE_ENABLE = yes
- RGB_MATRIX_ENABLE = yes
-
- AUTOCORRECT_ENABLE = yes
-
- CUSTOM_UNICODE_ENABLE = yes
- CUSTOM_POINTING_DEVICE = yes
- CUSTOM_SPLIT_TRANSPORT_SYNC = yes
-endif
diff --git a/keyboards/bastardkb/charybdis/3x5/keymaps/manna-harbour_miryoku/config.h b/keyboards/bastardkb/charybdis/3x5/keymaps/manna-harbour_miryoku/config.h
deleted file mode 100644
index 935444af1b75..000000000000
--- a/keyboards/bastardkb/charybdis/3x5/keymaps/manna-harbour_miryoku/config.h
+++ /dev/null
@@ -1,19 +0,0 @@
-// Copyright 2022 Manna Harbour
-// https://github.com/manna-harbour/miryoku
-
-// 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 .
-
-#pragma once
-
-#define LAYOUT_miryoku( \
-K00, 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, \
-N30, N31, K32, K33, K34, K35, K36, K37, N38, N39 \
-) \
-LAYOUT_charybdis_3x5( \
-K00, 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, \
- K32, K33, K34, K35, K36 \
-)
diff --git a/keyboards/bastardkb/charybdis/3x5/keymaps/manna-harbour_miryoku/keymap.c b/keyboards/bastardkb/charybdis/3x5/keymaps/manna-harbour_miryoku/keymap.c
deleted file mode 100644
index dbab7f982043..000000000000
--- a/keyboards/bastardkb/charybdis/3x5/keymaps/manna-harbour_miryoku/keymap.c
+++ /dev/null
@@ -1,4 +0,0 @@
-// Copyright 2019 Manna Harbour
-// https://github.com/manna-harbour/miryoku
-
-// 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 .
diff --git a/keyboards/bastardkb/charybdis/3x5/keymaps/manna-harbour_miryoku/rules.mk b/keyboards/bastardkb/charybdis/3x5/keymaps/manna-harbour_miryoku/rules.mk
deleted file mode 100644
index ef40279cbcd6..000000000000
--- a/keyboards/bastardkb/charybdis/3x5/keymaps/manna-harbour_miryoku/rules.mk
+++ /dev/null
@@ -1,4 +0,0 @@
-# Copyright 2021 Manna Harbour
-# https://github.com/manna-harbour/miryoku
-
-MIRYOKU_KLUDGE_THUMBCOMBOS=yes
diff --git a/keyboards/bastardkb/charybdis/3x5/keymaps/via/keymap.c b/keyboards/bastardkb/charybdis/3x5/keymaps/via/keymap.c
index 4a9154809052..5299444ad390 100644
--- a/keyboards/bastardkb/charybdis/3x5/keymaps/via/keymap.c
+++ b/keyboards/bastardkb/charybdis/3x5/keymaps/via/keymap.c
@@ -255,15 +255,3 @@ layer_state_t layer_state_set_user(layer_state_t state) {
// rgb_matrix.c.
void rgb_matrix_update_pwm_buffers(void);
#endif
-
-void shutdown_user(void) {
-#ifdef RGBLIGHT_ENABLE
- rgblight_enable_noeeprom();
- rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_LIGHT);
- rgblight_setrgb(RGB_RED);
-#endif // RGBLIGHT_ENABLE
-#ifdef RGB_MATRIX_ENABLE
- rgb_matrix_set_color_all(RGB_RED);
- rgb_matrix_update_pwm_buffers();
-#endif // RGB_MATRIX_ENABLE
-}
diff --git a/keyboards/bastardkb/charybdis/3x5/v2/splinky_2/rules.mk b/keyboards/bastardkb/charybdis/3x5/v2/splinky_2/rules.mk
index 80098fbbf670..87a2d912b894 100644
--- a/keyboards/bastardkb/charybdis/3x5/v2/splinky_2/rules.mk
+++ b/keyboards/bastardkb/charybdis/3x5/v2/splinky_2/rules.mk
@@ -1,7 +1,3 @@
-# RP2040-specific options
-ALLOW_WARNINGS = yes
-PICO_INTRINSICS_ENABLED = no # ATM Unsupported by ChibiOS.
-
# Build Options
# change yes to no to disable
#
diff --git a/keyboards/bastardkb/charybdis/3x5/v2/splinky_3/rules.mk b/keyboards/bastardkb/charybdis/3x5/v2/splinky_3/rules.mk
index 80098fbbf670..87a2d912b894 100644
--- a/keyboards/bastardkb/charybdis/3x5/v2/splinky_3/rules.mk
+++ b/keyboards/bastardkb/charybdis/3x5/v2/splinky_3/rules.mk
@@ -1,7 +1,3 @@
-# RP2040-specific options
-ALLOW_WARNINGS = yes
-PICO_INTRINSICS_ENABLED = no # ATM Unsupported by ChibiOS.
-
# Build Options
# change yes to no to disable
#
diff --git a/keyboards/bastardkb/charybdis/3x6/blackpill/info.json b/keyboards/bastardkb/charybdis/3x6/blackpill/info.json
index 5ac7a1cdca00..bda53275f830 100644
--- a/keyboards/bastardkb/charybdis/3x6/blackpill/info.json
+++ b/keyboards/bastardkb/charybdis/3x6/blackpill/info.json
@@ -3,6 +3,9 @@
"usb": {
"device_version": "1.0.0"
},
+ "eeprom": {
+ "driver": "spi"
+ },
"rgb_matrix": {
"driver": "ws2812"
},
diff --git a/keyboards/bastardkb/charybdis/3x6/blackpill/rules.mk b/keyboards/bastardkb/charybdis/3x6/blackpill/rules.mk
index 9cc216bb71fb..4bd570ddd8c3 100644
--- a/keyboards/bastardkb/charybdis/3x6/blackpill/rules.mk
+++ b/keyboards/bastardkb/charybdis/3x6/blackpill/rules.mk
@@ -23,5 +23,4 @@ POINTING_DEVICE_DRIVER = pmw3360
MOUSE_SHARED_EP = no # Unify multiple HID interfaces into a single Endpoint
KEYBOARD_SHARED_EP = yes
-EEPROM_DRIVER = spi
SERIAL_DRIVER = usart
diff --git a/keyboards/bastardkb/charybdis/3x6/keymaps/via/keymap.c b/keyboards/bastardkb/charybdis/3x6/keymaps/via/keymap.c
index fd56cce25dc0..d78ce8b7ffd1 100644
--- a/keyboards/bastardkb/charybdis/3x6/keymaps/via/keymap.c
+++ b/keyboards/bastardkb/charybdis/3x6/keymaps/via/keymap.c
@@ -134,15 +134,3 @@ layer_state_t layer_state_set_user(layer_state_t state) {
// Forward-declare this helper function since it is defined in rgb_matrix.c.
void rgb_matrix_update_pwm_buffers(void);
#endif
-
-void shutdown_user(void) {
-#ifdef RGBLIGHT_ENABLE
- rgblight_enable_noeeprom();
- rgblight_mode_noeeprom(1);
- rgblight_setrgb(RGB_RED);
-#endif // RGBLIGHT_ENABLE
-#ifdef RGB_MATRIX_ENABLE
- rgb_matrix_set_color_all(RGB_RED);
- rgb_matrix_update_pwm_buffers();
-#endif // RGB_MATRIX_ENABLE
-}
diff --git a/keyboards/bastardkb/charybdis/3x6/v2/splinky_2/rules.mk b/keyboards/bastardkb/charybdis/3x6/v2/splinky_2/rules.mk
index 80098fbbf670..87a2d912b894 100644
--- a/keyboards/bastardkb/charybdis/3x6/v2/splinky_2/rules.mk
+++ b/keyboards/bastardkb/charybdis/3x6/v2/splinky_2/rules.mk
@@ -1,7 +1,3 @@
-# RP2040-specific options
-ALLOW_WARNINGS = yes
-PICO_INTRINSICS_ENABLED = no # ATM Unsupported by ChibiOS.
-
# Build Options
# change yes to no to disable
#
diff --git a/keyboards/bastardkb/charybdis/3x6/v2/splinky_3/rules.mk b/keyboards/bastardkb/charybdis/3x6/v2/splinky_3/rules.mk
index 80098fbbf670..87a2d912b894 100644
--- a/keyboards/bastardkb/charybdis/3x6/v2/splinky_3/rules.mk
+++ b/keyboards/bastardkb/charybdis/3x6/v2/splinky_3/rules.mk
@@ -1,7 +1,3 @@
-# RP2040-specific options
-ALLOW_WARNINGS = yes
-PICO_INTRINSICS_ENABLED = no # ATM Unsupported by ChibiOS.
-
# Build Options
# change yes to no to disable
#
diff --git a/keyboards/bastardkb/charybdis/4x6/blackpill/info.json b/keyboards/bastardkb/charybdis/4x6/blackpill/info.json
index b9fb103496c8..b4040e84a5bc 100644
--- a/keyboards/bastardkb/charybdis/4x6/blackpill/info.json
+++ b/keyboards/bastardkb/charybdis/4x6/blackpill/info.json
@@ -3,6 +3,9 @@
"usb": {
"device_version": "1.0.0"
},
+ "eeprom": {
+ "driver": "spi"
+ },
"rgb_matrix": {
"driver": "ws2812"
},
diff --git a/keyboards/bastardkb/charybdis/4x6/blackpill/rules.mk b/keyboards/bastardkb/charybdis/4x6/blackpill/rules.mk
index 1cfe4724b427..f8de9a3fb13e 100644
--- a/keyboards/bastardkb/charybdis/4x6/blackpill/rules.mk
+++ b/keyboards/bastardkb/charybdis/4x6/blackpill/rules.mk
@@ -23,5 +23,4 @@ POINTING_DEVICE_DRIVER = pmw3360
MOUSE_SHARED_EP = no # Unify multiple HID interfaces into a single Endpoint
KEYBOARD_SHARED_EP = yes
-EEPROM_DRIVER = spi
SERIAL_DRIVER = usart
diff --git a/keyboards/bastardkb/charybdis/4x6/keymaps/drashna/config.h b/keyboards/bastardkb/charybdis/4x6/keymaps/drashna/config.h
deleted file mode 100644
index 7fa982612550..000000000000
--- a/keyboards/bastardkb/charybdis/4x6/keymaps/drashna/config.h
+++ /dev/null
@@ -1,69 +0,0 @@
-/**
- * Copyright 2021 Charly Delay (@0xcharly)
- *
- * 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 .
- */
-#pragma once
-
-#if defined(KEYBOARD_bastardkb_charybdis_4x6_blackpill)
-# undef MATRIX_COL_PINS
-# define MATRIX_COL_PINS \
- { B0, B1, B12, B3, B4, B5 }
-
-# define USB_VBUS_PIN B10
-# define DEBUG_LED_PIN C13
-
-# define AUDIO_PIN B7
-# define AUDIO_PWM_DRIVER PWMD4
-# define AUDIO_PWM_CHANNEL 2
-# define AUDIO_PWM_PAL_MODE 2
-# define AUDIO_INIT_DELAY
-# define AUDIO_ENABLE_TONE_MULTIPLEXING
-# define AUDIO_TONE_MULTIPLEXING_RATE_DEFAULT 10
-
-# define SERIAL_USART_SPEED (1 * 1024 * 1024)
-
-# undef POINTING_DEVICE_CS_PIN
-# define POINTING_DEVICE_CS_PIN A15 // b14
-# define PMW33XX_LIFTOFF_DISTANCE 0b1111
-
-# define RGB_MATRIX_LED_FLUSH_LIMIT 33
-# define RGB_MATRIX_LED_PROCESS_LIMIT 29
-#endif
-
-#undef ROTATIONAL_TRANSFORM_ANGLE
-#define ROTATIONAL_TRANSFORM_ANGLE 25
-#define POINTING_DEVICE_ROTATION_270
-
-/* RGB Matrix. */
-#undef RGB_MATRIX_MAXIMUM_BRIGHTNESS
-#define RGB_MATRIX_MAXIMUM_BRIGHTNESS 150
-
-#define CHARYBDIS_MINIMUM_DEFAULT_DPI 1200
-#define CHARYBDIS_DEFAULT_DPI_CONFIG_STEP 400
-#define CHARYBDIS_MINIMUM_SNIPING_DPI 200
-#define CHARYBDIS_SNIPING_DPI_CONFIG_STEP 100
-
-#define CHARYBDIS_CONFIG_SYNC
-
-#define BOOTMAGIC_LITE_ROW 0
-#define BOOTMAGIC_LITE_COLUMN 0
-#define BOOTMAGIC_LITE_ROW_RIGHT 5
-#define BOOTMAGIC_LITE_COLUMN_RIGHT 0
-#define BOOTMAGIC_LITE_EEPROM_ROW 1
-#define BOOTMAGIC_LITE_EEPROM_COLUMN 0
-#define BOOTMAGIC_LITE_EEPROM_ROW_RIGHT 1
-#define BOOTMAGIC_LITE_EEPROM_COLUMN_RIGHT 0
-
-#define DEBOUNCE 15
diff --git a/keyboards/bastardkb/charybdis/4x6/keymaps/drashna/keymap.c b/keyboards/bastardkb/charybdis/4x6/keymaps/drashna/keymap.c
deleted file mode 100644
index 31d1e92a7fb8..000000000000
--- a/keyboards/bastardkb/charybdis/4x6/keymaps/drashna/keymap.c
+++ /dev/null
@@ -1,154 +0,0 @@
-/**
- * Copyright 2021 Charly Delay (@0xcharly)
- *
- * 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 .
- */
-#include "drashna.h"
-
-// clang-format off
-#define LAYOUT_charybdis_4x6_wrapper(...) LAYOUT_charybdis_4x6(__VA_ARGS__)
-#define LAYOUT_charybdis_4x6_base( \
- K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, \
- K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, \
- K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A \
- ) \
- LAYOUT_charybdis_4x6_wrapper( \
- KC_ESC, ________________NUMBER_LEFT________________, ________________NUMBER_RIGHT_______________, UC_CLUE, \
- SH_TT, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, SH_TT, \
- LALT_T(KC_TAB), K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, RALT_T(K1B), \
- OS_LSFT,CTL_T(K21),ALT_T(K22),GUI_T(K23),K24,K25, K26,K27,RGUI_T(K28),RALT_T(K29),RCTL_T(K2A), OS_RSFT, \
- SFT_T(KC_GRV), OS_LALT, OS_LGUI, TT(_MOUSE), KC_ENT, \
- KC_SPC, BK_LWER, DL_RAIS \
- )
-
-#define LAYOUT_base_wrapper(...) LAYOUT_charybdis_4x6_base(__VA_ARGS__)
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [_DEFAULT_LAYER_1] = LAYOUT_base_wrapper(
- _________________QWERTY_L1_________________, _________________QWERTY_R1_________________,
- _________________QWERTY_L2_________________, _________________QWERTY_R2_________________,
- _________________QWERTY_L3_________________, _________________QWERTY_R3_________________
- ),
-
- [_DEFAULT_LAYER_2] = LAYOUT_base_wrapper(
- ______________COLEMAK_MOD_DH_L1____________, ______________COLEMAK_MOD_DH_R1____________,
- ______________COLEMAK_MOD_DH_L2____________, ______________COLEMAK_MOD_DH_R2____________,
- ______________COLEMAK_MOD_DH_L3____________, ______________COLEMAK_MOD_DH_R3____________
- ),
- [_DEFAULT_LAYER_3] = LAYOUT_base_wrapper(
- _________________COLEMAK_L1________________, _________________COLEMAK_R1________________,
- _________________COLEMAK_L2________________, _________________COLEMAK_R2________________,
- _________________COLEMAK_L3________________, _________________COLEMAK_R3________________
- ),
-
- [_DEFAULT_LAYER_4] = LAYOUT_base_wrapper(
- _________________DVORAK_L1_________________, _________________DVORAK_R1_________________,
- _________________DVORAK_L2_________________, _________________DVORAK_R2_________________,
- _________________DVORAK_L3_________________, _________________DVORAK_R3_________________
- ),
-
- [_GAMEPAD] = LAYOUT_charybdis_4x6(
- KC_ESC, KC_NO, KC_1, KC_2, KC_3, KC_4, _______, _______, _______, _______, _______, _______,
- KC_F1, KC_K, KC_Q, KC_W, KC_E, KC_R, _______, _______, _______, _______, _______, _______,
- KC_TAB, KC_G, KC_A, KC_S, KC_D, KC_F, _______, _______, _______, _______, _______, _______,
- KC_LCTL, KC_LSFT, KC_Z, KC_X, KC_C, KC_H, _______, _______, _______, _______, _______, _______,
- KC_V, _______, _______, _______, TG_GAME,
- KC_SPC, KC_H, _______
- ),
- [_DIABLO] = LAYOUT_charybdis_4x6(
- KC_ESC, KC_V, KC_D, KC_LALT, KC_NO, KC_NO, KC_F9, KC_F10, KC_F11, KC_F12, KC_NO, KC_NO,
- KC_TAB, KC_S, KC_I, KC_F, KC_M, KC_T, _______, _______, _______, _______, _______, _______,
- KC_Q, KC_1, KC_2, KC_3, KC_4, KC_G, _______, _______, _______, _______, _______, _______,
- KC_LCTL, KC_D3_1, KC_D3_2, KC_D3_3, KC_D3_4, KC_Z, _______, _______, _______, _______, _______, _______,
- KC_G, _______, _______, TO(_DIABLOII), TG_DBLO,
- KC_LSFT, KC_LCTL, _______
- ),
- [_DIABLOII] = LAYOUT_charybdis_4x6(
- KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_GRV, _______, _______, _______, _______, _______, _______,
- KC_TAB, KC_A, KC_T, KC_Q, KC_I, KC_M, _______, _______, _______, _______, _______, _______,
- KC_S, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, _______, _______, _______, _______, _______, _______,
- KC_LCTL, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, _______, _______, _______, _______, _______, _______,
- KC_DIABLO_CLEAR, _______, _______, _______, TG(_DIABLOII),
- SFT_T(KC_SPACE), ALT_T(KC_Q), _______
- ),
- [_MOUSE] = LAYOUT_charybdis_4x6(
- _______, _______, _______, _______, _______, _______, _______, DPI_RMOD,DPI_MOD, S_D_RMOD,S_D_MOD, PD_JIGGLER,
- _______, _______, _______, _______, _______, _______, KC_WH_U, _______, _______, _______, _______, DRGSCRL,
- _______, _______, _______, _______, _______, _______, KC_WH_D, KC_BTN1, KC_BTN3, KC_BTN2, KC_BTN6, SNIPING,
- _______, _______, _______, _______, _______, _______, KC_BTN7, KC_BTN4, KC_BTN5, KC_BTN8, _______, _______,
- _______, _______, _______, _______, _______,
- _______, _______, _______
- ),
-
- [_LOWER] = LAYOUT_charybdis_4x6_wrapper(
- KC_F12, _________________FUNC_LEFT_________________, _________________FUNC_RIGHT________________, KC_F11,
- _______, _________________LOWER_L1__________________, _________________LOWER_R1__________________, _______,
- _______, _________________LOWER_L2__________________, _________________LOWER_R2__________________, KC_PIPE,
- _______, _________________LOWER_L3__________________, _________________LOWER_R3__________________, _______,
- _______, _______, _______, _______, _______,
- _______, _______, _______
- ),
-
- [_RAISE] = LAYOUT_charybdis_4x6_wrapper(
- KC_F12, _________________FUNC_LEFT_________________, _________________FUNC_RIGHT________________, KC_F11,
- KC_GRV, _________________RAISE_L1__________________, _________________RAISE_R1__________________, _______,
- _______, _________________RAISE_L2__________________, _________________RAISE_R2__________________, KC_BSLS,
- _______, _________________RAISE_L3__________________, _________________RAISE_R3__________________, _______,
- _______, _______, _______, _______, _______,
- _______, _______, _______
- ),
-
- [_ADJUST] = LAYOUT_charybdis_4x6_wrapper(
- QK_MAKE, KC_WIDE,KC_AUSSIE,KC_SCRIPT,KC_ZALGO,KC_SUPER, KC_NOMODE,KC_COMIC,KC_REGIONAL,TG_GAME,TG_DBLO, QK_BOOT,
- VRSN, _________________ADJUST_L1_________________, _________________ADJUST_R1_________________, EE_CLR,
- KEYLOCK, _________________ADJUST_L2_________________, _________________ADJUST_R2_________________, TG_MODS,
- UC_NEXT, _________________ADJUST_L3_________________, _________________ADJUST_R3_________________, KC_MPLY,
- QK_RBT, AUTO_CTN, _______, _______, KC_NUKE,
- _______, _______, _______
- )
-};
-// clang-format on
-
-void keyboard_post_init_keymap(void) {
-#ifdef RGB_MATRIX_ENABLE
- g_led_config.flags[53] = g_led_config.flags[54] = g_led_config.flags[55] = g_led_config.flags[0] = g_led_config.flags[1] = g_led_config.flags[2] = g_led_config.flags[3] = g_led_config.flags[29] = g_led_config.flags[30] = g_led_config.flags[31] = g_led_config.flags[32] = LED_FLAG_MODIFIER;
-#endif
-}
-
-#if defined(KEYBOARD_bastardkb_charybdis_4x6_blackpill)
-void keyboard_pre_init_keymap(void) {
- setPinInputHigh(A0);
-}
-#endif
-
-#ifdef SWAP_HANDS_ENABLE
-const keypos_t PROGMEM hand_swap_config[MATRIX_ROWS][MATRIX_COLS] = {
- /* Left hand, matrix positions */
- {{0, 5}, {1, 5}, {2, 5}, {3, 5}, {4, 5}, {5, 5}},
- {{0, 6}, {1, 6}, {2, 6}, {3, 6}, {4, 6}, {5, 6}},
- {{0, 7}, {1, 7}, {2, 7}, {3, 7}, {4, 7}, {5, 7}},
- {{0, 8}, {1, 8}, {2, 8}, {3, 8}, {4, 8}, {5, 8}},
- {{2, 9}, {4, 9}, {5, 9}, {1, 9}, {0, 9}, {3, 9}},
- /* Right hand, matrix positions */
- {{0, 0}, {1, 0}, {2, 0}, {3, 0}, {4, 0}, {5, 0}},
- {{0, 1}, {1, 1}, {2, 1}, {3, 1}, {4, 1}, {5, 1}},
- {{0, 2}, {1, 2}, {2, 2}, {3, 2}, {4, 2}, {5, 2}},
- {{0, 3}, {1, 3}, {2, 3}, {3, 3}, {4, 3}, {5, 3}},
- {{0, 4}, {3, 4}, {2, 4}, {5, 4}, {4, 4}, {2, 4}}
-};
-
-# ifdef ENCODER_MAP_ENABLE
-const uint8_t PROGMEM encoder_hand_swap_config[NUM_ENCODERS] = {1, 0};
-# endif
-#endif
diff --git a/keyboards/bastardkb/charybdis/4x6/keymaps/drashna/mcuconf.h b/keyboards/bastardkb/charybdis/4x6/keymaps/drashna/mcuconf.h
deleted file mode 100644
index 0541043c5384..000000000000
--- a/keyboards/bastardkb/charybdis/4x6/keymaps/drashna/mcuconf.h
+++ /dev/null
@@ -1,27 +0,0 @@
-/* Copyright 2020 Nick Brassel (tzarc)
- *
- * 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 3 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 .
- */
-
-#pragma once
-
-#include_next
-
-#if defined(KEYBOARD_bastardkb_charybdis_4x6_blackpill)
-# undef STM32_PWM_USE_ADVANCED
-# define STM32_PWM_USE_ADVANCED TRUE
-
-# undef STM32_PWM_USE_TIM4
-# define STM32_PWM_USE_TIM4 TRUE
-#endif
diff --git a/keyboards/bastardkb/charybdis/4x6/keymaps/drashna/rules.mk b/keyboards/bastardkb/charybdis/4x6/keymaps/drashna/rules.mk
deleted file mode 100644
index ef6b7cd24b86..000000000000
--- a/keyboards/bastardkb/charybdis/4x6/keymaps/drashna/rules.mk
+++ /dev/null
@@ -1,52 +0,0 @@
-CUSTOM_UNICODE_ENABLE = no
-CUSTOM_POINTING_DEVICE = no
-CUSTOM_SPLIT_TRANSPORT_SYNC = no
-PER_KEY_TAPPING = yes
-
-ifeq ($(strip $(KEYBOARD)), bastardkb/charybdis/4x6/blackpill)
- # MCU name
- # Bootloader selection
- BOOTLOADER := tinyuf2
-
- AUDIO_ENABLE = yes # Audio output
- AUDIO_SUPPORTED = yes # is set to no in kb, needs to be forcibly enabled
- AUDIO_DRIVER = pwm_hardware
-
- BACKLIGHT_DRIVER = pwm
-
- OVERLOAD_FEATURES = yes
-endif
-
-ifeq ($(strip $(MCU)), atmega32u4)
- LTO_ENABLE = yes
- BOOTLOADER = qmk-hid
- BOOTLOADER_SIZE = 512
- EXTRAKEY_ENABLE = no
-else
- OVERLOAD_FEATURES = yes
-endif
-
-ifeq ($(strip $(OVERLOAD_FEATURES)), yes)
- BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite
- MOUSEKEY_ENABLE = yes # Mouse keys
- EXTRAKEY_ENABLE = yes # Audio control and System control
- CONSOLE_ENABLE = yes # Console for debug
- COMMAND_ENABLE = no # Commands for debug and configuration
- NKRO_ENABLE = yes # Enable N-Key Rollover
- RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
-
- MOUSE_SHARED_EP = no
-
- AUTOCORRECT_ENABLE = yes
- CAPS_WORD_ENABLE = yes
- SWAP_HANDS_ENABLE = yes
- TAP_DANCE_ENABLE = yes
- WPM_ENABLE = yes
- LTO_ENABLE = no
- # OPT = 3
-
- CUSTOM_UNICODE_ENABLE = yes
- CUSTOM_POINTING_DEVICE = yes
- CUSTOM_SPLIT_TRANSPORT_SYNC = yes
-
-endif
diff --git a/keyboards/bastardkb/charybdis/4x6/keymaps/manna-harbour_miryoku/config.h b/keyboards/bastardkb/charybdis/4x6/keymaps/manna-harbour_miryoku/config.h
deleted file mode 100644
index aa8dc8505422..000000000000
--- a/keyboards/bastardkb/charybdis/4x6/keymaps/manna-harbour_miryoku/config.h
+++ /dev/null
@@ -1,23 +0,0 @@
-// Copyright 2022 Manna Harbour
-// https://github.com/manna-harbour/miryoku
-
-// 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 .
-
-#pragma once
-
-#define XXX KC_NO
-
-#define LAYOUT_miryoku( \
- K00, 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, \
- N30, N31, K32, K33, K34, K35, K36, K37, N38, N39 \
-) \
-LAYOUT_charybdis_4x6( \
-XXX, XXX, XXX, XXX, XXX, XXX, XXX, XXX, XXX, XXX, XXX, XXX, \
-XXX, K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, XXX, \
-XXX, K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, XXX, \
-XXX, K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, XXX, \
- K32, K33, K34, K35, K36, \
- XXX, K32, K37 \
-)
diff --git a/keyboards/bastardkb/charybdis/4x6/keymaps/manna-harbour_miryoku/keymap.c b/keyboards/bastardkb/charybdis/4x6/keymaps/manna-harbour_miryoku/keymap.c
deleted file mode 100644
index dbab7f982043..000000000000
--- a/keyboards/bastardkb/charybdis/4x6/keymaps/manna-harbour_miryoku/keymap.c
+++ /dev/null
@@ -1,4 +0,0 @@
-// Copyright 2019 Manna Harbour
-// https://github.com/manna-harbour/miryoku
-
-// 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 .
diff --git a/keyboards/bastardkb/charybdis/4x6/keymaps/manna-harbour_miryoku/rules.mk b/keyboards/bastardkb/charybdis/4x6/keymaps/manna-harbour_miryoku/rules.mk
deleted file mode 100644
index ef40279cbcd6..000000000000
--- a/keyboards/bastardkb/charybdis/4x6/keymaps/manna-harbour_miryoku/rules.mk
+++ /dev/null
@@ -1,4 +0,0 @@
-# Copyright 2021 Manna Harbour
-# https://github.com/manna-harbour/miryoku
-
-MIRYOKU_KLUDGE_THUMBCOMBOS=yes
diff --git a/keyboards/bastardkb/charybdis/4x6/keymaps/via/keymap.c b/keyboards/bastardkb/charybdis/4x6/keymaps/via/keymap.c
index fb795829fde1..a0657b02ec89 100644
--- a/keyboards/bastardkb/charybdis/4x6/keymaps/via/keymap.c
+++ b/keyboards/bastardkb/charybdis/4x6/keymaps/via/keymap.c
@@ -157,15 +157,3 @@ layer_state_t layer_state_set_user(layer_state_t state) {
// Forward-declare this helper function since it is defined in rgb_matrix.c.
void rgb_matrix_update_pwm_buffers(void);
#endif
-
-void shutdown_user(void) {
-#ifdef RGBLIGHT_ENABLE
- rgblight_enable_noeeprom();
- rgblight_mode_noeeprom(1);
- rgblight_setrgb(RGB_RED);
-#endif // RGBLIGHT_ENABLE
-#ifdef RGB_MATRIX_ENABLE
- rgb_matrix_set_color_all(RGB_RED);
- rgb_matrix_update_pwm_buffers();
-#endif // RGB_MATRIX_ENABLE
-}
diff --git a/keyboards/bastardkb/charybdis/4x6/v2/splinky_2/rules.mk b/keyboards/bastardkb/charybdis/4x6/v2/splinky_2/rules.mk
index 80098fbbf670..87a2d912b894 100644
--- a/keyboards/bastardkb/charybdis/4x6/v2/splinky_2/rules.mk
+++ b/keyboards/bastardkb/charybdis/4x6/v2/splinky_2/rules.mk
@@ -1,7 +1,3 @@
-# RP2040-specific options
-ALLOW_WARNINGS = yes
-PICO_INTRINSICS_ENABLED = no # ATM Unsupported by ChibiOS.
-
# Build Options
# change yes to no to disable
#
diff --git a/keyboards/bastardkb/charybdis/4x6/v2/splinky_3/rules.mk b/keyboards/bastardkb/charybdis/4x6/v2/splinky_3/rules.mk
index 80098fbbf670..87a2d912b894 100644
--- a/keyboards/bastardkb/charybdis/4x6/v2/splinky_3/rules.mk
+++ b/keyboards/bastardkb/charybdis/4x6/v2/splinky_3/rules.mk
@@ -1,7 +1,3 @@
-# RP2040-specific options
-ALLOW_WARNINGS = yes
-PICO_INTRINSICS_ENABLED = no # ATM Unsupported by ChibiOS.
-
# Build Options
# change yes to no to disable
#
diff --git a/keyboards/bastardkb/charybdis/charybdis.c b/keyboards/bastardkb/charybdis/charybdis.c
index c321af7aa913..c9f0e6317283 100644
--- a/keyboards/bastardkb/charybdis/charybdis.c
+++ b/keyboards/bastardkb/charybdis/charybdis.c
@@ -382,3 +382,20 @@ void matrix_scan_kb(void) {
matrix_scan_user();
}
#endif // KEYBOARD_bastardkb_charybdis_3x5_blackpill || KEYBOARD_bastardkb_charybdis_4x6_blackpill
+
+bool shutdown_kb(bool jump_to_bootloader) {
+ if (!shutdown_user(jump_to_bootloader)) {
+ return false;
+ }
+#ifdef RGBLIGHT_ENABLE
+ rgblight_enable_noeeprom();
+ rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_LIGHT);
+ rgblight_setrgb(RGB_RED);
+#endif // RGBLIGHT_ENABLE
+#ifdef RGB_MATRIX_ENABLE
+ void rgb_matrix_update_pwm_buffers(void);
+ rgb_matrix_set_color_all(RGB_RED);
+ rgb_matrix_update_pwm_buffers();
+#endif // RGB_MATRIX_ENABLE
+ return true;
+}
diff --git a/keyboards/bastardkb/charybdis/config.h b/keyboards/bastardkb/charybdis/config.h
index ced39ef4a1fa..2cd4394da0d3 100644
--- a/keyboards/bastardkb/charybdis/config.h
+++ b/keyboards/bastardkb/charybdis/config.h
@@ -41,8 +41,6 @@
# define RGB_MATRIX_KEYPRESSES
// Startup values.
-# define RGB_MATRIX_DEFAULT_HUE 0
-# define RGB_MATRIX_DEFAULT_SAT 255
# define RGB_MATRIX_DEFAULT_VAL 64
// Rainbow swirl as startup mode.
diff --git a/keyboards/bastardkb/dilemma/3x5_2/assembled/rules.mk b/keyboards/bastardkb/dilemma/3x5_2/assembled/rules.mk
index 5db74a9d847b..b4722fc8e6a7 100644
--- a/keyboards/bastardkb/dilemma/3x5_2/assembled/rules.mk
+++ b/keyboards/bastardkb/dilemma/3x5_2/assembled/rules.mk
@@ -22,6 +22,3 @@ POINTING_DEVICE_ENABLE = yes
POINTING_DEVICE_DRIVER = cirque_pinnacle_spi # Assembled version uses SPI.
SPLIT_KEYBOARD = yes
-
-# RP2040-specific options
-PICO_INTRINSICS_ENABLED = no # ATM Unsupported by ChibiOS.
diff --git a/keyboards/bastardkb/dilemma/3x5_2/keymaps/bstiq/config.h b/keyboards/bastardkb/dilemma/3x5_2/keymaps/bstiq/config.h
deleted file mode 100644
index 8d8baa5c321b..000000000000
--- a/keyboards/bastardkb/dilemma/3x5_2/keymaps/bstiq/config.h
+++ /dev/null
@@ -1,138 +0,0 @@
-/**
- * Copyright 2021 Quentin LEBASTARD
- * Copyright 2022 Charly Delay (@0xcharly)
- *
- * 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 .
- */
-#pragma once
-
-#ifdef VIA_ENABLE
-/* Via configuration. */
-# define DYNAMIC_KEYMAP_LAYER_COUNT 8
-#endif // VIA_ENABLE
-
-/**
- * Configure the global tapping term (default: 200ms).
- * If you have a lot of accidental mod activations, crank up the tapping term.
- *
- * See docs.qmk.fm/using-qmk/software-features/tap_hold#tapping-term
- */
-#ifndef TAPPING_TERM
-# define TAPPING_TERM 160
-#endif // TAPPING_TERM
-
-// disable trackpad taps
-// #define CIRQUE_PINNACLE_TAPPING_TERM 0
-
-/**
- * Enable rapid switch from tap to hold. Disable auto-repeat when pressing key
- * twice, except for one-shot keys.
- *
- * See docs.qmk.fm/using-qmk/software-features/tap_hold#tapping-force-hold
- */
-#define QUICK_TAP_TERM 0
-
-/*
- * Tap-or-Hold decision modes.
- *
- * Note that the following flags behave differently when combined (ie. when 2 or
- * more are enabled).
- *
- * See bit.ly/tap-or-hold for a visual explanation of the following tap-or-hold
- * decision modes.
- */
-
-/**
- * Faster tap-hold trigger.
- *
- * Without `PERMISSIVE_HOLD`, within `TAPPING_TERM`:
- * Mod(a)🠗 e🠗 e🠕 Mod(a)🠕 ➞ ae
- * With `PERMISSIVE_HOLD`, within `TAPPING_TERM`:
- * Mod(a)🠗 e🠗 e🠕 Mod(a)🠕 ➞ Mod+e
- *
- * See docs.qmk.fm/using-qmk/software-features/tap_hold#permissive-hold
- */
-#define PERMISSIVE_HOLD
-
-/** Dilemma-specific features. */
-
-#ifdef POINTING_DEVICE_ENABLE
-// Flip horizontal direction for drag-scroll.
-# define DILEMMA_DRAGSCROLL_REVERSE_X
-// #define DILEMMA_DRAGSCROLL_REVERSE_Y
-#endif // POINTING_DEVICE_ENABLE
-
-/** RGB Matrix. */
-
-#ifdef RGB_MATRIX_ENABLE
-// Enable all animations on ARM boards since they have plenty of memory
-// available for it.
-# define ENABLE_RGB_MATRIX_ALPHAS_MODS
-# define ENABLE_RGB_MATRIX_GRADIENT_UP_DOWN
-# define ENABLE_RGB_MATRIX_GRADIENT_LEFT_RIGHT
-# define ENABLE_RGB_MATRIX_BREATHING
-# define ENABLE_RGB_MATRIX_BAND_SAT
-# define ENABLE_RGB_MATRIX_BAND_VAL
-# define ENABLE_RGB_MATRIX_BAND_PINWHEEL_SAT
-# define ENABLE_RGB_MATRIX_BAND_PINWHEEL_VAL
-# define ENABLE_RGB_MATRIX_BAND_SPIRAL_SAT
-# define ENABLE_RGB_MATRIX_BAND_SPIRAL_VAL
-# define ENABLE_RGB_MATRIX_CYCLE_ALL
-# define ENABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT
-# define ENABLE_RGB_MATRIX_CYCLE_UP_DOWN
-# define ENABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON
-# define ENABLE_RGB_MATRIX_CYCLE_OUT_IN
-# define ENABLE_RGB_MATRIX_CYCLE_OUT_IN_DUAL
-# define ENABLE_RGB_MATRIX_CYCLE_PINWHEEL
-# define ENABLE_RGB_MATRIX_CYCLE_SPIRAL
-# define ENABLE_RGB_MATRIX_DUAL_BEACON
-# define ENABLE_RGB_MATRIX_RAINBOW_BEACON
-# define ENABLE_RGB_MATRIX_RAINBOW_PINWHEELS
-# define ENABLE_RGB_MATRIX_RAINDROPS
-# define ENABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS
-# define ENABLE_RGB_MATRIX_HUE_BREATHING
-# define ENABLE_RGB_MATRIX_HUE_PENDULUM
-# define ENABLE_RGB_MATRIX_HUE_WAVE
-# define ENABLE_RGB_MATRIX_TYPING_HEATMAP
-# define ENABLE_RGB_MATRIX_DIGITAL_RAIN
-# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE
-# define ENABLE_RGB_MATRIX_SOLID_REACTIVE
-# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE
-# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE
-# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS
-# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTICROSS
-# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS
-# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS
-# define ENABLE_RGB_MATRIX_SPLASH
-# define ENABLE_RGB_MATRIX_MULTISPLASH
-# define ENABLE_RGB_MATRIX_SOLID_SPLASH
-# define ENABLE_RGB_MATRIX_SOLID_MULTISPLASH
-
-// Limit maximum brightness to keep power consumption reasonable, and avoid
-// disconnects.
-# undef RGB_MATRIX_MAXIMUM_BRIGHTNESS
-# define RGB_MATRIX_MAXIMUM_BRIGHTNESS 64
-
-// Rainbow swirl as startup mode.
-# define ENABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT
-# define RGB_MATRIX_DEFAULT_MODE RGB_MATRIX_CYCLE_LEFT_RIGHT
-
-// Slow swirl at startup.
-# define RGB_MATRIX_DEFAULT_SPD 32
-
-// Startup values.
-# define RGB_MATRIX_DEFAULT_HUE 0
-# define RGB_MATRIX_DEFAULT_SAT 255
-# define RGB_MATRIX_DEFAULT_VAL RGB_MATRIX_MAXIMUM_BRIGHTNESS
-#endif // RGB_MATRIX_ENABLE
diff --git a/keyboards/bastardkb/dilemma/3x5_2/keymaps/bstiq/keymap.c b/keyboards/bastardkb/dilemma/3x5_2/keymaps/bstiq/keymap.c
deleted file mode 100644
index e8c0441d7bbf..000000000000
--- a/keyboards/bastardkb/dilemma/3x5_2/keymaps/bstiq/keymap.c
+++ /dev/null
@@ -1,224 +0,0 @@
-/**
- * Copyright 2021 Quentin LEBASTARD
- * Copyright 2022 Charly Delay (@0xcharly)
- *
- * 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 .
- */
-#include QMK_KEYBOARD_H
-
-enum bstiq_layers {
- LAYER_BASE = 0,
- LAYER_MBO,
- LAYER_MEDIA,
- LAYER_NAV,
- LAYER_MOUSE,
- LAYER_SYM,
- LAYER_NUM,
- LAYER_FUN,
-};
-
-// Automatically enable sniping when the mouse layer is on.
-#define DILEMMA_AUTO_SNIPING_ON_LAYER LAYER_MOUSE
-
-#define BSP_NAV LT(LAYER_NAV, KC_BSPC)
-#define ENT_MBO LT(LAYER_MBO, KC_ENT)
-#define TAB_MED LT(LAYER_MEDIA, KC_TAB)
-#define ESC_SYM LT(LAYER_SYM, KC_ESC)
-#define SPC_NUM LT(LAYER_NUM, KC_SPC)
-#define SPC_MBO LT(LAYER_MBO, KC_SPC)
-#define MOUSE(KC) LT(LAYER_MOUSE, KC)
-
-#define USR_RDO KC_AGAIN
-#define USR_PST S(KC_INS)
-#define USR_CPY C(KC_INS)
-#define USR_CUT S(KC_DEL)
-#define USR_UND KC_UNDO
-
-#define MS_L KC_MS_LEFT
-#define MS_R KC_MS_RIGHT
-#define MS_D KC_MS_DOWN
-#define MS_U KC_MS_UP
-
-#define WH_L KC_MS_WH_LEFT
-#define WH_R KC_MS_WH_RIGHT
-#define WH_D KC_MS_WH_DOWN
-#define WH_U KC_MS_WH_UP
-
-// clang-format off
-/** Convenience macro. */
-#define _KC_LAYOUT_wrapper( \
- k00, 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, \
- ...) \
- KC_##k00, KC_##k01, KC_##k02, KC_##k03, KC_##k04, KC_##k05, KC_##k06, KC_##k07, KC_##k08, KC_##k09, \
- KC_##k10, KC_##k11, KC_##k12, KC_##k13, KC_##k14, KC_##k15, KC_##k16, KC_##k17, KC_##k18, KC_##k19, \
- KC_##k20, KC_##k21, KC_##k22, KC_##k23, KC_##k24, KC_##k25, KC_##k26, KC_##k27, KC_##k28, KC_##k29, \
- __VA_ARGS__
-#define KC_LAYOUT_wrapper(...) _KC_LAYOUT_wrapper(__VA_ARGS__)
-
-/** Base layer with BÉPO layout. */
-#define LAYOUT_LAYER_BASE_BEPO KC_LAYOUT_wrapper( \
- B, W, P, O, QUOT, DOT, V, D, L, J, \
- A, U, I, E, COMM, C, T, S, R, N, \
- Z, Y, X, SLSH, K, M, Q, G, H, F, \
- SPC_MBO, TAB_MED, ESC_SYM, SPC_NUM)
-
-/** Convenience key shorthands. */
-#define U_NA KC_NO // Present but not available for use.
-#define U_NU KC_NO // Available but not used.
-
-/** Convenience row shorthands. */
-#define ________________HOME_ROW_NA________________ U_NA, U_NA, U_NA, U_NA, U_NA
-#define ______________HOME_ROW_GASC_L______________ KC_LGUI, KC_LALT, KC_LSFT, KC_LCTL, U_NA
-#define ______________HOME_ROW_ALGR_L______________ U_NA, KC_ALGR, U_NA, U_NA, U_NA
-#define ______________HOME_ROW_GASC_R______________ U_NA, KC_LCTL, KC_LSFT, KC_LALT, KC_LGUI
-#define ______________HOME_ROW_ALGR_R______________ U_NA, U_NA, U_NA, KC_ALGR, U_NA
-
-/** Layers. */
-
-// Buttons.
-#define LAYOUT_LAYER_MBO \
- ________________HOME_ROW_NA________________, USR_RDO, USR_PST, USR_CPY, USR_CUT, USR_UND, \
- ______________HOME_ROW_GASC_L______________, KC_BSPC, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, \
- KC_BTN3, KC_ALGR, KC_BTN2, KC_BTN1, U_NA, KC_DEL, KC_HOME, KC_PGDN, KC_PGUP, KC_END, \
- U_NA, U_NA, KC_ENT, KC_ENT
-
-// Media.
-#define LAYOUT_LAYER_MEDIA \
- ________________HOME_ROW_NA________________, USR_RDO, USR_PST, USR_CPY, USR_CUT, USR_UND, \
- ______________HOME_ROW_GASC_L______________, U_NU, MS_L, MS_D, MS_U, MS_R, \
- ______________HOME_ROW_ALGR_L______________, U_NU, WH_L, WH_D, WH_U, WH_R, \
- U_NA, U_NA, KC_BTN1, KC_BTN3
-
-// Navigation.
-#define LAYOUT_LAYER_NAV \
- ________________HOME_ROW_NA________________, RGB_TOG, RGB_MOD, RGB_HUI, RGB_SAI, RGB_VAI, \
- ______________HOME_ROW_GASC_L______________, U_NU, KC_MPRV, KC_VOLD, KC_VOLU, KC_MNXT, \
- ______________HOME_ROW_ALGR_L______________, U_NU, U_NU, U_NU, U_NU, U_NU, \
- U_NA, U_NA, KC_MSTP, KC_MPLY
-
-// Mouse.
-#define LAYOUT_LAYER_MOUSE \
- S_D_MOD, USR_PST, USR_CPY, USR_CUT, USR_UND, USR_RDO, USR_PST, USR_CPY, USR_CUT, USR_UND, \
- DPI_MOD, DRGSCRL, KC_LSFT, DRGSCRL, _______, U_NU, MS_L, MS_D, MS_U, MS_R, \
- USR_RDO, USR_PST, USR_CPY, KC_BTN3, USR_UND, U_NU, WH_L, WH_D, WH_U, WH_R, \
- KC_BTN1, KC_BTN2, KC_BTN1, KC_BTN3
-
-// Symbols.
-#define LAYOUT_LAYER_SYM \
- KC_LCBR, KC_AMPR, KC_ASTR, KC_LPRN, KC_RCBR, ________________HOME_ROW_NA________________, \
- KC_COLN, KC_DLR, KC_PERC, KC_CIRC, KC_PLUS, ______________HOME_ROW_GASC_R______________, \
- KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_MINS, ______________HOME_ROW_ALGR_R______________, \
- KC_RPRN, KC_LPRN, U_NA, U_NA
-
-// Numerals.
-#define LAYOUT_LAYER_NUM \
- KC_LBRC, KC_7, KC_8, KC_9, KC_RBRC, ________________HOME_ROW_NA________________, \
- KC_SCLN, KC_4, KC_5, KC_6, KC_EQL, ______________HOME_ROW_GASC_R______________, \
- KC_GRV, KC_1, KC_2, KC_3, KC_UNDS, ______________HOME_ROW_ALGR_R______________, \
- KC_0, KC_MINS, U_NA, U_NA
-
-// Function keys.
-#define LAYOUT_LAYER_FUN \
- KC_F12, KC_F7, KC_F8, KC_F9, KC_PSCR, ________________HOME_ROW_NA________________, \
- KC_F11, KC_F4, KC_F5, KC_F6, KC_SCRL, ______________HOME_ROW_GASC_R______________, \
- KC_F10, KC_F1, KC_F2, KC_F3, KC_PAUS, ______________HOME_ROW_ALGR_R______________,\
- KC_APP, KC_TAB, U_NA, U_NA
-
-/**
- * Add Home Row mod to a layout.
- *
- * Expects a 10-key per row layout. Adds support for GASC (Gui, Alt, Shift, Ctl)
- * home row. The layout passed in parameter must contain at least 20 keycodes.
- *
- * This is meant to be used with `LAYOUT_LAYER_BASE_BEPO` defined above, eg.:
- *
- * HOME_ROW_MOD_GASC(LAYOUT_LAYER_BASE_BEPO)
- */
-#define _HOME_ROW_MOD_GASC( \
- L00, L01, L02, L03, L04, R05, R06, R07, R08, R09, \
- L10, L11, L12, L13, L14, R15, R16, R17, R18, R19, \
- ...) \
- L00, L01, L02, L03, L04, \
- R05, R06, R07, R08, R09, \
- LGUI_T(L10), LALT_T(L11), LSFT_T(L12), LCTL_T(L13), L14, \
- R15, RCTL_T(R16), RSFT_T(R17), LALT_T(R18), RGUI_T(R19), \
- __VA_ARGS__
-#define HOME_ROW_MOD_GASC(...) _HOME_ROW_MOD_GASC(__VA_ARGS__)
-
-/**
- * Add mouse layer keys to a layout.
- *
- * Expects a 10-key per row layout. The layout passed in parameter must contain
- * at least 30 keycodes.
- *
- * This is meant to be used with `LAYOUT_LAYER_BASE_BEPO` defined above, eg.:
- *
- * MOUSE_MOD(LAYOUT_LAYER_BASE_BEPO)
- */
-#define _MOUSE_MOD( \
- L00, L01, L02, L03, L04, R05, R06, R07, R08, R09, \
- L10, L11, L12, L13, L14, R15, R16, R17, R18, R19, \
- L20, L21, L22, L23, L24, R25, R26, R27, R28, R29, \
- ...) \
- L00, L01, L02, L03, L04, \
- R05, R06, R07, R08, R09, \
- L10, L11, L12, L13, L14, \
- R15, R16, R17, R18, R19, \
- L20, MOUSE(L21), L22, L23, L24, \
- R25, R26, R27, R28, MOUSE(R29), \
- __VA_ARGS__
-#define MOUSE_MOD(...) _MOUSE_MOD(__VA_ARGS__)
-
-#define LAYOUT_wrapper(...) LAYOUT_split_3x5_2(__VA_ARGS__)
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [LAYER_BASE] = LAYOUT_wrapper(
- MOUSE_MOD(HOME_ROW_MOD_GASC(LAYOUT_LAYER_BASE_BEPO))
- ),
- [LAYER_MBO] = LAYOUT_wrapper(LAYOUT_LAYER_MBO),
- [LAYER_MEDIA] = LAYOUT_wrapper(LAYOUT_LAYER_MEDIA),
- [LAYER_NAV] = LAYOUT_wrapper(LAYOUT_LAYER_NAV),
- [LAYER_MOUSE] = LAYOUT_wrapper(LAYOUT_LAYER_MOUSE),
- [LAYER_SYM] = LAYOUT_wrapper(LAYOUT_LAYER_SYM),
- [LAYER_NUM] = LAYOUT_wrapper(LAYOUT_LAYER_NUM),
- [LAYER_FUN] = LAYOUT_wrapper(LAYOUT_LAYER_FUN),
-};
-// clang-format on
-
-#if defined(POINTING_DEVICE_ENABLE) && defined(DILEMMA_AUTO_SNIPING_ON_LAYER)
-layer_state_t layer_state_set_kb(layer_state_t state) {
- state = layer_state_set_user(state);
- dilemma_set_pointer_sniping_enabled(layer_state_cmp(state, DILEMMA_AUTO_SNIPING_ON_LAYER));
- return state;
-}
-#endif // POINTING_DEVICE_ENABLE && DILEMMA_AUTO_SNIPING_ON_LAYER
-
-#ifdef RGB_MATRIX_ENABLE
-// Forward-declare this helper function since it is defined in rgb_matrix.c.
-void rgb_matrix_update_pwm_buffers(void);
-#endif
-
-void shutdown_user(void) {
-#ifdef RGBLIGHT_ENABLE
- rgblight_enable_noeeprom();
- rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_LIGHT);
- rgblight_setrgb(RGB_RED);
-#endif // RGBLIGHT_ENABLE
-#ifdef RGB_MATRIX_ENABLE
- rgb_matrix_set_color_all(RGB_RED);
- rgb_matrix_update_pwm_buffers();
-#endif // RGB_MATRIX_ENABLE
-}
diff --git a/keyboards/bastardkb/dilemma/3x5_2/keymaps/bstiq/readme.md b/keyboards/bastardkb/dilemma/3x5_2/keymaps/bstiq/readme.md
deleted file mode 100644
index df1f43cbcb38..000000000000
--- a/keyboards/bastardkb/dilemma/3x5_2/keymaps/bstiq/readme.md
+++ /dev/null
@@ -1,3 +0,0 @@
-# Dilemma @bstiq keymap
-
-Inspired from Miryoku, using home-rows.
diff --git a/keyboards/bastardkb/dilemma/3x5_2/keymaps/drashna/config.h b/keyboards/bastardkb/dilemma/3x5_2/keymaps/drashna/config.h
deleted file mode 100644
index 7c46c833102f..000000000000
--- a/keyboards/bastardkb/dilemma/3x5_2/keymaps/drashna/config.h
+++ /dev/null
@@ -1,10 +0,0 @@
-// Copyright 2020 Christopher Courtney, aka Drashna Jael're (@drashna)
-// SPDX-License-Identifier: GPL-2.0-or-later
-
-#pragma once
-
-#define CIRQUE_PINNACLE_TAP_ENABLE
-#define POINTING_DEVICE_GESTURES_CURSOR_GLIDE_ENABLE
-#define POINTING_DEVICE_GESTURES_SCROLL_ENABLE
-
-#define OLED_DISPLAY_128X128
diff --git a/keyboards/bastardkb/dilemma/3x5_2/keymaps/drashna/halconf.h b/keyboards/bastardkb/dilemma/3x5_2/keymaps/drashna/halconf.h
deleted file mode 100644
index 906bd6519780..000000000000
--- a/keyboards/bastardkb/dilemma/3x5_2/keymaps/drashna/halconf.h
+++ /dev/null
@@ -1,23 +0,0 @@
-/**
- * Copyright 2022 Charly Delay (@0xcharly)
- *
- * 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 .
- */
-
-#pragma once
-
-#define HAL_USE_SPI TRUE
-#define HAL_USE_I2C TRUE
-
-#include_next
diff --git a/keyboards/bastardkb/dilemma/3x5_2/keymaps/drashna/keymap.c b/keyboards/bastardkb/dilemma/3x5_2/keymaps/drashna/keymap.c
deleted file mode 100644
index bf75e97841b0..000000000000
--- a/keyboards/bastardkb/dilemma/3x5_2/keymaps/drashna/keymap.c
+++ /dev/null
@@ -1,176 +0,0 @@
-/**
- * Copyright 2022 Charly Delay (@0xcharly)
- *
- * 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 .
- */
-
-#include "drashna.h"
-
-// clang-format off
-#define LAYOUT_split_3x5_2_wrapper(...) LAYOUT_split_3x5_2(__VA_ARGS__)
-#define LAYOUT_split_3x5_2_base( \
- K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, \
- K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, \
- K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A \
- ) \
- LAYOUT_split_3x5_2 ( \
- K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, \
- ALT_T(K11), K12, K13, K14, GUI_T(K15), LGUI_T(K16), K17, K18, K19, LALT_T(K1A), \
- CTL_T(K21), K22, K23, K24, K25, K26, K27, K28, K29, RCTL_T(K2A), \
- KC_SPC, BK_LWER, DL_RAIS, RSFT_T(KC_ENT) \
- )
-
-#define LAYOUT_split_3x5_2_base_wrapper(...) LAYOUT_split_3x5_2_base(__VA_ARGS__)
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-
- [_DEFAULT_LAYER_1] = LAYOUT_split_3x5_2_base_wrapper(
- _________________QWERTY_L1_________________, _________________QWERTY_R1_________________,
- _________________QWERTY_L2_________________, _________________QWERTY_R2_________________,
- _________________QWERTY_L3_________________, _________________QWERTY_R3_________________
- ),
-
- [_DEFAULT_LAYER_2] = LAYOUT_split_3x5_2_base_wrapper(
- ______________COLEMAK_MOD_DH_L1____________, ______________COLEMAK_MOD_DH_R1____________,
- ______________COLEMAK_MOD_DH_L2____________, ______________COLEMAK_MOD_DH_R2____________,
- ______________COLEMAK_MOD_DH_L3____________, ______________COLEMAK_MOD_DH_R3____________
- ),
- [_DEFAULT_LAYER_3] = LAYOUT_split_3x5_2_base_wrapper(
- _________________COLEMAK_L1________________, _________________COLEMAK_R1________________,
- _________________COLEMAK_L2________________, _________________COLEMAK_R2________________,
- _________________COLEMAK_L3________________, _________________COLEMAK_R3________________
- ),
-
- [_DEFAULT_LAYER_4] = LAYOUT_split_3x5_2_base_wrapper(
- _________________DVORAK_L1_________________, _________________DVORAK_R1_________________,
- _________________DVORAK_L2_________________, _________________DVORAK_R2_________________,
- _________________DVORAK_L3_________________, _________________DVORAK_R3_________________
- ),
-
- [_MOUSE] = LAYOUT_split_3x5_2(
- _______, _______, _______, _______, _______, KC_WH_U, DPI_RMOD,DPI_MOD, S_D_RMOD,S_D_MOD,
- _______, _______, _______, _______, _______, KC_WH_D, KC_BTN1, KC_BTN3, KC_BTN2, KC_BTN6,
- _______, _______, _______, _______, _______, KC_BTN7, KC_BTN4, KC_BTN5, KC_BTN8, _______,
- SNIPING, _______, _______, _______
- ),
- [_LOWER] = LAYOUT_split_3x5_2_wrapper(
- _________________LOWER_L1__________________, _________________LOWER_R1__________________,
- _________________LOWER_L2__________________, _________________LOWER_R2__________________,
- _________________LOWER_L3__________________, _________________LOWER_R3__________________,
- _______, _______, _______, AUTO_CTN
- ),
- [_RAISE] = LAYOUT_split_3x5_2_wrapper(
- _________________RAISE_L1__________________, _________________RAISE_R1__________________,
- _________________RAISE_L2__________________, _________________RAISE_R2__________________,
- _________________RAISE_L3__________________, _________________RAISE_R3__________________,
- _______, _______, _______, _______
- ),
- [_ADJUST] = LAYOUT_split_3x5_2_wrapper(
- _________________ADJUST_L1_________________, _________________ADJUST_R1_________________,
- _________________ADJUST_L2_________________, _________________ADJUST_R2_________________,
- _________________ADJUST_L3_________________, _________________ADJUST_R3_________________,
- KC_NUKE, _______, _______, QK_BOOT
- ),
-};
-
-#if defined(OLED_ENABLE) && defined(OLED_DISPLAY_128X128)
-# ifdef UNICODE_COMMON_ENABLE
-# include "process_unicode_common.h"
-# include "keyrecords/unicode.h"
-# endif
-
-extern const char PROGMEM display_border[3];
-
-extern bool is_oled_enabled;
-
-
-bool oled_task_keymap(void) {
- static const char PROGMEM header_image[] = {
- 0, 192, 32, 16, 8, 4, 2, 1, 1, 1, 1, 1, 1, 1, 1, 3, 7, 15, 31, 63, 127, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 127, 63, 31, 15, 7, 3, 1, 1, 1, 1, 1, 1, 1, 1, 2, 4, 8, 16, 32, 192, 0,
- // 0,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 7, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 7, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255, 0
- };
- oled_write_raw_P(header_image, sizeof(header_image));
- oled_set_cursor(7, 0);
- oled_write_P(PSTR("Dilemma"), true);
-
- render_default_layer_state(1, 1);
- render_layer_state(1, 2);
- render_kitty(0, 5);
- render_wpm(1, 7, 5);
-# if defined(POINTING_DEVICE_ENABLE)
- render_pointing_dpi_status(dilemma_get_pointer_sniping_enabled() ? dilemma_get_pointer_sniping_dpi() : dilemma_get_pointer_default_dpi(), 1, 7, 6);
- render_mouse_mode(17, 6);
-# elif defined(WPM_ENABLE) && defined(DEBUG_MATRIX_SCAN_RATE)
- render_matrix_scan_rate(1, 7, 6);
-# endif
- render_bootmagic_status(7, 7);
- render_user_status(1, 9);
-
- render_mod_status(get_mods() | get_oneshot_mods(), 1, 10);
- render_keylock_status(host_keyboard_led_state(), 1, 11);
- render_unicode_mode(1, 12);
-
-// render_rgb_hsv(1, 13);
- oled_set_cursor(1, 13);
- oled_write_P(PSTR("OS: "), false);
- extern os_variant_t os_type;
- switch (os_type) {
- case OS_LINUX:
- oled_write_ln_P(PSTR("Linux"), false);
- break;
- case OS_WINDOWS:
- oled_write_ln_P(PSTR("Windows"), false);
- break;
- case OS_MACOS:
- oled_write_ln_P(PSTR("MacOS"), false);
- break;
- case OS_IOS:
- oled_write_ln_P(PSTR("iOS"), false);
- break;
- default:
- break;
- }
-
- render_keylogger_status(1, 14);
-
- for (uint8_t i = 1; i < 15; i++) {
- oled_set_cursor(0, i);
- oled_write_raw_P(display_border, sizeof(display_border));
- oled_set_cursor(21, i);
- oled_write_raw_P(display_border, sizeof(display_border));
- }
-
- static const char PROGMEM footer_image[] = {0, 3, 4, 8, 16, 32, 64, 128, 128, 128, 128, 128, 128, 128, 192, 224, 240, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 240, 224, 192, 128, 128, 128, 128, 128, 128, 128, 64, 32, 16, 8, 4, 3, 0};
- oled_set_cursor(0, 15);
- oled_write_raw_P(footer_image, sizeof(footer_image));
-
- return false;
-}
-#endif
-
-
-#ifdef SWAP_HANDS_ENABLE
-const keypos_t PROGMEM hand_swap_config[MATRIX_ROWS][MATRIX_COLS] = {
- /* Left hand, matrix positions */
- {{0, 4}, {3, 4}, {2, 4}, {5, 4}, {4, 4}},
- {{0, 5}, {1, 5}, {2, 5}, {3, 5}, {4, 5}},
- {{0, 6}, {1, 6}, {2, 6}, {3, 6}, {4, 6}},
- {{0, 7}, {1, 7}, {2, 7}, {3, 7}, {4, 7}},
- /* Right hand, matrix positions */
- {{0, 0}, {1, 0}, {2, 0}, {3, 0}, {4, 0}},
- {{0, 1}, {1, 1}, {2, 1}, {3, 1}, {4, 1}},
- {{0, 2}, {1, 2}, {2, 2}, {3, 2}, {4, 2}},
- {{0, 3}, {1, 3}, {2, 3}, {3, 3}, {4, 3}},
- };
-#endif
diff --git a/keyboards/bastardkb/dilemma/3x5_2/keymaps/drashna/mcuconf.h b/keyboards/bastardkb/dilemma/3x5_2/keymaps/drashna/mcuconf.h
deleted file mode 100644
index f194dd225ced..000000000000
--- a/keyboards/bastardkb/dilemma/3x5_2/keymaps/drashna/mcuconf.h
+++ /dev/null
@@ -1,26 +0,0 @@
-/**
- * Copyright 2022 Charly Delay (@0xcharly)
- *
- * 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 .
- */
-
-#pragma once
-
-#include_next
-
-#undef RP_SPI_USE_SPI1
-#define RP_SPI_USE_SPI1 TRUE
-
-#undef RP_I2C_USE_I2C1
-#define RP_I2C_USE_I2C1 TRUE
diff --git a/keyboards/bastardkb/dilemma/3x5_2/keymaps/drashna/rules.mk b/keyboards/bastardkb/dilemma/3x5_2/keymaps/drashna/rules.mk
deleted file mode 100644
index a1be9cb8fd14..000000000000
--- a/keyboards/bastardkb/dilemma/3x5_2/keymaps/drashna/rules.mk
+++ /dev/null
@@ -1,7 +0,0 @@
-SWAP_HANDS_ENABLE = no
-AUTOCORRECT_ENABLE = yes
-CAPS_WORD_ENABLE = yes
-CONSOLE_ENABLE = yes
-KEYLOGGER_ENABLE = no
-WPM_ENABLE = yes
-OLED_ENABLE = yes
diff --git a/keyboards/bastardkb/dilemma/3x5_2/splinky/rules.mk b/keyboards/bastardkb/dilemma/3x5_2/splinky/rules.mk
index 1e33cc108651..227d42fa24db 100644
--- a/keyboards/bastardkb/dilemma/3x5_2/splinky/rules.mk
+++ b/keyboards/bastardkb/dilemma/3x5_2/splinky/rules.mk
@@ -22,6 +22,3 @@ POINTING_DEVICE_ENABLE = yes
POINTING_DEVICE_DRIVER = cirque_pinnacle_i2c # DIY version uses I2C.
SPLIT_KEYBOARD = yes
-
-# RP2040-specific options
-PICO_INTRINSICS_ENABLED = no # ATM Unsupported by ChibiOS.
diff --git a/keyboards/bastardkb/dilemma/3x5_3/config.h b/keyboards/bastardkb/dilemma/3x5_3/config.h
index 8604597ff8ab..d25bb0752845 100644
--- a/keyboards/bastardkb/dilemma/3x5_3/config.h
+++ b/keyboards/bastardkb/dilemma/3x5_3/config.h
@@ -47,7 +47,6 @@
# define RGB_MATRIX_LED_COUNT 36
# define RGB_MATRIX_SPLIT { 18, 18 }
# define RGB_MATRIX_MAXIMUM_BRIGHTNESS 50
-# define RGB_MATRIX_DEFAULT_VAL RGB_MATRIX_MAXIMUM_BRIGHTNESS
# define RGB_DISABLE_WHEN_USB_SUSPENDED
# define RGB_MATRIX_KEYPRESSES
#endif
diff --git a/keyboards/bastardkb/dilemma/3x5_3/keymaps/bstiq/config.h b/keyboards/bastardkb/dilemma/3x5_3/keymaps/bstiq/config.h
deleted file mode 100644
index cfdafc4a512c..000000000000
--- a/keyboards/bastardkb/dilemma/3x5_3/keymaps/bstiq/config.h
+++ /dev/null
@@ -1,132 +0,0 @@
-/**
- * Copyright 2021 Quentin LEBASTARD
- * Copyright 2022 Charly Delay (@0xcharly)
- *
- * 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 .
- */
-#pragma once
-
-#ifdef VIA_ENABLE
-/* Via configuration. */
-# define DYNAMIC_KEYMAP_LAYER_COUNT 8
-#endif // VIA_ENABLE
-
-/**
- * Configure the global tapping term (default: 200ms).
- * If you have a lot of accidental mod activations, crank up the tapping term.
- */
-#ifndef TAPPING_TERM
-# define TAPPING_TERM 160
-#endif // TAPPING_TERM
-
-// disable trackpad taps
-// #define CIRQUE_PINNACLE_TAPPING_TERM 0
-
-/**
- * Enable rapid switch from tap to hold. Disable auto-repeat when pressing key
- * twice, except for one-shot keys.
- */
-#define QUICK_TAP_TERM 0
-
-/*
- * Tap-or-Hold decision modes.
- *
- * Note that the following flags behave differently when combined (ie. when 2 or
- * more are enabled).
- *
- * See bit.ly/tap-or-hold for a visual explanation of the following tap-or-hold
- * decision modes.
- */
-
-/**
- * Faster tap-hold trigger.
- *
- * Without `PERMISSIVE_HOLD`, within `TAPPING_TERM`:
- * Mod(a)🠗 e🠗 e🠕 Mod(a)🠕 ➞ ae
- * With `PERMISSIVE_HOLD`, within `TAPPING_TERM`:
- * Mod(a)🠗 e🠗 e🠕 Mod(a)🠕 ➞ Mod+e
- */
-#define PERMISSIVE_HOLD
-
-/** Dilemma-specific features. */
-
-#ifdef POINTING_DEVICE_ENABLE
-// Flip horizontal direction for drag-scroll.
-# define DILEMMA_DRAGSCROLL_REVERSE_X
-// #define DILEMMA_DRAGSCROLL_REVERSE_Y
-#endif // POINTING_DEVICE_ENABLE
-
-/** RGB Matrix. */
-
-#ifdef RGB_MATRIX_ENABLE
-// Enable all animations on ARM boards since they have plenty of memory
-// available for it.
-# define ENABLE_RGB_MATRIX_ALPHAS_MODS
-# define ENABLE_RGB_MATRIX_GRADIENT_UP_DOWN
-# define ENABLE_RGB_MATRIX_GRADIENT_LEFT_RIGHT
-# define ENABLE_RGB_MATRIX_BREATHING
-# define ENABLE_RGB_MATRIX_BAND_SAT
-# define ENABLE_RGB_MATRIX_BAND_VAL
-# define ENABLE_RGB_MATRIX_BAND_PINWHEEL_SAT
-# define ENABLE_RGB_MATRIX_BAND_PINWHEEL_VAL
-# define ENABLE_RGB_MATRIX_BAND_SPIRAL_SAT
-# define ENABLE_RGB_MATRIX_BAND_SPIRAL_VAL
-# define ENABLE_RGB_MATRIX_CYCLE_ALL
-# define ENABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT
-# define ENABLE_RGB_MATRIX_CYCLE_UP_DOWN
-# define ENABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON
-# define ENABLE_RGB_MATRIX_CYCLE_OUT_IN
-# define ENABLE_RGB_MATRIX_CYCLE_OUT_IN_DUAL
-# define ENABLE_RGB_MATRIX_CYCLE_PINWHEEL
-# define ENABLE_RGB_MATRIX_CYCLE_SPIRAL
-# define ENABLE_RGB_MATRIX_DUAL_BEACON
-# define ENABLE_RGB_MATRIX_RAINBOW_BEACON
-# define ENABLE_RGB_MATRIX_RAINBOW_PINWHEELS
-# define ENABLE_RGB_MATRIX_RAINDROPS
-# define ENABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS
-# define ENABLE_RGB_MATRIX_HUE_BREATHING
-# define ENABLE_RGB_MATRIX_HUE_PENDULUM
-# define ENABLE_RGB_MATRIX_HUE_WAVE
-# define ENABLE_RGB_MATRIX_TYPING_HEATMAP
-# define ENABLE_RGB_MATRIX_DIGITAL_RAIN
-# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE
-# define ENABLE_RGB_MATRIX_SOLID_REACTIVE
-# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE
-# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE
-# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS
-# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTICROSS
-# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS
-# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS
-# define ENABLE_RGB_MATRIX_SPLASH
-# define ENABLE_RGB_MATRIX_MULTISPLASH
-# define ENABLE_RGB_MATRIX_SOLID_SPLASH
-# define ENABLE_RGB_MATRIX_SOLID_MULTISPLASH
-
-// Limit maximum brightness to keep power consumption reasonable, and avoid
-// disconnects.
-# undef RGB_MATRIX_MAXIMUM_BRIGHTNESS
-# define RGB_MATRIX_MAXIMUM_BRIGHTNESS 64
-
-// Rainbow swirl as startup mode.
-# define ENABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT
-# define RGB_MATRIX_DEFAULT_MODE RGB_MATRIX_CYCLE_LEFT_RIGHT
-
-// Slow swirl at startup.
-# define RGB_MATRIX_DEFAULT_SPD 32
-
-// Startup values.
-# define RGB_MATRIX_DEFAULT_HUE 0
-# define RGB_MATRIX_DEFAULT_SAT 255
-# define RGB_MATRIX_DEFAULT_VAL RGB_MATRIX_MAXIMUM_BRIGHTNESS
-#endif // RGB_MATRIX_ENABLE
diff --git a/keyboards/bastardkb/dilemma/3x5_3/keymaps/bstiq/keymap.c b/keyboards/bastardkb/dilemma/3x5_3/keymaps/bstiq/keymap.c
deleted file mode 100644
index 2c262521bc82..000000000000
--- a/keyboards/bastardkb/dilemma/3x5_3/keymaps/bstiq/keymap.c
+++ /dev/null
@@ -1,223 +0,0 @@
-/**
- * Copyright 2021 Quentin LEBASTARD
- * Copyright 2022 Charly Delay (@0xcharly)
- *
- * 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 .
- */
-#include QMK_KEYBOARD_H
-
-enum bstiq_layers {
- LAYER_BASE = 0,
- LAYER_MBO,
- LAYER_MEDIA,
- LAYER_NAV,
- LAYER_MOUSE,
- LAYER_SYM,
- LAYER_NUM,
- LAYER_FUN,
-};
-
-// Automatically enable sniping when the mouse layer is on.
-#define DILEMMA_AUTO_SNIPING_ON_LAYER LAYER_MOUSE
-
-#define BSP_NAV LT(LAYER_NAV, KC_BSPC)
-#define ENT_MBO LT(LAYER_MBO, KC_ENT)
-#define TAB_MED LT(LAYER_MEDIA, KC_TAB)
-#define ESC_SYM LT(LAYER_SYM, KC_ESC)
-#define SPC_NUM LT(LAYER_NUM, KC_SPC)
-#define SPC_MBO LT(LAYER_MBO, KC_SPC)
-#define MOUSE(KC) LT(LAYER_MOUSE, KC)
-
-#define USR_RDO KC_AGAIN
-#define USR_PST S(KC_INS)
-#define USR_CPY C(KC_INS)
-#define USR_CUT S(KC_DEL)
-#define USR_UND KC_UNDO
-
-#define MS_L KC_MS_LEFT
-#define MS_R KC_MS_RIGHT
-#define MS_D KC_MS_DOWN
-#define MS_U KC_MS_UP
-
-#define WH_L KC_MS_WH_LEFT
-#define WH_R KC_MS_WH_RIGHT
-#define WH_D KC_MS_WH_DOWN
-#define WH_U KC_MS_WH_UP
-
-// clang-format off
-/** Convenience macro. */
-#define _KC_LAYOUT_wrapper( \
- k00, 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, \
- ...) \
- KC_##k00, KC_##k01, KC_##k02, KC_##k03, KC_##k04, KC_##k05, KC_##k06, KC_##k07, KC_##k08, KC_##k09, \
- KC_##k10, KC_##k11, KC_##k12, KC_##k13, KC_##k14, KC_##k15, KC_##k16, KC_##k17, KC_##k18, KC_##k19, \
- KC_##k20, KC_##k21, KC_##k22, KC_##k23, KC_##k24, KC_##k25, KC_##k26, KC_##k27, KC_##k28, KC_##k29, \
- __VA_ARGS__
-#define KC_LAYOUT_wrapper(...) _KC_LAYOUT_wrapper(__VA_ARGS__)
-
-/** Base layer with BÉPO layout. */
-#define LAYOUT_LAYER_BASE_BEPO KC_LAYOUT_wrapper( \
- B, W, P, O, QUOT, DOT, V, D, L, J, \
- A, U, I, E, COMM, C, T, S, R, N, \
- Z, Y, X, SLSH, K, M, Q, G, H, F, \
- KC_A, SPC_MBO, TAB_MED, ESC_SYM, SPC_NUM, KC_A)
-
-/** Convenience key shorthands. */
-#define U_NA KC_NO // Present but not available for use.
-#define U_NU KC_NO // Available but not used.
-
-/** Convenience row shorthands. */
-#define ________________HOME_ROW_NA________________ U_NA, U_NA, U_NA, U_NA, U_NA
-#define ______________HOME_ROW_GASC_L______________ KC_LGUI, KC_LALT, KC_LSFT, KC_LCTL, U_NA
-#define ______________HOME_ROW_ALGR_L______________ U_NA, KC_ALGR, U_NA, U_NA, U_NA
-#define ______________HOME_ROW_GASC_R______________ U_NA, KC_LCTL, KC_LSFT, KC_LALT, KC_LGUI
-#define ______________HOME_ROW_ALGR_R______________ U_NA, U_NA, U_NA, KC_ALGR, U_NA
-
-/** Layers. */
-
-// Buttons.
-#define LAYOUT_LAYER_MBO \
- ________________HOME_ROW_NA________________, USR_RDO, USR_PST, USR_CPY, USR_CUT, USR_UND, \
- ______________HOME_ROW_GASC_L______________, KC_BSPC, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, \
- KC_BTN3, KC_ALGR, KC_BTN2, KC_BTN1, U_NA, KC_DEL, KC_HOME, KC_PGDN, KC_PGUP, KC_END, \
- U_NA, U_NA, U_NA, KC_ENT, KC_ENT, KC_ENT
-
-// Media.
-#define LAYOUT_LAYER_MEDIA \
- ________________HOME_ROW_NA________________, USR_RDO, USR_PST, USR_CPY, USR_CUT, USR_UND, \
- ______________HOME_ROW_GASC_L______________, U_NU, MS_L, MS_D, MS_U, MS_R, \
- ______________HOME_ROW_ALGR_L______________, U_NU, WH_L, WH_D, WH_U, WH_R, \
- U_NA, U_NA, U_NA, KC_BTN1, KC_BTN3, KC_BTN2
-
-// Navigation.
-#define LAYOUT_LAYER_NAV \
- ________________HOME_ROW_NA________________, RGB_TOG, RGB_MOD, RGB_HUI, RGB_SAI, RGB_VAI, \
- ______________HOME_ROW_GASC_L______________, U_NU, KC_MPRV, KC_VOLD, KC_VOLU, KC_MNXT, \
- ______________HOME_ROW_ALGR_L______________, U_NU, U_NU, U_NU, U_NU, U_NU, \
- U_NA, U_NA, U_NA, KC_MSTP, KC_MPLY, U_NA
-
-// Mouse.
-#define LAYOUT_LAYER_MOUSE \
- S_D_MOD, USR_PST, USR_CPY, USR_CUT, USR_UND, USR_RDO, USR_PST, USR_CPY, USR_CUT, USR_UND, \
- DPI_MOD, DRGSCRL, KC_LSFT, DRGSCRL, _______, U_NU, MS_L, MS_D, MS_U, MS_R, \
- USR_RDO, USR_PST, USR_CPY, KC_BTN3, USR_UND, U_NU, WH_L, WH_D, WH_U, WH_R, \
- KC_BTN3, KC_BTN1, KC_BTN2, KC_BTN1, KC_BTN3, KC_BTN2
-
-// Symbols.
-#define LAYOUT_LAYER_SYM \
- KC_LCBR, KC_AMPR, KC_ASTR, KC_LPRN, KC_RCBR, ________________HOME_ROW_NA________________, \
- KC_COLN, KC_DLR, KC_PERC, KC_CIRC, KC_PLUS, ______________HOME_ROW_GASC_R______________, \
- KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_MINS, ______________HOME_ROW_ALGR_R______________, \
- U_NA, KC_RPRN, KC_LPRN, U_NA, U_NA, U_NA
-
-// Numerals.
-#define LAYOUT_LAYER_NUM \
- KC_LBRC, KC_7, KC_8, KC_9, KC_RBRC, ________________HOME_ROW_NA________________, \
- KC_SCLN, KC_4, KC_5, KC_6, KC_EQL, ______________HOME_ROW_GASC_R______________, \
- KC_GRV, KC_1, KC_2, KC_3, KC_UNDS, ______________HOME_ROW_ALGR_R______________, \
- U_NA, KC_0, KC_MINS, U_NA, U_NA, U_NA
-
-// Function keys.
-#define LAYOUT_LAYER_FUN \
- KC_F12, KC_F7, KC_F8, KC_F9, KC_PSCR, ________________HOME_ROW_NA________________, \
- KC_F11, KC_F4, KC_F5, KC_F6, KC_SCRL, ______________HOME_ROW_GASC_R______________, \
- KC_F10, KC_F1, KC_F2, KC_F3, KC_PAUS, ______________HOME_ROW_ALGR_R______________,\
- U_NA, KC_APP, KC_TAB, U_NA, U_NA, U_NA
-
-/**
- * Add Home Row mod to a layout.
- *
- * Expects a 10-key per row layout. Adds support for GASC (Gui, Alt, Shift, Ctl)
- * home row. The layout passed in parameter must contain at least 20 keycodes.
- *
- * This is meant to be used with `LAYOUT_LAYER_BASE_BEPO` defined above, eg.:
- *
- * HOME_ROW_MOD_GASC(LAYOUT_LAYER_BASE_BEPO)
- */
-#define _HOME_ROW_MOD_GASC( \
- L00, L01, L02, L03, L04, R05, R06, R07, R08, R09, \
- L10, L11, L12, L13, L14, R15, R16, R17, R18, R19, \
- ...) \
- L00, L01, L02, L03, L04, \
- R05, R06, R07, R08, R09, \
- LGUI_T(L10), LALT_T(L11), LSFT_T(L12), LCTL_T(L13), L14, \
- R15, RCTL_T(R16), RSFT_T(R17), LALT_T(R18), RGUI_T(R19), \
- __VA_ARGS__
-#define HOME_ROW_MOD_GASC(...) _HOME_ROW_MOD_GASC(__VA_ARGS__)
-
-/**
- * Add mouse layer keys to a layout.
- *
- * Expects a 10-key per row layout. The layout passed in parameter must contain
- * at least 30 keycodes.
- *
- * This is meant to be used with `LAYOUT_LAYER_BASE_BEPO` defined above, eg.:
- *
- * MOUSE_MOD(LAYOUT_LAYER_BASE_BEPO)
- */
-#define _MOUSE_MOD( \
- L00, L01, L02, L03, L04, R05, R06, R07, R08, R09, \
- L10, L11, L12, L13, L14, R15, R16, R17, R18, R19, \
- L20, L21, L22, L23, L24, R25, R26, R27, R28, R29, \
- ...) \
- L00, L01, L02, L03, L04, \
- R05, R06, R07, R08, R09, \
- L10, L11, L12, L13, L14, \
- R15, R16, R17, R18, R19, \
- L20, MOUSE(L21), L22, L23, L24, \
- R25, R26, R27, R28, MOUSE(R29), \
- __VA_ARGS__
-#define MOUSE_MOD(...) _MOUSE_MOD(__VA_ARGS__)
-
-#define LAYOUT_wrapper(...) LAYOUT_split_3x5_3(__VA_ARGS__)
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [LAYER_BASE] = LAYOUT_wrapper(
- MOUSE_MOD(HOME_ROW_MOD_GASC(LAYOUT_LAYER_BASE_BEPO))
- ),
- [LAYER_MBO] = LAYOUT_wrapper(LAYOUT_LAYER_MBO),
- [LAYER_MEDIA] = LAYOUT_wrapper(LAYOUT_LAYER_MEDIA),
- [LAYER_NAV] = LAYOUT_wrapper(LAYOUT_LAYER_NAV),
- [LAYER_MOUSE] = LAYOUT_wrapper(LAYOUT_LAYER_MOUSE),
- [LAYER_SYM] = LAYOUT_wrapper(LAYOUT_LAYER_SYM),
- [LAYER_NUM] = LAYOUT_wrapper(LAYOUT_LAYER_NUM),
- [LAYER_FUN] = LAYOUT_wrapper(LAYOUT_LAYER_FUN),
-};
-// clang-format on
-
-#if defined(POINTING_DEVICE_ENABLE) && defined(DILEMMA_AUTO_SNIPING_ON_LAYER)
-layer_state_t layer_state_set_user(layer_state_t state) {
- dilemma_set_pointer_sniping_enabled(layer_state_cmp(state, DILEMMA_AUTO_SNIPING_ON_LAYER));
- return state;
-}
-#endif // POINTING_DEVICE_ENABLE && DILEMMA_AUTO_SNIPING_ON_LAYER
-
-#ifdef RGB_MATRIX_ENABLE
-// Forward-declare this helper function since it is defined in rgb_matrix.c.
-void rgb_matrix_update_pwm_buffers(void);
-#endif
-
-void shutdown_user(void) {
-#ifdef RGBLIGHT_ENABLE
- rgblight_enable_noeeprom();
- rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_LIGHT);
- rgblight_setrgb_red();
-#endif // RGBLIGHT_ENABLE
-#ifdef RGB_MATRIX_ENABLE
- rgb_matrix_set_color_all(RGB_RED);
- rgb_matrix_update_pwm_buffers();
-#endif // RGB_MATRIX_ENABLE
-}
diff --git a/keyboards/bastardkb/dilemma/3x5_3/keymaps/bstiq/readme.md b/keyboards/bastardkb/dilemma/3x5_3/keymaps/bstiq/readme.md
deleted file mode 100644
index df1f43cbcb38..000000000000
--- a/keyboards/bastardkb/dilemma/3x5_3/keymaps/bstiq/readme.md
+++ /dev/null
@@ -1,3 +0,0 @@
-# Dilemma @bstiq keymap
-
-Inspired from Miryoku, using home-rows.
diff --git a/keyboards/bastardkb/dilemma/3x5_3/rules.mk b/keyboards/bastardkb/dilemma/3x5_3/rules.mk
index 2b52cffbf707..3cdb41160c21 100644
--- a/keyboards/bastardkb/dilemma/3x5_3/rules.mk
+++ b/keyboards/bastardkb/dilemma/3x5_3/rules.mk
@@ -22,6 +22,3 @@ POINTING_DEVICE_ENABLE = yes
POINTING_DEVICE_DRIVER = cirque_pinnacle_spi
SPLIT_KEYBOARD = yes
-
-# RP2040-specific options
-PICO_INTRINSICS_ENABLED = no # ATM Unsupported by ChibiOS.
diff --git a/keyboards/bastardkb/dilemma/4x6_4/4x6_4.c b/keyboards/bastardkb/dilemma/4x6_4/4x6_4.c
new file mode 100644
index 000000000000..c80ccbc8eb83
--- /dev/null
+++ b/keyboards/bastardkb/dilemma/4x6_4/4x6_4.c
@@ -0,0 +1,59 @@
+/**
+ * Copyright 2020 Christopher Courtney (@drashna)
+ * Copyright 2021 Quentin LEBASTARD
+ * Copyright 2022 Charly Delay (@0xcharly)
+ * Copyright 2023 casuanoob (@casuanoob)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Publicw 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 .
+ */
+
+#include "quantum.h"
+
+#ifdef SWAP_HANDS_ENABLE
+const keypos_t PROGMEM hand_swap_config[MATRIX_ROWS][MATRIX_COLS] = {
+ /* Left hand, matrix positions */
+ {{0, 5}, {1, 5}, {2, 5}, {3, 5}, {4, 5}, {5, 5}},
+ {{0, 6}, {1, 6}, {2, 6}, {3, 6}, {4, 6}, {5, 6}},
+ {{0, 7}, {1, 7}, {2, 7}, {3, 7}, {4, 7}, {5, 7}},
+ {{0, 8}, {1, 8}, {2, 8}, {3, 8}, {4, 8}, {5, 8}},
+ {{0, 9}, {1, 9}, {2, 9}, {3, 9}, {4, 9}, {5, 9}},
+ /* Right hand, matrix positions */
+ {{0, 0}, {1, 0}, {2, 0}, {3, 0}, {4, 0}, {5, 0}},
+ {{0, 1}, {1, 1}, {2, 1}, {3, 1}, {4, 1}, {5, 1}},
+ {{0, 2}, {1, 2}, {2, 2}, {3, 2}, {4, 2}, {5, 2}},
+ {{0, 3}, {1, 3}, {2, 3}, {3, 3}, {4, 3}, {5, 3}},
+ {{0, 4}, {1, 4}, {2, 4}, {3, 4}, {4, 4}, {5, 4}}
+};
+
+# ifdef ENCODER_MAP_ENABLE
+const uint8_t PROGMEM encoder_hand_swap_config[NUM_ENCODERS] = {1, 0};
+# endif
+#endif
+
+#ifdef ENCODER_ENABLE
+bool encoder_update_kb(uint8_t index, bool clockwise) {
+ if (!encoder_update_user(index, clockwise)) {
+ return false;
+ }
+ switch (index) {
+ case 0: // Left-half encoder, mouse scroll.
+ tap_code(clockwise ? KC_MS_WH_DOWN : KC_MS_WH_UP);
+ break;
+ case 1: // Right-half encoder, volume control.
+ tap_code(clockwise ? KC_AUDIO_VOL_UP : KC_AUDIO_VOL_DOWN);
+ break;
+ }
+ return true;
+}
+#endif // ENCODER_ENABLE
diff --git a/keyboards/bastardkb/dilemma/4x6_4/config.h b/keyboards/bastardkb/dilemma/4x6_4/config.h
new file mode 100644
index 000000000000..9c76cb76f9e0
--- /dev/null
+++ b/keyboards/bastardkb/dilemma/4x6_4/config.h
@@ -0,0 +1,54 @@
+/**
+ * Copyright 2022 Charly Delay (@0xcharly)
+ * Copyright 2023 casuanoob (@casuanoob)
+ *
+ * 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 .
+ */
+
+#pragma once
+
+/* Handedness. */
+#define SPLIT_HAND_PIN GP29
+#define SPLIT_HAND_PIN_LOW_IS_LEFT // High -> right, Low -> left.
+
+/* VBUS detection. */
+#define USB_VBUS_PIN GP19
+
+/* CRC. */
+#define CRC8_USE_TABLE
+#define CRC8_OPTIMIZE_SPEED
+
+/* Cirque trackpad over SPI. */
+#define SPI_DRIVER SPID0
+#define SPI_SCK_PIN GP22
+#define SPI_MOSI_PIN GP23
+#define SPI_MISO_PIN GP20
+#define POINTING_DEVICE_CS_PIN GP21
+#undef CIRQUE_PINNACLE_DIAMETER_MM
+#define CIRQUE_PINNACLE_DIAMETER_MM 40
+
+/* Reset. */
+#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET
+#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET_LED GP17
+#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET_TIMEOUT 500U
+
+/* RGB matrix support. */
+#define SPLIT_TRANSPORT_MIRROR
+#define RGB_DISABLE_WHEN_USB_SUSPENDED
+#define RGB_MATRIX_KEYPRESSES
+#define RGB_MATRIX_FRAMEBUFFER_EFFECTS
+
+// Startup values.
+#define RGB_MATRIX_DEFAULT_VAL 64
+#define RGB_MATRIX_DEFAULT_SPD 32
diff --git a/keyboards/bastardkb/dilemma/4x6_4/halconf.h b/keyboards/bastardkb/dilemma/4x6_4/halconf.h
new file mode 100644
index 000000000000..57d15376d63a
--- /dev/null
+++ b/keyboards/bastardkb/dilemma/4x6_4/halconf.h
@@ -0,0 +1,22 @@
+/**
+ * Copyright 2022 Charly Delay (@0xcharly)
+ *
+ * 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 .
+ */
+
+#pragma once
+
+#define HAL_USE_SPI TRUE
+
+#include_next
diff --git a/keyboards/bastardkb/dilemma/4x6_4/info.json b/keyboards/bastardkb/dilemma/4x6_4/info.json
new file mode 100644
index 000000000000..ba07a7fccf28
--- /dev/null
+++ b/keyboards/bastardkb/dilemma/4x6_4/info.json
@@ -0,0 +1,266 @@
+{
+ "keyboard_name": "Dilemma Max",
+ "usb": {
+ "device_version": "1.0.0",
+ "pid": "0x1837"
+ },
+ "processor": "RP2040",
+ "bootloader": "rp2040",
+ "board": "GENERIC_RP_RP2040",
+ "matrix_pins": {
+ "cols": ["GP14", "GP8", "GP9", "GP7", "GP6", "GP28"],
+ "rows": ["GP15", "GP4", "GP5", "GP27", "GP26"]
+ },
+ "diode_direction": "ROW2COL",
+ "split": {
+ "enabled": true,
+ "soft_serial_pin": "GP1",
+ "bootmagic": {
+ "matrix": [5, 0]
+ }
+ },
+ "encoder": {
+ "enabled" : true,
+ "rotary" : [
+ {"pin_a": "GP25", "pin_b": "GP24"}
+ ]
+ },
+ "features": {
+ "bootmagic": true,
+ "command": false,
+ "console": false,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true,
+ "rgb_matrix": true,
+ "caps_word": true,
+ "tri_layer": true
+ },
+ "ws2812": {
+ "pin": "GP10",
+ "driver": "vendor"
+ },
+ "rgb_matrix": {
+ "driver": "ws2812",
+ "split_count": [52, 52],
+ "max_brightness": 176,
+ "center_point": [112, 28],
+ "animations": {
+ "solid_color": true,
+ "alphas_mods": true,
+ "gradient_up_down": true,
+ "gradient_left_right": true,
+ "breathing": true,
+ "band_sat": true,
+ "band_val": true,
+ "band_pinwheel_sat": true,
+ "band_pinwheel_val": true,
+ "band_spiral_sat": true,
+ "band_spiral_val": true,
+ "cycle_all": true,
+ "cycle_left_right": true,
+ "cycle_up_down": true,
+ "cycle_out_in": true,
+ "cycle_out_in_dual": true,
+ "rainbow_moving_chevron": true,
+ "cycle_pinwheel": true,
+ "cycle_spiral": true,
+ "dual_beacon": true,
+ "rainbow_beacon": true,
+ "rainbow_pinwheels": true,
+ "raindrops": true,
+ "jellybean_raindrops": true,
+ "hue_breathing": true,
+ "hue_pendulum": true,
+ "hue_wave": true,
+ "pixel_fractal": true,
+ "pixel_flow": true,
+ "pixel_rain": true,
+ "typing_heatmap": true,
+ "digital_rain": true,
+ "solid_reactive_simple": true,
+ "solid_reactive": true,
+ "solid_reactive_wide": true,
+ "solid_reactive_multiwide": true,
+ "solid_reactive_cross": true,
+ "solid_reactive_multicross": true,
+ "solid_reactive_nexus": true,
+ "solid_reactive_multinexus": true,
+ "splash": true,
+ "multisplash": true,
+ "solid_splash": true,
+ "solid_multisplash": true
+ },
+ "layout": [
+ {"x": 81, "y": 4, "flags": 2},
+ {"x": 65, "y": 2, "flags": 2},
+ {"x": 40, "y": 0, "flags": 2},
+ {"x": 29, "y": 9, "flags": 2},
+ {"x": 16, "y": 9, "flags": 2},
+ {"x": 0, "y": 16, "flags": 2},
+ {"x": 0, "y": 29, "flags": 2},
+ {"x": 0, "y": 40, "flags": 2},
+ {"x": 5, "y": 50, "flags": 2},
+ {"x": 17, "y": 49, "flags": 2},
+ {"x": 28, "y": 44, "flags": 2},
+ {"x": 40, "y": 43, "flags": 2},
+ {"x": 49, "y": 51, "flags": 2},
+ {"x": 62, "y": 53, "flags": 2},
+ {"x": 73, "y": 56, "flags": 2},
+ {"x": 85, "y": 59, "flags": 2},
+ {"x": 100, "y": 64, "flags": 2},
+ {"x": 106, "y": 55, "flags": 2},
+ {"x": 107, "y": 45, "flags": 2},
+ {"x": 91, "y": 51, "flags": 2},
+ {"x": 94, "y": 40, "flags": 2},
+ {"x": 108, "y": 33, "flags": 2},
+ {"x": 106, "y": 25, "flags": 2},
+ {"x": 108, "y": 16, "flags": 2},
+
+ {"matrix": [0, 5], "x": 75, "y": 10, "flags": 4},
+ {"matrix": [0, 4], "x": 62, "y": 9, "flags": 4},
+ {"matrix": [0, 3], "x": 49, "y": 6, "flags": 4},
+ {"matrix": [0, 2], "x": 35, "y": 10, "flags": 4},
+ {"matrix": [0, 1], "x": 22, "y": 16, "flags": 4},
+ {"matrix": [0, 0], "x": 9, "y": 16, "flags": 1},
+ {"matrix": [1, 0], "x": 9, "y": 27, "flags": 1},
+ {"matrix": [1, 1], "x": 22, "y": 27, "flags": 4},
+ {"matrix": [1, 2], "x": 35, "y": 20, "flags": 4},
+ {"matrix": [1, 3], "x": 49, "y": 17, "flags": 4},
+ {"matrix": [1, 4], "x": 62, "y": 19, "flags": 4},
+ {"matrix": [1, 5], "x": 75, "y": 21, "flags": 4},
+ {"matrix": [2, 5], "x": 75, "y": 31, "flags": 4},
+ {"matrix": [2, 4], "x": 62, "y": 30, "flags": 4},
+ {"matrix": [2, 3], "x": 49, "y": 27, "flags": 4},
+ {"matrix": [2, 2], "x": 35, "y": 31, "flags": 4},
+ {"matrix": [2, 1], "x": 22, "y": 37, "flags": 4},
+ {"matrix": [2, 0], "x": 9, "y": 37, "flags": 1},
+ {"matrix": [3, 0], "x": 9, "y": 48, "flags": 1},
+ {"matrix": [3, 1], "x": 22, "y": 48, "flags": 4},
+ {"matrix": [3, 2], "x": 35, "y": 41, "flags": 4},
+ {"matrix": [3, 3], "x": 49, "y": 38, "flags": 4},
+ {"matrix": [3, 4], "x": 62, "y": 40, "flags": 4},
+ {"matrix": [3, 5], "x": 75, "y": 42, "flags": 4},
+ {"matrix": [4, 3], "x": 54, "y": 51, "flags": 4},
+ {"matrix": [4, 1], "x": 68, "y": 53, "flags": 4},
+ {"matrix": [4, 2], "x": 81, "y": 57, "flags": 4},
+ {"matrix": [4, 4], "x": 92, "y": 64, "flags": 4},
+
+ {"x": 143, "y": 4, "flags": 2},
+ {"x": 159, "y": 2, "flags": 2},
+ {"x": 184, "y": 0, "flags": 2},
+ {"x": 195, "y": 9, "flags": 2},
+ {"x": 208, "y": 9, "flags": 2},
+ {"x": 224, "y": 16, "flags": 2},
+ {"x": 224, "y": 29, "flags": 2},
+ {"x": 224, "y": 40, "flags": 2},
+ {"x": 219, "y": 50, "flags": 2},
+ {"x": 207, "y": 49, "flags": 2},
+ {"x": 196, "y": 44, "flags": 2},
+ {"x": 184, "y": 43, "flags": 2},
+ {"x": 176, "y": 51, "flags": 2},
+ {"x": 162, "y": 53, "flags": 2},
+ {"x": 151, "y": 56, "flags": 2},
+ {"x": 139, "y": 59, "flags": 2},
+ {"x": 124, "y": 64, "flags": 2},
+ {"x": 118, "y": 55, "flags": 2},
+ {"x": 117, "y": 45, "flags": 2},
+ {"x": 133, "y": 51, "flags": 2},
+ {"x": 130, "y": 40, "flags": 2},
+ {"x": 116, "y": 33, "flags": 2},
+ {"x": 118, "y": 25, "flags": 2},
+ {"x": 116, "y": 16, "flags": 2},
+
+ {"matrix": [5, 5], "x": 149, "y": 10, "flags": 4},
+ {"matrix": [5, 4], "x": 162, "y": 9, "flags": 4},
+ {"matrix": [5, 3], "x": 175, "y": 6, "flags": 4},
+ {"matrix": [5, 2], "x": 189, "y": 10, "flags": 4},
+ {"matrix": [5, 1], "x": 202, "y": 16, "flags": 4},
+ {"matrix": [5, 0], "x": 215, "y": 16, "flags": 1},
+ {"matrix": [6, 0], "x": 215, "y": 27, "flags": 1},
+ {"matrix": [6, 1], "x": 202, "y": 27, "flags": 4},
+ {"matrix": [6, 2], "x": 189, "y": 20, "flags": 4},
+ {"matrix": [6, 3], "x": 175, "y": 17, "flags": 4},
+ {"matrix": [6, 4], "x": 162, "y": 19, "flags": 4},
+ {"matrix": [6, 5], "x": 149, "y": 21, "flags": 4},
+ {"matrix": [7, 5], "x": 149, "y": 31, "flags": 4},
+ {"matrix": [7, 4], "x": 162, "y": 30, "flags": 4},
+ {"matrix": [7, 3], "x": 175, "y": 27, "flags": 4},
+ {"matrix": [7, 2], "x": 189, "y": 31, "flags": 4},
+ {"matrix": [7, 1], "x": 202, "y": 37, "flags": 4},
+ {"matrix": [7, 0], "x": 215, "y": 37, "flags": 1},
+ {"matrix": [8, 0], "x": 215, "y": 48, "flags": 1},
+ {"matrix": [8, 1], "x": 202, "y": 48, "flags": 4},
+ {"matrix": [8, 2], "x": 189, "y": 41, "flags": 4},
+ {"matrix": [8, 3], "x": 175, "y": 38, "flags": 4},
+ {"matrix": [8, 4], "x": 162, "y": 40, "flags": 4},
+ {"matrix": [8, 5], "x": 149, "y": 42, "flags": 4},
+ {"matrix": [9, 4], "x": 170, "y": 51, "flags": 4},
+ {"matrix": [9, 2], "x": 156, "y": 53, "flags": 4},
+ {"matrix": [9, 1], "x": 143, "y": 57, "flags": 4},
+ {"matrix": [9, 3], "x": 132, "y": 64, "flags": 4}
+ ]
+ },
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"label":"L00", "matrix": [0, 0], "x":0, "y":0},
+ {"label":"L01", "matrix": [0, 1], "x":1, "y":0},
+ {"label":"L02", "matrix": [0, 2], "x":2, "y":0},
+ {"label":"L03", "matrix": [0, 3], "x":3, "y":0},
+ {"label":"L04", "matrix": [0, 4], "x":4, "y":0},
+ {"label":"L05", "matrix": [0, 5], "x":5, "y":0},
+ {"label":"R05", "matrix": [5, 5], "x":8, "y":0},
+ {"label":"R04", "matrix": [5, 4], "x":9, "y":0},
+ {"label":"R03", "matrix": [5, 3], "x":10, "y":0},
+ {"label":"R02", "matrix": [5, 2], "x":11, "y":0},
+ {"label":"R01", "matrix": [5, 1], "x":12, "y":0},
+ {"label":"R00", "matrix": [5, 0], "x":13, "y":0},
+ {"label":"L10", "matrix": [1, 0], "x":0, "y":1},
+ {"label":"L11", "matrix": [1, 1], "x":1, "y":1},
+ {"label":"L12", "matrix": [1, 2], "x":2, "y":1},
+ {"label":"L13", "matrix": [1, 3], "x":3, "y":1},
+ {"label":"L14", "matrix": [1, 4], "x":4, "y":1},
+ {"label":"L15", "matrix": [1, 5], "x":5, "y":1},
+ {"label":"R15", "matrix": [6, 5], "x":8, "y":1},
+ {"label":"R14", "matrix": [6, 4], "x":9, "y":1},
+ {"label":"R13", "matrix": [6, 3], "x":10, "y":1},
+ {"label":"R12", "matrix": [6, 2], "x":11, "y":1},
+ {"label":"R11", "matrix": [6, 1], "x":12, "y":1},
+ {"label":"R10", "matrix": [6, 0], "x":13, "y":1},
+ {"label":"L20", "matrix": [2, 0], "x":0, "y":2},
+ {"label":"L21", "matrix": [2, 1], "x":1, "y":2},
+ {"label":"L22", "matrix": [2, 2], "x":2, "y":2},
+ {"label":"L23", "matrix": [2, 3], "x":3, "y":2},
+ {"label":"L24", "matrix": [2, 4], "x":4, "y":2},
+ {"label":"L25", "matrix": [2, 5], "x":5, "y":2},
+ {"label":"R25", "matrix": [7, 5], "x":8, "y":2},
+ {"label":"R24", "matrix": [7, 4], "x":9, "y":2},
+ {"label":"R23", "matrix": [7, 3], "x":10, "y":2},
+ {"label":"R22", "matrix": [7, 2], "x":11, "y":2},
+ {"label":"R21", "matrix": [7, 1], "x":12, "y":2},
+ {"label":"R20", "matrix": [7, 0], "x":13, "y":2},
+ {"label":"L30", "matrix": [3, 0], "x":0, "y":3},
+ {"label":"L31", "matrix": [3, 1], "x":1, "y":3},
+ {"label":"L32", "matrix": [3, 2], "x":2, "y":3},
+ {"label":"L33", "matrix": [3, 3], "x":3, "y":3},
+ {"label":"L34", "matrix": [3, 4], "x":4, "y":3},
+ {"label":"L35", "matrix": [3, 5], "x":5, "y":3},
+ {"label":"R35", "matrix": [8, 5], "x":8, "y":3},
+ {"label":"R34", "matrix": [8, 4], "x":9, "y":3},
+ {"label":"R33", "matrix": [8, 3], "x":10, "y":3},
+ {"label":"R32", "matrix": [8, 2], "x":11, "y":3},
+ {"label":"R31", "matrix": [8, 1], "x":12, "y":3},
+ {"label":"R30", "matrix": [8, 0], "x":13, "y":3},
+ {"label":"L43", "matrix": [4, 3], "x":2.5, "y":4},
+ {"label":"L41", "matrix": [4, 1], "x":3.5, "y":4},
+ {"label":"L42", "matrix": [4, 2], "x":4.5, "y":4},
+ {"label":"L44", "matrix": [4, 4], "x":5.5, "y":4},
+ {"label":"R44", "matrix": [9, 4], "x":7.5, "y":4},
+ {"label":"R42", "matrix": [9, 2], "x":8.5, "y":4},
+ {"label":"R41", "matrix": [9, 1], "x":9.5, "y":4},
+ {"label":"R43", "matrix": [9, 3], "x":10.5, "y":4}
+ ]
+ }
+ }
+}
diff --git a/keyboards/bastardkb/dilemma/4x6_4/keymaps/default/keymap.c b/keyboards/bastardkb/dilemma/4x6_4/keymaps/default/keymap.c
new file mode 100644
index 000000000000..2e5564f5e931
--- /dev/null
+++ b/keyboards/bastardkb/dilemma/4x6_4/keymaps/default/keymap.c
@@ -0,0 +1,73 @@
+/**
+ * Copyright 2021 Charly Delay (@0xcharly)
+ * Copyright 2023 casuanoob (@casuanoob)
+ *
+ * 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 .
+ */
+#include QMK_KEYBOARD_H
+
+enum dilemma_keymap_layers {
+ LAYER_BASE = 0,
+ LAYER_LOWER,
+ LAYER_RAISE,
+};
+
+#define LOWER MO(LAYER_LOWER)
+#define RAISE MO(LAYER_RAISE)
+
+// clang-format off
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [LAYER_BASE] = LAYOUT(
+ // ╭──────────────────────────────────────────────────────╮ ╭──────────────────────────────────────────────────────╮
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,
+ // ├──────────────────────────────────────────────────────┤ ├──────────────────────────────────────────────────────┤
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS,
+ // ├──────────────────────────────────────────────────────┤ ├──────────────────────────────────────────────────────┤
+ KC_LSFT, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
+ // ├──────────────────────────────────────────────────────┤ ├──────────────────────────────────────────────────────┤
+ KC_LCTL, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_LALT,
+ // ╰──────────────────────────────────────────────────────┤ ├──────────────────────────────────────────────────────╯
+ KC_LALT, KC_BSPC, KC_SPC, LOWER, RAISE, KC_ENT, KC_DEL, KC_LGUI
+ // ╰───────────────────────────────────╯ ╰───────────────────────────────────╯
+ ),
+
+ [LAYER_LOWER] = LAYOUT(
+ // ╭──────────────────────────────────────────────────────╮ ╭──────────────────────────────────────────────────────╮
+ KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_UNDS,
+ // ├──────────────────────────────────────────────────────┤ ├──────────────────────────────────────────────────────┤
+ RGB_MOD, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_LBRC, KC_P7, KC_P8, KC_P9, KC_RBRC, XXXXXXX,
+ // ├──────────────────────────────────────────────────────┤ ├──────────────────────────────────────────────────────┤
+ RGB_TOG, KC_LGUI, KC_LALT, KC_LCTL, KC_LSFT, XXXXXXX, KC_PPLS, KC_P4, KC_P5, KC_P6, KC_PMNS, KC_PEQL,
+ // ├──────────────────────────────────────────────────────┤ ├──────────────────────────────────────────────────────┤
+ RGB_RMOD, XXXXXXX, XXXXXXX, XXXXXXX, EE_CLR, QK_BOOT, KC_PAST, KC_P1, KC_P2, KC_P3, KC_PSLS, KC_PDOT,
+ // ╰──────────────────────────────────────────────────────┤ ├──────────────────────────────────────────────────────╯
+ XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, _______, _______, _______
+ // ╰───────────────────────────────────╯ ╰───────────────────────────────────╯
+ ),
+
+ [LAYER_RAISE] = LAYOUT(
+ // ╭──────────────────────────────────────────────────────╮ ╭──────────────────────────────────────────────────────╮
+ KC_F12, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
+ // ├──────────────────────────────────────────────────────┤ ├──────────────────────────────────────────────────────┤
+ KC_MNXT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_VOLU,
+ // ├──────────────────────────────────────────────────────┤ ├──────────────────────────────────────────────────────┤
+ KC_MPLY, KC_LEFT, KC_UP, KC_DOWN, KC_RGHT, XXXXXXX, XXXXXXX, KC_RSFT, KC_RCTL, KC_RALT, KC_RGUI, KC_MUTE,
+ // ├──────────────────────────────────────────────────────┤ ├──────────────────────────────────────────────────────┤
+ KC_MPRV, KC_HOME, KC_PGUP, KC_PGDN, KC_END, XXXXXXX, QK_BOOT, EE_CLR, XXXXXXX, XXXXXXX, XXXXXXX, KC_VOLD,
+ // ╰──────────────────────────────────────────────────────┤ ├──────────────────────────────────────────────────────╯
+ _______, _______, _______, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX
+ // ╰───────────────────────────────────╯ ╰───────────────────────────────────╯
+ ),
+};
+// clang-format on
diff --git a/keyboards/bastardkb/dilemma/4x6_4/keymaps/default/readme.md b/keyboards/bastardkb/dilemma/4x6_4/keymaps/default/readme.md
new file mode 100644
index 000000000000..2005c2fec91c
--- /dev/null
+++ b/keyboards/bastardkb/dilemma/4x6_4/keymaps/default/readme.md
@@ -0,0 +1,2 @@
+# Dilemma Max (4x6+4) default keymap
+
diff --git a/keyboards/bastardkb/dilemma/4x6_4/keymaps/via/config.h b/keyboards/bastardkb/dilemma/4x6_4/keymaps/via/config.h
new file mode 100644
index 000000000000..24322f990440
--- /dev/null
+++ b/keyboards/bastardkb/dilemma/4x6_4/keymaps/via/config.h
@@ -0,0 +1,20 @@
+/**
+ * Copyright 2021 Charly Delay (@0xcharly)
+ * Copyright 2023 casuanoob (@casuanoob)
+ *
+ * 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 .
+ */
+#pragma once
+
+#define DYNAMIC_KEYMAP_LAYER_COUNT 8
diff --git a/keyboards/bastardkb/dilemma/4x6_4/keymaps/via/keymap.c b/keyboards/bastardkb/dilemma/4x6_4/keymaps/via/keymap.c
new file mode 100644
index 000000000000..6ac228d7231f
--- /dev/null
+++ b/keyboards/bastardkb/dilemma/4x6_4/keymaps/via/keymap.c
@@ -0,0 +1,125 @@
+/**
+ * Copyright 2021 Charly Delay (@0xcharly)
+ * Copyright 2023 casuanoob (@casuanoob)
+ *
+ * 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 .
+ */
+#include QMK_KEYBOARD_H
+
+enum dilemma_keymap_layers {
+ LAYER_BASE = 0,
+ LAYER_LOWER,
+ LAYER_RAISE,
+ LAYER_POINTER,
+};
+
+// Automatically enable sniping-mode on the pointer layer.
+// #define DILEMMA_AUTO_SNIPING_ON_LAYER LAYER_POINTER
+
+#define LOWER MO(LAYER_LOWER)
+#define RAISE MO(LAYER_RAISE)
+#define PT_Z LT(LAYER_POINTER, KC_Z)
+#define PT_SLSH LT(LAYER_POINTER, KC_SLSH)
+
+#ifndef POINTING_DEVICE_ENABLE
+# define DRGSCRL KC_NO
+# define DPI_MOD KC_NO
+# define S_D_MOD KC_NO
+# define SNIPING KC_NO
+#endif // !POINTING_DEVICE_ENABLE
+
+// clang-format off
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [LAYER_BASE] = LAYOUT(
+ // ╭──────────────────────────────────────────────────────╮ ╭──────────────────────────────────────────────────────╮
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,
+ // ├──────────────────────────────────────────────────────┤ ├──────────────────────────────────────────────────────┤
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS,
+ // ├──────────────────────────────────────────────────────┤ ├──────────────────────────────────────────────────────┤
+ KC_LSFT, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
+ // ├──────────────────────────────────────────────────────┤ ├──────────────────────────────────────────────────────┤
+ KC_LCTL, PT_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, PT_SLSH, KC_LALT,
+ // ╰──────────────────────────────────────────────────────┤ ├──────────────────────────────────────────────────────╯
+ KC_LALT, KC_BSPC, KC_SPC, LOWER, RAISE, KC_ENT, KC_DEL, KC_MUTE
+ // ╰───────────────────────────────────╯ ╰───────────────────────────────────╯
+ ),
+
+ [LAYER_LOWER] = LAYOUT(
+ // ╭──────────────────────────────────────────────────────╮ ╭──────────────────────────────────────────────────────╮
+ KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_UNDS,
+ // ├──────────────────────────────────────────────────────┤ ├──────────────────────────────────────────────────────┤
+ RGB_MOD, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_LBRC, KC_P7, KC_P8, KC_P9, KC_RBRC, XXXXXXX,
+ // ├──────────────────────────────────────────────────────┤ ├──────────────────────────────────────────────────────┤
+ RGB_TOG, KC_LGUI, KC_LALT, KC_LCTL, KC_LSFT, XXXXXXX, KC_PPLS, KC_P4, KC_P5, KC_P6, KC_PMNS, KC_PEQL,
+ // ├──────────────────────────────────────────────────────┤ ├──────────────────────────────────────────────────────┤
+ RGB_RMOD, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_PAST, KC_P1, KC_P2, KC_P3, KC_PSLS, KC_PDOT,
+ // ╰──────────────────────────────────────────────────────┤ ├──────────────────────────────────────────────────────╯
+ XXXXXXX, XXXXXXX, XXXXXXX, _______, XXXXXXX, _______, XXXXXXX, XXXXXXX
+ // ╰───────────────────────────────────╯ ╰───────────────────────────────────╯
+ ),
+
+ [LAYER_RAISE] = LAYOUT(
+ // ╭──────────────────────────────────────────────────────╮ ╭──────────────────────────────────────────────────────╮
+ KC_F12, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
+ // ├──────────────────────────────────────────────────────┤ ├──────────────────────────────────────────────────────┤
+ KC_MNXT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_VOLU,
+ // ├──────────────────────────────────────────────────────┤ ├──────────────────────────────────────────────────────┤
+ KC_MPLY, KC_LEFT, KC_UP, KC_DOWN, KC_RGHT, XXXXXXX, XXXXXXX, KC_RSFT, KC_RCTL, KC_RALT, KC_RGUI, KC_MUTE,
+ // ├──────────────────────────────────────────────────────┤ ├──────────────────────────────────────────────────────┤
+ KC_MPRV, KC_HOME, KC_PGUP, KC_PGDN, KC_END, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_VOLD,
+ // ╰──────────────────────────────────────────────────────┤ ├──────────────────────────────────────────────────────╯
+ XXXXXXX, _______, _______, XXXXXXX, _______, XXXXXXX, XXXXXXX, XXXXXXX
+ // ╰───────────────────────────────────╯ ╰───────────────────────────────────╯
+ ),
+
+ [LAYER_POINTER] = LAYOUT(
+ // ╭──────────────────────────────────────────────────────╮ ╭──────────────────────────────────────────────────────╮
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ // ├──────────────────────────────────────────────────────┤ ├──────────────────────────────────────────────────────┤
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, DPI_MOD, S_D_MOD, S_D_MOD, DPI_MOD, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ // ├──────────────────────────────────────────────────────┤ ├──────────────────────────────────────────────────────┤
+ XXXXXXX, KC_LGUI, KC_LALT, KC_LCTL, KC_LSFT, XXXXXXX, XXXXXXX, KC_RSFT, KC_RCTL, KC_RALT, KC_RGUI, XXXXXXX,
+ // ├──────────────────────────────────────────────────────┤ ├──────────────────────────────────────────────────────┤
+ XXXXXXX, _______, DRGSCRL, SNIPING, EE_CLR, QK_BOOT, QK_BOOT, EE_CLR, SNIPING, DRGSCRL, _______, XXXXXXX,
+ // ╰──────────────────────────────────────────────────────┤ ├──────────────────────────────────────────────────────╯
+ XXXXXXX, KC_BTN2, KC_BTN1, KC_BTN3, KC_BTN3, KC_BTN1, KC_BTN2, XXXXXXX
+ // ╰───────────────────────────────────╯ ╰───────────────────────────────────╯
+ ),
+};
+// clang-format on
+
+#ifdef POINTING_DEVICE_ENABLE
+# ifdef DILEMMA_AUTO_SNIPING_ON_LAYER
+layer_state_t layer_state_set_user(layer_state_t state) {
+ dilemma_set_pointer_sniping_enabled(layer_state_cmp(state, DILEMMA_AUTO_SNIPING_ON_LAYER));
+ return state;
+}
+# endif // DILEMMA_AUTO_SNIPING_ON_LAYER
+#endif // POINTING_DEVICE_ENABLEE
+
+#ifdef RGB_MATRIX_ENABLE
+// Forward-declare this helper function since it is defined in rgb_matrix.c.
+void rgb_matrix_update_pwm_buffers(void);
+#endif
+
+#ifdef ENCODER_MAP_ENABLE
+// clang-format off
+const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
+ [LAYER_BASE] = {ENCODER_CCW_CW(KC_WH_U, KC_WH_D), ENCODER_CCW_CW(KC_VOLU, KC_VOLD)},
+ [LAYER_LOWER] = {ENCODER_CCW_CW(KC_UP, KC_DOWN), ENCODER_CCW_CW(KC_LEFT, KC_RGHT)},
+ [LAYER_RAISE] = {ENCODER_CCW_CW(KC_PGUP, KC_PGDN), ENCODER_CCW_CW(KC_VOLU, KC_VOLD)},
+ [LAYER_POINTER] = {ENCODER_CCW_CW(RGB_HUD, RGB_HUI), ENCODER_CCW_CW(RGB_SAD, RGB_SAI)},
+};
+// clang-format on
+#endif // ENCODER_MAP_ENABLE
diff --git a/keyboards/bastardkb/dilemma/4x6_4/keymaps/via/readme.md b/keyboards/bastardkb/dilemma/4x6_4/keymaps/via/readme.md
new file mode 100644
index 000000000000..f3636c8a40e3
--- /dev/null
+++ b/keyboards/bastardkb/dilemma/4x6_4/keymaps/via/readme.md
@@ -0,0 +1,47 @@
+# Dilemma Max `via` keymap
+
+The Dilemma Max `via` keymap is based on the original [Dactyl Manuform](../../../../../handwired/dactyl_manuform) default keymap, with some features and changes specific to the Dilemma.
+
+This layout also supports VIA.
+
+## Customizing the keymap
+
+### Dynamic DPI scaling
+
+Use the following keycodes to change the default DPI:
+
+- `POINTER_DEFAULT_DPI_FORWARD`: increases the DPI; decreases when shifted;
+- `POINTER_DEFAULT_DPI_REVERSE`: decreases the DPI; increases when shifted.
+
+There's a maximum of 16 possible values for the sniping mode DPI. See the [Dilemma documentation](../../README.md) for more information.
+
+Use the following keycodes to change the sniping mode DPI:
+
+- `POINTER_SNIPING_DPI_FORWARD`: increases the DPI; decreases when shifted;
+- `POINTER_SNIPING_DPI_REVERSE`: decreases the DPI; increases when shifted.
+
+There's a maximum of 4 possible values for the sniping mode DPI. See the [Dilemma documentation](../../README.md) for more information.
+
+### Drag-scroll
+
+Use the `DRAGSCROLL_MODE` keycode to enable drag-scroll on hold. Use the `DRAGSCROLL_TOGGLE` keycode to enable/disable drag-scroll on key press.
+
+### Circular scroll
+
+By default, the firmware is configured to enable the circular scroll feature on Cirque trackpad.
+
+To disable this, add the following to your keymap:
+
+```c
+#undef POINTING_DEVICE_GESTURES_SCROLL_ENABLE
+```
+
+### Sniping
+
+Use the `SNIPING_MODE` keycode to enable sniping mode on hold. Use the `SNIPING_TOGGLE` keycode to enable/disable sniping mode on key press.
+
+Change the value of `DILEMMA_AUTO_SNIPING_ON_LAYER` to automatically enable sniping mode on layer change. By default, sniping mode is enabled on the pointer layer:
+
+```c
+#define DILEMMA_AUTO_SNIPING_ON_LAYER LAYER_POINTER
+```
diff --git a/keyboards/keychron/v3/ansi_encoder/keymaps/vnmm/rules.mk b/keyboards/bastardkb/dilemma/4x6_4/keymaps/via/rules.mk
similarity index 100%
rename from keyboards/keychron/v3/ansi_encoder/keymaps/vnmm/rules.mk
rename to keyboards/bastardkb/dilemma/4x6_4/keymaps/via/rules.mk
diff --git a/keyboards/bastardkb/dilemma/4x6_4/mcuconf.h b/keyboards/bastardkb/dilemma/4x6_4/mcuconf.h
new file mode 100644
index 000000000000..52b726a56d5f
--- /dev/null
+++ b/keyboards/bastardkb/dilemma/4x6_4/mcuconf.h
@@ -0,0 +1,23 @@
+/**
+ * Copyright 2022 Charly Delay (@0xcharly)
+ *
+ * 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 .
+ */
+
+#pragma once
+
+#include_next
+
+#undef RP_SPI_USE_SPI0
+#define RP_SPI_USE_SPI0 TRUE
diff --git a/keyboards/bastardkb/dilemma/4x6_4/readme.md b/keyboards/bastardkb/dilemma/4x6_4/readme.md
new file mode 100644
index 000000000000..30dd2a99f1de
--- /dev/null
+++ b/keyboards/bastardkb/dilemma/4x6_4/readme.md
@@ -0,0 +1,5 @@
+# Dilemma Max (4x6+4)
+
+This keyboard is an upsized version of the [3x5+3 Dilemma](../3x5_3/).
+
+The Dilemma Max is available at [bastardkb.com](https://bastardkb.com).
diff --git a/keyboards/bastardkb/dilemma/4x6_4/rules.mk b/keyboards/bastardkb/dilemma/4x6_4/rules.mk
new file mode 100644
index 000000000000..4923c2c84a50
--- /dev/null
+++ b/keyboards/bastardkb/dilemma/4x6_4/rules.mk
@@ -0,0 +1,4 @@
+SERIAL_DRIVER = vendor
+
+POINTING_DEVICE_ENABLE = yes
+POINTING_DEVICE_DRIVER = cirque_pinnacle_spi
diff --git a/keyboards/bastardkb/dilemma/dilemma.c b/keyboards/bastardkb/dilemma/dilemma.c
index 5452f9e7f6a7..7c87fdcadd61 100644
--- a/keyboards/bastardkb/dilemma/dilemma.c
+++ b/keyboards/bastardkb/dilemma/dilemma.c
@@ -343,3 +343,20 @@ void keyboard_pre_init_kb(void) {
keyboard_pre_init_user();
}
+
+bool shutdown_kb(bool jump_to_bootloader) {
+ if (!shutdown_user(jump_to_bootloader)) {
+ return false;
+ }
+#ifdef RGBLIGHT_ENABLE
+ rgblight_enable_noeeprom();
+ rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_LIGHT);
+ rgblight_setrgb(RGB_RED);
+#endif // RGBLIGHT_ENABLE
+#ifdef RGB_MATRIX_ENABLE
+ void rgb_matrix_update_pwm_buffers(void);
+ rgb_matrix_set_color_all(RGB_RED);
+ rgb_matrix_update_pwm_buffers();
+#endif // RGB_MATRIX_ENABLE
+ return true;
+}
diff --git a/keyboards/bastardkb/dilemma/readme.md b/keyboards/bastardkb/dilemma/readme.md
index ac3c818bd6f1..876400ae52ac 100644
--- a/keyboards/bastardkb/dilemma/readme.md
+++ b/keyboards/bastardkb/dilemma/readme.md
@@ -1,16 +1,21 @@
# Dilemma
-A very small keyboard made for ergonomic enthusiasts.
+A family of split keyboards with embedded RP2040 controllers, support for Cirque GlidePoint circle trackpads, and SPI + I2C breakouts for other peripherals
- Keyboard Maintainer: [Bastard Keyboards](https://github.com/Bastardkb/)
-- Hardware Supported: RP2040-based controller (_eg._ Splinky, Elite-c, ...)
+- Hardware Supported: [Bastardkb Dilemma](https://github.com/Bastardkb/Dilemma)
- Hardware Availability: [Bastardkb.com](https://bastardkb.com/)
-A pre-assembled version (with embedded controller) is also available.
+A DIY version of the 3x5_2 PCB with promicro compatible footprint is also available.
Make example for this keyboard (after setting up your build environment):
- make bastardkb/dilemma/3x5_2/splinky:default
- make bastardkb/dilemma/3x5_2/assembled:default
+ make bastardkb/dilemma/3x5_3:default
+ make bastardkb/dilemma/4x6_4:default
+
+Flashing example for this keyboard:
+
+ make bastardkb/dilemma/3x5_3:default:flash
+ make bastardkb/dilemma/4x6_4:default:flash
See the [keyboard build instructions](http://docs.bastardkb.com/)
diff --git a/keyboards/bastardkb/scylla/blackpill/info.json b/keyboards/bastardkb/scylla/blackpill/info.json
index 24fb8bc701bd..8d7cb4c823af 100644
--- a/keyboards/bastardkb/scylla/blackpill/info.json
+++ b/keyboards/bastardkb/scylla/blackpill/info.json
@@ -3,6 +3,9 @@
"usb": {
"device_version": "1.0.0"
},
+ "eeprom": {
+ "driver": "spi"
+ },
"rgb_matrix": {
"driver": "ws2812"
},
diff --git a/keyboards/bastardkb/scylla/blackpill/rules.mk b/keyboards/bastardkb/scylla/blackpill/rules.mk
index 8c0e9b589186..b5612ce38a86 100644
--- a/keyboards/bastardkb/scylla/blackpill/rules.mk
+++ b/keyboards/bastardkb/scylla/blackpill/rules.mk
@@ -21,5 +21,4 @@ SPLIT_KEYBOARD = yes
MOUSE_SHARED_EP = no # Unify multiple HID interfaces into a single Endpoint
KEYBOARD_SHARED_EP = yes
-EEPROM_DRIVER = spi
SERIAL_DRIVER = usart
diff --git a/keyboards/bastardkb/scylla/config.h b/keyboards/bastardkb/scylla/config.h
index 33c62549a10d..ec538f8a55b6 100644
--- a/keyboards/bastardkb/scylla/config.h
+++ b/keyboards/bastardkb/scylla/config.h
@@ -24,7 +24,6 @@
# define RGB_MATRIX_LED_COUNT 58
# define RGB_MATRIX_SPLIT { 29, 29 }
# define RGB_MATRIX_MAXIMUM_BRIGHTNESS 50
-# define RGB_MATRIX_DEFAULT_VAL RGB_MATRIX_MAXIMUM_BRIGHTNESS
# define RGB_DISABLE_WHEN_USB_SUSPENDED
# define RGB_MATRIX_KEYPRESSES
#endif
diff --git a/keyboards/bastardkb/scylla/keymaps/cykedev/config.h b/keyboards/bastardkb/scylla/keymaps/cykedev/config.h
deleted file mode 100644
index 6119f2738b69..000000000000
--- a/keyboards/bastardkb/scylla/keymaps/cykedev/config.h
+++ /dev/null
@@ -1,39 +0,0 @@
-// Copyright 2021 Christian Eiden, cykedev
-//
-// 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 .
-
-#pragma once
-
-// Select hand configuration
-// #define MASTER_LEFT
-// #define MASTER_RIGHT
-#define EE_HANDS
-
-#define BOOTMAGIC_LITE_ROW 0
-#define BOOTMAGIC_LITE_COLUMN 0
-
-#define BOOTMAGIC_LITE_ROW_RIGHT 0
-#define BOOTMAGIC_LITE_COLUMN_RIGHT 5
-
-#define TAPPING_TERM 200
-
-// Enable rapid switch from tap to hold, disables double tap hold auto-repeat.
-// #define QUICK_TAP_TERM 0
-
-// Apply the modifier on keys that are tapped during a short hold of a modtap
-// #define PERMISSIVE_HOLD
-
-#define HOLD_ON_OTHER_KEY_PRESS_PER_KEY
-
-#define FORCE_NKRO
diff --git a/keyboards/bastardkb/scylla/keymaps/cykedev/keymap.c b/keyboards/bastardkb/scylla/keymaps/cykedev/keymap.c
deleted file mode 100644
index a51f5b9d3869..000000000000
--- a/keyboards/bastardkb/scylla/keymaps/cykedev/keymap.c
+++ /dev/null
@@ -1,199 +0,0 @@
-// Copyright 2021 Christian Eiden, cykedev
-//
-// 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 .
-
-#include QMK_KEYBOARD_H
-
-#define CM_SPAL LGUI_T(KC_SPC)
-#define CM_SPAR RGUI_T(KC_SPC)
-
-#define SH_ENL LSFT_T(KC_ENT)
-#define SH_ENR RSFT_T(KC_ENT)
-
-#define RAISE MO(_RAISE)
-#define LOWER MO(_LOWER)
-
-#define QWERT DF(_QWERTY)
-#define COLEM DF(_COLEMAK_DH)
-
-enum layer_names {
- _COLEMAK_DH,
- _QWERTY,
- _RAISE,
- _LOWER,
- _ADJUST
-};
-
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [_COLEMAK_DH] = LAYOUT_split_4x6_5(
- /* COLEMAK_DH
- * .-----------------------------------------. .-----------------------------------------.
- * | Esc | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | Bsp |
- * |------+------+------+------+------+------| |------+------+------+------+------+------|
- * | Tab | Q | W | F | P | B | | J | L | U | Y | ; | \ |
- * |------+------+------+------+------+------| |------+------+------+------+------+------|
- * | Del | A | R | S | T | G | | M | N | E | I | O | ' |
- * |------+------+------+------+------+------| |------+------+------+------+------+------|
- * | Shft | Z | X | C | D | V | | K | H | , | . | / | Shft |
- * '-----------------------------------------/ \-----------------------------------------'
- * / RAISE /---------------. .---------------\ LOWER \
- * / / Cmd / Shift / \ Shift \ Cmd \ \
- * '-------/ Space / Enter / \ Enter \ Space \-------'
- * /---------------/ \---------------\
- * / Alt / Ctrl / \ Ctrl \ Alt \
- * / / / \ \ \
- * '---------------' '---------------'
- */
- KC_ESC , KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , KC_BSPC,
- KC_TAB , KC_Q , KC_W , KC_F , KC_P , KC_B , KC_J , KC_L , KC_U , KC_Y , KC_SCLN, KC_BSLS,
- KC_DEL , KC_A , KC_R , KC_S , KC_T , KC_G , KC_M , KC_N , KC_E , KC_I , KC_O , KC_QUOT,
- KC_LSFT, KC_Z , KC_X , KC_C , KC_D , KC_V , KC_K , KC_H , KC_COMM, KC_DOT , KC_SLSH, KC_RSFT,
- RAISE , CM_SPAL, SH_ENL , SH_ENR , CM_SPAR, LOWER ,
- KC_LALT, KC_LCTL, KC_RCTL, KC_RALT
- ),
- [_QWERTY] = LAYOUT_split_4x6_5(
- /* QWERTY
- * .-----------------------------------------. .-----------------------------------------.
- * | Esc | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | Bsp |
- * |------+------+------+------+------+------| |------+------+------+------+------+------|
- * | Tab | Q | W | E | R | T | | Y | U | I | O | P | \ |
- * |------+------+------+------+------+------| |------+------+------+------+------+------|
- * | Del | A | S | D | F | G | | H | J | K | L | ; | ' |
- * |------+------+------+------+------+------| |------+------+------+------+------+------|
- * | Shft | Z | X | C | V | B | | N | M | , | . | / | Shft |
- * '-----------------------------------------/ \-----------------------------------------'
- * / RAISE /---------------. .---------------\ LOWER \
- * / / Cmd / Shift / \ Shift \ Cmd \ \
- * '-------/ Space / Enter / \ Enter \ Space \-------'
- * /---------------/ \---------------\
- * / Alt / Ctrl / \ Ctrl \ Alt \
- * / / / \ \ \
- * '---------------' '---------------'
- */
- KC_ESC , KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , KC_BSPC,
- KC_TAB , KC_Q , KC_W , KC_E , KC_R , KC_T , KC_Y , KC_U , KC_I , KC_O , KC_P , KC_BSLS,
- KC_DEL , 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_LSFT,
- RAISE , CM_SPAL, SH_ENL , SH_ENR , CM_SPAR, LOWER ,
- KC_LALT, KC_LCTL, KC_RCTL, KC_RALT
- ),
- [_RAISE] = LAYOUT_split_4x6_5(
- /* RAISE
- * .-----------------------------------------. .-----------------------------------------.
- * | | F1 | F2 | F3 | F4 | F5 | | F6 | F7 | F8 | F9 | F10 | F11 |
- * |------+------+------+------+------+------| |------+------+------+------+------+------|
- * | | | | [ | ] | | | $ | / | * | # | ~ | F12 |
- * |------+------+------+------+------+------| |------+------+------+------+------+------|
- * | Ins | ! | @ | ( | ) | | | % | - | + | = | ? | |
- * |------+------+------+------+------+------| |------+------+------+------+------+------|
- * | | | | { | } | | | ^ | & | | | | | |
- * '-----------------------------------------/ \-----------------------------------------'
- * / /---------------. .---------------\ \
- * / / / / \ \ \ \
- * '-------/ / / \ \ \-------'
- * /---------------/ \---------------\
- * / / / \ \ \
- * / / / \ \ \
- * '---------------' '---------------'
- */
- XXXXXXX, KC_F1 , KC_F2 , KC_F3 , KC_F4 , KC_F5 , KC_F6 , KC_F7 , KC_F8 , KC_F9 , KC_F10 , KC_F11 ,
- XXXXXXX, XXXXXXX, XXXXXXX, KC_LBRC, KC_RBRC, XXXXXXX, KC_DLR , KC_SLSH, KC_ASTR, KC_HASH, KC_TILD, KC_F12 ,
- KC_INS , KC_EXLM, KC_AT , KC_LPRN, KC_RPRN, XXXXXXX, KC_PERC, KC_MINS, KC_PPLS, KC_PEQL, KC_QUES, XXXXXXX,
- XXXXXXX, XXXXXXX, XXXXXXX, KC_LCBR, KC_RCBR, XXXXXXX, KC_CIRC, KC_AMPR, KC_PIPE, XXXXXXX, XXXXXXX, XXXXXXX,
- _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______
- ),
- [_LOWER] = LAYOUT_split_4x6_5(
- /* LOWER
- * .-----------------------------------------. .-----------------------------------------.
- * | | F1 | F2 | F3 | F4 | F5 | | F6 | F7 | F8 | F9 | F10 | F11 |
- * |------+------+------+------+------+------| |------+------+------+------+------+------|
- * | | | | [ | ] | + | | | | up | | | F12 |
- * |------+------+------+------+------+------| |------+------+------+------+------+------|
- * | Ins | ! | @ | ( | ) | - | | | left | down | rght | ? | |
- * |------+------+------+------+------+------| |------+------+------+------+------+------|
- * | | | | { | } | = | | | | | | | |
- * '-----------------------------------------/ \-----------------------------------------'
- * / /---------------. .---------------\ \
- * / / / / \ \ \ \
- * '-------/ / / \ \ \-------'
- * /---------------/ \---------------\
- * / / / \ \ \
- * / / / \ \ \
- * '---------------' '---------------'
- */
- XXXXXXX, KC_F1 , KC_F2 , KC_F3 , KC_F4 , KC_F5 , KC_F6 , KC_F7 , KC_F8 , KC_F9 , KC_F10 , KC_F11 ,
- XXXXXXX, XXXXXXX, XXXXXXX, KC_LBRC, KC_RBRC, KC_PPLS, XXXXXXX, XXXXXXX, KC_UP , XXXXXXX, XXXXXXX, KC_F12 ,
- KC_INS , KC_EXLM, KC_AT , KC_LPRN, KC_RPRN, KC_MINS, XXXXXXX, KC_LEFT, KC_DOWN, KC_RGHT, KC_QUES, XXXXXXX,
- XXXXXXX, XXXXXXX, XXXXXXX, KC_LCBR, KC_RCBR, KC_PEQL, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
- _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______
- ),
- [_ADJUST] = LAYOUT_split_4x6_5(
- /* ADJUST
- * .-----------------------------------------. .-----------------------------------------.
- * | | | | | | QWERT| |COLEM | | | | | |
- * |------+------+------+------+------+------| |------+------+------+------+------+------|
- * | | | | | | V+ | | B + | | | | | |
- * |------+------+------+------+------+------| |------+------+------+------+------+------|
- * | | | | | | V- | | B - | << | play | >> | | |
- * |------+------+------+------+------+------| |------+------+------+------+------+------|
- * | | | | | | Mute | | | | | | | |
- * '-----------------------------------------/ \-----------------------------------------'
- * / /---------------. .---------------\ \
- * / / / / \ \ \ \
- * '-------/ / / \ \ \-------'
- * /---------------/ \---------------\
- * / / / \ \ \
- * / / / \ \ \
- * '---------------' '---------------'
- */
- XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, QWERT , COLEM , XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
- XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_VOLU, KC_BRIU, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
- XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_VOLD, KC_BRID, KC_MRWD, KC_MPLY, KC_MFFD, XXXXXXX, XXXXXXX,
- XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_MUTE, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
- XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
- XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX
- )
-};
-
-bool get_hold_on_other_key_press(uint16_t keycode, keyrecord_t *record) {
- if (keycode == CM_SPAR) {
- return false;
- } else if (QK_MOD_TAP <= keycode && keycode <= QK_MOD_TAP_MAX) {
- return true;
- } else {
- return false;
- }
-}
-
-layer_state_t layer_state_set_user(layer_state_t state) {
- return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST);
-}
-
-// Flexible macOS-friendly Grave Escape
-// https://docs.qmk.fm/#/feature_key_overrides?id=flexible-macos-friendly-grave-escape
-
-const key_override_t tilde_esc_override = ko_make_basic(MOD_MASK_SHIFT, KC_ESC, S(KC_GRAVE));
-const key_override_t grave_esc_override = ko_make_basic(MOD_MASK_GUI, KC_ESC, KC_GRAVE);
-const key_override_t delete_key_override = ko_make_basic(MOD_MASK_SHIFT, KC_BSPC, KC_DELETE);
-
-
-const key_override_t **key_overrides = (const key_override_t *[]){
- &tilde_esc_override,
- &grave_esc_override,
- &delete_key_override,
- NULL
-};
diff --git a/keyboards/bastardkb/scylla/keymaps/cykedev/rules.mk b/keyboards/bastardkb/scylla/keymaps/cykedev/rules.mk
deleted file mode 100644
index 1ef732910bfc..000000000000
--- a/keyboards/bastardkb/scylla/keymaps/cykedev/rules.mk
+++ /dev/null
@@ -1,4 +0,0 @@
-MOUSEKEY_ENABLE = no # Mouse keys
-NKRO_ENABLE = yes # USB Nkey Rollover
-RGB_MATRIX_ENABLE = no # Enable keyboard RGB matrix
-KEY_OVERRIDE_ENABLE = yes # Enable Key Overrides, see https://docs.qmk.fm/#/feature_key_overrides
diff --git a/keyboards/bastardkb/scylla/keymaps/german_gaming/keymap.c b/keyboards/bastardkb/scylla/keymaps/german_gaming/keymap.c
deleted file mode 100644
index c5f563c90ba1..000000000000
--- a/keyboards/bastardkb/scylla/keymaps/german_gaming/keymap.c
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
- * Copyright 2021 Joschua Gandert
- *
- * 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 .
- */
-
-
-#include QMK_KEYBOARD_H
-#include "keymap_german.h"
-
-
-enum layer_names {
- _BASE,
- _GAME, /* WASD shifted right once */
- _LOWER,
- _RAISE,
- _ADJUST /* when both LOWER and RAISE pressed */
-};
-
-#define RAISE MO(_RAISE)
-#define LOWER MO(_LOWER)
-
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [_BASE] = LAYOUT_split_4x6_5(
- KC_ESC , KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , DE_SS ,
- KC_TAB , KC_Q , KC_W , KC_E , KC_R , KC_T , DE_Z , KC_U , KC_I , KC_O , KC_P , DE_UDIA,
- KC_LSFT, KC_A , KC_S , KC_D , KC_F , KC_G , KC_H , KC_J , KC_K , KC_L , DE_ODIA, DE_ADIA,
- KC_LCTL, DE_Y , KC_X , KC_C , KC_V , KC_B , KC_N , KC_M , KC_COMM, KC_DOT, DE_MINS, DE_PLUS,
-
- RAISE, KC_SPC, KC_LCTL, KC_RALT, KC_BSPC, LOWER,
- KC_ENT, KC_LALT, KC_LGUI, KC_RSFT
- ),
-
- [_GAME] = LAYOUT_split_4x6_5(
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- KC_T , KC_TAB , KC_Q , KC_W , KC_E , KC_R , _______, _______, KC_UP, _______, _______, _______,
- KC_G , KC_LSFT, KC_A , KC_S , KC_D , KC_F , _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______,
- KC_B , KC_LCTL, DE_Y , KC_X , KC_C , KC_V , _______, _______, _______, _______, _______, _______,
-
- _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______
- ),
-
- [_LOWER] = LAYOUT_split_4x6_5(
- KC_TILD, KC_EXLM, KC_AT , KC_HASH, KC_DLR , KC_PERC, KC_CIRC, KC_AMPR, KC_PSLS, KC_PAST, KC_PMNS, KC_DEL ,
- _______, DE_HASH, DE_CIRC, KC_PGUP, DE_LABK, _______, _______, KC_P7 , KC_P8 , KC_P9 , KC_PPLS, KC_BSPC ,
- _______, DE_ACUT, KC_HOME, KC_PGDN, KC_END , KC_LPRN, KC_RPRN, KC_P4 , KC_P5 , KC_P6 , KC_PDOT, _______ ,
- _______, KC_PLUS, KC_PIPE, KC_UNDS, _______, _______, KC_P0 , KC_P1 , KC_P2 , KC_P3 , KC_PENT, KC_KP_EQUAL,
-
- _______, KC_RGHT, _______, _______, _______, _______,
- KC_LEFT, _______, QK_BOOT, _______
- ),
-
- [_RAISE] = LAYOUT_split_4x6_5(
- KC_F12 , KC_F1 , KC_F2 , KC_F3 , KC_F4 , KC_F5 , KC_F6 , KC_F7 , KC_F8 , KC_F9 , KC_F10 , KC_F11 ,
- _______, _______, _______, KC_UP , _______, _______, KC_LALT, KC_INS , KC_NUM , KC_CALC, KC_PSCR , KC_MUTE,
- _______, _______, KC_LEFT, KC_DOWN, KC_RGHT, KC_ENT , KC_MSEL, KC_MPRV , KC_MPLY , KC_MNXT, _______ , KC_VOLU,
- _______, _______, _______, _______, _______, _______, DE_HASH, KC_MYCM , _______ , _______, KC_SCRL , KC_VOLD,
-
- _______, _______, _______, _______, KC_UP , _______,
- _______, _______, _______, KC_DOWN
- ),
-
- [_ADJUST] = LAYOUT_split_4x6_5(
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, QK_BOOT, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, DF(_GAME), _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, DF(_BASE), _______, _______, _______, _______, _______, _______,
-
- _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______
- ),
-};
-
-
-layer_state_t layer_state_set_user(layer_state_t state) {
- return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST);
-}
diff --git a/keyboards/bastardkb/scylla/keymaps/german_gaming/readme.md b/keyboards/bastardkb/scylla/keymaps/german_gaming/readme.md
deleted file mode 100644
index 14de01ac4158..000000000000
--- a/keyboards/bastardkb/scylla/keymaps/german_gaming/readme.md
+++ /dev/null
@@ -1,24 +0,0 @@
-![German Gaming Layout Image](https://i.imgur.com/0y938rGh.png)
-
-Despite being less accurate, the columns in the image are shifted up and down to avoid the [Hermann grid illusion](https://en.wikipedia.org/wiki/Grid_illusion).
-
-
-# German Gaming Layout
-
-This layout was build with gaming in mind for a german user. As a result I added a "game" layer that shifts the keys of the left side (below the number row) one to the right, so that WASD is on the ESDF keys. The reason this layer was added is that using WASD is less comfortable with a contoured Dactyl-style keyboard, where each column is adjusted for the respective fingers. ESDF also has the upside of allowing one to stay in the home row. Note that the rightmost column of the default layer, so TGB, ends up in the leftmost position.
-
-Of course, one could just be forced to reconfigure every game, but that wouldn't be very user-friendly and likely reduce satisfaction with the layout. When in game mode, the right side of keys also features arrow keys on IJKL.
-
-
-## Raise and Lower layer
-
-Additionally, via the RAISE layer, it's always possible to access the arrow keys, which are often used in game menues. On the exact same position one can access Home, End, Page Down and Page Up via the LOWER layer. The left side of the LOWER layer also contains the few characters that would usually have their own key in a traditional german keyboard.
-
-The right side features various media keys in the RAISE layer, and a numpad in the LOWER layer.
-
-
-## Firmware
-
-The keyboard can be put into Reset mode (for flashing a keymap) by pressing **LOWER** + Super (also known as Windows key), or by pressing **LOWER** + **RAISE** + R.
-
-`MOUSEKEY_ENABLE` was set to `no` for this keymap, since it wasn't used and the size of the firmware ended up being too large.
diff --git a/keyboards/bastardkb/scylla/keymaps/german_gaming/rules.mk b/keyboards/bastardkb/scylla/keymaps/german_gaming/rules.mk
deleted file mode 100644
index 0a5b666e8557..000000000000
--- a/keyboards/bastardkb/scylla/keymaps/german_gaming/rules.mk
+++ /dev/null
@@ -1 +0,0 @@
-MOUSEKEY_ENABLE = no
diff --git a/keyboards/bastardkb/scylla/keymaps/manna-harbour_miryoku/config.h b/keyboards/bastardkb/scylla/keymaps/manna-harbour_miryoku/config.h
deleted file mode 100644
index 5a3153ae37ab..000000000000
--- a/keyboards/bastardkb/scylla/keymaps/manna-harbour_miryoku/config.h
+++ /dev/null
@@ -1,23 +0,0 @@
-// Copyright 2019 Manna Harbour
-// https://github.com/manna-harbour/miryoku
-
-// 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 .
-
-#pragma once
-
-#define XXX KC_NO
-
-#define LAYOUT_miryoku( \
- K00, 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, \
- N30, N31, K32, K33, K34, K35, K36, K37, N38, N39 \
-) \
-LAYOUT_split_4x6_5( \
-XXX, XXX, XXX, XXX, XXX, XXX, XXX, XXX, XXX, XXX, XXX, XXX, \
-XXX, K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, XXX, \
-XXX, K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, XXX, \
-XXX, K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, XXX, \
- K32, K33, K34, K35, K36, K37, \
- XXX, XXX, XXX, XXX \
-)
diff --git a/keyboards/bastardkb/scylla/keymaps/manna-harbour_miryoku/keymap.c b/keyboards/bastardkb/scylla/keymaps/manna-harbour_miryoku/keymap.c
deleted file mode 100644
index dbab7f982043..000000000000
--- a/keyboards/bastardkb/scylla/keymaps/manna-harbour_miryoku/keymap.c
+++ /dev/null
@@ -1,4 +0,0 @@
-// Copyright 2019 Manna Harbour
-// https://github.com/manna-harbour/miryoku
-
-// 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 .
diff --git a/keyboards/bastardkb/scylla/keymaps/xyverz/config.h b/keyboards/bastardkb/scylla/keymaps/xyverz/config.h
deleted file mode 100644
index 4fa185e9564c..000000000000
--- a/keyboards/bastardkb/scylla/keymaps/xyverz/config.h
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
-This is the c configuration file for the keymap
-
-Copyright 2012 Jun Wako
-Copyright 2015 Jack Humbert
-
-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 .
-*/
-
-#pragma once
-
-/* Select hand configuration */
-// #define MASTER_LEFT
-// #define MASTER_RIGHT
-#define EE_HANDS
-
-#define QUICK_TAP_TERM 0
-#define TAPPING_TERM 300
-#define PERMISSIVE_HOLD
-#define LEADER_PER_KEY_TIMING
-#define LEADER_TIMEOUT 300
\ No newline at end of file
diff --git a/keyboards/bastardkb/scylla/keymaps/xyverz/keymap.c b/keyboards/bastardkb/scylla/keymaps/xyverz/keymap.c
deleted file mode 100644
index 2fb26dbf6f4d..000000000000
--- a/keyboards/bastardkb/scylla/keymaps/xyverz/keymap.c
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- * Copyright 2021 Ian Sterling
- *
- * 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 .
- */
-
-#include QMK_KEYBOARD_H
-
-enum layer_names { _WINDOWS, _MAC, _LOWER, _RAISE, _ADJUST };
-
-enum custom_keycodes { WINDOWS = SAFE_RANGE, MAC, ADJUST };
-
-// Aliases to keep the keymap tidy
-#define GUIBSPC GUI_T(KC_BSPC) // GUI when held, BSPC when tapped.
-#define RGB_SWR RGB_M_SW // Swirl Animation alias
-#define RGB_SNK RGB_M_SN // Snake Animation alias
-#define MACLOCK LGUI(LCTL(KC_Q)) // Lock my MacBook!
-#define WINLOCK LGUI(KC_L) // Lock my PC!
-#define DELGUI GUI_T(KC_DEL)
-#define RAISE MO(_RAISE)
-#define LOWER MO(_LOWER)
-
-
-#define MACLOCK LGUI(LCTL(KC_Q)) // Lock my MacBook!
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-
-[_WINDOWS] = LAYOUT_split_4x6_5(
- KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSLS,
- 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_GRV, 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,
- LOWER, KC_BSPC, KC_DEL, KC_ENT, KC_SPC, RAISE,
- KC_LCTL, KC_LALT, KC_RGUI, KC_RCTL
- ),
-
-[_MAC] = LAYOUT_split_4x6_5(
- KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSLS,
- 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_GRV, 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,
- LOWER, KC_BSPC, DELGUI, KC_ENT, KC_SPC, RAISE,
- KC_LCTL, KC_LALT, KC_RGUI, KC_RCTL
- ),
-
-[_LOWER] = LAYOUT_split_4x6_5(
- KC_F11, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F12,
- QK_BOOT, _______, _______, KC_UP, _______, _______, _______, KC_PSCR, KC_SCRL, KC_PAUS, _______, _______,
- KC_CAPS, _______, KC_LEFT, KC_DOWN, KC_RGHT, KC_HOME, KC_PGUP, _______, KC_PLUS, KC_LCBR, KC_RCBR, _______,
- _______, _______, KC_MPRV, KC_MPLY, KC_MNXT, KC_END, KC_PGDN, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______,
- _______, KC_DEL, _______, _______, _______, _______,
- MACLOCK, _______, _______, WINLOCK
- ),
-
-[_RAISE] = LAYOUT_split_4x6_5(
- 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_UP, _______, _______, _______, KC_PSCR, KC_SCRL, KC_PAUS, _______, QK_BOOT,
- KC_CAPS, _______, KC_LEFT, KC_DOWN, KC_RGHT, KC_HOME, KC_PGUP, _______, KC_EQL, KC_LBRC, KC_RBRC, _______,
- _______, _______, KC_MPRV, KC_MPLY, KC_MNXT, KC_END, KC_PGDN, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______,
- _______, KC_DEL, _______, _______, _______, _______,
- MACLOCK, _______, _______, WINLOCK
- ),
-
-[_ADJUST] = LAYOUT_split_4x6_5(
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, WINDOWS, MAC, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______
- ),
-
-};
-
-layer_state_t layer_state_set_user(layer_state_t state) { return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST); };
-
-bool process_record_user(uint16_t keycode, keyrecord_t *record) {
- if (record->event.pressed) {
- switch (keycode) {
- case WINDOWS:
- set_single_persistent_default_layer(_WINDOWS);
- return false;
- case MAC:
- set_single_persistent_default_layer(_MAC);
- return false;
- }
- }
- return true;
-}
diff --git a/keyboards/bastardkb/scylla/v2/splinky_2/rules.mk b/keyboards/bastardkb/scylla/v2/splinky_2/rules.mk
index 274e95c039d1..53f4c0baa87c 100644
--- a/keyboards/bastardkb/scylla/v2/splinky_2/rules.mk
+++ b/keyboards/bastardkb/scylla/v2/splinky_2/rules.mk
@@ -1,7 +1,3 @@
-# RP2040-specific options
-ALLOW_WARNINGS = yes
-PICO_INTRINSICS_ENABLED = no # ATM Unsupported by ChibiOS.
-
# Build Options
# change yes to no to disable
#
diff --git a/keyboards/bastardkb/scylla/v2/splinky_3/rules.mk b/keyboards/bastardkb/scylla/v2/splinky_3/rules.mk
index 274e95c039d1..53f4c0baa87c 100644
--- a/keyboards/bastardkb/scylla/v2/splinky_3/rules.mk
+++ b/keyboards/bastardkb/scylla/v2/splinky_3/rules.mk
@@ -1,7 +1,3 @@
-# RP2040-specific options
-ALLOW_WARNINGS = yes
-PICO_INTRINSICS_ENABLED = no # ATM Unsupported by ChibiOS.
-
# Build Options
# change yes to no to disable
#
diff --git a/keyboards/bastardkb/skeletyl/blackpill/info.json b/keyboards/bastardkb/skeletyl/blackpill/info.json
index 1d256392819f..c0f0d6a3b118 100644
--- a/keyboards/bastardkb/skeletyl/blackpill/info.json
+++ b/keyboards/bastardkb/skeletyl/blackpill/info.json
@@ -3,6 +3,9 @@
"usb": {
"device_version": "1.0.0"
},
+ "eeprom": {
+ "driver": "spi"
+ },
"rgb_matrix": {
"driver": "ws2812"
},
diff --git a/keyboards/bastardkb/skeletyl/blackpill/rules.mk b/keyboards/bastardkb/skeletyl/blackpill/rules.mk
index 8c0e9b589186..b5612ce38a86 100644
--- a/keyboards/bastardkb/skeletyl/blackpill/rules.mk
+++ b/keyboards/bastardkb/skeletyl/blackpill/rules.mk
@@ -21,5 +21,4 @@ SPLIT_KEYBOARD = yes
MOUSE_SHARED_EP = no # Unify multiple HID interfaces into a single Endpoint
KEYBOARD_SHARED_EP = yes
-EEPROM_DRIVER = spi
SERIAL_DRIVER = usart
diff --git a/keyboards/bastardkb/skeletyl/config.h b/keyboards/bastardkb/skeletyl/config.h
index a7f9c9438762..58dacb5c53b0 100644
--- a/keyboards/bastardkb/skeletyl/config.h
+++ b/keyboards/bastardkb/skeletyl/config.h
@@ -24,7 +24,6 @@
# define RGB_MATRIX_LED_COUNT 36
# define RGB_MATRIX_SPLIT { 18, 18 }
# define RGB_MATRIX_MAXIMUM_BRIGHTNESS 50
-# define RGB_MATRIX_DEFAULT_VAL RGB_MATRIX_MAXIMUM_BRIGHTNESS
# define RGB_DISABLE_WHEN_USB_SUSPENDED
# define RGB_MATRIX_KEYPRESSES
#endif
diff --git a/keyboards/bastardkb/skeletyl/readme.md b/keyboards/bastardkb/skeletyl/readme.md
index 5a595d338f36..bd05820d35c0 100644
--- a/keyboards/bastardkb/skeletyl/readme.md
+++ b/keyboards/bastardkb/skeletyl/readme.md
@@ -20,8 +20,8 @@ qmk compile -kb bastardkb/skeletyl/{VERSION}/elitec -km {KEYMAP}
| --------------- | --------------------------------------------------------------- | ----------------------------------------------------------- |
| v1 (Elite-C) | `qmk compile -kb bastardkb/skeletyl/v1/elitec -km default` | `qmk compile -kb bastardkb/skeletyl/v1/elitec -km via` |
| v2 (Elite-C) | `qmk compile -kb bastardkb/skeletyl/v2/elitec -km default` | `qmk compile -kb bastardkb/skeletyl/v2/elitec -km via` |
-| v2 (Splinky v2) | `qmk compile -kb bastardkb/skeletyl/v2/splinky/v2 -km default` | `qmk compile -kb bastardkb/skeletyl/v2/splinky/v2 -km via` |
-| v2 (Splinky v3) | `qmk compile -kb bastardkb/skeletyl/v2/splinky/v3 -km default` | `qmk compile -kb bastardkb/skeletyl/v2/splinky/v3 -km via` |
+| v2 (Splinky v2) | `qmk compile -kb bastardkb/skeletyl/v2/splinky_2 -km default` | `qmk compile -kb bastardkb/skeletyl/v2/splinky_2 -km via` |
+| v2 (Splinky v3) | `qmk compile -kb bastardkb/skeletyl/v2/splinky_3 -km default` | `qmk compile -kb bastardkb/skeletyl/v2/splinky_3 -km via` |
| v2 (STeMCell) | `qmk compile -kb bastardkb/skeletyl/v2/stemcell -km default` | `qmk compile -kb bastardkb/skeletyl/v2/stemcell -km via` |
This keyboard is made to be used with the Miryoku layout, do not use the default keymap.
diff --git a/keyboards/bastardkb/skeletyl/v2/splinky_2/rules.mk b/keyboards/bastardkb/skeletyl/v2/splinky_2/rules.mk
index 274e95c039d1..53f4c0baa87c 100644
--- a/keyboards/bastardkb/skeletyl/v2/splinky_2/rules.mk
+++ b/keyboards/bastardkb/skeletyl/v2/splinky_2/rules.mk
@@ -1,7 +1,3 @@
-# RP2040-specific options
-ALLOW_WARNINGS = yes
-PICO_INTRINSICS_ENABLED = no # ATM Unsupported by ChibiOS.
-
# Build Options
# change yes to no to disable
#
diff --git a/keyboards/bastardkb/skeletyl/v2/splinky_3/rules.mk b/keyboards/bastardkb/skeletyl/v2/splinky_3/rules.mk
index 274e95c039d1..53f4c0baa87c 100644
--- a/keyboards/bastardkb/skeletyl/v2/splinky_3/rules.mk
+++ b/keyboards/bastardkb/skeletyl/v2/splinky_3/rules.mk
@@ -1,7 +1,3 @@
-# RP2040-specific options
-ALLOW_WARNINGS = yes
-PICO_INTRINSICS_ENABLED = no # ATM Unsupported by ChibiOS.
-
# Build Options
# change yes to no to disable
#
diff --git a/keyboards/bastardkb/tbk/keymaps/german_gaming/keymap.c b/keyboards/bastardkb/tbk/keymaps/german_gaming/keymap.c
deleted file mode 100644
index c5f563c90ba1..000000000000
--- a/keyboards/bastardkb/tbk/keymaps/german_gaming/keymap.c
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
- * Copyright 2021 Joschua Gandert
- *
- * 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 .
- */
-
-
-#include QMK_KEYBOARD_H
-#include "keymap_german.h"
-
-
-enum layer_names {
- _BASE,
- _GAME, /* WASD shifted right once */
- _LOWER,
- _RAISE,
- _ADJUST /* when both LOWER and RAISE pressed */
-};
-
-#define RAISE MO(_RAISE)
-#define LOWER MO(_LOWER)
-
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [_BASE] = LAYOUT_split_4x6_5(
- KC_ESC , KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , DE_SS ,
- KC_TAB , KC_Q , KC_W , KC_E , KC_R , KC_T , DE_Z , KC_U , KC_I , KC_O , KC_P , DE_UDIA,
- KC_LSFT, KC_A , KC_S , KC_D , KC_F , KC_G , KC_H , KC_J , KC_K , KC_L , DE_ODIA, DE_ADIA,
- KC_LCTL, DE_Y , KC_X , KC_C , KC_V , KC_B , KC_N , KC_M , KC_COMM, KC_DOT, DE_MINS, DE_PLUS,
-
- RAISE, KC_SPC, KC_LCTL, KC_RALT, KC_BSPC, LOWER,
- KC_ENT, KC_LALT, KC_LGUI, KC_RSFT
- ),
-
- [_GAME] = LAYOUT_split_4x6_5(
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- KC_T , KC_TAB , KC_Q , KC_W , KC_E , KC_R , _______, _______, KC_UP, _______, _______, _______,
- KC_G , KC_LSFT, KC_A , KC_S , KC_D , KC_F , _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______,
- KC_B , KC_LCTL, DE_Y , KC_X , KC_C , KC_V , _______, _______, _______, _______, _______, _______,
-
- _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______
- ),
-
- [_LOWER] = LAYOUT_split_4x6_5(
- KC_TILD, KC_EXLM, KC_AT , KC_HASH, KC_DLR , KC_PERC, KC_CIRC, KC_AMPR, KC_PSLS, KC_PAST, KC_PMNS, KC_DEL ,
- _______, DE_HASH, DE_CIRC, KC_PGUP, DE_LABK, _______, _______, KC_P7 , KC_P8 , KC_P9 , KC_PPLS, KC_BSPC ,
- _______, DE_ACUT, KC_HOME, KC_PGDN, KC_END , KC_LPRN, KC_RPRN, KC_P4 , KC_P5 , KC_P6 , KC_PDOT, _______ ,
- _______, KC_PLUS, KC_PIPE, KC_UNDS, _______, _______, KC_P0 , KC_P1 , KC_P2 , KC_P3 , KC_PENT, KC_KP_EQUAL,
-
- _______, KC_RGHT, _______, _______, _______, _______,
- KC_LEFT, _______, QK_BOOT, _______
- ),
-
- [_RAISE] = LAYOUT_split_4x6_5(
- KC_F12 , KC_F1 , KC_F2 , KC_F3 , KC_F4 , KC_F5 , KC_F6 , KC_F7 , KC_F8 , KC_F9 , KC_F10 , KC_F11 ,
- _______, _______, _______, KC_UP , _______, _______, KC_LALT, KC_INS , KC_NUM , KC_CALC, KC_PSCR , KC_MUTE,
- _______, _______, KC_LEFT, KC_DOWN, KC_RGHT, KC_ENT , KC_MSEL, KC_MPRV , KC_MPLY , KC_MNXT, _______ , KC_VOLU,
- _______, _______, _______, _______, _______, _______, DE_HASH, KC_MYCM , _______ , _______, KC_SCRL , KC_VOLD,
-
- _______, _______, _______, _______, KC_UP , _______,
- _______, _______, _______, KC_DOWN
- ),
-
- [_ADJUST] = LAYOUT_split_4x6_5(
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, QK_BOOT, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, DF(_GAME), _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, DF(_BASE), _______, _______, _______, _______, _______, _______,
-
- _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______
- ),
-};
-
-
-layer_state_t layer_state_set_user(layer_state_t state) {
- return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST);
-}
diff --git a/keyboards/bastardkb/tbk/keymaps/german_gaming/readme.md b/keyboards/bastardkb/tbk/keymaps/german_gaming/readme.md
deleted file mode 100644
index 9e6a328bcb8b..000000000000
--- a/keyboards/bastardkb/tbk/keymaps/german_gaming/readme.md
+++ /dev/null
@@ -1,24 +0,0 @@
-![German Gaming Layout Image](https://i.imgur.com/0y938rG.png)
-
-Despite being less accurate, the columns in the image are shifted up and down to avoid the [Hermann grid illusion](https://en.wikipedia.org/wiki/Grid_illusion).
-
-
-# German Gaming Layout
-
-This layout was build with gaming in mind for a german user. As a result I added a "game" layer that shifts the keys of the left side (below the number row) one to the right, so that WASD is on the ESDF keys. The reason this layer was added is that using WASD is less comfortable with a contoured Dactyl-style keyboard, where each column is adjusted for the respective fingers. ESDF also has the upside of allowing one to stay in the home row. Note that the rightmost column of the default layer, so TGB, ends up in the leftmost position.
-
-Of course, one could just be forced to reconfigure every game, but that wouldn't be very user-friendly and likely reduce satisfaction with the layout. When in game mode, the right side of keys also features arrow keys on IJKL.
-
-
-## Raise and Lower layer
-
-Additionally, via the RAISE layer, it's always possible to access the arrow keys, which are often used in game menues. On the exact same position one can access Home, End, Page Down and Page Up via the LOWER layer. The left side of the LOWER layer also contains the few characters that would usually have their own key in a traditional german keyboard.
-
-The right side features various media keys in the RAISE layer, and a numpad in the LOWER layer.
-
-
-## Firmware
-
-The keyboard can be put into Reset mode (for flashing a keymap) by pressing **LOWER** + Super (also known as Windows key), or by pressing **LOWER** + **RAISE** + R.
-
-`MOUSEKEY_ENABLE` was set to `no` for this keymap, since it wasn't used and the size of the firmware ended up being too large.
diff --git a/keyboards/bastardkb/tbk/keymaps/german_gaming/rules.mk b/keyboards/bastardkb/tbk/keymaps/german_gaming/rules.mk
deleted file mode 100644
index 0a5b666e8557..000000000000
--- a/keyboards/bastardkb/tbk/keymaps/german_gaming/rules.mk
+++ /dev/null
@@ -1 +0,0 @@
-MOUSEKEY_ENABLE = no
diff --git a/keyboards/bastardkb/tbk/keymaps/xyverz/config.h b/keyboards/bastardkb/tbk/keymaps/xyverz/config.h
deleted file mode 100644
index 4fa185e9564c..000000000000
--- a/keyboards/bastardkb/tbk/keymaps/xyverz/config.h
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
-This is the c configuration file for the keymap
-
-Copyright 2012 Jun Wako
-Copyright 2015 Jack Humbert
-
-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 .
-*/
-
-#pragma once
-
-/* Select hand configuration */
-// #define MASTER_LEFT
-// #define MASTER_RIGHT
-#define EE_HANDS
-
-#define QUICK_TAP_TERM 0
-#define TAPPING_TERM 300
-#define PERMISSIVE_HOLD
-#define LEADER_PER_KEY_TIMING
-#define LEADER_TIMEOUT 300
\ No newline at end of file
diff --git a/keyboards/bastardkb/tbk/keymaps/xyverz/keymap.c b/keyboards/bastardkb/tbk/keymaps/xyverz/keymap.c
deleted file mode 100644
index 2fb26dbf6f4d..000000000000
--- a/keyboards/bastardkb/tbk/keymaps/xyverz/keymap.c
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- * Copyright 2021 Ian Sterling
- *
- * 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 .
- */
-
-#include QMK_KEYBOARD_H
-
-enum layer_names { _WINDOWS, _MAC, _LOWER, _RAISE, _ADJUST };
-
-enum custom_keycodes { WINDOWS = SAFE_RANGE, MAC, ADJUST };
-
-// Aliases to keep the keymap tidy
-#define GUIBSPC GUI_T(KC_BSPC) // GUI when held, BSPC when tapped.
-#define RGB_SWR RGB_M_SW // Swirl Animation alias
-#define RGB_SNK RGB_M_SN // Snake Animation alias
-#define MACLOCK LGUI(LCTL(KC_Q)) // Lock my MacBook!
-#define WINLOCK LGUI(KC_L) // Lock my PC!
-#define DELGUI GUI_T(KC_DEL)
-#define RAISE MO(_RAISE)
-#define LOWER MO(_LOWER)
-
-
-#define MACLOCK LGUI(LCTL(KC_Q)) // Lock my MacBook!
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-
-[_WINDOWS] = LAYOUT_split_4x6_5(
- KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSLS,
- 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_GRV, 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,
- LOWER, KC_BSPC, KC_DEL, KC_ENT, KC_SPC, RAISE,
- KC_LCTL, KC_LALT, KC_RGUI, KC_RCTL
- ),
-
-[_MAC] = LAYOUT_split_4x6_5(
- KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSLS,
- 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_GRV, 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,
- LOWER, KC_BSPC, DELGUI, KC_ENT, KC_SPC, RAISE,
- KC_LCTL, KC_LALT, KC_RGUI, KC_RCTL
- ),
-
-[_LOWER] = LAYOUT_split_4x6_5(
- KC_F11, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F12,
- QK_BOOT, _______, _______, KC_UP, _______, _______, _______, KC_PSCR, KC_SCRL, KC_PAUS, _______, _______,
- KC_CAPS, _______, KC_LEFT, KC_DOWN, KC_RGHT, KC_HOME, KC_PGUP, _______, KC_PLUS, KC_LCBR, KC_RCBR, _______,
- _______, _______, KC_MPRV, KC_MPLY, KC_MNXT, KC_END, KC_PGDN, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______,
- _______, KC_DEL, _______, _______, _______, _______,
- MACLOCK, _______, _______, WINLOCK
- ),
-
-[_RAISE] = LAYOUT_split_4x6_5(
- 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_UP, _______, _______, _______, KC_PSCR, KC_SCRL, KC_PAUS, _______, QK_BOOT,
- KC_CAPS, _______, KC_LEFT, KC_DOWN, KC_RGHT, KC_HOME, KC_PGUP, _______, KC_EQL, KC_LBRC, KC_RBRC, _______,
- _______, _______, KC_MPRV, KC_MPLY, KC_MNXT, KC_END, KC_PGDN, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______,
- _______, KC_DEL, _______, _______, _______, _______,
- MACLOCK, _______, _______, WINLOCK
- ),
-
-[_ADJUST] = LAYOUT_split_4x6_5(
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, WINDOWS, MAC, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______
- ),
-
-};
-
-layer_state_t layer_state_set_user(layer_state_t state) { return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST); };
-
-bool process_record_user(uint16_t keycode, keyrecord_t *record) {
- if (record->event.pressed) {
- switch (keycode) {
- case WINDOWS:
- set_single_persistent_default_layer(_WINDOWS);
- return false;
- case MAC:
- set_single_persistent_default_layer(_MAC);
- return false;
- }
- }
- return true;
-}
diff --git a/keyboards/bastardkb/tbk/keymaps/xyverz/readme.md b/keyboards/bastardkb/tbk/keymaps/xyverz/readme.md
deleted file mode 100644
index b806bd265a96..000000000000
--- a/keyboards/bastardkb/tbk/keymaps/xyverz/readme.md
+++ /dev/null
@@ -1,22 +0,0 @@
-# The Bastard Keyboard
-
-A split ergonomic keyboard.
-
-* Keyboard Maintainer: [Bastard Keyboards](https://github.com/Bastardkb/)
-* Hardware Supported: elite-C V4
-* Hardware Availability: [Bastard Keyboards](https://bastardkb.com/)
-
-Make example for this keyboard (after setting up your build environment):
-
- make bastardkb/tbk:default
-
-See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
-
-See the [keyboard build instructions](https://docs.bastardkb.com)
-
-
-## Important information regarding the reset
-
-If you modify this firmware, make sure to always have a `QK_BOOT` key that can be triggered using only the master side ! This way you ensure that you can always flash the keyboard, even if you mess up.
-
-Otherwise if you're stuck, open the case and reset manually by shorting Gnd and Rst, or pressing the RST button.
diff --git a/keyboards/bastardkb/tbkmini/blackpill/info.json b/keyboards/bastardkb/tbkmini/blackpill/info.json
index dcdce8f63b5b..c41046085746 100644
--- a/keyboards/bastardkb/tbkmini/blackpill/info.json
+++ b/keyboards/bastardkb/tbkmini/blackpill/info.json
@@ -3,6 +3,9 @@
"usb": {
"device_version": "1.0.0"
},
+ "eeprom": {
+ "driver": "spi"
+ },
"rgb_matrix": {
"driver": "ws2812"
},
diff --git a/keyboards/bastardkb/tbkmini/blackpill/rules.mk b/keyboards/bastardkb/tbkmini/blackpill/rules.mk
index 8c0e9b589186..b5612ce38a86 100644
--- a/keyboards/bastardkb/tbkmini/blackpill/rules.mk
+++ b/keyboards/bastardkb/tbkmini/blackpill/rules.mk
@@ -21,5 +21,4 @@ SPLIT_KEYBOARD = yes
MOUSE_SHARED_EP = no # Unify multiple HID interfaces into a single Endpoint
KEYBOARD_SHARED_EP = yes
-EEPROM_DRIVER = spi
SERIAL_DRIVER = usart
diff --git a/keyboards/bastardkb/tbkmini/config.h b/keyboards/bastardkb/tbkmini/config.h
index ea18f4349e7b..1a1540b280da 100644
--- a/keyboards/bastardkb/tbkmini/config.h
+++ b/keyboards/bastardkb/tbkmini/config.h
@@ -24,7 +24,6 @@
# define RGB_MATRIX_LED_COUNT 42
# define RGB_MATRIX_SPLIT { 21, 21 }
# define RGB_MATRIX_MAXIMUM_BRIGHTNESS 50
-# define RGB_MATRIX_DEFAULT_VAL RGB_MATRIX_MAXIMUM_BRIGHTNESS
# define RGB_DISABLE_WHEN_USB_SUSPENDED
# define RGB_MATRIX_KEYPRESSES
#endif
diff --git a/keyboards/bastardkb/tbkmini/v2/splinky_2/rules.mk b/keyboards/bastardkb/tbkmini/v2/splinky_2/rules.mk
index 274e95c039d1..53f4c0baa87c 100644
--- a/keyboards/bastardkb/tbkmini/v2/splinky_2/rules.mk
+++ b/keyboards/bastardkb/tbkmini/v2/splinky_2/rules.mk
@@ -1,7 +1,3 @@
-# RP2040-specific options
-ALLOW_WARNINGS = yes
-PICO_INTRINSICS_ENABLED = no # ATM Unsupported by ChibiOS.
-
# Build Options
# change yes to no to disable
#
diff --git a/keyboards/bastardkb/tbkmini/v2/splinky_3/rules.mk b/keyboards/bastardkb/tbkmini/v2/splinky_3/rules.mk
index 274e95c039d1..53f4c0baa87c 100644
--- a/keyboards/bastardkb/tbkmini/v2/splinky_3/rules.mk
+++ b/keyboards/bastardkb/tbkmini/v2/splinky_3/rules.mk
@@ -1,7 +1,3 @@
-# RP2040-specific options
-ALLOW_WARNINGS = yes
-PICO_INTRINSICS_ENABLED = no # ATM Unsupported by ChibiOS.
-
# Build Options
# change yes to no to disable
#
diff --git a/keyboards/beatervan/keymaps/oj/keymap.c b/keyboards/beatervan/keymaps/oj/keymap.c
deleted file mode 100644
index 6b32c4ddc1bd..000000000000
--- a/keyboards/beatervan/keymaps/oj/keymap.c
+++ /dev/null
@@ -1,93 +0,0 @@
-/* Copyright 2020 OJtheTiny
- *
- * 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 .
- */
-#include QMK_KEYBOARD_H
-
-enum layers {
- _QW,
- _DV,
- _CM,
- _L1,
- _L2,
- _L3
-};
-enum custom_keycodes {
- DVORAK = SAFE_RANGE,
- QWERTY,
- COLEMAK
-};
-
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [_QW] = LAYOUT( /* Qwerty */
- KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_DEL,
- KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_QUOT, KC_ENTER,
- 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_TAB, MO(_L1), KC_LGUI, KC_SPC, KC_BSPC, KC_LALT, KC_RALT, TG(_L3)
- ),
- [_DV] = LAYOUT( /* Dvorak */
- KC_ESC, KC_SLSH, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_QUOT,
- KC_LCTL, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_ENTER,
- 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_TAB, MO(_L1), KC_LGUI, KC_SPC, KC_BSPC, KC_LALT, KC_RALT, TG(_L3)
- ),
- [_CM] = LAYOUT( /* Colemak */
- KC_ESC, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_QUOT,
- KC_LCTL, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_ENTER,
- 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_TAB, MO(_L1), KC_LGUI, KC_SPC, KC_BSPC, KC_LALT, KC_RALT, TG(_L3)
- ),
- [_L1] = LAYOUT( /* NUM */
- KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL,
- _______, _______, _______, _______, _______, _______, KC_LEFT, KC_UP, KC_DOWN, KC_RGHT, KC_SCLN, KC_BSLS,
- _______, _______, _______, KC_PSCR, _______, _______, _______, _______, KC_LBRC, KC_RBRC, KC_MINS, KC_EQL,
- _______, _______, _______, _______, _______, _______, _______, _______
- ),
- [_L2] = LAYOUT( /* F Keys */
- _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
- _______, KC_MPRV, KC_MPLY, KC_MNXT, _______, _______, _______, _______, _______, _______, _______, KC_ENTER,
- _______, QWERTY, DVORAK, COLEMAK, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______
- ),
- [_L3] = LAYOUT( /* Gaming */
- KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, _______, KC_F1, KC_F2, KC_F3, KC_F4, _______,
- KC_TAB, KC_Q, KC_W, KC_E, KC_R, _______, _______, KC_F5, KC_F6, KC_F7, KC_F8, _______,
- KC_LCTL, KC_A, KC_S, KC_D, KC_F, _______, MO(_L2), KC_F9, KC_F10, KC_F11, KC_F12, _______,
- KC_LSFT, KC_Z, KC_B, KC_SPC, KC_BSPC, _______, _______, TG(_L3)
- )
-};
-
-bool process_record_user(uint16_t keycode, keyrecord_t *record) {
- switch(keycode) {
- case DVORAK:
- if (record->event.pressed) {
- set_single_persistent_default_layer(_DV);
- }
- return false;
- case QWERTY:
- if (record->event.pressed) {
- set_single_persistent_default_layer(_QW);
- }
- return false;
- case COLEMAK:
- if (record->event.pressed) {
- set_single_persistent_default_layer(_CM);
- }
- return false;
- default:
- return true;
- }
- return true;
-};
diff --git a/keyboards/beatervan/keymaps/oj/readme.md b/keyboards/beatervan/keymaps/oj/readme.md
deleted file mode 100644
index 34c2f075c855..000000000000
--- a/keyboards/beatervan/keymaps/oj/readme.md
+++ /dev/null
@@ -1 +0,0 @@
-#Objectively superior keymap for v44
diff --git a/keyboards/beekeeb/piantor_pro/config.h b/keyboards/beekeeb/piantor_pro/config.h
new file mode 100644
index 000000000000..4f0be6dbbea0
--- /dev/null
+++ b/keyboards/beekeeb/piantor_pro/config.h
@@ -0,0 +1,17 @@
+// Copyright 2023 QMK
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET
+#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET_TIMEOUT 1000U
+
+#define SERIAL_USART_FULL_DUPLEX
+#define SERIAL_USART_TX_PIN GP0
+#define SERIAL_USART_RX_PIN GP1
+#define SERIAL_USART_PIN_SWAP
+
+#define USB_VBUS_PIN GP19
+
+#define SPLIT_HAND_PIN GP17
+#define SPLIT_HAND_PIN_LOW_IS_LEFT
diff --git a/keyboards/beekeeb/piantor_pro/info.json b/keyboards/beekeeb/piantor_pro/info.json
new file mode 100644
index 000000000000..c85247550e21
--- /dev/null
+++ b/keyboards/beekeeb/piantor_pro/info.json
@@ -0,0 +1,78 @@
+{
+ "manufacturer": "beekeeb",
+ "keyboard_name": "piantor_pro",
+ "maintainer": "beekeeb",
+ "bootloader": "rp2040",
+ "diode_direction": "COL2ROW",
+ "features": {
+ "bootmagic": true,
+ "command": false,
+ "console": false,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true
+ },
+ "matrix_pins": {
+ "cols": ["GP11", "GP12", "GP13", "GP14", "GP15", "GP16"],
+ "rows": ["GP7", "GP8", "GP9", "GP10"]
+ },
+ "processor": "RP2040",
+ "url": "",
+ "usb": {
+ "device_version": "1.0.0",
+ "pid": "0x0002",
+ "vid": "0xBEEB"
+ },
+ "split": {
+ "enabled": true
+ },
+ "community_layouts": [ "split_3x6_3" ],
+ "layouts": {
+ "LAYOUT_split_3x6_3": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0.25},
+ {"matrix": [0, 1], "x": 1, "y": 0.25},
+ {"matrix": [0, 2], "x": 2, "y": 0.125},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0.125},
+ {"matrix": [0, 5], "x": 5, "y": 0.25},
+ {"matrix": [4, 5], "x": 8, "y": 0.25},
+ {"matrix": [4, 4], "x": 9, "y": 0.125},
+ {"matrix": [4, 3], "x": 10, "y": 0},
+ {"matrix": [4, 2], "x": 11, "y": 0.125},
+ {"matrix": [4, 1], "x": 12, "y": 0.25},
+ {"matrix": [4, 0], "x": 13, "y": 0.25},
+ {"matrix": [1, 0], "x": 0, "y": 1.25},
+ {"matrix": [1, 1], "x": 1, "y": 1.25},
+ {"matrix": [1, 2], "x": 2, "y": 1.125},
+ {"matrix": [1, 3], "x": 3, "y": 1},
+ {"matrix": [1, 4], "x": 4, "y": 1.125},
+ {"matrix": [1, 5], "x": 5, "y": 1.25},
+ {"matrix": [5, 5], "x": 8, "y": 1.25},
+ {"matrix": [5, 4], "x": 9, "y": 1.125},
+ {"matrix": [5, 3], "x": 10, "y": 1},
+ {"matrix": [5, 2], "x": 11, "y": 1.125},
+ {"matrix": [5, 1], "x": 12, "y": 1.25},
+ {"matrix": [5, 0], "x": 13, "y": 1.25},
+ {"matrix": [2, 0], "x": 0, "y": 2.25},
+ {"matrix": [2, 1], "x": 1, "y": 2.25},
+ {"matrix": [2, 2], "x": 2, "y": 2.125},
+ {"matrix": [2, 3], "x": 3, "y": 2},
+ {"matrix": [2, 4], "x": 4, "y": 2.125},
+ {"matrix": [2, 5], "x": 5, "y": 2.25},
+ {"matrix": [6, 5], "x": 8, "y": 2.25},
+ {"matrix": [6, 4], "x": 9, "y": 2.125},
+ {"matrix": [6, 3], "x": 10, "y": 2},
+ {"matrix": [6, 2], "x": 11, "y": 2.125},
+ {"matrix": [6, 1], "x": 12, "y": 2.25},
+ {"matrix": [6, 0], "x": 13, "y": 2.25},
+ {"matrix": [3, 3], "x": 3.5, "y": 3.25},
+ {"matrix": [3, 4], "x": 4.5, "y": 3.5},
+ {"matrix": [3, 5], "x": 5.5, "y": 3.75},
+ {"matrix": [7, 5], "x": 7.5, "y": 3.75},
+ {"matrix": [7, 4], "x": 8.5, "y": 3.5},
+ {"matrix": [7, 3], "x": 9.5, "y": 3.25}
+ ]
+ }
+ }
+}
diff --git a/keyboards/beekeeb/piantor_pro/keymaps/default/keymap.c b/keyboards/beekeeb/piantor_pro/keymaps/default/keymap.c
new file mode 100644
index 000000000000..ed09dd7d069f
--- /dev/null
+++ b/keyboards/beekeeb/piantor_pro/keymaps/default/keymap.c
@@ -0,0 +1,55 @@
+// Copyright 2023 QMK
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_split_3x6_3(
+ //,-----------------------------------------------------. ,-----------------------------------------------------.
+ 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_QUOT,
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ESC,
+ //|--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------|
+ KC_LGUI, MO(1), KC_SPC, KC_ENT, MO(2), KC_RALT
+ //`--------------------------' `--------------------------'
+
+ ),
+
+ [1] = LAYOUT_split_3x6_3(
+ //,-----------------------------------------------------. ,-----------------------------------------------------.
+ KC_TAB, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
+ KC_LCTL, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_LEFT, KC_DOWN, KC_UP,KC_RIGHT, XXXXXXX, XXXXXXX,
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
+ KC_LSFT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ //|--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------|
+ KC_LGUI, _______, KC_SPC, KC_ENT, MO(3), KC_RALT
+ //`--------------------------' `--------------------------'
+ ),
+
+ [2] = LAYOUT_split_3x6_3(
+ //,-----------------------------------------------------. ,-----------------------------------------------------.
+ KC_TAB, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC,
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
+ KC_LCTL, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, KC_GRV,
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
+ KC_LSFT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, KC_TILD,
+ //|--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------|
+ KC_LGUI, MO(3), KC_SPC, KC_ENT, _______, KC_RALT
+ //`--------------------------' `--------------------------'
+ ),
+
+ [3] = LAYOUT_split_3x6_3(
+ //,-----------------------------------------------------. ,-----------------------------------------------------.
+ QK_BOOT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
+ RGB_TOG, RGB_HUI, RGB_SAI, RGB_VAI, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
+ RGB_MOD, RGB_HUD, RGB_SAD, RGB_VAD, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ //|--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------|
+ KC_LGUI, _______, KC_SPC, KC_ENT, _______, KC_RALT
+ //`--------------------------' `--------------------------'
+ )
+};
diff --git a/keyboards/beekeeb/piantor_pro/readme.md b/keyboards/beekeeb/piantor_pro/readme.md
new file mode 100644
index 000000000000..08012e43dff2
--- /dev/null
+++ b/keyboards/beekeeb/piantor_pro/readme.md
@@ -0,0 +1,20 @@
+# Piantor Pro
+
+![Piantor Pro](https://i.imgur.com/UPRI64ch.jpg)
+
+A 42 key hotswappable keyboard with RP2040.
+
+* Keyboard Maintainer: [beekeeb](https://github.com/beekeeb)
+* Hardware Availability: [beekeeb.shop](https://beekeeb.shop)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make beekeeb/piantor_pro:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+## Flashing
+
+To enter the bootloader mode, disconnect the keyboard from the computer. While holding the BOOT button, connect the keyboard to the computer.
+
+Run `make beekeeb/piantor_pro:default:flash` or copy the compiled uf2 firmware to the USB mass storage device.
diff --git a/keyboards/beekeeb/piantor_pro/rules.mk b/keyboards/beekeeb/piantor_pro/rules.mk
new file mode 100644
index 000000000000..161ec22b16e2
--- /dev/null
+++ b/keyboards/beekeeb/piantor_pro/rules.mk
@@ -0,0 +1 @@
+SERIAL_DRIVER = vendor
diff --git a/keyboards/bemeier/bmek/bmek.c b/keyboards/bemeier/bmek/bmek.c
index eaae446d6384..dd0372aaee46 100755
--- a/keyboards/bemeier/bmek/bmek.c
+++ b/keyboards/bemeier/bmek/bmek.c
@@ -15,9 +15,12 @@
*/
#include "quantum.h"
-__attribute__((weak))
-void shutdown_user(void) {
+bool shutdown_kb(bool jump_to_bootloader) {
+ if (!shutdown_user(jump_to_bootloader)) {
+ return false;
+ }
#ifdef RGBLIGHT_ENABLE
rgblight_setrgb(255, 0, 0);
#endif
+ return true;
}
diff --git a/keyboards/bemeier/bmek/config.h b/keyboards/bemeier/bmek/config.h
index 455345409626..1deca961a0cb 100755
--- a/keyboards/bemeier/bmek/config.h
+++ b/keyboards/bemeier/bmek/config.h
@@ -15,6 +15,4 @@
*/
#pragma once
-
-#define DYNAMIC_KEYMAP_LAYER_COUNT 5
#define VIA_EEPROM_CUSTOM_CONFIG_SIZE 20
diff --git a/keyboards/bemeier/bmek/info.json b/keyboards/bemeier/bmek/info.json
index 0959f9f3a6f2..31d2b5f9bd96 100755
--- a/keyboards/bemeier/bmek/info.json
+++ b/keyboards/bemeier/bmek/info.json
@@ -7,6 +7,9 @@
"vid": "0x626D",
"pid": "0x656B"
},
+ "dynamic_keymap": {
+ "layer_count": 5
+ },
"layouts": {
"LAYOUT_all": {
"layout": [
diff --git a/keyboards/bestway/bestway.c b/keyboards/bestway/bestway.c
new file mode 100644
index 000000000000..e41836ca691b
--- /dev/null
+++ b/keyboards/bestway/bestway.c
@@ -0,0 +1,43 @@
+/* Copyright 2022 LXF-YZP(yuezp)
+ *
+ * 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 .
+ */
+
+#include "quantum.h"
+
+#ifdef RGBLIGHT_ENABLE
+
+const rgblight_segment_t PROGMEM my_capslock_layer[] = RGBLIGHT_LAYER_SEGMENTS(
+ {0, 1, HSV_RED}
+);
+
+const rgblight_segment_t* const PROGMEM my_rgb_layers[] = RGBLIGHT_LAYERS_LIST(
+ my_capslock_layer
+);
+
+bool led_update_kb(led_t led_state) {
+ if (!led_update_user(led_state)) { return false; }
+ rgblight_set_layer_state(0, led_state.caps_lock);
+ return true;
+}
+
+void keyboard_post_init_kb(void) {
+ rgblight_layers = my_rgb_layers;
+ keyboard_post_init_user();
+}
+
+#endif
+void board_init(void) {
+ AFIO->MAPR |= AFIO_MAPR_TIM2_REMAP_PARTIALREMAP2;
+}
diff --git a/keyboards/bestway/config.h b/keyboards/bestway/config.h
new file mode 100644
index 000000000000..c63a25d9a661
--- /dev/null
+++ b/keyboards/bestway/config.h
@@ -0,0 +1,22 @@
+/* Copyright 2022 LXF-YZP(yuezp)
+ *
+ * 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 .
+ */
+
+#pragma once
+
+#define WS2812_PWM_DRIVER PWMD2
+#define WS2812_PWM_CHANNEL 4
+#define WS2812_DMA_STREAM STM32_DMA1_STREAM2
+#define WS2812_DMA_CHANNEL 2
diff --git a/keyboards/bestway/halconf.h b/keyboards/bestway/halconf.h
new file mode 100644
index 000000000000..76f44ff900a3
--- /dev/null
+++ b/keyboards/bestway/halconf.h
@@ -0,0 +1,21 @@
+/* Copyright 2022 LXF-YZP(yuezp)
+ *
+ * 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 .
+ */
+
+#pragma once
+
+#define HAL_USE_PWM TRUE
+
+#include_next
diff --git a/keyboards/bestway/info.json b/keyboards/bestway/info.json
new file mode 100644
index 000000000000..66856115f8bd
--- /dev/null
+++ b/keyboards/bestway/info.json
@@ -0,0 +1,212 @@
+{
+ "manufacturer": "meet_lab",
+ "keyboard_name": "Best",
+ "maintainer": "yuezp",
+ "development_board": "bluepill",
+ "diode_direction": "COL2ROW",
+ "features": {
+ "bootmagic": true,
+ "extrakey": true,
+ "nkro": true,
+ "rgblight": true
+ },
+ "matrix_pins": {
+ "cols": ["B3", "B9", "B8", "B7", "B6", "B5", "B4", "B10", "A7", "A3", "A4", "A5", "A6", "B0", "B12", "B13", "B14"],
+ "rows": ["A15", "A10", "A8", "A9", "B15"]
+ },
+ "rgblight": {
+ "animations": {
+ "alternating": true,
+ "breathing": true,
+ "christmas": true,
+ "knight": true,
+ "rainbow_mood": true,
+ "rainbow_swirl": true,
+ "rgb_test": true,
+ "snake": true,
+ "static_gradient": true,
+ "twinkle": true
+ },
+ "layers": {
+ "enabled": true,
+ "override_rgb": false
+ },
+ "brightness_steps": 10,
+ "led_count": 3,
+ "saturation_steps": 8
+ },
+ "url": "",
+ "usb": {
+ "device_version": "1.0.0",
+ "pid": "0xBB05",
+ "vid": "0xAA05"
+ },
+ "ws2812": {
+ "driver": "pwm",
+ "pin": "B11"
+ },
+ "community_layouts": ["tkl_nofrow_ansi"],
+ "layout_aliases": {
+ "LAYOUT": "LAYOUT_all"
+ },
+ "layouts": {
+ "LAYOUT_all": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10, "y": 0},
+ {"matrix": [0, 11], "x": 11, "y": 0},
+ {"matrix": [0, 12], "x": 12, "y": 0},
+ {"matrix": [0, 13], "x": 13, "y": 0, "w": 2},
+ {"matrix": [0, 14], "x": 15.25, "y": 0},
+ {"matrix": [0, 15], "x": 16.25, "y": 0},
+ {"matrix": [0, 16], "x": 17.25, "y": 0},
+
+ {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"matrix": [1, 1], "x": 1.5, "y": 1},
+ {"matrix": [1, 2], "x": 2.5, "y": 1},
+ {"matrix": [1, 3], "x": 3.5, "y": 1},
+ {"matrix": [1, 4], "x": 4.5, "y": 1},
+ {"matrix": [1, 5], "x": 5.5, "y": 1},
+ {"matrix": [1, 6], "x": 6.5, "y": 1},
+ {"matrix": [1, 7], "x": 7.5, "y": 1},
+ {"matrix": [1, 8], "x": 8.5, "y": 1},
+ {"matrix": [1, 9], "x": 9.5, "y": 1},
+ {"matrix": [1, 10], "x": 10.5, "y": 1},
+ {"matrix": [1, 11], "x": 11.5, "y": 1},
+ {"matrix": [1, 12], "x": 12.5, "y": 1},
+ {"matrix": [1, 13], "x": 13.5, "y": 1, "w": 1.5},
+ {"matrix": [1, 14], "x": 15.25, "y": 1},
+ {"matrix": [1, 15], "x": 16.25, "y": 1},
+ {"matrix": [1, 16], "x": 17.25, "y": 1},
+
+ {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"matrix": [2, 1], "x": 1.75, "y": 2},
+ {"matrix": [2, 2], "x": 2.75, "y": 2},
+ {"matrix": [2, 3], "x": 3.75, "y": 2},
+ {"matrix": [2, 4], "x": 4.75, "y": 2},
+ {"matrix": [2, 5], "x": 5.75, "y": 2},
+ {"matrix": [2, 6], "x": 6.75, "y": 2},
+ {"matrix": [2, 7], "x": 7.75, "y": 2},
+ {"matrix": [2, 8], "x": 8.75, "y": 2},
+ {"matrix": [2, 9], "x": 9.75, "y": 2},
+ {"matrix": [2, 10], "x": 10.75, "y": 2},
+ {"matrix": [2, 11], "x": 11.75, "y": 2},
+ {"matrix": [2, 12], "x": 12.75, "y": 2, "w": 2.25},
+
+ {"matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
+ {"matrix": [3, 1], "x": 2.25, "y": 3},
+ {"matrix": [3, 2], "x": 3.25, "y": 3},
+ {"matrix": [3, 3], "x": 4.25, "y": 3},
+ {"matrix": [3, 4], "x": 5.25, "y": 3},
+ {"matrix": [3, 5], "x": 6.25, "y": 3},
+ {"matrix": [3, 6], "x": 7.25, "y": 3},
+ {"matrix": [3, 7], "x": 8.25, "y": 3},
+ {"matrix": [3, 8], "x": 9.25, "y": 3},
+ {"matrix": [3, 9], "x": 10.25, "y": 3},
+ {"matrix": [3, 10], "x": 11.25, "y": 3},
+ {"matrix": [3, 12], "x": 12.25, "y": 3, "w": 2.75},
+ {"matrix": [3, 15], "x": 16.25, "y": 3},
+
+ {"matrix": [4, 0], "x": 0, "y": 4, "w": 1.25},
+ {"matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.25},
+ {"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.25},
+ {"matrix": [4, 5], "x": 3.75, "y": 4, "w": 6.25},
+ {"matrix": [4, 9], "x": 10, "y": 4, "w": 1.25},
+ {"matrix": [4, 10], "x": 11.25, "y": 4, "w": 1.25},
+ {"matrix": [4, 11], "x": 12.5, "y": 4, "w": 1.25},
+ {"matrix": [4, 12], "x": 13.75, "y": 4, "w": 1.25},
+ {"matrix": [4, 14], "x": 15.25, "y": 4},
+ {"matrix": [4, 15], "x": 16.25, "y": 4},
+ {"matrix": [4, 16], "x": 17.25, "y": 4}
+ ]
+ },
+ "LAYOUT_tkl_nofrow_ansi": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10, "y": 0},
+ {"matrix": [0, 11], "x": 11, "y": 0},
+ {"matrix": [0, 12], "x": 12, "y": 0},
+ {"matrix": [0, 13], "x": 13, "y": 0, "w": 2},
+ {"matrix": [0, 14], "x": 15.25, "y": 0},
+ {"matrix": [0, 15], "x": 16.25, "y": 0},
+ {"matrix": [0, 16], "x": 17.25, "y": 0},
+
+ {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"matrix": [1, 1], "x": 1.5, "y": 1},
+ {"matrix": [1, 2], "x": 2.5, "y": 1},
+ {"matrix": [1, 3], "x": 3.5, "y": 1},
+ {"matrix": [1, 4], "x": 4.5, "y": 1},
+ {"matrix": [1, 5], "x": 5.5, "y": 1},
+ {"matrix": [1, 6], "x": 6.5, "y": 1},
+ {"matrix": [1, 7], "x": 7.5, "y": 1},
+ {"matrix": [1, 8], "x": 8.5, "y": 1},
+ {"matrix": [1, 9], "x": 9.5, "y": 1},
+ {"matrix": [1, 10], "x": 10.5, "y": 1},
+ {"matrix": [1, 11], "x": 11.5, "y": 1},
+ {"matrix": [1, 12], "x": 12.5, "y": 1},
+ {"matrix": [1, 13], "x": 13.5, "y": 1, "w": 1.5},
+ {"matrix": [1, 14], "x": 15.25, "y": 1},
+ {"matrix": [1, 15], "x": 16.25, "y": 1},
+ {"matrix": [1, 16], "x": 17.25, "y": 1},
+
+ {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"matrix": [2, 1], "x": 1.75, "y": 2},
+ {"matrix": [2, 2], "x": 2.75, "y": 2},
+ {"matrix": [2, 3], "x": 3.75, "y": 2},
+ {"matrix": [2, 4], "x": 4.75, "y": 2},
+ {"matrix": [2, 5], "x": 5.75, "y": 2},
+ {"matrix": [2, 6], "x": 6.75, "y": 2},
+ {"matrix": [2, 7], "x": 7.75, "y": 2},
+ {"matrix": [2, 8], "x": 8.75, "y": 2},
+ {"matrix": [2, 9], "x": 9.75, "y": 2},
+ {"matrix": [2, 10], "x": 10.75, "y": 2},
+ {"matrix": [2, 11], "x": 11.75, "y": 2},
+ {"matrix": [2, 12], "x": 12.75, "y": 2, "w": 2.25},
+
+ {"matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
+ {"matrix": [3, 1], "x": 2.25, "y": 3},
+ {"matrix": [3, 2], "x": 3.25, "y": 3},
+ {"matrix": [3, 3], "x": 4.25, "y": 3},
+ {"matrix": [3, 4], "x": 5.25, "y": 3},
+ {"matrix": [3, 5], "x": 6.25, "y": 3},
+ {"matrix": [3, 6], "x": 7.25, "y": 3},
+ {"matrix": [3, 7], "x": 8.25, "y": 3},
+ {"matrix": [3, 8], "x": 9.25, "y": 3},
+ {"matrix": [3, 9], "x": 10.25, "y": 3},
+ {"matrix": [3, 10], "x": 11.25, "y": 3},
+ {"matrix": [3, 12], "x": 12.25, "y": 3, "w": 2.75},
+ {"matrix": [3, 15], "x": 16.25, "y": 3},
+
+ {"matrix": [4, 0], "x": 0, "y": 4, "w": 1.25},
+ {"matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.25},
+ {"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.25},
+ {"matrix": [4, 5], "x": 3.75, "y": 4, "w": 6.25},
+ {"matrix": [4, 9], "x": 10, "y": 4, "w": 1.25},
+ {"matrix": [4, 10], "x": 11.25, "y": 4, "w": 1.25},
+ {"matrix": [4, 11], "x": 12.5, "y": 4, "w": 1.25},
+ {"matrix": [4, 12], "x": 13.75, "y": 4, "w": 1.25},
+ {"matrix": [4, 14], "x": 15.25, "y": 4},
+ {"matrix": [4, 15], "x": 16.25, "y": 4},
+ {"matrix": [4, 16], "x": 17.25, "y": 4}
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/keyboards/bestway/keymaps/default/keymap.c b/keyboards/bestway/keymaps/default/keymap.c
new file mode 100644
index 000000000000..8cddc919321c
--- /dev/null
+++ b/keyboards/bestway/keymaps/default/keymap.c
@@ -0,0 +1,35 @@
+/* Copyright 2022 LXF-YZP(yuezp)
+ *
+ * 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 .
+ */
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+[0] = LAYOUT_all(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_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_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_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RCTL, KC_RALT, MO(1), KC_APP, KC_LEFT, KC_DOWN, KC_RGHT),
+
+[1] = LAYOUT_all(
+ KC_TRNS, 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, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS)
+
+};
diff --git a/keyboards/bestway/keymaps/via/keymap.c b/keyboards/bestway/keymaps/via/keymap.c
new file mode 100644
index 000000000000..ae87243f2406
--- /dev/null
+++ b/keyboards/bestway/keymaps/via/keymap.c
@@ -0,0 +1,35 @@
+/* Copyright 2022 LXF-YZP(yuezp)
+ *
+ * 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 .
+ */
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+[0] = LAYOUT_all(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_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_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_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RCTL, KC_RALT, MO(1), KC_APP, KC_LEFT, KC_DOWN, KC_RGHT),
+
+[1] = LAYOUT_all(
+ KC_TRNS, 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, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS)
+
+};
diff --git a/keyboards/keychron/q4/ansi_v1/keymaps/via/rules.mk b/keyboards/bestway/keymaps/via/rules.mk
similarity index 100%
rename from keyboards/keychron/q4/ansi_v1/keymaps/via/rules.mk
rename to keyboards/bestway/keymaps/via/rules.mk
diff --git a/keyboards/bestway/matrix_diagram.md b/keyboards/bestway/matrix_diagram.md
new file mode 100644
index 000000000000..f9757653c125
--- /dev/null
+++ b/keyboards/bestway/matrix_diagram.md
@@ -0,0 +1,19 @@
+# Matrix Diagram for Best
+
+```
+┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐┌───┬───┬───┐
+│00 │01 │02 │03 │04 │05 │06 │07 │08 │09 │0A │0B │0C │0D ││0E │0F │0G │
+├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤├───┼───┼───┤ ┌─────┐
+│10 │11 │12 │13 │14 │15 │16 │17 │18 │19 │1A │1B │1C │1D ││1E │1F │1G │ │ │
+├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤└───┴───┴───┘ ┌──┴┐2C │ ISO Enter
+│20 │21 │22 │23 │24 │25 │26 │27 │28 │29 │2A │2B │2C │ │1D │ │
+├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────────┤ ┌───┐ └───┴────┘
+│30 │31 │32 │33 │34 │35 │36 │37 │38 │39 │3A │3C │ │3F │
+├────────┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤┌───┼───┼───┐
+│40 │41 │42 │45 │49 │4A │4B │4C ││4E │4F │4G │
+└────┴────┴────┴────────────────────────┴────┴────┴────┴────┘└───┴───┴───┘
+
+┌─────┬───┬─────┬───────────────────────────┬─────┬───┬─────┐
+│40 │41 │42 │45 │4A │4B │4C │ Tsangan/WKL
+└─────┴───┴─────┴───────────────────────────┴─────┴───┴─────┘
+```
diff --git a/keyboards/bestway/mcuconf.h b/keyboards/bestway/mcuconf.h
new file mode 100644
index 000000000000..206afe376eba
--- /dev/null
+++ b/keyboards/bestway/mcuconf.h
@@ -0,0 +1,21 @@
+/* Copyright 2022 LXF-YZP(yuezp)
+ *
+ * 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 .
+ */
+
+#pragma once
+#include_next
+
+#undef STM32_PWM_USE_TIM2
+#define STM32_PWM_USE_TIM2 TRUE
diff --git a/keyboards/bestway/readme.md b/keyboards/bestway/readme.md
new file mode 100644
index 000000000000..c91d09e83f20
--- /dev/null
+++ b/keyboards/bestway/readme.md
@@ -0,0 +1,27 @@
+# Best - PCB
+
+![bestway](https://i.imgur.com/5q7i7ayh.jpg)
+
+A 71 keys keyboard with rgb.
+This keyboard use 16mhz HSE and STM32F103 as MCU.
+
+* Keyboard Maintainer: https://github.com/LXF-YZP
+* Hardware Supported: bestway PCB
+
+Make example for this keyboard (after setting up your build environment):
+
+ make bestway:default
+
+Flashing example for this keyboard:
+
+ make bestway:default:flash
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+## Bootloader
+
+Enter the bootloader in 3 ways:
+
+* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard
+* **Physical reset button**: Briefly press the button on the back of the PCB - some may have pads you must short instead
+* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available
\ No newline at end of file
diff --git a/keyboards/bestway/rules.mk b/keyboards/bestway/rules.mk
new file mode 100644
index 000000000000..7ff128fa692e
--- /dev/null
+++ b/keyboards/bestway/rules.mk
@@ -0,0 +1 @@
+# This file intentionally left blank
\ No newline at end of file
diff --git a/keyboards/bfake/keymaps/mechmerlin/keymap.c b/keyboards/bfake/keymaps/mechmerlin/keymap.c
deleted file mode 100644
index fec728d87eb1..000000000000
--- a/keyboards/bfake/keymaps/mechmerlin/keymap.c
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
-Copyright 2017 Luiz Ribeiro
-
-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 .
-*/
-
-#include QMK_KEYBOARD_H
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [0] = LAYOUT_all(
- QK_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_NO, KC_BSPC,
- KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
- KC_LCTL, 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_NO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, TG(2),
- KC_LCTL, KC_LGUI, KC_LALT, KC_SPACE, MO(1), KC_RALT, KC_RGUI, KC_RCTL
- ),
- [1] = LAYOUT_all(
- 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_DEL,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_CAPS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- MO(3), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MUTE, KC_VOLD, KC_VOLU, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
- ),
- [2] = LAYOUT_all(
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_UP, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_RIGHT
- ),
-
- [3] = LAYOUT_all(
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, QK_BOOT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
- ),
-};
-
diff --git a/keyboards/bfake/keymaps/mechmerlin/readme.md b/keyboards/bfake/keymaps/mechmerlin/readme.md
deleted file mode 100644
index b85b6537c1c6..000000000000
--- a/keyboards/bfake/keymaps/mechmerlin/readme.md
+++ /dev/null
@@ -1,18 +0,0 @@
-MechMerlin's FaceW Sprit Edition Layout
-======================
-
-This is the preferred 60% layout used by u/merlin36, host of the [MechMerlin YouTube channel](www.youtube.com/mechmerlin).
-
-## Keyboard Notes
-- The FaceW Sprit Edition can be purchased on [mechanicalkeyboards.com](www.mechanicalkeyboards.com)
-- Uses ps2avru instead of ps2avrgb
-- To put in reset mode hold `q` while inserting the USB cable
-- Use flashing instructions from ps2avrgb QMK port
-
-## Keymap Notes
-- Does not support any form of inswitch lighting as Merlin hates them.
-- Arrow toggle switch to the right of right shift
-- Reset is FN + Left Shift + R
-
-### Build
-To build this keymap, simply run `make bfake:mechmerlin` from the qmk_firmware directory.
diff --git a/keyboards/biacco42/ergo42/keymaps/biacco-biacco/config.h b/keyboards/biacco42/ergo42/keymaps/biacco-biacco/config.h
deleted file mode 100644
index f12d6fb3d4ae..000000000000
--- a/keyboards/biacco42/ergo42/keymaps/biacco-biacco/config.h
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
-This is the c configuration file for the keymap
-
-Copyright 2012 Jun Wako
-Copyright 2015 Jack Humbert
-
-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 .
-*/
-
-#pragma once
-
-// #define USE_I2C
-
-/* Select hand configuration */
-
-#define MASTER_LEFT
-// #define MASTER_RIGHT
-// #define EE_HANDS
-
diff --git a/keyboards/biacco42/ergo42/keymaps/biacco-biacco/keymap.c b/keyboards/biacco42/ergo42/keymaps/biacco-biacco/keymap.c
deleted file mode 100644
index 9440af886a71..000000000000
--- a/keyboards/biacco42/ergo42/keymaps/biacco-biacco/keymap.c
+++ /dev/null
@@ -1,157 +0,0 @@
-#include QMK_KEYBOARD_H
-#include "action_layer.h"
-#include "eeconfig.h"
-
-extern keymap_config_t keymap_config;
-
-#define BASE 0
-#define META 1
-#define SYMB 2
-#define GAME 3
-#define BIAC 4
-#define BMETA 5
-#define BSYMB 6
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-
-/* BASE
- * ,------------------------------------------------. ,------------------------------------------------.
- * | Tab | Q | W | E | R | T | [ | | ] | Y | U | I | O | P | @ |
- * |------+------+------+------+------+------+------| |-------------+------+------+------+------+------|
- * | Alt | A | S | D | F | G | ( | | ) | H | J | K | L | ; | : |
- * |------+------+------+------+------+------+------| |------|------+------+------+------+------+------|
- * | Sft | Z | X | C | V | B | { | | } | N | M | , | . | / |\/Sft |
- * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
- * | Ctrl | GUI | App |PrtSc |ESC/ |Space/|Tab/ | |Back |Enter/| Del |PrtSc |=>GAME|=>SYMB| \ |
- * | | | | |~SYMB |RCtrl |Shift | |Space |~META | | | | | |
- * `------------------------------------------------' `------------------------------------------------'
- */
-
-[BASE] = LAYOUT(
- KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_RBRC, KC_BSLS, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC,
- KC_LALT, KC_A, KC_S, KC_D, KC_F, KC_G, S(KC_8), S(KC_9), KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
- KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, S(KC_RBRC), S(KC_BSLS), KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SFT_T(KC_INT1),
- KC_LCTL, KC_LGUI, KC_APP, TG(BIAC),LT(SYMB, KC_ESC), RCTL_T(KC_SPC),SFT_T(KC_TAB), KC_BSPC, LT(META, KC_ENT), KC_DEL, KC_PSCR, TG(GAME), TG(SYMB), KC_INT3
-),
-
-/* META
- * ,------------------------------------------------. ,------------------------------------------------.
- * | 1 | 2 | 3 | 4 | 5 | 6 | [ | | ] | 7 | 8 | 9 | 0 | - | ^ |
- * |------+------+------+------+------+------+------| |-------------+------+------+------+------+------|
- * | Alt | F1 | |Muhen | Henk | | ( | | ) | Left | Down | Up |Right | | |
- * |------+------+------+------+------+------+------| |------|------+------+------+------+------+------|
- * | Sft | F2 | F3 | F4 | F5 | F6 | { | | } | F7 | F8 | F9 | F10 | F11 |\/Sft |
- * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
- * | Ctrl | GUI | App |PrtSc |ESC/ |Space/|Tab/ | |Back |Enter/| Del |Reset |=>GAME|=>SYMB| \ |
- * | | | | |~SYMB |RCtrl |Shift | |Space |~META | | | | | |
- * `------------------------------------------------' `------------------------------------------------'
- */
-
-[META] = LAYOUT(
- 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_F1, XXXXXXX, KC_INT5, KC_INT4, XXXXXXX, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, XXXXXXX, XXXXXXX,
- _______, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, _______, _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, SFT_T(KC_INT1),
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, QK_BOOT, _______, _______, _______
-),
-
-/* SYMB
- * ,------------------------------------------------. ,------------------------------------------------.
- * | ! | " | # | $ | % | & | [ | | ] | ' | ( | ) | ~ | = | ~ |
- * |------+------+------+------+------+------+------| |-------------+------+------+------+------+------|
- * | Alt | | | | | | ( | | ) | | | | | + | * |
- * |------+------+------+------+------+------+------| |------|------+------+------+------+------+------|
- * | Sft | | | | | | { | | } | | | < | > | ? | \ |
- * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
- * | Ctrl | GUI | App |PrtSc |ESC/ |Space/|Tab/ | |Back |Enter/| Del |PrtSc |=>GAME|=>SYMB| \ |
- * | | | | |~SYMB |RCtrl |Shift | |Space |~META | | | | | |
- * `------------------------------------------------' `------------------------------------------------'
- */
-
-[SYMB] = LAYOUT(
- S(KC_1), S(KC_2), S(KC_3), S(KC_4), S(KC_5), S(KC_6), _______, _______, S(KC_7), S(KC_8), S(KC_9), S(KC_0), S(KC_MINS), S(KC_EQL),
- _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, S(KC_SCLN), S(KC_QUOT),
- _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, XXXXXXX, XXXXXXX, S(KC_COMM), S(KC_DOT), S(KC_SLSH), S(KC_INT1),
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
-),
-
-/* GAME
- * ,------------------------------------------------. ,------------------------------------------------.
- * | Tab | Q | W | E | R | T | [ | | ] | Y | U | I | O | P | @ |
- * |------+------+------+------+------+------+------| |-------------+------+------+------+------+------|
- * | Alt | A | S | D | F | G | ( | | ) | H | J | K | L | ; | : |
- * |------+------+------+------+------+------+------| |------|------+------+------+------+------+------|
- * | Sft | Z | X | C | V | B | { | | } | N | M | , | . | / |\/Sft |
- * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
- * | Ctrl | GUI | App |PrtSc | ESC |Space |Tab | |Back |Enter | Del |PrtSc |=>GAME|=>SYMB| \ |
- * | | | | | | | | |Space | | | | | | |
- * `------------------------------------------------' `------------------------------------------------'
- */
-[GAME] = LAYOUT(
- KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_RBRC, KC_BSLS, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC,
- KC_LALT, KC_A, KC_S, KC_D, KC_F, KC_G, S(KC_8), S(KC_9), KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
- KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, S(KC_RBRC), S(KC_BSLS), KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SFT_T(KC_INT1),
- KC_LCTL, KC_LGUI, KC_APP, KC_PSCR, KC_ESC, KC_SPC, KC_TAB, KC_BSPC, KC_ENT, KC_DEL, KC_PSCR, _______, _______, KC_INT3
-),
-
-/* BIAC
- * ,------------------------------------------------. ,------------------------------------------------.
- * | Tab | ; | , | . | P | Q | [ | | ] | Y | G | D | M | F | @ |
- * |------+------+------+------+------+------+------| |-------------+------+------+------+------+------|
- * | Alt | A | O | E | I | U | ( | | ) | B | N | T | R | S | : |
- * |------+------+------+------+------+------+------| |------|------+------+------+------+------+------|
- * | Sft | Z | X | C | V | W | { | | } | H | J | K | L | / |\/Sft |
- * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
- * | Ctrl | GUI | App |=>BIAC|ESC/ |Space/|Tab/ | |Back |Enter/| Del |PrtSc | | | \ |
- * | | | | |~SYMB |RCtrl |Shift | |Space |~META | | | | | |
- * `------------------------------------------------' `------------------------------------------------'
- */
-
-[BIAC] = LAYOUT(
- KC_TAB, KC_SCLN,KC_COMM, KC_DOT, KC_P, KC_Q, KC_RBRC, KC_BSLS, KC_Y, KC_G, KC_D, KC_M, KC_F, KC_LBRC,
- KC_LALT, KC_A, KC_O, KC_E, KC_I, KC_U, S(KC_8), S(KC_9), KC_B, KC_N, KC_T, KC_R, KC_S, KC_QUOT,
- KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_W, S(KC_RBRC), S(KC_BSLS), KC_H, KC_J, KC_K, KC_L, KC_SLSH, SFT_T(KC_INT1),
- KC_LCTL, KC_LGUI, KC_APP, _______, LT(BSYMB, KC_ESC),RCTL_T(KC_SPC),SFT_T(KC_TAB), KC_BSPC, LT(BMETA, KC_ENT),KC_DEL, KC_PSCR, XXXXXXX, XXXXXXX, KC_INT3
-),
-
-/* META
- * ,------------------------------------------------. ,------------------------------------------------.
- * | F1 | F2 | F3 | F4 | F5 | F6 | { | | } | F7 | F8 | F9 | F10 | F11 | F12 |
- * |------+------+------+------+------+------+------| |-------------+------+------+------+------+------|
- * | Alt | 2 | 3 | 4 | 5 | 6 | [ | | ] | 7 | 8 | 9 | 0 | - | ^ |
- * |------+------+------+------+------+------+------| |------|------+------+------+------+------+------|
- * | Sft | 1 | |Muhen | Henk | | ( | | ) | Left | Down | Up |Right | |\/Sft |
- * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
- * | Ctrl | GUI | App | |ESC/ |Space/|Tab/ | |Back |Enter/| Del |Reset | | | \ |
- * | | | | |~SYMB |RCtrl |Shift | |Space |~META | | | | | |
- * `------------------------------------------------' `------------------------------------------------'
- */
-
-[BMETA] = LAYOUT(
- KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, _______, _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,
- _______, KC_2, KC_3, KC_4, KC_5, KC_6, _______, _______, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL,
- _______, KC_1, XXXXXXX, KC_INT5, KC_INT4, XXXXXXX, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, XXXXXXX, SFT_T(KC_INT1),
- _______, _______, _______, XXXXXXX, _______, _______, _______, _______, _______, _______, QK_BOOT, _______, _______, _______
-),
-
-/* SYMB
- * ,------------------------------------------------. ,------------------------------------------------.
- * | | | | | | | [ | | ] | | | [ | ] | + | * |
- * |------+------+------+------+------+------+------| |-------------+------+------+------+------+------|
- * | Alt | " | # | $ | % | & | ( | | ) | ' | ( | ) | | = | ~ |
- * |------+------+------+------+------+------+------| |------|------+------+------+------+------+------|
- * | Sft | ! | | | | | { | | } | { | } | < | > | ? | \ |
- * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
- * | Ctrl | GUI | App | |ESC/ |Space/|Tab/ | |Back |Enter/| Del |PrtSc | | | \ |
- * | | | | |~SYMB |RCtrl |Shift | |Space |~META | | | | | |
- * `------------------------------------------------' `------------------------------------------------'
- */
-
-[BSYMB] = LAYOUT(
- XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, XXXXXXX, XXXXXXX, KC_RBRC, KC_BSLS, S(KC_SCLN), S(KC_QUOT),
- _______, S(KC_2), S(KC_3), S(KC_4), S(KC_5), S(KC_6), _______, _______, S(KC_7), S(KC_8), S(KC_9), S(KC_0), S(KC_MINS), S(KC_EQL),
- _______, S(KC_1), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, S(KC_RBRC), S(KC_BSLS), S(KC_COMM), S(KC_DOT), S(KC_SLSH), S(KC_INT1),
- _______, _______, _______, XXXXXXX, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
-)
-
-};
-
diff --git a/keyboards/biacco42/ergo42/keymaps/biacco-macOS/config.h b/keyboards/biacco42/ergo42/keymaps/biacco-macOS/config.h
deleted file mode 100644
index f0717a463284..000000000000
--- a/keyboards/biacco42/ergo42/keymaps/biacco-macOS/config.h
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
-This is the c configuration file for the keymap
-
-Copyright 2012 Jun Wako
-Copyright 2015 Jack Humbert
-
-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 .
-*/
-
-#pragma once
-
-/* Select hand configuration */
-
-#define MASTER_LEFT
-// #define MASTER_RIGHT
-// #define EE_HANDS
-
diff --git a/keyboards/biacco42/ergo42/keymaps/biacco-macOS/keymap.c b/keyboards/biacco42/ergo42/keymaps/biacco-macOS/keymap.c
deleted file mode 100644
index c20391777317..000000000000
--- a/keyboards/biacco42/ergo42/keymaps/biacco-macOS/keymap.c
+++ /dev/null
@@ -1,89 +0,0 @@
-#include QMK_KEYBOARD_H
-
-extern keymap_config_t keymap_config;
-
-#define BASE 0
-#define META 1
-#define SYMB 2
-#define GAME 3
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-
- /* BASE
- * ,------------------------------------------------. ,------------------------------------------------.
- * | Tab | Q | W | E | R | T | [ | | ] | Y | U | I | O | P | @ |
- * |------+------+------+------+------+------+------| |-------------+------+------+------+------+------|
- * | Alt | A | S | D | F | G | ( | | ) | H | J | K | L | ; | : |
- * |------+------+------+------+------+------+------| |------|------+------+------+------+------+------|
- * | Sft | Z | X | C | V | B | { | | } | N | M | , | . | / |\/Sft |
- * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
- * | Ctrl | GUI | App |PrtSc |ESC/ |Space/|Tab/ | |Back |Enter/| Del |PrtSc |=>GAME|=>SYMB| \ |
- * | | | | |~SYMB |Cmd |Shift | |Space |~META | | | | | |
- * `------------------------------------------------' `------------------------------------------------'
- */
- [BASE] = LAYOUT(
- KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_RBRC, KC_BSLS, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC,
- KC_LALT, KC_A, KC_S, KC_D, KC_F, KC_G, S(KC_8), S(KC_9), KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
- KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, S(KC_RBRC), S(KC_BSLS), KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SFT_T(KC_INT1),
- KC_LCTL, KC_LGUI, KC_APP, KC_PSCR, LT(SYMB, KC_ESC), GUI_T(KC_SPC), SFT_T(KC_TAB), KC_BSPC, LT(META, KC_ENT), KC_DEL, KC_PSCR, TG(GAME), TG(SYMB), KC_INT3
- ),
-
- /* META
- * ,------------------------------------------------. ,------------------------------------------------.
- * | 1 | 2 | 3 | 4 | 5 | 6 | [ | | ] | 7 | 8 | 9 | 0 | - | ^ |
- * |------+------+------+------+------+------+------| |-------------+------+------+------+------+------|
- * | Alt | F1 | |Muhen | Henk | | ( | | ) | Left | Down | Up |Right | | |
- * |------+------+------+------+------+------+------| |------|------+------+------+------+------+------|
- * | Sft | F2 | F3 | F4 | F5 | F6 | { | | } | F7 | F8 | F9 | F10 | F11 |\/Sft |
- * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
- * | Ctrl | GUI | App |PrtSc |ESC/ |Space/|Tab/ | |Back |Enter/| Del |Reset |=>GAME|=>SYMB| \ |
- * | | | | |~SYMB |Ctrl |Shift | |Space |~META | | | | | |
- * `------------------------------------------------' `------------------------------------------------'
- */
- [META] = LAYOUT(
- 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_F1, XXXXXXX, KC_INT5, KC_INT4, XXXXXXX, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, XXXXXXX, XXXXXXX,
- _______, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, _______, _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, SFT_T(KC_INT1),
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, QK_BOOT, _______, _______, _______
- ),
-
- /* SYMB
- * ,------------------------------------------------. ,------------------------------------------------.
- * | ! | " | # | $ | % | & | [ | | ] | ' | ( | ) | ~ | = | ~ |
- * |------+------+------+------+------+------+------| |-------------+------+------+------+------+------|
- * | Alt | | | | | | ( | | ) | | | | | + | * |
- * |------+------+------+------+------+------+------| |------|------+------+------+------+------+------|
- * | Sft | | | | | | { | | } | | | < | > | ? | \ |
- * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
- * | Ctrl | GUI | App |PrtSc |ESC/ |Space/|Tab/ | |Back |Enter/| Del |PrtSc |=>GAME|=>SYMB| \ |
- * | | | | |~SYMB |Ctrl |Shift | |Space |~META | | | | | |
- * `------------------------------------------------' `------------------------------------------------'
- */
- [SYMB] = LAYOUT(
- S(KC_1), S(KC_2), S(KC_3), S(KC_4), S(KC_5), S(KC_6), _______, _______, S(KC_7), S(KC_8), S(KC_9), S(KC_0), S(KC_MINS), S(KC_EQL),
- _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, S(KC_SCLN), S(KC_QUOT),
- _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, XXXXXXX, XXXXXXX, S(KC_COMM), S(KC_DOT), S(KC_SLSH), S(KC_INT1),
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
- ),
-
- /* GAME
- * ,------------------------------------------------. ,------------------------------------------------.
- * | Tab | Q | W | E | R | T | [ | | ] | Y | U | I | O | P | @ |
- * |------+------+------+------+------+------+------| |-------------+------+------+------+------+------|
- * | Alt | A | S | D | F | G | ( | | ) | H | J | K | L | ; | : |
- * |------+------+------+------+------+------+------| |------|------+------+------+------+------+------|
- * | Sft | Z | X | C | V | B | { | | } | N | M | , | . | / |\/Sft |
- * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
- * | Ctrl | GUI | App |PrtSc | ESC |Space |Tab | |Back |Enter | Del |PrtSc |=>GAME|=>SYMB| \ |
- * | | | | | | | | |Space | | | | | | |
- * `------------------------------------------------' `------------------------------------------------'
- */
- [GAME] = LAYOUT(
- KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_RBRC, KC_BSLS, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC,
- KC_LALT, KC_A, KC_S, KC_D, KC_F, KC_G, S(KC_8), S(KC_9), KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
- KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, S(KC_RBRC), S(KC_BSLS), KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SFT_T(KC_INT1),
- KC_LCTL, KC_LGUI, KC_APP, KC_PSCR, KC_ESC, KC_SPC, KC_TAB, KC_BSPC, KC_ENT, KC_DEL, KC_PSCR, _______, _______, KC_INT3
- )
-
-};
-
diff --git a/keyboards/biacco42/ergo42/keymaps/biacco-underglow/config.h b/keyboards/biacco42/ergo42/keymaps/biacco-underglow/config.h
deleted file mode 100644
index a56bd0f2e72e..000000000000
--- a/keyboards/biacco42/ergo42/keymaps/biacco-underglow/config.h
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
-This is the c configuration file for the keymap
-
-Copyright 2012 Jun Wako
-Copyright 2015 Jack Humbert
-
-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 .
-*/
-
-#pragma once
-
-/* Select hand configuration */
-
-#define MASTER_LEFT
-// #define MASTER_RIGHT
-// #define EE_HANDS
-
-// Underglow
-#undef RGBLED_NUM
-#define RGBLED_NUM 14 // Number of LEDs
-#define RGBLIGHT_EFFECT_BREATHING
-#define RGBLIGHT_EFFECT_RAINBOW_MOOD
-#define RGBLIGHT_EFFECT_RAINBOW_SWIRL
-#define RGBLIGHT_EFFECT_SNAKE
-#define RGBLIGHT_EFFECT_KNIGHT
-#define RGBLIGHT_EFFECT_CHRISTMAS
-#define RGBLIGHT_EFFECT_STATIC_GRADIENT
-#define RGBLIGHT_EFFECT_RGB_TEST
-#define RGBLIGHT_EFFECT_ALTERNATING
-#define RGBLIGHT_EFFECT_TWINKLE
-#define RGBLIGHT_SLEEP
diff --git a/keyboards/biacco42/ergo42/keymaps/biacco-underglow/keymap.c b/keyboards/biacco42/ergo42/keymaps/biacco-underglow/keymap.c
deleted file mode 100644
index b7a8ba3fb006..000000000000
--- a/keyboards/biacco42/ergo42/keymaps/biacco-underglow/keymap.c
+++ /dev/null
@@ -1,151 +0,0 @@
-#include QMK_KEYBOARD_H
-
-extern keymap_config_t keymap_config;
-
-#define BASE 0
-#define META 1
-#define SYMB 2
-#define GAME 3
-#define RGB 4
-
-#ifdef RGBLIGHT_ENABLE
-//Following line allows macro to read current RGB settings
-extern rgblight_config_t rgblight_config;
-#endif
-
-enum custom_keycodes {
- RGB_RST = SAFE_RANGE,
- TAP_ANIM
-};
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-
- /* BASE
- * ,------------------------------------------------. ,------------------------------------------------.
- * | Tab | Q | W | E | R | T | [ | | ] | Y | U | I | O | P | @ |
- * |------+------+------+------+------+------+------| |-------------+------+------+------+------+------|
- * | Alt | A | S | D | F | G | ( | | ) | H | J | K | L | ; | : |
- * |------+------+------+------+------+------+------| |------|------+------+------+------+------+------|
- * | Sft | Z | X | C | V | B | { | | } | N | M | , | . | / |\/Sft |
- * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
- * | Ctrl | GUI | App |PrtSc |ESC/ |Space/|Tab/ | |Back |Enter/| Del |PrtSc |=>GAME|=>RGB | \ |
- * | | | | |~SYMB |RCtrl |Shift | |Space |~META | | | | | |
- * `------------------------------------------------' `------------------------------------------------'
- */
- [BASE] = LAYOUT(
- KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_RBRC, KC_BSLS, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC,
- KC_LALT, KC_A, KC_S, KC_D, KC_F, KC_G, S(KC_8), S(KC_9), KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
- KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, S(KC_RBRC), S(KC_BSLS), KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SFT_T(KC_INT1),
- KC_LCTL, KC_LGUI, KC_APP, KC_PSCR, LT(SYMB, KC_ESC), RCTL_T(KC_SPC),SFT_T(KC_TAB), KC_BSPC, LT(META, KC_ENT), KC_DEL, KC_PSCR, TG(GAME), TG(RGB), KC_INT3
- ),
-
- /* META
- * ,------------------------------------------------. ,------------------------------------------------.
- * | 1 | 2 | 3 | 4 | 5 | 6 | [ | | ] | 7 | 8 | 9 | 0 | - | ^ |
- * |------+------+------+------+------+------+------| |-------------+------+------+------+------+------|
- * | Alt | F1 | |Muhen | Henk | | ( | | ) | Left | Down | Up |Right | | |
- * |------+------+------+------+------+------+------| |------|------+------+------+------+------+------|
- * | Sft | F2 | F3 | F4 | F5 | F6 | { | | } | F7 | F8 | F9 | F10 | F11 |\/Sft |
- * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
- * | Ctrl | GUI | App |PrtSc |ESC/ |Space/|Tab/ | |Back |Enter/| Del |Reset |=>GAME|=>RGB | \ |
- * | | | | |~SYMB |RCtrl |Shift | |Space |~META | | | | | |
- * `------------------------------------------------' `------------------------------------------------'
- */
- [META] = LAYOUT(
- 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_F1, XXXXXXX, KC_INT5, KC_INT4, XXXXXXX, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, XXXXXXX, XXXXXXX,
- _______, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, _______, _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, SFT_T(KC_INT1),
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, QK_BOOT, _______, _______, _______
- ),
-
- /* SYMB
- * ,------------------------------------------------. ,------------------------------------------------.
- * | ! | " | # | $ | % | & | [ | | ] | ' | ( | ) | ~ | = | ~ |
- * |------+------+------+------+------+------+------| |-------------+------+------+------+------+------|
- * | Alt | | | | | | ( | | ) | | | | | + | * |
- * |------+------+------+------+------+------+------| |------|------+------+------+------+------+------|
- * | Sft | | | | | | { | | } | | | < | > | ? | \ |
- * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
- * | Ctrl | GUI | App |PrtSc |ESC/ |Space/|Tab/ | |Back |Enter/| Del |PrtSc |=>GAME|=>RGB | \ |
- * | | | | |~SYMB |RCtrl |Shift | |Space |~META | | | | | |
- * `------------------------------------------------' `------------------------------------------------'
- */
- [SYMB] = LAYOUT(
- S(KC_1), S(KC_2), S(KC_3), S(KC_4), S(KC_5), S(KC_6), _______, _______, S(KC_7), S(KC_8), S(KC_9), S(KC_0), S(KC_MINS), S(KC_EQL),
- _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, S(KC_SCLN), S(KC_QUOT),
- _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, XXXXXXX, XXXXXXX, S(KC_COMM), S(KC_DOT), S(KC_SLSH), S(KC_INT1),
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
- ),
-
- /* GAME
- * ,------------------------------------------------. ,------------------------------------------------.
- * | Tab | Q | W | E | R | T | [ | | ] | Y | U | I | O | P | @ |
- * |------+------+------+------+------+------+------| |-------------+------+------+------+------+------|
- * | Alt | A | S | D | F | G | ( | | ) | H | J | K | L | ; | : |
- * |------+------+------+------+------+------+------| |------|------+------+------+------+------+------|
- * | Sft | Z | X | C | V | B | { | | } | N | M | , | . | / |\/Sft |
- * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
- * | Ctrl | GUI | App |PrtSc | ESC |Space |Tab | |Back |Enter | Del |PrtSc |=>GAME|=>RGB | \ |
- * | | | | | | | | |Space | | | | | | |
- * `------------------------------------------------' `------------------------------------------------'
- */
- [GAME] = LAYOUT(
- KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_RBRC, KC_BSLS, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC,
- KC_LALT, KC_A, KC_S, KC_D, KC_F, KC_G, S(KC_8), S(KC_9), KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
- KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, S(KC_RBRC), S(KC_BSLS), KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SFT_T(KC_INT1),
- KC_LCTL, KC_LGUI, KC_APP, KC_PSCR, KC_ESC, KC_SPC, KC_TAB, KC_BSPC, KC_ENT, KC_DEL, KC_PSCR, _______, _______, KC_INT3
- ),
-
- /* RGB
- * ,------------------------------------------------. ,------------------------------------------------.
- * | | | | | | | | | | | | | | | |
- * |------+------+------+------+------+------+------| |-------------+------+------+------+------+------|
- * | | | | | | | | | | TOG | HUI | SAI | VAI |HUANIM| |
- * |------+------+------+------+------+------+------| |------|------+------+------+------+------+------|
- * | | | | | | | | | | MOD | HUD | SAD | VAD |QK_BOOT | |
- * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
- * | | | | | | | | | | | | | |=>RGB | |
- * `------------------------------------------------' `------------------------------------------------'
- */
- [RGB] = LAYOUT(
- XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
- XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_TOG, RGB_HUI, RGB_SAI, RGB_VAI, TAP_ANIM,XXXXXXX,
- XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_MOD, RGB_HUI, RGB_SAD, RGB_VAD, RGB_RST, XXXXXXX,
- XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, XXXXXXX
- )
-
-};
-
-bool isTapAnim = false;
-
-bool process_record_user(uint16_t keycode, keyrecord_t *record) {
- switch (keycode) {
- case RGB_MOD:
- if (record->event.pressed) {
- isTapAnim = false;
- }
- break;
- case RGB_RST:
- #ifdef RGBLIGHT_ENABLE
- if (record->event.pressed) {
- eeconfig_update_rgblight_default();
- rgblight_enable();
- }
- #endif
- break;
- case TAP_ANIM:
- if (record->event.pressed) {
- isTapAnim = !isTapAnim;
- }
- break;
- }
-
- if (isTapAnim) {
- rgblight_mode_noeeprom(1);
- uint16_t hue = (rgblight_config.hue + 5) % 360;
- rgblight_sethsv_noeeprom(hue, rgblight_config.sat, rgblight_config.val);
- }
-
- return true;
-}
-
diff --git a/keyboards/biacco42/ergo42/keymaps/biacco-underglow/rules.mk b/keyboards/biacco42/ergo42/keymaps/biacco-underglow/rules.mk
deleted file mode 100644
index 1e3cebb14515..000000000000
--- a/keyboards/biacco42/ergo42/keymaps/biacco-underglow/rules.mk
+++ /dev/null
@@ -1 +0,0 @@
-RGBLIGHT_ENABLE = yes
diff --git a/keyboards/biacco42/ergo42/keymaps/biacco-winjp/config.h b/keyboards/biacco42/ergo42/keymaps/biacco-winjp/config.h
deleted file mode 100644
index f0717a463284..000000000000
--- a/keyboards/biacco42/ergo42/keymaps/biacco-winjp/config.h
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
-This is the c configuration file for the keymap
-
-Copyright 2012 Jun Wako
-Copyright 2015 Jack Humbert
-
-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 .
-*/
-
-#pragma once
-
-/* Select hand configuration */
-
-#define MASTER_LEFT
-// #define MASTER_RIGHT
-// #define EE_HANDS
-
diff --git a/keyboards/biacco42/ergo42/keymaps/biacco-winjp/keymap.c b/keyboards/biacco42/ergo42/keymaps/biacco-winjp/keymap.c
deleted file mode 100644
index 17a52693bf2b..000000000000
--- a/keyboards/biacco42/ergo42/keymaps/biacco-winjp/keymap.c
+++ /dev/null
@@ -1,95 +0,0 @@
-// WindowsでJIS配列として認識しているときに、US配列として使うためのキーマップ
-// hdbx から2行コピーさせて頂きました。
-
-#include QMK_KEYBOARD_H
-#include "keymap_japanese.h" // qmk_firmware-master/quantum/keymap_extras/keymap_japanese.h 日本語キーボード設定用
-// マクロが必要になったらコメントインすること
-// #include "sendstring_japanese.h" // macro sendstring for jis keyboard マクロ文字列送信時に日本語キーボード設定での文字化け回避>
-
-extern keymap_config_t keymap_config;
-
-#define BASE 0
-#define META 1
-#define SYMB 2
-#define GAME 3
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-
- /* BASE
- * ,------------------------------------------------. ,------------------------------------------------.
- * | Tab | Q | W | E | R | T | [ | | ] | Y | U | I | O | P | @ |
- * |------+------+------+------+------+------+------| |-------------+------+------+------+------+------|
- * | Alt | A | S | D | F | G | ( | | ) | H | J | K | L | ; | : |
- * |------+------+------+------+------+------+------| |------|------+------+------+------+------+------|
- * | Sft | Z | X | C | V | B | { | | } | N | M | , | . | / |\/Sft |
- * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
- * | Ctrl | GUI | App |PrtSc |ESC/ |Space/|Tab/ | |Back |Enter/| Del |PrtSc |=>GAME|=>SYMB| \ |
- * | | | | |~SYMB |RCtrl |Shift | |Space |~META | | | | | |
- * `------------------------------------------------' `------------------------------------------------'
- */
- [BASE] = LAYOUT(
- KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_RBRC, KC_BSLS, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC,
- KC_LALT, KC_A, KC_S, KC_D, KC_F, KC_G, S(KC_8), S(KC_9), KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
- KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, S(KC_RBRC), S(KC_BSLS), KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SFT_T(JP_BSLS),
- KC_LCTL, KC_LGUI, KC_APP, KC_PSCR, LT(SYMB, KC_ESC), RCTL_T(KC_SPC),SFT_T(KC_TAB), KC_BSPC, LT(META, KC_ENT), KC_DEL, KC_PSCR, TG(GAME), TG(SYMB), JP_YEN
- ),
-
- /* META
- * ,------------------------------------------------. ,------------------------------------------------.
- * | 1 | 2 | 3 | 4 | 5 | 6 | [ | | ] | 7 | 8 | 9 | 0 | - | ^ |
- * |------+------+------+------+------+------+------| |-------------+------+------+------+------+------|
- * | Alt | F1 | |Muhen | Henk | | ( | | ) | Left | Down | Up |Right | | |
- * |------+------+------+------+------+------+------| |------|------+------+------+------+------+------|
- * | Sft | F2 | F3 | F4 | F5 | F6 | { | | } | F7 | F8 | F9 | F10 | F11 |\/Sft |
- * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
- * | Ctrl | GUI | App |PrtSc |ESC/ |Space/|Tab/ | |Back |Enter/| Del |Reset |=>GAME|=>SYMB| \ |
- * | | | | |~SYMB |RCtrl |Shift | |Space |~META | | | | | |
- * `------------------------------------------------' `------------------------------------------------'
- */
- [META] = LAYOUT(
- 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_F1, XXXXXXX, JP_MHEN, JP_HENK, XXXXXXX, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, XXXXXXX, XXXXXXX,
- _______, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, _______, _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, SFT_T(JP_BSLS),
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, QK_BOOT, _______, _______, _______
- ),
-
- /* SYMB
- * ,------------------------------------------------. ,------------------------------------------------.
- * | ! | " | # | $ | % | & | [ | | ] | ' | ( | ) | ~ | = | ~ |
- * |------+------+------+------+------+------+------| |-------------+------+------+------+------+------|
- * | Alt | | | | | | ( | | ) | | | | | + | * |
- * |------+------+------+------+------+------+------| |------|------+------+------+------+------+------|
- * | Sft | | | | | | { | | } | | | < | > | ? | \ |
- * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
- * | Ctrl | GUI | App |PrtSc |ESC/ |Space/|Tab/ | |Back |Enter/| Del |PrtSc |=>GAME|=>SYMB| \ |
- * | | | | |~SYMB |RCtrl |Shift | |Space |~META | | | | | |
- * `------------------------------------------------' `------------------------------------------------'
- */
- [SYMB] = LAYOUT(
- S(KC_1), S(KC_2), S(KC_3), S(KC_4), S(KC_5), S(KC_6), _______, _______, S(KC_7), S(KC_8), S(KC_9), S(KC_0), S(KC_MINS), S(KC_EQL),
- _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, S(KC_SCLN), S(KC_QUOT),
- _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, XXXXXXX, XXXXXXX, S(KC_COMM), S(KC_DOT), S(KC_SLSH), S(JP_BSLS),
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
- ),
-
- /* GAME
- * ,------------------------------------------------. ,------------------------------------------------.
- * | Tab | Q | W | E | R | T | [ | | ] | Y | U | I | O | P | @ |
- * |------+------+------+------+------+------+------| |-------------+------+------+------+------+------|
- * | Alt | A | S | D | F | G | ( | | ) | H | J | K | L | ; | : |
- * |------+------+------+------+------+------+------| |------|------+------+------+------+------+------|
- * | Sft | Z | X | C | V | B | { | | } | N | M | , | . | / |\/Sft |
- * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
- * | Ctrl | GUI | App |PrtSc | ESC |Space |Tab | |Back |Enter | Del |PrtSc |=>GAME|=>SYMB| \ |
- * | | | | | | | | |Space | | | | | | |
- * `------------------------------------------------' `------------------------------------------------'
- */
- [GAME] = LAYOUT(
- KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_RBRC, KC_BSLS, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC,
- KC_LALT, KC_A, KC_S, KC_D, KC_F, KC_G, S(KC_8), S(KC_9), KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
- KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, S(KC_RBRC), S(KC_BSLS), KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SFT_T(JP_BSLS),
- KC_LCTL, KC_LGUI, KC_APP, KC_PSCR, KC_ESC, KC_SPC, KC_TAB, KC_BSPC, KC_ENT, KC_DEL, KC_PSCR, _______, _______, JP_YEN
- )
-
-};
-
diff --git a/keyboards/biacco42/ergo42/keymaps/biacco/config.h b/keyboards/biacco42/ergo42/keymaps/biacco/config.h
deleted file mode 100644
index f0717a463284..000000000000
--- a/keyboards/biacco42/ergo42/keymaps/biacco/config.h
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
-This is the c configuration file for the keymap
-
-Copyright 2012 Jun Wako
-Copyright 2015 Jack Humbert
-
-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 .
-*/
-
-#pragma once
-
-/* Select hand configuration */
-
-#define MASTER_LEFT
-// #define MASTER_RIGHT
-// #define EE_HANDS
-
diff --git a/keyboards/biacco42/ergo42/keymaps/biacco/keymap.c b/keyboards/biacco42/ergo42/keymaps/biacco/keymap.c
deleted file mode 100644
index 61b307d26587..000000000000
--- a/keyboards/biacco42/ergo42/keymaps/biacco/keymap.c
+++ /dev/null
@@ -1,89 +0,0 @@
-#include QMK_KEYBOARD_H
-
-extern keymap_config_t keymap_config;
-
-#define BASE 0
-#define META 1
-#define SYMB 2
-#define GAME 3
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-
- /* BASE
- * ,------------------------------------------------. ,------------------------------------------------.
- * | Tab | Q | W | E | R | T | [ | | ] | Y | U | I | O | P | @ |
- * |------+------+------+------+------+------+------| |-------------+------+------+------+------+------|
- * | Alt | A | S | D | F | G | ( | | ) | H | J | K | L | ; | : |
- * |------+------+------+------+------+------+------| |------|------+------+------+------+------+------|
- * | Sft | Z | X | C | V | B | { | | } | N | M | , | . | / |\/Sft |
- * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
- * | Ctrl | GUI | App |PrtSc |ESC/ |Space/|Tab/ | |Back |Enter/| Del |PrtSc |=>GAME|=>SYMB| \ |
- * | | | | |~SYMB |RCtrl |Shift | |Space |~META | | | | | |
- * `------------------------------------------------' `------------------------------------------------'
- */
- [BASE] = LAYOUT(
- KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_RBRC, KC_BSLS, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC,
- KC_LALT, KC_A, KC_S, KC_D, KC_F, KC_G, S(KC_8), S(KC_9), KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
- KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, S(KC_RBRC), S(KC_BSLS), KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SFT_T(KC_INT1),
- KC_LCTL, KC_LGUI, KC_APP, KC_PSCR, LT(SYMB, KC_ESC), RCTL_T(KC_SPC),SFT_T(KC_TAB), KC_BSPC, LT(META, KC_ENT), KC_DEL, KC_PSCR, TG(GAME), TG(SYMB), KC_INT3
- ),
-
- /* META
- * ,------------------------------------------------. ,------------------------------------------------.
- * | 1 | 2 | 3 | 4 | 5 | 6 | [ | | ] | 7 | 8 | 9 | 0 | - | ^ |
- * |------+------+------+------+------+------+------| |-------------+------+------+------+------+------|
- * | Alt | F1 | |Muhen | Henk | | ( | | ) | Left | Down | Up |Right | | |
- * |------+------+------+------+------+------+------| |------|------+------+------+------+------+------|
- * | Sft | F2 | F3 | F4 | F5 | F6 | { | | } | F7 | F8 | F9 | F10 | F11 |\/Sft |
- * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
- * | Ctrl | GUI | App |PrtSc |ESC/ |Space/|Tab/ | |Back |Enter/| Del |Reset |=>GAME|=>SYMB| \ |
- * | | | | |~SYMB |RCtrl |Shift | |Space |~META | | | | | |
- * `------------------------------------------------' `------------------------------------------------'
- */
- [META] = LAYOUT(
- 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_F1, XXXXXXX, KC_INT5, KC_INT4, XXXXXXX, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, XXXXXXX, XXXXXXX,
- _______, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, _______, _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, SFT_T(KC_INT1),
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, QK_BOOT, _______, _______, _______
- ),
-
- /* SYMB
- * ,------------------------------------------------. ,------------------------------------------------.
- * | ! | " | # | $ | % | & | [ | | ] | ' | ( | ) | ~ | = | ~ |
- * |------+------+------+------+------+------+------| |-------------+------+------+------+------+------|
- * | Alt | | | | | | ( | | ) | | | | | + | * |
- * |------+------+------+------+------+------+------| |------|------+------+------+------+------+------|
- * | Sft | | | | | | { | | } | | | < | > | ? | \ |
- * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
- * | Ctrl | GUI | App |PrtSc |ESC/ |Space/|Tab/ | |Back |Enter/| Del |PrtSc |=>GAME|=>SYMB| \ |
- * | | | | |~SYMB |RCtrl |Shift | |Space |~META | | | | | |
- * `------------------------------------------------' `------------------------------------------------'
- */
- [SYMB] = LAYOUT(
- S(KC_1), S(KC_2), S(KC_3), S(KC_4), S(KC_5), S(KC_6), _______, _______, S(KC_7), S(KC_8), S(KC_9), S(KC_0), S(KC_MINS), S(KC_EQL),
- _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, S(KC_SCLN), S(KC_QUOT),
- _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, XXXXXXX, XXXXXXX, S(KC_COMM), S(KC_DOT), S(KC_SLSH), S(KC_INT1),
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
- ),
-
- /* GAME
- * ,------------------------------------------------. ,------------------------------------------------.
- * | Tab | Q | W | E | R | T | [ | | ] | Y | U | I | O | P | @ |
- * |------+------+------+------+------+------+------| |-------------+------+------+------+------+------|
- * | Alt | A | S | D | F | G | ( | | ) | H | J | K | L | ; | : |
- * |------+------+------+------+------+------+------| |------|------+------+------+------+------+------|
- * | Sft | Z | X | C | V | B | { | | } | N | M | , | . | / |\/Sft |
- * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
- * | Ctrl | GUI | App |PrtSc | ESC |Space |Tab | |Back |Enter | Del |PrtSc |=>GAME|=>SYMB| \ |
- * | | | | | | | | |Space | | | | | | |
- * `------------------------------------------------' `------------------------------------------------'
- */
- [GAME] = LAYOUT(
- KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_RBRC, KC_BSLS, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC,
- KC_LALT, KC_A, KC_S, KC_D, KC_F, KC_G, S(KC_8), S(KC_9), KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
- KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, S(KC_RBRC), S(KC_BSLS), KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SFT_T(KC_INT1),
- KC_LCTL, KC_LGUI, KC_APP, KC_PSCR, KC_ESC, KC_SPC, KC_TAB, KC_BSPC, KC_ENT, KC_DEL, KC_PSCR, _______, _______, KC_INT3
- )
-
-};
-
diff --git a/keyboards/biacco42/ergo42/keymaps/hdbx/config.h b/keyboards/biacco42/ergo42/keymaps/hdbx/config.h
deleted file mode 100644
index 983305e2558a..000000000000
--- a/keyboards/biacco42/ergo42/keymaps/hdbx/config.h
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
-This is the c configuration file for the keymap
-
-Copyright 2012 Jun Wako
-Copyright 2015 Jack Humbert
-
-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 .
-*/
-
-#pragma once
-
-/* Select hand configuration */
-
-#define MASTER_LEFT
-// #define MASTER_RIGHT
-// #define EE_HANDS
-
-/* Use RGB Underglow */
-
-#undef RGBLED_NUM
-#define RGBLIGHT_EFFECT_BREATHING
-#define RGBLIGHT_EFFECT_RAINBOW_MOOD
-#define RGBLIGHT_EFFECT_RAINBOW_SWIRL
-#define RGBLIGHT_EFFECT_SNAKE
-#define RGBLIGHT_EFFECT_KNIGHT
-#define RGBLIGHT_EFFECT_CHRISTMAS
-#define RGBLIGHT_EFFECT_STATIC_GRADIENT
-#define RGBLIGHT_EFFECT_RGB_TEST
-#define RGBLIGHT_EFFECT_ALTERNATING
-#define RGBLIGHT_EFFECT_TWINKLE
-#define RGBLIGHT_SLEEP
-#define RGBLED_NUM 14
-#define RGBLIGHT_HUE_STEP 10
-#define RGBLIGHT_SAT_STEP 17
-#define RGBLIGHT_VAL_STEP 17
diff --git a/keyboards/biacco42/ergo42/keymaps/hdbx/keymap.c b/keyboards/biacco42/ergo42/keymaps/hdbx/keymap.c
deleted file mode 100644
index 46a1b503b809..000000000000
--- a/keyboards/biacco42/ergo42/keymaps/hdbx/keymap.c
+++ /dev/null
@@ -1,215 +0,0 @@
-// WindowsでJIS配列として認識しているときに、US配列として使うためのキーマップ
-// @leopard_gecko さんがPlanck用に作成されたキーマップをかなり参考にしています。
-
-#include QMK_KEYBOARD_H
-#include "keymap_japanese.h" // qmk_firmware-master/quantum/keymap_extras/keymap_japanese.h 日本語キーボード設定用
-#include "sendstring_japanese.h" // macro sendstring for jis keyboard マクロ文字列送信時に日本語キーボード設定での文字化け回避
-
-extern keymap_config_t keymap_config;
-
-// レイヤー
-#define _QWERTY 0
-#define _LOWER 1
-#define _RAISE 2
-#define _GAME 3
-#define _ADJUST 4
-
-enum custom_keycodes {
- QWERTY = SAFE_RANGE, // QWERTYレイヤーへ
- MCR1, // マクロ1
- MCR2, // マクロ2
- MCR3, // マクロ3
- DYNAMIC_MACRO_RANGE, // ダイナミックマクロ
- WN_SCLN, // タップでJISの「:」 シフトでJISの「;」 (Windows)
-};
-
-// Use Dynamic macro
-#include "dynamic_macro.h"
-
-#define KC_LOWR LT(_LOWER, JP_MHEN) // タップで無変換 ホールドでLower
-#define KC_RASE LT(_RAISE, JP_HENK) // タップで変換 ホールドでRaise
-#define KC_LSLB MT(MOD_LSFT, JP_LBRC) // タップで[ ホールドで左Shift
-#define KC_RSRB MT(MOD_RSFT, JP_RBRC) // タップで] ホールドで右Shift
-#define KC_ALTB MT(MOD_LALT, KC_TAB) // タップでTAB ホールドで左Alt
-#define CTL_ZH CTL_T(JP_ZKHK) // タップで半角/全角 ホールドで左Control (Windows)
-#define WN_CAPS S(KC_CAPS) // Caps Lock (Windows)
-#define KC_ALPS LALT(KC_PSCR) // Alt + PrintScreen
-#define LOWER MO(_LOWER)
-#define RAISE MO(_RAISE)
-#define GAME DF(_GAME)
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-
- /* QWERTY // WindowsでJIS配列時のデフォルトキーマップ
- * ,-------------------------------------------------------. ,-------------------------------------------------------.
- * |Tab/Alt| Q | W | E | R | T | - | | ~ | Y | U | I | O | P | BSPC |
- * |-------+-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------+-------|
- * |ZH/Ctrl| A | S | D | F | G | ( | | ) | H | J | K | L | : | ' |
- * |-------+-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------+-------|
- * | [/Sft | Z | X | C | V | B | F2 | | Home | N | M | , | . | / | ]/Sft |
- * |-------+-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------+-------|
- * |WN CAPS| GUI | \ | Esc |無変換 | Enter | Del | | End | Space | 変換 | Left | Down | Up | Right |
- * | | | | | LOWER | | | | | | RAISE | | | | |
- * `-------------------------------------------------------' `-------------------------------------------------------'
- */
- [_QWERTY] = LAYOUT(
- KC_ALTB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_MINS, JP_TILD, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
- CTL_ZH, KC_A, KC_S, KC_D, KC_F, KC_G, JP_LPRN, JP_RPRN, KC_H, KC_J, KC_K, KC_L, WN_SCLN, JP_QUOT,
- KC_LSLB, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_F2, KC_HOME, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSRB,
- WN_CAPS, KC_LGUI, JP_YEN, KC_ESC, KC_LOWR, KC_ENT, KC_DEL, KC_END, KC_SPC, KC_RASE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
- ),
-
- /* LOWER // 数字入力用レイヤー
- * ,-------------------------------------------------------. ,-------------------------------------------------------.
- * | | 1 | 2 | 3 | 4 | 5 | 6 | | Esc | 7 | 8 | 9 | . | = | |
- * |-------+-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------+-------|
- * | | F1 | F2 | F3 | F4 | F5 | F6 | | F2 | 4 | 5 | 6 | - | / | Enter |
- * |-------+-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------+-------|
- * | Shift | F7 | F8 | F9 | F10 | F11 | F12 | | | 1 | 2 | 3 | + | * | Shift |
- * |-------+-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------+-------|
- * | | |XXXXXXX| | | | | | | 0 | | | | | |
- * `-------------------------------------------------------' `-------------------------------------------------------'
- */
- [_LOWER] = LAYOUT(
- _______, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_ESC, KC_7, KC_8, KC_9, KC_PDOT, JP_EQL, _______,
- _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F2, KC_P4, KC_P5, KC_P6, KC_PMNS, KC_PSLS, KC_ENT,
- KC_LSFT, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, KC_P1, KC_P2, KC_P3, KC_PPLS, KC_PAST, KC_RSFT,
- _______, _______, XXXXXXX, _______, _______, _______, _______, _______, KC_0, _______, _______, _______, _______, _______
- ),
-
- /* RAISE // 記号入力用レイヤー
- * ,-------------------------------------------------------. ,-------------------------------------------------------.
- * | | ! | @ | # | $ | % | _ | | ` | ^ | & | Ins | \ |PrntScr| |
- * |-------+-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------+-------|
- * | |XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX| { | | } | Left | Down | Up | Right | ; | " |
- * |-------+-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------+-------|
- * | Shift |M-PLAY |M-MUTE |VOL_DWN|VOL_UP |PREV_TR|NEXT_TR| |PageUp |XXXXXXX|XXXXXXX| < | > | ? | Shift |
- * |-------+-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------+-------|
- * | | | | | | | | | |PageDwn| | | | | | |
- * `-------------------------------------------------------' `-------------------------------------------------------'
- */
- [_RAISE] = LAYOUT(
- _______, KC_EXLM, JP_AT, KC_HASH, KC_DLR, KC_PERC, JP_UNDS, JP_GRV, JP_CIRC, JP_AMPR, KC_INS, JP_YEN, KC_ALPS, _______,
- _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, JP_LCBR, JP_RCBR, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_SCLN, JP_DQUO,
- KC_LSFT, KC_MPLY, KC_MUTE, KC_VOLD, KC_VOLU, KC_MPRV, KC_MNXT, KC_PGUP, XXXXXXX, XXXXXXX, KC_LT, KC_GT, KC_QUES, KC_RSFT,
- _______, _______, JP_PIPE, _______, _______, _______, _______, KC_PGDN, _______, _______, _______, _______, _______, _______
- ),
-
- /* GAME // 左手はゲーム用レイヤー、右手はNumPad
- * ,-------------------------------------------------------. ,-------------------------------------------------------.
- * | Tab | Q | W | E | R | T |PrntScr| | Esc | 7 | 8 | 9 | . | = | BSPC |
- * |-------+-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------+-------|
- * | Ctrl | A | S | D | F | G | F1 | | F2 | 4 | 5 | 6 | - | / | Enter |
- * |-------+-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------+-------|
- * | Shift | Z | X | C | V | B | F2 | | Home | 1 | 2 | 3 | + | * | Shift |
- * |-------+-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------+-------|
- * | Del | GUI | Alt | Esc | LOWER | Space | Enter | | End | 0 | RAISE | Left | Down | Up | Right |
- * `-------------------------------------------------------' `-------------------------------------------------------'
- */
- [_GAME] = LAYOUT(
- KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_ALPS, KC_ESC, KC_P7, KC_P8, KC_P9, KC_PDOT, JP_EQL, KC_BSPC,
- KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_F1, KC_F2, KC_P4, KC_P5, KC_P6, KC_PMNS, KC_PSLS, KC_ENT,
- KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_F2, KC_HOME, KC_P1, KC_P2, KC_P3, KC_PPLS, KC_PAST, KC_RSFT,
- KC_DEL, KC_LGUI, KC_LALT, KC_ESC, LOWER, KC_SPC, KC_ENT, KC_PGDN, KC_P0, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
- ),
-
- /* ADJUST // 設定用レイヤー (LOWER+RAISE)
- * ,-------------------------------------------------------. ,-------------------------------------------------------.
- * |RGB_TOG| MCR1 | MCR2 | MCR3 |XXXXXXX|XXXXXXX|XXXXXXX| |XXXXXXX|PLAY_M1|PLAY_M2|REC_M1 |REC_M2 |STP_REC| BSPC |
- * |-------+-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------+-------|
- * | QK_BOOT | | | | | | | |XXXXXXX|XXXXXXX|QWERTY | GAME |XXXXXXX|XXXXXXX|XXXXXXX|
- * |-------+-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------+-------|
- * | Shift | | | | | | | |XXXXXXX| M-PLAY|M-MUTE |VOL_DWN|VOL_UP |PREV_TR|NEXT_TR|
- * |-------+-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------+-------|
- * | Debug |XXXXXXX|XXXXXXX| | |XXXXXXX|XXXXXXX| |XXXXXXX|XXXXXXX| | Left | Down | Up | Right |
- * `-------------------------------------------------------' `-------------------------------------------------------'
- */
- [_ADJUST] = LAYOUT(
- RGB_TOG, MCR1, MCR2, MCR3, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, DM_PLY1, DM_PLY2, DM_REC1, DM_REC2, DM_RSTP, KC_BSPC,
- QK_BOOT, RGB_MOD, RGB_M_P, RGB_M_B, RGB_HUI, RGB_SAI, RGB_VAI, XXXXXXX, XXXXXXX, QWERTY, GAME, XXXXXXX, XXXXXXX, XXXXXXX,
- KC_LSFT, RGB_M_R, RGB_M_SN,RGB_M_G, RGB_HUD, RGB_SAD, RGB_VAD, XXXXXXX, KC_MPLY, KC_MUTE, KC_VOLD, KC_VOLU, KC_MPRV, KC_MNXT,
- DB_TOGG, XXXXXXX, XXXXXXX, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
- ),
-
-};
-
-// RGB Underglow使用時のレイヤー毎のカラー切り替え
-layer_state_t layer_state_set_keymap (layer_state_t state) {
- return state;
-}
-
-void matrix_init_user(void) {
-#ifdef RGBLIGHT_ENABLE
- rgblight_enable();
- rgblight_setrgb(RGB_TEAL);
-#endif
-}
-
-layer_state_t layer_state_set_user(layer_state_t state) {
- state = update_tri_layer_state(state, _RAISE, _LOWER, _ADJUST);
-#ifdef RGBLIGHT_ENABLE
- switch (get_highest_layer(state)) {
- case _RAISE:
- rgblight_setrgb(RGB_CHARTREUSE); // RAISE:シャルトリューズ
- break;
- case _LOWER:
- rgblight_setrgb(RGB_PINK); // LOWER:ピンク
- break;
- case _ADJUST:
- rgblight_setrgb(RGB_RED); // ADJUST:レッド
- break;
- default: // for any other layers, or the default layer
- rgblight_setrgb(RGB_TEAL); // 他:ティール
- break;
- }
-#endif
-return state;
-}
-
-bool process_record_user(uint16_t keycode, keyrecord_t *record) {
- static bool lshift = false;
- if (!process_record_dynamic_macro(keycode, record)) {
- return false;
- }
- switch (keycode) {
- case QWERTY:
- if (record->event.pressed) {
- set_single_persistent_default_layer(_QWERTY);
- }
- return false;
- break;
- case WN_SCLN: // コロン「;:」
- if (record->event.pressed) {
- lshift = keyboard_report->mods & MOD_BIT(KC_LSFT);
- if (lshift) {
- unregister_code(KC_LSFT);
- register_code(JP_SCLN);
- unregister_code(JP_SCLN);
- } else {
- register_code(JP_COLN);
- unregister_code(JP_COLN);
- }
- }
- return false;
- break;
- case MCR1:
- if (record->event.pressed) {
- SEND_STRING("hoge"); // 送信文字列
- }
- return false;
- break;
- case MCR2:
- if (record->event.pressed) {
- SEND_STRING("hogehoge"SS_TAP(X_ENTER)); // 送信文字列
- }
- return false;
- break;
- case MCR3:
- if (record->event.pressed) {
- SEND_STRING("hoge@hoge.hoge"); // 送信文字列
- }
- return false;
- break;
- }
- return true;
-}
diff --git a/keyboards/biacco42/ergo42/keymaps/hdbx/readme.md b/keyboards/biacco42/ergo42/keymaps/hdbx/readme.md
deleted file mode 100644
index 3f3ca3e5ce6d..000000000000
--- a/keyboards/biacco42/ergo42/keymaps/hdbx/readme.md
+++ /dev/null
@@ -1,67 +0,0 @@
-# hdbx
-
-Designed for Japanese Keyboardists using JIS on the Ergo42.
-
-## Layer
-
-````
-QWERTY
- ,-------------------------------------------------------. ,-------------------------------------------------------.
- |Tab/Alt| Q | W | E | R | T | - | | ~ | Y | U | I | O | P | BSPC |
- |-------+-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------+-------|
- |ZH/Ctrl| A | S | D | F | G | ( | | ) | H | J | K | L | : | ' |
- |-------+-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------+-------|
- | [/Sft | Z | X | C | V | B | F2 | | Home | N | M | , | . | / | ]/Sft |
- |-------+-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------+-------|
- |WN CAPS| GUI | \ | Esc | MHEN/ | Enter | Del | | End | Space | HENK/ | Left | Down | Up | Right |
- | | | | | LOWER | | | | | | RAISE | | | | |
- `-------------------------------------------------------' `-------------------------------------------------------'
-
-LOWER
- ,-------------------------------------------------------. ,-------------------------------------------------------.
- | | 1 | 2 | 3 | 4 | 5 | 6 | | Esc | 7 | 8 | 9 | . | = | |
- |-------+-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------+-------|
- | | F1 | F2 | F3 | F4 | F5 | F6 | | F2 | 4 | 5 | 6 | - | / | Enter |
- |-------+-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------+-------|
- | Shift | F7 | F8 | F9 | F10 | F11 | F12 | | | 1 | 2 | 3 | + | * | Shift |
- |-------+-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------+-------|
- | | |XXXXXXX| | | | | | | 0 | | | | | |
- `-------------------------------------------------------' `-------------------------------------------------------'
-
-RAISE
- ,-------------------------------------------------------. ,-------------------------------------------------------.
- | | ! | @ | # | $ | % | _ | | ` | ^ | & | Ins | \ |PrntScr| |
- |-------+-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------+-------|
- | |XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX| { | | } | Left | Down | Up | Right | ; | " |
- |-------+-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------+-------|
- | | M-PLAY|M-MUTE |VOL_DWN|VOL_UP |PREV_TR|NEXT_TR| |PageUp |XXXXXXX|XXXXXXX| < | > | ? | Shift |
- |-------+-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------+-------|
- | | | | | | | | | |PageDwn| | | | | | |
- `-------------------------------------------------------' `-------------------------------------------------------'
-
-ADJUST
- ,-------------------------------------------------------. ,-------------------------------------------------------.
- |RGB_TOG| MCR1 | MCR2 | MCR3 |XXXXXXX|XXXXXXX|XXXXXXX| |XXXXXXX|PLAY_M1|PLAY_M2|REC_M1 |REC_M2 |STP_REC| BSPC |
- |-------+-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------+-------|
- | RESET | | | | | | | |XXXXXXX|XXXXXXX|QWERTY | GAME |XXXXXXX|XXXXXXX|XXXXXXX|
- |-------+-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------+-------|
- | Shift | | | | | | | |XXXXXXX| M-PLAY|M-MUTE |VOL_DWN|VOL_UP |PREV_TR|NEXT_TR|
- |-------+-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------+-------|
- | Debug |XXXXXXX|XXXXXXX| | |XXXXXXX|XXXXXXX| |XXXXXXX|XXXXXXX| | Left | Down | Up | Right |
- `-------------------------------------------------------' `-------------------------------------------------------'
-
-GAME
- ,-------------------------------------------------------. ,-------------------------------------------------------.
- | Tab | Q | W | E | R | T |PrntScr| | Esc | 7 | 8 | 9 | . | = | BSPC |
- |-------+-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------+-------|
- | Ctrl | A | S | D | F | G | F1 | | F2 | 4 | 5 | 6 | - | / | Enter |
- |-------+-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------+-------|
- | Shift | Z | X | C | V | B | F2 | | Home | 1 | 2 | 3 | + | * | Shift |
- |-------+-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------+-------|
- | Del | GUI | Alt | Esc | LOWER | Space | Enter | | End | 0 | RAISE | Left | Down | Up | Right |
- `-------------------------------------------------------' `-------------------------------------------------------'
-````
-
-## Notes
-
-Supports RGB Underglow color sync to layer switching.
diff --git a/keyboards/biacco42/ergo42/keymaps/ichi-t/config.h b/keyboards/biacco42/ergo42/keymaps/ichi-t/config.h
deleted file mode 100644
index f0717a463284..000000000000
--- a/keyboards/biacco42/ergo42/keymaps/ichi-t/config.h
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
-This is the c configuration file for the keymap
-
-Copyright 2012 Jun Wako
-Copyright 2015 Jack Humbert
-
-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 .
-*/
-
-#pragma once
-
-/* Select hand configuration */
-
-#define MASTER_LEFT
-// #define MASTER_RIGHT
-// #define EE_HANDS
-
diff --git a/keyboards/biacco42/ergo42/keymaps/ichi-t/keymap.c b/keyboards/biacco42/ergo42/keymaps/ichi-t/keymap.c
deleted file mode 100644
index 39442742908f..000000000000
--- a/keyboards/biacco42/ergo42/keymaps/ichi-t/keymap.c
+++ /dev/null
@@ -1,108 +0,0 @@
-#include QMK_KEYBOARD_H
-
-extern keymap_config_t keymap_config;
-
-#define _QWERTY 0
-#define _LOWER 1
-#define _RAISE 2
-#define _CMOVE 3
-#define _WIN 4
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-
-/* QWERTY
- * ,------------------------------------------------. ,------------------------------------------------.
- * | Tab | Q | W | E | R | T | PGUP | | PGDN | Y | U | I | O | P | BSPC |
- * |------+------+------+------+------+------+------| |-------------+------+------+------+------+------|
- * | Ctrl | A | S | D | F | G | <- | | -> | H | J | K | L | ; | : |
- * |------+------+------+------+------+------+------| |------|------+------+------+------+------+------|
- * | Sft | Z | X | C | V | B | HOME | | END | N | M | , | . | / |ET/SFT|
- * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
- * | ESC | WIN | ALT | ALT | GUI |LOWER |Space | |Space |RAISE | GUI | HOME | LEFT | RGHT | CMOVE|
- * `------------------------------------------------' `------------------------------------------------'
- */
-
-[_QWERTY] = LAYOUT(
- KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_PGUP, KC_PGDN, 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_LEFT, KC_RGHT, 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_HOME, KC_END, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, RSFT_T(KC_ENT),
- KC_ESC, TT(_WIN), KC_LALT, KC_LALT, KC_LGUI, MO(_LOWER), KC_SPC, KC_SPC, MO(_RAISE), KC_RGUI, KC_RCTL, KC_RSFT, KC_RALT, MO(_CMOVE)
-),
-
-/* RAISE
- * ,------------------------------------------------. ,------------------------------------------------.
- * | GRV | 1 | 2 | 3 | 4 | 5 | HOME | | END | 6 | 7 | 8 | 9 | 0 | DEL |
- * |------+------+------+------+------+------+------| |-------------+------+------+------+------+------|
- * | | F1 | F2 | F3 | F4 | F5 | <- | | -> | F6 | MINS | EQL | LBRC | RBRC | BSLS |
- * |------+------+------+------+------+------+------| |------|------+------+------+------+------+------|
- * | | F7 | F8 | F9 | F10 | F11 | PGUP | | PGDN | F12 | | | | | |
- * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
- * | | | | | | |Space | |Space | | | | | | Alt+~|
- * `------------------------------------------------' `------------------------------------------------'
- */
-[_RAISE] = LAYOUT(
- KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, _______, _______, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL,
- _______, KC_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, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RALT(KC_GRV)
-),
-
-
-/* LOWER
- * ,------------------------------------------------. ,------------------------------------------------.
- * | ~ | ! | @ | # | $ | % | | | | ^ | & | * | ( | ) | DEL |
- * |------+------+------+------+------+------+------| |-------------+------+------+------+------+------|
- * | | F1 | F2 | F3 | F4 | F5 | | | UP | F6 | _ | + | { | } | | |
- * |------+------+------+------+------+------+------| |------|------+------+------+------+------+------|
- * | | F7 | F8 | F9 | F10 | F11 | | | DOWN | F12 | | PGUP | HOME | UP | END |
- * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
- * | | | | | | | | | | | | PGDN | LEFT | DOWN | RGHT |
- * `------------------------------------------------' `------------------------------------------------'
- */
-
-[_LOWER] = LAYOUT(
- KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, _______, _______, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL,
- _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, _______, KC_UP, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE,
- _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, _______, KC_DOWN, KC_F12, _______, KC_PGUP, KC_HOME, KC_UP, KC_END,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PGDN, KC_LEFT, KC_DOWN, KC_RGHT
-),
-
-/* CMOVE
- * ,------------------------------------------------. ,------------------------------------------------.
- * | | | | | | | | | | | | | | | |
- * |------+------+------+------+------+------+------| |-------------+------+------+------+------+------|
- * | | | | | | | | | | | PGUP | HOME | UP | END | |
- * |------+------+------+------+------+------+------| |------|------+------+------+------+------+------|
- * | | | | | | | | | | | PGDN | LEFT | DOWN | RIGHT| |
- * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
- * | | | | | | | | | | | | | | | |
- * `------------------------------------------------' `------------------------------------------------'
- */
-
-[_CMOVE] = LAYOUT(
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PGUP, KC_HOME, KC_UP, KC_END, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PGDN, KC_LEFT, KC_DOWN, KC_RGHT, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
-),
-
-/* WIN
- * ,------------------------------------------------. ,------------------------------------------------.
- * | | | | | | | | | | | | | | | |
- * |------+------+------+------+------+------+------| |-------------+------+------+------+------+------|
- * | | | | | | | | | | | | | | | |
- * |------+------+------+------+------+------+------| |------|------+------+------+------+------+------|
- * | | | | | | | | | | | | | | | |
- * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
- * | | | | LGUI | ALT | | | | | | | ALT | | | |
- * `------------------------------------------------' `------------------------------------------------'
- */
-
-[_WIN] = LAYOUT(
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, KC_LGUI, ALT_T(KC_INT5), _______, _______, _______, _______, ALT_T(KC_INT4), _______, _______, _______, _______
-),
-
-};
diff --git a/keyboards/biacco42/ergo42/keymaps/koba/config.h b/keyboards/biacco42/ergo42/keymaps/koba/config.h
deleted file mode 100644
index f0717a463284..000000000000
--- a/keyboards/biacco42/ergo42/keymaps/koba/config.h
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
-This is the c configuration file for the keymap
-
-Copyright 2012 Jun Wako
-Copyright 2015 Jack Humbert
-
-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 .
-*/
-
-#pragma once
-
-/* Select hand configuration */
-
-#define MASTER_LEFT
-// #define MASTER_RIGHT
-// #define EE_HANDS
-
diff --git a/keyboards/biacco42/ergo42/keymaps/koba/keymap.c b/keyboards/biacco42/ergo42/keymaps/koba/keymap.c
deleted file mode 100644
index 3f96db275168..000000000000
--- a/keyboards/biacco42/ergo42/keymaps/koba/keymap.c
+++ /dev/null
@@ -1,128 +0,0 @@
-/* Copyright 2018 Daisuke Kobayashi
- *
- * 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 .
- */
-
-#include QMK_KEYBOARD_H
-#include "keymap_japanese.h"
-
-enum {
- _WIN,
- _MACOS,
- _LOWER,
- _RAISE,
- _FUNC
-};
-
-#define KC_KNA KC_LNG1
-#define KC_EISU KC_LNG2
-#define LOWER MO(_LOWER)
-#define RAISE MO(_RAISE)
-#define FN MO(_FUNC)
-#define WIN DF(_WIN)
-#define MACOS DF(_MACOS)
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-
- /* WIN
- * ,------------------------------------------------. ,------------------------------------------------.
- * | Esc | Del | Q | W | E | R | T | | Y | U | I | O | P | @ ` | Bksp |
- * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
- * | Tab | Ctrl | A | S | D | F | G | | H | J | K | L | ; + | ; * |Enter |
- * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
- * | H/Z |Shift | Z | X | C | V | B | | N | M | , < | . > | / ? | Up |Shift |
- * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
- * | Fn | Ctrl | Win | Alt | Mhen |LOWER |Space | |Space |RAISE | Henk | Menu | Left | Down |Right |
- * `------------------------------------------------' `------------------------------------------------'
- */
- [_WIN] = LAYOUT(
- KC_ESC, KC_DEL, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, JP_AT, KC_BSPC,
- KC_TAB, KC_RCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, JP_COLN, KC_ENT,
- JP_ZKHK, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_UP, KC_RSFT,
- FN, KC_LCTL, KC_LGUI, KC_LALT, JP_MHEN, LOWER, KC_SPC, KC_SPC, RAISE, JP_HENK, KC_APP, KC_LEFT, KC_DOWN, KC_RGHT
- ),
-
- /* MACOS
- * ,------------------------------------------------. ,------------------------------------------------.
- * | Esc | Del | Q | W | E | R | T | | Y | U | I | O | P | @ ` | Bksp |
- * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
- * | Tab | Ctrl | A | S | D | F | G | | H | J | K | L | ; + | ; * |Enter |
- * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
- * | Caps |Shift | Z | X | C | V | B | | N | M | , < | . > | / ? | Up |Shift |
- * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
- * | Fn | Ctrl | Opt | Cmd | Eisu |LOWER |Space | |Space |RAISE | Kana | Cmd | Left | Down |Right |
- * `------------------------------------------------' `------------------------------------------------'
- */
- [_MACOS] = LAYOUT(
- KC_ESC, KC_DEL, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, JP_AT, KC_BSPC,
- KC_TAB, KC_RCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, JP_COLN, KC_ENT,
- KC_CAPS, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_UP, KC_RSFT,
- FN, KC_LCTL, KC_LALT, KC_LGUI, KC_EISU, LOWER, KC_SPC, KC_SPC, RAISE, KC_KNA, KC_RGUI, KC_LEFT, KC_DOWN, KC_RGHT
- ),
-
- /* LOWER
- * ,------------------------------------------------. ,------------------------------------------------.
- * | | | ! | " | # | $ | % | | & | ' | ( | ) | | = | |
- * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
- * | | | XXXX | XXXX | XXXX | { | ( | | ) | } | XXXX | ~ | | | _ | |
- * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
- * | | | XXXX | XXXX | XXXX | XXXX | XXXX | | XXXX | XXXX | XXXX | XXXX | XXXX | PgUp | |
- * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
- * | | | | | | | | | | | | | Home | PgDn | End |
- * `------------------------------------------------' `------------------------------------------------'
- */
- [_LOWER] = LAYOUT(
- _______, _______, S(KC_1), S(KC_2), S(KC_3), S(KC_4), S(KC_5), S(KC_6), S(KC_7), S(KC_8), S(KC_9), S(KC_0), JP_EQL, _______,
- _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, JP_LCBR, JP_LPRN, JP_RPRN, JP_RCBR, XXXXXXX, JP_TILD, JP_PIPE, JP_UNDS, _______,
- _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_PGUP, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_END
- ),
-
- /* RAISE
- * ,------------------------------------------------. ,------------------------------------------------.
- * | | | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | - | |
- * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
- * | | | F11 | F12 | XXXX | [ | ( | | ) | ] | XXXX | ^ | \ | \ | |
- * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
- * | | | F1 | F2 | F3 | F4 | F5 | | F6 | F7 | F8 | F9 | F10 | | |
- * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
- * | | | | | | | | | | | | | | | |
- * `------------------------------------------------' `------------------------------------------------'
- */
- [_RAISE] = LAYOUT(
- _______, _______, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, _______,
- _______, _______, KC_F11, KC_F12, XXXXXXX, JP_LBRC, JP_LPRN, JP_RPRN, JP_RBRC, XXXXXXX, JP_CIRC, JP_YEN, JP_BSLS, _______,
- _______, _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
- ),
-
- /* FUNC
- * ,------------------------------------------------. ,------------------------------------------------.
- * |Reset | Ins | XXXX | XXXX | XXXX | XXXX | XXXX | | XXXX | XXXX |PrtSc |SrcLk |Pause | XXXX | |
- * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
- * | | | XXXX | XXXX | XXXX | XXXX | >Win | | * | / | Home | PgUp | XXXX | XXXX | |
- * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
- * | Caps | | XXXX | XXXX | XXXX | XXXX | >Mac | | + | - | End | PgDn | XXXX | Vol+ | |
- * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
- * | | | | | | | | | | | | | Mute | Vol- | Play |
- * `------------------------------------------------' `------------------------------------------------'
- */
- [_FUNC] = LAYOUT(
- QK_BOOT, KC_INS, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_PSCR, KC_SCRL, KC_PAUS, XXXXXXX, _______,
- _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, WIN, JP_ASTR, KC_SLSH, KC_HOME, KC_PGUP, XXXXXXX, XXXXXXX, _______,
- KC_CAPS, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, MACOS, JP_PLUS, KC_MINS, KC_END, KC_PGDN, XXXXXXX, KC_VOLU, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MUTE, KC_VOLD, KC_MPLY
- )
-};
-
diff --git a/keyboards/biacco42/ergo42/keymaps/koba/readme.md b/keyboards/biacco42/ergo42/keymaps/koba/readme.md
deleted file mode 100644
index bbf9c1c4a6c9..000000000000
--- a/keyboards/biacco42/ergo42/keymaps/koba/readme.md
+++ /dev/null
@@ -1,57 +0,0 @@
-# Keymap for Ergo42
-
-## About
-
-This keymap is for Ergo42.
-
-- JIS layout.
-- Independent Windows layout/MacOS layout layers.
-- Bottom row keys are arranged like a standard keyboard.
-- Arrow keys are designed in the inverted-T.
-
-## Layout
-
-![keyboard-layout](https://user-images.githubusercontent.com/1042121/52666273-32a45e00-2f51-11e9-9e15-c231155f3bed.png)
-
-## Windows mode/MacOS mode
-
-|mode |key |
-|------------|------------|
-|Windows mode|Function + g|
-|MacOS mode |Function + b|
-
-When switching mode, the following keys switches.
-
-|Windows |MacOS |
-|---------------|------------|
-|Alt |Command(GUI)|
-|Windows(GUI) |Option(Alt) |
-|Menu(App) |Command(GUI)|
-|Muhenkan |Eisu |
-|Henkan |Kana |
-|Hankaku/Zenkaku|Caps |
-
-## Layers
-
-|No.|Name |Description |
-|---|--------|---------------------------|
-| 4 |Function|Mode switch, Media |
-| 3 |Raise |Number, Function |
-| 2 |Lower |Symbol, Home/End, PgUp/PgDn|
-| 1 |MacOS |MacOS layout |
-| 0 |Windows |Windows layout |
-
-When power is turn on, No.0 Windows layer becomes enabled.
-
-## Windows/MacOS layers
-
-Standard layers for Windows mode/MacOS mode.
-
-## Raise/Lower layers
-
-Layer enabled during pressing Raise or Lower key.
-
-## Function layer
-
-Layer enabled during pressing Function key.
-
diff --git a/keyboards/biacco42/ergo42/keymaps/koba/readme_ja.md b/keyboards/biacco42/ergo42/keymaps/koba/readme_ja.md
deleted file mode 100644
index 188fb48310e2..000000000000
--- a/keyboards/biacco42/ergo42/keymaps/koba/readme_ja.md
+++ /dev/null
@@ -1,62 +0,0 @@
-# Keymap for Ergo42
-
-## 概要
-
-Ergo42 用キーマップです。
-
-- JIS 配列
-- 独立した Windows 配列/MacOS 配列レイヤー
-- 普通のキーボード配列に似せた最下段キー
-- 逆 T 字 (凸型) 配列の矢印キー
-
-## レイアウト
-
-![keyboard-layout](https://user-images.githubusercontent.com/1042121/52666273-32a45e00-2f51-11e9-9e15-c231155f3bed.png)
-
-## Windows モード/MacOS モード
-
-|モード |キー |
-|--------------|------------|
-|Windows モード|Function + g|
-|MacOS モード |Function + b|
-
-モードを切り替えることで下記のキーが切り替わります。
-
-|Windows |MacOS |
-|------------|------------|
-|Alt |Command(GUI)|
-|Windows(GUI)|Option(Alt) |
-|Menu(App) |Command(GUI)|
-|無変換 |英数 |
-|変換 |かな |
-|半角/全角 |Caps |
-
-## レイヤー
-
-|No.|名称 |内容 |
-|---|--------|--------------------------|
-| 4 |Function|モード切替, メディア |
-| 3 |Raise |数字, ファンクションキー |
-| 2 |Lower |記号, Home/End, PgUp/PgDn |
-| 1 |MacOS |MacOS 配列 |
-| 0 |Windows |Windows 配列 |
-
-電源 ON により No.0 の Windows レイヤーが有効になります。
-
-## Windows/MacOS レイヤー
-
-Windows モード/MacOS モードの標準レイヤー。
-
-## Raise/Lower レイヤー
-
-Raise キーまたは Lower キーを押している間だけ有効になるレイヤー。
-
-普通のキーボードの最上段キー (数字/記号) に加えて、標準レイヤーに入らなかった記号キーが3つ (`[{`, `]}`, `\_`) 入っています。
-括弧キー `[{`, `]}` は `(`, `)` を加えて、左右対称に配置しました。
-
-## Function レイヤー
-
-Function キーを押している間だけ有効になるレイヤー。
-
-Windows モード/MacOS モードの切り替え、メディア系の操作、標準レイヤーに入らなかった機能キーのレイヤーです。
-
diff --git a/keyboards/biacco42/ergo42/keymaps/shinze/config.h b/keyboards/biacco42/ergo42/keymaps/shinze/config.h
deleted file mode 100644
index f0717a463284..000000000000
--- a/keyboards/biacco42/ergo42/keymaps/shinze/config.h
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
-This is the c configuration file for the keymap
-
-Copyright 2012 Jun Wako
-Copyright 2015 Jack Humbert
-
-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 .
-*/
-
-#pragma once
-
-/* Select hand configuration */
-
-#define MASTER_LEFT
-// #define MASTER_RIGHT
-// #define EE_HANDS
-
diff --git a/keyboards/biacco42/ergo42/keymaps/shinze/keymap.c b/keyboards/biacco42/ergo42/keymaps/shinze/keymap.c
deleted file mode 100644
index 0240a2e84afd..000000000000
--- a/keyboards/biacco42/ergo42/keymaps/shinze/keymap.c
+++ /dev/null
@@ -1,39 +0,0 @@
-#include QMK_KEYBOARD_H
-#include "keymap_bepo.h"
-#include "keymap_french.h"
-
-extern keymap_config_t keymap_config;
-
-#define BASE 0
-#define NUMB 1
-#define SHORT 2
-
-// Special keys
-#define COPY RGUI(BP_C)
-#define PASTE RGUI(BP_V)
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-
- [BASE] = LAYOUT(
- KC_TAB, BP_B, BP_EACU, BP_P, BP_O, BP_EGRV, KC_ESC, KC_BSPC, BP_DCIR, BP_V, BP_D, BP_L, BP_J, BP_Z,
- BP_W, BP_A, BP_U, BP_I, BP_E, BP_COMM, _______, _______, BP_C, BP_T, BP_S, BP_R, BP_N, BP_M,
- KC_LSFT, BP_AGRV, BP_Y, BP_X, BP_DOT, BP_K, _______, _______, BP_QUOT, BP_Q, BP_G, BP_H, BP_F, BP_CCED,
- MO(SHORT), KC_LCTL, _______, KC_LALT, KC_LGUI, KC_SPC, MO(NUMB), KC_ENT , KC_RSFT, KC_SPC, _______, _______, _______, _______
- ),
-
- [NUMB] = LAYOUT(
- BP_HASH, BP_DQUO, BP_LDQU, BP_RDQU, BP_LPRN, BP_RPRN, BP_AT, BP_PLUS, BP_MINS, BP_SLSH, BP_ASTR, BP_EQL, BP_PERC, KC_BSPC,
- BP_DLR, BP_1, BP_2, BP_3, BP_4, BP_5, KC_LBRC, KC_RBRC, BP_6, BP_7, BP_8, BP_9, BP_0, BP_DEG,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
- ),
-
- [SHORT] = LAYOUT(
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, QK_BOOT,
- _______, _______, KC_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, KC_LEFT, KC_DOWN, KC_RIGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, COPY, PASTE, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
- )
-
-};
-
diff --git a/keyboards/biacco42/ergo42/keymaps/yshrsmz/config.h b/keyboards/biacco42/ergo42/keymaps/yshrsmz/config.h
deleted file mode 100644
index eb2dbd6dd070..000000000000
--- a/keyboards/biacco42/ergo42/keymaps/yshrsmz/config.h
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
-This is the c configuration file for the keymap
-
-Copyright 2012 Jun Wako
-Copyright 2015 Jack Humbert
-
-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 .
-*/
-
-#pragma once
-
-/* Select hand configuration */
-
-#define MASTER_LEFT
-// #define MASTER_RIGHT
-// #define EE_HANDS
-
-/* auto shift config */
-#define AUTO_SHIFT_TIMEOUT 150
-
diff --git a/keyboards/biacco42/ergo42/keymaps/yshrsmz/keymap.c b/keyboards/biacco42/ergo42/keymaps/yshrsmz/keymap.c
deleted file mode 100644
index 894af40b3d8f..000000000000
--- a/keyboards/biacco42/ergo42/keymaps/yshrsmz/keymap.c
+++ /dev/null
@@ -1,162 +0,0 @@
-#include QMK_KEYBOARD_H
-
-extern keymap_config_t keymap_config;
-
-#define _BASE 0
-#define _META 1
-#define _SYMB 2
-#define _GAME 3
-
-
-enum custom_keycodes {
- BASE = SAFE_RANGE,
- META,
- SYMB,
- GAME,
- EISU,
- KANA
-};
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-
-/* BASE
- * ,------------------------------------------------. ,------------------------------------------------.
- * | = | Q | W | E | R | T | [ | | ] | Y | U | I | O | P | - |
- * |------+------+------+------+------+------+------| |-------------+------+------+------+------+------|
- * | Tab | A | S | D | F | G | ( | | ) | H | J | K | L | ; | ' |
- * |------+------+------+------+------+------+------| |------|------+------+------+------+------+------|
- * | Sft | Z | X | C | V | B | { | | } | N | M | , | . | / |\/Sft |
- * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
- * | EISU | Ctrl | Alt | GUI | ESC/ |Del |Back | |Enter |Space | META | GUI |=>GAME|=>SYMB| KANA |
- * | | | | | SYMB | |Space | | | | | | | | |
- * `------------------------------------------------' `------------------------------------------------'
- */
-
-[_BASE] = LAYOUT(
- KC_EQL, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_LBRC, KC_RBRC, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_MINS,
- KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_LPRN, KC_RPRN, 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_LCBR, KC_RCBR, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_BSLS,
- EISU, KC_LCTL, KC_LALT, KC_LGUI, LT(_SYMB, KC_ESC),KC_DEL, KC_BSPC, KC_ENT, KC_SPC, META, KC_LGUI, TG(_GAME), TG(_SYMB), KANA
-),
-
-/* META
- * ,------------------------------------------------. ,------------------------------------------------.
- * | ` | 1 | 2 | 3 | 4 | 5 | | | | 6 | 7 | 8 | 9 | 0 | |
- * |------+------+------+------+------+------+------| |-------------+------+------+------+------+------|
- * | | F1 | F2 | F3 | F4 | F5 | F6 | | | Left | Down | Up |Right | PgUp | |
- * |------+------+------+------+------+------+------| |------|------+------+------+------+------+------|
- * | | F7 | F8 | F9 | F10 | F11 | F12 | | | Home | End |Alt+← |Alt+→ | PgDn | |
- * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
- * | | | | | | | | | | | |Reset | | | |
- * | | | | | | | | | | | | | | | |
- * `------------------------------------------------' `------------------------------------------------'
- */
-
-[_META] = LAYOUT(
- 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_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_PGUP, _______,
- _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, KC_HOME, KC_END, LALT(KC_LEFT), LALT(KC_RGHT), KC_PGDN, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, QK_BOOT, _______, _______, _______
-),
-
-/* SYMB
- * ,------------------------------------------------. ,------------------------------------------------.
- * | ~ | ! | @ | # | $ | % | | | | ^ | & | * | ( | ) | - |
- * |------+------+------+------+------+------+------| |-------------+------+------+------+------+------|
- * | | F1 | F2 | F3 | F4 | F5 | F6 | | | Left | Down | Up |Right | PgUp | |
- * |------+------+------+------+------+------+------| |------|------+------+------+------+------+------|
- * | | F7 | F8 | F9 | F10 | F11 | F12 | | | Home | End |Alt+← |Alt+→ | PgDn | |
- * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
- * | | | | | | | | | | | |Reset | | | |
- * | | | | | | | | | | | | | | | |
- * `------------------------------------------------' `------------------------------------------------'
- */
-
-[_SYMB] = LAYOUT(
- KC_TILD, S(KC_1), S(KC_2), S(KC_3), S(KC_4), S(KC_5), _______, _______, S(KC_6), S(KC_7), S(KC_8), S(KC_9), S(KC_0), _______,
- _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_PGUP, _______,
- _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, KC_HOME, KC_END, LALT(KC_LEFT), LALT(KC_RGHT), KC_PGDN, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, QK_BOOT, _______, _______, _______
-),
-
-/* GAME
- * ,------------------------------------------------. ,------------------------------------------------.
- * | Tab | Q | W | E | R | T | [ | | ] | Y | U | I | O | P | @ |
- * |------+------+------+------+------+------+------| |-------------+------+------+------+------+------|
- * | Alt | A | S | D | F | G | ( | | ) | H | J | K | L | ; | : |
- * |------+------+------+------+------+------+------| |------|------+------+------+------+------+------|
- * | Sft | Z | X | C | V | B | { | | } | N | M | , | . | / |\/Sft |
- * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
- * | Ctrl | GUI | App |PrtSc | ESC |Space |Tab | |Back |Enter | Del |PrtSc |=>GAME|=>SYMB| \ |
- * | | | | | | | | |Space | | | | | | |
- * `------------------------------------------------' `------------------------------------------------'
- */
-[_GAME] = LAYOUT(
- KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_RBRC, KC_BSLS, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC,
- KC_LALT, KC_A, KC_S, KC_D, KC_F, KC_G, S(KC_8), S(KC_9), KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
- KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, S(KC_RBRC), S(KC_BSLS), KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SFT_T(KC_INT1),
- KC_LCTL, KC_LGUI, KC_APP, KC_PSCR, KC_ESC, KC_SPC, KC_TAB, KC_BSPC, KC_ENT, KC_DEL, KC_PSCR, _______, _______, KC_INT3
-)
-
-};
-
-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 BASE:
- if (record->event.pressed) {
- persistent_default_layer_set(1UL<<_BASE);
- }
- return false;
- break;
- case META:
- if (record->event.pressed) {
- layer_on(_META);
- update_tri_layer(_META, _SYMB, _GAME);
- } else {
- layer_off(_META);
- update_tri_layer(_META, _SYMB, _GAME);
- }
- return false;
- break;
- case SYMB:
- if (record->event.pressed) {
- layer_on(_SYMB);
- update_tri_layer(_META, _SYMB, _GAME);
- } else {
- layer_off(_SYMB);
- update_tri_layer(_META, _SYMB, _GAME);
- }
- return false;
- break;
- case GAME:
- if (record->event.pressed) {
- layer_on(_GAME);
- } else {
- layer_off(_GAME);
- }
- return false;
- break;
- case EISU:
- if (record->event.pressed) {
- register_code(KC_LNG2);
- } else {
- unregister_code(KC_LNG2);
- }
- return false;
- break;
- case KANA:
- if (record->event.pressed) {
- register_code(KC_LNG1);
- } else {
- unregister_code(KC_LNG1);
- }
- return false;
- break;
- }
- return true;
-}
diff --git a/keyboards/biacco42/ergo42/keymaps/yshrsmz/rules.mk b/keyboards/biacco42/ergo42/keymaps/yshrsmz/rules.mk
deleted file mode 100644
index a779882fadfe..000000000000
--- a/keyboards/biacco42/ergo42/keymaps/yshrsmz/rules.mk
+++ /dev/null
@@ -1,4 +0,0 @@
-RGBLIGHT_ENABLE = no
-BACKLIGHT_ENABLE = no
-
-AUTO_SHIFT_ENABLE = yes
diff --git a/keyboards/biacco42/meishi2/keymaps/led_status/keymap.c b/keyboards/biacco42/meishi2/keymaps/led_status/keymap.c
deleted file mode 100644
index fb8a33930f3f..000000000000
--- a/keyboards/biacco42/meishi2/keymaps/led_status/keymap.c
+++ /dev/null
@@ -1,36 +0,0 @@
-/* Copyright 2019 Biacco42
- *
- * 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 .
- */
-#include QMK_KEYBOARD_H
-
-#define PRO_MICRO_LED_TX D5
-#define PRO_MICRO_LED_RX B0
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [0] = LAYOUT( /* Base */
- LCTL(KC_Z), LCTL(KC_X), LCTL(KC_C), LCTL(KC_V)
- )
-};
-
-void matrix_init_user(void) {
- setPinOutput(PRO_MICRO_LED_TX);
- setPinOutput(PRO_MICRO_LED_RX);
-}
-
-bool led_update_user(led_t led_state) {
- writePin(PRO_MICRO_LED_TX, !led_state.num_lock);
- writePin(PRO_MICRO_LED_RX, !led_state.caps_lock);
- return true;
-}
diff --git a/keyboards/biacco42/meishi2/keymaps/led_status/readme.md b/keyboards/biacco42/meishi2/keymaps/led_status/readme.md
deleted file mode 100644
index 802ada91db17..000000000000
--- a/keyboards/biacco42/meishi2/keymaps/led_status/readme.md
+++ /dev/null
@@ -1,3 +0,0 @@
-# modified keymap for meishi2
-
-The LED on Pro Micro lights up when CAPS LOCK and NUM LOCK are in place.
diff --git a/keyboards/biacco42/meishi2/keymaps/moc/config.h b/keyboards/biacco42/meishi2/keymaps/moc/config.h
deleted file mode 100644
index 9b5675af6b12..000000000000
--- a/keyboards/biacco42/meishi2/keymaps/moc/config.h
+++ /dev/null
@@ -1,19 +0,0 @@
-/* Copyright 2021 Atsushi Nagase
- *
- * 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 .
- */
-
-#pragma once
-
-// place overrides here
diff --git a/keyboards/biacco42/meishi2/keymaps/moc/keymap.c b/keyboards/biacco42/meishi2/keymaps/moc/keymap.c
deleted file mode 100644
index 5e6c2e9c20f4..000000000000
--- a/keyboards/biacco42/meishi2/keymaps/moc/keymap.c
+++ /dev/null
@@ -1,45 +0,0 @@
-/* Copyright 2021 Atsushi Nagase
- *
- * 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 .
- */
-#include QMK_KEYBOARD_H
-
-enum meishi2_moc_layers {
- _DEFAULT,
- _RAISE
-};
-
-#define PRO_MICRO_LED_TX D5
-#define RAISE MO(_RAISE)
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [_DEFAULT] = LAYOUT( /* Base */
- RAISE, KC_B, KC_N, KC_SPC
- ),
- [_RAISE] = LAYOUT( /* Raise */
- _______, KC_LEFT, KC_RGHT, LSFT(KC_S)
- )
-};
-
-void matrix_init_user(void) {
- setPinOutput(PRO_MICRO_LED_TX);
- writePinHigh(PRO_MICRO_LED_TX);
-}
-
-bool process_record_user(uint16_t keycode, keyrecord_t *record) {
- if (keycode == RAISE) {
- writePin(PRO_MICRO_LED_TX, !record->event.pressed);
- }
- return true;
-}
diff --git a/keyboards/biacco42/meishi2/keymaps/moc/readme.md b/keyboards/biacco42/meishi2/keymaps/moc/readme.md
deleted file mode 100644
index aac1b25c9eb2..000000000000
--- a/keyboards/biacco42/meishi2/keymaps/moc/readme.md
+++ /dev/null
@@ -1,17 +0,0 @@
-# [MOC] keymap for meishi2
-
-```
-,--------- ------ ------ -----,
-| RAISE | ⏮ | ⏭ | ⏯ |
-`--------- ------ ------ -----'
-```
-
-## Raise Layer
-
-```
-,--------- ------ ------ -----,
-| | ⏪ | ⏩ | 🔀 |
-`--------- ------ ------ -----'
-```
-
-[moc]: http://moc.daper.net/
diff --git a/keyboards/binepad/bn006/config.h b/keyboards/binepad/bn006/config.h
index 41c3822655c4..0569ccff03cf 100755
--- a/keyboards/binepad/bn006/config.h
+++ b/keyboards/binepad/bn006/config.h
@@ -3,14 +3,6 @@
#pragma once
-/*
- * Wear Leveling EEPROM Emulation
- */
-
-#define WEAR_LEVELING_LOGICAL_SIZE 2048 // Number of bytes "exposed" to the rest of QMK and denotes the size of the usable EEPROM.
-#define WEAR_LEVELING_BACKING_SIZE (WEAR_LEVELING_LOGICAL_SIZE * 2) // Number of bytes used by the wear-leveling algorithm for its underlying storage, and needs to be a multiple of the logical size.
-
-
/*
* RGB Matrix
*/
diff --git a/keyboards/binepad/bn006/info.json b/keyboards/binepad/bn006/info.json
index 756b82e330a7..81e68d2e0c62 100755
--- a/keyboards/binepad/bn006/info.json
+++ b/keyboards/binepad/bn006/info.json
@@ -24,6 +24,11 @@
"pid": "0x426E",
"device_version": "1.0.0"
},
+ "eeprom": {
+ "wear_leveling": {
+ "backing_size": 4096
+ }
+ },
"ws2812": {
"pin": "B15"
},
diff --git a/keyboards/binepad/bn006/rules.mk b/keyboards/binepad/bn006/rules.mk
index 58561c984b4f..7ff128fa692e 100755
--- a/keyboards/binepad/bn006/rules.mk
+++ b/keyboards/binepad/bn006/rules.mk
@@ -1,5 +1 @@
-# Copyright 2022 Binepad (@binpad)
-# SPDX-License-Identifier: GPL-2.0-or-later
-
-EPROM_DRIVER = wear_leveling
-WEAR_LEVELING_DRIVER = embedded_flash
+# This file intentionally left blank
\ No newline at end of file
diff --git a/keyboards/binepad/bn009/r2/config.h b/keyboards/binepad/bn009/r2/config.h
deleted file mode 100644
index 45b63ec10528..000000000000
--- a/keyboards/binepad/bn009/r2/config.h
+++ /dev/null
@@ -1,12 +0,0 @@
-// Copyright 2023 Binepad (@binepad)
-// SPDX-License-Identifier: GPL-2.0-or-later
-
-#pragma once
-
-
-/*
- * Wear Leveling EEPROM Emulation
- */
-
-#define WEAR_LEVELING_LOGICAL_SIZE 2048 // Number of bytes "exposed" to the rest of QMK and denotes the size of the usable EEPROM.
-#define WEAR_LEVELING_BACKING_SIZE (WEAR_LEVELING_LOGICAL_SIZE * 2) // Number of bytes used by the wear-leveling algorithm for its underlying storage, and needs to be a multiple of the logical size.
diff --git a/keyboards/binepad/bn009/r2/info.json b/keyboards/binepad/bn009/r2/info.json
index c011fe0e32df..870608b5c80b 100644
--- a/keyboards/binepad/bn009/r2/info.json
+++ b/keyboards/binepad/bn009/r2/info.json
@@ -6,6 +6,11 @@
"cols": ["A1", "A2", "A6"],
"rows": ["B6", "B7", "B2"]
},
+ "eeprom": {
+ "wear_leveling": {
+ "backing_size": 4096
+ }
+ },
"processor": "STM32F103",
"usb": {
"device_version": "2.0.0"
diff --git a/keyboards/binepad/bnk9/config.h b/keyboards/binepad/bnk9/config.h
new file mode 100644
index 000000000000..c774a0f2b096
--- /dev/null
+++ b/keyboards/binepad/bnk9/config.h
@@ -0,0 +1,12 @@
+// Copyright 2023 binepad (@binepad)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#define ENCODER_DEFAULT_POS 0x3 // enable 1:1 resolution
+
+// Default PIO0 cases flickering in this board. Setting to PIO1 resolves this issue.
+#define WS2812_PIO_USE_PIO1
+
+// Timing for SK6812
+#define WS2812_T1H 650
diff --git a/keyboards/binepad/bnk9/info.json b/keyboards/binepad/bnk9/info.json
new file mode 100644
index 000000000000..1f3b7cb7b0f0
--- /dev/null
+++ b/keyboards/binepad/bnk9/info.json
@@ -0,0 +1,86 @@
+{
+ "manufacturer": "binepad",
+ "keyboard_name": "BNK9",
+ "maintainer": "binepad",
+ "board": "GENERIC_RP_RP2040",
+ "bootloader": "rp2040",
+ "bootloader_instructions": "Hold down the key at (0x0) in the matrix (the 'knob' / rotary encoder) and plug in the keyboard.",
+ "diode_direction": "COL2ROW",
+ "encoder": {
+ "rotary": [
+ {"pin_a": "GP13", "pin_b": "GP14"}
+ ]
+ },
+ "features": {
+ "bootmagic": true,
+ "encoder": true,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true,
+ "rgb_matrix": true
+ },
+ "matrix_pins": {
+ "cols": ["GP1", "GP2", "GP3"],
+ "rows": ["GP12", "GP4", "GP5", "GP6"]
+ },
+ "processor": "RP2040",
+ "rgb_matrix": {
+ "animations": {
+ "breathing": true,
+ "cycle_all": true,
+ "cycle_left_right": true,
+ "cycle_pinwheel": true,
+ "cycle_up_down": true,
+ "jellybean_raindrops": true,
+ "riverflow": true,
+ "solid_reactive": true,
+ "solid_reactive_simple": true,
+ "solid_splash": true,
+ "splash": true,
+ "starlight": true,
+ "starlight_dual_hue": true,
+ "starlight_dual_sat": true
+ },
+ "driver": "ws2812",
+ "layout": [
+ {"matrix": [1, 0], "x": 80, "y": 0, "flags": 4},
+ {"matrix": [1, 1], "x": 112, "y": 0, "flags": 4},
+ {"matrix": [1, 2], "x": 144, "y": 0, "flags": 4},
+ {"matrix": [2, 2], "x": 144, "y": 32, "flags": 4},
+ {"matrix": [2, 1], "x": 112, "y": 32, "flags": 4},
+ {"matrix": [2, 0], "x": 80, "y": 32, "flags": 4},
+ {"matrix": [3, 0], "x": 80, "y": 64, "flags": 4},
+ {"matrix": [3, 1], "x": 112, "y": 64, "flags": 4},
+ {"matrix": [3, 2], "x": 144, "y": 64, "flags": 4}
+ ],
+ "led_process_limit": 9,
+ "max_brightness": 180,
+ "sleep": true
+ },
+ "url": "https://www.binepad.com/product-page/bnk9",
+ "usb": {
+ "device_version": "1.0.0",
+ "pid": "0x4E39",
+ "vid": "0x4249"
+ },
+ "ws2812": {
+ "driver": "vendor",
+ "pin": "GP11"
+ },
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"label": "Knob", "matrix": [0, 0], "x": 0, "y": 0, "w": 3, "h": 3, "encoder": 0},
+ {"label": "1", "matrix": [1, 0], "x": 3.25, "y": 0},
+ {"label": "2", "matrix": [1, 1], "x": 4.25, "y": 0},
+ {"label": "3", "matrix": [1, 2], "x": 5.25, "y": 0},
+ {"label": "4", "matrix": [2, 0], "x": 3.25, "y": 1},
+ {"label": "5", "matrix": [2, 1], "x": 4.25, "y": 1},
+ {"label": "6", "matrix": [2, 2], "x": 5.25, "y": 1},
+ {"label": "7", "matrix": [3, 0], "x": 3.25, "y": 2},
+ {"label": "8", "matrix": [3, 1], "x": 4.25, "y": 2},
+ {"label": "9", "matrix": [3, 2], "x": 5.25, "y": 2}
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/keyboards/binepad/bnk9/keymaps/default/keymap.c b/keyboards/binepad/bnk9/keymaps/default/keymap.c
new file mode 100644
index 000000000000..9ae1e4541f62
--- /dev/null
+++ b/keyboards/binepad/bnk9/keymaps/default/keymap.c
@@ -0,0 +1,28 @@
+// Copyright 2023 Binepad (@binpad)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT(
+ KC_MUTE,
+ KC_P1, KC_P2, KC_P3,
+ KC_P4, KC_P5, KC_P6,
+ KC_P7, KC_P8, LT(1, KC_P9)
+ ),
+ [1] = LAYOUT(
+ RGB_TOG,
+ RGB_HUI, RGB_SAI, RGB_SPI,
+ RGB_HUD, RGB_SAD, RGB_SPD,
+ RGB_RMOD, RGB_MOD, _______
+ )
+};
+
+#if defined(ENCODER_MAP_ENABLE)
+
+const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
+ [0] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
+ [1] = { ENCODER_CCW_CW(RGB_VAD, RGB_VAI) }
+};
+
+#endif
diff --git a/keyboards/binepad/bnk9/keymaps/default/rules.mk b/keyboards/binepad/bnk9/keymaps/default/rules.mk
new file mode 100644
index 000000000000..ee325681483f
--- /dev/null
+++ b/keyboards/binepad/bnk9/keymaps/default/rules.mk
@@ -0,0 +1 @@
+ENCODER_MAP_ENABLE = yes
diff --git a/keyboards/binepad/bnk9/keymaps/via/keymap.c b/keyboards/binepad/bnk9/keymaps/via/keymap.c
new file mode 100644
index 000000000000..9ae1e4541f62
--- /dev/null
+++ b/keyboards/binepad/bnk9/keymaps/via/keymap.c
@@ -0,0 +1,28 @@
+// Copyright 2023 Binepad (@binpad)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT(
+ KC_MUTE,
+ KC_P1, KC_P2, KC_P3,
+ KC_P4, KC_P5, KC_P6,
+ KC_P7, KC_P8, LT(1, KC_P9)
+ ),
+ [1] = LAYOUT(
+ RGB_TOG,
+ RGB_HUI, RGB_SAI, RGB_SPI,
+ RGB_HUD, RGB_SAD, RGB_SPD,
+ RGB_RMOD, RGB_MOD, _______
+ )
+};
+
+#if defined(ENCODER_MAP_ENABLE)
+
+const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
+ [0] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
+ [1] = { ENCODER_CCW_CW(RGB_VAD, RGB_VAI) }
+};
+
+#endif
diff --git a/keyboards/rgbkb/sol3/keymaps/kageurufu/rules.mk b/keyboards/binepad/bnk9/keymaps/via/rules.mk
similarity index 100%
rename from keyboards/rgbkb/sol3/keymaps/kageurufu/rules.mk
rename to keyboards/binepad/bnk9/keymaps/via/rules.mk
diff --git a/keyboards/binepad/bnk9/readme.md b/keyboards/binepad/bnk9/readme.md
new file mode 100644
index 000000000000..f8e6633b1434
--- /dev/null
+++ b/keyboards/binepad/bnk9/readme.md
@@ -0,0 +1,27 @@
+# BINEPAD BNK9
+
+![BINEPAD BNK9](https://i.imgur.com/FrkVRhhh.jpg)
+
+A 3x3 macropad with a large rotary encoder.
+
+* Keyboard Maintainer: [binepad](https://github.com/binepad)
+* Hardware Supported: BINPAD BNK9
+* Hardware Availability: [binepad.com](https://www.binepad.com/product-page/bnk9)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make binepad/bnk9:default
+
+Flashing example for this keyboard:
+
+ make binepad/bnk9:default:flash
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+## Bootloader
+
+Enter the bootloader in 3 ways:
+
+* **Bootmagic reset**: Hold down the key at (0x0) in the matrix (the 'knob' / rotary encoder) and plug in the keyboard.
+* **Physical reset button**: Briefly press the PCB button located on the back of the PCB.
+* **Keycode in layout**: Press the key mapped to `QK_BOOT` *(or* `RESET` *in VIA)* if it is available.
diff --git a/keyboards/binepad/bnk9/rules.mk b/keyboards/binepad/bnk9/rules.mk
new file mode 100644
index 000000000000..6e7633bfe015
--- /dev/null
+++ b/keyboards/binepad/bnk9/rules.mk
@@ -0,0 +1 @@
+# This file intentionally left blank
diff --git a/keyboards/binepad/bnr1/v2/config.h b/keyboards/binepad/bnr1/v2/config.h
deleted file mode 100644
index c408f95d383d..000000000000
--- a/keyboards/binepad/bnr1/v2/config.h
+++ /dev/null
@@ -1,7 +0,0 @@
-// Copyright 2022 BINEPAD (@binepad)
-// SPDX-License-Identifier: GPL-2.0-or-later
-
-#pragma once
-
-#define WEAR_LEVELING_LOGICAL_SIZE 1024
-#define WEAR_LEVELING_BACKING_SIZE (WEAR_LEVELING_LOGICAL_SIZE * 2)
diff --git a/keyboards/binepad/bnr1/v2/rules.mk b/keyboards/binepad/bnr1/v2/rules.mk
index 77b90d035df4..6e7633bfe015 100644
--- a/keyboards/binepad/bnr1/v2/rules.mk
+++ b/keyboards/binepad/bnr1/v2/rules.mk
@@ -1,5 +1 @@
-# This file only contains EFL/WL settings and enables F103 low-power mode
-
-EEPROM_DRIVER = wear_leveling
-WEAR_LEVELING_DRIVER = embedded_flash
-
+# This file intentionally left blank
diff --git a/keyboards/bioi/ble.c b/keyboards/bioi/ble.c
deleted file mode 100644
index 12c180966a9f..000000000000
--- a/keyboards/bioi/ble.c
+++ /dev/null
@@ -1,174 +0,0 @@
-/*
-Copyright 2019 Basic I/O Instruments(Scott Wei)
-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 .
-*/
-
-#include "bluetooth.h"
-#include "ble.h"
-#include "usart.h"
-#include "progmem.h"
-#include "wait.h"
-#include "debug.h"
-#include "usb_descriptor.h"
-#include "report.h"
-
-keyboard_config_t ble_config;
-
-static void bluefruit_serial_send(uint8_t);
-
-void send_str(const char *str)
-{
- uint8_t c;
- while ((c = pgm_read_byte(str++)))
- uart1_putc(c);
-}
-
-void serial_send(uint8_t data)
-{
- dprintf("Sending: %u\n", data);
-}
-
-void send_bytes(uint8_t data)
-{
- char hexStr[3];
- sprintf(hexStr, "%02X", data);
- for (int j = 0; j < sizeof(hexStr) - 1; j++)
- {
- uart1_putc(hexStr[j]);
- }
-}
-
-#ifdef BLUEFRUIT_TRACE_SERIAL
-static void bluefruit_trace_header(void)
-{
- dprintf("+------------------------------------+\n");
- dprintf("| HID report to Bluefruit via serial |\n");
- dprintf("+------------------------------------+\n|");
-}
-
-static void bluefruit_trace_footer(void)
-{
- dprintf("|\n+------------------------------------+\n\n");
-}
-#endif
-
-static void bluefruit_serial_send(uint8_t data)
-{
-#ifdef BLUEFRUIT_TRACE_SERIAL
- dprintf(" ");
- debug_hex8(data);
- dprintf(" ");
-#endif
- serial_send(data);
-}
-
-void bluetooth_init(void) {
- usart_init();
-}
-
-void bluetooth_task(void) {}
-
-void bluetooth_send_keyboard(report_keyboard_t *report)
-{
-#ifdef BLUEFRUIT_TRACE_SERIAL
- bluefruit_trace_header();
-#endif
- dprintf("Sending...\n");
-
- send_str(PSTR("AT+BLEKEYBOARDCODE="));
-
- for (uint8_t i = 0; i < KEYBOARD_EPSIZE; i++)
- {
- send_bytes(report->raw[i]);
- if (i < (KEYBOARD_EPSIZE - 1))
- {
- send_str(PSTR("-"));
- }
- }
-
- send_str(PSTR("\r\n"));
-#ifdef BLUEFRUIT_TRACE_SERIAL
- bluefruit_trace_footer();
-#endif
-}
-
-void bluetooth_send_mouse(report_mouse_t *report)
-{
-#ifdef BLUEFRUIT_TRACE_SERIAL
- bluefruit_trace_header();
-#endif
- bluefruit_serial_send(0xFD);
- bluefruit_serial_send(0x00);
- bluefruit_serial_send(0x03);
- bluefruit_serial_send(report->buttons);
- bluefruit_serial_send(report->x);
- bluefruit_serial_send(report->y);
- bluefruit_serial_send(report->v); // should try sending the wheel v here
- bluefruit_serial_send(report->h); // should try sending the wheel h here
- bluefruit_serial_send(0x00);
-#ifdef BLUEFRUIT_TRACE_SERIAL
- bluefruit_trace_footer();
-#endif
-}
-
-/*
-+-----------------+-------------------+-------+
-| Consumer Key | Bit Map | Hex |
-+-----------------+-------------------+-------+
-| Home | 00000001 00000000 | 01 00 |
-| KeyboardLayout | 00000010 00000000 | 02 00 |
-| Search | 00000100 00000000 | 04 00 |
-| Snapshot | 00001000 00000000 | 08 00 |
-| VolumeUp | 00010000 00000000 | 10 00 |
-| VolumeDown | 00100000 00000000 | 20 00 |
-| Play/Pause | 01000000 00000000 | 40 00 |
-| Fast Forward | 10000000 00000000 | 80 00 |
-| Rewind | 00000000 00000001 | 00 01 |
-| Scan Next Track | 00000000 00000010 | 00 02 |
-| Scan Prev Track | 00000000 00000100 | 00 04 |
-| Random Play | 00000000 00001000 | 00 08 |
-| Stop | 00000000 00010000 | 00 10 |
-+-------------------------------------+-------+
-*/
-#define CONSUMER2BLUEFRUIT(usage) \
- (usage == AUDIO_MUTE ? 0x00e2 : (usage == AUDIO_VOL_UP ? 0x00e9 : (usage == AUDIO_VOL_DOWN ? 0x00ea : (usage == TRANSPORT_NEXT_TRACK ? 0x00b5 : (usage == TRANSPORT_PREV_TRACK ? 0x00b6 : (usage == TRANSPORT_STOP ? 0x00b7 : (usage == TRANSPORT_STOP_EJECT ? 0x00b8 : (usage == TRANSPORT_PLAY_PAUSE ? 0x00b1 : (usage == AL_CC_CONFIG ? 0x0183 : (usage == AL_EMAIL ? 0x018c : (usage == AL_CALCULATOR ? 0x0192 : (usage == AL_LOCAL_BROWSER ? 0x0196 : (usage == AC_SEARCH ? 0x021f : (usage == AC_HOME ? 0x0223 : (usage == AC_BACK ? 0x0224 : (usage == AC_FORWARD ? 0x0225 : (usage == AC_STOP ? 0x0226 : (usage == AC_REFRESH ? 0x0227 : (usage == AC_BOOKMARKS ? 0x022a : 0)))))))))))))))))))
-
-void bluetooth_send_consumer(uint16_t usage)
-{
- uint16_t bitmap = CONSUMER2BLUEFRUIT(usage);
-
-#ifdef BLUEFRUIT_TRACE_SERIAL
- dprintf("\nData: ");
- debug_hex16(data);
- dprintf("; bitmap: ");
- debug_hex16(bitmap);
- dprintf("\n");
- bluefruit_trace_header();
-#endif
- send_str(PSTR("AT+BLEHIDCONTROLKEY=0x"));
- send_bytes((bitmap >> 8) & 0xFF);
- send_bytes(bitmap & 0xFF);
- send_str(PSTR("\r\n"));
-#ifdef BLUEFRUIT_TRACE_SERIAL
- bluefruit_trace_footer();
-#endif
-}
-
-void usart_init(void)
-{
- uart1_init(UART_BAUD_SELECT_DOUBLE_SPEED(76800, 8000000L));
- wait_ms(250);
-
- send_str(PSTR("\r\n"));
- send_str(PSTR("\r\n"));
- send_str(PSTR("\r\n"));
-}
diff --git a/keyboards/bioi/ble.h b/keyboards/bioi/ble.h
deleted file mode 100644
index 529ebf5241d6..000000000000
--- a/keyboards/bioi/ble.h
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
-Copyright 2019 Basic I/O Instruments(Scott Wei)
-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 .
-*/
-
-#pragma once
-
-#include
-
-typedef union {
- uint32_t raw;
- struct {
- bool init : 1;
- };
-} keyboard_config_t;
-
-extern keyboard_config_t ble_config;
-
-void send_str(const char *str);
-void usart_init(void);
-void module_reset(void);
diff --git a/keyboards/bioi/bluetooth_custom.c b/keyboards/bioi/bluetooth_custom.c
new file mode 100644
index 000000000000..4ea277f731a6
--- /dev/null
+++ b/keyboards/bioi/bluetooth_custom.c
@@ -0,0 +1,163 @@
+/*
+Copyright 2019 Basic I/O Instruments(Scott Wei)
+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 .
+*/
+
+#include "bluetooth.h"
+#include "uart.h"
+#include "progmem.h"
+#include "wait.h"
+#include "debug.h"
+#include "usb_descriptor.h"
+#include "report.h"
+
+void send_str(const char *str)
+{
+ uint8_t c;
+ while ((c = pgm_read_byte(str++)))
+ uart_write(c);
+}
+
+void serial_send(uint8_t data)
+{
+ dprintf("Sending: %u\n", data);
+}
+
+void send_bytes(uint8_t data)
+{
+ char hexStr[3];
+ sprintf(hexStr, "%02X", data);
+ for (int j = 0; j < sizeof(hexStr) - 1; j++)
+ {
+ uart_write(hexStr[j]);
+ }
+}
+
+#ifdef BLUEFRUIT_TRACE_SERIAL
+static void bluefruit_trace_header(void)
+{
+ dprintf("+------------------------------------+\n");
+ dprintf("| HID report to Bluefruit via serial |\n");
+ dprintf("+------------------------------------+\n|");
+}
+
+static void bluefruit_trace_footer(void)
+{
+ dprintf("|\n+------------------------------------+\n\n");
+}
+#endif
+
+static void bluefruit_serial_send(uint8_t data)
+{
+#ifdef BLUEFRUIT_TRACE_SERIAL
+ dprintf(" ");
+ debug_hex8(data);
+ dprintf(" ");
+#endif
+ serial_send(data);
+}
+
+void bluetooth_init(void) {
+ uart_init(76800);
+ wait_ms(250);
+
+ send_str(PSTR("\r\n"));
+ send_str(PSTR("\r\n"));
+ send_str(PSTR("\r\n"));
+}
+
+void bluetooth_task(void) {}
+
+void bluetooth_send_keyboard(report_keyboard_t *report)
+{
+#ifdef BLUEFRUIT_TRACE_SERIAL
+ bluefruit_trace_header();
+#endif
+ dprintf("Sending...\n");
+
+ send_str(PSTR("AT+BLEKEYBOARDCODE="));
+
+ send_bytes(report->mods);
+ send_str(PSTR("-"));
+ send_bytes(0);
+ for (uint8_t i = 0; i < KEYBOARD_REPORT_KEYS; i++) {
+ send_str(PSTR("-"));
+ send_bytes(report->keys[i]);
+ }
+
+ send_str(PSTR("\r\n"));
+#ifdef BLUEFRUIT_TRACE_SERIAL
+ bluefruit_trace_footer();
+#endif
+}
+
+void bluetooth_send_mouse(report_mouse_t *report)
+{
+#ifdef BLUEFRUIT_TRACE_SERIAL
+ bluefruit_trace_header();
+#endif
+ bluefruit_serial_send(0xFD);
+ bluefruit_serial_send(0x00);
+ bluefruit_serial_send(0x03);
+ bluefruit_serial_send(report->buttons);
+ bluefruit_serial_send(report->x);
+ bluefruit_serial_send(report->y);
+ bluefruit_serial_send(report->v); // should try sending the wheel v here
+ bluefruit_serial_send(report->h); // should try sending the wheel h here
+ bluefruit_serial_send(0x00);
+#ifdef BLUEFRUIT_TRACE_SERIAL
+ bluefruit_trace_footer();
+#endif
+}
+
+/*
++-----------------+-------------------+-------+
+| Consumer Key | Bit Map | Hex |
++-----------------+-------------------+-------+
+| Home | 00000001 00000000 | 01 00 |
+| KeyboardLayout | 00000010 00000000 | 02 00 |
+| Search | 00000100 00000000 | 04 00 |
+| Snapshot | 00001000 00000000 | 08 00 |
+| VolumeUp | 00010000 00000000 | 10 00 |
+| VolumeDown | 00100000 00000000 | 20 00 |
+| Play/Pause | 01000000 00000000 | 40 00 |
+| Fast Forward | 10000000 00000000 | 80 00 |
+| Rewind | 00000000 00000001 | 00 01 |
+| Scan Next Track | 00000000 00000010 | 00 02 |
+| Scan Prev Track | 00000000 00000100 | 00 04 |
+| Random Play | 00000000 00001000 | 00 08 |
+| Stop | 00000000 00010000 | 00 10 |
++-------------------------------------+-------+
+*/
+#define CONSUMER2BLUEFRUIT(usage) \
+ (usage == AUDIO_MUTE ? 0x00e2 : (usage == AUDIO_VOL_UP ? 0x00e9 : (usage == AUDIO_VOL_DOWN ? 0x00ea : (usage == TRANSPORT_NEXT_TRACK ? 0x00b5 : (usage == TRANSPORT_PREV_TRACK ? 0x00b6 : (usage == TRANSPORT_STOP ? 0x00b7 : (usage == TRANSPORT_STOP_EJECT ? 0x00b8 : (usage == TRANSPORT_PLAY_PAUSE ? 0x00b1 : (usage == AL_CC_CONFIG ? 0x0183 : (usage == AL_EMAIL ? 0x018c : (usage == AL_CALCULATOR ? 0x0192 : (usage == AL_LOCAL_BROWSER ? 0x0196 : (usage == AC_SEARCH ? 0x021f : (usage == AC_HOME ? 0x0223 : (usage == AC_BACK ? 0x0224 : (usage == AC_FORWARD ? 0x0225 : (usage == AC_STOP ? 0x0226 : (usage == AC_REFRESH ? 0x0227 : (usage == AC_BOOKMARKS ? 0x022a : 0)))))))))))))))))))
+
+void bluetooth_send_consumer(uint16_t usage)
+{
+ uint16_t bitmap = CONSUMER2BLUEFRUIT(usage);
+
+#ifdef BLUEFRUIT_TRACE_SERIAL
+ dprintf("\nData: ");
+ debug_hex16(data);
+ dprintf("; bitmap: ");
+ debug_hex16(bitmap);
+ dprintf("\n");
+ bluefruit_trace_header();
+#endif
+ send_str(PSTR("AT+BLEHIDCONTROLKEY=0x"));
+ send_bytes((bitmap >> 8) & 0xFF);
+ send_bytes(bitmap & 0xFF);
+ send_str(PSTR("\r\n"));
+#ifdef BLUEFRUIT_TRACE_SERIAL
+ bluefruit_trace_footer();
+#endif
+}
diff --git a/keyboards/bioi/g60/rules.mk b/keyboards/bioi/g60/rules.mk
index 2b955ce793ba..375cb52732a1 100644
--- a/keyboards/bioi/g60/rules.mk
+++ b/keyboards/bioi/g60/rules.mk
@@ -18,7 +18,5 @@ BLUETOOTH_ENABLE = yes
VIA_ENABLE = yes # VIA support should be enabled here due to the main() loop will be compiled first.
-SRC += usart.c ble.c
-
-OPT_DEFS += -DUART_RX1_BUFFER_SIZE=16 -DUART_TX1_BUFFER_SIZE=16
-OPT_DEFS += -DUSART1_ENABLED
+UART_DRIVER_REQUIRED = yes
+SRC += bluetooth_custom.c
diff --git a/keyboards/bioi/g60ble/keymaps/chemicalwill/keymap.c b/keyboards/bioi/g60ble/keymaps/chemicalwill/keymap.c
deleted file mode 100644
index 680c96879573..000000000000
--- a/keyboards/bioi/g60ble/keymaps/chemicalwill/keymap.c
+++ /dev/null
@@ -1,206 +0,0 @@
-/* Copyright 2023 Will Hedges (@will-hedges)
- *
- * 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 .
- */
-
-#include QMK_KEYBOARD_H
-
-enum layers {
- _WORK,
- _QWER,
- _FN1
-};
-
-enum custom_keycodes {
- BASE_QWER = SAFE_RANGE,
- BASE_WORK
-};
-
-// Tap Dance enum
-enum {
- N8_F8,
- N9_F9,
- N0_F10,
- MINS_F11,
- EQL_F12,
- DEL_BSLS,
- G_END,
- H_HOME,
- LALT_PGUP,
- RALT_PGDN
-};
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-
- [_WORK] = LAYOUT_60_ansi(
- QK_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, TD(N8_F8), TD(N9_F9), TD(N0_F10), TD(MINS_F11), TD(EQL_F12), KC_BSPC,
- KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, TD(DEL_BSLS),
- LT(_FN1, KC_CAPS), KC_A, KC_S, KC_D, KC_F, TD(G_END), TD(H_HOME), 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_LCTL, KC_LGUI, LALT_T(KC_PGUP), KC_SPC, RALT_T(KC_PGDN), KC_APP, MO(_FN1), KC_RCTL
- ),
-
- [_QWER] = LAYOUT_60_ansi(
- QK_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,
- KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, TD(DEL_BSLS),
- LT(_FN1, 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_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_APP, MO(_FN1), KC_RCTL
- ),
-
- [_FN1] = LAYOUT_60_ansi(
- _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL,
- _______, _______, KC_PGUP, _______, QK_RBT, _______, _______, _______, KC_UP, _______, _______, _______, _______, _______,
- _______, KC_HOME, KC_PGDN, KC_END, _______, _______, _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______,
- _______, _______, _______, _______, _______, QK_BOOT, _______, _______, _______, _______, _______, _______,
- _______, C(A(KC_DEL)), _______, _______, _______, BASE_WORK, _______, BASE_QWER
- )
-
-};
-
-
-// Tap Dance tap vs. hold docs @ https://docs.qmk.fm/#/feature_tap_dance?id=example-3
-// Macros are also used with process_record_user @ https://docs.qmk.fm/#/feature_macros?id=using-macros-in-c-keymaps
-typedef struct {
- uint16_t tap;
- uint16_t hold;
- uint16_t held;
-} tap_dance_tap_hold_t;
-
-bool process_record_user(uint16_t keycode, keyrecord_t *record) {
- tap_dance_action_t *action;
-
- switch (keycode) {
- // MACROS
- case BASE_QWER:
- if (record->event.pressed) {
- set_single_persistent_default_layer(_QWER);
- }
- break;
-
- case BASE_WORK:
- if (record->event.pressed) {
- set_single_persistent_default_layer(_WORK);
- }
- break;
-
- // TAP DANCES
- case TD(N8_F8):
- action = &tap_dance_actions[TD_INDEX(keycode)];
- if (!record->event.pressed && action->state.count && !action->state.finished) {
- tap_dance_tap_hold_t *tap_hold = (tap_dance_tap_hold_t *)action->user_data;
- tap_code16(tap_hold->tap);
- }
- break;
-
- case TD(N9_F9):
- action = &tap_dance_actions[TD_INDEX(keycode)];
- if (!record->event.pressed && action->state.count && !action->state.finished) {
- tap_dance_tap_hold_t *tap_hold = (tap_dance_tap_hold_t *)action->user_data;
- tap_code16(tap_hold->tap);
- }
- break;
-
- case TD(N0_F10):
- action = &tap_dance_actions[TD_INDEX(keycode)];
- if (!record->event.pressed && action->state.count && !action->state.finished) {
- tap_dance_tap_hold_t *tap_hold = (tap_dance_tap_hold_t *)action->user_data;
- tap_code16(tap_hold->tap);
- }
- break;
-
- case TD(MINS_F11):
- action = &tap_dance_actions[TD_INDEX(keycode)];
- if (!record->event.pressed && action->state.count && !action->state.finished) {
- tap_dance_tap_hold_t *tap_hold = (tap_dance_tap_hold_t *)action->user_data;
- tap_code16(tap_hold->tap);
- }
- break;
-
- case TD(EQL_F12):
- action = &tap_dance_actions[TD_INDEX(keycode)];
- if (!record->event.pressed && action->state.count && !action->state.finished) {
- tap_dance_tap_hold_t *tap_hold = (tap_dance_tap_hold_t *)action->user_data;
- tap_code16(tap_hold->tap);
- }
- break;
-
- case TD(DEL_BSLS):
- action = &tap_dance_actions[TD_INDEX(keycode)];
- if (!record->event.pressed && action->state.count && !action->state.finished) {
- tap_dance_tap_hold_t *tap_hold = (tap_dance_tap_hold_t *)action->user_data;
- tap_code16(tap_hold->tap);
- }
- break;
-
- case TD(G_END):
- action = &tap_dance_actions[TD_INDEX(keycode)];
- if (!record->event.pressed && action->state.count && !action->state.finished) {
- tap_dance_tap_hold_t *tap_hold = (tap_dance_tap_hold_t *)action->user_data;
- tap_code16(tap_hold->tap);
- }
- break;
-
- case TD(H_HOME):
- action = &tap_dance_actions[TD_INDEX(keycode)];
- if (!record->event.pressed && action->state.count && !action->state.finished) {
- tap_dance_tap_hold_t *tap_hold = (tap_dance_tap_hold_t *)action->user_data;
- tap_code16(tap_hold->tap);
- }
- break;
-
- }
- return true;
-}
-
-void tap_dance_tap_hold_finished(tap_dance_state_t *state, void *user_data) {
- tap_dance_tap_hold_t *tap_hold = (tap_dance_tap_hold_t *)user_data;
-
- if (state->pressed) {
- if (state->count == 1
-#ifndef PERMISSIVE_HOLD
- && !state->interrupted
-#endif
- ) {
- register_code16(tap_hold->hold);
- tap_hold->held = tap_hold->hold;
- } else {
- register_code16(tap_hold->tap);
- tap_hold->held = tap_hold->tap;
- }
- }
-}
-
-void tap_dance_tap_hold_reset(tap_dance_state_t *state, void *user_data) {
- tap_dance_tap_hold_t *tap_hold = (tap_dance_tap_hold_t *)user_data;
-
- if (tap_hold->held) {
- unregister_code16(tap_hold->held);
- tap_hold->held = 0;
- }
-}
-
-#define ACTION_TAP_DANCE_TAP_HOLD(tap, hold) \
- { .fn = {NULL, tap_dance_tap_hold_finished, tap_dance_tap_hold_reset}, .user_data = (void *)&((tap_dance_tap_hold_t){tap, hold, 0}), }
-
-tap_dance_action_t tap_dance_actions[] = {
- [N8_F8] = ACTION_TAP_DANCE_TAP_HOLD(KC_8, KC_F8),
- [N9_F9] = ACTION_TAP_DANCE_TAP_HOLD(KC_9, KC_F9),
- [N0_F10] = ACTION_TAP_DANCE_TAP_HOLD(KC_0, KC_F10),
- [MINS_F11] = ACTION_TAP_DANCE_TAP_HOLD(KC_MINS, KC_F11),
- [EQL_F12] = ACTION_TAP_DANCE_TAP_HOLD(KC_EQL, KC_F12),
- [DEL_BSLS] = ACTION_TAP_DANCE_TAP_HOLD(KC_DEL, KC_BSLS),
- [G_END] = ACTION_TAP_DANCE_TAP_HOLD(KC_G, KC_END),
- [H_HOME] = ACTION_TAP_DANCE_TAP_HOLD(KC_H, KC_HOME)
-};
diff --git a/keyboards/bioi/g60ble/keymaps/chemicalwill/rules.mk b/keyboards/bioi/g60ble/keymaps/chemicalwill/rules.mk
deleted file mode 100644
index c86c7b33406d..000000000000
--- a/keyboards/bioi/g60ble/keymaps/chemicalwill/rules.mk
+++ /dev/null
@@ -1,7 +0,0 @@
-# features enabled by default that I want to turn off
-BACKLIGHT_ENABLE = no
-MOUSEKEY_ENABLE = no
-RGBLIGHT_ENABLE = no
-
-# features I want to add
-TAP_DANCE_ENABLE = yes
diff --git a/keyboards/bioi/g60ble/rules.mk b/keyboards/bioi/g60ble/rules.mk
index 31cc2c22b691..6bfcc62d7e00 100644
--- a/keyboards/bioi/g60ble/rules.mk
+++ b/keyboards/bioi/g60ble/rules.mk
@@ -13,8 +13,7 @@ BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
RGBLIGHT_ENABLE = yes
LTO_ENABLE = yes
-# these lines are all for bluetooth
BLUETOOTH_ENABLE = yes
-SRC += usart.c ble.c
-OPT_DEFS += -DUART_RX1_BUFFER_SIZE=16 -DUART_TX1_BUFFER_SIZE=16
-OPT_DEFS += -DUSART1_ENABLED
+
+UART_DRIVER_REQUIRED = yes
+SRC += bluetooth_custom.c
diff --git a/keyboards/bioi/morgan65/rules.mk b/keyboards/bioi/morgan65/rules.mk
index 2b955ce793ba..375cb52732a1 100644
--- a/keyboards/bioi/morgan65/rules.mk
+++ b/keyboards/bioi/morgan65/rules.mk
@@ -18,7 +18,5 @@ BLUETOOTH_ENABLE = yes
VIA_ENABLE = yes # VIA support should be enabled here due to the main() loop will be compiled first.
-SRC += usart.c ble.c
-
-OPT_DEFS += -DUART_RX1_BUFFER_SIZE=16 -DUART_TX1_BUFFER_SIZE=16
-OPT_DEFS += -DUSART1_ENABLED
+UART_DRIVER_REQUIRED = yes
+SRC += bluetooth_custom.c
diff --git a/keyboards/bioi/usart.c b/keyboards/bioi/usart.c
deleted file mode 100644
index f37845e5c63a..000000000000
--- a/keyboards/bioi/usart.c
+++ /dev/null
@@ -1,1522 +0,0 @@
-/*************************************************************************
-
- Title: Interrupt UART library with receive/transmit circular buffers
- Author: Andy Gock
- Software: AVR-GCC 4.1, AVR Libc 1.4
- Hardware: any AVR with built-in UART, tested on AT90S8515 & ATmega8 at 4 Mhz
- License: GNU General Public License
- Usage: see README.md and Doxygen manual
-
- Based on original library by Peter Fluery, Tim Sharpe, Nicholas Zambetti.
-
- https://github.com/andygock/avr-uart
-
- Updated UART library (this one) by Andy Gock
- https://github.com/andygock/avr-uart
-
- Based on updated UART library (this one) by Tim Sharpe
- http://beaststwo.org/avr-uart/index.shtml
-
- Based on original library by Peter Fluery
- http://homepage.hispeed.ch/peterfleury/avr-software.html
-
-*************************************************************************/
-
-/*************************************************************************
-
-LICENSE:
- Copyright (C) 2012 Andy Gock
- Copyright (C) 2006 Peter Fleury
-
- 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
- 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.
-
-*************************************************************************/
-
-/************************************************************************
-uart_available, uart_flush, uart1_available, and uart1_flush functions
-were adapted from the Arduino HardwareSerial.h library by Tim Sharpe on
-11 Jan 2009. The license info for HardwareSerial.h is as follows:
-
- HardwareSerial.cpp - Hardware serial library for Wiring
- Copyright (c) 2006 Nicholas Zambetti. All right reserved.
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- This library 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
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with this library; if not, write to the Free Software
- Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-
- Modified 23 November 2006 by David A. Mellis
-************************************************************************/
-
-/************************************************************************
-Changelog for modifications made by Tim Sharpe, starting with the current
- library version on his Web site as of 05/01/2009.
-
-Date Description
-=========================================================================
-05/11/2009 Changed all existing UARTx_RECEIVE_INTERRUPT and UARTx_TRANSMIT_INTERRUPT
- macros to use the "_vect" format introduced in AVR-Libc
- v1.4.0. Had to split the 3290 and 6490 out of their existing
- macro due to an inconsistency in the UART0_RECEIVE_INTERRUPT
- vector name (seems like a typo: USART_RX_vect for the 3290/6490
- vice USART0_RX_vect for the others in the macro).
- Verified all existing macro register names against the device
- header files in AVR-Libc v1.6.6 to catch any inconsistencies.
-05/12/2009 Added support for 48P, 88P, 168P, and 328P by adding them to the
- existing 48/88/168 macro.
- Added Arduino-style available() and flush() functions for both
- supported UARTs. Really wanted to keep them out of the library, so
- that it would be as close as possible to Peter Fleury's original
- library, but has scoping issues accessing internal variables from
- another program. Go C!
-05/13/2009 Changed Interrupt Service Routine label from the old "SIGNAL" to
- the "ISR" format introduced in AVR-Libc v1.4.0.
-
-************************************************************************/
-
-#include
-#include
-#include
-#include
-#include "usart.h"
-
-/*
- * constants and macros
- */
-
-/* size of RX/TX buffers */
-#define UART_RX0_BUFFER_MASK (UART_RX0_BUFFER_SIZE - 1)
-#define UART_RX1_BUFFER_MASK (UART_RX1_BUFFER_SIZE - 1)
-#define UART_RX2_BUFFER_MASK (UART_RX2_BUFFER_SIZE - 1)
-#define UART_RX3_BUFFER_MASK (UART_RX3_BUFFER_SIZE - 1)
-
-#define UART_TX0_BUFFER_MASK (UART_TX0_BUFFER_SIZE - 1)
-#define UART_TX1_BUFFER_MASK (UART_TX1_BUFFER_SIZE - 1)
-#define UART_TX2_BUFFER_MASK (UART_TX2_BUFFER_SIZE - 1)
-#define UART_TX3_BUFFER_MASK (UART_TX3_BUFFER_SIZE - 1)
-
-#if (UART_RX0_BUFFER_SIZE & UART_RX0_BUFFER_MASK)
- #error RX0 buffer size is not a power of 2
-#endif
-#if (UART_TX0_BUFFER_SIZE & UART_TX0_BUFFER_MASK)
- #error TX0 buffer size is not a power of 2
-#endif
-
-#if (UART_RX1_BUFFER_SIZE & UART_RX1_BUFFER_MASK)
- #error RX1 buffer size is not a power of 2
-#endif
-#if (UART_TX1_BUFFER_SIZE & UART_TX1_BUFFER_MASK)
- #error TX1 buffer size is not a power of 2
-#endif
-
-#if (UART_RX2_BUFFER_SIZE & UART_RX2_BUFFER_MASK)
- #error RX2 buffer size is not a power of 2
-#endif
-#if (UART_TX2_BUFFER_SIZE & UART_TX2_BUFFER_MASK)
- #error TX2 buffer size is not a power of 2
-#endif
-
-#if (UART_RX3_BUFFER_SIZE & UART_RX3_BUFFER_MASK)
- #error RX3 buffer size is not a power of 2
-#endif
-#if (UART_TX3_BUFFER_SIZE & UART_TX3_BUFFER_MASK)
- #error TX3 buffer size is not a power of 2
-#endif
-
-#if defined(__AVR_AT90S2313__) \
- || defined(__AVR_AT90S4414__) || defined(__AVR_AT90S4434__) \
- || defined(__AVR_AT90S8515__) || defined(__AVR_AT90S8535__) \
- || defined(__AVR_ATmega103__)
- /* old AVR classic or ATmega103 with one UART */
- #define AT90_UART
- #define UART0_RECEIVE_INTERRUPT UART_RX_vect
- #define UART0_TRANSMIT_INTERRUPT UART_UDRE_vect
- #define UART0_STATUS USR
- #define UART0_CONTROL UCR
- #define UART0_DATA UDR
- #define UART0_UDRIE UDRIE
-#elif defined(__AVR_AT90S2333__) || defined(__AVR_AT90S4433__)
- /* old AVR classic with one UART */
- #define AT90_UART
- #define UART0_RECEIVE_INTERRUPT UART_RX_vect
- #define UART0_TRANSMIT_INTERRUPT UART_UDRE_vect
- #define UART0_STATUS UCSRA
- #define UART0_CONTROL UCSRB
- #define UART0_DATA UDR
- #define UART0_UDRIE UDRIE
-#elif defined(__AVR_ATmega8__) || defined(__AVR_ATmega16__) || defined(__AVR_ATmega32__) \
- || defined(__AVR_ATmega323__)
- /* ATmega with one USART */
- #define ATMEGA_USART
- #define UART0_RECEIVE_INTERRUPT USART_RXC_vect
- #define UART0_TRANSMIT_INTERRUPT USART_UDRE_vect
- #define UART0_STATUS UCSRA
- #define UART0_CONTROL UCSRB
- #define UART0_DATA UDR
- #define UART0_UDRIE UDRIE
-#elif defined(__AVR_ATmega8U2__) || defined(__AVR_ATmega16U2__) || defined(__AVR_ATmega16U4__) || \
- defined(__AVR_ATmega32U2__) || defined(__AVR_ATmega32U4__) || defined(__AVR_ATmega32U6__)
- /* ATmega with one USART, but is called USART1 (untested) */
- #define ATMEGA_USART1
- #define UART1_RECEIVE_INTERRUPT USART1_RX_vect
- #define UART1_TRANSMIT_INTERRUPT USART1_UDRE_vect
- #define UART1_STATUS UCSR1A
- #define UART1_CONTROL UCSR1B
- #define UART1_DATA UDR1
- #define UART1_UDRIE UDRIE1
-#elif defined(__AVR_ATmega8515__) || defined(__AVR_ATmega8535__)
- /* ATmega with one USART */
- #define ATMEGA_USART
- #define UART0_RECEIVE_INTERRUPT USART_RX_vect
- #define UART0_TRANSMIT_INTERRUPT USART_UDRE_vect
- #define UART0_STATUS UCSRA
- #define UART0_CONTROL UCSRB
- #define UART0_DATA UDR
- #define UART0_UDRIE UDRIE
-#elif defined(__AVR_ATmega163__)
- /* ATmega163 with one UART */
- #define ATMEGA_UART
- #define UART0_RECEIVE_INTERRUPT UART_RX_vect
- #define UART0_TRANSMIT_INTERRUPT UART_UDRE_vect
- #define UART0_STATUS UCSRA
- #define UART0_CONTROL UCSRB
- #define UART0_DATA UDR
- #define UART0_UDRIE UDRIE
-#elif defined(__AVR_ATmega162__)
- /* ATmega with two USART */
- #define ATMEGA_USART0
- #define ATMEGA_USART1
- #define UART0_RECEIVE_INTERRUPT USART0_RXC_vect
- #define UART1_RECEIVE_INTERRUPT USART1_RXC_vect
- #define UART0_TRANSMIT_INTERRUPT USART0_UDRE_vect
- #define UART1_TRANSMIT_INTERRUPT USART1_UDRE_vect
- #define UART0_STATUS UCSR0A
- #define UART0_CONTROL UCSR0B
- #define UART0_DATA UDR0
- #define UART0_UDRIE UDRIE0
- #define UART1_STATUS UCSR1A
- #define UART1_CONTROL UCSR1B
- #define UART1_DATA UDR1
- #define UART1_UDRIE UDRIE1
-#elif defined(__AVR_ATmega64__) || defined(__AVR_ATmega128__)
- /* ATmega with two USART */
- #define ATMEGA_USART0
- #define ATMEGA_USART1
- #define UART0_RECEIVE_INTERRUPT USART0_RX_vect
- #define UART1_RECEIVE_INTERRUPT USART1_RX_vect
- #define UART0_TRANSMIT_INTERRUPT USART0_UDRE_vect
- #define UART1_TRANSMIT_INTERRUPT USART1_UDRE_vect
- #define UART0_STATUS UCSR0A
- #define UART0_CONTROL UCSR0B
- #define UART0_DATA UDR0
- #define UART0_UDRIE UDRIE0
- #define UART1_STATUS UCSR1A
- #define UART1_CONTROL UCSR1B
- #define UART1_DATA UDR1
- #define UART1_UDRIE UDRIE1
-#elif defined(__AVR_ATmega161__)
- /* ATmega with UART */
- #error "AVR ATmega161 currently not supported by this libaray !"
-#elif defined(__AVR_ATmega169__)
- /* ATmega with one USART */
- #define ATMEGA_USART
- #define UART0_RECEIVE_INTERRUPT USART0_RX_vect
- #define UART0_TRANSMIT_INTERRUPT USART0_UDRE_vect
- #define UART0_STATUS UCSRA
- #define UART0_CONTROL UCSRB
- #define UART0_DATA UDR
- #define UART0_UDRIE UDRIE
-#elif defined(__AVR_ATmega48__) ||defined(__AVR_ATmega88__) || defined(__AVR_ATmega168__) || \
- defined(__AVR_ATmega48P__) ||defined(__AVR_ATmega88P__) || defined(__AVR_ATmega168P__) || \
- defined(__AVR_ATmega328P__)
- /* TLS-Added 48P/88P/168P/328P */
- /* ATmega with one USART */
- #define ATMEGA_USART0
- #define UART0_RECEIVE_INTERRUPT USART_RX_vect
- #define UART0_TRANSMIT_INTERRUPT USART_UDRE_vect
- #define UART0_STATUS UCSR0A
- #define UART0_CONTROL UCSR0B
- #define UART0_DATA UDR0
- #define UART0_UDRIE UDRIE0
-#elif defined(__AVR_ATtiny2313__) || defined(__AVR_ATtiny2313A__) || defined(__AVR_ATtiny4313__)
- #define ATMEGA_USART
- #define UART0_RECEIVE_INTERRUPT USART_RX_vect
- #define UART0_TRANSMIT_INTERRUPT USART_UDRE_vect
- #define UART0_STATUS UCSRA
- #define UART0_CONTROL UCSRB
- #define UART0_DATA UDR
- #define UART0_UDRIE UDRIE
-#elif defined(__AVR_ATmega329__) ||\
- defined(__AVR_ATmega649__) ||\
- defined(__AVR_ATmega325__) ||defined(__AVR_ATmega3250__) ||\
- defined(__AVR_ATmega645__) ||defined(__AVR_ATmega6450__)
- /* ATmega with one USART */
- #define ATMEGA_USART0
- #define UART0_RECEIVE_INTERRUPT USART0_RX_vect
- #define UART0_TRANSMIT_INTERRUPT USART0_UDRE_vect
- #define UART0_STATUS UCSR0A
- #define UART0_CONTROL UCSR0B
- #define UART0_DATA UDR0
- #define UART0_UDRIE UDRIE0
-#elif defined(__AVR_ATmega3290__) ||\
- defined(__AVR_ATmega6490__)
- /* TLS-Separated these two from the previous group because of inconsistency in the USART_RX */
- /* ATmega with one USART */
- #define ATMEGA_USART0
- #define UART0_RECEIVE_INTERRUPT USART_RX_vect
- #define UART0_TRANSMIT_INTERRUPT USART0_UDRE_vect
- #define UART0_STATUS UCSR0A
- #define UART0_CONTROL UCSR0B
- #define UART0_DATA UDR0
- #define UART0_UDRIE UDRIE0
-#elif defined(__AVR_ATmega2560__) || defined(__AVR_ATmega1280__) || defined(__AVR_ATmega640__)
- /* ATmega with four USART */
- #define ATMEGA_USART0
- #define ATMEGA_USART1
- #define ATMEGA_USART2
- #define ATMEGA_USART3
- #define UART0_RECEIVE_INTERRUPT USART0_RX_vect
- #define UART1_RECEIVE_INTERRUPT USART1_RX_vect
- #define UART2_RECEIVE_INTERRUPT USART2_RX_vect
- #define UART3_RECEIVE_INTERRUPT USART3_RX_vect
- #define UART0_TRANSMIT_INTERRUPT USART0_UDRE_vect
- #define UART1_TRANSMIT_INTERRUPT USART1_UDRE_vect
- #define UART2_TRANSMIT_INTERRUPT USART2_UDRE_vect
- #define UART3_TRANSMIT_INTERRUPT USART3_UDRE_vect
- #define UART0_STATUS UCSR0A
- #define UART0_CONTROL UCSR0B
- #define UART0_DATA UDR0
- #define UART0_UDRIE UDRIE0
- #define UART1_STATUS UCSR1A
- #define UART1_CONTROL UCSR1B
- #define UART1_DATA UDR1
- #define UART1_UDRIE UDRIE1
- #define UART2_STATUS UCSR2A
- #define UART2_CONTROL UCSR2B
- #define UART2_DATA UDR2
- #define UART2_UDRIE UDRIE2
- #define UART3_STATUS UCSR3A
- #define UART3_CONTROL UCSR3B
- #define UART3_DATA UDR3
- #define UART3_UDRIE UDRIE3
-#elif defined(__AVR_ATmega644__)
- /* ATmega with one USART */
- #define ATMEGA_USART0
- #define UART0_RECEIVE_INTERRUPT USART0_RX_vect
- #define UART0_TRANSMIT_INTERRUPT USART0_UDRE_vect
- #define UART0_STATUS UCSR0A
- #define UART0_CONTROL UCSR0B
- #define UART0_DATA UDR0
- #define UART0_UDRIE UDRIE0
-#elif defined(__AVR_ATmega164P__) || defined(__AVR_ATmega324P__) || defined(__AVR_ATmega644P__) || \
- defined(__AVR_ATmega1284P__)
- /* ATmega with two USART */
- #define ATMEGA_USART0
- #define ATMEGA_USART1
- #define UART0_RECEIVE_INTERRUPT USART0_RX_vect
- #define UART1_RECEIVE_INTERRUPT USART1_RX_vect
- #define UART0_TRANSMIT_INTERRUPT USART0_UDRE_vect
- #define UART1_TRANSMIT_INTERRUPT USART1_UDRE_vect
- #define UART0_STATUS UCSR0A
- #define UART0_CONTROL UCSR0B
- #define UART0_DATA UDR0
- #define UART0_UDRIE UDRIE0
- #define UART1_STATUS UCSR1A
- #define UART1_CONTROL UCSR1B
- #define UART1_DATA UDR1
- #define UART1_UDRIE UDRIE1
-#else
- #error "no UART definition for MCU available"
-#endif
-
-/*
- * Module global variables
- */
-
-#if defined(USART0_ENABLED)
- #if defined(ATMEGA_USART) || defined(ATMEGA_USART0)
- static volatile uint8_t UART_TxBuf[UART_TX0_BUFFER_SIZE];
- static volatile uint8_t UART_RxBuf[UART_RX0_BUFFER_SIZE];
-
- #if defined(USART0_LARGE_BUFFER)
- static volatile uint16_t UART_TxHead;
- static volatile uint16_t UART_TxTail;
- static volatile uint16_t UART_RxHead;
- static volatile uint16_t UART_RxTail;
- static volatile uint8_t UART_LastRxError;
- #else
- static volatile uint8_t UART_TxHead;
- static volatile uint8_t UART_TxTail;
- static volatile uint8_t UART_RxHead;
- static volatile uint8_t UART_RxTail;
- static volatile uint8_t UART_LastRxError;
- #endif
-
- #endif
-#endif
-
-#if defined(USART1_ENABLED)
- #if defined(ATMEGA_USART1)
- static volatile uint8_t UART1_TxBuf[UART_TX1_BUFFER_SIZE];
- static volatile uint8_t UART1_RxBuf[UART_RX1_BUFFER_SIZE];
-
- #if defined(USART1_LARGE_BUFFER)
- static volatile uint16_t UART1_TxHead;
- static volatile uint16_t UART1_TxTail;
- static volatile uint16_t UART1_RxHead;
- static volatile uint16_t UART1_RxTail;
- static volatile uint8_t UART1_LastRxError;
- #else
- static volatile uint8_t UART1_TxHead;
- static volatile uint8_t UART1_TxTail;
- static volatile uint8_t UART1_RxHead;
- static volatile uint8_t UART1_RxTail;
- static volatile uint8_t UART1_LastRxError;
- #endif
- #endif
-#endif
-
-#if defined(USART2_ENABLED)
- #if defined(ATMEGA_USART2)
- static volatile uint8_t UART2_TxBuf[UART_TX2_BUFFER_SIZE];
- static volatile uint8_t UART2_RxBuf[UART_RX2_BUFFER_SIZE];
-
- #if defined(USART2_LARGE_BUFFER)
- static volatile uint16_t UART2_TxHead;
- static volatile uint16_t UART2_TxTail;
- static volatile uint16_t UART2_RxHead;
- static volatile uint16_t UART2_RxTail;
- static volatile uint8_t UART2_LastRxError;
- #else
- static volatile uint8_t UART2_TxHead;
- static volatile uint8_t UART2_TxTail;
- static volatile uint8_t UART2_RxHead;
- static volatile uint8_t UART2_RxTail;
- static volatile uint8_t UART2_LastRxError;
- #endif
- #endif
-#endif
-
-#if defined(USART3_ENABLED)
- #if defined(ATMEGA_USART3)
- static volatile uint8_t UART3_TxBuf[UART_TX3_BUFFER_SIZE];
- static volatile uint8_t UART3_RxBuf[UART_RX3_BUFFER_SIZE];
-
- #if defined(USART3_LARGE_BUFFER)
- static volatile uint16_t UART3_TxHead;
- static volatile uint16_t UART3_TxTail;
- static volatile uint16_t UART3_RxHead;
- static volatile uint16_t UART3_RxTail;
- static volatile uint8_t UART3_LastRxError;
- #else
- static volatile uint8_t UART3_TxHead;
- static volatile uint8_t UART3_TxTail;
- static volatile uint8_t UART3_RxHead;
- static volatile uint8_t UART3_RxTail;
- static volatile uint8_t UART3_LastRxError;
- #endif
-
- #endif
-#endif
-
-#if defined(USART0_ENABLED)
-
-#if defined(AT90_UART) || defined(ATMEGA_USART) || defined(ATMEGA_USART0)
-
-ISR(UART0_RECEIVE_INTERRUPT)
-/*************************************************************************
-Function: UART Receive Complete interrupt
-Purpose: called when the UART has received a character
-**************************************************************************/
-{
- uint16_t tmphead;
- uint8_t data;
- uint8_t usr;
- uint8_t lastRxError;
-
- /* read UART status register and UART data register */
- usr = UART0_STATUS;
- data = UART0_DATA;
-
- /* */
-#if defined(AT90_UART)
- lastRxError = (usr & (_BV(FE)|_BV(DOR)));
-#elif defined(ATMEGA_USART)
- lastRxError = (usr & (_BV(FE)|_BV(DOR)));
-#elif defined(ATMEGA_USART0)
- lastRxError = (usr & (_BV(FE0)|_BV(DOR0)));
-#elif defined (ATMEGA_UART)
- lastRxError = (usr & (_BV(FE)|_BV(DOR)));
-#endif
-
- /* calculate buffer index */
- tmphead = (UART_RxHead + 1) & UART_RX0_BUFFER_MASK;
-
- if (tmphead == UART_RxTail) {
- /* error: receive buffer overflow */
- lastRxError = UART_BUFFER_OVERFLOW >> 8;
- } else {
- /* store new index */
- UART_RxHead = tmphead;
- /* store received data in buffer */
- UART_RxBuf[tmphead] = data;
- }
- UART_LastRxError = lastRxError;
-}
-
-
-ISR(UART0_TRANSMIT_INTERRUPT)
-/*************************************************************************
-Function: UART Data Register Empty interrupt
-Purpose: called when the UART is ready to transmit the next byte
-**************************************************************************/
-{
- uint16_t tmptail;
-
- if (UART_TxHead != UART_TxTail) {
- /* calculate and store new buffer index */
- tmptail = (UART_TxTail + 1) & UART_TX0_BUFFER_MASK;
- UART_TxTail = tmptail;
- /* get one byte from buffer and write it to UART */
- UART0_DATA = UART_TxBuf[tmptail]; /* start transmission */
- } else {
- /* tx buffer empty, disable UDRE interrupt */
- UART0_CONTROL &= ~_BV(UART0_UDRIE);
- }
-}
-
-
-/*************************************************************************
-Function: uart0_init()
-Purpose: initialize UART and set baudrate
-Input: baudrate using macro UART_BAUD_SELECT()
-Returns: none
-**************************************************************************/
-void uart0_init(uint16_t baudrate)
-{
- ATOMIC_BLOCK(ATOMIC_FORCEON) {
- UART_TxHead = 0;
- UART_TxTail = 0;
- UART_RxHead = 0;
- UART_RxTail = 0;
- }
-
-#if defined(AT90_UART)
- /* set baud rate */
- UBRR = (uint8_t) baudrate;
-
- /* enable UART receiver and transmitter and receive complete interrupt */
- UART0_CONTROL = _BV(RXCIE)|_BV(RXEN)|_BV(TXEN);
-
-#elif defined (ATMEGA_USART)
- /* Set baud rate */
- if (baudrate & 0x8000) {
- UART0_STATUS = (1<>8);
- UBRRL = (uint8_t) baudrate;
-
- /* Enable USART receiver and transmitter and receive complete interrupt */
- UART0_CONTROL = _BV(RXCIE)|(1<>8);
- UBRR0L = (uint8_t) baudrate;
-
- /* Enable USART receiver and transmitter and receive complete interrupt */
- UART0_CONTROL = _BV(RXCIE0)|(1<>8);
- UBRR = (uint8_t) baudrate;
-
- /* Enable UART receiver and transmitter and receive complete interrupt */
- UART0_CONTROL = _BV(RXCIE)|(1<> 8;
- } else {
- /* store new index */
- UART1_RxHead = tmphead;
- /* store received data in buffer */
- UART1_RxBuf[tmphead] = data;
- }
- UART1_LastRxError = lastRxError;
-}
-
-
-ISR(UART1_TRANSMIT_INTERRUPT)
-/*************************************************************************
-Function: UART1 Data Register Empty interrupt
-Purpose: called when the UART1 is ready to transmit the next byte
-**************************************************************************/
-{
- uint16_t tmptail;
-
- if (UART1_TxHead != UART1_TxTail) {
- /* calculate and store new buffer index */
- tmptail = (UART1_TxTail + 1) & UART_TX1_BUFFER_MASK;
- UART1_TxTail = tmptail;
- /* get one byte from buffer and write it to UART */
- UART1_DATA = UART1_TxBuf[tmptail]; /* start transmission */
- } else {
- /* tx buffer empty, disable UDRE interrupt */
- UART1_CONTROL &= ~_BV(UART1_UDRIE);
- }
-}
-
-
-/*************************************************************************
-Function: uart1_init()
-Purpose: initialize UART1 and set baudrate
-Input: baudrate using macro UART_BAUD_SELECT()
-Returns: none
-**************************************************************************/
-void uart1_init(uint16_t baudrate)
-{
- ATOMIC_BLOCK(ATOMIC_FORCEON) {
- UART1_TxHead = 0;
- UART1_TxTail = 0;
- UART1_RxHead = 0;
- UART1_RxTail = 0;
- }
-
- /* Set baud rate */
- if (baudrate & 0x8000) {
- UART1_STATUS = (1<>8);
- UBRR1L = (uint8_t) baudrate;
-
- /* Enable USART receiver and transmitter and receive complete interrupt */
- UART1_CONTROL = _BV(RXCIE1)|(1<