mirror of
https://github.com/qmk/qmk_firmware.git
synced 2025-08-21 23:13:00 +00:00
Compare commits
242 Commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
eba512596a | ||
![]() |
d28d474dc0 | ||
![]() |
c0728bd189 | ||
![]() |
71f067a60e | ||
![]() |
974d3f1ffd | ||
![]() |
e6a90c8b04 | ||
![]() |
2cdc3699e1 | ||
![]() |
e0ed2c950d | ||
![]() |
4ed67d666e | ||
![]() |
1e1b469fa2 | ||
![]() |
49dcc824db | ||
![]() |
62f304a225 | ||
![]() |
d24fe4f1ca | ||
![]() |
677789df77 | ||
![]() |
1dc466d22b | ||
![]() |
993982a985 | ||
![]() |
01bc8e3b52 | ||
![]() |
dfb8a29718 | ||
![]() |
3bb1897bdc | ||
![]() |
03bacec87d | ||
![]() |
cc3f2e2865 | ||
![]() |
e524e0a397 | ||
![]() |
da40242dbc | ||
![]() |
f0f6174136 | ||
![]() |
d9785ec313 | ||
![]() |
c628408688 | ||
![]() |
3d70766327 | ||
![]() |
0bf0977c02 | ||
![]() |
fe14907039 | ||
![]() |
d72f5435fb | ||
![]() |
8cf5f72aad | ||
![]() |
6009a91514 | ||
![]() |
84e2f1ec17 | ||
![]() |
f519a9908e | ||
![]() |
f1b06d0ae7 | ||
![]() |
345a041cf5 | ||
![]() |
e9f73e5454 | ||
![]() |
f325bd6eb2 | ||
![]() |
3525a61baf | ||
![]() |
c46619d8fb | ||
![]() |
b323ab89e0 | ||
![]() |
1f633c027b | ||
![]() |
1f38221ec5 | ||
![]() |
68c3773c8e | ||
![]() |
5dfb6459df | ||
![]() |
d97d4794e0 | ||
![]() |
b48a5b573f | ||
![]() |
eb0ce0abc7 | ||
![]() |
501f3ed419 | ||
![]() |
8ea28429e9 | ||
![]() |
214528b1e7 | ||
![]() |
523c8315a2 | ||
![]() |
73235e7ca0 | ||
![]() |
72ca319bee | ||
![]() |
b5c2e5e8fd | ||
![]() |
6e931cc90b | ||
![]() |
6368a5697d | ||
![]() |
09835033da | ||
![]() |
b297f1ce8d | ||
![]() |
c81e07fef5 | ||
![]() |
1eaad6dd65 | ||
![]() |
5e46f72f75 | ||
![]() |
16d43af493 | ||
![]() |
68f321f24b | ||
![]() |
8729afece5 | ||
![]() |
5127ef1f02 | ||
![]() |
e941f04891 | ||
![]() |
11bd51441b | ||
![]() |
76e88e228b | ||
![]() |
554b937d21 | ||
![]() |
b113888ec5 | ||
![]() |
f8cbad20ab | ||
![]() |
6b2f9e3015 | ||
![]() |
d8b9825a8b | ||
![]() |
aa0e33eca0 | ||
![]() |
407e5be34d | ||
![]() |
4d96b85b6f | ||
![]() |
d877f40b70 | ||
![]() |
ebfe668fff | ||
![]() |
e71f7a1c9f | ||
![]() |
2e0f4d7e2a | ||
![]() |
83176b748a | ||
![]() |
0728200e28 | ||
![]() |
8e70c4d943 | ||
![]() |
68b58624d6 | ||
![]() |
4ae5c3a905 | ||
![]() |
4c48518a4e | ||
![]() |
135d28d2fb | ||
![]() |
fd80b2581e | ||
![]() |
beace23bca | ||
![]() |
abda419f5a | ||
![]() |
29fcd5418a | ||
![]() |
3f6de1ef54 | ||
![]() |
b1419742a5 | ||
![]() |
65d8ac4759 | ||
![]() |
8657f54f9e | ||
![]() |
466424c3c2 | ||
![]() |
efbaf68d5a | ||
![]() |
e688f2286f | ||
![]() |
ffd8ff642d | ||
![]() |
6edbd845eb | ||
![]() |
46b3245d66 | ||
![]() |
d58d7dd192 | ||
![]() |
acdcc62202 | ||
![]() |
9d10c66cf0 | ||
![]() |
6caef353a5 | ||
![]() |
c85e2a8822 | ||
![]() |
3dc5e5af38 | ||
![]() |
0500a2e0f1 | ||
![]() |
d54289db58 | ||
![]() |
95a1496ebc | ||
![]() |
06a6b23e60 | ||
![]() |
1be7485fa4 | ||
![]() |
19e2bb272e | ||
![]() |
6d9b4c7b4f | ||
![]() |
b609a07b45 | ||
![]() |
2574bc2791 | ||
![]() |
985b8cab7c | ||
![]() |
581368596e | ||
![]() |
832a6e150a | ||
![]() |
8b735d35aa | ||
![]() |
b7b82d509b | ||
![]() |
bf959d79dc | ||
![]() |
bca88177d3 | ||
![]() |
515cea4b78 | ||
![]() |
748b3ac82a | ||
![]() |
634eac82e8 | ||
![]() |
11599bea93 | ||
![]() |
115aa95788 | ||
![]() |
340fc9dce3 | ||
![]() |
db8e88aae0 | ||
![]() |
495a61ad7a | ||
![]() |
dd356f90b0 | ||
![]() |
6009e7d8b5 | ||
![]() |
3edfb93d5d | ||
![]() |
34513b4665 | ||
![]() |
3d1e7bd36f | ||
![]() |
375ef0b8c3 | ||
![]() |
f03b10b6c1 | ||
![]() |
810eafad12 | ||
![]() |
c38fe49242 | ||
![]() |
d1e10a067b | ||
![]() |
acec174fde | ||
![]() |
070240f212 | ||
![]() |
f3ac792c09 | ||
![]() |
b3de903a3d | ||
![]() |
c07543133a | ||
![]() |
2e9d091960 | ||
![]() |
13efa8290e | ||
![]() |
988715910c | ||
![]() |
8da9219c16 | ||
![]() |
d321cb3f8b | ||
![]() |
8ed9eb9c7f | ||
![]() |
1d2a9a1cdb | ||
![]() |
fcd921f3aa | ||
![]() |
e11d3d524d | ||
![]() |
c01a8b030e | ||
![]() |
b5fc6f0682 | ||
![]() |
08fdf086b7 | ||
![]() |
aab056a4a6 | ||
![]() |
565a038a3d | ||
![]() |
53e9213a22 | ||
![]() |
a68d289fa5 | ||
![]() |
4ef4347543 | ||
![]() |
028d2c91dc | ||
![]() |
9f690c94b8 | ||
![]() |
6169b47e82 | ||
![]() |
10096fc42e | ||
![]() |
5e5ee3f8de | ||
![]() |
7071900407 | ||
![]() |
6f6e28b4c7 | ||
![]() |
411b92e206 | ||
![]() |
1aa8a3b424 | ||
![]() |
0f5f6a6a75 | ||
![]() |
a038b712d0 | ||
![]() |
ca8df55858 | ||
![]() |
fda514bbd7 | ||
![]() |
c9156b50d9 | ||
![]() |
992380a5dd | ||
![]() |
b4ea0a70be | ||
![]() |
c89930ca01 | ||
![]() |
a94044c15c | ||
![]() |
457042f179 | ||
![]() |
944feb2da5 | ||
![]() |
b49c657ac1 | ||
![]() |
ac433b218d | ||
![]() |
8ee03f6a6b | ||
![]() |
0c4663a802 | ||
![]() |
5d0c0e7c12 | ||
![]() |
bea897caf1 | ||
![]() |
e85d904fe1 | ||
![]() |
12568fb5a9 | ||
![]() |
824e1cd95d | ||
![]() |
2573ed8c6b | ||
![]() |
25d9cdc88f | ||
![]() |
962b8d3814 | ||
![]() |
122cf3ad0f | ||
![]() |
5edfdeff50 | ||
![]() |
221d8fd866 | ||
![]() |
3300164065 | ||
![]() |
55843480ff | ||
![]() |
5fde2d730c | ||
![]() |
1b7b72c0e9 | ||
![]() |
bbf0f65284 | ||
![]() |
1d1d5da43f | ||
![]() |
48f4768d33 | ||
![]() |
53eb7f0774 | ||
![]() |
5544bf8524 | ||
![]() |
7ca4b61922 | ||
![]() |
b7f640ca76 | ||
![]() |
436b5394bb | ||
![]() |
cd0d2d0de5 | ||
![]() |
6a292e11d3 | ||
![]() |
3e3f93c971 | ||
![]() |
9136c122f8 | ||
![]() |
cc4b93b330 | ||
![]() |
d40d1e4024 | ||
![]() |
b2ab0af905 | ||
![]() |
d898d4a6fc | ||
![]() |
7c0cb18681 | ||
![]() |
e52b4797d3 | ||
![]() |
498d89f4b3 | ||
![]() |
d5f3f7c126 | ||
![]() |
e9ed5d7571 | ||
![]() |
806aa9bc67 | ||
![]() |
dc7081a823 | ||
![]() |
fd177582ad | ||
![]() |
dee506c096 | ||
![]() |
78b2f120e5 | ||
![]() |
ce7d3855f4 | ||
![]() |
4eebefada7 | ||
![]() |
71b52416d8 | ||
![]() |
bf324c38e3 | ||
![]() |
f40b564683 | ||
![]() |
2843e7f995 | ||
![]() |
54e2bf3ede | ||
![]() |
9453573080 | ||
![]() |
c0dcee96a8 | ||
![]() |
4e0718a3b7 | ||
![]() |
a380a26ad2 | ||
![]() |
e3211e307e | ||
![]() |
0239ce025a |
73
Makefile
73
Makefile
@@ -68,37 +68,8 @@ PATH_ELEMENTS := $(subst /, ,$(STARTING_DIR))
|
||||
# Initialize the path elements list for further processing
|
||||
$(eval $(call NEXT_PATH_ELEMENT))
|
||||
|
||||
# This function sets the KEYBOARD; KEYMAP and SUBPROJECT to the correct
|
||||
# variables depending on which directory you stand in.
|
||||
# It's really a very simple if else chain, if you squint enough,
|
||||
# but the makefile syntax makes it very verbose.
|
||||
# If we are in a subfolder of keyboards
|
||||
#
|
||||
# *** No longer needed **
|
||||
#
|
||||
# ifeq ($(CURRENT_PATH_ELEMENT),keyboards)
|
||||
# $(eval $(call NEXT_PATH_ELEMENT))
|
||||
# KEYBOARD := $(CURRENT_PATH_ELEMENT)
|
||||
# $(eval $(call NEXT_PATH_ELEMENT))
|
||||
# # If we are in a subfolder of keymaps, or in other words in a keymap
|
||||
# # folder
|
||||
# ifeq ($(CURRENT_PATH_ELEMENT),keymaps)
|
||||
# $(eval $(call NEXT_PATH_ELEMENT))
|
||||
# KEYMAP := $(CURRENT_PATH_ELEMENT)
|
||||
# # else if we are not in the keyboard folder itself
|
||||
# else ifneq ($(CURRENT_PATH_ELEMENT),)
|
||||
# # the we can assume it's a subproject, as no other folders
|
||||
# # should have make files in them
|
||||
# SUBPROJECT := $(CURRENT_PATH_ELEMENT)
|
||||
# $(eval $(call NEXT_PATH_ELEMENT))
|
||||
# # if we are inside a keymap folder of a subproject
|
||||
# ifeq ($(CURRENT_PATH_ELEMENT),keymaps)
|
||||
# $(eval $(call NEXT_PATH_ELEMENT))
|
||||
# KEYMAP := $(CURRENT_PATH_ELEMENT)
|
||||
# endif
|
||||
# endif
|
||||
# endif
|
||||
|
||||
# Phony targets to enable a few simple make commands outside the main processing below.
|
||||
.PHONY: list-keyboards
|
||||
list-keyboards:
|
||||
util/list_keyboards.sh | sort -u | tr '\n' ' '
|
||||
@@ -131,7 +102,6 @@ endif
|
||||
# Uncomment these for debugging
|
||||
# $(info Keyboard: $(KEYBOARD))
|
||||
# $(info Keymap: $(KEYMAP))
|
||||
# $(info Subproject: $(SUBPROJECT))
|
||||
|
||||
|
||||
# Set the default goal depending on where we are running make from
|
||||
@@ -189,7 +159,6 @@ endef
|
||||
# A recursive helper function for finding the longest match
|
||||
# $1 The list to be checked
|
||||
# It works by always removing the currently matched item from the list
|
||||
# and call itself recursively, until a match is found
|
||||
define TRY_TO_MATCH_RULE_FROM_LIST_HELPER2
|
||||
# Stop the recursion when the list is empty
|
||||
ifneq ($1,)
|
||||
@@ -386,23 +355,6 @@ define PARSE_ALL_KEYBOARDS
|
||||
$$(eval $$(call PARSE_ALL_IN_LIST,PARSE_KEYBOARD,$(shell util/list_keyboards.sh noci | sort -u)))
|
||||
endef
|
||||
|
||||
# $1 Subproject
|
||||
# When entering this, the keyboard and subproject are known, so now we need
|
||||
# to determine which keymaps are going to get compiled
|
||||
# define PARSE_SUBPROJECT
|
||||
|
||||
# endef
|
||||
|
||||
# If we want to parse all subprojects, but the keyboard doesn't have any,
|
||||
# then use defaultsp instead
|
||||
# define PARSE_ALL_SUBPROJECTS
|
||||
# ifeq ($$(SUBPROJECTS),)
|
||||
# $$(eval $$(call PARSE_SUBPROJECT,defaultsp))
|
||||
# else
|
||||
# $$(eval $$(call PARSE_ALL_IN_LIST,PARSE_SUBPROJECT,$$(SUBPROJECTS)))
|
||||
# endif
|
||||
# endef
|
||||
|
||||
# Prints a list of all known keymaps for the given keyboard
|
||||
define LIST_ALL_KEYMAPS
|
||||
COMMAND_true_LIST_KEYMAPS := \
|
||||
@@ -544,12 +496,12 @@ if [ $$error_occurred -gt 0 ]; then $(HANDLE_ERROR); fi;
|
||||
|
||||
endef
|
||||
|
||||
# Let's match everything, we handle all the rule parsing ourselves
|
||||
# Catch everything and parse the command line ourselves.
|
||||
.PHONY: %
|
||||
%:
|
||||
# Check if we have the CMP tool installed
|
||||
cmp $(ROOT_DIR)/Makefile $(ROOT_DIR)/Makefile >/dev/null 2>&1; if [ $$? -gt 0 ]; then printf "$(MSG_NO_CMP)"; exit 1; fi;
|
||||
# Ensure that bin/qmk works. This will be a failing check after the next develop merge on 2020 Aug 29.
|
||||
# Ensure that bin/qmk works. This will be a failing check after the next develop merge
|
||||
if ! bin/qmk hello 1> /dev/null 2>&1; then printf "$(MSG_PYTHON_MISSING)"; fi
|
||||
# Check if the submodules are dirty, and display a warning if they are
|
||||
ifndef SKIP_GIT
|
||||
@@ -580,25 +532,6 @@ endif
|
||||
$(foreach TEST,$(sort $(TESTS)),$(RUN_TEST))
|
||||
if [ -f $(ERROR_FILE) ]; then printf "$(MSG_ERRORS)" & exit 1; fi;
|
||||
|
||||
# These no longer work because of the colon system
|
||||
|
||||
# All should compile everything
|
||||
# .PHONY: all
|
||||
# all: all-keyboards test-all
|
||||
|
||||
# Define some shortcuts, mostly for compatibility with the old syntax
|
||||
# .PHONY: all-keyboards
|
||||
# all-keyboards: all\:all\:all
|
||||
|
||||
# .PHONY: all-keyboards-defaults
|
||||
# all-keyboards-defaults: all\:default
|
||||
|
||||
# .PHONY: test
|
||||
# test: test-all
|
||||
|
||||
# .PHONY: test-clean
|
||||
# test-clean: test-all-clean
|
||||
|
||||
lib/%:
|
||||
git submodule sync $?
|
||||
git submodule update --init $?
|
||||
|
@@ -20,15 +20,19 @@
|
||||
# Sets the bootloader defined in the keyboard's/keymap's rules.mk
|
||||
# Current options:
|
||||
#
|
||||
# halfkay PJRC Teensy
|
||||
# caterina Pro Micro (Sparkfun/generic)
|
||||
# atmel-dfu Atmel factory DFU
|
||||
# lufa-dfu LUFA DFU
|
||||
# qmk-dfu QMK DFU (LUFA + blinkenlight)
|
||||
# bootloadHID HIDBootFlash compatible (ATmega32A)
|
||||
# USBasp USBaspLoader (ATmega328P)
|
||||
# kiibohd Input:Club Kiibohd bootloader (only used on their boards)
|
||||
# stm32duino STM32Duino (STM32F103x8)
|
||||
# AVR:
|
||||
# halfkay PJRC Teensy
|
||||
# caterina Pro Micro (Sparkfun/generic)
|
||||
# atmel-dfu Atmel factory DFU
|
||||
# lufa-dfu LUFA DFU
|
||||
# qmk-dfu QMK DFU (LUFA + blinkenlight)
|
||||
# bootloadHID HIDBootFlash compatible (ATmega32A)
|
||||
# USBasp USBaspLoader (ATmega328P)
|
||||
# ARM:
|
||||
# kiibohd Input:Club Kiibohd bootloader (only used on their boards)
|
||||
# stm32duino STM32Duino (STM32F103x8)
|
||||
# stm32-dfu STM32 USB DFU in ROM
|
||||
# apm32-dfu APM32 USB DFU in ROM
|
||||
#
|
||||
# BOOTLOADER_SIZE can still be defined manually, but it's recommended
|
||||
# you add any possible configuration to this list
|
||||
@@ -95,6 +99,20 @@ ifdef BOOTLOADER_SIZE
|
||||
OPT_DEFS += -DBOOTLOADER_SIZE=$(strip $(BOOTLOADER_SIZE))
|
||||
endif
|
||||
|
||||
ifeq ($(strip $(BOOTLOADER)), stm32-dfu)
|
||||
OPT_DEFS += -DBOOTLOADER_STM32_DFU
|
||||
|
||||
# Options to pass to dfu-util when flashing
|
||||
DFU_ARGS ?= -d 0483:DF11 -a 0 -s 0x08000000:leave
|
||||
DFU_SUFFIX_ARGS ?= -v 0483 -p DF11
|
||||
endif
|
||||
ifeq ($(strip $(BOOTLOADER)), apm32-dfu)
|
||||
OPT_DEFS += -DBOOTLOADER_APM32_DFU
|
||||
|
||||
# Options to pass to dfu-util when flashing
|
||||
DFU_ARGS ?= -d 314B:0106 -a 0 -s 0x08000000:leave
|
||||
DFU_SUFFIX_ARGS ?= -v 314B -p 0106
|
||||
endif
|
||||
ifeq ($(strip $(BOOTLOADER)), kiibohd)
|
||||
OPT_DEFS += -DBOOTLOADER_KIIBOHD
|
||||
ifeq ($(strip $(MCU_ORIG)), MK20DX128)
|
||||
@@ -104,10 +122,10 @@ ifeq ($(strip $(BOOTLOADER)), kiibohd)
|
||||
MCU_LDSCRIPT = MK20DX256BLDR8
|
||||
endif
|
||||
|
||||
# Options to pass to dfu-util when flashing
|
||||
DFU_ARGS = -d 1C11:B007
|
||||
DFU_SUFFIX_ARGS = -v 1C11 -p B007
|
||||
endif
|
||||
|
||||
ifeq ($(strip $(BOOTLOADER)), stm32duino)
|
||||
OPT_DEFS += -DBOOTLOADER_STM32DUINO
|
||||
MCU_LDSCRIPT = STM32F103x8_stm32duino_bootloader
|
||||
@@ -115,6 +133,7 @@ ifeq ($(strip $(BOOTLOADER)), stm32duino)
|
||||
# STM32F103 does NOT have an USB bootloader in ROM (only serial), so setting anything here does not make much sense
|
||||
STM32_BOOTLOADER_ADDRESS = 0x80000000
|
||||
|
||||
DFU_ARGS = -d 1EAF:0003 -a2 -R
|
||||
# Options to pass to dfu-util when flashing
|
||||
DFU_ARGS = -d 1EAF:0003 -a 2 -R
|
||||
DFU_SUFFIX_ARGS = -v 1EAF -p 0003
|
||||
endif
|
||||
|
@@ -30,4 +30,4 @@ $(TEST)_SRC += $(patsubst $(ROOTDIR)/%,%,$(wildcard $(TEST_PATH)/*.cpp))
|
||||
|
||||
$(TEST)_DEFS=$(TMK_COMMON_DEFS) $(OPT_DEFS)
|
||||
$(TEST)_CONFIG=$(TEST_PATH)/config.h
|
||||
VPATH+=$(TOP_DIR)/tests/test_common
|
||||
VPATH+=$(TOP_DIR)/tests/test_common
|
||||
|
@@ -368,6 +368,7 @@ endif
|
||||
|
||||
build: elf cpfirmware
|
||||
check-size: build
|
||||
check-md5: build
|
||||
objs-size: build
|
||||
|
||||
include show_options.mk
|
||||
|
@@ -17,7 +17,7 @@ OUTPUTS := $(TEST_OBJ)/$(TEST) $(GTEST_OUTPUT)
|
||||
GTEST_INC := \
|
||||
$(LIB_PATH)/googletest/googletest/include\
|
||||
$(LIB_PATH)/googletest/googlemock/include\
|
||||
|
||||
|
||||
GTEST_INTERNAL_INC :=\
|
||||
$(LIB_PATH)/googletest/googletest\
|
||||
$(LIB_PATH)/googletest/googlemock
|
||||
@@ -27,7 +27,7 @@ $(GTEST_OUTPUT)_SRC :=\
|
||||
googletest/src/gtest_main.cc\
|
||||
googlemock/src/gmock-all.cc
|
||||
|
||||
$(GTEST_OUTPUT)_DEFS :=
|
||||
$(GTEST_OUTPUT)_DEFS :=
|
||||
$(GTEST_OUTPUT)_INC := $(GTEST_INC) $(GTEST_INTERNAL_INC)
|
||||
|
||||
LDFLAGS += -lstdc++ -lpthread -shared-libgcc
|
||||
@@ -66,4 +66,3 @@ include $(TMK_PATH)/rules.mk
|
||||
|
||||
$(shell mkdir -p $(BUILD_DIR)/test 2>/dev/null)
|
||||
$(shell mkdir -p $(TEST_OBJ) 2>/dev/null)
|
||||
|
||||
|
@@ -50,4 +50,3 @@ This document marks the inaugural Breaking Change merge. A list of changes follo
|
||||
* `KC_DELT` was a redundant, undocumented alias for `KC_DELETE`
|
||||
* It has been removed and all its uses replaced with the more common `KC_DEL` alias
|
||||
* Around 90 keymaps (mostly for ErgoDox boards) have been modified as a result
|
||||
|
||||
|
@@ -24,7 +24,7 @@ Totally new to QMK? There are two ways to get started:
|
||||
|
||||
## Make It Yours
|
||||
|
||||
QMK has lots of [features](features.md) to explore, and a good deal of reference documentation to dig through. Most features are taken advantage of by modifying your [keymap](keymap.md), and changing the [keycodes](keycodes.md).
|
||||
QMK has lots of features to explore, and a good deal of reference documentation to dig through. Most features are taken advantage of by modifying your [keymap](keymap.md), and changing the [keycodes](keycodes.md).
|
||||
|
||||
## Need help?
|
||||
|
||||
|
@@ -11,13 +11,13 @@ This command is directory aware. It will automatically fill in KEYBOARD and/or K
|
||||
**Usage for Configurator Exports**:
|
||||
|
||||
```
|
||||
qmk compile <configuratorExport.json>
|
||||
qmk compile [-c] <configuratorExport.json>
|
||||
```
|
||||
|
||||
**Usage for Keymaps**:
|
||||
|
||||
```
|
||||
qmk compile -kb <keyboard_name> -km <keymap_name>
|
||||
qmk compile [-c] [-e <var>=<value>] -kb <keyboard_name> -km <keymap_name>
|
||||
```
|
||||
|
||||
**Usage in Keyboard Directory**:
|
||||
@@ -82,13 +82,13 @@ This command is directory aware. It will automatically fill in KEYBOARD and/or K
|
||||
**Usage for Configurator Exports**:
|
||||
|
||||
```
|
||||
qmk flash <configuratorExport.json> -bl <bootloader>
|
||||
qmk flash [-bl <bootloader>] [-c] [-e <var>=<value>] <configuratorExport.json>
|
||||
```
|
||||
|
||||
**Usage for Keymaps**:
|
||||
|
||||
```
|
||||
qmk flash -kb <keyboard_name> -km <keymap_name> -bl <bootloader>
|
||||
qmk flash -kb <keyboard_name> -km <keymap_name> [-bl <bootloader>] [-c] [-e <var>=<value>]
|
||||
```
|
||||
|
||||
**Listing the Bootloaders**
|
||||
|
@@ -14,16 +14,11 @@ Some keyboards may have specific instructions for entering the bootloader. For e
|
||||
To put a device in bootloader mode with USBaspLoader, tap the `RESET` button while holding down the `BOOT` button.
|
||||
Alternatively, hold `BOOT` while inserting the USB cable.
|
||||
|
||||
Zadig will automatically detect the bootloader device. You may sometimes need to check **Options → List All Devices**.
|
||||
|
||||
- For keyboards with Atmel AVR MCUs, the bootloader will be named something similar to `ATm32U4DFU`, and have a Vendor ID of `03EB`.
|
||||
- USBasp bootloaders will appear as `USBasp`, with a VID/PID of `16C0:05DC`.
|
||||
- AVR keyboards flashed with the QMK-DFU bootloader will be named `<keyboard name> Bootloader` and will also have the VID `03EB`.
|
||||
- For most ARM keyboards, it will be called `STM32 BOOTLOADER`, and have a VID/PID of `0483:DF11`.
|
||||
Zadig should automatically detect the bootloader device, but you may sometimes need to check **Options → List All Devices** and select the device from the dropdown instead.
|
||||
|
||||
!> If Zadig lists one or more devices with the `HidUsb` driver, your keyboard is probably not in bootloader mode. The arrow will be colored orange and you will be asked to confirm modifying a system driver. **Do not** proceed if this is the case!
|
||||
|
||||
If the arrow appears green, select the driver, and click **Install Driver**. The `libusb-win32` driver will usually work for AVR, and `WinUSB` for ARM, but if you still cannot flash the board, try installing a different driver from the list. USBAspLoader devices must use the `libusbK` driver.
|
||||
If the arrow appears green, select the driver, and click **Install Driver**. See the [list of known bootloaders](#list-of-known-bootloaders) for the correct driver to install.
|
||||
|
||||

|
||||
|
||||
@@ -43,6 +38,40 @@ Right-click it and hit **Uninstall device**. Make sure to tick **Delete the driv
|
||||
|
||||

|
||||
|
||||
Click **Action → Scan for hardware changes**. At this point, you should be able to type again. Double check in Zadig that the keyboard device(s) are using the `HidUsb` driver. If so, you're all done, and your board should be functional again!
|
||||
Click **Action → Scan for hardware changes**. At this point, you should be able to type again. Double check in Zadig that the keyboard device(s) are using the `HidUsb` driver. If so, you're all done, and your board should be functional again! Otherwise, repeat the process until Zadig reports the correct driver.
|
||||
|
||||
?> A full reboot of your computer may sometimes be necessary at this point, to get Windows to pick up the new driver.
|
||||
|
||||
## List of Known Bootloaders
|
||||
|
||||
This is a list of known bootloader devices and their USB vendor and product IDs, as well as the correct driver to assign for flashing with QMK. Note that the usbser and HidUsb drivers are built in to Windows, and cannot be assigned with Zadig - if your device has an incorrect driver, you must use the Device Manager to uninstall it as described in the previous section.
|
||||
|
||||
The device name here is the name that appears in Zadig, and may not be what the Device Manager or QMK Toolbox displays.
|
||||
|
||||
|Bootloader |Device Name |VID/PID |Driver |
|
||||
|-------------|------------------------------|--------------|-------|
|
||||
|`atmel-dfu` |ATmega16u2 DFU |`03EB:2FEF` |libusb0|
|
||||
|`atmel-dfu` |ATmega32U2 DFU |`03EB:2FF0` |libusb0|
|
||||
|`atmel-dfu` |ATm16U4 DFU V1.0.2 |`03EB:2FF3` |libusb0|
|
||||
|`atmel-dfu` |ATm32U4DFU |`03EB:2FF4` |libusb0|
|
||||
|`atmel-dfu` |*none* (AT90USB64) |`03EB:2FF9` |libusb0|
|
||||
|`atmel-dfu` |AT90USB128 DFU |`03EB:2FFB` |libusb0|
|
||||
|`qmk-dfu` |(keyboard name) Bootloader |As `atmel-dfu`|libusb0|
|
||||
|`halfkay` |*none* |`16C0:0478` |HidUsb |
|
||||
|`caterina` |Pro Micro 3.3V |`1B4F:9203` |usbser |
|
||||
|`caterina` |Pro Micro 5V |`1B4F:9205` |usbser |
|
||||
|`caterina` |LilyPadUSB |`1B4F:9207` |usbser |
|
||||
|`caterina` |Pololu A-Star 32U4 Bootloader |`1FFB:0101` |usbser |
|
||||
|`caterina` |Arduino Leonardo |`2341:0036` |usbser |
|
||||
|`caterina` |Arduino Micro |`2341:0037` |usbser |
|
||||
|`caterina` |Adafruit Feather 32u4 |`239A:000C` |usbser |
|
||||
|`caterina` |Adafruit ItsyBitsy 32u4 3V |`239A:000D` |usbser |
|
||||
|`caterina` |Adafruit ItsyBitsy 32u4 5V |`239A:000E` |usbser |
|
||||
|`caterina` |Arduino Leonardo |`2A03:0036` |usbser |
|
||||
|`caterina` |Arduino Micro |`2A03:0037` |usbser |
|
||||
|`bootloadHID`|HIDBoot |`16C0:05DF` |HidUsb |
|
||||
|`USBasp` |USBasp |`16C0:05DC` |libusbK|
|
||||
|`apm32-dfu` |APM32 DFU ISP Mode |`314B:0106` |WinUSB |
|
||||
|`stm32-dfu` |STM32 BOOTLOADER |`0483:DF11` |WinUSB |
|
||||
|`kiibohd` |Kiibohd DFU Bootloader |`1C11:B007` |WinUSB |
|
||||
|`stm32duino` |Maple 003 |`1EAF:0003` |WinUSB |
|
||||
|
@@ -33,4 +33,3 @@ Soporte para hasta 2 controladores. Cada controlador implementa 2 matrices charl
|
||||
## IS31FL3733
|
||||
|
||||
Soporte para hasta un solo controlador con espacio para expansión. Cada controlador puede controlar 192 LEDs individuales o 64 LEDs RGB. Para obtener más información sobre cómo configurar el controlador, consulta la página de [Matriz RGB](feature_rgb_matrix.md).
|
||||
|
||||
|
@@ -148,4 +148,3 @@ The following old names for existing algorithms will continue to be supported, h
|
||||
* eager_pk - old name for sym_eager_pk
|
||||
* sym_pk - old name for sym_defer_pk
|
||||
* eager_pr - old name for sym_eager_pr
|
||||
|
||||
|
@@ -209,7 +209,7 @@ SEND_STRING(".."SS_TAP(X_END));
|
||||
|
||||
There are some functions you may find useful in macro-writing. Keep in mind that while you can write some fairly advanced code within a macro, if your functionality gets too complex you may want to define a custom keycode instead. Macros are meant to be simple.
|
||||
|
||||
?> You can also use the functions described in [Useful function](ref_functions.md) for additional functionality. For example `reset_keyboard()` allows you to reset the keyboard as part of a macro.
|
||||
?> You can also use the functions described in [Useful functions](ref_functions.md) for additional functionality. For example `reset_keyboard()` allows you to reset the keyboard as part of a macro.
|
||||
|
||||
### `record->event.pressed`
|
||||
|
||||
|
@@ -29,7 +29,7 @@ void raw_hid_receive(uint8_t *data, uint8_t length) {
|
||||
}
|
||||
```
|
||||
|
||||
`raw_hid_receive` can receive variable size packets from host with maximum length `RAW_EPSIZE`. `raw_hid_send` on the other hand can send packets to host of exactly `RAW_EPSIZE` length, therefore it should be used with data of length `RAW_EPSIZE`.
|
||||
These two functions send and receive packets of length `RAW_EPSIZE` bytes to and from the host (32 on LUFA/ChibiOS/V-USB, 64 on ATSAM).
|
||||
|
||||
Make sure to flash raw enabled firmware before proceeding with working on the host side.
|
||||
|
||||
|
@@ -296,6 +296,19 @@ You can disable a single effect by defining `DISABLE_[EFFECT_NAME]` in your `con
|
||||
|`#define DISABLE_RGB_MATRIX_SOLID_SPLASH` |Disables `RGB_MATRIX_SOLID_SPLASH` |
|
||||
|`#define DISABLE_RGB_MATRIX_SOLID_MULTISPLASH` |Disables `RGB_MATRIX_SOLID_MULTISPLASH` |
|
||||
|
||||
### RGB Matrix Effect Typing Heatmap :id=rgb-matrix-effect-typing-heatmap
|
||||
|
||||
This effect will color the RGB matrix according to a heatmap of recently pressed
|
||||
keys. Whenever a key is pressed its "temperature" increases as well as that of
|
||||
its neighboring keys. The temperature of each key is then decreased
|
||||
automatically every 25 milliseconds by default.
|
||||
|
||||
In order to change the delay of temperature decrease define
|
||||
`RGB_MATRIX_TYPING_HEATMAP_DECREASE_DELAY_MS`:
|
||||
|
||||
```c
|
||||
#define RGB_MATRIX_TYPING_HEATMAP_DECREASE_DELAY_MS 50
|
||||
```
|
||||
|
||||
## Custom RGB Matrix Effects :id=custom-rgb-matrix-effects
|
||||
|
||||
@@ -306,6 +319,12 @@ To declare new effects, create a new `rgb_matrix_user/kb.inc` that looks somethi
|
||||
`rgb_matrix_user.inc` should go in the root of the keymap directory.
|
||||
`rgb_matrix_kb.inc` should go in the root of the keyboard directory.
|
||||
|
||||
To use custom effects in your code, simply prepend `RGB_MATRIX_CUSTOM_` to the effect name specified in `RGB_MATRIX_EFFECT()`. For example, an effect declared as `RGB_MATRIX_EFFECT(my_cool_effect)` would be referenced with:
|
||||
|
||||
```c
|
||||
rgb_matrix_mode(RGB_MATRIX_CUSTOM_my_cool_effect);
|
||||
```
|
||||
|
||||
```c
|
||||
// !!! DO NOT ADD #pragma once !!! //
|
||||
|
||||
|
@@ -187,6 +187,8 @@ const uint8_t RGBLED_GRADIENT_RANGES[] PROGMEM = {255, 170, 127, 85, 64};
|
||||
|
||||
## Lighting Layers
|
||||
|
||||
?> **Note:** Lighting Layers is an RGB Light feature, it will not work for RGB Matrix. See [RGB Matrix Indicators](feature_rgb_matrix.md?indicators) for details on how to do so.
|
||||
|
||||
By including `#define RGBLIGHT_LAYERS` in your `config.h` file you can enable lighting layers. These make
|
||||
it easy to use your underglow LEDs as status indicators to show which keyboard layer is currently active, or the state of caps lock, all without disrupting any animations. [Here's a video](https://youtu.be/uLGE1epbmdY) showing an example of what you can do.
|
||||
|
||||
@@ -194,7 +196,7 @@ it easy to use your underglow LEDs as status indicators to show which keyboard l
|
||||
|
||||
By default, 8 layers are possible. This can be expanded to as many as 32 by overriding the definition of `RGBLIGHT_MAX_LAYERS` in `config.h` (e.g. `#define RGBLIGHT_MAX_LAYERS 32`). Please note, if you use a split keyboard, you will need to flash both sides of the split after changing this. Also, increasing the maximum will increase the firmware size, and will slow sync on split keyboards.
|
||||
|
||||
To define a layer, we modify `keymap.c` to list out LED ranges and the colors we want to overlay on them using an array of `rgblight_segment_t` using the `RGBLIGHT_LAYER_SEGMENTS` macro. We can define multiple layers and enable/disable them independently:
|
||||
To define a layer, we modify `keymap.c` to list the LED ranges and the colors we want to overlay on them using an array of `rgblight_segment_t` using the `RGBLIGHT_LAYER_SEGMENTS` macro. We can define multiple layers and enable/disable them independently:
|
||||
|
||||
```c
|
||||
// Light LEDs 6 to 9 and 12 to 15 red when caps lock is active. Hard to ignore!
|
||||
@@ -210,6 +212,10 @@ const rgblight_segment_t PROGMEM my_layer1_layer[] = RGBLIGHT_LAYER_SEGMENTS(
|
||||
const rgblight_segment_t PROGMEM my_layer2_layer[] = RGBLIGHT_LAYER_SEGMENTS(
|
||||
{11, 2, HSV_PURPLE}
|
||||
);
|
||||
// Light LEDs 13 & 14 in green when keyboard layer 3 is active
|
||||
const rgblight_segment_t PROGMEM my_layer3_layer[] = RGBLIGHT_LAYER_SEGMENTS(
|
||||
{13, 2, HSV_GREEN}
|
||||
);
|
||||
// etc..
|
||||
```
|
||||
|
||||
@@ -220,7 +226,8 @@ We combine these layers into an array using the `RGBLIGHT_LAYERS_LIST` macro, an
|
||||
const rgblight_segment_t* const PROGMEM my_rgb_layers[] = RGBLIGHT_LAYERS_LIST(
|
||||
my_capslock_layer,
|
||||
my_layer1_layer, // Overrides caps lock layer
|
||||
my_layer2_layer // Overrides other layers
|
||||
my_layer2_layer, // Overrides other layers
|
||||
my_layer3_layer // Overrides other layers
|
||||
);
|
||||
|
||||
void keyboard_post_init_user(void) {
|
||||
@@ -236,17 +243,21 @@ Everything above just configured the definition of each lighting layer.
|
||||
We can now enable and disable the lighting layers whenever the state of the keyboard changes:
|
||||
|
||||
```c
|
||||
layer_state_t layer_state_set_user(layer_state_t state) {
|
||||
// Both layers will light up if both kb layers are active
|
||||
rgblight_set_layer_state(1, layer_state_cmp(state, 1));
|
||||
rgblight_set_layer_state(2, layer_state_cmp(state, 2));
|
||||
return state;
|
||||
}
|
||||
|
||||
bool led_update_user(led_t led_state) {
|
||||
rgblight_set_layer_state(0, led_state.caps_lock);
|
||||
return true;
|
||||
}
|
||||
|
||||
layer_state_t default_layer_state_set_user(layer_state_t state) {
|
||||
rgblight_set_layer_state(1, layer_state_cmp(state, _DVORAK));
|
||||
return state;
|
||||
}
|
||||
|
||||
layer_state_t layer_state_set_user(layer_state_t state) {
|
||||
rgblight_set_layer_state(2, layer_state_cmp(state, _FN));
|
||||
rgblight_set_layer_state(3, layer_state_cmp(state, _ADJUST));
|
||||
return state;
|
||||
}
|
||||
```
|
||||
|
||||
### Lighting layer blink :id=lighting-layer-blink
|
||||
@@ -368,14 +379,14 @@ rgblight_sethsv(HSV_GREEN, 2); // led 2
|
||||
|`rgblight_increase_hue_noeeprom()` |Increase the hue for effect range LEDs. This wraps around at maximum hue (not written to EEPROM) |
|
||||
|`rgblight_decrease_hue()` |Decrease the hue for effect range LEDs. This wraps around at minimum hue |
|
||||
|`rgblight_decrease_hue_noeeprom()` |Decrease the hue for effect range LEDs. This wraps around at minimum hue (not written to EEPROM) |
|
||||
|`rgblight_increase_sat()` |Increase the saturation for effect range LEDs. This wraps around at maximum saturation |
|
||||
|`rgblight_increase_sat_noeeprom()` |Increase the saturation for effect range LEDs. This wraps around at maximum saturation (not written to EEPROM) |
|
||||
|`rgblight_decrease_sat()` |Decrease the saturation for effect range LEDs. This wraps around at minimum saturation |
|
||||
|`rgblight_decrease_sat_noeeprom()` |Decrease the saturation for effect range LEDs. This wraps around at minimum saturation (not written to EEPROM) |
|
||||
|`rgblight_increase_val()` |Increase the value for effect range LEDs. This wraps around at maximum value |
|
||||
|`rgblight_increase_val_noeeprom()` |Increase the value for effect range LEDs. This wraps around at maximum value (not written to EEPROM) |
|
||||
|`rgblight_decrease_val()` |Decrease the value for effect range LEDs. This wraps around at minimum value |
|
||||
|`rgblight_decrease_val_noeeprom()` |Decrease the value for effect range LEDs. This wraps around at minimum value (not written to EEPROM) |
|
||||
|`rgblight_increase_sat()` |Increase the saturation for effect range LEDs. This stops at maximum saturation |
|
||||
|`rgblight_increase_sat_noeeprom()` |Increase the saturation for effect range LEDs. This stops at maximum saturation (not written to EEPROM) |
|
||||
|`rgblight_decrease_sat()` |Decrease the saturation for effect range LEDs. This stops at minimum saturation |
|
||||
|`rgblight_decrease_sat_noeeprom()` |Decrease the saturation for effect range LEDs. This stops at minimum saturation (not written to EEPROM) |
|
||||
|`rgblight_increase_val()` |Increase the value for effect range LEDs. This stops at maximum value |
|
||||
|`rgblight_increase_val_noeeprom()` |Increase the value for effect range LEDs. This stops at maximum value (not written to EEPROM) |
|
||||
|`rgblight_decrease_val()` |Decrease the value for effect range LEDs. This stops at minimum value |
|
||||
|`rgblight_decrease_val_noeeprom()` |Decrease the value for effect range LEDs. This stops at minimum value (not written to EEPROM) |
|
||||
|`rgblight_sethsv(h, s, v)` |Set effect range LEDs to the given HSV value where `h`/`s`/`v` are between 0 and 255 |
|
||||
|`rgblight_sethsv_noeeprom(h, s, v)` |Set effect range LEDs to the given HSV value where `h`/`s`/`v` are between 0 and 255 (not written to EEPROM) |
|
||||
|
||||
|
@@ -85,4 +85,3 @@ While the tempo defines the absolute speed at which the sequencer goes through t
|
||||
|`void sequencer_activate_track(uint8_t track);` |Activate the `track` |
|
||||
|`void sequencer_deactivate_track(uint8_t track);` |Deactivate the `track` |
|
||||
|`void sequencer_toggle_single_active_track(uint8_t track);` |Set `track` as the only active track or deactivate all |
|
||||
|
||||
|
@@ -129,4 +129,3 @@ As defined in `keymap_steno.h`.
|
||||
|`STN_RES1`||(GeminiPR only)|
|
||||
|`STN_RES2`||(GeminiPR only)|
|
||||
|`STN_PWR`||(GeminiPR only)|
|
||||
|
||||
|
@@ -87,7 +87,7 @@ const qk_ucis_symbol_t ucis_symbol_table[] = UCIS_TABLE(
|
||||
UCIS_SYM("poop", 0x1F4A9), // 💩
|
||||
UCIS_SYM("rofl", 0x1F923), // 🤣
|
||||
UCIS_SYM("cuba", 0x1F1E8, 0x1F1FA), // 🇨🇺
|
||||
UCIS_SYM("look", 0x0CA0, 0x005F, 0x0CA0), // ಠ_ಠ
|
||||
UCIS_SYM("look", 0x0CA0, 0x005F, 0x0CA0) // ಠ_ಠ
|
||||
);
|
||||
```
|
||||
|
||||
|
239
docs/flashing.md
239
docs/flashing.md
@@ -1,242 +1,251 @@
|
||||
# Flashing Instructions and Bootloader Information
|
||||
|
||||
There are quite a few different types of bootloaders that keyboards use, and just about all of them use a different flashing method. Luckily, projects like the [QMK Toolbox](https://github.com/qmk/qmk_toolbox/releases) aim to be compatible with all the different types without having to think about it much, but this article will describe the different types of bootloaders, and available methods for flashing them.
|
||||
There are quite a few different types of bootloaders that keyboards use, and almost all of them use their own flashing method and tools. Luckily, projects like the [QMK Toolbox](https://github.com/qmk/qmk_toolbox/releases) aim to support as many of them as possible, but this article will describe the different types of bootloaders, and available methods for flashing them.
|
||||
|
||||
If you have a bootloader selected with the `BOOTLOADER` variable in your `rules.mk`, QMK will automatically calculate if your .hex file is the right size to be flashed to the device, and output the total size in bytes (along with the max).
|
||||
For AVR-based keyboards, QMK will automatically calculate if your `.hex` file is the right size to be flashed to the device based on the `BOOTLOADER` value set in `rules.mk`, and output the total size in bytes (along with the max).
|
||||
|
||||
## DFU
|
||||
You will also be able to use the CLI to flash your keyboard, by running:
|
||||
```
|
||||
$ qmk flash -kb <keyboard> -km <keymap>
|
||||
```
|
||||
See the [`qmk flash`](cli_commands.md#qmk-flash) documentation for more information.
|
||||
|
||||
Atmel's DFU bootloader comes on all atmega32u4 chips by default, and is used by many keyboards that have their own ICs on their PCBs (Older OLKB boards, Clueboards). Some keyboards may also use LUFA's DFU bootloader (or QMK's fork) (Newer OLKB boards) that adds in additional features specific to that hardware.
|
||||
## Atmel DFU
|
||||
|
||||
To ensure compatibility with the DFU bootloader, make sure this block is present your `rules.mk` (optionally with `lufa-dfu` or `qmk-dfu` instead):
|
||||
Atmel's DFU bootloader comes on all USB AVRs by default (except for 16/32U4RC), and is used by many keyboards that have their own ICs on their PCBs (older OLKB boards, Clueboards). Some keyboards may also use LUFA's DFU bootloader, or QMK's fork of it (newer OLKB boards), that adds in additional features specific to that hardware.
|
||||
|
||||
To ensure compatibility with the DFU bootloader, make sure this block is present in your `rules.mk` (optionally with `lufa-dfu` or `qmk-dfu` instead):
|
||||
|
||||
```make
|
||||
# Bootloader selection
|
||||
# Teensy halfkay
|
||||
# Pro Micro caterina
|
||||
# Atmel DFU atmel-dfu
|
||||
# LUFA DFU lufa-dfu
|
||||
# QMK DFU qmk-dfu
|
||||
# ATmega32A bootloadHID
|
||||
# ATmega328P USBasp
|
||||
BOOTLOADER = atmel-dfu
|
||||
```
|
||||
|
||||
Compatible flashers:
|
||||
|
||||
* [QMK Toolbox](https://github.com/qmk/qmk_toolbox/releases) (recommended GUI)
|
||||
* [dfu-programmer](https://github.com/dfu-programmer/dfu-programmer) / `:dfu` in QMK (recommended command line)
|
||||
* [dfu-programmer](https://github.com/dfu-programmer/dfu-programmer) / `:dfu` target in QMK (recommended command line)
|
||||
|
||||
Flashing sequence:
|
||||
|
||||
1. Press the `RESET` keycode, or tap the RESET button (or short RST to GND).
|
||||
1. Enter the bootloader using any of the following methods:
|
||||
* Press the `RESET` keycode
|
||||
* Press the `RESET` button on the PCB if available
|
||||
* Short RST to GND quickly
|
||||
2. Wait for the OS to detect the device
|
||||
3. Erase the memory (may be done automatically)
|
||||
3. Erase the flash memory (will be done automatically if using the Toolbox or CLI/`make` command)
|
||||
4. Flash a .hex file
|
||||
5. Reset the device into application mode (may be done automatically)
|
||||
|
||||
or:
|
||||
|
||||
make <keyboard>:<keymap>:dfu
|
||||
5. Reset the device into application mode (will be done automatically as above)
|
||||
|
||||
### QMK DFU
|
||||
|
||||
QMK has a fork of the LUFA DFU bootloader that allows for a simple matrix scan for exiting the bootloader and returning to the application, as well as flashing an LED/making a ticking noise with a speaker when things are happening. To enable these features, use this block in your `config.h` (The key that exits the bootloader needs to be hooked-up to the INPUT and OUTPUT defined here):
|
||||
QMK maintains [a fork of the LUFA DFU bootloader](https://github.com/qmk/lufa/tree/master/Bootloaders/DFU) that additionally performs a simple matrix scan for exiting the bootloader and returning to the application, as well as flashing an LED/making a ticking noise with a speaker when things are happening. To enable these features, add the following defines to your `config.h`:
|
||||
|
||||
#define QMK_ESC_OUTPUT F1 // usually COL
|
||||
#define QMK_ESC_INPUT D5 // usually ROW
|
||||
#define QMK_LED E6
|
||||
#define QMK_SPEAKER C6
|
||||
```c
|
||||
#define QMK_ESC_OUTPUT F1 // COL pin if COL2ROW
|
||||
#define QMK_ESC_INPUT D5 // ROW pin if COL2ROW
|
||||
// Optional:
|
||||
//#define QMK_LED E6
|
||||
//#define QMK_SPEAKER C6
|
||||
```
|
||||
Currently we do not recommend making `QMK_ESC` the same key as the one designated for [Bootmagic Lite](feature_bootmagic.md#bootmagic-lite), as holding it down will cause the MCU to loop back and forth between entering and exiting the bootloader.
|
||||
|
||||
The Manufacturer and Product names are automatically pulled from your `config.h`, and "Bootloader" is added to the product.
|
||||
The manufacturer and product strings are automatically pulled from `config.h`, with " Bootloader" appended to the product string.
|
||||
|
||||
To generate this bootloader, use the `bootloader` target, eg `make planck/rev4:default:bootloader`.
|
||||
To generate this bootloader, use the `bootloader` target, eg. `make planck/rev4:default:bootloader`. To generate a production-ready .hex file (combining QMK and the bootloader), use the `production` target, eg. `make planck/rev4:default:production`.
|
||||
|
||||
To generate a production-ready .hex file (containing the application and the bootloader), use the `production` target, eg `make planck/rev4:default:production`.
|
||||
### `make` Targets
|
||||
|
||||
### DFU commands
|
||||
|
||||
There are a number of DFU commands that you can use to flash firmware to a DFU device:
|
||||
|
||||
* `:dfu` - This is the normal option and waits until a DFU device is available, and then flashes the firmware. This will check every 5 seconds, to see if a DFU device has appeared.
|
||||
* `:dfu-ee` - This flashes an `eep` file instead of the normal hex. This is uncommon.
|
||||
* `:dfu-split-left` - This flashes the normal firmware, just like the default option (`:dfu`). However, this also flashes the "Left Side" EEPROM file for split keyboards. _This is ideal for Elite C based split keyboards._
|
||||
* `:dfu-split-right` - This flashes the normal firmware, just like the default option (`:dfu`). However, this also flashes the "Right Side" EEPROM file for split keyboards. _This is ideal for Elite C based split keyboards._
|
||||
* `:dfu`: Checks every 5 seconds until a DFU device is available, and then flashes the firmware.
|
||||
* `:dfu-split-left` and `:dfu-split-right`: Flashes the firmware as with `:dfu`, but also sets the handedness setting in EEPROM. This is ideal for Elite-C-based split keyboards.
|
||||
|
||||
## Caterina
|
||||
|
||||
Arduino boards and their clones use the [Caterina bootloader](https://github.com/arduino/ArduinoCore-avr/tree/master/bootloaders/caterina) (any keyboard built with a Pro Micro, or clone), and uses the avr109 protocol to communicate through virtual serial. Bootloaders like [A-Star](https://www.pololu.com/docs/0J61/9) are based on Caterina.
|
||||
Arduino boards and their clones use the [Caterina bootloader](https://github.com/arduino/ArduinoCore-avr/tree/master/bootloaders/caterina) or a variant of it (any keyboard built with a Pro Micro or clone, and the Pololu A-Star), and uses the AVR109 protocol to communicate through virtual serial.
|
||||
|
||||
To ensure compatibility with the Caterina bootloader, make sure this block is present your `rules.mk`:
|
||||
To ensure compatibility with the Caterina bootloader, make sure this block is present in your `rules.mk`:
|
||||
|
||||
```make
|
||||
# Bootloader selection
|
||||
# Teensy halfkay
|
||||
# Pro Micro caterina
|
||||
# Atmel DFU atmel-dfu
|
||||
# LUFA DFU lufa-dfu
|
||||
# QMK DFU qmk-dfu
|
||||
# ATmega32A bootloadHID
|
||||
# ATmega328P USBasp
|
||||
BOOTLOADER = caterina
|
||||
```
|
||||
|
||||
Compatible flashers:
|
||||
|
||||
* [QMK Toolbox](https://github.com/qmk/qmk_toolbox/releases) (recommended GUI)
|
||||
* [avrdude](http://www.nongnu.org/avrdude/) with avr109 / `:avrdude` (recommended command line)
|
||||
* [avrdude](http://www.nongnu.org/avrdude/) with the `avr109` programmer / `:avrdude` target in QMK (recommended command line)
|
||||
* [AVRDUDESS](https://github.com/zkemble/AVRDUDESS)
|
||||
|
||||
Flashing sequence:
|
||||
|
||||
1. Press the `RESET` keycode, or short RST to GND quickly (you only have 7 seconds to flash once it enters)
|
||||
1. Enter the bootloader using any of the following methods (you only have 7 seconds to flash once it enters; some variants may require you to reset twice within 750 milliseconds):
|
||||
* Press the `RESET` keycode
|
||||
* Press the `RESET` button on the PCB if available
|
||||
* Short RST to GND quickly
|
||||
2. Wait for the OS to detect the device
|
||||
3. Flash a .hex file
|
||||
4. Wait for the device to reset automatically
|
||||
|
||||
or
|
||||
### `make` Targets
|
||||
|
||||
make <keyboard>:<keymap>:avrdude
|
||||
* `:avrdude`: Checks every 5 seconds until a Caterina device is available (by detecting a new COM port), and then flashes the firmware.
|
||||
* `:avrdude-loop`: Flashes the firmware as with `:avrdude`, but after each device is flashed, will attempt to flash again. This is useful for bulk flashing. Hit Ctrl+C to escape the loop.
|
||||
* `:avrdude-split-left` and `:avrdude-split-right`: Flashes the firmware as with `:avrdude`, but also sets the handedness setting in EEPROM. This is ideal for Pro Micro-based split keyboards.
|
||||
|
||||
## HalfKay
|
||||
|
||||
### Caterina commands
|
||||
HalfKay is a super-slim bootloader developed by PJRC that presents itself as an HID device (which requires no additional driver), and comes preflashed on all Teensys, namely the 2.0. It is currently closed-source, and thus once overwritten (eg. via ISP flashing another bootloader), cannot be restored.
|
||||
|
||||
There are a number of DFU commands that you can use to flash firmware to a DFU device:
|
||||
|
||||
* `:avrdude` - This is the normal option which waits until a Caterina device is available (by detecting a new COM port), and then flashes the firmware.
|
||||
* `:avrdude-loop` - This runs the same command as `:avrdude`, but after each device is flashed, it will attempt to flash again. This is useful for bulk flashing. _This requires you to manually escape the loop by hitting Ctrl+C._
|
||||
* `:avrdude-split-left` - This flashes the normal firmware, just like the default option (`:avrdude`). However, this also flashes the "Left Side" EEPROM file for split keyboards. _This is ideal for Pro Micro based split keyboards._
|
||||
* `:avrdude-split-right` - This flashes the normal firmware, just like the default option (`:avrdude`). However, this also flashes the "Right Side" EEPROM file for split keyboards. _This is ideal for Pro Micro based split keyboards._
|
||||
|
||||
|
||||
|
||||
## Halfkay
|
||||
|
||||
Halfkay is a super-slim protocol developed by PJRC that uses HID, and comes on all Teensys (namely the 2.0).
|
||||
|
||||
To ensure compatibility with the Halfkay bootloader, make sure this block is present your `rules.mk`:
|
||||
To ensure compatibility with the Halfkay bootloader, make sure this block is present in your `rules.mk`:
|
||||
|
||||
```make
|
||||
# Bootloader selection
|
||||
# Teensy halfkay
|
||||
# Pro Micro caterina
|
||||
# Atmel DFU atmel-dfu
|
||||
# LUFA DFU lufa-dfu
|
||||
# QMK DFU qmk-dfu
|
||||
# ATmega32A bootloadHID
|
||||
# ATmega328P USBasp
|
||||
BOOTLOADER = halfkay
|
||||
```
|
||||
|
||||
Compatible flashers:
|
||||
|
||||
* [QMK Toolbox](https://github.com/qmk/qmk_toolbox/releases) (recommended GUI)
|
||||
* [Teensy Loader Command Line](https://www.pjrc.com/teensy/loader_cli.html) / `:teensy` target in QMK (recommended command line)
|
||||
* [Teensy Loader](https://www.pjrc.com/teensy/loader.html)
|
||||
* [Teensy Loader Command Line](https://www.pjrc.com/teensy/loader_cli.html) (recommended command line)
|
||||
|
||||
Flashing sequence:
|
||||
|
||||
1. Press the `RESET` keycode, or short RST to GND quickly (you only have 7 seconds to flash once it enters)
|
||||
1. Enter the bootloader using any of the following methods (you only have 7 seconds to flash once it enters):
|
||||
* Press the `RESET` keycode
|
||||
* Press the `RESET` button on the Teensy or PCB if available
|
||||
* short RST to GND quickly
|
||||
2. Wait for the OS to detect the device
|
||||
3. Flash a .hex file
|
||||
4. Reset the device into application mode (may be done automatically)
|
||||
|
||||
## USBasploader
|
||||
|
||||
USBasploader is a bootloader developed by matrixstorm. It is used in some non-USB AVR chips such as the ATmega328P, which run V-USB.
|
||||
USBasploader is a bootloader originally by [Objective Development](https://www.obdev.at/products/vusb/usbasploader.html). It emulates a USBasp ISP programmer and is used in some non-USB AVR chips such as the ATmega328P, which run V-USB.
|
||||
|
||||
To ensure compatibility with the USBasploader bootloader, make sure this block is present in your `rules.mk`:
|
||||
|
||||
```make
|
||||
# Bootloader selection
|
||||
# Teensy halfkay
|
||||
# Pro Micro caterina
|
||||
# Atmel DFU atmel-dfu
|
||||
# LUFA DFU lufa-dfu
|
||||
# QMK DFU qmk-dfu
|
||||
# ATmega32A bootloadHID
|
||||
# ATmega328P USBasp
|
||||
BOOTLOADER = USBasp
|
||||
```
|
||||
|
||||
Compatible flashers:
|
||||
|
||||
* [QMK Toolbox](https://github.com/qmk/qmk_toolbox/releases) (recommended GUI)
|
||||
* [avrdude](http://www.nongnu.org/avrdude/) with the `usbasp` programmer
|
||||
* [avrdude](http://www.nongnu.org/avrdude/) with the `usbasp` programmer / `:usbasp` target in QMK (recommended command line)
|
||||
* [AVRDUDESS](https://github.com/zkemble/AVRDUDESS)
|
||||
|
||||
Flashing sequence:
|
||||
|
||||
1. Press the `RESET` keycode, or keep the boot pin shorted to GND while quickly shorting RST to GND
|
||||
1. Enter the bootloader using any of the following methods:
|
||||
* Press the `RESET` keycode
|
||||
* Keep the `BOOT` button held while quickly tapping the `RESET` button on the PCB
|
||||
2. Wait for the OS to detect the device
|
||||
3. Flash a .hex file
|
||||
4. Reset the device into application mode (may be done automatically)
|
||||
4. Press the `RESET` button on the PCB or short RST to GND
|
||||
|
||||
## BootloadHID
|
||||
|
||||
BootloadHID is a USB bootloader for AVR microcontrollers. The uploader tool requires no kernel level driver on Windows and can therefore be run without installing any DLLs.
|
||||
BootloadHID is a USB bootloader for AVR microcontrollers. It presents itself as an HID input device, much like HalfKay, and can therefore be run without installing any driver on Windows.
|
||||
|
||||
To ensure compatibility with the bootloadHID bootloader, make sure this block is present your `rules.mk`:
|
||||
To ensure compatibility with the bootloadHID bootloader, make sure this block is present in your `rules.mk`:
|
||||
|
||||
```make
|
||||
# Bootloader selection
|
||||
# Teensy halfkay
|
||||
# Pro Micro caterina
|
||||
# Atmel DFU atmel-dfu
|
||||
# LUFA DFU lufa-dfu
|
||||
# QMK DFU qmk-dfu
|
||||
# ATmega32A bootloadHID
|
||||
# ATmega328P USBasp
|
||||
BOOTLOADER = bootloadHID
|
||||
```
|
||||
|
||||
Compatible flashers:
|
||||
|
||||
* [HIDBootFlash](http://vusb.wikidot.com/project:hidbootflash) (recommended Windows GUI)
|
||||
* [bootloadhid Command Line](https://www.obdev.at/products/vusb/bootloadhid.html) / `:BootloadHID` in QMK (recommended command line)
|
||||
* [QMK Toolbox](https://github.com/qmk/qmk_toolbox/releases) (recommended GUI)
|
||||
* [bootloadHID CLI](https://www.obdev.at/products/vusb/bootloadhid.html) / `:bootloadHID` target in QMK (recommended command line)
|
||||
* [HIDBootFlash](http://vusb.wikidot.com/project:hidbootflash)
|
||||
|
||||
Flashing sequence:
|
||||
|
||||
1. Enter the bootloader using any of the following methods:
|
||||
* Tap the `RESET` keycode (may not work on all devices)
|
||||
* Hold the salt key while plugging the keyboard in (usually documented within keyboard readme)
|
||||
* Tap the `RESET` keycode
|
||||
* Hold the salt key while plugging the keyboard in - for PS2AVRGB boards, this is usually the key connected to MCU pins A0 and B0, otherwise it will be documented in your keyboard's readme
|
||||
2. Wait for the OS to detect the device
|
||||
3. Flash a .hex file
|
||||
4. Reset the device into application mode (may be done automatically)
|
||||
|
||||
or:
|
||||
## STM32/APM32 DFU
|
||||
|
||||
make <keyboard>:<keymap>:bootloadHID
|
||||
All STM32 and APM32 MCUs, except for F103 (see the [STM32duino section](#stm32duino)) come preloaded with a factory bootloader that cannot be modified nor deleted.
|
||||
|
||||
## STM32
|
||||
To ensure compatibility with the STM32-DFU bootloader, make sure this block is present in your `rules.mk` (optionally with `apm32-dfu` instead):
|
||||
|
||||
All STM32 chips come preloaded with a factory bootloader that cannot be modified nor deleted. Some STM32 chips have bootloaders that do not come with USB programming (e.g. STM32F103) but the process is still the same.
|
||||
|
||||
At the moment, no `BOOTLOADER` variable is needed on `rules.mk` for STM32.
|
||||
```make
|
||||
# Bootloader selection
|
||||
BOOTLOADER = stm32-dfu
|
||||
```
|
||||
|
||||
Compatible flashers:
|
||||
|
||||
* [QMK Toolbox](https://github.com/qmk/qmk_toolbox/releases) (recommended GUI)
|
||||
* [dfu-util](https://github.com/Stefan-Schmidt/dfu-util) / `:dfu-util` (recommended command line)
|
||||
* [dfu-util](http://dfu-util.sourceforge.net/) / `:dfu-util` target in QMK (recommended command line)
|
||||
|
||||
Flashing sequence:
|
||||
|
||||
1. Enter the bootloader using any of the following methods:
|
||||
* Tap the `RESET` keycode (may not work on STM32F042 devices)
|
||||
* If a reset circuit is present, tap the RESET button
|
||||
* Otherwise, you need to bridge BOOT0 to VCC (via BOOT0 button or bridge), short RESET to GND (via RESET button or bridge), and then let go of the BOOT0 bridge
|
||||
* If a reset circuit is present, tap the `RESET` button on the PCB; some boards may also have a toggle switch that must be flipped
|
||||
* Otherwise, you need to bridge `BOOT0` to VCC (via `BOOT0` button or jumper), short `RESET` to GND (via `RESET` button or jumper), and then let go of the `BOOT0` bridge
|
||||
2. Wait for the OS to detect the device
|
||||
3. Flash a .bin file
|
||||
* You will receive a warning about the DFU signature; Just ignore it
|
||||
4. Reset the device into application mode (may be done automatically)
|
||||
* If you are building from command line (e.g. `make planck/rev6:default:dfu-util`), make sure that `:leave` is passed to the `DFU_ARGS` variable inside your `rules.mk` (e.g. `DFU_ARGS = -d 0483:df11 -a 0 -s 0x08000000:leave`) so that your device resets after flashing
|
||||
|
||||
### STM32 Commands
|
||||
### `make` Targets
|
||||
|
||||
There are a number of DFU commands that you can use to flash firmware to a STM32 device:
|
||||
* `:dfu-util`: Waits until an STM32 bootloader device is available, and then flashes the firmware.
|
||||
* `:dfu-util-split-left` and `:dfu-util-split-right`: Flashes the firmware as with `:avrdude`, but also sets the handedness setting in EEPROM. This is ideal for Proton-C-based split keyboards.
|
||||
* `:st-link-cli`: Allows you to flash the firmware via the ST-Link CLI utility, rather than dfu-util. Requires an ST-Link dongle.
|
||||
* `:st-flash`: Allows you to flash the firmware via the `st-flash` utility from [STLink Tools](https://github.com/stlink-org/stlink), rather than dfu-util. Requires an ST-Link dongle.
|
||||
|
||||
* `:dfu-util` - The default command for flashing to STM32 devices, and will wait until an STM32 bootloader device is present.
|
||||
* `:dfu-util-split-left` - This flashes the normal firmware, just like the default option (`:dfu-util`). However, this also configures the "Left Side" EEPROM setting for split keyboards.
|
||||
* `:dfu-util-split-right` - This flashes the normal firmware, just like the default option (`:dfu-util`). However, this also configures the "Right Side" EEPROM setting for split keyboards.
|
||||
* `:st-link-cli` - This allows you to flash the firmware via ST-LINK's CLI utility, rather than dfu-util.
|
||||
* `:st-flash` - This allows you to flash the firmware via the `st-flash` utility from [STLink Tools](https://github.com/stlink-org/stlink), rather than dfu-util.
|
||||
## STM32duino
|
||||
|
||||
This bootloader is used almost exclusively for STM32F103 boards, as they do not come with a USB DFU bootloader. The source code and prebuilt binaries can be found [here](https://github.com/rogerclarkmelbourne/STM32duino-bootloader).
|
||||
|
||||
To ensure compatibility with the STM32duino bootloader, make sure this block is present in your `rules.mk`:
|
||||
|
||||
```make
|
||||
# Bootloader selection
|
||||
BOOTLOADER = stm32duino
|
||||
```
|
||||
|
||||
Compatible flashers:
|
||||
|
||||
* [QMK Toolbox](https://github.com/qmk/qmk_toolbox/releases) (recommended GUI)
|
||||
* [dfu-util](http://dfu-util.sourceforge.net/) / `:dfu-util` target in QMK (recommended command line)
|
||||
|
||||
Flashing sequence:
|
||||
|
||||
1. Enter the bootloader using any of the following methods:
|
||||
* Tap the `RESET` keycode
|
||||
* If a reset circuit is present, tap the `RESET` button on the PCB
|
||||
* Otherwise, you need to bridge `BOOT0` to VCC (via `BOOT0` button or jumper), short `RESET` to GND (via `RESET` button or jumper), and then let go of the `BOOT0` bridge
|
||||
2. Wait for the OS to detect the device
|
||||
3. Flash a .bin file
|
||||
4. Reset the device into application mode (may be done automatically)
|
||||
|
||||
## Kiibohd DFU
|
||||
|
||||
Keyboards produced by Input Club use NXP Kinetis microcontrollers rather than STM32, and come with their own [custom bootloader](https://github.com/kiibohd/controller/tree/master/Bootloader), however the process and protocol is largely the same.
|
||||
|
||||
The `rules.mk` setting for this bootloader is `kiibohd`, but since this bootloader is limited to Input Club boards, it should not be necessary to set at keymap or user level.
|
||||
|
||||
Compatible flashers:
|
||||
|
||||
* [QMK Toolbox](https://github.com/qmk/qmk_toolbox/releases) (recommended GUI)
|
||||
* [dfu-util](http://dfu-util.sourceforge.net/) / `:dfu-util` target in QMK (recommended command line)
|
||||
|
||||
Flashing sequence:
|
||||
|
||||
1. Enter the bootloader using any of the following methods:
|
||||
* Tap the `RESET` keycode (this may only enter the MCU into a "secure" bootloader mode; see https://github.com/qmk/qmk_firmware/issues/6112)
|
||||
* Press the `RESET` button on the PCB
|
||||
2. Wait for the OS to detect the device
|
||||
3. Flash a .bin file
|
||||
4. Reset the device into application mode (may be done automatically)
|
||||
|
@@ -47,4 +47,3 @@ This configuration is from usbasploader's Makefile.
|
||||
# | | +----- LB 2..1 (No memory lock features enabled)
|
||||
# | +--------- BLB0 2..1 (No restrictions for SPM or LPM accessing the Application section)
|
||||
# +--------------- BLB1 2..1 (No restrictions for SPM or LPM accessing the Boot Loader section)
|
||||
|
||||
|
@@ -78,7 +78,7 @@ Established materials and techniques include:
|
||||
| Short lengths of wire | [u/xicolinguada's ortho build](https://www.reddit.com/r/MechanicalKeyboards/comments/c39k4f/my_first_hand_wired_keyboard_its_not_perfect_but/) | Easier to strip the wire | More difficult to place | 
|
||||
| Magnet/Enamelled wire | [Brett Kosinski's handwired alpha](http://blog.b-ark.ca/Blog-2019-01-27) and [fknraiden's custom board](https://geekhack.org/index.php?topic=74223.0) | Can be directly soldered onto (insulation burns off with heat) | Appearance? | 
|
||||
| Bending the legs of the diodes for the rows | [Matt3o's Brownfox](https://deskthority.net/viewtopic.php?f=7&t=6050) | Fewer solder joints required | Uninsulated | 
|
||||
| Using ridid wiring (e.g. brass tube) | [u/d_stilgar's invisible hardline](https://www.reddit.com/r/MechanicalKeyboards/comments/8aw5j2/invisible_hardline_keyboard_progress_update_april/) and [u/jonasfasler's first attempt](https://www.reddit.com/r/MechanicalKeyboards/comments/de1jyv/my_first_attempt_at_handwiring_a_keyboard/) | Very pretty | More difficult. No physical insulation | 
|
||||
| Using rigid wiring (e.g. brass tube) | [u/d_stilgar's invisible hardline](https://www.reddit.com/r/MechanicalKeyboards/comments/8aw5j2/invisible_hardline_keyboard_progress_update_april/) and [u/jonasfasler's first attempt](https://www.reddit.com/r/MechanicalKeyboards/comments/de1jyv/my_first_attempt_at_handwiring_a_keyboard/) | Very pretty | More difficult. No physical insulation | 
|
||||
| Bare wire with insulation added after (e.g. kapton tape) | [Matt3o's 65% on his website](https://matt3o.com/hand-wiring-a-custom-keyboard/) | Easier (no wire stripping required) | Not as attractive | 
|
||||
| Copper tape | [ManuForm Dactyl](https://github.com/tshort/dactyl-keyboard) | Very easy | Only really works when your plate/case aligns with the bottom of your switches | 
|
||||
|
||||
@@ -121,7 +121,7 @@ Letting the diode rest, grab your solder, and touch both it and the soldering ir
|
||||
|
||||
The smoke that the rosin releases is harmful, so be careful not to breath it or get it in your eyes/face.
|
||||
|
||||
After soldering things in place, it may be helpful to blow on the joint to push the smoke away from your face, and cool the solder quicker. You should see the solder develop a matte (not shiny) surface as it solidifies. Keep in mind that it will still be very hot afterwards, and will take a couple minutes to be cool to touch. Blow on it will accelerate this process.
|
||||
After soldering things in place, it may be helpful to blow on the joint to push the smoke away from your face, and cool the solder quicker. You should see the solder develop a matte (not shiny) surface as it solidifies. Keep in mind that it will still be very hot afterwards, and will take a couple minutes to be cool to touch. Blowing on it will accelerate this process.
|
||||
|
||||
When the first diode is complete, the next one will need to be soldered to both the keyswitch, and the previous diode at the new elbow. That will look something like this:
|
||||
|
||||
|
@@ -77,7 +77,7 @@ Do change the `MANUFACTURER` and `PRODUCT` lines to accurately reflect your keyb
|
||||
#define PRODUCT my_awesome_keyboard
|
||||
```
|
||||
|
||||
?> Windows and macOS will display the `MANUFACTURER` and `PRODUCT` in the list of USB devices. `lsusb` on Linux instead takes these from the list maintained by the [USB ID Repository](http://www.linux-usb.org/usb-ids.html) by default. `lsusb -v` will show the values reported by the device, and they are also present in kernel logs after plugging it in.
|
||||
?> Windows and macOS will display the `MANUFACTURER` and `PRODUCT` in the list of USB devices. `lsusb` on Linux instead prefers the values in the list maintained by the [USB ID Repository](http://www.linux-usb.org/usb-ids.html). By default, it will only use `MANUFACTURER` and `PRODUCT` if the list does not contain that `VENDOR_ID` / `PRODUCT_ID`. `sudo lsusb -v` will show the values reported by the device, and they are also present in kernel logs after plugging it in.
|
||||
|
||||
### Keyboard Matrix Configuration
|
||||
|
||||
|
@@ -64,4 +64,4 @@
|
||||
```
|
||||
|
||||
מקמו את התיעוד שלכם בתוך `docs/feature_<my_cool_feature>.md`, והוסיפו קישור לקובץ זה במקום המתאים ב `docs/_sidebar.md`. אם הוספתם קודי מקשים נוספים, תקפידו להוסיף אותם ל- `docs/keycodes.md` עם לינק לעמוד היכולת שלכם.
|
||||
</div>
|
||||
</div>
|
||||
|
@@ -5,4 +5,4 @@
|
||||
* [בנייה או קומפילציה של QMK](faq_build.md)
|
||||
* [דיבאגינג ופתרון בעיות של QMK](faq_debug.md)
|
||||
* [מיפוי מקשים](faq_keymap.md)
|
||||
</div>
|
||||
</div>
|
||||
|
@@ -14,4 +14,4 @@ TMK עוצב ומומש במקור ע״י [Jun Wako](https://github.com/tmk). QM
|
||||
מנק׳ מבט של הפרוייקט וניהול הקהילה, TMK מנהל את כל המקלדות הנתמכות בעצמו, עם מעט תמיכה מהקהילה. כל אחד יכול לעשות פורק מהפרוייקט עבור מקלדות אחרות. רק מס׳ מיפויי מקשים נמצאים בברירת המחדל כך שאנשים בד״כ לא משתפים מיפויי מקשים זה עם זה. QMK מעודד את השיתוף של המקלדות וקודי המקשים דרך רפוזיטורי בניהול מרכזי, אשר מקבל את כל בקשות ה- Pull Requests שעומדות בסטנדרט האיכות. רובם מנוהלות ע״י הקהילה, אבל הצוות של QMK עוזר כשנדרש.
|
||||
|
||||
לשתי הגישות יש יתרונות וחסרונות וקוד עובר בחופשיות בין TMK ל- QMK כשצריך.
|
||||
</div>
|
||||
</div>
|
||||
|
@@ -14,4 +14,4 @@
|
||||
## סוגיות GitHub
|
||||
|
||||
ניתן לפתוח [סוגייה ב-GitHub](https://github.com/qmk/qmk_firmware/issues). הדבר שימושי במיוחד כאשר הסוגיה דורשת דיון עמוק וארוך או דיבאגינג.
|
||||
</div>
|
||||
</div>
|
||||
|
@@ -7,4 +7,4 @@ QMK רצה על מגוון של חומרות. אם המעבד שלך יכול ל
|
||||
* [מעבדי AVR](hardware_avr.md)
|
||||
* מעבדי ARM (TBD)
|
||||
* [מנהלי התקנים](hardware_drivers.md)
|
||||
</div>
|
||||
</div>
|
||||
|
@@ -13,4 +13,4 @@
|
||||
מקורות לפקודות שורה (Command Line):
|
||||
|
||||
* [מדריך טוב על Command Line](https://www.codecademy.com/learn/learn-the-command-line)
|
||||
</div>
|
||||
</div>
|
||||
|
@@ -126,6 +126,10 @@
|
||||
headings: 'h1, h2',
|
||||
title: 'Table of Contents',
|
||||
},
|
||||
tabs: {
|
||||
persist : false,
|
||||
tabComments: false,
|
||||
},
|
||||
plugins: [
|
||||
function (hook, vm) {
|
||||
hook.beforeEach(function (html) {
|
||||
@@ -148,6 +152,7 @@
|
||||
<script src="//unpkg.com/docsify/lib/docsify.min.js"></script>
|
||||
<script src="//unpkg.com/docsify/lib/plugins/search.min.js"></script>
|
||||
<script src="//unpkg.com/docsify/lib/plugins/emoji.min.js"></script>
|
||||
<script src="//unpkg.com/docsify-tabs@1"></script>
|
||||
<script src="//unpkg.com/docsify-copy-code@2"></script>
|
||||
<script src="//unpkg.com/docsify-toc@1.0.0/dist/toc.js"></script>
|
||||
<script src="//unpkg.com/prismjs/components/prism-bash.min.js"></script>
|
||||
|
@@ -103,6 +103,7 @@
|
||||
* [DIP スイッチ](ja/feature_dip_switch.md)
|
||||
* [エンコーダ](ja/feature_encoders.md)
|
||||
* [触覚フィードバック](ja/feature_haptic_feedback.md)
|
||||
* [LED インジケータ](ja/feature_led_indicators.md)
|
||||
* [Proton C 変換](ja/proton_c_conversion.md)
|
||||
* [PS/2 マウス](ja/feature_ps2_mouse.md)
|
||||
* [分割キーボード](ja/feature_split_keyboard.md)
|
||||
|
@@ -1,8 +1,8 @@
|
||||
# キーボードの挙動をカスタマイズする方法
|
||||
|
||||
<!---
|
||||
original document: 0.10.33:docs/custom_quantum_functions.md
|
||||
git diff 0.10.33 HEAD -- docs/custom_quantum_functions.md | cat
|
||||
original document: 0.10.52:docs/custom_quantum_functions.md
|
||||
git diff 0.10.52 HEAD -- docs/custom_quantum_functions.md | cat
|
||||
-->
|
||||
|
||||
多くの人にとって、カスタムキーボードはボタンの押下をコンピュータに送信するだけではありません。単純なボタンの押下やマクロよりも複雑なことを実行できるようにしたいでしょう。QMK にはコードを挿入したり、機能を上書きしたり、様々な状況でキーボードの挙動をカスタマイズできるフックがあります。
|
||||
@@ -93,106 +93,6 @@ keyrecord_t record {
|
||||
}
|
||||
```
|
||||
|
||||
# LED 制御
|
||||
|
||||
QMK は HID 仕様で定義された5つの LED の読み取りメソッドを提供します:
|
||||
|
||||
* Num Lock
|
||||
* Caps Lock
|
||||
* Scroll Lock
|
||||
* Compose
|
||||
* Kana
|
||||
|
||||
ロック LED の状態を取得するには2つの方法があります:
|
||||
|
||||
* `bool led_update_kb(led_t led_state)` あるいは `_user(led_t led_state)` を実装する、または
|
||||
* `led_t host_keyboard_led_state()` を呼び出す
|
||||
|
||||
!> `host_keyboard_led_state()` は `led_update_user()` が呼ばれる前に新しい値を既に反映している場合があります。
|
||||
|
||||
LED の状態を `uint8_t` として提供する2つの非推奨の関数があります:
|
||||
|
||||
* `uint8_t led_set_kb(uint8_t usb_led)` と `_user(uint8_t usb_led)`
|
||||
* `uint8_t host_keyboard_leds()`
|
||||
|
||||
## `led_update_user()`
|
||||
|
||||
この関数はこれら5つの LED のいずれかの状態が変化すると呼ばれます。LED の状態を構造体のパラメータとして受け取ります。
|
||||
|
||||
慣例により、`led_update_kb()` にそのコードを実行するようフックさせるために `led_update_user()` から `true` を返し、`led_update_kb()` でコードを実行したくない場合は `false` を返します。
|
||||
|
||||
以下はいくつかの例です:
|
||||
|
||||
- レイヤー表示のような何かのために LED を使うために LED を上書きする
|
||||
- `_kb()` 関数を実行したくないので、`false` を返します。これはレイヤーの挙動を上書きするためです。
|
||||
- LED がオンあるいはオフになった時に音楽を再生する。
|
||||
- `_kb` 関数を実行したいので、`true` を返します。これはデフォルトの LED の挙動に追加されます。
|
||||
|
||||
?> `led_set_*` 関数は `bool` の代わりに `void` を返すため、キーボードの LED 制御を上書きすることができません。従って、代わりに `led_update_*` を使うことをお勧めします。
|
||||
|
||||
### `led_update_kb()` の実装例
|
||||
|
||||
```c
|
||||
bool led_update_kb(led_t led_state) {
|
||||
bool res = led_update_user(led_state);
|
||||
if(res) {
|
||||
// writePin は 1 でピンを high に、0 で low に設定します。
|
||||
// この例では、ピンは反転していて、
|
||||
// low/0 は LED がオンになり、high/1 は LED がオフになります。
|
||||
// この挙動は、LED がピンと VCC の間にあるか、ピンと GND の間にあるかどうかに依存します。
|
||||
writePin(B0, !led_state.num_lock);
|
||||
writePin(B1, !led_state.caps_lock);
|
||||
writePin(B2, !led_state.scroll_lock);
|
||||
writePin(B3, !led_state.compose);
|
||||
writePin(B4, !led_state.kana);
|
||||
}
|
||||
return res;
|
||||
}
|
||||
```
|
||||
|
||||
### `led_update_user()` の実装例
|
||||
|
||||
この不完全な例は Caps Lock がオンまたはオフになった場合に音を再生します。また LED の状態を保持する必要があるため、`true` を返します。
|
||||
|
||||
```c
|
||||
#ifdef AUDIO_ENABLE
|
||||
float caps_on[][2] = SONG(CAPS_LOCK_ON_SOUND);
|
||||
float caps_off[][2] = SONG(CAPS_LOCK_OFF_SOUND);
|
||||
#endif
|
||||
|
||||
bool led_update_user(led_t led_state) {
|
||||
#ifdef AUDIO_ENABLE
|
||||
static uint8_t caps_state = 0;
|
||||
if (caps_state != led_state.caps_lock) {
|
||||
led_state.caps_lock ? PLAY_SONG(caps_on) : PLAY_SONG(caps_off);
|
||||
caps_state = led_state.caps_lock;
|
||||
}
|
||||
#endif
|
||||
return true;
|
||||
}
|
||||
```
|
||||
|
||||
### `led_update_*` 関数のドキュメント
|
||||
|
||||
* キーボード/リビジョン: `bool led_update_kb(led_t led_state)`
|
||||
* キーマップ: `bool led_update_user(led_t led_state)`
|
||||
|
||||
## `host_keyboard_led_state()`
|
||||
|
||||
最後に受信した LED の状態を `led_t` として取得するためにこの関数を呼びます。これは、`led_update_*` の外部から、例えば [`matrix_scan_user()`](#matrix-scanning-code) の中で LED の状態を読み取るのに便利です。
|
||||
|
||||
## 物理的な LED の状態の設定
|
||||
|
||||
一部のキーボードの実装は、物理的な LED の状態を設定するための便利なメソッドを提供しています。
|
||||
|
||||
### Ergodox キーボード
|
||||
|
||||
Ergodox の実装は、個々の LED をオンあるいはオフにするために `ergodox_right_led_1`/`2`/`3_on`/`off()` と、インデックスによってそれらをオンあるいはオフにするために `ergodox_right_led_on`/`off(uint8_t led)` を提供します。
|
||||
|
||||
さらに、LED の明度を指定することができます。全ての LED に同じ明度を指定するなら `ergodox_led_all_set(uint8_t n)` を使い、個別の LED の明度を指定するなら `ergodox_right_led_1`/`2`/`3_set(uint8_t n)` を使い、LED のインデックスを指定して明度を指定するには `ergodox_right_led_set(uint8_t led, uint8_t n)` を使います。
|
||||
|
||||
Ergodox キーボードは、最低の明度として `LED_BRIGHTNESS_LO` を、最高の輝度(これはデフォルトです)として `LED_BRIGHTNESS_HI` も定義しています。
|
||||
|
||||
# キーボードの初期化コード
|
||||
|
||||
キーボードの初期化プロセスには幾つかのステップがあります。何をしたいかによって、どの関数を使うべきかに影響します。
|
||||
@@ -347,7 +247,7 @@ layer_state_t layer_state_set_user(layer_state_t state) {
|
||||
}
|
||||
```
|
||||
|
||||
特定のレイヤーの状態を確認するには、 `IS_LAYER_ON_STATE(state, layer)` と `IS_LAYER_OFF_STATE(state, layer)` マクロを使います。
|
||||
特定のレイヤーの状態を確認するには、`IS_LAYER_ON_STATE(state, layer)` と `IS_LAYER_OFF_STATE(state, layer)` マクロを使います。
|
||||
|
||||
`layer_state_set_*` 関数の外では、グローバルなレイヤー状態を確認するために `IS_LAYER_ON(layer)` と `IS_LAYER_OFF(layer)` マクロを使えます。
|
||||
|
||||
|
@@ -43,5 +43,3 @@ endif
|
||||
* eager_pk - キーごとにデバウンスします。状態が変化すると、応答は即座に行われ、その後そのキーは ```DEBOUNCE``` ミリ秒の間入力されません。
|
||||
* sym_g - キーボードごとにデバウンスします。状態が変化すると、グローバルタイマが設定されます。```DEBOUNCE``` ミリ秒の間何も変化がなければ、全ての入力の変更がプッシュされます。
|
||||
* sym_pk - キーごとにデバウンスします。状態が変化すると、キーごとのタイマーが設定されます。```DEBOUNCE``` ミリ秒の間そのキーに変化がなければ、キーの状態の変更がプッシュされます。
|
||||
|
||||
|
||||
|
119
docs/ja/feature_led_indicators.md
Normal file
119
docs/ja/feature_led_indicators.md
Normal file
@@ -0,0 +1,119 @@
|
||||
# LED インジケータ
|
||||
|
||||
<!---
|
||||
original document: 0.10.52:docs/feature_led_indicators.md
|
||||
git diff 0.10.52 HEAD -- docs/feature_led_indicators.md | cat
|
||||
-->
|
||||
|
||||
QMK は HID 仕様で定義された5つの LED の読み取りメソッドを提供します:
|
||||
|
||||
* Num Lock
|
||||
* Caps Lock
|
||||
* Scroll Lock
|
||||
* Compose
|
||||
* Kana
|
||||
|
||||
ロック LED の状態を取得するには3つの方法があります:
|
||||
* `config.h` で設定オプションを指定する
|
||||
* `bool led_update_kb(led_t led_state)` あるいは `_user(led_t led_state)` を実装する、または
|
||||
* `led_t host_keyboard_led_state()` を呼び出す
|
||||
|
||||
!> `host_keyboard_led_state()` は `led_update_user()` が呼ばれる前に新しい値を既に反映している場合があります。
|
||||
|
||||
LED の状態を `uint8_t` として提供する2つの非推奨の関数があります:
|
||||
|
||||
* `uint8_t led_set_kb(uint8_t usb_led)` と `_user(uint8_t usb_led)`
|
||||
* `uint8_t host_keyboard_leds()`
|
||||
|
||||
## 設定オプション
|
||||
|
||||
インジケータを設定するには、`config.h` で以下の `#define` をします:
|
||||
|
||||
| 定義 | 既定値 | 説明 |
|
||||
|-----------------------|------------|----------------------------------|
|
||||
| `LED_NUM_LOCK_PIN` | *定義なし* | `Num Lock` LED を制御するピン |
|
||||
| `LED_CAPS_LOCK_PIN` | *定義なし* | `Caps Lock` LED を制御するピン |
|
||||
| `LED_SCROLL_LOCK_PIN` | *定義なし* | `Scroll Lock` LED を制御するピン |
|
||||
| `LED_COMPOSE_PIN` | *定義なし* | `Compose` LED を制御するピン |
|
||||
| `LED_KANA_PIN` | *定義なし* | `Kana` LED を制御するピン |
|
||||
| `LED_PIN_ON_STATE` | `1` | LED が "オン" の時のインジケータピンの状態 - high の場合は`1`、low の場合は`0` |
|
||||
|
||||
独自のキーボードを設計しているわけではない限り、通常は上記の設定オプションを変更する必要はありません。
|
||||
|
||||
## `led_update_*()`
|
||||
|
||||
設定オプションが十分な柔軟性を提供しない場合は、提供される API フックにより LED の挙動の独自の制御ができます。これらの関数はこれら5つの LED のいずれかの状態が変化すると呼ばれます。LED の状態を構造体のパラメータとして受け取ります。
|
||||
|
||||
慣例により、`led_update_kb()` にそのコードを実行するようフックさせるために `led_update_user()` から `true` を返し、`led_update_kb()` でコードを実行したくない場合は `false` を返します。
|
||||
|
||||
以下はいくつかの例です:
|
||||
|
||||
- レイヤー表示のような何かのために LED を使うために LED を上書きする
|
||||
- `_kb()` 関数を実行したくないので、`false` を返します。これはレイヤーの挙動を上書きするためです。
|
||||
- LED がオンあるいはオフになった時に音楽を再生する。
|
||||
- `_kb` 関数を実行したいので、`true` を返します。これはデフォルトの LED の挙動に追加されます。
|
||||
|
||||
?> `led_set_*` 関数は `bool` の代わりに `void` を返すため、キーボードの LED 制御を上書きすることができません。従って、代わりに `led_update_*` を使うことをお勧めします。
|
||||
|
||||
### `led_update_kb()` の実装例
|
||||
|
||||
```c
|
||||
bool led_update_kb(led_t led_state) {
|
||||
bool res = led_update_user(led_state);
|
||||
if(res) {
|
||||
// writePin は 1 でピンを high に、0 で low に設定します。
|
||||
// この例では、ピンは反転していて、
|
||||
// low/0 は LED がオンになり、high/1 は LED がオフになります。
|
||||
// この挙動は、LED がピンと VCC の間にあるか、ピンと GND の間にあるかどうかに依存します。
|
||||
writePin(B0, !led_state.num_lock);
|
||||
writePin(B1, !led_state.caps_lock);
|
||||
writePin(B2, !led_state.scroll_lock);
|
||||
writePin(B3, !led_state.compose);
|
||||
writePin(B4, !led_state.kana);
|
||||
}
|
||||
return res;
|
||||
}
|
||||
```
|
||||
|
||||
### `led_update_user()` の実装例
|
||||
|
||||
この不完全な例は Caps Lock がオンまたはオフになった場合に音を再生します。また LED の状態を保持する必要があるため、`true` を返します。
|
||||
|
||||
```c
|
||||
#ifdef AUDIO_ENABLE
|
||||
float caps_on[][2] = SONG(CAPS_LOCK_ON_SOUND);
|
||||
float caps_off[][2] = SONG(CAPS_LOCK_OFF_SOUND);
|
||||
#endif
|
||||
|
||||
bool led_update_user(led_t led_state) {
|
||||
#ifdef AUDIO_ENABLE
|
||||
static uint8_t caps_state = 0;
|
||||
if (caps_state != led_state.caps_lock) {
|
||||
led_state.caps_lock ? PLAY_SONG(caps_on) : PLAY_SONG(caps_off);
|
||||
caps_state = led_state.caps_lock;
|
||||
}
|
||||
#endif
|
||||
return true;
|
||||
}
|
||||
```
|
||||
|
||||
### `led_update_*` 関数のドキュメント
|
||||
|
||||
* キーボード/リビジョン: `bool led_update_kb(led_t led_state)`
|
||||
* キーマップ: `bool led_update_user(led_t led_state)`
|
||||
|
||||
## `host_keyboard_led_state()`
|
||||
|
||||
最後に受信した LED の状態を `led_t` として取得するためにこの関数を呼びます。これは、`led_update_*` の外部から、例えば [`matrix_scan_user()`](#matrix-scanning-code) の中で LED の状態を読み取るのに便利です。
|
||||
|
||||
## 物理的な LED の状態の設定
|
||||
|
||||
一部のキーボードの実装は、物理的な LED の状態を設定するための便利なメソッドを提供しています。
|
||||
|
||||
### Ergodox キーボード
|
||||
|
||||
Ergodox の実装は、個々の LED をオンあるいはオフにするために `ergodox_right_led_1`/`2`/`3_on`/`off()` と、インデックスによってそれらをオンあるいはオフにするために `ergodox_right_led_on`/`off(uint8_t led)` を提供します。
|
||||
|
||||
さらに、LED の明度を指定することができます。全ての LED に同じ明度を指定するなら `ergodox_led_all_set(uint8_t n)` を使い、個別の LED の明度を指定するなら `ergodox_right_led_1`/`2`/`3_set(uint8_t n)` を使い、LED のインデックスを指定して明度を指定するには `ergodox_right_led_set(uint8_t led, uint8_t n)` を使います。
|
||||
|
||||
Ergodox キーボードは、最低の明度として `LED_BRIGHTNESS_LO` を、最高の輝度(これはデフォルトです)として `LED_BRIGHTNESS_HI` も定義しています。
|
74
docs/ja/feature_rawhid.md
Normal file
74
docs/ja/feature_rawhid.md
Normal file
@@ -0,0 +1,74 @@
|
||||
# Raw HID
|
||||
|
||||
<!---
|
||||
original document: 0.10.47:docs/feature_rawhid.md
|
||||
git diff 0.10.47 HEAD -- docs/feature_rawhid.md | cat
|
||||
-->
|
||||
|
||||
Raw HID は、HID インタフェースを介して QMK とホストコンピュータ間の双方向通信を可能にします。これには、キーマップをその場で切り替えたり、RGB LED の色とモードを変更したりなど、多くの潜在的な使用方法があります。
|
||||
|
||||
キーボードで raw HID を機能させるには、2つの主要なコンポーネントがあります。
|
||||
|
||||
## キーボードファームウェア
|
||||
|
||||
ファームウェアの実装はとても簡単です。
|
||||
`rules.mk` に以下を追加します:
|
||||
|
||||
```make
|
||||
RAW_ENABLE = yes
|
||||
```
|
||||
|
||||
`keymap.c` に `"raw_hid.h"` を include し、以下を実装します:
|
||||
|
||||
```C
|
||||
void raw_hid_receive(uint8_t *data, uint8_t length) {
|
||||
// ここにコードを書きます。data はホストから受信したパケットです。
|
||||
}
|
||||
```
|
||||
|
||||
`"raw_hid.h"` ヘッダは、キーボードからホストにパケットを送信できる `void raw_hid_send(uint8_t *data, uint8_t length);` も宣言します。例として、全てのデータをホストに返すことで、ホストアプリケーションを構築する時のデバッグに使うこともできます。
|
||||
|
||||
```C
|
||||
void raw_hid_receive(uint8_t *data, uint8_t length) {
|
||||
raw_hid_send(data, length);
|
||||
}
|
||||
```
|
||||
|
||||
`raw_hid_receive` はホストから最大長 `RAW_EPSIZE` の可変サイズのパケットを受信することができます。一方、`raw_hid_send` はパケットを厳密に `RAW_EPSIZE` の長さで送信するため、長さ `RAW_EPSIZE` のデータを使う必要があります。
|
||||
|
||||
ホスト側での作業を進める前に、raw 対応のファームウェアを書き込むようにしてください。
|
||||
|
||||
## ホスト (Windows/macOS/Linux)
|
||||
|
||||
これは幾つかの掘り下げが必要になるため、より複雑な部分です。
|
||||
|
||||
ホストコンピュータを raw HID を使ってキーボードに接続するには、キーボードについての4つの情報が必要です。
|
||||
|
||||
1. Vendor ID
|
||||
2. Product ID
|
||||
3. Usage Page
|
||||
4. Usage
|
||||
|
||||
前半の2つは、キーボードのメインディレクトリにあるキーボードの `config.h` で、`VENDOR_ID` と `PRODUCT_ID` で簡単に見つかります。
|
||||
|
||||
後半の2つは、キーボードのメインディレクトリにあるキーボードの `config.h` で、値を再定義することで上書きすることができます: `#define RAW_USAGE_PAGE 0xFF60` と `#define RAW_USAGE_ID 0x61`。
|
||||
|
||||
デフォルトでは、**Usage Page** は `0xFF60` で、**Usage** は `0x61` です。
|
||||
|
||||
### ホストの構築
|
||||
|
||||
独自に作成したくない場合は、利用可能な HID 実装ライブラリがある任意の言語を使ってホストを構築することができます。人気のある言語でよく使われるライブラリは以下の通りです:
|
||||
|
||||
* Node: [node-hid](https://github.com/node-hid/node-hid)。
|
||||
* C: [hidapi](https://github.com/libusb/hidapi)。
|
||||
* Java: [purejavahidapi](https://github.com/nyholku/purejavahidapi) と [hid4java](https://github.com/gary-rowe/hid4java)。
|
||||
* Python: [pyhidapi](https://pypi.org/project/hid/)。
|
||||
|
||||
これは完全なクロスプラットフォームのリストではありませんが、最初に始めるのに十分なはずです。raw HID を使うための特別な要件は無いため、どの HID ライブラリでも動作するはずです。
|
||||
|
||||
これで、キーボードへの HID インタフェースを開くために必要な4つの情報全てが揃いました。必要なのは、ライブラリの利用可能な関数を使って ID パラメータを使ってデバイスを開くことだけです。
|
||||
|
||||
Vendor ID と Product ID はデバイスを開くために実際には必要ないことに注意してください。それらは接続した多くの HID デバイスから特定のデバイスをフィルターするためだけに使われます。多くのライブラリでは、代わりに製品名と製造元名を使ってデバイスを開くオプションがあります。`node-hid` が代表的な例です。これは USB ハブが組み込まれているデバイスや、同じ製品名または同じ製造元の複数のインタフェースがある特別な HID インタフェースで問題になります。Product ID と Vendor ID を合わせると単一のインタフェースの固有名を作成できるため、この問題を防げます。したがって、ライブラリで必要が無い場合でも、この問題を防ぐためにそれらを使うことをお勧めします。
|
||||
ただし、Vendor ID や Product ID と異なり、Usage Page と Usage は通信を成功させるために必要です。
|
||||
|
||||
言うまでもなく、使っているライブラリに関係なく、終了したらインタフェースを必ず閉じる必要があります。オペレーティングシステムと特定の環境によっては、明示的に接続が閉じられていない場合、後で他のクライアントまたは同じクライアントの他のインスタンスに接続しなおした時に問題が発生する可能性があります。
|
@@ -171,4 +171,3 @@
|
||||
* `device` 関連するデバイス
|
||||
|
||||
* `func` 登録するコールバック関数
|
||||
|
||||
|
@@ -51,6 +51,7 @@ HID Keyboard/Keypad usage ページでは 256 未満の usage が定義されて
|
||||
| Norwegian | `keymap_norwegian.h` |
|
||||
| Polish | `keymap_polish.h` |
|
||||
| Portuguese | `keymap_portuguese.h` |
|
||||
| Portuguese (macOS, ISO) | `keymap_portuguese_osx_iso.h` |
|
||||
| Portuguese (Brazil) | `keymap_br_abnt2.h` |
|
||||
| Romanian | `keymap_romanian.h` |
|
||||
| Russian* | `keymap_russian.h` |
|
||||
|
@@ -124,17 +124,17 @@ See also: [Basic Keycodes](keycodes_basic.md)
|
||||
|`KC_F22` | |F22 |✔ | |✔ |
|
||||
|`KC_F23` | |F23 |✔ | |✔ |
|
||||
|`KC_F24` | |F24 |✔ | |✔ |
|
||||
|`KC_EXECUTE` |`KC_EXEC` |Execute | | |✔ |
|
||||
|`KC_HELP` | |Help | | |✔ |
|
||||
|`KC_MENU` | |Menu | | |✔ |
|
||||
|`KC_SELECT` |`KC_SLCT` |Select | | |✔ |
|
||||
|`KC_STOP` | |Stop | | |✔ |
|
||||
|`KC_AGAIN` |`KC_AGIN` |Again | | |✔ |
|
||||
|`KC_UNDO` | |Undo | | |✔ |
|
||||
|`KC_CUT` | |Cut | | |✔ |
|
||||
|`KC_COPY` | |Copy | | |✔ |
|
||||
|`KC_PASTE` |`KC_PSTE` |Paste | | |✔ |
|
||||
|`KC_FIND` | |Find | | |✔ |
|
||||
|`KC_EXECUTE` |`KC_EXEC` |Execute | | |✔ |
|
||||
|`KC_HELP` | |Help | | |✔ |
|
||||
|`KC_MENU` | |Menu | | |✔ |
|
||||
|`KC_SELECT` |`KC_SLCT` |Select | | |✔ |
|
||||
|`KC_STOP` | |Stop | | |✔ |
|
||||
|`KC_AGAIN` |`KC_AGIN` |Again | | |✔ |
|
||||
|`KC_UNDO` | |Undo | | |✔ |
|
||||
|`KC_CUT` | |Cut | | |✔ |
|
||||
|`KC_COPY` | |Copy | | |✔ |
|
||||
|`KC_PASTE` |`KC_PSTE` |Paste | | |✔ |
|
||||
|`KC_FIND` | |Find | | |✔ |
|
||||
|`KC__MUTE` | |Mute | |✔ |✔ |
|
||||
|`KC__VOLUP` | |Volume Up | |✔ |✔ |
|
||||
|`KC__VOLDOWN` | |Volume Down | |✔ |✔ |
|
||||
|
@@ -144,48 +144,48 @@ The basic set of keycodes are based on the [HID Keyboard/Keypad Usage Page (0x07
|
||||
|
||||
## Commands
|
||||
|
||||
|Key |Aliases |Description |
|
||||
|------------------|------------------------------|------------------------------|
|
||||
|`KC_PSCREEN` |`KC_PSCR` |Print Screen |
|
||||
|`KC_PAUSE` |`KC_PAUS`, `KC_BRK`, `KC_BRMU`|Pause, Brightness Up (macOS) |
|
||||
|`KC_INSERT` |`KC_INS` |Insert |
|
||||
|`KC_HOME` | |Home |
|
||||
|`KC_PGUP` | |Page Up |
|
||||
|`KC_DELETE` |`KC_DEL` |Forward Delete |
|
||||
|`KC_END` | |End |
|
||||
|`KC_PGDOWN` |`KC_PGDN` |Page Down |
|
||||
|`KC_RIGHT` |`KC_RGHT` |Right Arrow |
|
||||
|`KC_LEFT` | |Left Arrow |
|
||||
|`KC_DOWN` | |Down Arrow |
|
||||
|`KC_UP` | |Up Arrow |
|
||||
|`KC_APPLICATION` |`KC_APP` |Application (Windows Menu Key)|
|
||||
|`KC_POWER` | |System Power (macOS/Linux) |
|
||||
|`KC_EXECUTE` |`KC_EXEC` |Execute |
|
||||
|`KC_HELP` | |Help |
|
||||
|`KC_MENU` | |Menu |
|
||||
|`KC_SELECT` |`KC_SLCT` |Select |
|
||||
|`KC_STOP` | |Stop |
|
||||
|`KC_AGAIN` |`KC_AGIN` |Again |
|
||||
|`KC_UNDO` | |Undo |
|
||||
|`KC_CUT` | |Cut |
|
||||
|`KC_COPY` | |Copy |
|
||||
|`KC_PASTE` |`KC_PSTE` |Paste |
|
||||
|`KC_FIND` | |Find |
|
||||
|`KC__MUTE` | |Mute (macOS) |
|
||||
|`KC__VOLUP` | |Volume Up (macOS) |
|
||||
|`KC__VOLDOWN` | |Volume Down (macOS) |
|
||||
|`KC_ALT_ERASE` |`KC_ERAS` |Alternate Erase |
|
||||
|`KC_SYSREQ` | |SysReq/Attention |
|
||||
|`KC_CANCEL` | |Cancel |
|
||||
|`KC_CLEAR` |`KC_CLR` |Clear |
|
||||
|`KC_PRIOR` | |Prior |
|
||||
|`KC_RETURN` | |Return |
|
||||
|`KC_SEPARATOR` | |Separator |
|
||||
|`KC_OUT` | |Out |
|
||||
|`KC_OPER` | |Oper |
|
||||
|`KC_CLEAR_AGAIN` | |Clear/Again |
|
||||
|`KC_CRSEL` | |CrSel/Props |
|
||||
|`KC_EXSEL` | |ExSel |
|
||||
|Key |Aliases |Description |
|
||||
|------------------|------------------------------|--------------------------------------|
|
||||
|`KC_PSCREEN` |`KC_PSCR` |Print Screen |
|
||||
|`KC_PAUSE` |`KC_PAUS`, `KC_BRK`, `KC_BRMU`|Pause, Brightness Up (macOS) |
|
||||
|`KC_INSERT` |`KC_INS` |Insert |
|
||||
|`KC_HOME` | |Home |
|
||||
|`KC_PGUP` | |Page Up |
|
||||
|`KC_DELETE` |`KC_DEL` |Forward Delete |
|
||||
|`KC_END` | |End |
|
||||
|`KC_PGDOWN` |`KC_PGDN` |Page Down |
|
||||
|`KC_RIGHT` |`KC_RGHT` |Right Arrow |
|
||||
|`KC_LEFT` | |Left Arrow |
|
||||
|`KC_DOWN` | |Down Arrow |
|
||||
|`KC_UP` | |Up Arrow |
|
||||
|`KC_APPLICATION` |`KC_APP` |Application (Windows Context Menu Key)|
|
||||
|`KC_POWER` | |System Power |
|
||||
|`KC_EXECUTE` |`KC_EXEC` |Execute |
|
||||
|`KC_HELP` | |Help |
|
||||
|`KC_MENU` | |Menu |
|
||||
|`KC_SELECT` |`KC_SLCT` |Select |
|
||||
|`KC_STOP` | |Stop |
|
||||
|`KC_AGAIN` |`KC_AGIN` |Again |
|
||||
|`KC_UNDO` | |Undo |
|
||||
|`KC_CUT` | |Cut |
|
||||
|`KC_COPY` | |Copy |
|
||||
|`KC_PASTE` |`KC_PSTE` |Paste |
|
||||
|`KC_FIND` | |Find |
|
||||
|`KC__MUTE` | |Mute |
|
||||
|`KC__VOLUP` | |Volume Up |
|
||||
|`KC__VOLDOWN` | |Volume Down |
|
||||
|`KC_ALT_ERASE` |`KC_ERAS` |Alternate Erase |
|
||||
|`KC_SYSREQ` | |SysReq/Attention |
|
||||
|`KC_CANCEL` | |Cancel |
|
||||
|`KC_CLEAR` |`KC_CLR` |Clear |
|
||||
|`KC_PRIOR` | |Prior |
|
||||
|`KC_RETURN` | |Return |
|
||||
|`KC_SEPARATOR` | |Separator |
|
||||
|`KC_OUT` | |Out |
|
||||
|`KC_OPER` | |Oper |
|
||||
|`KC_CLEAR_AGAIN` | |Clear/Again |
|
||||
|`KC_CRSEL` | |CrSel/Props |
|
||||
|`KC_EXSEL` | |ExSel |
|
||||
|
||||
## Media Keys
|
||||
|
||||
@@ -193,34 +193,34 @@ These keycodes are not part of the Keyboard/Keypad usage page. The `SYSTEM_` key
|
||||
|
||||
?> Some of these keycodes may behave differently depending on the OS. For example, on macOS, the keycodes `KC_MEDIA_FAST_FORWARD`, `KC_MEDIA_REWIND`, `KC_MEDIA_NEXT_TRACK` and `KC_MEDIA_PREV_TRACK` skip within the current track when held, but skip the entire track when tapped.
|
||||
|
||||
|Key |Aliases |Description |
|
||||
|-----------------------|---------|-----------------------------|
|
||||
|`KC_SYSTEM_POWER` |`KC_PWR` |System Power Down |
|
||||
|`KC_SYSTEM_SLEEP` |`KC_SLEP`|System Sleep |
|
||||
|`KC_SYSTEM_WAKE` |`KC_WAKE`|System Wake |
|
||||
|`KC_AUDIO_MUTE` |`KC_MUTE`|Mute |
|
||||
|`KC_AUDIO_VOL_UP` |`KC_VOLU`|Volume Up |
|
||||
|`KC_AUDIO_VOL_DOWN` |`KC_VOLD`|Volume Down |
|
||||
|`KC_MEDIA_NEXT_TRACK` |`KC_MNXT`|Next Track |
|
||||
|`KC_MEDIA_PREV_TRACK` |`KC_MPRV`|Previous Track |
|
||||
|`KC_MEDIA_STOP` |`KC_MSTP`|Stop Track (Windows) |
|
||||
|`KC_MEDIA_PLAY_PAUSE` |`KC_MPLY`|Play/Pause Track |
|
||||
|`KC_MEDIA_SELECT` |`KC_MSEL`|Launch Media Player (Windows)|
|
||||
|`KC_MEDIA_EJECT` |`KC_EJCT`|Eject (macOS) |
|
||||
|`KC_MAIL` | |Launch Mail (Windows) |
|
||||
|`KC_CALCULATOR` |`KC_CALC`|Launch Calculator (Windows) |
|
||||
|`KC_MY_COMPUTER` |`KC_MYCM`|Launch My Computer (Windows) |
|
||||
|`KC_WWW_SEARCH` |`KC_WSCH`|Browser Search (Windows) |
|
||||
|`KC_WWW_HOME` |`KC_WHOM`|Browser Home (Windows) |
|
||||
|`KC_WWW_BACK` |`KC_WBAK`|Browser Back (Windows) |
|
||||
|`KC_WWW_FORWARD` |`KC_WFWD`|Browser Forward (Windows) |
|
||||
|`KC_WWW_STOP` |`KC_WSTP`|Browser Stop (Windows) |
|
||||
|`KC_WWW_REFRESH` |`KC_WREF`|Browser Refresh (Windows) |
|
||||
|`KC_WWW_FAVORITES` |`KC_WFAV`|Browser Favorites (Windows) |
|
||||
|`KC_MEDIA_FAST_FORWARD`|`KC_MFFD`|Next Track (macOS) |
|
||||
|`KC_MEDIA_REWIND` |`KC_MRWD`|Previous Track (macOS) |
|
||||
|`KC_BRIGHTNESS_UP` |`KC_BRIU`|Brightness Up |
|
||||
|`KC_BRIGHTNESS_DOWN` |`KC_BRID`|Brightness Down |
|
||||
|Key |Aliases |Description |
|
||||
|-----------------------|---------|-------------------|
|
||||
|`KC_SYSTEM_POWER` |`KC_PWR` |System Power Down |
|
||||
|`KC_SYSTEM_SLEEP` |`KC_SLEP`|System Sleep |
|
||||
|`KC_SYSTEM_WAKE` |`KC_WAKE`|System Wake |
|
||||
|`KC_AUDIO_MUTE` |`KC_MUTE`|Mute |
|
||||
|`KC_AUDIO_VOL_UP` |`KC_VOLU`|Volume Up |
|
||||
|`KC_AUDIO_VOL_DOWN` |`KC_VOLD`|Volume Down |
|
||||
|`KC_MEDIA_NEXT_TRACK` |`KC_MNXT`|Next Track |
|
||||
|`KC_MEDIA_PREV_TRACK` |`KC_MPRV`|Previous Track |
|
||||
|`KC_MEDIA_STOP` |`KC_MSTP`|Stop Track |
|
||||
|`KC_MEDIA_PLAY_PAUSE` |`KC_MPLY`|Play/Pause Track |
|
||||
|`KC_MEDIA_SELECT` |`KC_MSEL`|Launch Media Player|
|
||||
|`KC_MEDIA_EJECT` |`KC_EJCT`|Eject |
|
||||
|`KC_MAIL` | |Launch Mail |
|
||||
|`KC_CALCULATOR` |`KC_CALC`|Launch Calculator |
|
||||
|`KC_MY_COMPUTER` |`KC_MYCM`|Launch My Computer |
|
||||
|`KC_WWW_SEARCH` |`KC_WSCH`|Browser Search |
|
||||
|`KC_WWW_HOME` |`KC_WHOM`|Browser Home |
|
||||
|`KC_WWW_BACK` |`KC_WBAK`|Browser Back |
|
||||
|`KC_WWW_FORWARD` |`KC_WFWD`|Browser Forward |
|
||||
|`KC_WWW_STOP` |`KC_WSTP`|Browser Stop |
|
||||
|`KC_WWW_REFRESH` |`KC_WREF`|Browser Refresh |
|
||||
|`KC_WWW_FAVORITES` |`KC_WFAV`|Browser Favorites |
|
||||
|`KC_MEDIA_FAST_FORWARD`|`KC_MFFD`|Next Track |
|
||||
|`KC_MEDIA_REWIND` |`KC_MRWD`|Previous Track |
|
||||
|`KC_BRIGHTNESS_UP` |`KC_BRIU`|Brightness Up |
|
||||
|`KC_BRIGHTNESS_DOWN` |`KC_BRID`|Brightness Down |
|
||||
|
||||
## Number Pad
|
||||
|
||||
@@ -248,7 +248,7 @@ These keycodes are not part of the Keyboard/Keypad usage page. The `SYSTEM_` key
|
||||
|
||||
## Special Keys
|
||||
|
||||
In addition to these, keycodes in the range of `0xA5-DF` are reserved for internal use by TMK.
|
||||
In addition to these, keycodes in the range of `0xA5-DF` are reserved for internal use.
|
||||
|
||||
|Key |Aliases |Description |
|
||||
|----------------|--------------------|---------------------------------------|
|
||||
|
@@ -37,26 +37,60 @@ We've tried to make QMK as easy to set up as possible. You only have to prepare
|
||||
[Must Know Linux Commands](https://www.guru99.com/must-know-linux-commands.html)<br>
|
||||
[Some Basic Unix Commands](https://www.tjhsst.edu/~dhyatt/superap/unixcmd.html)
|
||||
|
||||
### Windows
|
||||
<!-- tabs:start -->
|
||||
|
||||
You will need to install MSYS2, Git, and the QMK CLI.
|
||||
### ** Windows **
|
||||
|
||||
Follow the installation instructions on the [MSYS2 homepage](http://www.msys2.org). Close any open MSYS terminals and open a new MinGW 64-bit terminal. **NOTE: This is *not* the same as the MSYS terminal that opens when installation is completed.**
|
||||
QMK maintains a Bundle of MSYS2, the CLI and all necessary dependencies. It also provides a handy `QMK MSYS` terminal shortcut to boot you directly into the correct environment.
|
||||
|
||||
Then, run the following:
|
||||
#### Prerequisites
|
||||
|
||||
You will need to install `QMK MSYS`. The latest release is available at https://msys.qmk.fm/.
|
||||
|
||||
Alternatively, if you'd like to manually install msys2, the following section will walk you through the process.
|
||||
|
||||
<details>
|
||||
<summary>Manual Install</summary>
|
||||
|
||||
?> Ignore the following steps if you use `QMK MSYS`.
|
||||
|
||||
#### Prerequisites
|
||||
|
||||
You will need to install MSYS2, Git and Python. Follow the installation instructions on https://www.msys2.org.
|
||||
|
||||
Once MSYS2 is installed, close any open MSYS terminals and open a new MinGW 64-bit terminal.
|
||||
|
||||
!> **NOTE:** The MinGW 64-bit terminal is *not* the same as the MSYS terminal that opens when installation is completed. Your prompt should say "MINGW64" in purple text, rather than "MSYS". See [this page](https://www.msys2.org/wiki/MSYS2-introduction/#subsystems) for more information on the differences.
|
||||
|
||||
Then run the following command:
|
||||
|
||||
pacman --needed --noconfirm --disable-download-timeout -S git mingw-w64-x86_64-toolchain mingw-w64-x86_64-python3-pip
|
||||
|
||||
#### Installation
|
||||
|
||||
Install the QMK CLI by running:
|
||||
|
||||
python3 -m pip install qmk
|
||||
|
||||
### macOS
|
||||
</details>
|
||||
|
||||
You will need to install Homebrew. Follow the instructions on the [Homebrew homepage](https://brew.sh).
|
||||
### ** macOS **
|
||||
|
||||
After Homebrew is installed run this command:
|
||||
QMK maintains a Homebrew tap and formula which will automatically install the CLI and all necessary dependencies.
|
||||
|
||||
#### Prerequisites
|
||||
|
||||
You will need to install Homebrew. Follow the instructions on https://brew.sh.
|
||||
|
||||
#### Installation
|
||||
|
||||
Install the QMK CLI by running:
|
||||
|
||||
brew install qmk/qmk/qmk
|
||||
|
||||
### Linux
|
||||
### ** Linux/WSL **
|
||||
|
||||
#### Prerequisites
|
||||
|
||||
You will need to install Git and Python. It's very likely that you already have both, but if not, one of the following commands should install them:
|
||||
|
||||
@@ -66,30 +100,71 @@ You will need to install Git and Python. It's very likely that you already have
|
||||
* Void: `sudo xbps-install -y git python3-pip`
|
||||
* Solus: `sudo eopkg -y install git python3`
|
||||
* Sabayon: `sudo equo install dev-vcs/git dev-python/pip`
|
||||
* Gentoo: `sudo emerge dev-vcs/git dev-python/pip`
|
||||
|
||||
Install the global CLI to bootstrap your system:
|
||||
#### Installation
|
||||
|
||||
`python3 -m pip install --user qmk` (on Arch-based distros you can also try the `qmk` package from AUR (**note**: it's maintained by a community member): `yay -S qmk`)
|
||||
Install the QMK CLI by running:
|
||||
|
||||
### FreeBSD
|
||||
python3 -m pip install --user qmk
|
||||
|
||||
#### Community Packages
|
||||
|
||||
These packages are maintained by community members, so may not be up to date or completely functional. If you encounter problems, please report them to their respective maintainers.
|
||||
|
||||
On Arch-based distros you can install the CLI from the official repositories (NOTE: at the time of writing this package marks some dependencies as optional that should not be):
|
||||
|
||||
sudo pacman -S qmk
|
||||
|
||||
You can also try the `qmk-git` package from AUR:
|
||||
|
||||
yay -S qmk-git
|
||||
|
||||
### ** FreeBSD **
|
||||
|
||||
#### Prerequisites
|
||||
|
||||
You will need to install Git and Python. It's possible that you already have both, but if not, run the following commands to install them:
|
||||
|
||||
pkg install git python3
|
||||
|
||||
Make sure that `$HOME/.local/bin` is added to your `$PATH` so that locally install Python packages are available.
|
||||
Make sure that `$HOME/.local/bin` is added to your `$PATH` so that locally installed Python packages are available.
|
||||
|
||||
Once installed, you can install QMK CLI:
|
||||
#### Installation
|
||||
|
||||
Install the QMK CLI by running:
|
||||
|
||||
python3 -m pip install --user qmk
|
||||
|
||||
<!-- tabs:end -->
|
||||
|
||||
## 3. Run QMK Setup :id=set-up-qmk
|
||||
|
||||
<!-- tabs:start -->
|
||||
|
||||
### ** Windows **
|
||||
|
||||
After installing QMK you can set it up with this command:
|
||||
|
||||
qmk setup
|
||||
|
||||
In most situations you will want to answer Yes to all of the prompts.
|
||||
In most situations you will want to answer `y` to all of the prompts.
|
||||
|
||||
### ** macOS **
|
||||
|
||||
After installing QMK you can set it up with this command:
|
||||
|
||||
qmk setup
|
||||
|
||||
In most situations you will want to answer `y` to all of the prompts.
|
||||
|
||||
### ** Linux/WSL **
|
||||
|
||||
After installing QMK you can set it up with this command:
|
||||
|
||||
qmk setup
|
||||
|
||||
In most situations you will want to answer `y` to all of the prompts.
|
||||
|
||||
?>**Note on Debian, Ubuntu and their derivatives**:
|
||||
It's possible, that you will get an error saying something like: `bash: qmk: command not found`.
|
||||
@@ -97,12 +172,22 @@ This is due to a [bug](https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=839155)
|
||||
Sadly, Ubuntu reitroduced this bug and is [yet to fix it](https://bugs.launchpad.net/ubuntu/+source/bash/+bug/1588562).
|
||||
Luckily, the fix is easy. Run this as your user: `echo 'PATH="$HOME/.local/bin:$PATH"' >> $HOME/.bashrc && source $HOME/.bashrc`
|
||||
|
||||
### ** FreeBSD **
|
||||
|
||||
After installing QMK you can set it up with this command:
|
||||
|
||||
qmk setup
|
||||
|
||||
In most situations you will want to answer `y` to all of the prompts.
|
||||
|
||||
?>**Note on FreeBSD**:
|
||||
It is suggested to run `qmk setup` as a non-`root` user to start with, but this will likely identify packages that need to be installed to your
|
||||
base system using `pkg`. However the installation will probably fail when run as an unprivileged user.
|
||||
To manually install the base dependencies, run `./util/qmk_install.sh` either as `root`, or with `sudo`.
|
||||
Once that completes, re-run `qmk setup` to complete the setup and checks.
|
||||
|
||||
<!-- tabs:end -->
|
||||
|
||||
?> If you already know [how to use GitHub](getting_started_github.md), we recommend that you create your own fork and use `qmk setup <github_username>/qmk_firmware` to clone your personal fork. If you don't know what that means you can safely ignore this message.
|
||||
|
||||
## 4. Test Your Build Environment
|
||||
|
@@ -61,4 +61,4 @@ To implement your own version of this function, in your keyboard's source files:
|
||||
void board_init(void) {
|
||||
// initialize anything that requires ChibiOS
|
||||
}
|
||||
```
|
||||
```
|
||||
|
@@ -27,3 +27,20 @@
|
||||
.markdown-section hr, .search {
|
||||
border-bottom: 1px solid #777 !important;
|
||||
}
|
||||
|
||||
|
||||
:root {
|
||||
--docsifytabs-border-color: #555;
|
||||
--docsifytabs-tab-highlight-color: var(--theme-color,#ea6f5a);
|
||||
|
||||
--docsifytabs-tab-background: #444;
|
||||
--docsifytabs-tab-background-active: #3f3f3f;
|
||||
}
|
||||
|
||||
.docsify-tabs__tab:focus {
|
||||
outline: none !important;
|
||||
}
|
||||
|
||||
.docsify-tabs__content .anchor {
|
||||
transition: none;
|
||||
}
|
||||
|
@@ -28,3 +28,20 @@
|
||||
.markdown-section pre {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
|
||||
:root {
|
||||
--docsifytabs-border-color: #ddd;
|
||||
--docsifytabs-tab-highlight-color: var(--theme-color, #0074d9);
|
||||
|
||||
--docsifytabs-tab-background: #f8f8f8;
|
||||
--docsifytabs-tab-background-active: transparent;
|
||||
}
|
||||
|
||||
.docsify-tabs__tab:focus {
|
||||
outline: none !important;
|
||||
}
|
||||
|
||||
.docsify-tabs__content .anchor {
|
||||
transition: none;
|
||||
}
|
||||
|
@@ -46,6 +46,7 @@ To use these, simply `#include` the corresponding [header file](https://github.c
|
||||
|Norwegian |`keymap_norwegian.h` |
|
||||
|Polish |`keymap_polish.h` |
|
||||
|Portuguese |`keymap_portuguese.h` |
|
||||
|Portuguese (macOS, ISO) |`keymap_portuguese_osx_iso.h` |
|
||||
|Portuguese (Brazil) |`keymap_br_abnt2.h` |
|
||||
|Romanian |`keymap_romanian.h` |
|
||||
|Russian* |`keymap_russian.h` |
|
||||
|
@@ -33,10 +33,11 @@ The default setting is 280 µs, which should work for most cases, but this can b
|
||||
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:
|
||||
|
||||
| Byte order | Known devices |
|
||||
|-----------------------------------|-------------------------------|
|
||||
| `WS2812_BYTE_ORDER_GRB` (default) | Most WS2812's, SK6812, SK6805 |
|
||||
| `WS2812_BYTE_ORDER_RGB` | WS2812B-2020 |
|
||||
|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 |
|
||||
|
||||
|
||||
### Bitbang
|
||||
|
@@ -1,5 +1,3 @@
|
||||
#ifndef LCD_H
|
||||
#define LCD_H
|
||||
/*************************************************************************
|
||||
Title : C include file for the HD44780U LCD library (lcd.c)
|
||||
Author: Peter Fleury <pfleury@gmx.ch> http://tinyurl.com/peterfleury
|
||||
@@ -43,6 +41,8 @@
|
||||
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <inttypes.h>
|
||||
#include <avr/pgmspace.h>
|
||||
|
||||
@@ -346,5 +346,3 @@ extern void lcd_data(uint8_t data);
|
||||
#define lcd_puts_P(__s) lcd_puts_p(PSTR(__s))
|
||||
|
||||
/**@}*/
|
||||
|
||||
#endif // LCD_H
|
||||
|
@@ -17,8 +17,7 @@
|
||||
* GitHub repository: https://github.com/g4lvanix/I2C-master-lib
|
||||
*/
|
||||
|
||||
#ifndef I2C_MASTER_H
|
||||
#define I2C_MASTER_H
|
||||
#pragma once
|
||||
|
||||
#define I2C_READ 0x01
|
||||
#define I2C_WRITE 0x00
|
||||
@@ -42,5 +41,3 @@ i2c_status_t i2c_receive(uint8_t address, uint8_t* data, uint16_t length, uint16
|
||||
i2c_status_t i2c_writeReg(uint8_t devaddr, uint8_t regaddr, const uint8_t* data, uint16_t length, uint16_t timeout);
|
||||
i2c_status_t i2c_readReg(uint8_t devaddr, uint8_t regaddr, uint8_t* data, uint16_t length, uint16_t timeout);
|
||||
void i2c_stop(void);
|
||||
|
||||
#endif // I2C_MASTER_H
|
||||
|
@@ -20,8 +20,7 @@
|
||||
Read or write to the necessary buffer according to the opperation.
|
||||
*/
|
||||
|
||||
#ifndef I2C_SLAVE_H
|
||||
#define I2C_SLAVE_H
|
||||
#pragma once
|
||||
|
||||
#define I2C_SLAVE_REG_COUNT 30
|
||||
|
||||
@@ -29,5 +28,3 @@ extern volatile uint8_t i2c_slave_reg[I2C_SLAVE_REG_COUNT];
|
||||
|
||||
void i2c_slave_init(uint8_t address);
|
||||
void i2c_slave_stop(void);
|
||||
|
||||
#endif // I2C_SLAVE_H
|
||||
|
@@ -1,5 +1,4 @@
|
||||
#ifndef SSD1306_H
|
||||
#define SSD1306_H
|
||||
#pragma once
|
||||
|
||||
#include <stdbool.h>
|
||||
#include <stdio.h>
|
||||
@@ -86,5 +85,3 @@ void matrix_write_char(struct CharacterMatrix *matrix, uint8_t c);
|
||||
void matrix_write(struct CharacterMatrix *matrix, const char *data);
|
||||
void matrix_write_P(struct CharacterMatrix *matrix, const char *data);
|
||||
void matrix_render(struct CharacterMatrix *matrix);
|
||||
|
||||
#endif
|
||||
|
@@ -115,11 +115,17 @@ bool spi_start(pin_t slavePin, bool lsbFirst, uint8_t mode, uint16_t divisor) {
|
||||
return true;
|
||||
}
|
||||
|
||||
spi_status_t spi_write(uint8_t data) { return spi_transmit(&data, 1); }
|
||||
spi_status_t spi_write(uint8_t data) {
|
||||
uint8_t rxData;
|
||||
spiExchange(&SPI_DRIVER, 1, &data, &rxData);
|
||||
|
||||
return rxData;
|
||||
}
|
||||
|
||||
spi_status_t spi_read(void) {
|
||||
uint8_t data = 0;
|
||||
spi_receive(&data, 1);
|
||||
spiReceive(&SPI_DRIVER, 1, &data);
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
|
@@ -97,6 +97,10 @@ void ws2812_setleds(LED_TYPE *ledarray, uint16_t leds) {
|
||||
sendByte(ledarray[i].r);
|
||||
sendByte(ledarray[i].g);
|
||||
sendByte(ledarray[i].b);
|
||||
#elif (WS2812_BYTE_ORDER == WS2812_BYTE_ORDER_BGR)
|
||||
sendByte(ledarray[i].b);
|
||||
sendByte(ledarray[i].g);
|
||||
sendByte(ledarray[i].r);
|
||||
#endif
|
||||
|
||||
#ifdef RGBW
|
||||
|
@@ -180,6 +180,43 @@
|
||||
* @return The bit index
|
||||
*/
|
||||
# define WS2812_BLUE_BIT(led, bit) WS2812_BIT((led), 2, (bit))
|
||||
|
||||
#elif (WS2812_BYTE_ORDER == WS2812_BYTE_ORDER_BGR)
|
||||
/**
|
||||
* @brief Determine the index in @ref ws2812_frame_buffer "the frame buffer" of a given red bit
|
||||
*
|
||||
* @note The red byte is the middle byte in the color packet
|
||||
*
|
||||
* @param[in] led: The led index [0, @ref RGBLED_NUM)
|
||||
* @param[in] bit: The bit number [0, 7]
|
||||
*
|
||||
* @return The bit index
|
||||
*/
|
||||
# define WS2812_RED_BIT(led, bit) WS2812_BIT((led), 2, (bit))
|
||||
|
||||
/**
|
||||
* @brief Determine the index in @ref ws2812_frame_buffer "the frame buffer" of a given green bit
|
||||
*
|
||||
* @note The red byte is the first byte in the color packet
|
||||
*
|
||||
* @param[in] led: The led index [0, @ref RGBLED_NUM)
|
||||
* @param[in] bit: The bit number [0, 7]
|
||||
*
|
||||
* @return The bit index
|
||||
*/
|
||||
# define WS2812_GREEN_BIT(led, bit) WS2812_BIT((led), 1, (bit))
|
||||
|
||||
/**
|
||||
* @brief Determine the index in @ref ws2812_frame_buffer "the frame buffer" of a given blue bit
|
||||
*
|
||||
* @note The red byte is the last byte in the color packet
|
||||
*
|
||||
* @param[in] led: The led index [0, @ref RGBLED_NUM)
|
||||
* @param[in] bit: The bit index [0, 7]
|
||||
*
|
||||
* @return The bit index
|
||||
*/
|
||||
# define WS2812_BLUE_BIT(led, bit) WS2812_BIT((led), 0, (bit))
|
||||
#endif
|
||||
|
||||
/* --- PRIVATE VARIABLES ---------------------------------------------------- */
|
||||
|
@@ -70,6 +70,10 @@ static void set_led_color_rgb(LED_TYPE color, int pos) {
|
||||
for (int j = 0; j < 4; j++) tx_start[BYTES_FOR_LED * pos + j] = get_protocol_eq(color.r, j);
|
||||
for (int j = 0; j < 4; j++) tx_start[BYTES_FOR_LED * pos + BYTES_FOR_LED_BYTE + j] = get_protocol_eq(color.g, j);
|
||||
for (int j = 0; j < 4; j++) tx_start[BYTES_FOR_LED * pos + BYTES_FOR_LED_BYTE * 2 + j] = get_protocol_eq(color.b, j);
|
||||
#elif (WS2812_BYTE_ORDER == WS2812_BYTE_ORDER_BGR)
|
||||
for (int j = 0; j < 4; j++) tx_start[BYTES_FOR_LED * pos + j] = get_protocol_eq(color.b, j);
|
||||
for (int j = 0; j < 4; j++) tx_start[BYTES_FOR_LED * pos + BYTES_FOR_LED_BYTE + j] = get_protocol_eq(color.g, j);
|
||||
for (int j = 0; j < 4; j++) tx_start[BYTES_FOR_LED * pos + BYTES_FOR_LED_BYTE * 2 + j] = get_protocol_eq(color.r, j);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
@@ -403,4 +403,4 @@ typedef union DRVREG_CTRL5 { /* register 0x1F */
|
||||
uint8_t C5_LRA_AUTO_OPEN_LOOP : 1;
|
||||
uint8_t C5_AUTO_OL_CNT : 2;
|
||||
} Bits;
|
||||
} DRVREG_CTRL5;
|
||||
} DRVREG_CTRL5;
|
||||
|
@@ -1,3 +1,3 @@
|
||||
GFXINC += drivers/ugfx/gdisp/is31fl3731c
|
||||
GFXSRC += drivers/ugfx/gdisp/is31fl3731c/gdisp_is31fl3731c.c
|
||||
GDISP_DRIVER_LIST += GDISPVMT_IS31FL3731C_QMK
|
||||
GDISP_DRIVER_LIST += GDISPVMT_IS31FL3731C_QMK
|
||||
|
17
keyboards/0_sixty/0_sixty.c
Normal file
17
keyboards/0_sixty/0_sixty.c
Normal file
@@ -0,0 +1,17 @@
|
||||
/* Copyright 2020 Vinam Arora <vinam@posteo.de>
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include "0_sixty.h"
|
97
keyboards/0_sixty/0_sixty.h
Normal file
97
keyboards/0_sixty/0_sixty.h
Normal file
@@ -0,0 +1,97 @@
|
||||
/* Copyright 2020 Vinam Arora <vinam@posteo.de>
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "quantum.h"
|
||||
|
||||
// This a shortcut to help you visually see your layout.
|
||||
// The first section contains all of the arguements
|
||||
// The second converts the arguments into a two-dimensional array
|
||||
#define LAYOUT_ortho_5x12( \
|
||||
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, k36, k37, k38, k39, k3a, k3b, \
|
||||
k40, k41, k42, k43, k44, k45, k46, k47, k48, k49, k4a, k4b \
|
||||
) \
|
||||
{ \
|
||||
{ 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, k36, k37, k38, k39, k3a, k3b }, \
|
||||
{ k40, k41, k42, k43, k44, k45, k46, k47, k48, k49, k4a, k4b } \
|
||||
}
|
||||
|
||||
#define LAYOUT_1x2uL( \
|
||||
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, k36, k37, k38, k39, k3a, k3b, \
|
||||
k40, k41, k42, k43, k45, k46, k47, k48, k49, k4a, k4b \
|
||||
) \
|
||||
{ \
|
||||
{ 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, k36, k37, k38, k39, k3a, k3b }, \
|
||||
{ k40, k41, k42, k43, k45, k45, k46, k47, k48, k49, k4a, k4b } \
|
||||
}
|
||||
|
||||
#define LAYOUT_1x2uC( \
|
||||
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, k36, k37, k38, k39, k3a, k3b, \
|
||||
k40, k41, k42, k43, k44, k46, k47, k48, k49, k4a, k4b \
|
||||
) \
|
||||
{ \
|
||||
{ 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, k36, k37, k38, k39, k3a, k3b }, \
|
||||
{ k40, k41, k42, k43, k44, k46, k46, k47, k48, k49, k4a, k4b } \
|
||||
}
|
||||
|
||||
#define LAYOUT_1x2uR( \
|
||||
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, k36, k37, k38, k39, k3a, k3b, \
|
||||
k40, k41, k42, k43, k44, k45, k46, k48, k49, k4a, k4b \
|
||||
) \
|
||||
{ \
|
||||
{ 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, k36, k37, k38, k39, k3a, k3b }, \
|
||||
{ k40, k41, k42, k43, k44, k45, k46, k46, k48, k49, k4a, k4b } \
|
||||
}
|
||||
|
||||
#define LAYOUT_2x2uC( \
|
||||
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, k36, k37, k38, k39, k3a, k3b, \
|
||||
k40, k41, k42, k43, k45, k46, k48, k49, k4a, k4b \
|
||||
) \
|
||||
{ \
|
||||
{ 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, k36, k37, k38, k39, k3a, k3b }, \
|
||||
{ k40, k41, k42, k43, k45, k45, k46, k46, k48, k49, k4a, k4b } \
|
||||
}
|
68
keyboards/0_sixty/config.h
Normal file
68
keyboards/0_sixty/config.h
Normal file
@@ -0,0 +1,68 @@
|
||||
/* Copyright 2020 Vinam Arora <vinam@posteo.de>
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "config_common.h"
|
||||
|
||||
/* USB Device descriptor parameter */
|
||||
|
||||
#define VENDOR_ID 0x7654
|
||||
#define PRODUCT_ID 0x0060
|
||||
#define DEVICE_VER 0x0001
|
||||
|
||||
#define MANUFACTURER ven0mtr0n
|
||||
#define PRODUCT 0-Sixty
|
||||
|
||||
/* key matrix size */
|
||||
// Rows are doubled-up
|
||||
#define MATRIX_ROWS 5
|
||||
#define MATRIX_COLS 12
|
||||
#define MATRIX_ROW_PINS { B1, F7, F6, F5, F4 }
|
||||
#define MATRIX_COL_PINS { D3, D2, D1, D0, D4, C6, D7, E6, B4, B5, B3, B2 }
|
||||
#define UNUSED_PINS
|
||||
|
||||
/* COL2ROW or ROW2COL */
|
||||
#define DIODE_DIRECTION COL2ROW
|
||||
|
||||
/* Set 0 if debouncing isn't needed */
|
||||
#define DEBOUNCE 5
|
||||
|
||||
/* indicator leds */
|
||||
#define LED_CAPS_LOCK_PIN B6
|
||||
|
||||
/* 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
|
||||
|
||||
/*
|
||||
* Feature disable options
|
||||
* These options are also useful to firmware size reduction.
|
||||
*/
|
||||
|
||||
/* disable debug print */
|
||||
// #define NO_DEBUG
|
||||
|
||||
/* disable print */
|
||||
// #define NO_PRINT
|
||||
|
||||
/* disable action features */
|
||||
//#define NO_ACTION_LAYER
|
||||
//#define NO_ACTION_TAPPING
|
||||
//#define NO_ACTION_ONESHOT
|
||||
//#define NO_ACTION_MACRO
|
||||
//#define NO_ACTION_FUNCTION
|
344
keyboards/0_sixty/info.json
Normal file
344
keyboards/0_sixty/info.json
Normal file
@@ -0,0 +1,344 @@
|
||||
{
|
||||
"keyboard_name": "0-Sixty",
|
||||
"url": "",
|
||||
"maintainer": "vinamarora8",
|
||||
"width": 12,
|
||||
"height": 5,
|
||||
"layouts": {
|
||||
"LAYOUT_1x2uC": {
|
||||
"layout": [
|
||||
{"x": 0, "y": 0},
|
||||
{"x": 1, "y": 0},
|
||||
{"x": 2, "y": 0},
|
||||
{"x": 3, "y": 0},
|
||||
{"x": 4, "y": 0},
|
||||
{"x": 5, "y": 0},
|
||||
{"x": 6, "y": 0},
|
||||
{"x": 7, "y": 0},
|
||||
{"x": 8, "y": 0},
|
||||
{"x": 9, "y": 0},
|
||||
{"x": 10, "y": 0},
|
||||
{"x": 11, "y": 0},
|
||||
|
||||
{"x": 0, "y": 1},
|
||||
{"x": 1, "y": 1},
|
||||
{"x": 2, "y": 1},
|
||||
{"x": 3, "y": 1},
|
||||
{"x": 4, "y": 1},
|
||||
{"x": 5, "y": 1},
|
||||
{"x": 6, "y": 1},
|
||||
{"x": 7, "y": 1},
|
||||
{"x": 8, "y": 1},
|
||||
{"x": 9, "y": 1},
|
||||
{"x": 10, "y": 1},
|
||||
{"x": 11, "y": 1},
|
||||
|
||||
{"x": 0, "y": 2},
|
||||
{"x": 1, "y": 2},
|
||||
{"x": 2, "y": 2},
|
||||
{"x": 3, "y": 2},
|
||||
{"x": 4, "y": 2},
|
||||
{"x": 5, "y": 2},
|
||||
{"x": 6, "y": 2},
|
||||
{"x": 7, "y": 2},
|
||||
{"x": 8, "y": 2},
|
||||
{"x": 9, "y": 2},
|
||||
{"x": 10, "y": 2},
|
||||
{"x": 11, "y": 2},
|
||||
|
||||
{"x": 0, "y": 3},
|
||||
{"x": 1, "y": 3},
|
||||
{"x": 2, "y": 3},
|
||||
{"x": 3, "y": 3},
|
||||
{"x": 4, "y": 3},
|
||||
{"x": 5, "y": 3},
|
||||
{"x": 6, "y": 3},
|
||||
{"x": 7, "y": 3},
|
||||
{"x": 8, "y": 3},
|
||||
{"x": 9, "y": 3},
|
||||
{"x": 10, "y": 3},
|
||||
{"x": 11, "y": 3},
|
||||
|
||||
{"x": 0, "y": 4},
|
||||
{"x": 1, "y": 4},
|
||||
{"x": 2, "y": 4},
|
||||
{"x": 3, "y": 4},
|
||||
{"x": 4, "y": 4},
|
||||
{"x": 5, "y": 4, "w": 2},
|
||||
{"x": 7, "y": 4},
|
||||
{"x": 8, "y": 4},
|
||||
{"x": 9, "y": 4},
|
||||
{"x": 10, "y": 4},
|
||||
{"x": 11, "y": 4}
|
||||
]
|
||||
},
|
||||
"LAYOUT_2x2uC": {
|
||||
"layout": [
|
||||
{"x": 0, "y": 0},
|
||||
{"x": 1, "y": 0},
|
||||
{"x": 2, "y": 0},
|
||||
{"x": 3, "y": 0},
|
||||
{"x": 4, "y": 0},
|
||||
{"x": 5, "y": 0},
|
||||
{"x": 6, "y": 0},
|
||||
{"x": 7, "y": 0},
|
||||
{"x": 8, "y": 0},
|
||||
{"x": 9, "y": 0},
|
||||
{"x": 10, "y": 0},
|
||||
{"x": 11, "y": 0},
|
||||
|
||||
{"x": 0, "y": 1},
|
||||
{"x": 1, "y": 1},
|
||||
{"x": 2, "y": 1},
|
||||
{"x": 3, "y": 1},
|
||||
{"x": 4, "y": 1},
|
||||
{"x": 5, "y": 1},
|
||||
{"x": 6, "y": 1},
|
||||
{"x": 7, "y": 1},
|
||||
{"x": 8, "y": 1},
|
||||
{"x": 9, "y": 1},
|
||||
{"x": 10, "y": 1},
|
||||
{"x": 11, "y": 1},
|
||||
|
||||
{"x": 0, "y": 2},
|
||||
{"x": 1, "y": 2},
|
||||
{"x": 2, "y": 2},
|
||||
{"x": 3, "y": 2},
|
||||
{"x": 4, "y": 2},
|
||||
{"x": 5, "y": 2},
|
||||
{"x": 6, "y": 2},
|
||||
{"x": 7, "y": 2},
|
||||
{"x": 8, "y": 2},
|
||||
{"x": 9, "y": 2},
|
||||
{"x": 10, "y": 2},
|
||||
{"x": 11, "y": 2},
|
||||
|
||||
{"x": 0, "y": 3},
|
||||
{"x": 1, "y": 3},
|
||||
{"x": 2, "y": 3},
|
||||
{"x": 3, "y": 3},
|
||||
{"x": 4, "y": 3},
|
||||
{"x": 5, "y": 3},
|
||||
{"x": 6, "y": 3},
|
||||
{"x": 7, "y": 3},
|
||||
{"x": 8, "y": 3},
|
||||
{"x": 9, "y": 3},
|
||||
{"x": 10, "y": 3},
|
||||
{"x": 11, "y": 3},
|
||||
|
||||
{"x": 0, "y": 4},
|
||||
{"x": 1, "y": 4},
|
||||
{"x": 2, "y": 4},
|
||||
{"x": 3, "y": 4},
|
||||
{"x": 4, "y": 4, "w": 2},
|
||||
{"x": 6, "y": 4, "w": 2},
|
||||
{"x": 8, "y": 4},
|
||||
{"x": 9, "y": 4},
|
||||
{"x": 10, "y": 4},
|
||||
{"x": 11, "y": 4}
|
||||
]
|
||||
},
|
||||
"LAYOUT_ortho_5x12": {
|
||||
"layout": [
|
||||
{"x": 0, "y": 0},
|
||||
{"x": 1, "y": 0},
|
||||
{"x": 2, "y": 0},
|
||||
{"x": 3, "y": 0},
|
||||
{"x": 4, "y": 0},
|
||||
{"x": 5, "y": 0},
|
||||
{"x": 6, "y": 0},
|
||||
{"x": 7, "y": 0},
|
||||
{"x": 8, "y": 0},
|
||||
{"x": 9, "y": 0},
|
||||
{"x": 10, "y": 0},
|
||||
{"x": 11, "y": 0},
|
||||
|
||||
{"x": 0, "y": 1},
|
||||
{"x": 1, "y": 1},
|
||||
{"x": 2, "y": 1},
|
||||
{"x": 3, "y": 1},
|
||||
{"x": 4, "y": 1},
|
||||
{"x": 5, "y": 1},
|
||||
{"x": 6, "y": 1},
|
||||
{"x": 7, "y": 1},
|
||||
{"x": 8, "y": 1},
|
||||
{"x": 9, "y": 1},
|
||||
{"x": 10, "y": 1},
|
||||
{"x": 11, "y": 1},
|
||||
|
||||
{"x": 0, "y": 2},
|
||||
{"x": 1, "y": 2},
|
||||
{"x": 2, "y": 2},
|
||||
{"x": 3, "y": 2},
|
||||
{"x": 4, "y": 2},
|
||||
{"x": 5, "y": 2},
|
||||
{"x": 6, "y": 2},
|
||||
{"x": 7, "y": 2},
|
||||
{"x": 8, "y": 2},
|
||||
{"x": 9, "y": 2},
|
||||
{"x": 10, "y": 2},
|
||||
{"x": 11, "y": 2},
|
||||
|
||||
{"x": 0, "y": 3},
|
||||
{"x": 1, "y": 3},
|
||||
{"x": 2, "y": 3},
|
||||
{"x": 3, "y": 3},
|
||||
{"x": 4, "y": 3},
|
||||
{"x": 5, "y": 3},
|
||||
{"x": 6, "y": 3},
|
||||
{"x": 7, "y": 3},
|
||||
{"x": 8, "y": 3},
|
||||
{"x": 9, "y": 3},
|
||||
{"x": 10, "y": 3},
|
||||
{"x": 11, "y": 3},
|
||||
|
||||
{"x": 0, "y": 4},
|
||||
{"x": 1, "y": 4},
|
||||
{"x": 2, "y": 4},
|
||||
{"x": 3, "y": 4},
|
||||
{"x": 4, "y": 4},
|
||||
{"x": 5, "y": 4},
|
||||
{"x": 6, "y": 4},
|
||||
{"x": 7, "y": 4},
|
||||
{"x": 8, "y": 4},
|
||||
{"x": 9, "y": 4},
|
||||
{"x": 10, "y": 4},
|
||||
{"x": 11, "y": 4}
|
||||
]
|
||||
},
|
||||
"LAYOUT_1x2uR": {
|
||||
"layout": [
|
||||
{"x": 0, "y": 0},
|
||||
{"x": 1, "y": 0},
|
||||
{"x": 2, "y": 0},
|
||||
{"x": 3, "y": 0},
|
||||
{"x": 4, "y": 0},
|
||||
{"x": 5, "y": 0},
|
||||
{"x": 6, "y": 0},
|
||||
{"x": 7, "y": 0},
|
||||
{"x": 8, "y": 0},
|
||||
{"x": 9, "y": 0},
|
||||
{"x": 10, "y": 0},
|
||||
{"x": 11, "y": 0},
|
||||
|
||||
{"x": 0, "y": 1},
|
||||
{"x": 1, "y": 1},
|
||||
{"x": 2, "y": 1},
|
||||
{"x": 3, "y": 1},
|
||||
{"x": 4, "y": 1},
|
||||
{"x": 5, "y": 1},
|
||||
{"x": 6, "y": 1},
|
||||
{"x": 7, "y": 1},
|
||||
{"x": 8, "y": 1},
|
||||
{"x": 9, "y": 1},
|
||||
{"x": 10, "y": 1},
|
||||
{"x": 11, "y": 1},
|
||||
|
||||
{"x": 0, "y": 2},
|
||||
{"x": 1, "y": 2},
|
||||
{"x": 2, "y": 2},
|
||||
{"x": 3, "y": 2},
|
||||
{"x": 4, "y": 2},
|
||||
{"x": 5, "y": 2},
|
||||
{"x": 6, "y": 2},
|
||||
{"x": 7, "y": 2},
|
||||
{"x": 8, "y": 2},
|
||||
{"x": 9, "y": 2},
|
||||
{"x": 10, "y": 2},
|
||||
{"x": 11, "y": 2},
|
||||
|
||||
{"x": 0, "y": 3},
|
||||
{"x": 1, "y": 3},
|
||||
{"x": 2, "y": 3},
|
||||
{"x": 3, "y": 3},
|
||||
{"x": 4, "y": 3},
|
||||
{"x": 5, "y": 3},
|
||||
{"x": 6, "y": 3},
|
||||
{"x": 7, "y": 3},
|
||||
{"x": 8, "y": 3},
|
||||
{"x": 9, "y": 3},
|
||||
{"x": 10, "y": 3},
|
||||
{"x": 11, "y": 3},
|
||||
|
||||
{"x": 0, "y": 4},
|
||||
{"x": 1, "y": 4},
|
||||
{"x": 2, "y": 4},
|
||||
{"x": 3, "y": 4},
|
||||
{"x": 4, "y": 4},
|
||||
{"x": 5, "y": 4},
|
||||
{"x": 6, "y": 4, "w": 2},
|
||||
{"x": 8, "y": 4},
|
||||
{"x": 9, "y": 4},
|
||||
{"x": 10, "y": 4},
|
||||
{"x": 11, "y": 4}
|
||||
]
|
||||
},
|
||||
"LAYOUT_1x2uL": {
|
||||
"layout": [
|
||||
{"x": 0, "y": 0},
|
||||
{"x": 1, "y": 0},
|
||||
{"x": 2, "y": 0},
|
||||
{"x": 3, "y": 0},
|
||||
{"x": 4, "y": 0},
|
||||
{"x": 5, "y": 0},
|
||||
{"x": 6, "y": 0},
|
||||
{"x": 7, "y": 0},
|
||||
{"x": 8, "y": 0},
|
||||
{"x": 9, "y": 0},
|
||||
{"x": 10, "y": 0},
|
||||
{"x": 11, "y": 0},
|
||||
|
||||
{"x": 0, "y": 1},
|
||||
{"x": 1, "y": 1},
|
||||
{"x": 2, "y": 1},
|
||||
{"x": 3, "y": 1},
|
||||
{"x": 4, "y": 1},
|
||||
{"x": 5, "y": 1},
|
||||
{"x": 6, "y": 1},
|
||||
{"x": 7, "y": 1},
|
||||
{"x": 8, "y": 1},
|
||||
{"x": 9, "y": 1},
|
||||
{"x": 10, "y": 1},
|
||||
{"x": 11, "y": 1},
|
||||
|
||||
{"x": 0, "y": 2},
|
||||
{"x": 1, "y": 2},
|
||||
{"x": 2, "y": 2},
|
||||
{"x": 3, "y": 2},
|
||||
{"x": 4, "y": 2},
|
||||
{"x": 5, "y": 2},
|
||||
{"x": 6, "y": 2},
|
||||
{"x": 7, "y": 2},
|
||||
{"x": 8, "y": 2},
|
||||
{"x": 9, "y": 2},
|
||||
{"x": 10, "y": 2},
|
||||
{"x": 11, "y": 2},
|
||||
|
||||
{"x": 0, "y": 3},
|
||||
{"x": 1, "y": 3},
|
||||
{"x": 2, "y": 3},
|
||||
{"x": 3, "y": 3},
|
||||
{"x": 4, "y": 3},
|
||||
{"x": 5, "y": 3},
|
||||
{"x": 6, "y": 3},
|
||||
{"x": 7, "y": 3},
|
||||
{"x": 8, "y": 3},
|
||||
{"x": 9, "y": 3},
|
||||
{"x": 10, "y": 3},
|
||||
{"x": 11, "y": 3},
|
||||
|
||||
{"x": 0, "y": 4},
|
||||
{"x": 1, "y": 4},
|
||||
{"x": 2, "y": 4},
|
||||
{"x": 3, "y": 4},
|
||||
{"x": 4, "y": 4, "w": 2},
|
||||
{"x": 6, "y": 4},
|
||||
{"x": 7, "y": 4},
|
||||
{"x": 8, "y": 4},
|
||||
{"x": 9, "y": 4},
|
||||
{"x": 10, "y": 4},
|
||||
{"x": 11, "y": 4}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
168
keyboards/0_sixty/keymaps/default/keymap.c
Normal file
168
keyboards/0_sixty/keymaps/default/keymap.c
Normal file
@@ -0,0 +1,168 @@
|
||||
/* Copyright 2020 Vinam Arora <vinam@posteo.de>
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include QMK_KEYBOARD_H
|
||||
|
||||
enum zero_sixty_layers {
|
||||
_QWERTY,
|
||||
_COLEMAK,
|
||||
_DVORAK,
|
||||
_LOWER,
|
||||
_RAISE,
|
||||
_ADJUST
|
||||
};
|
||||
|
||||
#define QWERTY DF(_QWERTY)
|
||||
#define COLEMAK DF(_COLEMAK)
|
||||
#define DVORAK DF(_DVORAK)
|
||||
#define LOWER MO(_LOWER)
|
||||
#define RAISE MO(_RAISE)
|
||||
#define ADJUST MO(_ADJUST)
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
|
||||
/* Qwerty
|
||||
* ,-----------------------------------------------------------------------------------.
|
||||
* | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
|
||||
* |------+------+------+------+------+------+------+------+------+------+------+------|
|
||||
* | Tab | Q | W | E | R | T | Y | U | I | O | P | Del |
|
||||
* |------+------+------+------+------+-------------+------+------+------+------+------|
|
||||
* | Esc | A | S | D | F | G | H | J | K | L | ; | " |
|
||||
* |------+------+------+------+------+------|------+------+------+------+------+------|
|
||||
* | Shift| Z | X | C | V | B | N | M | , | . | / |Enter |
|
||||
* |------+------+------+------+------+------+------+------+------+------+------+------|
|
||||
* | Caps | Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right |
|
||||
* `-----------------------------------------------------------------------------------'
|
||||
*/
|
||||
[_QWERTY] = LAYOUT_ortho_5x12(
|
||||
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_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, 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_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT,
|
||||
KC_CAPS, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
|
||||
),
|
||||
|
||||
/* Colemak
|
||||
* ,-----------------------------------------------------------------------------------.
|
||||
* | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
|
||||
* |------+------+------+------+------+------+------+------+------+------+------+------|
|
||||
* | Tab | Q | W | F | P | G | J | L | U | Y | ; | Del |
|
||||
* |------+------+------+------+------+-------------+------+------+------+------+------|
|
||||
* | Esc | A | R | S | T | D | H | N | E | I | O | " |
|
||||
* |------+------+------+------+------+------|------+------+------+------+------+------|
|
||||
* | Shift| Z | X | C | V | B | K | M | , | . | / |Enter |
|
||||
* |------+------+------+------+------+------+------+------+------+------+------+------|
|
||||
* | Caps | Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right |
|
||||
* `-----------------------------------------------------------------------------------'
|
||||
*/
|
||||
[_COLEMAK] = LAYOUT_ortho_5x12(
|
||||
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_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_DEL,
|
||||
KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT,
|
||||
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT,
|
||||
KC_CAPS, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
|
||||
),
|
||||
|
||||
/* Dvorak
|
||||
* ,-----------------------------------------------------------------------------------.
|
||||
* | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
|
||||
* |------+------+------+------+------+------+------+------+------+------+------+------|
|
||||
* | Tab | " | , | . | P | Y | F | G | C | R | L | Del |
|
||||
* |------+------+------+------+------+-------------+------+------+------+------+------|
|
||||
* | Esc | A | O | E | U | I | D | H | T | N | S | / |
|
||||
* |------+------+------+------+------+------|------+------+------+------+------+------|
|
||||
* | Shift| ; | Q | J | K | X | B | M | W | V | Z |Enter |
|
||||
* |------+------+------+------+------+------+------+------+------+------+------+------|
|
||||
* | Caps | Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right |
|
||||
* `-----------------------------------------------------------------------------------'
|
||||
*/
|
||||
[_DVORAK] = LAYOUT_ortho_5x12(
|
||||
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_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_DEL,
|
||||
KC_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_SLSH,
|
||||
KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_ENT,
|
||||
KC_CAPS, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
|
||||
),
|
||||
|
||||
/* Lower
|
||||
* ,-----------------------------------------------------------------------------------.
|
||||
* | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Bksp |
|
||||
* |------+------+------+------+------+-------------+------+------+------+------+------|
|
||||
* | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Del |
|
||||
* |------+------+------+------+------+-------------+------+------+------+------+------|
|
||||
* | Del | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | |
|
||||
* |------+------+------+------+------+------|------+------+------+------+------+------|
|
||||
* | | F7 | F8 | F9 | F10 | F11 | F12 |ISO ~ |ISO | | | | |
|
||||
* |------+------+------+------+------+------+------+------+------+------+------+------|
|
||||
* | | | | | | | | Next | Vol- | Vol+ | Play |
|
||||
* `-----------------------------------------------------------------------------------'
|
||||
*/
|
||||
[_LOWER] = LAYOUT_ortho_5x12(
|
||||
KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC,
|
||||
KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL,
|
||||
KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE,
|
||||
_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,S(KC_NUHS),S(KC_NUBS),KC_HOME, KC_END, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY
|
||||
),
|
||||
|
||||
/* Raise
|
||||
* ,-----------------------------------------------------------------------------------.
|
||||
* | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
|
||||
* |------+------+------+------+------+------+------+------+------+------+------+------|
|
||||
* | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Del |
|
||||
* |------+------+------+------+------+-------------+------+------+------+------+------|
|
||||
* | Del | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ |
|
||||
* |------+------+------+------+------+------|------+------+------+------+------+------|
|
||||
* | | F7 | F8 | F9 | F10 | F11 | F12 |ISO # |ISO / | | | |
|
||||
* |------+------+------+------+------+------+------+------+------+------+------+------|
|
||||
* | | | | | | | | Next | Vol- | Vol+ | Play |
|
||||
* `-----------------------------------------------------------------------------------'
|
||||
*/
|
||||
[_RAISE] = LAYOUT_ortho_5x12(
|
||||
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_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL,
|
||||
KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS,
|
||||
_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NUHS, KC_NUBS, KC_PGUP, KC_PGDN, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY
|
||||
),
|
||||
|
||||
/* Adjust
|
||||
* ,-----------------------------------------------------------------------------------.
|
||||
* | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 |
|
||||
* |------+------+------+------+------+------+------+------+------+------+------+------|
|
||||
* | | Reset| | | | | | | | | | Del |
|
||||
* |------+------+------+------+------+-------------+------+------+------+------+------|
|
||||
* | | | | | | | |Qwerty|Colemk|Dvorak| | |
|
||||
* |------+------+------+------+------+------|------+------+------+------+------+------|
|
||||
* | | | | | | | | | | | | |
|
||||
* |------+------+------+------+------+------+------+------+------+------+------+------|
|
||||
* | | | | | | | | | | | |
|
||||
* `-----------------------------------------------------------------------------------'
|
||||
*/
|
||||
[_ADJUST] = LAYOUT_ortho_5x12(
|
||||
KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,
|
||||
_______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL,
|
||||
_______, _______, _______, _______, _______, _______, _______, QWERTY, COLEMAK, DVORAK, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
|
||||
)
|
||||
|
||||
|
||||
};
|
||||
|
||||
layer_state_t layer_state_set_user(layer_state_t state) {
|
||||
return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST);
|
||||
}
|
1
keyboards/0_sixty/keymaps/default/readme.md
Normal file
1
keyboards/0_sixty/keymaps/default/readme.md
Normal file
@@ -0,0 +1 @@
|
||||
# The default 0-Sixty layout - largely based on the Preonic's and Planck's
|
59
keyboards/0_sixty/keymaps/ven0mtr0n/keymap.c
Normal file
59
keyboards/0_sixty/keymaps/ven0mtr0n/keymap.c
Normal file
@@ -0,0 +1,59 @@
|
||||
/* Copyright 2020 Vinam Arora <vinam@posteo.de>
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include 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, _______, _______ ,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
|
||||
),
|
||||
|
||||
};
|
1
keyboards/0_sixty/keymaps/ven0mtr0n/readme.md
Normal file
1
keyboards/0_sixty/keymaps/ven0mtr0n/readme.md
Normal file
@@ -0,0 +1 @@
|
||||
# Keymap used by vinam. Keeps changing ofcourse :3
|
1
keyboards/0_sixty/keymaps/ven0mtr0n/rules.mk
Normal file
1
keyboards/0_sixty/keymaps/ven0mtr0n/rules.mk
Normal file
@@ -0,0 +1 @@
|
||||
MOUSEKEY_ENABLE = yes
|
116
keyboards/0_sixty/keymaps/via/keymap.c
Normal file
116
keyboards/0_sixty/keymaps/via/keymap.c
Normal file
@@ -0,0 +1,116 @@
|
||||
/* Copyright 2020 Vinam Arora <vinam@posteo.de>
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include QMK_KEYBOARD_H
|
||||
|
||||
// 4 layers, because that is what VIA can support by default
|
||||
enum zero_sixty_layers {
|
||||
_QWERTY,
|
||||
_LOWER,
|
||||
_RAISE,
|
||||
_ADJUST,
|
||||
};
|
||||
|
||||
#define LOWER MO(_LOWER)
|
||||
#define RAISE MO(_RAISE)
|
||||
#define ADJUST MO(_ADJUST)
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
|
||||
/* Qwerty
|
||||
* ,-----------------------------------------------------------------------------------.
|
||||
* | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
|
||||
* |------+------+------+------+------+------+------+------+------+------+------+------|
|
||||
* | Tab | Q | W | E | R | T | Y | U | I | O | P | Del |
|
||||
* |------+------+------+------+------+-------------+------+------+------+------+------|
|
||||
* | Esc | A | S | D | F | G | H | J | K | L | ; | " |
|
||||
* |------+------+------+------+------+------|------+------+------+------+------+------|
|
||||
* | Shift| Z | X | C | V | B | N | M | , | . | / |Enter |
|
||||
* |------+------+------+------+------+------+------+------+------+------+------+------|
|
||||
* | Caps | Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right |
|
||||
* `-----------------------------------------------------------------------------------'
|
||||
*/
|
||||
[_QWERTY] = LAYOUT_ortho_5x12(
|
||||
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_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, 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_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT,
|
||||
KC_CAPS, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
|
||||
),
|
||||
|
||||
/* Lower
|
||||
* ,-----------------------------------------------------------------------------------.
|
||||
* | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Bksp |
|
||||
* |------+------+------+------+------+-------------+------+------+------+------+------|
|
||||
* | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Del |
|
||||
* |------+------+------+------+------+-------------+------+------+------+------+------|
|
||||
* | Del | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | |
|
||||
* |------+------+------+------+------+------|------+------+------+------+------+------|
|
||||
* | | F7 | F8 | F9 | F10 | F11 | F12 |ISO ~ |ISO | | | | |
|
||||
* |------+------+------+------+------+------+------+------+------+------+------+------|
|
||||
* | | | | | | | | Next | Vol- | Vol+ | Play |
|
||||
* `-----------------------------------------------------------------------------------'
|
||||
*/
|
||||
[_LOWER] = LAYOUT_ortho_5x12(
|
||||
KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC,
|
||||
KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL,
|
||||
KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE,
|
||||
_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,S(KC_NUHS),S(KC_NUBS),KC_HOME, KC_END, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, ADJUST, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY
|
||||
),
|
||||
|
||||
/* Raise
|
||||
* ,-----------------------------------------------------------------------------------.
|
||||
* | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
|
||||
* |------+------+------+------+------+------+------+------+------+------+------+------|
|
||||
* | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Del |
|
||||
* |------+------+------+------+------+-------------+------+------+------+------+------|
|
||||
* | Del | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ |
|
||||
* |------+------+------+------+------+------|------+------+------+------+------+------|
|
||||
* | | F7 | F8 | F9 | F10 | F11 | F12 |ISO # |ISO / | | | |
|
||||
* |------+------+------+------+------+------+------+------+------+------+------+------|
|
||||
* | | | | | | | | Next | Vol- | Vol+ | Play |
|
||||
* `-----------------------------------------------------------------------------------'
|
||||
*/
|
||||
[_RAISE] = LAYOUT_ortho_5x12(
|
||||
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_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL,
|
||||
KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS,
|
||||
_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NUHS, KC_NUBS, KC_PGUP, KC_PGDN, _______,
|
||||
_______, _______, _______, _______, ADJUST, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY
|
||||
),
|
||||
|
||||
/* Adjust
|
||||
* ,-----------------------------------------------------------------------------------.
|
||||
* | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 |
|
||||
* |------+------+------+------+------+------+------+------+------+------+------+------|
|
||||
* | | Reset| | | | | | | | | | Del |
|
||||
* |------+------+------+------+------+-------------+------+------+------+------+------|
|
||||
* | | | | | | | | | | | | |
|
||||
* |------+------+------+------+------+------|------+------+------+------+------+------|
|
||||
* | | | | | | | | | | | | |
|
||||
* |------+------+------+------+------+------+------+------+------+------+------+------|
|
||||
* | | | | | | | | | | | |
|
||||
* `-----------------------------------------------------------------------------------'
|
||||
*/
|
||||
[_ADJUST] = LAYOUT_ortho_5x12(
|
||||
KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,
|
||||
_______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
|
||||
),
|
||||
};
|
1
keyboards/0_sixty/keymaps/via/readme.md
Normal file
1
keyboards/0_sixty/keymaps/via/readme.md
Normal file
@@ -0,0 +1 @@
|
||||
# The default via-supported 0-Sixty layout - largely based on the Preonic's and Planck's
|
2
keyboards/0_sixty/keymaps/via/rules.mk
Normal file
2
keyboards/0_sixty/keymaps/via/rules.mk
Normal file
@@ -0,0 +1,2 @@
|
||||
VIA_ENABLE = yes
|
||||
MOUSEKEY_ENABLE = yes
|
27
keyboards/0_sixty/readme.md
Normal file
27
keyboards/0_sixty/readme.md
Normal file
@@ -0,0 +1,27 @@
|
||||
# 0-Sixty
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
0-Sixty (pronounced "zero to sixty") is a 60 key ortholinear keyboard inspired by the [Discipline](https://github.com/coseyfannitutti/discipline) and the [Preonic](https://drop.com/buy/preonic-mechanical-keyboard). It is designed as a DIY through-hole kit and uses the ProMicro as its controller.
|
||||
|
||||
[More images here](https://imgur.com/a/b0JINqX)
|
||||
|
||||
* Keyboard Maintainer: [vinamarora8](https://github.com/vinamarora8)
|
||||
* Hardware Supported: 0-Sixty PCB
|
||||
* Hardware Availability: Private Group-Buy
|
||||
|
||||
Getting the board into bootloader mode:
|
||||
|
||||
To be able to flash firmware onto this board, you'll need to bring the ProMicro into bootloader mode. Simply tap the small reset button twice. The button is placed to the right of the ProMicro.
|
||||
|
||||
Make example for this keyboard (after setting up your build environment):
|
||||
|
||||
make 0_sixty:default
|
||||
|
||||
Flashing example for this keyboard:
|
||||
|
||||
make 0_sixty: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).
|
21
keyboards/0_sixty/rules.mk
Normal file
21
keyboards/0_sixty/rules.mk
Normal file
@@ -0,0 +1,21 @@
|
||||
# MCU name
|
||||
MCU = atmega32u4
|
||||
|
||||
# Bootloader selection
|
||||
BOOTLOADER = caterina
|
||||
|
||||
# Build Options
|
||||
# change yes to no to disable
|
||||
#
|
||||
BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration
|
||||
EXTRAKEY_ENABLE = yes # Audio control and System control
|
||||
CONSOLE_ENABLE = yes # Console for debug
|
||||
COMMAND_ENABLE = yes # Commands for debug and configuration
|
||||
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
|
||||
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
|
||||
# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
|
||||
NKRO_ENABLE = yes # USB Nkey Rollover
|
||||
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
|
||||
RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
|
||||
BLUETOOTH_ENABLE = no # Enable Bluetooth
|
||||
AUDIO_ENABLE = no # Audio output
|
0
keyboards/10bleoledhub/.noci
Normal file
0
keyboards/10bleoledhub/.noci
Normal file
@@ -25,7 +25,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#define DEVICE_VER 0x0001
|
||||
#define MANUFACTURER 1upkeyboards
|
||||
#define PRODUCT 1up60hse
|
||||
#define DESCRIPTION A custom 60% keyboard
|
||||
|
||||
/* key matrix size */
|
||||
#define MATRIX_ROWS 5
|
||||
|
@@ -26,7 +26,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#define DEVICE_VER 0x0001
|
||||
#define MANUFACTURER 1upkeyboards
|
||||
#define PRODUCT 1up60hte
|
||||
#define DESCRIPTION A custom 60% keyboard
|
||||
|
||||
/* key matrix size */
|
||||
#define MATRIX_ROWS 5
|
||||
|
@@ -8,7 +8,6 @@
|
||||
#define DEVICE_VER 0x0001
|
||||
#define MANUFACTURER 1upkeyboards
|
||||
#define PRODUCT 1UP RGB Underglow PCB
|
||||
#define DESCRIPTION 60% keyboard with RGB underglow
|
||||
|
||||
/* key matrix size */
|
||||
#define MATRIX_ROWS 5
|
||||
|
@@ -25,7 +25,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#define DEVICE_VER 0x0001
|
||||
#define MANUFACTURER 1upkeyboards
|
||||
#define PRODUCT super16
|
||||
#define DESCRIPTION A 4x4 custom macropad
|
||||
|
||||
/* key matrix size */
|
||||
#define MATRIX_ROWS 4
|
||||
|
0
keyboards/1upkeyboards/sweet16/.noci
Normal file
0
keyboards/1upkeyboards/sweet16/.noci
Normal file
@@ -6,7 +6,6 @@
|
||||
#define VENDOR_ID 0x6F75 // OU
|
||||
#define MANUFACTURER 1up Keyboards
|
||||
#define PRODUCT Sweet16
|
||||
#define DESCRIPTION 4x4 grid
|
||||
|
||||
/* key matrix size */
|
||||
#define MATRIX_ROWS 4
|
||||
|
@@ -8,7 +8,6 @@
|
||||
#define DEVICE_VER 0x0002
|
||||
#define MANUFACTURER WoodKeys.click
|
||||
#define PRODUCT 2Key2Crawl
|
||||
#define DESCRIPTION ATX Keycrawl 2018
|
||||
|
||||
/* key matrix size */
|
||||
#define MATRIX_ROWS 2
|
||||
|
@@ -8,7 +8,6 @@
|
||||
#define DEVICE_VER 0x0000
|
||||
#define MANUFACTURER 8o7wer
|
||||
#define PRODUCT 30wer
|
||||
#define DESCRIPTION Gherkin style construction 30% staggered pcb kit
|
||||
|
||||
/* key matrix size */
|
||||
#define MATRIX_ROWS 3
|
||||
|
@@ -24,7 +24,6 @@
|
||||
#define DEVICE_VER 0x0F25
|
||||
#define MANUFACTURER di0ib
|
||||
#define PRODUCT The 5x5 Keyboard
|
||||
#define DESCRIPTION A split 50 key keyboard
|
||||
|
||||
#define USE_SERIAL
|
||||
/* serial.c configuration for split keyboard */
|
||||
|
@@ -25,7 +25,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#define DEVICE_VER 0x0001
|
||||
#define MANUFACTURER 40percentclub
|
||||
#define PRODUCT 4pack
|
||||
#define DESCRIPTION A 1x4 custom macropad
|
||||
|
||||
/* key matrix size */
|
||||
#define MATRIX_ROWS 1
|
||||
|
@@ -10,7 +10,6 @@
|
||||
#define DEVICE_VER 0x4444
|
||||
#define MANUFACTURER di0ib
|
||||
#define PRODUCT The 4x4 Keyboard
|
||||
#define DESCRIPTION A modular compact keyboard
|
||||
|
||||
/* key matrix size */
|
||||
#define MATRIX_ROWS 4
|
||||
|
@@ -10,7 +10,6 @@
|
||||
#define DEVICE_VER 0x05B5
|
||||
#define MANUFACTURER di0ib
|
||||
#define PRODUCT The 5x5 Keyboard
|
||||
#define DESCRIPTION A 25 or 50 or 75 key keyboard
|
||||
|
||||
/* key matrix size */
|
||||
#define MATRIX_ROWS 5
|
||||
|
@@ -24,7 +24,6 @@
|
||||
#define DEVICE_VER 0x0F61
|
||||
#define MANUFACTURER di0ib
|
||||
#define PRODUCT The 6lit Macropad
|
||||
#define DESCRIPTION A split 12 key Macropad
|
||||
|
||||
#define USE_SERIAL
|
||||
|
||||
|
@@ -24,7 +24,6 @@
|
||||
#define DEVICE_VER 0x0F00
|
||||
#define MANUFACTURER di0ib
|
||||
#define PRODUCT The foobar Keyboard
|
||||
#define DESCRIPTION A split 30 key keyboard
|
||||
|
||||
#define USE_SERIAL
|
||||
|
||||
|
@@ -8,7 +8,6 @@
|
||||
#define DEVICE_VER 0x0001
|
||||
#define MANUFACTURER 40 Percent Club
|
||||
#define PRODUCT Gherkin
|
||||
#define DESCRIPTION A 30 key ortholinear keyboard
|
||||
|
||||
/* key matrix size */
|
||||
#define MATRIX_ROWS 5
|
||||
|
@@ -2,6 +2,4 @@
|
||||
|
||||
/* USB Device descriptor parameter */
|
||||
#undef MANUFACTURER
|
||||
#undef DESCRIPTION
|
||||
#define MANUFACTURER Some Guy
|
||||
#define DESCRIPTION 30 percent disaster
|
||||
|
@@ -25,7 +25,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#define DEVICE_VER 0x4A1F
|
||||
#define MANUFACTURER di0ib
|
||||
#define PRODUCT half_n_half
|
||||
#define DESCRIPTION A small split ortholinear custom keyboard with 2 thumb buttons
|
||||
|
||||
/* key matrix size */
|
||||
#define MATRIX_ROWS 4*2
|
||||
|
@@ -24,7 +24,6 @@
|
||||
#define DEVICE_VER 0x0175
|
||||
#define MANUFACTURER di0ib
|
||||
#define PRODUCT i75
|
||||
#define DESCRIPTION i75 15x5 ortholinear keyboard
|
||||
|
||||
/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
|
||||
#define DEBOUNCE 5
|
||||
|
@@ -8,7 +8,6 @@
|
||||
#define DEVICE_VER 0x1001
|
||||
#define MANUFACTURER di0ib
|
||||
#define PRODUCT Luddite
|
||||
#define DESCRIPTION Luddite Keyboard
|
||||
|
||||
/* key matrix size */
|
||||
#define MATRIX_ROWS 8
|
||||
|
@@ -25,7 +25,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#define DEVICE_VER 0x0101
|
||||
#define MANUFACTURER di0ib
|
||||
#define PRODUCT MF68
|
||||
#define DESCRIPTION Magicforce 68 with programmable PCB replacement
|
||||
|
||||
/* key matrix size */
|
||||
#define MATRIX_ROWS 8
|
||||
|
@@ -6,10 +6,8 @@
|
||||
#undef DEVICE_VER
|
||||
#undef MANUFACTURER
|
||||
#undef PRODUCT
|
||||
#undef DESCRIPTION
|
||||
#define VENDOR_ID 0xFEED
|
||||
#define PRODUCT_ID 0x0A0C
|
||||
#define DEVICE_VER 0x0068
|
||||
#define MANUFACTURER 68Keys.io
|
||||
#define PRODUCT The 68Keys.io Keyboard
|
||||
#define DESCRIPTION A 68 keys mechanical keyboard
|
||||
|
@@ -21,10 +21,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
/* Overrides for Feather 32u4 Bluefruit */
|
||||
|
||||
/* USB Device descriptor parameter */
|
||||
#undef DESCRIPTION
|
||||
#define DESCRIPTION Magicforce 68 BLE
|
||||
|
||||
/*
|
||||
* Keyboard Matrix Assignments
|
||||
*
|
||||
|
@@ -25,7 +25,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#define DEVICE_VER 0x0001
|
||||
#define MANUFACTURER di0ib
|
||||
#define PRODUCT Nano
|
||||
#define DESCRIPTION 8 key microswitch board
|
||||
|
||||
/* key matrix size */
|
||||
#define MATRIX_ROWS 2
|
||||
|
@@ -24,7 +24,6 @@
|
||||
#define DEVICE_VER 0x9999
|
||||
#define MANUFACTURER di0ib
|
||||
#define PRODUCT The nein Keyboard
|
||||
#define DESCRIPTION 9 key macropad
|
||||
|
||||
/* key matrix size */
|
||||
#define MATRIX_ROWS 3
|
||||
|
@@ -24,7 +24,6 @@
|
||||
#define DEVICE_VER 0x0444
|
||||
#define MANUFACTURER di0ib
|
||||
#define PRODUCT The nori Keyboard
|
||||
#define DESCRIPTION A modular compact keyboard
|
||||
|
||||
/* key matrix size */
|
||||
#define MATRIX_ROWS 4
|
||||
|
122
keyboards/40percentclub/sixpack/config.h
Normal file
122
keyboards/40percentclub/sixpack/config.h
Normal file
@@ -0,0 +1,122 @@
|
||||
/*
|
||||
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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "config_common.h"
|
||||
|
||||
/* USB Device descriptor parameter */
|
||||
#define VENDOR_ID 0x3430 // "40"
|
||||
#define PRODUCT_ID 0x5350 // "SP"
|
||||
#define DEVICE_VER 0x1001
|
||||
#define MANUFACTURER di0ib
|
||||
#define PRODUCT Six Pack
|
||||
|
||||
/* key matrix size */
|
||||
#define MATRIX_ROWS 2
|
||||
#define MATRIX_COLS 3
|
||||
|
||||
/*
|
||||
* 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)
|
||||
*
|
||||
*/
|
||||
// #define MATRIX_ROW_PINS { B0 } // B0 equivalents the ground pin
|
||||
// #define MATRIX_COL_PINS { E6, D7, C6, D4 }
|
||||
#define DIRECT_PINS { \
|
||||
{ D4, C6, D7 }, \
|
||||
{ E6, B4, B5 } \
|
||||
}
|
||||
#define UNUSED_PINS { D1, D0, C4, C5, B1, B2, B3 } // TX, RX, SDA, SCL, PB1, PB2, PB3 on expansion connector
|
||||
|
||||
/* COL2ROW, ROW2COL*/
|
||||
#define DIODE_DIRECTION COL2ROW
|
||||
|
||||
/* Backlight */
|
||||
#define BACKLIGHT_BREATHING
|
||||
#define BACKLIGHT_LEVELS 6
|
||||
#define BACKLIGHT_PINS { F4, F5 } // Top Row, Bottom Row
|
||||
|
||||
// #define RGB_DI_PIN B1 // PB1 on expansion connector
|
||||
// #ifdef RGB_DI_PIN
|
||||
// #define RGBLED_NUM 16
|
||||
// #define RGBLIGHT_HUE_STEP 8
|
||||
// #define RGBLIGHT_SAT_STEP 8
|
||||
// #define RGBLIGHT_VAL_STEP 8
|
||||
// #define RGBLIGHT_LIMIT_VAL 255 /* The maximum brightness level */
|
||||
// #define RGBLIGHT_SLEEP /* If defined, the RGB lighting will be switched off when the host goes to sleep */
|
||||
// /*== all animations enable ==*/
|
||||
// #define RGBLIGHT_ANIMATIONS
|
||||
// /*== or choose 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
|
||||
// /*== customize breathing effect ==*/
|
||||
// /*==== (DEFAULT) use fixed table instead of exp() and sin() ====*/
|
||||
// #define RGBLIGHT_BREATHE_TABLE_SIZE 256 // 256(default) or 128 or 64
|
||||
// /*==== use exp() and sin() ====*/
|
||||
// #define RGBLIGHT_EFFECT_BREATHE_CENTER 1.85 // 1 to 2.7
|
||||
// #define RGBLIGHT_EFFECT_BREATHE_MAX 255 // 0 to 255
|
||||
// #endif
|
||||
|
||||
/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
|
||||
#define DEBOUNCE 5
|
||||
|
||||
/* define if matrix has ghost (lacks anti-ghosting diodes) */
|
||||
//#define MATRIX_HAS_GHOST
|
||||
|
||||
/* If defined, GRAVE_ESC will always act as ESC when CTRL is held.
|
||||
* This is userful for the Windows task manager shortcut (ctrl+shift+esc).
|
||||
*/
|
||||
// #define GRAVE_ESC_CTRL_OVERRIDE
|
||||
|
||||
/*
|
||||
* Force NKRO
|
||||
*
|
||||
* Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
|
||||
* state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
|
||||
* makefile for this to work.)
|
||||
*
|
||||
* If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
|
||||
* until the next keyboard reset.
|
||||
*
|
||||
* NKRO may prevent your keystrokes from being detected in the BIOS, but it is
|
||||
* fully operational during normal computer usage.
|
||||
*
|
||||
* For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
|
||||
* or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
|
||||
* bootmagic, NKRO mode will always be enabled until it is toggled again during a
|
||||
* power-up.
|
||||
*
|
||||
*/
|
||||
//#define FORCE_NKRO
|
||||
|
||||
|
||||
/* Bootmagic Lite key configuration */
|
||||
// #define BOOTMAGIC_LITE_ROW 0
|
||||
// #define BOOTMAGIC_LITE_COLUMN 0
|
15
keyboards/40percentclub/sixpack/info.json
Normal file
15
keyboards/40percentclub/sixpack/info.json
Normal file
@@ -0,0 +1,15 @@
|
||||
{
|
||||
"keyboard_name": "sixpack",
|
||||
"url": "https://www.40percent.club/2017/05/six-pack-11.html",
|
||||
"maintainer": "qmk",
|
||||
"width": 3,
|
||||
"height": 2,
|
||||
"layouts": {
|
||||
"LAYOUT_ortho_2x3": {
|
||||
"layout": [
|
||||
{"x":0, "y":0}, {"x":1, "y":0}, {"x":2, "y":0},
|
||||
{"x":0, "y":1}, {"x":1, "y":1}, {"x":2, "y":1}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
31
keyboards/40percentclub/sixpack/keymaps/default/keymap.c
Normal file
31
keyboards/40percentclub/sixpack/keymaps/default/keymap.c
Normal file
@@ -0,0 +1,31 @@
|
||||
/* 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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
#include QMK_KEYBOARD_H
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
|
||||
/* Default 2x3 layout
|
||||
* .--------------------------.
|
||||
* | MUTE | UP | PLAY |
|
||||
* |--------+--------+--------+
|
||||
* | LEFT | DOWN | RIGHT |
|
||||
* '--------------------------'
|
||||
*/
|
||||
|
||||
[0] = LAYOUT_ortho_2x3(/* Default */
|
||||
KC_MUTE, KC_UP, KC_MPLY,
|
||||
KC_LEFT, KC_DOWN, KC_RGHT),
|
||||
};
|
@@ -0,0 +1 @@
|
||||
# The default keymap for Six Pack
|
50
keyboards/40percentclub/sixpack/keymaps/fkeys/keymap.c
Normal file
50
keyboards/40percentclub/sixpack/keymaps/fkeys/keymap.c
Normal file
@@ -0,0 +1,50 @@
|
||||
/* 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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
#include QMK_KEYBOARD_H
|
||||
|
||||
// Tap Dance declarations
|
||||
enum {
|
||||
F13F19,
|
||||
F14F20,
|
||||
F15F21,
|
||||
F16F22,
|
||||
F17F23,
|
||||
F18F24,
|
||||
};
|
||||
|
||||
// Tap Dance definitions
|
||||
qk_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)
|
||||
),
|
||||
};
|
1
keyboards/40percentclub/sixpack/keymaps/fkeys/readme.md
Normal file
1
keyboards/40percentclub/sixpack/keymaps/fkeys/readme.md
Normal file
@@ -0,0 +1 @@
|
||||
# F13 to F24 keymap with Tap Dance for Six Pack
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user