mirror of
https://github.com/qmk/qmk_firmware.git
synced 2025-05-16 14:20:29 +00:00
Merge remote-tracking branch 'upstream/develop'
This commit is contained in:
commit
a63fd7f01c
4
.github/labeler.yml
vendored
4
.github/labeler.yml
vendored
@ -54,3 +54,7 @@ dd:
|
||||
- data/constants/**
|
||||
- data/mappings/**
|
||||
- data/schemas/**
|
||||
community_module:
|
||||
- changed-files:
|
||||
- any-glob-to-any-file:
|
||||
- modules/**
|
||||
|
1
.github/workflows/format.yml
vendored
1
.github/workflows/format.yml
vendored
@ -10,6 +10,7 @@ on:
|
||||
- 'lib/arm_atsam/**'
|
||||
- 'lib/lib8tion/**'
|
||||
- 'lib/python/**'
|
||||
- 'modules/**'
|
||||
- 'platforms/**'
|
||||
- 'quantum/**'
|
||||
- 'tests/**'
|
||||
|
36
Makefile
36
Makefile
@ -113,6 +113,29 @@ endef
|
||||
# Make it easier to call TRY_TO_MATCH_RULE_FROM_LIST
|
||||
TRY_TO_MATCH_RULE_FROM_LIST = $(eval $(call TRY_TO_MATCH_RULE_FROM_LIST_HELPER,$1))$(RULE_FOUND)
|
||||
|
||||
# As TRY_TO_MATCH_RULE_FROM_LIST_HELPER, but with additional
|
||||
# resolution of DEFAULT_FOLDER and keyboard_aliases.hjson for provided rule
|
||||
define TRY_TO_MATCH_RULE_FROM_LIST_HELPER_KB
|
||||
# Split on ":", padding with empty strings to avoid indexing issues
|
||||
TOKEN1:=$$(shell python3 -c "import sys; print((sys.argv[1].split(':',1)+[''])[0])" $$(RULE))
|
||||
TOKENr:=$$(shell python3 -c "import sys; print((sys.argv[1].split(':',1)+[''])[1])" $$(RULE))
|
||||
|
||||
TOKEN1:=$$(shell $(QMK_BIN) resolve-alias --allow-unknown $$(TOKEN1))
|
||||
|
||||
FOUNDx:=$$(shell echo $1 | tr " " "\n" | grep -Fx $$(TOKEN1))
|
||||
ifneq ($$(FOUNDx),)
|
||||
RULE := $$(TOKENr)
|
||||
RULE_FOUND := true
|
||||
MATCHED_ITEM := $$(TOKEN1)
|
||||
else
|
||||
RULE_FOUND := false
|
||||
MATCHED_ITEM :=
|
||||
endif
|
||||
endef
|
||||
|
||||
# Make it easier to call TRY_TO_MATCH_RULE_FROM_LIST_KB
|
||||
TRY_TO_MATCH_RULE_FROM_LIST_KB = $(eval $(call TRY_TO_MATCH_RULE_FROM_LIST_HELPER_KB,$1))$(RULE_FOUND)
|
||||
|
||||
define ALL_IN_LIST_LOOP
|
||||
OLD_RULE$1 := $$(RULE)
|
||||
$$(eval $$(call $1,$$(ITEM$1)))
|
||||
@ -138,7 +161,7 @@ define PARSE_RULE
|
||||
$$(eval $$(call PARSE_TEST))
|
||||
# If the rule starts with the name of a known keyboard, then continue
|
||||
# the parsing from PARSE_KEYBOARD
|
||||
else ifeq ($$(call TRY_TO_MATCH_RULE_FROM_LIST,$$(shell $(QMK_BIN) list-keyboards --no-resolve-defaults)),true)
|
||||
else ifeq ($$(call TRY_TO_MATCH_RULE_FROM_LIST_KB,$$(shell $(QMK_BIN) list-keyboards)),true)
|
||||
KEYBOARD_RULE=$$(MATCHED_ITEM)
|
||||
$$(eval $$(call PARSE_KEYBOARD,$$(MATCHED_ITEM)))
|
||||
else
|
||||
@ -170,17 +193,6 @@ define PARSE_KEYBOARD
|
||||
# include the correct makefile to determine the actual name of it
|
||||
CURRENT_KB := $1
|
||||
|
||||
# KEYBOARD_FOLDERS := $$(subst /, , $(CURRENT_KB))
|
||||
|
||||
DEFAULT_FOLDER := $$(CURRENT_KB)
|
||||
|
||||
# We assume that every rules.mk will contain the full default value
|
||||
$$(eval include $(ROOT_DIR)/keyboards/$$(CURRENT_KB)/rules.mk)
|
||||
ifneq ($$(DEFAULT_FOLDER),$$(CURRENT_KB))
|
||||
$$(eval include $(ROOT_DIR)/keyboards/$$(DEFAULT_FOLDER)/rules.mk)
|
||||
endif
|
||||
CURRENT_KB := $$(DEFAULT_FOLDER)
|
||||
|
||||
# 5/4/3/2/1
|
||||
KEYBOARD_FOLDER_PATH_1 := $$(CURRENT_KB)
|
||||
KEYBOARD_FOLDER_PATH_2 := $$(patsubst %/,%,$$(dir $$(KEYBOARD_FOLDER_PATH_1)))
|
||||
|
@ -112,6 +112,39 @@ endif
|
||||
ifneq ("$(wildcard $(KEYBOARD_PATH_1)/rules.mk)","")
|
||||
include $(KEYBOARD_PATH_1)/rules.mk
|
||||
endif
|
||||
# Create dependencies on DD keyboard config - structure validated elsewhere
|
||||
DD_CONFIG_FILES :=
|
||||
ifneq ("$(wildcard $(KEYBOARD_PATH_1)/info.json)","")
|
||||
DD_CONFIG_FILES += $(KEYBOARD_PATH_1)/info.json
|
||||
endif
|
||||
ifneq ("$(wildcard $(KEYBOARD_PATH_2)/info.json)","")
|
||||
DD_CONFIG_FILES += $(KEYBOARD_PATH_2)/info.json
|
||||
endif
|
||||
ifneq ("$(wildcard $(KEYBOARD_PATH_3)/info.json)","")
|
||||
DD_CONFIG_FILES += $(KEYBOARD_PATH_3)/info.json
|
||||
endif
|
||||
ifneq ("$(wildcard $(KEYBOARD_PATH_4)/info.json)","")
|
||||
DD_CONFIG_FILES += $(KEYBOARD_PATH_4)/info.json
|
||||
endif
|
||||
ifneq ("$(wildcard $(KEYBOARD_PATH_5)/info.json)","")
|
||||
DD_CONFIG_FILES += $(KEYBOARD_PATH_5)/info.json
|
||||
endif
|
||||
|
||||
ifneq ("$(wildcard $(KEYBOARD_PATH_1)/keyboard.json)","")
|
||||
DD_CONFIG_FILES += $(KEYBOARD_PATH_1)/keyboard.json
|
||||
endif
|
||||
ifneq ("$(wildcard $(KEYBOARD_PATH_2)/keyboard.json)","")
|
||||
DD_CONFIG_FILES += $(KEYBOARD_PATH_2)/keyboard.json
|
||||
endif
|
||||
ifneq ("$(wildcard $(KEYBOARD_PATH_3)/keyboard.json)","")
|
||||
DD_CONFIG_FILES += $(KEYBOARD_PATH_3)/keyboard.json
|
||||
endif
|
||||
ifneq ("$(wildcard $(KEYBOARD_PATH_4)/keyboard.json)","")
|
||||
DD_CONFIG_FILES += $(KEYBOARD_PATH_4)/keyboard.json
|
||||
endif
|
||||
ifneq ("$(wildcard $(KEYBOARD_PATH_5)/keyboard.json)","")
|
||||
DD_CONFIG_FILES += $(KEYBOARD_PATH_5)/keyboard.json
|
||||
endif
|
||||
|
||||
MAIN_KEYMAP_PATH_1 := $(KEYBOARD_PATH_1)/keymaps/$(KEYMAP)
|
||||
MAIN_KEYMAP_PATH_2 := $(KEYBOARD_PATH_2)/keymaps/$(KEYMAP)
|
||||
@ -207,17 +240,17 @@ ifneq ("$(wildcard $(KEYMAP_JSON))", "")
|
||||
include $(INFO_RULES_MK)
|
||||
|
||||
# Add rules to generate the keymap files - indentation here is important
|
||||
$(INTERMEDIATE_OUTPUT)/src/keymap.c: $(KEYMAP_JSON)
|
||||
$(INTERMEDIATE_OUTPUT)/src/keymap.c: $(KEYMAP_JSON) $(DD_CONFIG_FILES)
|
||||
@$(SILENT) || printf "$(MSG_GENERATING) $@" | $(AWK_CMD)
|
||||
$(eval CMD=$(QMK_BIN) json2c --quiet --output $(KEYMAP_C) $(KEYMAP_JSON))
|
||||
@$(BUILD_CMD)
|
||||
|
||||
$(INTERMEDIATE_OUTPUT)/src/config.h: $(KEYMAP_JSON)
|
||||
$(INTERMEDIATE_OUTPUT)/src/config.h: $(KEYMAP_JSON) $(DD_CONFIG_FILES)
|
||||
@$(SILENT) || printf "$(MSG_GENERATING) $@" | $(AWK_CMD)
|
||||
$(eval CMD=$(QMK_BIN) generate-config-h --quiet --output $(KEYMAP_H) $(KEYMAP_JSON))
|
||||
@$(BUILD_CMD)
|
||||
|
||||
$(INTERMEDIATE_OUTPUT)/src/keymap.h: $(KEYMAP_JSON)
|
||||
$(INTERMEDIATE_OUTPUT)/src/keymap.h: $(KEYMAP_JSON) $(DD_CONFIG_FILES)
|
||||
@$(SILENT) || printf "$(MSG_GENERATING) $@" | $(AWK_CMD)
|
||||
$(eval CMD=$(QMK_BIN) generate-keymap-h --quiet --output $(INTERMEDIATE_OUTPUT)/src/keymap.h $(KEYMAP_JSON))
|
||||
@$(BUILD_CMD)
|
||||
@ -226,6 +259,32 @@ generated-files: $(INTERMEDIATE_OUTPUT)/src/config.h $(INTERMEDIATE_OUTPUT)/src/
|
||||
|
||||
endif
|
||||
|
||||
# Community modules
|
||||
$(INTERMEDIATE_OUTPUT)/src/community_modules.h: $(KEYMAP_JSON) $(DD_CONFIG_FILES)
|
||||
@$(SILENT) || printf "$(MSG_GENERATING) $@" | $(AWK_CMD)
|
||||
$(eval CMD=$(QMK_BIN) generate-community-modules-h -kb $(KEYBOARD) --quiet --output $(INTERMEDIATE_OUTPUT)/src/community_modules.h $(KEYMAP_JSON))
|
||||
@$(BUILD_CMD)
|
||||
|
||||
$(INTERMEDIATE_OUTPUT)/src/community_modules.c: $(KEYMAP_JSON) $(DD_CONFIG_FILES)
|
||||
@$(SILENT) || printf "$(MSG_GENERATING) $@" | $(AWK_CMD)
|
||||
$(eval CMD=$(QMK_BIN) generate-community-modules-c -kb $(KEYBOARD) --quiet --output $(INTERMEDIATE_OUTPUT)/src/community_modules.c $(KEYMAP_JSON))
|
||||
@$(BUILD_CMD)
|
||||
|
||||
$(INTERMEDIATE_OUTPUT)/src/community_modules_introspection.c: $(KEYMAP_JSON) $(DD_CONFIG_FILES)
|
||||
@$(SILENT) || printf "$(MSG_GENERATING) $@" | $(AWK_CMD)
|
||||
$(eval CMD=$(QMK_BIN) generate-community-modules-introspection-c -kb $(KEYBOARD) --quiet --output $(INTERMEDIATE_OUTPUT)/src/community_modules_introspection.c $(KEYMAP_JSON))
|
||||
@$(BUILD_CMD)
|
||||
|
||||
$(INTERMEDIATE_OUTPUT)/src/community_modules_introspection.h: $(KEYMAP_JSON) $(DD_CONFIG_FILES)
|
||||
@$(SILENT) || printf "$(MSG_GENERATING) $@" | $(AWK_CMD)
|
||||
$(eval CMD=$(QMK_BIN) generate-community-modules-introspection-h -kb $(KEYBOARD) --quiet --output $(INTERMEDIATE_OUTPUT)/src/community_modules_introspection.h $(KEYMAP_JSON))
|
||||
@$(BUILD_CMD)
|
||||
|
||||
SRC += $(INTERMEDIATE_OUTPUT)/src/community_modules.c
|
||||
|
||||
generated-files: $(INTERMEDIATE_OUTPUT)/src/community_modules.h $(INTERMEDIATE_OUTPUT)/src/community_modules.c $(INTERMEDIATE_OUTPUT)/src/community_modules_introspection.c $(INTERMEDIATE_OUTPUT)/src/community_modules_introspection.h
|
||||
|
||||
|
||||
include $(BUILDDEFS_PATH)/converters.mk
|
||||
|
||||
# Generate the board's version.h file.
|
||||
@ -315,6 +374,14 @@ endif
|
||||
|
||||
# Find all of the config.h files and add them to our CONFIG_H define.
|
||||
CONFIG_H :=
|
||||
|
||||
define config_h_community_module_appender
|
||||
ifneq ("$(wildcard $(1)/config.h)","")
|
||||
CONFIG_H += $(1)/config.h
|
||||
endif
|
||||
endef
|
||||
$(foreach module,$(COMMUNITY_MODULE_PATHS),$(eval $(call config_h_community_module_appender,$(module))))
|
||||
|
||||
ifneq ("$(wildcard $(KEYBOARD_PATH_5)/config.h)","")
|
||||
CONFIG_H += $(KEYBOARD_PATH_5)/config.h
|
||||
endif
|
||||
@ -332,6 +399,14 @@ ifneq ("$(wildcard $(KEYBOARD_PATH_1)/config.h)","")
|
||||
endif
|
||||
|
||||
POST_CONFIG_H :=
|
||||
|
||||
define post_config_h_community_module_appender
|
||||
ifneq ("$(wildcard $(1)/post_config.h)","")
|
||||
POST_CONFIG_H += $(1)/post_config.h
|
||||
endif
|
||||
endef
|
||||
$(foreach module,$(COMMUNITY_MODULE_PATHS),$(eval $(call post_config_h_community_module_appender,$(module))))
|
||||
|
||||
ifneq ("$(wildcard $(KEYBOARD_PATH_1)/post_config.h)","")
|
||||
POST_CONFIG_H += $(KEYBOARD_PATH_1)/post_config.h
|
||||
endif
|
||||
@ -348,40 +423,6 @@ ifneq ("$(wildcard $(KEYBOARD_PATH_5)/post_config.h)","")
|
||||
POST_CONFIG_H += $(KEYBOARD_PATH_5)/post_config.h
|
||||
endif
|
||||
|
||||
# Create dependencies on DD keyboard config - structure validated elsewhere
|
||||
DD_CONFIG_FILES :=
|
||||
ifneq ("$(wildcard $(KEYBOARD_PATH_1)/info.json)","")
|
||||
DD_CONFIG_FILES += $(KEYBOARD_PATH_1)/info.json
|
||||
endif
|
||||
ifneq ("$(wildcard $(KEYBOARD_PATH_2)/info.json)","")
|
||||
DD_CONFIG_FILES += $(KEYBOARD_PATH_2)/info.json
|
||||
endif
|
||||
ifneq ("$(wildcard $(KEYBOARD_PATH_3)/info.json)","")
|
||||
DD_CONFIG_FILES += $(KEYBOARD_PATH_3)/info.json
|
||||
endif
|
||||
ifneq ("$(wildcard $(KEYBOARD_PATH_4)/info.json)","")
|
||||
DD_CONFIG_FILES += $(KEYBOARD_PATH_4)/info.json
|
||||
endif
|
||||
ifneq ("$(wildcard $(KEYBOARD_PATH_5)/info.json)","")
|
||||
DD_CONFIG_FILES += $(KEYBOARD_PATH_5)/info.json
|
||||
endif
|
||||
|
||||
ifneq ("$(wildcard $(KEYBOARD_PATH_1)/keyboard.json)","")
|
||||
DD_CONFIG_FILES += $(KEYBOARD_PATH_1)/keyboard.json
|
||||
endif
|
||||
ifneq ("$(wildcard $(KEYBOARD_PATH_2)/keyboard.json)","")
|
||||
DD_CONFIG_FILES += $(KEYBOARD_PATH_2)/keyboard.json
|
||||
endif
|
||||
ifneq ("$(wildcard $(KEYBOARD_PATH_3)/keyboard.json)","")
|
||||
DD_CONFIG_FILES += $(KEYBOARD_PATH_3)/keyboard.json
|
||||
endif
|
||||
ifneq ("$(wildcard $(KEYBOARD_PATH_4)/keyboard.json)","")
|
||||
DD_CONFIG_FILES += $(KEYBOARD_PATH_4)/keyboard.json
|
||||
endif
|
||||
ifneq ("$(wildcard $(KEYBOARD_PATH_5)/keyboard.json)","")
|
||||
DD_CONFIG_FILES += $(KEYBOARD_PATH_5)/keyboard.json
|
||||
endif
|
||||
|
||||
CONFIG_H += $(INTERMEDIATE_OUTPUT)/src/info_config.h
|
||||
KEYBOARD_SRC += $(INTERMEDIATE_OUTPUT)/src/default_keyboard.c
|
||||
|
||||
@ -462,6 +503,13 @@ ifneq ("$(wildcard $(KEYBOARD_PATH_5)/post_rules.mk)","")
|
||||
include $(KEYBOARD_PATH_5)/post_rules.mk
|
||||
endif
|
||||
|
||||
define post_rules_mk_community_module_includer
|
||||
ifneq ("$(wildcard $(1)/post_rules.mk)","")
|
||||
include $(1)/post_rules.mk
|
||||
endif
|
||||
endef
|
||||
$(foreach module,$(COMMUNITY_MODULE_PATHS),$(eval $(call post_rules_mk_community_module_includer,$(module))))
|
||||
|
||||
ifneq ("$(wildcard $(KEYMAP_PATH)/config.h)","")
|
||||
CONFIG_H += $(KEYMAP_PATH)/config.h
|
||||
endif
|
||||
|
@ -635,6 +635,10 @@ ifeq ($(strip $(VIA_ENABLE)), yes)
|
||||
TRI_LAYER_ENABLE := yes
|
||||
endif
|
||||
|
||||
ifeq ($(strip $(DYNAMIC_KEYMAP_ENABLE)), yes)
|
||||
SEND_STRING_ENABLE := yes
|
||||
endif
|
||||
|
||||
VALID_CUSTOM_MATRIX_TYPES:= yes lite no
|
||||
|
||||
CUSTOM_MATRIX ?= no
|
||||
@ -940,6 +944,8 @@ ifeq ($(strip $(WS2812_DRIVER_REQUIRED)), yes)
|
||||
|
||||
OPT_DEFS += -DWS2812_$(strip $(shell echo $(WS2812_DRIVER) | tr '[:lower:]' '[:upper:]'))
|
||||
|
||||
COMMON_VPATH += $(DRIVER_PATH)/led
|
||||
|
||||
SRC += ws2812.c ws2812_$(strip $(WS2812_DRIVER)).c
|
||||
|
||||
ifeq ($(strip $(PLATFORM)), CHIBIOS)
|
||||
|
596
data/constants/keycodes/extras/keycodes_eurkey_0.0.1.hjson
Normal file
596
data/constants/keycodes/extras/keycodes_eurkey_0.0.1.hjson
Normal file
@ -0,0 +1,596 @@
|
||||
{
|
||||
"aliases": {
|
||||
/*
|
||||
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
|
||||
* │ ` │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │ │
|
||||
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
|
||||
* │ │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │ \ │
|
||||
* ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤
|
||||
* │ │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │ │
|
||||
* ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────────┤
|
||||
* │ │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │ │
|
||||
* ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
|
||||
* │ │ │ │ │ │ │ │ │
|
||||
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
|
||||
*/
|
||||
"KC_GRV": {
|
||||
"key": "EU_GRV",
|
||||
"label": "`",
|
||||
}
|
||||
"KC_1": {
|
||||
"key": "EU_1",
|
||||
"label": "1",
|
||||
}
|
||||
"KC_2": {
|
||||
"key": "EU_2",
|
||||
"label": "2",
|
||||
}
|
||||
"KC_3": {
|
||||
"key": "EU_3",
|
||||
"label": "3",
|
||||
}
|
||||
"KC_4": {
|
||||
"key": "EU_4",
|
||||
"label": "4",
|
||||
}
|
||||
"KC_5": {
|
||||
"key": "EU_5",
|
||||
"label": "5",
|
||||
}
|
||||
"KC_6": {
|
||||
"key": "EU_6",
|
||||
"label": "6",
|
||||
}
|
||||
"KC_7": {
|
||||
"key": "EU_7",
|
||||
"label": "7",
|
||||
}
|
||||
"KC_8": {
|
||||
"key": "EU_8",
|
||||
"label": "8",
|
||||
}
|
||||
"KC_9": {
|
||||
"key": "EU_9",
|
||||
"label": "9",
|
||||
}
|
||||
"KC_0": {
|
||||
"key": "EU_0",
|
||||
"label": "0",
|
||||
}
|
||||
"KC_MINS": {
|
||||
"key": "EU_MINS",
|
||||
"label": "-",
|
||||
}
|
||||
"KC_EQL": {
|
||||
"key": "EU_EQL",
|
||||
"label": "=",
|
||||
}
|
||||
"KC_Q": {
|
||||
"key": "EU_Q",
|
||||
"label": "Q",
|
||||
}
|
||||
"KC_W": {
|
||||
"key": "EU_W",
|
||||
"label": "W",
|
||||
}
|
||||
"KC_E": {
|
||||
"key": "EU_E",
|
||||
"label": "E",
|
||||
}
|
||||
"KC_R": {
|
||||
"key": "EU_R",
|
||||
"label": "R",
|
||||
}
|
||||
"KC_T": {
|
||||
"key": "EU_T",
|
||||
"label": "T",
|
||||
}
|
||||
"KC_Y": {
|
||||
"key": "EU_Y",
|
||||
"label": "Y",
|
||||
}
|
||||
"KC_U": {
|
||||
"key": "EU_U",
|
||||
"label": "U",
|
||||
}
|
||||
"KC_I": {
|
||||
"key": "EU_I",
|
||||
"label": "I",
|
||||
}
|
||||
"KC_O": {
|
||||
"key": "EU_O",
|
||||
"label": "O",
|
||||
}
|
||||
"KC_P": {
|
||||
"key": "EU_P",
|
||||
"label": "P",
|
||||
}
|
||||
"KC_LBRC": {
|
||||
"key": "EU_LBRC",
|
||||
"label": "[",
|
||||
}
|
||||
"KC_RBRC": {
|
||||
"key": "EU_RBRC",
|
||||
"label": "]",
|
||||
}
|
||||
"KC_BSLS": {
|
||||
"key": "EU_BSLS",
|
||||
"label": "\\",
|
||||
}
|
||||
"KC_A": {
|
||||
"key": "EU_A",
|
||||
"label": "A",
|
||||
}
|
||||
"KC_S": {
|
||||
"key": "EU_S",
|
||||
"label": "S",
|
||||
}
|
||||
"KC_D": {
|
||||
"key": "EU_D",
|
||||
"label": "D",
|
||||
}
|
||||
"KC_F": {
|
||||
"key": "EU_F",
|
||||
"label": "F",
|
||||
}
|
||||
"KC_G": {
|
||||
"key": "EU_G",
|
||||
"label": "G",
|
||||
}
|
||||
"KC_H": {
|
||||
"key": "EU_H",
|
||||
"label": "H",
|
||||
}
|
||||
"KC_J": {
|
||||
"key": "EU_J",
|
||||
"label": "J",
|
||||
}
|
||||
"KC_K": {
|
||||
"key": "EU_K",
|
||||
"label": "K",
|
||||
}
|
||||
"KC_L": {
|
||||
"key": "EU_L",
|
||||
"label": "L",
|
||||
}
|
||||
"KC_SCLN": {
|
||||
"key": "EU_SCLN",
|
||||
"label": ";",
|
||||
}
|
||||
"KC_QUOT": {
|
||||
"key": "EU_QUOT",
|
||||
"label": "'",
|
||||
}
|
||||
"KC_Z": {
|
||||
"key": "EU_Z",
|
||||
"label": "Z",
|
||||
}
|
||||
"KC_X": {
|
||||
"key": "EU_X",
|
||||
"label": "X",
|
||||
}
|
||||
"KC_C": {
|
||||
"key": "EU_C",
|
||||
"label": "C",
|
||||
}
|
||||
"KC_V": {
|
||||
"key": "EU_V",
|
||||
"label": "V",
|
||||
}
|
||||
"KC_B": {
|
||||
"key": "EU_B",
|
||||
"label": "B",
|
||||
}
|
||||
"KC_N": {
|
||||
"key": "EU_N",
|
||||
"label": "N",
|
||||
}
|
||||
"KC_M": {
|
||||
"key": "EU_M",
|
||||
"label": "M",
|
||||
}
|
||||
"KC_COMM": {
|
||||
"key": "EU_COMM",
|
||||
"label": ",",
|
||||
}
|
||||
"KC_DOT": {
|
||||
"key": "EU_DOT",
|
||||
"label": ".",
|
||||
}
|
||||
"KC_SLSH": {
|
||||
"key": "EU_SLSH",
|
||||
"label": "/",
|
||||
}
|
||||
/* Shifted symbols
|
||||
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
|
||||
* │ ~ │ ! │ @ │ # │ $ │ % │ ^ │ & │ * │ ( │ ) │ _ │ + │ │
|
||||
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
|
||||
* │ │ │ │ │ │ │ │ │ │ │ │ { │ } │ | │
|
||||
* ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤
|
||||
* │ │ │ │ │ │ │ │ │ │ │ : │ " │ │
|
||||
* ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────────┤
|
||||
* │ │ │ │ │ │ │ │ │ < │ > │ ? │ │
|
||||
* ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
|
||||
* │ │ │ │ │ │ │ │ │
|
||||
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
|
||||
*/
|
||||
"S(EU_GRV)": {
|
||||
"key": "EU_TILD",
|
||||
"label": "~",
|
||||
}
|
||||
"S(EU_1)": {
|
||||
"key": "EU_EXLM",
|
||||
"label": "!",
|
||||
}
|
||||
"S(EU_2)": {
|
||||
"key": "EU_AT",
|
||||
"label": "@",
|
||||
}
|
||||
"S(EU_3)": {
|
||||
"key": "EU_HASH",
|
||||
"label": "#",
|
||||
}
|
||||
"S(EU_4)": {
|
||||
"key": "EU_DLR",
|
||||
"label": "$",
|
||||
}
|
||||
"S(EU_5)": {
|
||||
"key": "EU_PERC",
|
||||
"label": "%",
|
||||
}
|
||||
"S(EU_6)": {
|
||||
"key": "EU_CIRC",
|
||||
"label": "^",
|
||||
}
|
||||
"S(EU_7)": {
|
||||
"key": "EU_AMPR",
|
||||
"label": "&",
|
||||
}
|
||||
"S(EU_8)": {
|
||||
"key": "EU_ASTR",
|
||||
"label": "*",
|
||||
}
|
||||
"S(EU_9)": {
|
||||
"key": "EU_LPRN",
|
||||
"label": "(",
|
||||
}
|
||||
"S(EU_0)": {
|
||||
"key": "EU_RPRN",
|
||||
"label": ")",
|
||||
}
|
||||
"S(EU_MINS)": {
|
||||
"key": "EU_UNDS",
|
||||
"label": "_",
|
||||
}
|
||||
"S(EU_EQL)": {
|
||||
"key": "EU_PLUS",
|
||||
"label": "+",
|
||||
}
|
||||
"S(EU_LBRC)": {
|
||||
"key": "EU_LCBR",
|
||||
"label": "{",
|
||||
}
|
||||
"S(EU_RBRC)": {
|
||||
"key": "EU_RCBR",
|
||||
"label": "}",
|
||||
}
|
||||
"S(EU_BSLS)": {
|
||||
"key": "EU_PIPE",
|
||||
"label": "|",
|
||||
}
|
||||
"S(EU_SCLN)": {
|
||||
"key": "EU_COLN",
|
||||
"label": ":",
|
||||
}
|
||||
"S(EU_QUOT)": {
|
||||
"key": "EU_DQUO",
|
||||
"label": "\"",
|
||||
}
|
||||
"S(EU_COMM)": {
|
||||
"key": "EU_LABK",
|
||||
"label": "<",
|
||||
}
|
||||
"S(EU_DOT)": {
|
||||
"key": "EU_RABK",
|
||||
"label": ">",
|
||||
}
|
||||
"S(EU_SLSH)": {
|
||||
"key": "EU_QUES",
|
||||
"label": "?",
|
||||
}
|
||||
/* AltGr symbols
|
||||
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
|
||||
* │ ` │ ¡ │ ª │ º │ £ │ € │ ^ │ ˚ │ „ │ “ │ ” │ – │ × │ │
|
||||
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
|
||||
* │ │ æ │ å │ ë │ ý │ þ │ ÿ │ ü │ ï │ ö │ œ │ « │ » │ ¬ │
|
||||
* ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤
|
||||
* │ │ ä │ ß │ ð │ è │ é │ ù │ ú │ ij │ ø │ ° │ ´ │ │
|
||||
* ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────────┤
|
||||
* │ │ à │ á │ ç │ ì │ í │ ñ │ μ │ ò │ ó │ ¿ │ │
|
||||
* ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
|
||||
* │ │ │ │ │ │ │ │ │
|
||||
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
|
||||
*/
|
||||
"ALGR(EU_GRV)": {
|
||||
"key": "EU_DGRV",
|
||||
"label": "` (dead)",
|
||||
}
|
||||
"ALGR(EU_1)": {
|
||||
"key": "EU_IEXL",
|
||||
"label": "¡",
|
||||
}
|
||||
"ALGR(EU_2)": {
|
||||
"key": "EU_FORD",
|
||||
"label": "ª",
|
||||
}
|
||||
"ALGR(EU_3)": {
|
||||
"key": "EU_MORD",
|
||||
"label": "º",
|
||||
}
|
||||
"ALGR(EU_4)": {
|
||||
"key": "EU_PND",
|
||||
"label": "£",
|
||||
}
|
||||
"ALGR(EU_5)": {
|
||||
"key": "EU_EURO",
|
||||
"label": "€",
|
||||
}
|
||||
"ALGR(EU_6)": {
|
||||
"key": "EU_DCIR",
|
||||
"label": "^ (dead)",
|
||||
}
|
||||
"ALGR(EU_7)": {
|
||||
"key": "EU_RNGA",
|
||||
"label": "˚ (dead)",
|
||||
}
|
||||
"ALGR(EU_8)": {
|
||||
"key": "EU_DLQU",
|
||||
"label": "„",
|
||||
}
|
||||
"ALGR(EU_9)": {
|
||||
"key": "EU_LDQU",
|
||||
"label": "“",
|
||||
}
|
||||
"ALGR(EU_0)": {
|
||||
"key": "EU_RDQU",
|
||||
"label": "”",
|
||||
}
|
||||
"ALGR(EU_MINS)": {
|
||||
"key": "EU_NDSH",
|
||||
"label": "–",
|
||||
}
|
||||
"ALGR(EU_EQL)": {
|
||||
"key": "EU_MUL",
|
||||
"label": "×",
|
||||
}
|
||||
"ALGR(EU_Q)": {
|
||||
"key": "EU_AE",
|
||||
"label": "æ",
|
||||
}
|
||||
"ALGR(EU_W)": {
|
||||
"key": "EU_ARNG",
|
||||
"label": "Å",
|
||||
}
|
||||
"ALGR(EU_E)": {
|
||||
"key": "EU_EDIA",
|
||||
"label": "Ë",
|
||||
}
|
||||
"ALGR(EU_R)": {
|
||||
"key": "EU_YACU",
|
||||
"label": "Ý",
|
||||
}
|
||||
"ALGR(EU_T)": {
|
||||
"key": "EU_THRN",
|
||||
"label": "Þ",
|
||||
}
|
||||
"ALGR(EU_Y)": {
|
||||
"key": "EU_YDIA",
|
||||
"label": "Ÿ",
|
||||
}
|
||||
"ALGR(EU_U)": {
|
||||
"key": "EU_UDIA",
|
||||
"label": "Ü",
|
||||
}
|
||||
"ALGR(EU_I)": {
|
||||
"key": "EU_IDIA",
|
||||
"label": "Ï",
|
||||
}
|
||||
"ALGR(EU_O)": {
|
||||
"key": "EU_ODIA",
|
||||
"label": "Ö",
|
||||
}
|
||||
"ALGR(EU_P)": {
|
||||
"key": "EU_OE",
|
||||
"label": "Œ",
|
||||
}
|
||||
"ALGR(EU_LBRC)": {
|
||||
"key": "EU_LDAQ",
|
||||
"label": "«",
|
||||
}
|
||||
"ALGR(EU_RBRC)": {
|
||||
"key": "EU_RDAQ",
|
||||
"label": "»",
|
||||
}
|
||||
"ALGR(EU_BSLS)": {
|
||||
"key": "EU_NOT",
|
||||
"label": "¬",
|
||||
}
|
||||
"ALGR(EU_A)": {
|
||||
"key": "EU_ADIA",
|
||||
"label": "Ä",
|
||||
}
|
||||
"ALGR(EU_S)": {
|
||||
"key": "EU_SS",
|
||||
"label": "ß",
|
||||
}
|
||||
"ALGR(EU_D)": {
|
||||
"key": "EU_ETH",
|
||||
"label": "Ð",
|
||||
}
|
||||
"ALGR(EU_F)": {
|
||||
"key": "EU_EGRV",
|
||||
"label": "È",
|
||||
}
|
||||
"ALGR(EU_G)": {
|
||||
"key": "EU_EACU",
|
||||
"label": "É",
|
||||
}
|
||||
"ALGR(EU_H)": {
|
||||
"key": "EU_UGRV",
|
||||
"label": "Ù",
|
||||
}
|
||||
"ALGR(EU_J)": {
|
||||
"key": "EU_UACU",
|
||||
"label": "Ú",
|
||||
}
|
||||
"ALGR(EU_K)": {
|
||||
"key": "EU_IJ",
|
||||
"label": "IJ",
|
||||
}
|
||||
"ALGR(EU_L)": {
|
||||
"key": "EU_OSTR",
|
||||
"label": "Ø",
|
||||
}
|
||||
"ALGR(EU_SCLN)": {
|
||||
"key": "EU_DEG",
|
||||
"label": "°",
|
||||
}
|
||||
"ALGR(EU_QUOT)": {
|
||||
"key": "EU_ACUT",
|
||||
"label": "´ (dead)",
|
||||
}
|
||||
"ALGR(EU_Z)": {
|
||||
"key": "EU_AGRV",
|
||||
"label": "À",
|
||||
}
|
||||
"ALGR(EU_X)": {
|
||||
"key": "EU_AACU",
|
||||
"label": "Á",
|
||||
}
|
||||
"ALGR(EU_C)": {
|
||||
"key": "EU_CCED",
|
||||
"label": "Ç",
|
||||
}
|
||||
"ALGR(EU_V)": {
|
||||
"key": "EU_IGRV",
|
||||
"label": "Ì",
|
||||
}
|
||||
"ALGR(EU_B)": {
|
||||
"key": "EU_IACU",
|
||||
"label": "Í",
|
||||
}
|
||||
"ALGR(EU_N)": {
|
||||
"key": "EU_NTIL",
|
||||
"label": "Ñ",
|
||||
}
|
||||
"ALGR(EU_M)": {
|
||||
"key": "EU_DGRK",
|
||||
"label": "μ (dead Greek key)",
|
||||
}
|
||||
"ALGR(EU_COMM)": {
|
||||
"key": "EU_OGRV",
|
||||
"label": "Ò",
|
||||
}
|
||||
"ALGR(EU_DOT)": {
|
||||
"key": "EU_OACU",
|
||||
"label": "Ó",
|
||||
}
|
||||
"ALGR(EU_SLSH)": {
|
||||
"key": "EU_IQUE",
|
||||
"label": "¿",
|
||||
}
|
||||
/* Shift+AltGr symbols
|
||||
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
|
||||
* │ ~ │ ¹ │ ² │ ³ │ ¥ │ ¢ │ ˇ │ ¯ │ ‚ │ ‘ │ ’ │ — │ ÷ │ │
|
||||
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
|
||||
* │ │ │ │ │ │ │ │ │ │ │ │ ‹ │ › │ ¦ │
|
||||
* ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤
|
||||
* │ │ │ § │ │ │ │ │ │ │ │ · │ ¨ │ │
|
||||
* ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────────┤
|
||||
* │ │ │ │ │ │ │ │ │ │ │ … │ │
|
||||
* ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
|
||||
* │ │ │ │ │ │ │ │ │
|
||||
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
|
||||
*/
|
||||
"ALGR(EU_TILD)": {
|
||||
"key": "EU_DTIL",
|
||||
"label": "~ (dead)",
|
||||
}
|
||||
"S(ALGR(EU_1))": {
|
||||
"key": "EU_SUP1",
|
||||
"label": "¹",
|
||||
}
|
||||
"S(ALGR(EU_2))": {
|
||||
"key": "EU_SUP2",
|
||||
"label": "²",
|
||||
}
|
||||
"S(ALGR(EU_3))": {
|
||||
"key": "EU_SUP3",
|
||||
"label": "³",
|
||||
}
|
||||
"ALGR(EU_DLR)": {
|
||||
"key": "EU_YEN",
|
||||
"label": "¥",
|
||||
}
|
||||
"S(EU_EURO)": {
|
||||
"key": "EU_CENT",
|
||||
"label": "¢",
|
||||
}
|
||||
"S(EU_DCIR)": {
|
||||
"key": "EU_CARN",
|
||||
"label": "ˇ (dead)",
|
||||
}
|
||||
"S(ALGR(EU_7))": {
|
||||
"key": "EU_MACR",
|
||||
"label": "¯ (dead)",
|
||||
}
|
||||
"S(EU_DLQU)": {
|
||||
"key": "EU_SLQU",
|
||||
"label": "‚",
|
||||
}
|
||||
"S(EU_LDQU)": {
|
||||
"key": "EU_LSQU",
|
||||
"label": "‘",
|
||||
}
|
||||
"S(EU_RDQU)": {
|
||||
"key": "EU_RSQU",
|
||||
"label": "’",
|
||||
}
|
||||
"S(EU_NDSH)": {
|
||||
"key": "EU_MDSH",
|
||||
"label": "—",
|
||||
}
|
||||
"S(EU_MUL)": {
|
||||
"key": "EU_DIV",
|
||||
"label": "÷",
|
||||
}
|
||||
"S(EU_LDAQ)": {
|
||||
"key": "EU_LSAQ",
|
||||
"label": "‹",
|
||||
}
|
||||
"S(EU_RDAQ)": {
|
||||
"key": "EU_RSAQ",
|
||||
"label": "›",
|
||||
}
|
||||
"S(ALGR(EU_BSLS))": {
|
||||
"key": "EU_BRKP",
|
||||
"label": "¦",
|
||||
}
|
||||
"S(ALGR(EU_S))": {
|
||||
"key": "EU_SECT",
|
||||
"label": "§",
|
||||
}
|
||||
"S(ALGR(EU_SCLN))": {
|
||||
"key": "EU_MDDT",
|
||||
"label": "·",
|
||||
}
|
||||
"ALGR(EU_DQUO)": {
|
||||
"key": "EU_DIAE",
|
||||
"label": "¨ (dead)",
|
||||
}
|
||||
"ALGR(EU_QUES)": {
|
||||
"key": "EU_ELLP",
|
||||
"label": "…",
|
||||
}
|
||||
}
|
||||
}
|
@ -527,7 +527,7 @@
|
||||
"key": "FA_PIPE",
|
||||
"label": "|",
|
||||
}
|
||||
"ALGR(FA_RA)": {
|
||||
"ALGR(FA_RE)": {
|
||||
"key": "FA_SUBA",
|
||||
"label": "ٖ",
|
||||
}
|
||||
|
7
data/constants/keycodes/keycodes_0.0.7.hjson
Normal file
7
data/constants/keycodes/keycodes_0.0.7.hjson
Normal file
@ -0,0 +1,7 @@
|
||||
{
|
||||
"ranges": {
|
||||
"0x77C0/0x003F": {
|
||||
"define": "QK_COMMUNITY_MODULE"
|
||||
}
|
||||
}
|
||||
}
|
25
data/constants/module_hooks/0.1.0.hjson
Normal file
25
data/constants/module_hooks/0.1.0.hjson
Normal file
@ -0,0 +1,25 @@
|
||||
{
|
||||
keyboard_pre_init: {
|
||||
ret_type: void
|
||||
args: void
|
||||
}
|
||||
keyboard_post_init: {
|
||||
ret_type: void
|
||||
args: void
|
||||
}
|
||||
pre_process_record: {
|
||||
ret_type: bool
|
||||
args: uint16_t keycode, keyrecord_t *record
|
||||
call_params: keycode, record
|
||||
}
|
||||
process_record: {
|
||||
ret_type: bool
|
||||
args: uint16_t keycode, keyrecord_t *record
|
||||
call_params: keycode, record
|
||||
}
|
||||
post_process_record: {
|
||||
ret_type: void
|
||||
args: uint16_t keycode, keyrecord_t *record
|
||||
call_params: keycode, record
|
||||
}
|
||||
}
|
26
data/constants/module_hooks/1.0.0.hjson
Normal file
26
data/constants/module_hooks/1.0.0.hjson
Normal file
@ -0,0 +1,26 @@
|
||||
{
|
||||
housekeeping_task: {
|
||||
ret_type: void
|
||||
args: void
|
||||
}
|
||||
suspend_power_down: {
|
||||
ret_type: void
|
||||
args: void
|
||||
}
|
||||
suspend_wakeup_init: {
|
||||
ret_type: void
|
||||
args: void
|
||||
}
|
||||
shutdown: {
|
||||
ret_type: bool
|
||||
args: bool jump_to_bootloader
|
||||
call_params: jump_to_bootloader
|
||||
}
|
||||
process_detected_host_os: {
|
||||
ret_type: bool
|
||||
args: os_variant_t os
|
||||
call_params: os
|
||||
guard: defined(OS_DETECTION_ENABLE)
|
||||
header: os_detection.h
|
||||
}
|
||||
}
|
@ -200,6 +200,7 @@
|
||||
"SPLIT_WPM_ENABLE": {"info_key": "split.transport.sync.wpm", "value_type": "flag"},
|
||||
|
||||
// Tapping
|
||||
"CHORDAL_HOLD": {"info_key": "tapping.chordal_hold", "value_type": "flag"},
|
||||
"HOLD_ON_OTHER_KEY_PRESS": {"info_key": "tapping.hold_on_other_key_press", "value_type": "flag"},
|
||||
"HOLD_ON_OTHER_KEY_PRESS_PER_KEY": {"info_key": "tapping.hold_on_other_key_press_per_key", "value_type": "flag"},
|
||||
"PERMISSIVE_HOLD": {"info_key": "tapping.permissive_hold", "value_type": "flag"},
|
||||
|
@ -55,5 +55,6 @@
|
||||
// Items we want flagged in lint
|
||||
"CTPC": {"info_key": "_deprecated.ctpc", "deprecated": true, "replace_with": "CONVERT_TO=proton_c"},
|
||||
"CONVERT_TO_PROTON_C": {"info_key": "_deprecated.ctpc", "deprecated": true, "replace_with": "CONVERT_TO=proton_c"},
|
||||
"DEFAULT_FOLDER": {"info_key": "_deprecated.default_folder", "deprecated": true},
|
||||
"VIAL_ENABLE": {"info_key": "_invalid.vial", "invalid": true}
|
||||
}
|
||||
|
@ -140,6 +140,9 @@
|
||||
"custommk/genesis": {
|
||||
"target": "custommk/genesis/rev1"
|
||||
},
|
||||
"cxt_studio":{
|
||||
"target":"cxt_studio/12e4"
|
||||
},
|
||||
"daisy": {
|
||||
"target": "ktec/daisy"
|
||||
},
|
||||
@ -194,6 +197,9 @@
|
||||
"ergodone": {
|
||||
"target": "ktec/ergodone"
|
||||
},
|
||||
"ergodox_stm32": {
|
||||
"target": "handwired/ergodox_stm32"
|
||||
},
|
||||
"ergoinu": {
|
||||
"target": "dm9records/ergoinu"
|
||||
},
|
||||
@ -1515,6 +1521,9 @@
|
||||
"ymd96": {
|
||||
"target": "ymdk/ymd96"
|
||||
},
|
||||
"ymdk/id75": {
|
||||
"target": "ymdk/id75/f103"
|
||||
},
|
||||
"ymdk_np21": {
|
||||
"target": "ymdk/np21"
|
||||
},
|
||||
@ -1552,5 +1561,687 @@
|
||||
},
|
||||
"dnworks/9973": {
|
||||
"target": "dnworks/tkl87"
|
||||
},
|
||||
// DEFAULT_FOLDER removed during 2025 Q1 cycle
|
||||
"0_sixty": {
|
||||
"target": "0_sixty/base"
|
||||
},
|
||||
"0xcb/splaytoraid": {
|
||||
"target": "0xcb/splaytoraid/rp2040_ce"
|
||||
},
|
||||
"1upkeyboards/pi40": {
|
||||
"target": "1upkeyboards/pi40/mit_v1_0"
|
||||
},
|
||||
"1upkeyboards/pi50": {
|
||||
"target": "1upkeyboards/pi50/grid"
|
||||
},
|
||||
"1upkeyboards/sweet16": {
|
||||
"target": "1upkeyboards/sweet16/v1"
|
||||
},
|
||||
"25keys/aleth42": {
|
||||
"target": "25keys/aleth42/rev1"
|
||||
},
|
||||
"25keys/zinc": {
|
||||
"target": "25keys/zinc/rev1"
|
||||
},
|
||||
"40percentclub/i75": {
|
||||
"target": "40percentclub/i75/promicro"
|
||||
},
|
||||
"40percentclub/polyandry": {
|
||||
"target": "40percentclub/polyandry/promicro"
|
||||
},
|
||||
"8pack": {
|
||||
"target": "8pack/rev12"
|
||||
},
|
||||
"adkb96": {
|
||||
"target": "adkb96/rev1"
|
||||
},
|
||||
"adm42": {
|
||||
"target": "adm42/rev4"
|
||||
},
|
||||
"aeboards/satellite": {
|
||||
"target": "aeboards/satellite/rev1"
|
||||
},
|
||||
"atreus": {
|
||||
"target": "atreus/astar"
|
||||
},
|
||||
"atreyu": {
|
||||
"target": "atreyu/rev1"
|
||||
},
|
||||
"biacco42/ergo42": {
|
||||
"target": "biacco42/ergo42/rev1"
|
||||
},
|
||||
"binepad/bn009": {
|
||||
"target": "binepad/bn009/r2"
|
||||
},
|
||||
"binepad/bnr1": {
|
||||
"target": "binepad/bnr1/v2"
|
||||
},
|
||||
"boston_meetup": {
|
||||
"target": "boston_meetup/2019"
|
||||
},
|
||||
"bpiphany/frosty_flake": {
|
||||
"target": "bpiphany/frosty_flake/20140521"
|
||||
},
|
||||
"buzzard": {
|
||||
"target": "buzzard/rev1"
|
||||
},
|
||||
"cannonkeys/db60": {
|
||||
"target": "cannonkeys/db60/rev2"
|
||||
},
|
||||
"clickety_split/leeloo": {
|
||||
"target": "clickety_split/leeloo/rev3"
|
||||
},
|
||||
"converter/palm_usb": {
|
||||
"target": "converter/palm_usb/stowaway"
|
||||
},
|
||||
"crkbd": {
|
||||
"target": "crkbd/rev1"
|
||||
},
|
||||
"dailycraft/bat43": {
|
||||
"target": "dailycraft/bat43/rev2"
|
||||
},
|
||||
"dailycraft/claw44": {
|
||||
"target": "dailycraft/claw44/rev1"
|
||||
},
|
||||
"dailycraft/sandbox": {
|
||||
"target": "dailycraft/sandbox/rev2"
|
||||
},
|
||||
"dailycraft/wings42": {
|
||||
"target": "dailycraft/wings42/rev2"
|
||||
},
|
||||
"delikeeb/vanana": {
|
||||
"target": "delikeeb/vanana/rev2"
|
||||
},
|
||||
"delikeeb/waaffle/rev3": {
|
||||
"target": "delikeeb/waaffle/rev3/pro_micro"
|
||||
},
|
||||
"deltasplit75": {
|
||||
"target": "deltasplit75/v2"
|
||||
},
|
||||
"drhigsby/ogurec": {
|
||||
"target": "drhigsby/ogurec/left_pm"
|
||||
},
|
||||
"duck/octagon": {
|
||||
"target": "duck/octagon/v2"
|
||||
},
|
||||
"duck/orion": {
|
||||
"target": "duck/orion/v3"
|
||||
},
|
||||
"ducky/one2mini": {
|
||||
"target": "ducky/one2mini/1861st"
|
||||
},
|
||||
"ducky/one2sf": {
|
||||
"target": "ducky/one2sf/1967st"
|
||||
},
|
||||
"dumbpad": {
|
||||
"target": "dumbpad/v0x"
|
||||
},
|
||||
"durgod/galaxy": {
|
||||
"target": "durgod/dgk6x/galaxy"
|
||||
},
|
||||
"durgod/venus": {
|
||||
"target": "durgod/dgk6x/venus"
|
||||
},
|
||||
"dztech/tofu/ii": {
|
||||
"target": "dztech/tofu/ii/v1"
|
||||
},
|
||||
"dztech/tofu/jr": {
|
||||
"target": "dztech/tofu/jr/v1"
|
||||
},
|
||||
"eco": {
|
||||
"target": "eco/rev2"
|
||||
},
|
||||
"ergoslab": {
|
||||
"target": "ergoslab/rev1"
|
||||
},
|
||||
"ergotravel": {
|
||||
"target": "ergotravel/rev1"
|
||||
},
|
||||
"evyd13/atom47": {
|
||||
"target": "evyd13/atom47/rev4"
|
||||
},
|
||||
"fortitude60": {
|
||||
"target": "fortitude60/rev1"
|
||||
},
|
||||
"fruitykeeb/fruitbar/r1": {
|
||||
"target": "fruitykeeb/fruitbar/r1/promicro"
|
||||
},
|
||||
"ghs/jem": {
|
||||
"target": "ghs/jem/soldered"
|
||||
},
|
||||
"hadron": {
|
||||
"target": "hadron/ver2"
|
||||
},
|
||||
"handwired/bento": {
|
||||
"target": "handwired/bento/rev1"
|
||||
},
|
||||
"handwired/dactyl_manuform/6x6": {
|
||||
"target": "handwired/dactyl_manuform/6x6/promicro"
|
||||
},
|
||||
"handwired/meck_tkl": {
|
||||
"target": "handwired/meck_tkl/blackpill_f401"
|
||||
},
|
||||
"handwired/ms_sculpt_mobile": {
|
||||
"target": "handwired/ms_sculpt_mobile/teensy2pp"
|
||||
},
|
||||
"handwired/onekey": {
|
||||
"target": "handwired/onekey/promicro"
|
||||
},
|
||||
"handwired/pill60": {
|
||||
"target": "handwired/pill60/bluepill"
|
||||
},
|
||||
"handwired/postageboard": {
|
||||
"target": "handwired/postageboard/mini"
|
||||
},
|
||||
"handwired/qc60": {
|
||||
"target": "handwired/qc60/proto"
|
||||
},
|
||||
"handwired/sono1": {
|
||||
"target": "handwired/sono1/t2pp"
|
||||
},
|
||||
"handwired/splittest": {
|
||||
"target": "handwired/splittest/promicro"
|
||||
},
|
||||
"handwired/stef9998/split_5x7": {
|
||||
"target": "handwired/stef9998/split_5x7/rev1"
|
||||
},
|
||||
"handwired/symmetric70_proto/promicro": {
|
||||
"target": "handwired/symmetric70_proto/promicro/base"
|
||||
},
|
||||
"handwired/symmetric70_proto/proton_c": {
|
||||
"target": "handwired/symmetric70_proto/proton_c/base"
|
||||
},
|
||||
"handwired/unk": {
|
||||
"target": "handwired/unk/rev1"
|
||||
},
|
||||
"handwired/xealous": {
|
||||
"target": "handwired/xealous/rev1"
|
||||
},
|
||||
"hillside/46": {
|
||||
"target": "hillside/46/0_1"
|
||||
},
|
||||
"hhkb/ansi": {
|
||||
"target": "hhkb/ansi/32u4"
|
||||
},
|
||||
"hillside/48": {
|
||||
"target": "hillside/48/0_1"
|
||||
},
|
||||
"hillside/52": {
|
||||
"target": "hillside/52/0_1"
|
||||
},
|
||||
"ibnuda/squiggle": {
|
||||
"target": "ibnuda/squiggle/rev1"
|
||||
},
|
||||
"idobao/id80/v1": {
|
||||
"target": "idobao/id80/v2/ansi"
|
||||
},
|
||||
"idobao/id80/v3": {
|
||||
"target": "idobao/id80/v3/ansi"
|
||||
},
|
||||
"inett_studio/sq80": {
|
||||
"target": "inett_studio/sq80/hotswap_layout_i"
|
||||
},
|
||||
"input_club/infinity60": {
|
||||
"target": "input_club/infinity60/led"
|
||||
},
|
||||
"jacky_studio/bear_65": {
|
||||
"target": "jacky_studio/bear_65/rev1"
|
||||
},
|
||||
"jacky_studio/piggy60/rev1": {
|
||||
"target": "jacky_studio/piggy60/rev1/solder"
|
||||
},
|
||||
"jadookb/jkb65": {
|
||||
"target": "jadookb/jkb65/r1"
|
||||
},
|
||||
"jian": {
|
||||
"target": "jian/rev2"
|
||||
},
|
||||
"jiran": {
|
||||
"target": "jiran/rev1"
|
||||
},
|
||||
"jorne": {
|
||||
"target": "jorne/rev1"
|
||||
},
|
||||
"junco": {
|
||||
"target": "junco/rev1"
|
||||
},
|
||||
"kakunpc/angel17": {
|
||||
"target": "kakunpc/angel17/rev1"
|
||||
},
|
||||
"kakunpc/angel64": {
|
||||
"target": "kakunpc/angel64/rev1"
|
||||
},
|
||||
"kakunpc/business_card": {
|
||||
"target": "kakunpc/business_card/beta"
|
||||
},
|
||||
"kakunpc/suihankey": {
|
||||
"target": "kakunpc/suihankey/rev1"
|
||||
},
|
||||
"kakunpc/suihankey/split": {
|
||||
"target": "kakunpc/suihankey/split/rev1"
|
||||
},
|
||||
"kapcave/paladinpad": {
|
||||
"target": "kapcave/paladinpad/rev2"
|
||||
},
|
||||
"kapl": {
|
||||
"target": "kapl/rev1"
|
||||
},
|
||||
"kbdfans/d45": {
|
||||
"target": "kbdfans/d45/v2"
|
||||
},
|
||||
"kbdfans/kbd75": {
|
||||
"target": "kbdfans/kbd75/rev1"
|
||||
},
|
||||
"keebio/bdn9": {
|
||||
"target": "keebio/bdn9/rev1"
|
||||
},
|
||||
"keebio/convolution": {
|
||||
"target": "keebio/convolution/rev1"
|
||||
},
|
||||
"keebio/foldkb": {
|
||||
"target": "keebio/foldkb/rev1"
|
||||
},
|
||||
"keebio/kbo5000": {
|
||||
"target": "keebio/kbo5000/rev1"
|
||||
},
|
||||
"keebio/levinson": {
|
||||
"target": "keebio/levinson/rev2"
|
||||
},
|
||||
"keebio/quefrency": {
|
||||
"target": "keebio/quefrency/rev1"
|
||||
},
|
||||
"keebio/rorschach": {
|
||||
"target": "keebio/rorschach/rev1"
|
||||
},
|
||||
"keebio/sinc": {
|
||||
"target": "keebio/sinc/rev1"
|
||||
},
|
||||
"keebio/viterbi": {
|
||||
"target": "keebio/viterbi/rev2"
|
||||
},
|
||||
"keycapsss/kimiko": {
|
||||
"target": "keycapsss/kimiko/rev2"
|
||||
},
|
||||
"keyhive/navi10": {
|
||||
"target": "keyhive/navi10/rev3"
|
||||
},
|
||||
"keyhive/uno": {
|
||||
"target": "keyhive/uno/rev1"
|
||||
},
|
||||
"kin80": {
|
||||
"target": "kin80/blackpill401"
|
||||
},
|
||||
"kumaokobo/kudox_full": {
|
||||
"target": "kumaokobo/kudox_full/rev1"
|
||||
},
|
||||
"kumaokobo/kudox_game": {
|
||||
"target": "kumaokobo/kudox_game/rev2"
|
||||
},
|
||||
"kumaokobo/kudox": {
|
||||
"target": "kumaokobo/kudox/rev3"
|
||||
},
|
||||
"kumaokobo/pico": {
|
||||
"target": "kumaokobo/pico/65keys"
|
||||
},
|
||||
"lazydesigners/dimple": {
|
||||
"target": "lazydesigners/dimple/staggered/rev1"
|
||||
},
|
||||
"lets_split": {
|
||||
"target": "lets_split/rev2"
|
||||
},
|
||||
"lfkeyboards/lfk87": {
|
||||
"target": "lfkeyboards/lfk78/revc"
|
||||
},
|
||||
"lily58": {
|
||||
"target": "lily58/rev1"
|
||||
},
|
||||
"lime": {
|
||||
"target": "lime/rev1"
|
||||
},
|
||||
"maple_computing/christmas_tree": {
|
||||
"target": "maple_computing/christmas_tree/v2017"
|
||||
},
|
||||
"maple_computing/ivy": {
|
||||
"target": "maple_computing/ivy/rev1"
|
||||
},
|
||||
"maple_computing/launchpad": {
|
||||
"target": "maple_computing/launchpad/rev1"
|
||||
},
|
||||
"maple_computing/minidox": {
|
||||
"target": "maple_computing/minidox/rev1"
|
||||
},
|
||||
"mariorion_v25": {
|
||||
"target": "mariorion_v25/prod"
|
||||
},
|
||||
"marksard/rhymestone": {
|
||||
"target": "marksard/rhymestone/rev1"
|
||||
},
|
||||
"marksard/treadstone32": {
|
||||
"target": "marksard/treadstone32/rev1"
|
||||
},
|
||||
"marksard/treadstone48": {
|
||||
"target": "marksard/treadstone48/rev1"
|
||||
},
|
||||
"maxipad": {
|
||||
"target": "maxipad/promicro"
|
||||
},
|
||||
"mechkeys/mechmini": {
|
||||
"target": "mechkeys/mechmini/v2"
|
||||
},
|
||||
"mechllama/g35": {
|
||||
"target": "mechllama/g35/v2"
|
||||
},
|
||||
"mechlovin/adelais": {
|
||||
"target": "mechlovin/adelais/standard_led/arm/rev2"
|
||||
},
|
||||
"mechlovin/adelais/standard_led/arm/rev4": {
|
||||
"target": "mechlovin/adelais/standard_led/arm/rev4/stm32f303"
|
||||
},
|
||||
"mechlovin/adelais/standard_led/arm": {
|
||||
"target": "mechlovin/adelais/standard_led/arm/rev2"
|
||||
},
|
||||
"mechlovin/adelais/standard_led/avr": {
|
||||
"target": "mechlovin/adelais/standard_led/avr/rev1"
|
||||
},
|
||||
"mechlovin/hannah65/rev1": {
|
||||
"target": "mechlovin/hannah65/rev1/haus"
|
||||
},
|
||||
"mechlovin/infinity87/rev1": {
|
||||
"target": "mechlovin/infinity87/rev1/standard"
|
||||
},
|
||||
"mechlovin/infinity87": {
|
||||
"target": "mechlovin/infinity87/rgb_rev1"
|
||||
},
|
||||
"mechlovin/mechlovin9": {
|
||||
"target": "mechlovin/mechlovin9/rev1"
|
||||
},
|
||||
"mechlovin/olly/jf": {
|
||||
"target": "mechlovin/olly/jf/rev1"
|
||||
},
|
||||
"mechlovin/zed1800": {
|
||||
"target": "mechlovin/zed1800/saber"
|
||||
},
|
||||
"mechlovin/zed65/no_backlight": {
|
||||
"target": "mechlovin/zed65/no_backlight/wearhaus66"
|
||||
},
|
||||
"mechlovin/zed65": {
|
||||
"target": "mechlovin/zed65/no_backlight/wearhaus66"
|
||||
},
|
||||
"mechwild/bde": {
|
||||
"target": "mechwild/bde/rev2"
|
||||
},
|
||||
"mechwild/mokulua": {
|
||||
"target": "mechwild/mokulua/standard"
|
||||
},
|
||||
"mechwild/obe/f401": {
|
||||
"target": "mechwild/obe/f401/base"
|
||||
},
|
||||
"mechwild/obe/f411": {
|
||||
"target": "mechwild/obe/f411/base"
|
||||
},
|
||||
"mechwild/obe": {
|
||||
"target": "mechwild/obe/f401/base"
|
||||
},
|
||||
"mechwild/waka60/f401": {
|
||||
"target": "mechwild/waka60/f401/base"
|
||||
},
|
||||
"mechwild/waka60/f411": {
|
||||
"target": "mechwild/waka60/f411/base"
|
||||
},
|
||||
"mechwild/waka60": {
|
||||
"target": "mechwild/waka60/f401/base"
|
||||
},
|
||||
"murcielago": {
|
||||
"target": "murcielago/rev1"
|
||||
},
|
||||
"nullbitsco/scramble": {
|
||||
"target": "nullbitsco/scramble/v2"
|
||||
},
|
||||
"omkbd/ergodash": {
|
||||
"target": "omkbd/ergodash/rev1"
|
||||
},
|
||||
"omkbd/runner3680": {
|
||||
"target": "omkbd/runner3680/5x8"
|
||||
},
|
||||
"orthodox": {
|
||||
"target": "orthodox/rev3"
|
||||
},
|
||||
"peej/rosaline": {
|
||||
"target": "peej/rosaline/staggered"
|
||||
},
|
||||
"peej/tripel": {
|
||||
"target": "peej/tripel/left"
|
||||
},
|
||||
"peranekofactory/tone": {
|
||||
"target": "peranekofactory/tone/rev2"
|
||||
},
|
||||
"phase_studio/titan65": {
|
||||
"target": "phase_studio/titan65/hotswap"
|
||||
},
|
||||
"pica40": {
|
||||
"target": "pica40/rev2"
|
||||
},
|
||||
"pinky": {
|
||||
"target": "pinky/3"
|
||||
},
|
||||
"ploopyco/madromys": {
|
||||
"target": "ploopyco/madromys/rev1_001"
|
||||
},
|
||||
"ploopyco/trackball_mini": {
|
||||
"target": "ploopyco/trackball_mini/rev1_001"
|
||||
},
|
||||
"ploopyco/trackball_nano": {
|
||||
"target": "ploopyco/trackball_nano/rev1_001"
|
||||
},
|
||||
"ploopyco/trackball_thumb": {
|
||||
"target": "ploopyco/trackball_thumb/rev1_001"
|
||||
},
|
||||
"primekb/meridian": {
|
||||
"target": "primekb/meridian/ktr1010"
|
||||
},
|
||||
"primekb/prime_e": {
|
||||
"target": "primekb/prime_e/std"
|
||||
},
|
||||
"program_yoink": {
|
||||
"target": "program_yoink/staggered"
|
||||
},
|
||||
"projectcain/vault35": {
|
||||
"target": "projectcain/vault35/atmega32u4"
|
||||
},
|
||||
"qpockets/space_space": {
|
||||
"target": "qpockets/space_space/rev2"
|
||||
},
|
||||
"qwertyydox": {
|
||||
"target": "qwertyydox/rev1"
|
||||
},
|
||||
"rate/pistachio": {
|
||||
"target": "rate/pistachio/rev2"
|
||||
},
|
||||
"recompile_keys/choco60": {
|
||||
"target": "recompile_keys/choco60/rev1"
|
||||
},
|
||||
"recompile_keys/nomu30": {
|
||||
"target": "recompile_keys/nomu30/rev1"
|
||||
},
|
||||
"redox/rev1": {
|
||||
"target": "redox/rev1/base"
|
||||
},
|
||||
"rgbkb/mun": {
|
||||
"target": "rgbkb/mun/rev1"
|
||||
},
|
||||
"rgbkb/sol3": {
|
||||
"target": "rgbkb/sol3/rev1"
|
||||
},
|
||||
"rgbkb/sol": {
|
||||
"target": "rgbkb/sol/rev2"
|
||||
},
|
||||
"rgbkb/zen": {
|
||||
"target": "rgbkb/zen/rev2"
|
||||
},
|
||||
"rgbkb/zygomorph": {
|
||||
"target": "rgbkb/zygomorph/rev1"
|
||||
},
|
||||
"rmi_kb/herringbone": {
|
||||
"target": "rmi_kb/herringbone/v1"
|
||||
},
|
||||
"rmi_kb/mona": {
|
||||
"target": "rmi_kb/mona/v1_1"
|
||||
},
|
||||
"rmi_kb/tkl_ff": {
|
||||
"target": "rmi_kb/tkl_ff/v1"
|
||||
},
|
||||
"rmi_kb/wete": {
|
||||
"target": "rmi_kb/wete/v2"
|
||||
},
|
||||
"rookiebwoy/late9": {
|
||||
"target": "rookiebwoy/late9/rev1"
|
||||
},
|
||||
"rookiebwoy/neopad": {
|
||||
"target": "rookiebwoy/neopad/rev1"
|
||||
},
|
||||
"rura66": {
|
||||
"target": "rura66/rev1"
|
||||
},
|
||||
"salicylic_acid3/7skb": {
|
||||
"target": "salicylic_acid3/7skb/rev1"
|
||||
},
|
||||
"salicylic_acid3/getta25": {
|
||||
"target": "salicylic_acid3/getta25/rev1"
|
||||
},
|
||||
"salicylic_acid3/jisplit89": {
|
||||
"target": "salicylic_acid3/jisplit89/rev1"
|
||||
},
|
||||
"salicylic_acid3/naked48": {
|
||||
"target": "salicylic_acid3/naked48/rev1"
|
||||
},
|
||||
"salicylic_acid3/naked60": {
|
||||
"target": "salicylic_acid3/naked60/rev1"
|
||||
},
|
||||
"salicylic_acid3/naked64": {
|
||||
"target": "salicylic_acid3/naked64/rev1"
|
||||
},
|
||||
"salicylic_acid3/setta21": {
|
||||
"target": "salicylic_acid3/setta21/rev1"
|
||||
},
|
||||
"sawnsprojects/okayu": {
|
||||
"target": "sawnsprojects/okayu/stm32f072"
|
||||
},
|
||||
"smoll/lefty": {
|
||||
"target": "smoll/lefty/rev2"
|
||||
},
|
||||
"sofle": {
|
||||
"target": "sofle/rev1"
|
||||
},
|
||||
"spaceholdings/nebula68b": {
|
||||
"target": "spaceholdings/nebula68b/solder"
|
||||
},
|
||||
"spacetime": {
|
||||
"target": "spacetime/rev1"
|
||||
},
|
||||
"splitkb/aurora/corne": {
|
||||
"target": "splitkb/aurora/corne/rev1"
|
||||
},
|
||||
"splitkb/aurora/helix": {
|
||||
"target": "splitkb/aurora/helix/rev1"
|
||||
},
|
||||
"splitkb/aurora/lily58": {
|
||||
"target": "splitkb/aurora/lily58/rev1"
|
||||
},
|
||||
"splitkb/aurora/sofle_v2": {
|
||||
"target": "splitkb/aurora/sofle_v2/rev1"
|
||||
},
|
||||
"splitkb/aurora/sweep": {
|
||||
"target": "splitkb/aurora/sweep/rev1"
|
||||
},
|
||||
"splitkb/kyria": {
|
||||
"target": "splitkb/kyria/rev3"
|
||||
},
|
||||
"splitkb/kyria/rev1": {
|
||||
"target": "splitkb/kyria/rev1/base"
|
||||
},
|
||||
"splitkb/kyria/rev2": {
|
||||
"target": "splitkb/kyria/rev2/base"
|
||||
},
|
||||
"splitty": {
|
||||
"target": "splitty/rev1"
|
||||
},
|
||||
"studiokestra/galatea": {
|
||||
"target": "studiokestra/galatea/rev1"
|
||||
},
|
||||
"takashiski/hecomi": {
|
||||
"target": "takashiski/hecomi/alpha"
|
||||
},
|
||||
"takashiski/namecard2x4": {
|
||||
"target": "takashiski/namecard2x4/rev2"
|
||||
},
|
||||
"teleport/native": {
|
||||
"target": "teleport/native/iso"
|
||||
},
|
||||
"themadnoodle/noodlepad": {
|
||||
"target": "themadnoodle/noodlepad/v1"
|
||||
},
|
||||
"tkw/grandiceps": {
|
||||
"target": "tkw/grandiceps/rev1"
|
||||
},
|
||||
"tominabox1/le_chiffre": {
|
||||
"target": "tominabox1/le_chiffre/rev1"
|
||||
},
|
||||
"tominabox1/littlefoot_lx": {
|
||||
"target": "tominabox1/littlefoot_lx/rev1"
|
||||
},
|
||||
"tominabox1/underscore33": {
|
||||
"target": "tominabox1/underscore33/rev1"
|
||||
},
|
||||
"trnthsn/e8ghty": {
|
||||
"target": "trnthsn/e8ghty/stm32f103"
|
||||
},
|
||||
"trnthsn/s6xty5neor2": {
|
||||
"target": "trnthsn/s6xty5neor2/stm32f103"
|
||||
},
|
||||
"tweetydabird/lotus58": {
|
||||
"target": "tweetydabird/lotus58/promicro"
|
||||
},
|
||||
"unison": {
|
||||
"target": "unison/v04"
|
||||
},
|
||||
"uzu42": {
|
||||
"target": "uzu42/rev1"
|
||||
},
|
||||
"vitamins_included": {
|
||||
"target": "vitamins_included/rev2"
|
||||
},
|
||||
"westm/westm68": {
|
||||
"target": "westm/westm68/rev2"
|
||||
},
|
||||
"westm/westm9": {
|
||||
"target": "westm/westm9/rev2"
|
||||
},
|
||||
"woodkeys/meira": {
|
||||
"target": "woodkeys/meira/promicro"
|
||||
},
|
||||
"work_louder/loop": {
|
||||
"target": "work_louder/loop/rev3"
|
||||
},
|
||||
"work_louder/work_board": {
|
||||
"target": "work_louder/work_board/rev3"
|
||||
},
|
||||
"yanghu/unicorne": {
|
||||
"target": "yanghu/unicorne/f411"
|
||||
},
|
||||
"yosino58": {
|
||||
"target": "yosino58/rev1"
|
||||
},
|
||||
"ymdk/yd60mq": {
|
||||
"target": "ymdk/yd60mq/12led"
|
||||
},
|
||||
"yushakobo/navpad/10": {
|
||||
"target": "yushakobo/navpad/10/rev1"
|
||||
},
|
||||
"yynmt/acperience12": {
|
||||
"target": "yynmt/acperience12/rev1"
|
||||
},
|
||||
"zsa/planck_ez": {
|
||||
"target": "zsa/planck_ez/base"
|
||||
}
|
||||
}
|
||||
|
17
data/schemas/community_module.jsonschema
Normal file
17
data/schemas/community_module.jsonschema
Normal file
@ -0,0 +1,17 @@
|
||||
{
|
||||
"$schema": "https://json-schema.org/draft/2020-12/schema#",
|
||||
"$id": "qmk.community_module.v1",
|
||||
"title": "Community Module Information",
|
||||
"type": "object",
|
||||
"required": ["module_name", "maintainer"]
|
||||
"properties": {
|
||||
"module_name": {"$ref": "qmk.definitions.v1#/text_identifier"},
|
||||
"maintainer": {"$ref": "qmk.definitions.v1#/text_identifier"},
|
||||
"url": {
|
||||
"type": "string",
|
||||
"format": "uri"
|
||||
},
|
||||
"keycodes": {"$ref": "qmk.definitions.v1#/keycode_decl_array"},
|
||||
"features": {"$ref": "qmk.keyboard.v1#/definitions/features_config"},
|
||||
}
|
||||
}
|
@ -31,6 +31,11 @@
|
||||
"pins": {"$ref": "qmk.definitions.v1#/mcu_pin_array"}
|
||||
}
|
||||
}
|
||||
"features_config": {
|
||||
"$ref": "qmk.definitions.v1#/boolean_array",
|
||||
"propertyNames": {"$ref": "qmk.definitions.v1#/snake_case"},
|
||||
"not": {"required": ["lto"]}
|
||||
},
|
||||
},
|
||||
"type": "object",
|
||||
"not": {"required": ["vendorId", "productId"]}, // reject via keys...
|
||||
@ -328,11 +333,7 @@
|
||||
"enabled": {"type": "boolean"}
|
||||
}
|
||||
},
|
||||
"features": {
|
||||
"$ref": "qmk.definitions.v1#/boolean_array",
|
||||
"propertyNames": {"$ref": "qmk.definitions.v1#/snake_case"},
|
||||
"not": {"required": ["lto"]}
|
||||
},
|
||||
"features": { "$ref": "#/definitions/features_config" },
|
||||
"indicators": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
@ -422,7 +423,11 @@
|
||||
"h": {"$ref": "qmk.definitions.v1#/key_unit"},
|
||||
"w": {"$ref": "qmk.definitions.v1#/key_unit"},
|
||||
"x": {"$ref": "qmk.definitions.v1#/key_unit"},
|
||||
"y": {"$ref": "qmk.definitions.v1#/key_unit"}
|
||||
"y": {"$ref": "qmk.definitions.v1#/key_unit"},
|
||||
"hand": {
|
||||
"type": "string",
|
||||
"enum": ["L", "R", "*"]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -463,6 +468,12 @@
|
||||
"rows": {"$ref": "qmk.definitions.v1#/mcu_pin_array"}
|
||||
}
|
||||
},
|
||||
"modules": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"mouse_key": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
@ -915,6 +926,7 @@
|
||||
"tapping": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"chordal_hold": {"type": "boolean"},
|
||||
"force_hold": {"type": "boolean"},
|
||||
"force_hold_per_key": {"type": "boolean"},
|
||||
"ignore_mod_tap_interrupt": {"type": "boolean"},
|
||||
|
@ -71,6 +71,12 @@
|
||||
"config": {"$ref": "qmk.keyboard.v1"},
|
||||
"notes": {
|
||||
"type": "string"
|
||||
},
|
||||
"modules": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
135
docs/ChangeLog/20250223.md
Normal file
135
docs/ChangeLog/20250223.md
Normal file
@ -0,0 +1,135 @@
|
||||
# QMK Breaking Changes - 2025 February 23 Changelog
|
||||
|
||||
## Notable Features
|
||||
|
||||
### Community Modules ([#24848](https://github.com/qmk/qmk_firmware/pull/24848))
|
||||
|
||||
Community Modules are a feature within QMK which allows code to be implemented by third parties, making it available for other people to import into their own builds.
|
||||
|
||||
These modules can provide implementations which override or enhance normal QMK processing; initialization, key processing, suspend, and shutdown are some of the provided hooks which modules may currently implement.
|
||||
|
||||
See the [Community Modules documentation](../features/community_modules) for more information, including the full list of available hooks.
|
||||
|
||||
First-class support for [External Userspace](../newbs_external_userspace) is included out of the box, so there's even more reason to take the plunge and convert your keymap builds to a userspace repository!
|
||||
|
||||
::: tip
|
||||
An example with a new keycode and some debugging information in the QMK repository [lives here](https://github.com/qmk/qmk_firmware/tree/master/modules/qmk/hello_world), and a community module port of [getreuer's SOCD Cleaner](https://getreuer.info/posts/keyboards/socd-cleaner/) can be found in [tzarc's modules repo](https://github.com/tzarc/qmk_modules).
|
||||
:::
|
||||
|
||||
### Chordal Hold ([#24560](https://github.com/qmk/qmk_firmware/pull/24560))
|
||||
|
||||
Chordal Hold implements, by default, an "opposite hands" rule. Suppose a tap-hold key is pressed and then, before the tapping term, another key is pressed. With Chordal Hold, the tap-hold key is settled as tapped if the two keys are on the same hand.
|
||||
|
||||
Chordal Hold may be useful to avoid accidental modifier activation with mod-taps, particularly in rolled keypresses when using home row mods.
|
||||
|
||||
See the [Chordal Hold documentation](../tap_hold#chordal-hold) for more information.
|
||||
|
||||
## Changes Requiring User Action
|
||||
|
||||
### Updated Keyboard Codebases
|
||||
|
||||
| Old Keyboard Name | New Keyboard Name |
|
||||
|-------------------------|-----------------------------|
|
||||
| cxt_studio | cxt_studio/12e4 |
|
||||
| ergodox_stm32 | handwired/ergodox_stm32 |
|
||||
| ploopyco/mouse | ploopyco/mouse/rev1_002 |
|
||||
| ploopyco/trackball/rev1 | ploopyco/trackball/rev1_004 |
|
||||
| ymdk/id75 | ymdk/id75/f103 |
|
||||
|
||||
## Deprecation Notices
|
||||
|
||||
In line with the [notice period](../support_deprecation_policy#how-much-advance-notice-will-be-given), deprecation notices for larger items are listed here.
|
||||
|
||||
### DEFAULT_FOLDER removal ([#24836](https://github.com/qmk/qmk_firmware/pull/24836))
|
||||
|
||||
`DEFAULT_FOLDER` was originally introduced to work around limitations within the build system.
|
||||
Parent folders containing common configuration would create invalid build targets.
|
||||
|
||||
With the introduction of [`keyboard.json`](./20240526#keyboard-json) as a configuration file, the build system now has a consistent method to detect build targets.
|
||||
The `DEFAULT_FOLDER` functionality is now redundant and the intent is for `rules.mk` to become pure configuration.
|
||||
|
||||
Backwards compatibility of build targets has been maintained where possible.
|
||||
|
||||
## Full changelist
|
||||
|
||||
Core:
|
||||
* Chaining OSL and MO ([#23065](https://github.com/qmk/qmk_firmware/pull/23065))
|
||||
* Add extra keymap for EurKEY layout ([#24241](https://github.com/qmk/qmk_firmware/pull/24241))
|
||||
* Add leader_add_user callback ([#24266](https://github.com/qmk/qmk_firmware/pull/24266))
|
||||
* always return audio pin to 0 on ARM ([#24503](https://github.com/qmk/qmk_firmware/pull/24503))
|
||||
* Update Starlight matrix effects ([#24521](https://github.com/qmk/qmk_firmware/pull/24521))
|
||||
* Refactor Hue Breathing matrix effect with runner ([#24525](https://github.com/qmk/qmk_firmware/pull/24525))
|
||||
* Ensure timer_read() is safe to call from interrupt handlers on ARM ([#24529](https://github.com/qmk/qmk_firmware/pull/24529))
|
||||
* Update Raindrops effect to respect LED range limits ([#24531](https://github.com/qmk/qmk_firmware/pull/24531))
|
||||
* Add Chordal Hold, an "opposite hands rule" tap-hold option similar to Achordion, Bilateral Combinations. ([#24560](https://github.com/qmk/qmk_firmware/pull/24560))
|
||||
* Azoteq - improve I2C behaviour while polling. ([#24611](https://github.com/qmk/qmk_firmware/pull/24611))
|
||||
* macOS install: remove bad ARM toolchains ([#24637](https://github.com/qmk/qmk_firmware/pull/24637))
|
||||
* small refactoring of TIMER_DIFF ([#24678](https://github.com/qmk/qmk_firmware/pull/24678))
|
||||
* Subscript alef correction ([#24707](https://github.com/qmk/qmk_firmware/pull/24707))
|
||||
* Created SH1107 driver for quantum painter ([#24724](https://github.com/qmk/qmk_firmware/pull/24724))
|
||||
* [CI] Regenerate Files ([#24772](https://github.com/qmk/qmk_firmware/pull/24772))
|
||||
* Patch up issue for inverted complementary output on Backlight ([#24794](https://github.com/qmk/qmk_firmware/pull/24794))
|
||||
* Patch up issue when compile with APA102 driver ([#24800](https://github.com/qmk/qmk_firmware/pull/24800))
|
||||
* Consolidate send_string implementations. ([#24817](https://github.com/qmk/qmk_firmware/pull/24817))
|
||||
* Consolidate timer_elapsed implementations ([#24830](https://github.com/qmk/qmk_firmware/pull/24830))
|
||||
* `i2c_master`: remove deprecated functions ([#24832](https://github.com/qmk/qmk_firmware/pull/24832))
|
||||
* Resolve keyboard_aliases when processing keyboard make targets ([#24834](https://github.com/qmk/qmk_firmware/pull/24834))
|
||||
* LED drivers: remove deprecated defines ([#24837](https://github.com/qmk/qmk_firmware/pull/24837))
|
||||
* `ferris/0_1`: update I2C API usage ([#24839](https://github.com/qmk/qmk_firmware/pull/24839))
|
||||
* Unify i2c_master headers ([#24846](https://github.com/qmk/qmk_firmware/pull/24846))
|
||||
* Community modules ([#24848](https://github.com/qmk/qmk_firmware/pull/24848))
|
||||
* Relocate base WS2812 code ([#24850](https://github.com/qmk/qmk_firmware/pull/24850))
|
||||
* Unify UART headers ([#24855](https://github.com/qmk/qmk_firmware/pull/24855))
|
||||
* Unify spi_master headers ([#24857](https://github.com/qmk/qmk_firmware/pull/24857))
|
||||
* Invoke `process_record_via` after `_user`/`_kb` have a chance to handle it. ([#24879](https://github.com/qmk/qmk_firmware/pull/24879))
|
||||
|
||||
CLI:
|
||||
* Extend lint to reject 'blank' files ([#23994](https://github.com/qmk/qmk_firmware/pull/23994))
|
||||
* `qmk docs`: restore `--port` and `--browser` arguments ([#24623](https://github.com/qmk/qmk_firmware/pull/24623))
|
||||
* Update via2json layout macro searching ([#24640](https://github.com/qmk/qmk_firmware/pull/24640))
|
||||
* Change `new-keymap` keymap name prompt ([#24701](https://github.com/qmk/qmk_firmware/pull/24701))
|
||||
* default_keyboard.h generation tweaks ([#24715](https://github.com/qmk/qmk_firmware/pull/24715))
|
||||
* Ensure `qmk flash` rejects invalid files for uf2 compatible bootloaders ([#24802](https://github.com/qmk/qmk_firmware/pull/24802))
|
||||
* Reject readme dummy content ([#24913](https://github.com/qmk/qmk_firmware/pull/24913))
|
||||
|
||||
Submodule updates:
|
||||
* chibios: usb_main: remove OTG sof workaround ([#24259](https://github.com/qmk/qmk_firmware/pull/24259))
|
||||
* Update ChibiOS to latest stable branch. ([#24651](https://github.com/qmk/qmk_firmware/pull/24651))
|
||||
* Update ChibiOS `stable_21.11.x`. ([#24714](https://github.com/qmk/qmk_firmware/pull/24714))
|
||||
* Update ChibiOS-Contrib. ([#24803](https://github.com/qmk/qmk_firmware/pull/24803))
|
||||
|
||||
Keyboards:
|
||||
* refactor: move ymdk/id75 to revision ([#24590](https://github.com/qmk/qmk_firmware/pull/24590))
|
||||
* skyloong/gk61: Remove overriding of core keycode behaviour ([#24655](https://github.com/qmk/qmk_firmware/pull/24655))
|
||||
* moky/moky88: Remove use of deprecated defines ([#24656](https://github.com/qmk/qmk_firmware/pull/24656))
|
||||
* Updating Promenade keyboard (Missing keys in matrix, other minor changes to keymap) ([#24705](https://github.com/qmk/qmk_firmware/pull/24705))
|
||||
* Moving cxt_studio keyboard to own folder ([#24748](https://github.com/qmk/qmk_firmware/pull/24748))
|
||||
* Add CXT Studio 12E3 keyboard ([#24749](https://github.com/qmk/qmk_firmware/pull/24749))
|
||||
* Add Silakka54 keyboard ([#24757](https://github.com/qmk/qmk_firmware/pull/24757))
|
||||
* Add more layout for skiller_sgk50_s4 ([#24784](https://github.com/qmk/qmk_firmware/pull/24784))
|
||||
* Add watchdog service to RGBKB Sol 3 ([#24786](https://github.com/qmk/qmk_firmware/pull/24786))
|
||||
* Migrate some DEFAULT_FOLDER to keyboard_aliases.hjson ([#24835](https://github.com/qmk/qmk_firmware/pull/24835))
|
||||
* Remove DEFAULT_FOLDER where keyboard aliases already exists ([#24838](https://github.com/qmk/qmk_firmware/pull/24838))
|
||||
* Migrate some DEFAULT_FOLDER to keyboard_aliases.hjson ([#24845](https://github.com/qmk/qmk_firmware/pull/24845))
|
||||
* Update for 'A-JAZZ AKC084' ('A-JAZZ AKP846') ([#24868](https://github.com/qmk/qmk_firmware/pull/24868))
|
||||
* handwired/xealous - Remove DEFAULT_FOLDER ([#24877](https://github.com/qmk/qmk_firmware/pull/24877))
|
||||
* Updates to Ploopy Classic, Mouse, and Thumb for RP2040 hardware upgrade ([#24880](https://github.com/qmk/qmk_firmware/pull/24880))
|
||||
* Move Ergodox STM32 to handwired folder ([#24903](https://github.com/qmk/qmk_firmware/pull/24903))
|
||||
* Remove readme dummy content ([#24912](https://github.com/qmk/qmk_firmware/pull/24912))
|
||||
* Migrate some DEFAULT_FOLDER to keyboard_aliases.hjson ([#24915](https://github.com/qmk/qmk_firmware/pull/24915))
|
||||
* Migrate some DEFAULT_FOLDER to keyboard_aliases.hjson ([#24938](https://github.com/qmk/qmk_firmware/pull/24938))
|
||||
|
||||
Keyboard fixes:
|
||||
* Fix up CI with `DEFAULT_FOLDER`. ([#24842](https://github.com/qmk/qmk_firmware/pull/24842))
|
||||
* rgbkb/pan - Remove invalid build target ([#24844](https://github.com/qmk/qmk_firmware/pull/24844))
|
||||
|
||||
Others:
|
||||
* Formally deprecate DEFAULT_FOLDER ([#24836](https://github.com/qmk/qmk_firmware/pull/24836))
|
||||
* Correct I2C API reference ([#24840](https://github.com/qmk/qmk_firmware/pull/24840))
|
||||
|
||||
Bugs:
|
||||
* Retro Tapping Re-Write; Key Roll Fix ([#23641](https://github.com/qmk/qmk_firmware/pull/23641))
|
||||
* Fix Quantum Painter compiliation issues with heavy optimization ([#24667](https://github.com/qmk/qmk_firmware/pull/24667))
|
||||
* Bugfix and update for AT32F415 ([#24807](https://github.com/qmk/qmk_firmware/pull/24807))
|
||||
* Fix for Chordal Hold: stuck mods when mod-taps are pressed in a stuttered sequence. ([#24878](https://github.com/qmk/qmk_firmware/pull/24878))
|
||||
* fix EEPROM driver for STM32L0/1 cat.1 devices ([#24928](https://github.com/qmk/qmk_firmware/pull/24928))
|
@ -60,6 +60,7 @@
|
||||
"items": [
|
||||
{ "text": "Customizing Functionality", "link": "/custom_quantum_functions" },
|
||||
{ "text": "Driver Installation with Zadig", "link": "/driver_installation_zadig" },
|
||||
{ "text": "Community Modules", "link": "/features/community_modules" },
|
||||
{ "text": "Keymap Overview", "link": "/keymap" },
|
||||
{
|
||||
"text": "Development Environments",
|
||||
@ -206,7 +207,7 @@
|
||||
{ "text": "My Pull Request Was Flagged", "link": "/breaking_changes_instructions" },
|
||||
{
|
||||
"text": "Most Recent ChangeLog",
|
||||
"link": "/ChangeLog/20241124"
|
||||
"link": "/ChangeLog/20250223"
|
||||
},
|
||||
{ "text": "Past Breaking Changes", "link": "/breaking_changes_history" },
|
||||
{ "text": "Deprecation Policy", "link": "/support_deprecation_policy" }
|
||||
|
@ -10,25 +10,25 @@ Practically, this means QMK merges the `develop` branch into the `master` branch
|
||||
|
||||
## What has been included in past Breaking Changes?
|
||||
|
||||
* [2025 Feb 23](ChangeLog/20250223)
|
||||
* [2024 Nov 24](ChangeLog/20241124)
|
||||
* [2024 Aug 25](ChangeLog/20240825)
|
||||
* [2024 May 26](ChangeLog/20240526)
|
||||
* [Older Breaking Changes](breaking_changes_history)
|
||||
|
||||
## When is the next Breaking Change?
|
||||
|
||||
The next Breaking Change is scheduled for February 23, 2025.
|
||||
The next Breaking Change is scheduled for May 25, 2025.
|
||||
|
||||
### Important Dates
|
||||
|
||||
* 2024 Nov 24 - `develop` is tagged with a new release version. Each push to `master` is subsequently merged to `develop` by GitHub actions.
|
||||
* 2025 Jan 26 - `develop` closed to new PRs.
|
||||
* 2025 Jan 26 - Call for testers.
|
||||
* 2025 Feb 9 - Last day for merges -- after this point `develop` is locked for testing and accepts only bugfixes
|
||||
* 2025 Feb 16 - `develop` is locked, only critical bugfix PRs merged.
|
||||
* 2024 Nov 21 - `master` is locked, no PRs merged.
|
||||
* 2025 Feb 23 - Merge `develop` to `master`.
|
||||
* 2025 Feb 23 - `master` is unlocked. PRs can be merged again.
|
||||
* 2025 Feb 23 - `develop` is tagged with a new release version. Each push to `master` is subsequently merged to `develop` by GitHub actions.
|
||||
* 2025 Apr 27 - `develop` closed to new PRs.
|
||||
* 2025 Apr 27 - Call for testers.
|
||||
* 2025 May 11 - Last day for merges -- after this point `develop` is locked for testing and accepts only bugfixes
|
||||
* 2025 May 18 - `develop` is locked, only critical bugfix PRs merged.
|
||||
* 2025 May 23 - `master` is locked, no PRs merged.
|
||||
* 2025 May 25 - Merge `develop` to `master`.
|
||||
* 2025 May 25 - `master` is unlocked. PRs can be merged again.
|
||||
|
||||
## What changes will be included?
|
||||
|
||||
|
@ -2,6 +2,7 @@
|
||||
|
||||
This page links to all previous changelogs from the QMK Breaking Changes process.
|
||||
|
||||
* [2025 Feb 23](ChangeLog/20250223) - version 0.28.0
|
||||
* [2024 Nov 24](ChangeLog/20241124) - version 0.27.0
|
||||
* [2024 Aug 25](ChangeLog/20240825) - version 0.26.0
|
||||
* [2024 May 26](ChangeLog/20240526) - version 0.25.0
|
||||
|
@ -723,23 +723,26 @@ Now open your dev environment and live a squiggly-free life.
|
||||
|
||||
## `qmk docs`
|
||||
|
||||
This command starts a local HTTP server which you can use for browsing or improving the docs. Default port is 5173.
|
||||
This command starts a local HTTP server which you can use for browsing or improving the docs, and provides live reload capability whilst editing. Default port is 8936.
|
||||
Use the `-b`/`--browser` flag to automatically open the local webserver in your default browser.
|
||||
|
||||
This command requires `node` and `yarn` to be installed as prerequisites, and provides live reload capability whilst editing.
|
||||
Requires `node` and `yarn` to be installed as prerequisites.
|
||||
|
||||
**Usage**:
|
||||
|
||||
```
|
||||
usage: qmk docs [-h]
|
||||
usage: qmk docs [-h] [-b] [-p PORT]
|
||||
|
||||
options:
|
||||
-h, --help show this help message and exit
|
||||
-h, --help show this help message and exit
|
||||
-b, --browser Open the docs in the default browser.
|
||||
-p, --port PORT Port number to use.
|
||||
```
|
||||
|
||||
## `qmk generate-docs`
|
||||
|
||||
This command allows you to generate QMK documentation locally. It can be uses for general browsing or improving the docs.
|
||||
Use the `-s`/`--serve` flag to also serve the static site once built. Default port is 4173.
|
||||
This command generates QMK documentation for production.
|
||||
Use the `-s`/`--serve` flag to also serve the static site on port 4173 once built. Note that this does not provide live reloading; use `qmk docs` instead for development purposes.
|
||||
|
||||
This command requires `node` and `yarn` to be installed as prerequisites, and requires the operating system to support symlinks.
|
||||
|
||||
|
@ -106,10 +106,10 @@ enum my_keycodes {
|
||||
Before opening a pull request, you can preview your changes if you have set up the development environment by running this command from the `qmk_firmware/` folder:
|
||||
|
||||
```
|
||||
qmk docs
|
||||
qmk docs -b
|
||||
```
|
||||
|
||||
and navigating to `http://localhost:5173/`.
|
||||
Which should automatically open your browser; otherwise, navigate to `http://localhost:8936/`.
|
||||
|
||||
## Keyboards
|
||||
|
||||
|
@ -9,12 +9,19 @@ This page does not assume any special knowledge about QMK, but reading [Understa
|
||||
We have structured QMK as a hierarchy:
|
||||
|
||||
* Core (`_quantum`)
|
||||
* Community Module (`_<module>`)
|
||||
* Community Module -> Keyboard/Revision (`_<module>_kb`)
|
||||
* Community Module -> Keymap (`_<module>_user`)
|
||||
* Keyboard/Revision (`_kb`)
|
||||
* Keymap (`_user`)
|
||||
|
||||
Each of the functions described below can be defined with a `_kb()` suffix or a `_user()` suffix. We intend for you to use the `_kb()` suffix at the Keyboard/Revision level, while the `_user()` suffix should be used at the Keymap level.
|
||||
|
||||
When defining functions at the Keyboard/Revision level it is important that your `_kb()` implementation call `_user()` before executing anything else- otherwise the keymap level function will never be called.
|
||||
When defining functions at the Keyboard/Revision level it is important that your `_kb()` implementation call `_user()` at an appropriate location, otherwise the keymap level function will never be called.
|
||||
|
||||
Functions at the `_<module>_xxx()` level are intended to allow keyboards or keymaps to override or enhance the processing associated with a [community module](/features/community_modules).
|
||||
|
||||
When defining module overrides such as `process_record_<module>()`, the same pattern should be used; the module must invoke `process_record_<module>_kb()` as appropriate.
|
||||
|
||||
# Custom Keycodes
|
||||
|
||||
@ -99,7 +106,7 @@ These are the three main initialization functions, listed in the order that they
|
||||
* `keyboard_post_init_*` - Happens at the end of the firmware's startup process. This is where you'd want to put "customization" code, for the most part.
|
||||
|
||||
::: warning
|
||||
For most people, the `keyboard_post_init_user` function is what you want to call. For instance, this is where you want to set up things for RGB Underglow.
|
||||
For most people, the `keyboard_post_init_user` function is what you want to implement. For instance, this is where you want to set up things for RGB Underglow.
|
||||
:::
|
||||
|
||||
## Keyboard Pre Initialization code
|
||||
|
@ -16,17 +16,22 @@ You can then call the I2C API by including `i2c_master.h` in your code.
|
||||
|
||||
## I2C Addressing {#note-on-i2c-addresses}
|
||||
|
||||
All of the addresses expected by this driver should be pushed to the upper 7 bits of the address byte. Setting
|
||||
the lower bit (indicating read/write) will be done by the respective functions. Almost all I2C addresses listed
|
||||
on datasheets and the internet will be represented as 7 bits occupying the lower 7 bits and will need to be
|
||||
shifted to the left (more significant) by one bit. This is easy to do via the bitwise shift operator `<< 1`.
|
||||
I2C addresses listed on datasheets and the internet are usually represented as a 7-bit value. The eighth bit (the least significant bit) controls whether the operation is a read or a write.
|
||||
|
||||
You can either do this on each call to the functions below, or once in your definition of the address. For example, if your device has an address of `0x18`:
|
||||
All of the address parameters expected by the driver API should therefore be pushed to the upper 7 bits of the address byte; the driver will take care of setting the read/write bit as appropriate.
|
||||
|
||||
This is easy to do via the bitwise left shift operator. For example, if your device has an address of `0x18` you might create a define for convenience:
|
||||
|
||||
```c
|
||||
#define MY_I2C_ADDRESS (0x18 << 1)
|
||||
```
|
||||
|
||||
Or, you can shift the address ahead of time:
|
||||
|
||||
```c
|
||||
#define MY_I2C_ADDRESS 0x30
|
||||
```
|
||||
|
||||
See https://www.robot-electronics.co.uk/i2c-tutorial for more information about I2C addressing and other technical details.
|
||||
|
||||
## AVR Configuration {#avr-configuration}
|
||||
@ -39,12 +44,12 @@ The following defines can be used to configure the I2C master driver:
|
||||
|
||||
No further setup is required - just connect the `SDA` and `SCL` pins of your I2C devices to the matching pins on the MCU:
|
||||
|
||||
|MCU |`SCL`|`SDA`|
|
||||
|------------------|-----|-----|
|
||||
|ATmega16/32U4 |`D0` |`D1` |
|
||||
|AT90USB64/128 |`D0` |`D1` |
|
||||
|ATmega32A |`C0` |`C1` |
|
||||
|ATmega328/P |`C5` |`C4` |
|
||||
|MCU |`SCL`|`SDA`|
|
||||
|-------------|-----|-----|
|
||||
|ATmega16/32U4|`D0` |`D1` |
|
||||
|AT90USB64/128|`D0` |`D1` |
|
||||
|ATmega32A |`C0` |`C1` |
|
||||
|ATmega328/P |`C5` |`C4` |
|
||||
|
||||
::: tip
|
||||
The ATmega16/32U2 does not possess I2C functionality, and so cannot use this driver.
|
||||
@ -52,7 +57,7 @@ The ATmega16/32U2 does not possess I2C functionality, and so cannot use this dri
|
||||
|
||||
## ChibiOS/ARM Configuration {#arm-configuration}
|
||||
|
||||
You'll need to determine which pins can be used for I2C -- a an example, STM32 parts generally have multiple I2C peripherals, labeled I2C1, I2C2, I2C3 etc.
|
||||
You'll need to determine which pins can be used for I2C -- as an example, STM32 parts generally have multiple I2C peripherals, labeled I2C1, I2C2, I2C3 etc.
|
||||
|
||||
To enable I2C, modify your board's `halconf.h` to enable I2C, then modify your board's `mcuconf.h` to enable the peripheral you've chosen:
|
||||
|
||||
@ -83,15 +88,19 @@ To enable I2C, modify your board's `halconf.h` to enable I2C, then modify your b
|
||||
|
||||
Configuration-wise, you'll need to set up the peripheral as per your MCU's datasheet -- the defaults match the pins for a Proton-C, i.e. STM32F303.
|
||||
|
||||
|`config.h` Overrride |Description |Default|
|
||||
|------------------------|--------------------------------------------------------------|-------|
|
||||
|`I2C_DRIVER` |I2C peripheral to use - I2C1 -> `I2CD1`, I2C2 -> `I2CD2` etc. |`I2CD1`|
|
||||
|`I2C1_SCL_PIN` |The pin definition for SCL |`B6` |
|
||||
|`I2C1_SCL_PAL_MODE` |The alternate function mode for SCL |`4` |
|
||||
|`I2C1_SDA_PIN` |The pin definition for SDA |`B7` |
|
||||
|`I2C1_SDA_PAL_MODE` |The alternate function mode for SDA |`4` |
|
||||
|`config.h` Override|Description |Default|
|
||||
|-------------------|-------------------------------------------------------------|-------|
|
||||
|`I2C_DRIVER` |I2C peripheral to use - I2C1 -> `I2CD1`, I2C2 -> `I2CD2` etc.|`I2CD1`|
|
||||
|`I2C1_SCL_PIN` |The pin to use for SCL |`B6` |
|
||||
|`I2C1_SCL_PAL_MODE`|The alternate function mode for SCL |`4` |
|
||||
|`I2C1_SDA_PIN` |The pin to use for SDA |`B7` |
|
||||
|`I2C1_SDA_PAL_MODE`|The alternate function mode for SDA |`4` |
|
||||
|
||||
The following configuration values depend on the specific MCU in use.
|
||||
::: tip
|
||||
Currently only a single I2C peripheral is supported, therefore the `I2C1_*` defines are used for configuration regardless of the selected peripheral.
|
||||
:::
|
||||
|
||||
The following configuration values are dependent on the ChibiOS I2C LLD, which is dictated by the microcontroller.
|
||||
|
||||
### I2Cv1 {#arm-configuration-i2cv1}
|
||||
|
||||
@ -147,7 +156,7 @@ void i2c_init(void) {
|
||||
|
||||
---
|
||||
|
||||
### `i2c_status_t i2c_transmit(uint8_t address, uint8_t *data, uint16_t length, uint16_t timeout)` {#api-i2c-transmit}
|
||||
### `i2c_status_t i2c_transmit(uint8_t address, const uint8_t* data, uint16_t length, uint16_t timeout)` {#api-i2c-transmit}
|
||||
|
||||
Send multiple bytes to the selected I2C device.
|
||||
|
||||
@ -155,10 +164,10 @@ Send multiple bytes to the selected I2C device.
|
||||
|
||||
- `uint8_t address`
|
||||
The 7-bit I2C address of the device.
|
||||
- `uint8_t *data`
|
||||
- `const uint8_t* data`
|
||||
A pointer to the data to transmit.
|
||||
- `uint16_t length`
|
||||
The number of bytes to write. Take care not to overrun the length of `data`.
|
||||
The number of bytes to write. Take care not to overrun the length of `data`.
|
||||
- `uint16_t timeout`
|
||||
The time in milliseconds to wait for a response from the target device.
|
||||
|
||||
@ -168,6 +177,29 @@ Send multiple bytes to the selected I2C device.
|
||||
|
||||
---
|
||||
|
||||
### `i2c_status_t i2c_transmit_P(uint8_t address, const uint8_t* data, uint16_t length, uint16_t timeout)` {#api-i2c-transmit-p}
|
||||
|
||||
Send multiple bytes from PROGMEM to the selected I2C device.
|
||||
|
||||
On ARM devices, this function is simply an alias for `i2c_transmit(address, data, length, timeout)`.
|
||||
|
||||
#### Arguments {#api-i2c-transmit-p-arguments}
|
||||
|
||||
- `uint8_t address`
|
||||
The 7-bit I2C address of the device.
|
||||
- `const uint8_t* data`
|
||||
A pointer to the data to transmit.
|
||||
- `uint16_t length`
|
||||
The number of bytes to write. Take care not to overrun the length of `data`.
|
||||
- `uint16_t timeout`
|
||||
The time in milliseconds to wait for a response from the target device.
|
||||
|
||||
#### Return Value {#api-i2c-transmit-p-return}
|
||||
|
||||
`I2C_STATUS_TIMEOUT` if the timeout period elapses, `I2C_STATUS_ERROR` if some other error occurs, otherwise `I2C_STATUS_SUCCESS`.
|
||||
|
||||
---
|
||||
|
||||
### `i2c_status_t i2c_receive(uint8_t address, uint8_t* data, uint16_t length, uint16_t timeout)` {#api-i2c-receive}
|
||||
|
||||
Receive multiple bytes from the selected I2C device.
|
||||
@ -176,10 +208,10 @@ Receive multiple bytes from the selected I2C device.
|
||||
|
||||
- `uint8_t address`
|
||||
The 7-bit I2C address of the device.
|
||||
- `uint8_t *data`
|
||||
A pointer to the buffer to read into.
|
||||
- `uint8_t* data`
|
||||
A pointer to a buffer to read into.
|
||||
- `uint16_t length`
|
||||
The number of bytes to read. Take care not to overrun the length of `data`.
|
||||
The number of bytes to read. Take care not to overrun the length of `data`.
|
||||
- `uint16_t timeout`
|
||||
The time in milliseconds to wait for a response from the target device.
|
||||
|
||||
@ -189,9 +221,9 @@ Receive multiple bytes from the selected I2C device.
|
||||
|
||||
---
|
||||
|
||||
### `i2c_status_t i2c_write_register(uint8_t devaddr, uint8_t regaddr, uint8_t* data, uint16_t length, uint16_t timeout)` {#api-i2c-write-register}
|
||||
### `i2c_status_t i2c_write_register(uint8_t devaddr, uint8_t regaddr, const uint8_t* data, uint16_t length, uint16_t timeout)` {#api-i2c-write-register}
|
||||
|
||||
Writes to a register with an 8-bit address on the I2C device.
|
||||
Write to a register with an 8-bit address on the I2C device.
|
||||
|
||||
#### Arguments {#api-i2c-write-register-arguments}
|
||||
|
||||
@ -199,10 +231,10 @@ Writes to a register with an 8-bit address on the I2C device.
|
||||
The 7-bit I2C address of the device.
|
||||
- `uint8_t regaddr`
|
||||
The register address to write to.
|
||||
- `uint8_t *data`
|
||||
- `const uint8_t* data`
|
||||
A pointer to the data to transmit.
|
||||
- `uint16_t length`
|
||||
The number of bytes to write. Take care not to overrun the length of `data`.
|
||||
The number of bytes to write. Take care not to overrun the length of `data`.
|
||||
- `uint16_t timeout`
|
||||
The time in milliseconds to wait for a response from the target device.
|
||||
|
||||
@ -212,9 +244,9 @@ Writes to a register with an 8-bit address on the I2C device.
|
||||
|
||||
---
|
||||
|
||||
### `i2c_status_t i2c_write_register16(uint8_t devaddr, uint16_t regaddr, uint8_t* data, uint16_t length, uint16_t timeout)` {#api-i2c-write-register16}
|
||||
### `i2c_status_t i2c_write_register16(uint8_t devaddr, uint16_t regaddr, const uint8_t* data, uint16_t length, uint16_t timeout)` {#api-i2c-write-register16}
|
||||
|
||||
Writes to a register with a 16-bit address (big endian) on the I2C device.
|
||||
Write to a register with a 16-bit address (big endian) on the I2C device.
|
||||
|
||||
#### Arguments {#api-i2c-write-register16-arguments}
|
||||
|
||||
@ -222,10 +254,10 @@ Writes to a register with a 16-bit address (big endian) on the I2C device.
|
||||
The 7-bit I2C address of the device.
|
||||
- `uint16_t regaddr`
|
||||
The register address to write to.
|
||||
- `uint8_t *data`
|
||||
- `const uint8_t* data`
|
||||
A pointer to the data to transmit.
|
||||
- `uint16_t length`
|
||||
The number of bytes to write. Take care not to overrun the length of `data`.
|
||||
The number of bytes to write. Take care not to overrun the length of `data`.
|
||||
- `uint16_t timeout`
|
||||
The time in milliseconds to wait for a response from the target device.
|
||||
|
||||
@ -237,7 +269,7 @@ Writes to a register with a 16-bit address (big endian) on the I2C device.
|
||||
|
||||
### `i2c_status_t i2c_read_register(uint8_t devaddr, uint8_t regaddr, uint8_t* data, uint16_t length, uint16_t timeout)` {#api-i2c-read-register}
|
||||
|
||||
Reads from a register with an 8-bit address on the I2C device.
|
||||
Read from a register with an 8-bit address on the I2C device.
|
||||
|
||||
#### Arguments {#api-i2c-read-register-arguments}
|
||||
|
||||
@ -245,8 +277,10 @@ Reads from a register with an 8-bit address on the I2C device.
|
||||
The 7-bit I2C address of the device.
|
||||
- `uint8_t regaddr`
|
||||
The register address to read from.
|
||||
- `uint8_t data`
|
||||
A pointer to a buffer to read into.
|
||||
- `uint16_t length`
|
||||
The number of bytes to read. Take care not to overrun the length of `data`.
|
||||
The number of bytes to read. Take care not to overrun the length of `data`.
|
||||
- `uint16_t timeout`
|
||||
The time in milliseconds to wait for a response from the target device.
|
||||
|
||||
@ -258,7 +292,7 @@ Reads from a register with an 8-bit address on the I2C device.
|
||||
|
||||
### `i2c_status_t i2c_read_register16(uint8_t devaddr, uint16_t regaddr, uint8_t* data, uint16_t length, uint16_t timeout)` {#api-i2c-read-register16}
|
||||
|
||||
Reads from a register with a 16-bit address (big endian) on the I2C device.
|
||||
Read from a register with a 16-bit address (big endian) on the I2C device.
|
||||
|
||||
#### Arguments {#api-i2c-read-register16-arguments}
|
||||
|
||||
@ -266,8 +300,10 @@ Reads from a register with a 16-bit address (big endian) on the I2C device.
|
||||
The 7-bit I2C address of the device.
|
||||
- `uint16_t regaddr`
|
||||
The register address to read from.
|
||||
- `uint8_t* data`
|
||||
A pointer to a buffer to read into.
|
||||
- `uint16_t length`
|
||||
The number of bytes to read. Take care not to overrun the length of `data`.
|
||||
The number of bytes to read. Take care not to overrun the length of `data`.
|
||||
- `uint16_t timeout`
|
||||
The time in milliseconds to wait for a response from the target device.
|
||||
|
||||
@ -279,19 +315,19 @@ Reads from a register with a 16-bit address (big endian) on the I2C device.
|
||||
|
||||
### `i2c_status_t i2c_ping_address(uint8_t address, uint16_t timeout)` {#api-i2c-ping-address}
|
||||
|
||||
Pings the I2C bus for a specific address.
|
||||
Ping the I2C bus for a specific address.
|
||||
|
||||
On ChibiOS a "best effort" attempt is made by reading a single byte from register 0 at the requested address. This should generally work except for I2C devices that do not not respond to a register 0 read request, which will result in a false negative result (unsucessful response to ping attempt).
|
||||
On ChibiOS a "best effort" attempt is made by reading a single byte from register 0 at the given address. This should generally work except for I2C devices that do not not respond to a register 0 read request, which will result in a false negative result (unsuccessful response to ping attempt).
|
||||
|
||||
This function is weakly defined, meaning it can be overridden if necessary for your particular use case:
|
||||
This function is weakly defined, meaning it can be overridden if necessary for your particular use case.
|
||||
|
||||
#### Arguments
|
||||
#### Arguments {#api-i2c-ping-address-arguments}
|
||||
|
||||
- `uint8_t address`
|
||||
The 7-bit I2C address of the device (ie. without the read/write bit - this will be set automatically).
|
||||
The 7-bit I2C address of the device.
|
||||
- `uint16_t timeout`
|
||||
The time in milliseconds to wait for a response from the target device.
|
||||
|
||||
#### Return Value
|
||||
#### Return Value {#api-i2c-ping-address-return}
|
||||
|
||||
`I2C_STATUS_TIMEOUT` if the timeout period elapses, `I2C_STATUS_ERROR` if some other error occurs, otherwise `I2C_STATUS_SUCCESS`.
|
||||
|
@ -88,7 +88,7 @@ Start an SPI transaction.
|
||||
#### Arguments {#api-spi-start-arguments}
|
||||
|
||||
- `pin_t slavePin`
|
||||
The QMK pin to assert as the slave select pin, eg. `B4`.
|
||||
The GPIO pin connected to the desired device's `SS` line.
|
||||
- `bool lsbFirst`
|
||||
Determines the endianness of the transmission. If `true`, the least significant bit of each byte is sent first.
|
||||
- `uint8_t mode`
|
||||
@ -106,7 +106,7 @@ Start an SPI transaction.
|
||||
|
||||
#### Return Value {#api-spi-start-return}
|
||||
|
||||
`false` if the supplied parameters are invalid or the SPI peripheral is already in use, or `true`.
|
||||
`true` if the operation was successful, otherwise `false` if the supplied parameters are invalid or the SPI peripheral is already in use.
|
||||
|
||||
---
|
||||
|
||||
@ -131,7 +131,7 @@ Read a byte from the selected SPI device.
|
||||
|
||||
#### Return Value {#api-spi-read-return}
|
||||
|
||||
`SPI_STATUS_TIMEOUT` if the timeout period elapses, or the byte read from the device.
|
||||
`SPI_STATUS_TIMEOUT` if the timeout period elapses, otherwise the byte read from the device.
|
||||
|
||||
---
|
||||
|
||||
@ -159,7 +159,7 @@ Receive multiple bytes from the selected SPI device.
|
||||
#### Arguments {#api-spi-receive-arguments}
|
||||
|
||||
- `uint8_t *data`
|
||||
A pointer to the buffer to read into.
|
||||
A pointer to a buffer to read into.
|
||||
- `uint16_t length`
|
||||
The number of bytes to read. Take care not to overrun the length of `data`.
|
||||
|
||||
|
@ -45,17 +45,17 @@ To enable UART, modify your board's `mcuconf.h` to enable the peripheral you've
|
||||
|
||||
Configuration-wise, you'll need to set up the peripheral as per your MCU's datasheet -- the defaults match the pins for a Proton-C, i.e. STM32F303.
|
||||
|
||||
| `config.h` override | Description | Default Value |
|
||||
| --------------------------- | --------------------------------------------------------------- | ------------- |
|
||||
| `#define UART_DRIVER` | USART peripheral to use - USART1 -> `SD1`, USART2 -> `SD2` etc. | `SD1` |
|
||||
| `#define UART_TX_PIN` | The pin to use for TX | `A9` |
|
||||
| `#define UART_TX_PAL_MODE` | The alternate function mode for TX | `7` |
|
||||
| `#define UART_RX_PIN` | The pin to use for RX | `A10` |
|
||||
| `#define UART_RX_PAL_MODE` | The alternate function mode for RX | `7` |
|
||||
| `#define UART_CTS_PIN` | The pin to use for CTS | `A11` |
|
||||
| `#define UART_CTS_PAL_MODE` | The alternate function mode for CTS | `7` |
|
||||
| `#define UART_RTS_PIN` | The pin to use for RTS | `A12` |
|
||||
| `#define UART_RTS_PAL_MODE` | The alternate function mode for RTS | `7` |
|
||||
|`config.h` Override|Description |Default|
|
||||
|-------------------|---------------------------------------------------------------|-------|
|
||||
|`UART_DRIVER` |USART peripheral to use - USART1 -> `SD1`, USART2 -> `SD2` etc.|`SD1` |
|
||||
|`UART_TX_PIN` |The pin to use for TX |`A9` |
|
||||
|`UART_TX_PAL_MODE` |The alternate function mode for TX |`7` |
|
||||
|`UART_RX_PIN` |The pin to use for RX |`A10` |
|
||||
|`UART_RX_PAL_MODE` |The alternate function mode for RX |`7` |
|
||||
|`UART_CTS_PIN` |The pin to use for CTS |`A11` |
|
||||
|`UART_CTS_PAL_MODE`|The alternate function mode for CTS |`7` |
|
||||
|`UART_RTS_PIN` |The pin to use for RTS |`A12` |
|
||||
|`UART_RTS_PAL_MODE`|The alternate function mode for RTS |`7` |
|
||||
|
||||
## API {#api}
|
||||
|
||||
@ -111,7 +111,7 @@ Receive multiple bytes.
|
||||
#### Arguments {#api-uart-receive-arguments}
|
||||
|
||||
- `uint8_t *data`
|
||||
A pointer to the buffer to read into.
|
||||
A pointer to a buffer to read into.
|
||||
- `uint16_t length`
|
||||
The number of bytes to read. Take care not to overrun the length of `data`.
|
||||
|
||||
@ -123,4 +123,4 @@ Return whether the receive buffer contains data. Call this function to determine
|
||||
|
||||
#### Return Value {#api-uart-available-return}
|
||||
|
||||
`true` if the receive buffer length is non-zero.
|
||||
`true` if there is data available to read.
|
||||
|
142
docs/features/community_modules.md
Normal file
142
docs/features/community_modules.md
Normal file
@ -0,0 +1,142 @@
|
||||
# Community Modules
|
||||
|
||||
Community Modules are a feature within QMK which allows code to be implemented by third parties, making it available for other people to import into their own builds.
|
||||
|
||||
These modules can provide implementations which override or enhance normal QMK processing; initialization, key processing, suspend, and shutdown are some of the provided hooks which modules may implement.
|
||||
|
||||
## Adding a Community Module to your build
|
||||
|
||||
Community Modules have first-class support for [External Userspace](/newbs_external_userspace), and QMK strongly recommends using External Userspace for hosting keymaps and Community Modules together.
|
||||
|
||||
Modules must live in either of two locations:
|
||||
|
||||
* `<QMK_USERSPACE>/modules/`
|
||||
* `<QMK_FIRMWARE>/modules/`
|
||||
|
||||
A basic module is provided within QMK itself -- `qmk/hello_world` -- which prints out a notification over [HID console](/faq_debug) after 10 seconds, and adds a new keycode, `COMMUNITY_MODULE_HELLO` (aliased to `CM_HELO`) which types `Hello there.` to the active application when the corresponding key is pressed.
|
||||
|
||||
To add this module to your build, in your keymap's directory create a `keymap.json` with the following content:
|
||||
|
||||
```json
|
||||
{
|
||||
"modules": [
|
||||
"qmk/hello_world"
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
If you already have a `keymap.json`, you'll need to manually merge the `modules` section into your keymap.
|
||||
|
||||
::: warning
|
||||
Community Modules are not supported by QMK Configurator. If you wish to use Community Modules, you must build your own firmware.
|
||||
:::
|
||||
|
||||
## Adding a Community Module to your External Userspace
|
||||
|
||||
Module authors are encouraged to provide a git repository on GitHub which may be imported into a user's external userspace. If a user wishes to import a module repository, they can do the following:
|
||||
|
||||
```sh
|
||||
cd /path/to/your/external/userspace
|
||||
mkdir -p modules
|
||||
# Replace the following {user} and {repo} with the author's community module repository
|
||||
git submodule add https://github.com/{user}/{repo}.git modules/{user}
|
||||
git submdule update --init --recursive
|
||||
```
|
||||
|
||||
This will ensure the copy of the module is made in your userspace.
|
||||
|
||||
Add a new entry into your `keymap.json` with the desired modules, replacing `{user}` and `{module_name}` as appropriate:
|
||||
|
||||
```json
|
||||
{
|
||||
"modules": [
|
||||
"qmk/hello_world",
|
||||
"{user}/{module_name}"
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
::: info
|
||||
The module listed in `keymap.json` is the relative path within the `modules/` directory. So long as the module is present _somewhere_ under `modules/`, then the `keymap.json` can refer to that path.
|
||||
:::
|
||||
|
||||
## Writing a QMK Community Module
|
||||
|
||||
As stated earlier, Community Module authors are strongly encouraged to provide their modules through git, allowing users to leverage submodules to import functionality.
|
||||
|
||||
### `qmk_module.json`
|
||||
|
||||
A Community Module is denoted by a `qmk_module.json` file such as the following:
|
||||
|
||||
```json
|
||||
{
|
||||
"module_name": "Hello World",
|
||||
"maintainer": "QMK Maintainers",
|
||||
"features": {
|
||||
"deferred_exec": true
|
||||
},
|
||||
"keycodes": [
|
||||
{
|
||||
"key": "COMMUNITY_MODULE_HELLO",
|
||||
"aliases": ["CM_HELO"]
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
At minimum, the module must provide the `module_name` and `maintainer` fields.
|
||||
|
||||
The use of `features` matches the definition normally provided within `keyboard.json` and `info.json`, allowing a module to signal to the build system that it has its own dependencies. In the example above, it enables the _deferred executor_ feature whenever the above module is used in a build.
|
||||
|
||||
The `keycodes` array allows a module to provide new keycodes (as well as corresponding aliases) to a keymap.
|
||||
|
||||
### `rules.mk` / `post_rules.mk`
|
||||
|
||||
These two files follows standard QMK build system logic, allowing for `Makefile`-style customisation as if it were present in the keyboard or keymap.
|
||||
|
||||
### `<module>.c`
|
||||
|
||||
This file will be automatically added to the build if the filename matches the directory name. For example, the `qmk/hello_world` module contains a `hello_world.c` file, which is automatically added to the build.
|
||||
|
||||
::: info
|
||||
Other files intended to be included must use the normal method of `SRC += my_file.c` inside `rules.mk`.
|
||||
:::
|
||||
|
||||
::: tip
|
||||
This file should use `ASSERT_COMMUNITY_MODULES_MIN_API_VERSION(1,0,0);` to enforce a minimum version of the API that it requires, ensuring the Community Module is built with a compatible version of QMK. The list of APIs and corresponding version is given at the bottom of this document. Note the use of commas instead of periods.
|
||||
:::
|
||||
|
||||
### `introspection.c` / `introspection.h`
|
||||
|
||||
These two files hook into the keymap introspection logic -- the header is prepended before the user keymap, and the C source file is appended after the user keymap.
|
||||
|
||||
The header may provide definitions which are useful to the user's `keymap.c`.
|
||||
|
||||
The source file may provide functions which allow access to information specified in the user's `keymap.c`.
|
||||
|
||||
::: warning
|
||||
Introspection is a relatively advanced topic within QMK, and existing patterns should be followed. If you need help please [open an issue](https://github.com/qmk/qmk_firmware/issues/new) or [chat with us on Discord](https://discord.gg/qmk).
|
||||
:::
|
||||
|
||||
### Compatible APIs
|
||||
|
||||
Community Modules may provide specializations for the following APIs:
|
||||
|
||||
| Base API | API Format | Example (`hello_world` module) | API Version |
|
||||
|----------------------------|-------------------------------------|----------------------------------------|-------------|
|
||||
| `keyboard_pre_init` | `keyboard_pre_init_<module>` | `keyboard_pre_init_hello_world` | `0.1.0` |
|
||||
| `keyboard_post_init` | `keyboard_post_init_<module>` | `keyboard_post_init_hello_world` | `0.1.0` |
|
||||
| `pre_process_record` | `pre_process_record_<module>` | `pre_process_record_hello_world` | `0.1.0` |
|
||||
| `process_record` | `process_record_<module>` | `process_record_hello_world` | `0.1.0` |
|
||||
| `post_process_record` | `post_process_record_<module>` | `post_process_record_hello_world` | `0.1.0` |
|
||||
| `housekeeping_task` | `housekeeping_task_<module>` | `housekeeping_task_hello_world` | `1.0.0` |
|
||||
| `suspend_power_down` | `suspend_power_down_<module>` | `suspend_power_down_hello_world` | `1.0.0` |
|
||||
| `suspend_wakeup_init` | `suspend_wakeup_init_<module>` | `suspend_wakeup_init_hello_world` | `1.0.0` |
|
||||
| `shutdown` | `shutdown_<module>` | `shutdown_hello_world` | `1.0.0` |
|
||||
| `process_detected_host_os` | `process_detected_host_os_<module>` | `process_detected_host_os_hello_world` | `1.0.0` |
|
||||
|
||||
::: info
|
||||
An unspecified API is disregarded if a Community Module does not provide a specialization for it.
|
||||
:::
|
||||
|
||||
Each API has an equivalent `_<module>_kb()` and `_<module>_user()` hook, as per the normal QMK [`_quantum`, `_kb`, and `_user` functions](/custom_quantum_functions#a-word-on-core-vs-keyboards-vs-keymap).
|
@ -154,6 +154,21 @@ User callback, invoked when the leader sequence ends.
|
||||
|
||||
---
|
||||
|
||||
### `bool leader_add_user(uint16_t keycode)` {#api-leader-add-user}
|
||||
|
||||
User callback, invoked when a keycode is added to the leader sequence.
|
||||
|
||||
#### Arguments {#api-leader-add-user-arguments}
|
||||
|
||||
- `uint16_t keycode`
|
||||
The keycode to added to the leader sequence.
|
||||
|
||||
#### Return Value {#api-leader-add-user-return}
|
||||
|
||||
`true` to finish the key sequence, `false` to continue.
|
||||
|
||||
---
|
||||
|
||||
### `void leader_start(void)` {#api-leader-start}
|
||||
|
||||
Begin the leader sequence, resetting the buffer and timer.
|
||||
|
@ -74,6 +74,8 @@ You can create `info.json` files at every level under `qmk_firmware/keyboards/<k
|
||||
* The delay between keydown and keyup for tap events in milliseconds.
|
||||
* Default: `0` (no delay)
|
||||
* `tapping`
|
||||
* `chordal_hold` <Badge type="info">Boolean</Badge>
|
||||
* Default: `false`
|
||||
* `hold_on_other_key_press` <Badge type="info">Boolean</Badge>
|
||||
* Default: `false`
|
||||
* `hold_on_other_key_press_per_key` <Badge type="info">Boolean</Badge>
|
||||
@ -328,6 +330,8 @@ The ISO enter key is represented by a 1.25u×2uh key. Renderers which utilize in
|
||||
* `h` <Badge type="info">KeyUnit</Badge>
|
||||
* The height of the key, in key units.
|
||||
* Default: `1` (1u)
|
||||
* `hand` <Badge type="info">String</Badge>
|
||||
* The handedness of the key for Chordal Hold, either `"L"` (left hand), `"R"` (right hand), or `"*"` (either or exempted handedness).
|
||||
* `label` <Badge type="info">String</Badge>
|
||||
* What to name the key. This is *not* a key assignment as in the keymap, but should usually correspond to the keycode for the first layer of the default keymap.
|
||||
* Example: `"Escape"`
|
||||
|
@ -55,6 +55,7 @@ These headers are located in [`quantum/keymap_extras/`](https://github.com/qmk/q
|
||||
|English (US International) |`keymap_us_international.h` |`sendstring_us_international.h` |
|
||||
|English (US International, Linux)|`keymap_us_international_linux.h`| |
|
||||
|Estonian |`keymap_estonian.h` |`sendstring_estonian.h` |
|
||||
|EurKEY |`keymap_eurkey.h` | |
|
||||
|Farsi |`keymap_farsi.h` | |
|
||||
|Finnish |`keymap_finnish.h` |`sendstring_finnish.h` |
|
||||
|French |`keymap_french.h` |`sendstring_french.h` |
|
||||
|
163
docs/tap_hold.md
163
docs/tap_hold.md
@ -425,6 +425,169 @@ uint16_t get_quick_tap_term(uint16_t keycode, keyrecord_t *record) {
|
||||
If `QUICK_TAP_TERM` is set higher than `TAPPING_TERM`, it will default to `TAPPING_TERM`.
|
||||
:::
|
||||
|
||||
## Chordal Hold
|
||||
|
||||
Chordal Hold is intended to be used together with either Permissive Hold or Hold
|
||||
On Other Key Press. Chordal Hold is enabled by adding to your `config.h`:
|
||||
|
||||
```c
|
||||
#define CHORDAL_HOLD
|
||||
```
|
||||
|
||||
Chordal Hold implements, by default, an "opposite hands" rule. Suppose a
|
||||
tap-hold key is pressed and then, before the tapping term, another key is
|
||||
pressed. With Chordal Hold, the tap-hold key is settled as tapped if the two
|
||||
keys are on the same hand.
|
||||
|
||||
Otherwise, if the keys are on opposite hands, Chordal Hold introduces no new
|
||||
behavior. Hold On Other Key Press or Permissive Hold may be used together with
|
||||
Chordal Hold to configure the behavior in the opposite hands case. With Hold On
|
||||
Other Key Press, an opposite hands chord is settled immediately as held. Or with
|
||||
Permissive Hold, an opposite hands chord is settled as held provided the other
|
||||
key is pressed and released (nested press) before releasing the tap-hold key.
|
||||
|
||||
Chordal Hold may be useful to avoid accidental modifier activation with
|
||||
mod-taps, particularly in rolled keypresses when using home row mods.
|
||||
|
||||
Notes:
|
||||
|
||||
* Chordal Hold has no effect after the tapping term.
|
||||
|
||||
* Combos are exempt from the opposite hands rule, since "handedness" is
|
||||
ill-defined in this case. Even so, Chordal Hold's behavior involving combos
|
||||
may be customized through the `get_chordal_hold()` callback.
|
||||
|
||||
An example of a sequence that is affected by “chordal hold”:
|
||||
|
||||
- `SFT_T(KC_A)` Down
|
||||
- `KC_C` Down
|
||||
- `KC_C` Up
|
||||
- `SFT_T(KC_A)` Up
|
||||
|
||||
```
|
||||
TAPPING_TERM
|
||||
+---------------------------|--------+
|
||||
| +----------------------+ | |
|
||||
| | SFT_T(KC_A) | | |
|
||||
| +----------------------+ | |
|
||||
| +--------------+ | |
|
||||
| | KC_C | | |
|
||||
| +--------------+ | |
|
||||
+---------------------------|--------+
|
||||
```
|
||||
|
||||
If the two keys are on the same hand, then this will produce `ac` with
|
||||
`SFT_T(KC_A)` settled as tapped the moment that `KC_C` is pressed.
|
||||
|
||||
If the two keys are on opposite hands and the `HOLD_ON_OTHER_KEY_PRESS` option
|
||||
enabled, this will produce `C` with `SFT_T(KC_A)` settled as held when `KC_C` is
|
||||
pressed.
|
||||
|
||||
Or if the two keys are on opposite hands and the `PERMISSIVE_HOLD` option is
|
||||
enabled, this will produce `C` with `SFT_T(KC_A)` settled as held when that
|
||||
`KC_C` is released.
|
||||
|
||||
### Chordal Hold Handedness
|
||||
|
||||
Determining whether keys are on the same or opposite hands involves defining the
|
||||
"handedness" of each key position. By default, if nothing is specified,
|
||||
handedness is guessed based on keyboard geometry.
|
||||
|
||||
Handedness may be specified with `chordal_hold_layout`. In keymap.c, define
|
||||
`chordal_hold_layout` in the following form:
|
||||
|
||||
```c
|
||||
const char chordal_hold_layout[MATRIX_ROWS][MATRIX_COLS] PROGMEM =
|
||||
LAYOUT(
|
||||
'L', 'L', 'L', 'L', 'L', 'L', 'R', 'R', 'R', 'R', 'R', 'R',
|
||||
'L', 'L', 'L', 'L', 'L', 'L', 'R', 'R', 'R', 'R', 'R', 'R',
|
||||
'L', 'L', 'L', 'L', 'L', 'L', 'R', 'R', 'R', 'R', 'R', 'R',
|
||||
'L', 'L', 'L', 'R', 'R', 'R'
|
||||
);
|
||||
```
|
||||
|
||||
Use the same `LAYOUT` macro as used to define your keymap layers. Each entry is
|
||||
a character indicating the handedness of one key, either `'L'` for left, `'R'`
|
||||
for right, or `'*'` to exempt keys from the "opposite hands rule." A key with
|
||||
`'*'` handedness may settle as held in chords with any other key. This could be
|
||||
used perhaps on thumb keys or other places where you want to allow same-hand
|
||||
chords.
|
||||
|
||||
Keyboard makers may specify handedness in keyboard.json. Under `"layouts"`,
|
||||
specify the handedness of a key by adding a `"hand"` field with a value of
|
||||
either `"L"`, `"R"`, or `"*"`. Note that if `"layouts"` contains multiple
|
||||
layouts, only the first one is read. For example:
|
||||
|
||||
```json
|
||||
{"matrix": [5, 6], "x": 0, "y": 5.5, "w": 1.25, "hand", "*"},
|
||||
```
|
||||
|
||||
Alternatively, handedness may be defined functionally with
|
||||
`chordal_hold_handedness()`. For example, in keymap.c define:
|
||||
|
||||
```c
|
||||
char chordal_hold_handedness(keypos_t key) {
|
||||
if (key.col == 0 || key.col == MATRIX_COLS - 1) {
|
||||
return '*'; // Exempt the outer columns.
|
||||
}
|
||||
// On split keyboards, typically, the first half of the rows are on the
|
||||
// left, and the other half are on the right.
|
||||
return key.row < MATRIX_ROWS / 2 ? 'L' : 'R';
|
||||
}
|
||||
```
|
||||
|
||||
Given the matrix position of a key, the function should return `'L'`, `'R'`, or
|
||||
`'*'`. Adapt the logic in this function according to the keyboard's matrix.
|
||||
|
||||
::: warning
|
||||
Note the matrix may have irregularities around larger keys, around the edges of
|
||||
the board, and around thumb clusters. You may find it helpful to use [this
|
||||
debugging example](faq_debug#which-matrix-position-is-this-keypress) to
|
||||
correspond physical keys to matrix positions.
|
||||
:::
|
||||
|
||||
::: tip If you define both `chordal_hold_layout[MATRIX_ROWS][MATRIX_COLS]` and
|
||||
`chordal_hold_handedness(keypos_t key)` for handedness, the latter takes
|
||||
precedence.
|
||||
:::
|
||||
|
||||
|
||||
### Per-chord customization
|
||||
|
||||
Beyond the per-key configuration possible through handedness, Chordal Hold may
|
||||
be configured at a *per-chord* granularity for detailed tuning. In keymap.c,
|
||||
define `get_chordal_hold()`. Returning `true` allows the chord to be held, while
|
||||
returning `false` settles as tapped.
|
||||
|
||||
For example:
|
||||
|
||||
```c
|
||||
bool get_chordal_hold(uint16_t tap_hold_keycode, keyrecord_t* tap_hold_record,
|
||||
uint16_t other_keycode, keyrecord_t* other_record) {
|
||||
// Exceptionally allow some one-handed chords for hotkeys.
|
||||
switch (tap_hold_keycode) {
|
||||
case LCTL_T(KC_Z):
|
||||
if (other_keycode == KC_C || other_keycode == KC_V) {
|
||||
return true;
|
||||
}
|
||||
break;
|
||||
|
||||
case RCTL_T(KC_SLSH):
|
||||
if (other_keycode == KC_N) {
|
||||
return true;
|
||||
}
|
||||
break;
|
||||
}
|
||||
// Otherwise defer to the opposite hands rule.
|
||||
return get_chordal_hold_default(tap_hold_record, other_record);
|
||||
}
|
||||
```
|
||||
|
||||
As shown in the last line above, you may use
|
||||
`get_chordal_hold_default(tap_hold_record, other_record)` to get the default tap
|
||||
vs. hold decision according to the opposite hands rule.
|
||||
|
||||
|
||||
## Retro Tapping
|
||||
|
||||
To enable `retro tapping`, add the following to your `config.h`:
|
||||
|
141
drivers/i2c_master.h
Normal file
141
drivers/i2c_master.h
Normal file
@ -0,0 +1,141 @@
|
||||
// Copyright 2025 QMK
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
/**
|
||||
* \file
|
||||
*
|
||||
* \defgroup i2c_master I2C Master API
|
||||
*
|
||||
* \brief API to communicate with I2C devices.
|
||||
* \{
|
||||
*/
|
||||
|
||||
typedef int16_t i2c_status_t;
|
||||
|
||||
#define I2C_STATUS_SUCCESS (0)
|
||||
#define I2C_STATUS_ERROR (-1)
|
||||
#define I2C_STATUS_TIMEOUT (-2)
|
||||
|
||||
#define I2C_TIMEOUT_IMMEDIATE (0)
|
||||
#define I2C_TIMEOUT_INFINITE (0xFFFF)
|
||||
|
||||
/**
|
||||
* \brief Initialize the I2C driver. This function must be called only once, before any of the below functions can be called.
|
||||
*
|
||||
* This function is weakly defined, meaning it can be overridden if necessary for your particular use case.
|
||||
*/
|
||||
void i2c_init(void);
|
||||
|
||||
/**
|
||||
* \brief Send multiple bytes to the selected I2C device.
|
||||
*
|
||||
* \param address The 7-bit I2C address of the device.
|
||||
* \param data A pointer to the data to transmit.
|
||||
* \param length The number of bytes to write. Take care not to overrun the length of `data`.
|
||||
* \param timeout The time in milliseconds to wait for a response from the target device.
|
||||
*
|
||||
* \return `I2C_STATUS_TIMEOUT` if the timeout period elapses, `I2C_STATUS_ERROR` if some other error occurs, otherwise `I2C_STATUS_SUCCESS`.
|
||||
*/
|
||||
i2c_status_t i2c_transmit(uint8_t address, const uint8_t* data, uint16_t length, uint16_t timeout);
|
||||
|
||||
#if defined(__AVR__) || defined(__DOXYGEN__)
|
||||
/**
|
||||
* \brief Send multiple bytes from PROGMEM to the selected I2C device.
|
||||
*
|
||||
* On ARM devices, this function is simply an alias for i2c_transmit(address, data, length, timeout).
|
||||
*
|
||||
* \param address The 7-bit I2C address of the device.
|
||||
* \param data A pointer to the data to transmit.
|
||||
* \param length The number of bytes to write. Take care not to overrun the length of `data`.
|
||||
* \param timeout The time in milliseconds to wait for a response from the target device.
|
||||
*
|
||||
* \return `I2C_STATUS_TIMEOUT` if the timeout period elapses, `I2C_STATUS_ERROR` if some other error occurs, otherwise `I2C_STATUS_SUCCESS`.
|
||||
*/
|
||||
i2c_status_t i2c_transmit_P(uint8_t address, const uint8_t* data, uint16_t length, uint16_t timeout);
|
||||
#else
|
||||
# define i2c_transmit_P(address, data, length, timeout) i2c_transmit(address, data, length, timeout)
|
||||
#endif
|
||||
|
||||
/**
|
||||
* \brief Receive multiple bytes from the selected I2C device.
|
||||
*
|
||||
* \param address The 7-bit I2C address of the device.
|
||||
* \param data A pointer to a buffer to read into.
|
||||
* \param length The number of bytes to read. Take care not to overrun the length of `data`.
|
||||
* \param timeout The time in milliseconds to wait for a response from the target device.
|
||||
*
|
||||
* \return `I2C_STATUS_TIMEOUT` if the timeout period elapses, `I2C_STATUS_ERROR` if some other error occurs, otherwise `I2C_STATUS_SUCCESS`.
|
||||
*/
|
||||
i2c_status_t i2c_receive(uint8_t address, uint8_t* data, uint16_t length, uint16_t timeout);
|
||||
|
||||
/**
|
||||
* \brief Write to a register with an 8-bit address on the I2C device.
|
||||
*
|
||||
* \param devaddr The 7-bit I2C address of the device.
|
||||
* \param regaddr The register address to write to.
|
||||
* \param data A pointer to the data to transmit.
|
||||
* \param length The number of bytes to write. Take care not to overrun the length of `data`.
|
||||
* \param timeout The time in milliseconds to wait for a response from the target device.
|
||||
*
|
||||
* \return `I2C_STATUS_TIMEOUT` if the timeout period elapses, `I2C_STATUS_ERROR` if some other error occurs, otherwise `I2C_STATUS_SUCCESS`.
|
||||
*/
|
||||
i2c_status_t i2c_write_register(uint8_t devaddr, uint8_t regaddr, const uint8_t* data, uint16_t length, uint16_t timeout);
|
||||
|
||||
/**
|
||||
* \brief Write to a register with a 16-bit address (big endian) on the I2C device.
|
||||
*
|
||||
* \param devaddr The 7-bit I2C address of the device.
|
||||
* \param regaddr The register address to write to.
|
||||
* \param data A pointer to the data to transmit.
|
||||
* \param length The number of bytes to write. Take care not to overrun the length of `data`.
|
||||
* \param timeout The time in milliseconds to wait for a response from the target device.
|
||||
*
|
||||
* \return `I2C_STATUS_TIMEOUT` if the timeout period elapses, `I2C_STATUS_ERROR` if some other error occurs, otherwise `I2C_STATUS_SUCCESS`.
|
||||
*/
|
||||
i2c_status_t i2c_write_register16(uint8_t devaddr, uint16_t regaddr, const uint8_t* data, uint16_t length, uint16_t timeout);
|
||||
|
||||
/**
|
||||
* \brief Read from a register with an 8-bit address on the I2C device.
|
||||
*
|
||||
* \param devaddr The 7-bit I2C address of the device.
|
||||
* \param regaddr The register address to read from.
|
||||
* \param data A pointer to a buffer to read into.
|
||||
* \param length The number of bytes to read. Take care not to overrun the length of `data`.
|
||||
* \param timeout The time in milliseconds to wait for a response from the target device.
|
||||
*
|
||||
* \return `I2C_STATUS_TIMEOUT` if the timeout period elapses, `I2C_STATUS_ERROR` if some other error occurs, otherwise `I2C_STATUS_SUCCESS`.
|
||||
*/
|
||||
i2c_status_t i2c_read_register(uint8_t devaddr, uint8_t regaddr, uint8_t* data, uint16_t length, uint16_t timeout);
|
||||
|
||||
/**
|
||||
* \brief Read from a register with a 16-bit address (big endian) on the I2C device.
|
||||
*
|
||||
* \param devaddr The 7-bit I2C address of the device.
|
||||
* \param regaddr The register address to read from.
|
||||
* \param data A pointer to a buffer to read into.
|
||||
* \param length The number of bytes to read. Take care not to overrun the length of `data`.
|
||||
* \param timeout The time in milliseconds to wait for a response from the target device.
|
||||
*
|
||||
* \return `I2C_STATUS_TIMEOUT` if the timeout period elapses, `I2C_STATUS_ERROR` if some other error occurs, otherwise `I2C_STATUS_SUCCESS`.
|
||||
*/
|
||||
i2c_status_t i2c_read_register16(uint8_t devaddr, uint16_t regaddr, uint8_t* data, uint16_t length, uint16_t timeout);
|
||||
|
||||
/**
|
||||
* \brief Ping the I2C bus for a specific address.
|
||||
*
|
||||
* On ChibiOS a "best effort" attempt is made by reading a single byte from register 0 at the given address. This should generally work except for I2C devices that do not not respond to a register 0 read request, which will result in a false negative result (unsuccessful response to ping attempt).
|
||||
*
|
||||
* This function is weakly defined, meaning it can be overridden if necessary for your particular use case.
|
||||
*
|
||||
* \param address The 7-bit I2C address of the device.
|
||||
* \param timeout The time in milliseconds to wait for a response from the target device.
|
||||
*
|
||||
* \return `I2C_STATUS_TIMEOUT` if the timeout period elapses, `I2C_STATUS_ERROR` if some other error occurs, otherwise `I2C_STATUS_SUCCESS`.
|
||||
*/
|
||||
i2c_status_t i2c_ping_address(uint8_t address, uint16_t timeout);
|
||||
|
||||
/** \} */
|
@ -24,7 +24,7 @@
|
||||
# elif defined(PROTOCOL_CHIBIOS)
|
||||
# include "hal.h"
|
||||
# include "chibios_config.h"
|
||||
# if defined(STM32F0XX) || defined(STM32F1XX) || defined(STM32F3XX) || defined(STM32F4XX) || defined(STM32L0XX) || defined(GD32VF103) || defined(MCU_RP)
|
||||
# if defined(STM32F0XX) || defined(STM32F1XX) || defined(STM32F3XX) || defined(STM32F4XX) || defined(STM32L0XX) || defined(AT32F415) || defined(GD32VF103) || defined(MCU_RP)
|
||||
# define APA102_NOPS (100 / (1000000000L / (CPU_CLOCK / 4))) // This calculates how many loops of 4 nops to run to delay 100 ns
|
||||
# else
|
||||
# error APA102_NOPS configuration required
|
||||
@ -122,7 +122,7 @@ void apa102_init(void) {
|
||||
gpio_set_pin_output(APA102_CI_PIN);
|
||||
}
|
||||
|
||||
void apa102_set_color(uint16_t index, uint8_t red, uint8_t green, uint8_t blue) {
|
||||
void apa102_set_color(int index, uint8_t red, uint8_t green, uint8_t blue) {
|
||||
apa102_leds[index].r = red;
|
||||
apa102_leds[index].g = green;
|
||||
apa102_leds[index].b = blue;
|
||||
|
@ -32,7 +32,7 @@
|
||||
#define APA102_MAX_BRIGHTNESS 31
|
||||
|
||||
void apa102_init(void);
|
||||
void apa102_set_color(uint16_t index, uint8_t red, uint8_t green, uint8_t blue);
|
||||
void apa102_set_color(int index, uint8_t red, uint8_t green, uint8_t blue);
|
||||
void apa102_set_color_all(uint8_t red, uint8_t green, uint8_t blue);
|
||||
void apa102_flush(void);
|
||||
|
||||
|
@ -22,36 +22,6 @@
|
||||
#include "gpio.h"
|
||||
#include "util.h"
|
||||
|
||||
// ======== DEPRECATED DEFINES - DO NOT USE ========
|
||||
#ifdef AW_SCALING_MAX
|
||||
# define AW20216S_SCALING_MAX AW_SCALING_MAX
|
||||
#endif
|
||||
#ifdef AW_GLOBAL_CURRENT_MAX
|
||||
# define AW20216S_GLOBAL_CURRENT_MAX AW_GLOBAL_CURRENT_MAX
|
||||
#endif
|
||||
#ifdef AW_SPI_MODE
|
||||
# define AW20216S_SPI_MODE AW_SPI_MODE
|
||||
#endif
|
||||
#ifdef AW_SPI_DIVISOR
|
||||
# define AW20216S_SPI_DIVISOR AW_SPI_DIVISOR
|
||||
#endif
|
||||
#ifdef DRIVER_1_CS
|
||||
# define AW20216S_CS_PIN_1 DRIVER_1_CS
|
||||
#endif
|
||||
#ifdef DRIVER_2_CS
|
||||
# define AW20216S_CS_PIN_2 DRIVER_2_CS
|
||||
#endif
|
||||
#ifdef DRIVER_1_EN
|
||||
# define AW20216S_EN_PIN DRIVER_1_EN
|
||||
#endif
|
||||
#ifdef AW20216S_EN_PIN_1
|
||||
# define AW20216S_EN_PIN AW20216S_EN_PIN_1
|
||||
#endif
|
||||
|
||||
#define aw_led aw20216s_led_t
|
||||
#define g_aw_leds g_aw20216s_leds
|
||||
// ========
|
||||
|
||||
#define AW20216S_ID (0b1010 << 4)
|
||||
#define AW20216S_WRITE 0
|
||||
#define AW20216S_READ 1
|
||||
@ -328,233 +298,3 @@ void aw20216s_flush(void);
|
||||
#define SW12_CS16 0xD5
|
||||
#define SW12_CS17 0xD6
|
||||
#define SW12_CS18 0xD7
|
||||
|
||||
// DEPRECATED - DO NOT USE
|
||||
|
||||
#define CS1_SW1 SW1_CS1
|
||||
#define CS2_SW1 SW1_CS2
|
||||
#define CS3_SW1 SW1_CS3
|
||||
#define CS4_SW1 SW1_CS4
|
||||
#define CS5_SW1 SW1_CS5
|
||||
#define CS6_SW1 SW1_CS6
|
||||
#define CS7_SW1 SW1_CS7
|
||||
#define CS8_SW1 SW1_CS8
|
||||
#define CS9_SW1 SW1_CS9
|
||||
#define CS10_SW1 SW1_CS10
|
||||
#define CS11_SW1 SW1_CS11
|
||||
#define CS12_SW1 SW1_CS12
|
||||
#define CS13_SW1 SW1_CS13
|
||||
#define CS14_SW1 SW1_CS14
|
||||
#define CS15_SW1 SW1_CS15
|
||||
#define CS16_SW1 SW1_CS16
|
||||
#define CS17_SW1 SW1_CS17
|
||||
#define CS18_SW1 SW1_CS18
|
||||
|
||||
#define CS1_SW2 SW2_CS1
|
||||
#define CS2_SW2 SW2_CS2
|
||||
#define CS3_SW2 SW2_CS3
|
||||
#define CS4_SW2 SW2_CS4
|
||||
#define CS5_SW2 SW2_CS5
|
||||
#define CS6_SW2 SW2_CS6
|
||||
#define CS7_SW2 SW2_CS7
|
||||
#define CS8_SW2 SW2_CS8
|
||||
#define CS9_SW2 SW2_CS9
|
||||
#define CS10_SW2 SW2_CS10
|
||||
#define CS11_SW2 SW2_CS11
|
||||
#define CS12_SW2 SW2_CS12
|
||||
#define CS13_SW2 SW2_CS13
|
||||
#define CS14_SW2 SW2_CS14
|
||||
#define CS15_SW2 SW2_CS15
|
||||
#define CS16_SW2 SW2_CS16
|
||||
#define CS17_SW2 SW2_CS17
|
||||
#define CS18_SW2 SW2_CS18
|
||||
|
||||
#define CS1_SW3 SW3_CS1
|
||||
#define CS2_SW3 SW3_CS2
|
||||
#define CS3_SW3 SW3_CS3
|
||||
#define CS4_SW3 SW3_CS4
|
||||
#define CS5_SW3 SW3_CS5
|
||||
#define CS6_SW3 SW3_CS6
|
||||
#define CS7_SW3 SW3_CS7
|
||||
#define CS8_SW3 SW3_CS8
|
||||
#define CS9_SW3 SW3_CS9
|
||||
#define CS10_SW3 SW3_CS10
|
||||
#define CS11_SW3 SW3_CS11
|
||||
#define CS12_SW3 SW3_CS12
|
||||
#define CS13_SW3 SW3_CS13
|
||||
#define CS14_SW3 SW3_CS14
|
||||
#define CS15_SW3 SW3_CS15
|
||||
#define CS16_SW3 SW3_CS16
|
||||
#define CS17_SW3 SW3_CS17
|
||||
#define CS18_SW3 SW3_CS18
|
||||
|
||||
#define CS1_SW4 SW4_CS1
|
||||
#define CS2_SW4 SW4_CS2
|
||||
#define CS3_SW4 SW4_CS3
|
||||
#define CS4_SW4 SW4_CS4
|
||||
#define CS5_SW4 SW4_CS5
|
||||
#define CS6_SW4 SW4_CS6
|
||||
#define CS7_SW4 SW4_CS7
|
||||
#define CS8_SW4 SW4_CS8
|
||||
#define CS9_SW4 SW4_CS9
|
||||
#define CS10_SW4 SW4_CS10
|
||||
#define CS11_SW4 SW4_CS11
|
||||
#define CS12_SW4 SW4_CS12
|
||||
#define CS13_SW4 SW4_CS13
|
||||
#define CS14_SW4 SW4_CS14
|
||||
#define CS15_SW4 SW4_CS15
|
||||
#define CS16_SW4 SW4_CS16
|
||||
#define CS17_SW4 SW4_CS17
|
||||
#define CS18_SW4 SW4_CS18
|
||||
|
||||
#define CS1_SW5 SW5_CS1
|
||||
#define CS2_SW5 SW5_CS2
|
||||
#define CS3_SW5 SW5_CS3
|
||||
#define CS4_SW5 SW5_CS4
|
||||
#define CS5_SW5 SW5_CS5
|
||||
#define CS6_SW5 SW5_CS6
|
||||
#define CS7_SW5 SW5_CS7
|
||||
#define CS8_SW5 SW5_CS8
|
||||
#define CS9_SW5 SW5_CS9
|
||||
#define CS10_SW5 SW5_CS10
|
||||
#define CS11_SW5 SW5_CS11
|
||||
#define CS12_SW5 SW5_CS12
|
||||
#define CS13_SW5 SW5_CS13
|
||||
#define CS14_SW5 SW5_CS14
|
||||
#define CS15_SW5 SW5_CS15
|
||||
#define CS16_SW5 SW5_CS16
|
||||
#define CS17_SW5 SW5_CS17
|
||||
#define CS18_SW5 SW5_CS18
|
||||
|
||||
#define CS1_SW6 SW6_CS1
|
||||
#define CS2_SW6 SW6_CS2
|
||||
#define CS3_SW6 SW6_CS3
|
||||
#define CS4_SW6 SW6_CS4
|
||||
#define CS5_SW6 SW6_CS5
|
||||
#define CS6_SW6 SW6_CS6
|
||||
#define CS7_SW6 SW6_CS7
|
||||
#define CS8_SW6 SW6_CS8
|
||||
#define CS9_SW6 SW6_CS9
|
||||
#define CS10_SW6 SW6_CS10
|
||||
#define CS11_SW6 SW6_CS11
|
||||
#define CS12_SW6 SW6_CS12
|
||||
#define CS13_SW6 SW6_CS13
|
||||
#define CS14_SW6 SW6_CS14
|
||||
#define CS15_SW6 SW6_CS15
|
||||
#define CS16_SW6 SW6_CS16
|
||||
#define CS17_SW6 SW6_CS17
|
||||
#define CS18_SW6 SW6_CS18
|
||||
|
||||
#define CS1_SW7 SW7_CS1
|
||||
#define CS2_SW7 SW7_CS2
|
||||
#define CS3_SW7 SW7_CS3
|
||||
#define CS4_SW7 SW7_CS4
|
||||
#define CS5_SW7 SW7_CS5
|
||||
#define CS6_SW7 SW7_CS6
|
||||
#define CS7_SW7 SW7_CS7
|
||||
#define CS8_SW7 SW7_CS8
|
||||
#define CS9_SW7 SW7_CS9
|
||||
#define CS10_SW7 SW7_CS10
|
||||
#define CS11_SW7 SW7_CS11
|
||||
#define CS12_SW7 SW7_CS12
|
||||
#define CS13_SW7 SW7_CS13
|
||||
#define CS14_SW7 SW7_CS14
|
||||
#define CS15_SW7 SW7_CS15
|
||||
#define CS16_SW7 SW7_CS16
|
||||
#define CS17_SW7 SW7_CS17
|
||||
#define CS18_SW7 SW7_CS18
|
||||
|
||||
#define CS1_SW8 SW8_CS1
|
||||
#define CS2_SW8 SW8_CS2
|
||||
#define CS3_SW8 SW8_CS3
|
||||
#define CS4_SW8 SW8_CS4
|
||||
#define CS5_SW8 SW8_CS5
|
||||
#define CS6_SW8 SW8_CS6
|
||||
#define CS7_SW8 SW8_CS7
|
||||
#define CS8_SW8 SW8_CS8
|
||||
#define CS9_SW8 SW8_CS9
|
||||
#define CS10_SW8 SW8_CS10
|
||||
#define CS11_SW8 SW8_CS11
|
||||
#define CS12_SW8 SW8_CS12
|
||||
#define CS13_SW8 SW8_CS13
|
||||
#define CS14_SW8 SW8_CS14
|
||||
#define CS15_SW8 SW8_CS15
|
||||
#define CS16_SW8 SW8_CS16
|
||||
#define CS17_SW8 SW8_CS17
|
||||
#define CS18_SW8 SW8_CS18
|
||||
|
||||
#define CS1_SW9 SW9_CS1
|
||||
#define CS2_SW9 SW9_CS2
|
||||
#define CS3_SW9 SW9_CS3
|
||||
#define CS4_SW9 SW9_CS4
|
||||
#define CS5_SW9 SW9_CS5
|
||||
#define CS6_SW9 SW9_CS6
|
||||
#define CS7_SW9 SW9_CS7
|
||||
#define CS8_SW9 SW9_CS8
|
||||
#define CS9_SW9 SW9_CS9
|
||||
#define CS10_SW9 SW9_CS10
|
||||
#define CS11_SW9 SW9_CS11
|
||||
#define CS12_SW9 SW9_CS12
|
||||
#define CS13_SW9 SW9_CS13
|
||||
#define CS14_SW9 SW9_CS14
|
||||
#define CS15_SW9 SW9_CS15
|
||||
#define CS16_SW9 SW9_CS16
|
||||
#define CS17_SW9 SW9_CS17
|
||||
#define CS18_SW9 SW9_CS18
|
||||
|
||||
#define CS1_SW10 SW10_CS1
|
||||
#define CS2_SW10 SW10_CS2
|
||||
#define CS3_SW10 SW10_CS3
|
||||
#define CS4_SW10 SW10_CS4
|
||||
#define CS5_SW10 SW10_CS5
|
||||
#define CS6_SW10 SW10_CS6
|
||||
#define CS7_SW10 SW10_CS7
|
||||
#define CS8_SW10 SW10_CS8
|
||||
#define CS9_SW10 SW10_CS9
|
||||
#define CS10_SW10 SW10_CS10
|
||||
#define CS11_SW10 SW10_CS11
|
||||
#define CS12_SW10 SW10_CS12
|
||||
#define CS13_SW10 SW10_CS13
|
||||
#define CS14_SW10 SW10_CS14
|
||||
#define CS15_SW10 SW10_CS15
|
||||
#define CS16_SW10 SW10_CS16
|
||||
#define CS17_SW10 SW10_CS17
|
||||
#define CS18_SW10 SW10_CS18
|
||||
|
||||
#define CS1_SW11 SW11_CS1
|
||||
#define CS2_SW11 SW11_CS2
|
||||
#define CS3_SW11 SW11_CS3
|
||||
#define CS4_SW11 SW11_CS4
|
||||
#define CS5_SW11 SW11_CS5
|
||||
#define CS6_SW11 SW11_CS6
|
||||
#define CS7_SW11 SW11_CS7
|
||||
#define CS8_SW11 SW11_CS8
|
||||
#define CS9_SW11 SW11_CS9
|
||||
#define CS10_SW11 SW11_CS10
|
||||
#define CS11_SW11 SW11_CS11
|
||||
#define CS12_SW11 SW11_CS12
|
||||
#define CS13_SW11 SW11_CS13
|
||||
#define CS14_SW11 SW11_CS14
|
||||
#define CS15_SW11 SW11_CS15
|
||||
#define CS16_SW11 SW11_CS16
|
||||
#define CS17_SW11 SW11_CS17
|
||||
#define CS18_SW11 SW11_CS18
|
||||
|
||||
#define CS1_SW12 SW12_CS1
|
||||
#define CS2_SW12 SW12_CS2
|
||||
#define CS3_SW12 SW12_CS3
|
||||
#define CS4_SW12 SW12_CS4
|
||||
#define CS5_SW12 SW12_CS5
|
||||
#define CS6_SW12 SW12_CS6
|
||||
#define CS7_SW12 SW12_CS7
|
||||
#define CS8_SW12 SW12_CS8
|
||||
#define CS9_SW12 SW12_CS9
|
||||
#define CS10_SW12 SW12_CS10
|
||||
#define CS11_SW12 SW12_CS11
|
||||
#define CS12_SW12 SW12_CS12
|
||||
#define CS13_SW12 SW12_CS13
|
||||
#define CS14_SW12 SW12_CS14
|
||||
#define CS15_SW12 SW12_CS15
|
||||
#define CS16_SW12 SW12_CS16
|
||||
#define CS17_SW12 SW12_CS17
|
||||
#define CS18_SW12 SW12_CS18
|
||||
|
@ -23,33 +23,6 @@
|
||||
#include "progmem.h"
|
||||
#include "util.h"
|
||||
|
||||
// ======== DEPRECATED DEFINES - DO NOT USE ========
|
||||
#ifdef LED_DRIVER_ADDR_1
|
||||
# define IS31FL3731_I2C_ADDRESS_1 LED_DRIVER_ADDR_1
|
||||
#endif
|
||||
#ifdef LED_DRIVER_ADDR_2
|
||||
# define IS31FL3731_I2C_ADDRESS_2 LED_DRIVER_ADDR_2
|
||||
#endif
|
||||
#ifdef LED_DRIVER_ADDR_3
|
||||
# define IS31FL3731_I2C_ADDRESS_3 LED_DRIVER_ADDR_3
|
||||
#endif
|
||||
#ifdef LED_DRIVER_ADDR_4
|
||||
# define IS31FL3731_I2C_ADDRESS_4 LED_DRIVER_ADDR_4
|
||||
#endif
|
||||
#ifdef ISSI_TIMEOUT
|
||||
# define IS31FL3731_I2C_TIMEOUT ISSI_TIMEOUT
|
||||
#endif
|
||||
#ifdef ISSI_PERSISTENCE
|
||||
# define IS31FL3731_I2C_PERSISTENCE ISSI_PERSISTENCE
|
||||
#endif
|
||||
#ifdef ISSI_3731_DEGHOST
|
||||
# define IS31FL3731_DEGHOST ISSI_3731_DEGHOST
|
||||
#endif
|
||||
|
||||
#define is31_led is31fl3731_led_t
|
||||
#define g_is31_leds g_is31fl3731_leds
|
||||
// ========
|
||||
|
||||
#define IS31FL3731_REG_COMMAND 0xFD
|
||||
#define IS31FL3731_COMMAND_FRAME_1 0x00
|
||||
#define IS31FL3731_COMMAND_FRAME_2 0x01
|
||||
|
@ -22,33 +22,6 @@
|
||||
#include "progmem.h"
|
||||
#include "util.h"
|
||||
|
||||
// ======== DEPRECATED DEFINES - DO NOT USE ========
|
||||
#ifdef DRIVER_ADDR_1
|
||||
# define IS31FL3731_I2C_ADDRESS_1 DRIVER_ADDR_1
|
||||
#endif
|
||||
#ifdef DRIVER_ADDR_2
|
||||
# define IS31FL3731_I2C_ADDRESS_2 DRIVER_ADDR_2
|
||||
#endif
|
||||
#ifdef DRIVER_ADDR_3
|
||||
# define IS31FL3731_I2C_ADDRESS_3 DRIVER_ADDR_3
|
||||
#endif
|
||||
#ifdef DRIVER_ADDR_4
|
||||
# define IS31FL3731_I2C_ADDRESS_4 DRIVER_ADDR_4
|
||||
#endif
|
||||
#ifdef ISSI_TIMEOUT
|
||||
# define IS31FL3731_I2C_TIMEOUT ISSI_TIMEOUT
|
||||
#endif
|
||||
#ifdef ISSI_PERSISTENCE
|
||||
# define IS31FL3731_I2C_PERSISTENCE ISSI_PERSISTENCE
|
||||
#endif
|
||||
#ifdef ISSI_3731_DEGHOST
|
||||
# define IS31FL3731_DEGHOST ISSI_3731_DEGHOST
|
||||
#endif
|
||||
|
||||
#define is31_led is31fl3731_led_t
|
||||
#define g_is31_leds g_is31fl3731_leds
|
||||
// ========
|
||||
|
||||
#define IS31FL3731_REG_COMMAND 0xFD
|
||||
#define IS31FL3731_COMMAND_FRAME_1 0x00
|
||||
#define IS31FL3731_COMMAND_FRAME_2 0x01
|
||||
|
@ -25,38 +25,6 @@
|
||||
#include "progmem.h"
|
||||
#include "util.h"
|
||||
|
||||
// ======== DEPRECATED DEFINES - DO NOT USE ========
|
||||
#ifdef ISSI_TIMEOUT
|
||||
# define IS31FL3733_I2C_TIMEOUT ISSI_TIMEOUT
|
||||
#endif
|
||||
#ifdef ISSI_PERSISTENCE
|
||||
# define IS31FL3733_I2C_PERSISTENCE ISSI_PERSISTENCE
|
||||
#endif
|
||||
#ifdef ISSI_PWM_FREQUENCY
|
||||
# define IS31FL3733_PWM_FREQUENCY ISSI_PWM_FREQUENCY
|
||||
#endif
|
||||
#ifdef ISSI_SWPULLUP
|
||||
# define IS31FL3733_SW_PULLUP ISSI_SWPULLUP
|
||||
#endif
|
||||
#ifdef ISSI_CSPULLUP
|
||||
# define IS31FL3733_CS_PULLDOWN ISSI_CSPULLUP
|
||||
#endif
|
||||
#ifdef ISSI_GLOBALCURRENT
|
||||
# define IS31FL3733_GLOBAL_CURRENT ISSI_GLOBALCURRENT
|
||||
#endif
|
||||
|
||||
#define is31_led is31fl3733_led_t
|
||||
#define g_is31_leds g_is31fl3733_leds
|
||||
|
||||
#define PUR_0R IS31FL3733_PUR_0_OHM
|
||||
#define PUR_05KR IS31FL3733_PUR_1K_OHM
|
||||
#define PUR_3KR IS31FL3733_PUR_2K_OHM
|
||||
#define PUR_4KR IS31FL3733_PUR_4K_OHM
|
||||
#define PUR_8KR IS31FL3733_PUR_8K_OHM
|
||||
#define PUR_16KR IS31FL3733_PUR_16K_OHM
|
||||
#define PUR_32KR IS31FL3733_PUR_32K_OHM
|
||||
// ========
|
||||
|
||||
#define IS31FL3733_REG_INTERRUPT_MASK 0xF0
|
||||
#define IS31FL3733_REG_INTERRUPT_STATUS 0xF1
|
||||
|
||||
|
@ -24,62 +24,6 @@
|
||||
#include "progmem.h"
|
||||
#include "util.h"
|
||||
|
||||
// ======== DEPRECATED DEFINES - DO NOT USE ========
|
||||
#ifdef DRIVER_ADDR_1
|
||||
# define IS31FL3733_I2C_ADDRESS_1 DRIVER_ADDR_1
|
||||
#endif
|
||||
#ifdef DRIVER_ADDR_2
|
||||
# define IS31FL3733_I2C_ADDRESS_2 DRIVER_ADDR_2
|
||||
#endif
|
||||
#ifdef DRIVER_ADDR_3
|
||||
# define IS31FL3733_I2C_ADDRESS_3 DRIVER_ADDR_3
|
||||
#endif
|
||||
#ifdef DRIVER_ADDR_4
|
||||
# define IS31FL3733_I2C_ADDRESS_4 DRIVER_ADDR_4
|
||||
#endif
|
||||
#ifdef DRIVER_SYNC_1
|
||||
# define IS31FL3733_SYNC_1 DRIVER_SYNC_1
|
||||
#endif
|
||||
#ifdef DRIVER_SYNC_2
|
||||
# define IS31FL3733_SYNC_2 DRIVER_SYNC_2
|
||||
#endif
|
||||
#ifdef DRIVER_SYNC_3
|
||||
# define IS31FL3733_SYNC_3 DRIVER_SYNC_3
|
||||
#endif
|
||||
#ifdef DRIVER_SYNC_4
|
||||
# define IS31FL3733_SYNC_4 DRIVER_SYNC_4
|
||||
#endif
|
||||
#ifdef ISSI_TIMEOUT
|
||||
# define IS31FL3733_I2C_TIMEOUT ISSI_TIMEOUT
|
||||
#endif
|
||||
#ifdef ISSI_PERSISTENCE
|
||||
# define IS31FL3733_I2C_PERSISTENCE ISSI_PERSISTENCE
|
||||
#endif
|
||||
#ifdef ISSI_PWM_FREQUENCY
|
||||
# define IS31FL3733_PWM_FREQUENCY ISSI_PWM_FREQUENCY
|
||||
#endif
|
||||
#ifdef ISSI_SWPULLUP
|
||||
# define IS31FL3733_SW_PULLUP ISSI_SWPULLUP
|
||||
#endif
|
||||
#ifdef ISSI_CSPULLUP
|
||||
# define IS31FL3733_CS_PULLDOWN ISSI_CSPULLUP
|
||||
#endif
|
||||
#ifdef ISSI_GLOBALCURRENT
|
||||
# define IS31FL3733_GLOBAL_CURRENT ISSI_GLOBALCURRENT
|
||||
#endif
|
||||
|
||||
#define is31_led is31fl3733_led_t
|
||||
#define g_is31_leds g_is31fl3733_leds
|
||||
|
||||
#define PUR_0R IS31FL3733_PUR_0_OHM
|
||||
#define PUR_05KR IS31FL3733_PUR_1K_OHM
|
||||
#define PUR_3KR IS31FL3733_PUR_2K_OHM
|
||||
#define PUR_4KR IS31FL3733_PUR_4K_OHM
|
||||
#define PUR_8KR IS31FL3733_PUR_8K_OHM
|
||||
#define PUR_16KR IS31FL3733_PUR_16K_OHM
|
||||
#define PUR_32KR IS31FL3733_PUR_32K_OHM
|
||||
// ========
|
||||
|
||||
#define IS31FL3733_REG_INTERRUPT_MASK 0xF0
|
||||
#define IS31FL3733_REG_INTERRUPT_STATUS 0xF1
|
||||
|
||||
@ -389,209 +333,3 @@ void is31fl3733_flush(void);
|
||||
#define SW12_CS14 0xBD
|
||||
#define SW12_CS15 0xBE
|
||||
#define SW12_CS16 0xBF
|
||||
|
||||
// DEPRECATED - DO NOT USE
|
||||
|
||||
#define A_1 SW1_CS1
|
||||
#define A_2 SW1_CS2
|
||||
#define A_3 SW1_CS3
|
||||
#define A_4 SW1_CS4
|
||||
#define A_5 SW1_CS5
|
||||
#define A_6 SW1_CS6
|
||||
#define A_7 SW1_CS7
|
||||
#define A_8 SW1_CS8
|
||||
#define A_9 SW1_CS9
|
||||
#define A_10 SW1_CS10
|
||||
#define A_11 SW1_CS11
|
||||
#define A_12 SW1_CS12
|
||||
#define A_13 SW1_CS13
|
||||
#define A_14 SW1_CS14
|
||||
#define A_15 SW1_CS15
|
||||
#define A_16 SW1_CS16
|
||||
|
||||
#define B_1 SW2_CS1
|
||||
#define B_2 SW2_CS2
|
||||
#define B_3 SW2_CS3
|
||||
#define B_4 SW2_CS4
|
||||
#define B_5 SW2_CS5
|
||||
#define B_6 SW2_CS6
|
||||
#define B_7 SW2_CS7
|
||||
#define B_8 SW2_CS8
|
||||
#define B_9 SW2_CS9
|
||||
#define B_10 SW2_CS10
|
||||
#define B_11 SW2_CS11
|
||||
#define B_12 SW2_CS12
|
||||
#define B_13 SW2_CS13
|
||||
#define B_14 SW2_CS14
|
||||
#define B_15 SW2_CS15
|
||||
#define B_16 SW2_CS16
|
||||
|
||||
#define C_1 SW3_CS1
|
||||
#define C_2 SW3_CS2
|
||||
#define C_3 SW3_CS3
|
||||
#define C_4 SW3_CS4
|
||||
#define C_5 SW3_CS5
|
||||
#define C_6 SW3_CS6
|
||||
#define C_7 SW3_CS7
|
||||
#define C_8 SW3_CS8
|
||||
#define C_9 SW3_CS9
|
||||
#define C_10 SW3_CS10
|
||||
#define C_11 SW3_CS11
|
||||
#define C_12 SW3_CS12
|
||||
#define C_13 SW3_CS13
|
||||
#define C_14 SW3_CS14
|
||||
#define C_15 SW3_CS15
|
||||
#define C_16 SW3_CS16
|
||||
|
||||
#define D_1 SW4_CS1
|
||||
#define D_2 SW4_CS2
|
||||
#define D_3 SW4_CS3
|
||||
#define D_4 SW4_CS4
|
||||
#define D_5 SW4_CS5
|
||||
#define D_6 SW4_CS6
|
||||
#define D_7 SW4_CS7
|
||||
#define D_8 SW4_CS8
|
||||
#define D_9 SW4_CS9
|
||||
#define D_10 SW4_CS10
|
||||
#define D_11 SW4_CS11
|
||||
#define D_12 SW4_CS12
|
||||
#define D_13 SW4_CS13
|
||||
#define D_14 SW4_CS14
|
||||
#define D_15 SW4_CS15
|
||||
#define D_16 SW4_CS16
|
||||
|
||||
#define E_1 SW5_CS1
|
||||
#define E_2 SW5_CS2
|
||||
#define E_3 SW5_CS3
|
||||
#define E_4 SW5_CS4
|
||||
#define E_5 SW5_CS5
|
||||
#define E_6 SW5_CS6
|
||||
#define E_7 SW5_CS7
|
||||
#define E_8 SW5_CS8
|
||||
#define E_9 SW5_CS9
|
||||
#define E_10 SW5_CS10
|
||||
#define E_11 SW5_CS11
|
||||
#define E_12 SW5_CS12
|
||||
#define E_13 SW5_CS13
|
||||
#define E_14 SW5_CS14
|
||||
#define E_15 SW5_CS15
|
||||
#define E_16 SW5_CS16
|
||||
|
||||
#define F_1 SW6_CS1
|
||||
#define F_2 SW6_CS2
|
||||
#define F_3 SW6_CS3
|
||||
#define F_4 SW6_CS4
|
||||
#define F_5 SW6_CS5
|
||||
#define F_6 SW6_CS6
|
||||
#define F_7 SW6_CS7
|
||||
#define F_8 SW6_CS8
|
||||
#define F_9 SW6_CS9
|
||||
#define F_10 SW6_CS10
|
||||
#define F_11 SW6_CS11
|
||||
#define F_12 SW6_CS12
|
||||
#define F_13 SW6_CS13
|
||||
#define F_14 SW6_CS14
|
||||
#define F_15 SW6_CS15
|
||||
#define F_16 SW6_CS16
|
||||
|
||||
#define G_1 SW7_CS1
|
||||
#define G_2 SW7_CS2
|
||||
#define G_3 SW7_CS3
|
||||
#define G_4 SW7_CS4
|
||||
#define G_5 SW7_CS5
|
||||
#define G_6 SW7_CS6
|
||||
#define G_7 SW7_CS7
|
||||
#define G_8 SW7_CS8
|
||||
#define G_9 SW7_CS9
|
||||
#define G_10 SW7_CS10
|
||||
#define G_11 SW7_CS11
|
||||
#define G_12 SW7_CS12
|
||||
#define G_13 SW7_CS13
|
||||
#define G_14 SW7_CS14
|
||||
#define G_15 SW7_CS15
|
||||
#define G_16 SW7_CS16
|
||||
|
||||
#define H_1 SW8_CS1
|
||||
#define H_2 SW8_CS2
|
||||
#define H_3 SW8_CS3
|
||||
#define H_4 SW8_CS4
|
||||
#define H_5 SW8_CS5
|
||||
#define H_6 SW8_CS6
|
||||
#define H_7 SW8_CS7
|
||||
#define H_8 SW8_CS8
|
||||
#define H_9 SW8_CS9
|
||||
#define H_10 SW8_CS10
|
||||
#define H_11 SW8_CS11
|
||||
#define H_12 SW8_CS12
|
||||
#define H_13 SW8_CS13
|
||||
#define H_14 SW8_CS14
|
||||
#define H_15 SW8_CS15
|
||||
#define H_16 SW8_CS16
|
||||
|
||||
#define I_1 SW9_CS1
|
||||
#define I_2 SW9_CS2
|
||||
#define I_3 SW9_CS3
|
||||
#define I_4 SW9_CS4
|
||||
#define I_5 SW9_CS5
|
||||
#define I_6 SW9_CS6
|
||||
#define I_7 SW9_CS7
|
||||
#define I_8 SW9_CS8
|
||||
#define I_9 SW9_CS9
|
||||
#define I_10 SW9_CS10
|
||||
#define I_11 SW9_CS11
|
||||
#define I_12 SW9_CS12
|
||||
#define I_13 SW9_CS13
|
||||
#define I_14 SW9_CS14
|
||||
#define I_15 SW9_CS15
|
||||
#define I_16 SW9_CS16
|
||||
|
||||
#define J_1 SW10_CS1
|
||||
#define J_2 SW10_CS2
|
||||
#define J_3 SW10_CS3
|
||||
#define J_4 SW10_CS4
|
||||
#define J_5 SW10_CS5
|
||||
#define J_6 SW10_CS6
|
||||
#define J_7 SW10_CS7
|
||||
#define J_8 SW10_CS8
|
||||
#define J_9 SW10_CS9
|
||||
#define J_10 SW10_CS10
|
||||
#define J_11 SW10_CS11
|
||||
#define J_12 SW10_CS12
|
||||
#define J_13 SW10_CS13
|
||||
#define J_14 SW10_CS14
|
||||
#define J_15 SW10_CS15
|
||||
#define J_16 SW10_CS16
|
||||
|
||||
#define K_1 SW11_CS1
|
||||
#define K_2 SW11_CS2
|
||||
#define K_3 SW11_CS3
|
||||
#define K_4 SW11_CS4
|
||||
#define K_5 SW11_CS5
|
||||
#define K_6 SW11_CS6
|
||||
#define K_7 SW11_CS7
|
||||
#define K_8 SW11_CS8
|
||||
#define K_9 SW11_CS9
|
||||
#define K_10 SW11_CS10
|
||||
#define K_11 SW11_CS11
|
||||
#define K_12 SW11_CS12
|
||||
#define K_13 SW11_CS13
|
||||
#define K_14 SW11_CS14
|
||||
#define K_15 SW11_CS15
|
||||
#define K_16 SW11_CS16
|
||||
|
||||
#define L_1 SW12_CS1
|
||||
#define L_2 SW12_CS2
|
||||
#define L_3 SW12_CS3
|
||||
#define L_4 SW12_CS4
|
||||
#define L_5 SW12_CS5
|
||||
#define L_6 SW12_CS6
|
||||
#define L_7 SW12_CS7
|
||||
#define L_8 SW12_CS8
|
||||
#define L_9 SW12_CS9
|
||||
#define L_10 SW12_CS10
|
||||
#define L_11 SW12_CS11
|
||||
#define L_12 SW12_CS12
|
||||
#define L_13 SW12_CS13
|
||||
#define L_14 SW12_CS14
|
||||
#define L_15 SW12_CS15
|
||||
#define L_16 SW12_CS16
|
||||
|
@ -22,36 +22,6 @@
|
||||
#include "progmem.h"
|
||||
#include "util.h"
|
||||
|
||||
// ======== DEPRECATED DEFINES - DO NOT USE ========
|
||||
#ifdef ISSI_TIMEOUT
|
||||
# define IS31FL3736_I2C_TIMEOUT ISSI_TIMEOUT
|
||||
#endif
|
||||
#ifdef ISSI_PERSISTENCE
|
||||
# define IS31FL3736_I2C_PERSISTENCE ISSI_PERSISTENCE
|
||||
#endif
|
||||
#ifdef ISSI_SWPULLUP
|
||||
# define IS31FL3736_SW_PULLUP ISSI_SWPULLUP
|
||||
#endif
|
||||
#ifdef ISSI_CSPULLUP
|
||||
# define IS31FL3736_CS_PULLDOWN ISSI_CSPULLUP
|
||||
#endif
|
||||
#ifdef ISSI_GLOBALCURRENT
|
||||
# define IS31FL3736_GLOBAL_CURRENT ISSI_GLOBALCURRENT
|
||||
#endif
|
||||
|
||||
#define is31_led is31fl3736_led_t
|
||||
#define g_is31_leds g_is31fl3736_leds
|
||||
|
||||
#define PUR_0R IS31FL3736_PUR_0_OHM
|
||||
#define PUR_05KR IS31FL3736_PUR_05K_OHM
|
||||
#define PUR_1KR IS31FL3736_PUR_1K_OHM
|
||||
#define PUR_2KR IS31FL3736_PUR_2K_OHM
|
||||
#define PUR_4KR IS31FL3736_PUR_4K_OHM
|
||||
#define PUR_8KR IS31FL3736_PUR_8K_OHM
|
||||
#define PUR_16KR IS31FL3736_PUR_16K_OHM
|
||||
#define PUR_32KR IS31FL3736_PUR_32K_OHM
|
||||
// ========
|
||||
|
||||
#define IS31FL3736_REG_INTERRUPT_MASK 0xF0
|
||||
#define IS31FL3736_REG_INTERRUPT_STATUS 0xF1
|
||||
|
||||
@ -259,113 +229,3 @@ void is31fl3736_flush(void);
|
||||
#define SW12_CS6 0xBA
|
||||
#define SW12_CS7 0xBC
|
||||
#define SW12_CS8 0xBE
|
||||
|
||||
// DEPRECATED - DO NOT USE
|
||||
|
||||
#define A_1 SW1_CS1
|
||||
#define A_2 SW1_CS2
|
||||
#define A_3 SW1_CS3
|
||||
#define A_4 SW1_CS4
|
||||
#define A_5 SW1_CS5
|
||||
#define A_6 SW1_CS6
|
||||
#define A_7 SW1_CS7
|
||||
#define A_8 SW1_CS8
|
||||
|
||||
#define B_1 SW2_CS1
|
||||
#define B_2 SW2_CS2
|
||||
#define B_3 SW2_CS3
|
||||
#define B_4 SW2_CS4
|
||||
#define B_5 SW2_CS5
|
||||
#define B_6 SW2_CS6
|
||||
#define B_7 SW2_CS7
|
||||
#define B_8 SW2_CS8
|
||||
|
||||
#define C_1 SW3_CS1
|
||||
#define C_2 SW3_CS2
|
||||
#define C_3 SW3_CS3
|
||||
#define C_4 SW3_CS4
|
||||
#define C_5 SW3_CS5
|
||||
#define C_6 SW3_CS6
|
||||
#define C_7 SW3_CS7
|
||||
#define C_8 SW3_CS8
|
||||
|
||||
#define D_1 SW4_CS1
|
||||
#define D_2 SW4_CS2
|
||||
#define D_3 SW4_CS3
|
||||
#define D_4 SW4_CS4
|
||||
#define D_5 SW4_CS5
|
||||
#define D_6 SW4_CS6
|
||||
#define D_7 SW4_CS7
|
||||
#define D_8 SW4_CS8
|
||||
|
||||
#define E_1 SW5_CS1
|
||||
#define E_2 SW5_CS2
|
||||
#define E_3 SW5_CS3
|
||||
#define E_4 SW5_CS4
|
||||
#define E_5 SW5_CS5
|
||||
#define E_6 SW5_CS6
|
||||
#define E_7 SW5_CS7
|
||||
#define E_8 SW5_CS8
|
||||
|
||||
#define F_1 SW6_CS1
|
||||
#define F_2 SW6_CS2
|
||||
#define F_3 SW6_CS3
|
||||
#define F_4 SW6_CS4
|
||||
#define F_5 SW6_CS5
|
||||
#define F_6 SW6_CS6
|
||||
#define F_7 SW6_CS7
|
||||
#define F_8 SW6_CS8
|
||||
|
||||
#define G_1 SW7_CS1
|
||||
#define G_2 SW7_CS2
|
||||
#define G_3 SW7_CS3
|
||||
#define G_4 SW7_CS4
|
||||
#define G_5 SW7_CS5
|
||||
#define G_6 SW7_CS6
|
||||
#define G_7 SW7_CS7
|
||||
#define G_8 SW7_CS8
|
||||
|
||||
#define H_1 SW8_CS1
|
||||
#define H_2 SW8_CS2
|
||||
#define H_3 SW8_CS3
|
||||
#define H_4 SW8_CS4
|
||||
#define H_5 SW8_CS5
|
||||
#define H_6 SW8_CS6
|
||||
#define H_7 SW8_CS7
|
||||
#define H_8 SW8_CS8
|
||||
|
||||
#define I_1 SW9_CS1
|
||||
#define I_2 SW9_CS2
|
||||
#define I_3 SW9_CS3
|
||||
#define I_4 SW9_CS4
|
||||
#define I_5 SW9_CS5
|
||||
#define I_6 SW9_CS6
|
||||
#define I_7 SW9_CS7
|
||||
#define I_8 SW9_CS8
|
||||
|
||||
#define J_1 SW10_CS1
|
||||
#define J_2 SW10_CS2
|
||||
#define J_3 SW10_CS3
|
||||
#define J_4 SW10_CS4
|
||||
#define J_5 SW10_CS5
|
||||
#define J_6 SW10_CS6
|
||||
#define J_7 SW10_CS7
|
||||
#define J_8 SW10_CS8
|
||||
|
||||
#define K_1 SW11_CS1
|
||||
#define K_2 SW11_CS2
|
||||
#define K_3 SW11_CS3
|
||||
#define K_4 SW11_CS4
|
||||
#define K_5 SW11_CS5
|
||||
#define K_6 SW11_CS6
|
||||
#define K_7 SW11_CS7
|
||||
#define K_8 SW11_CS8
|
||||
|
||||
#define L_1 SW12_CS1
|
||||
#define L_2 SW12_CS2
|
||||
#define L_3 SW12_CS3
|
||||
#define L_4 SW12_CS4
|
||||
#define L_5 SW12_CS5
|
||||
#define L_6 SW12_CS6
|
||||
#define L_7 SW12_CS7
|
||||
#define L_8 SW12_CS8
|
||||
|
@ -22,48 +22,6 @@
|
||||
#include "progmem.h"
|
||||
#include "util.h"
|
||||
|
||||
// ======== DEPRECATED DEFINES - DO NOT USE ========
|
||||
#ifdef DRIVER_ADDR_1
|
||||
# define IS31FL3736_I2C_ADDRESS_1 DRIVER_ADDR_1
|
||||
#endif
|
||||
#ifdef DRIVER_ADDR_2
|
||||
# define IS31FL3736_I2C_ADDRESS_2 DRIVER_ADDR_2
|
||||
#endif
|
||||
#ifdef DRIVER_ADDR_3
|
||||
# define IS31FL3736_I2C_ADDRESS_3 DRIVER_ADDR_3
|
||||
#endif
|
||||
#ifdef DRIVER_ADDR_4
|
||||
# define IS31FL3736_I2C_ADDRESS_4 DRIVER_ADDR_4
|
||||
#endif
|
||||
#ifdef ISSI_TIMEOUT
|
||||
# define IS31FL3736_I2C_TIMEOUT ISSI_TIMEOUT
|
||||
#endif
|
||||
#ifdef ISSI_PERSISTENCE
|
||||
# define IS31FL3736_I2C_PERSISTENCE ISSI_PERSISTENCE
|
||||
#endif
|
||||
#ifdef ISSI_SWPULLUP
|
||||
# define IS31FL3736_SW_PULLUP ISSI_SWPULLUP
|
||||
#endif
|
||||
#ifdef ISSI_CSPULLUP
|
||||
# define IS31FL3736_CS_PULLDOWN ISSI_CSPULLUP
|
||||
#endif
|
||||
#ifdef ISSI_GLOBALCURRENT
|
||||
# define IS31FL3736_GLOBAL_CURRENT ISSI_GLOBALCURRENT
|
||||
#endif
|
||||
|
||||
#define is31_led is31fl3736_led_t
|
||||
#define g_is31_leds g_is31fl3736_leds
|
||||
|
||||
#define PUR_0R IS31FL3736_PUR_0_OHM
|
||||
#define PUR_05KR IS31FL3736_PUR_0K5_OHM
|
||||
#define PUR_1KR IS31FL3736_PUR_1K_OHM
|
||||
#define PUR_2KR IS31FL3736_PUR_2K_OHM
|
||||
#define PUR_4KR IS31FL3736_PUR_4K_OHM
|
||||
#define PUR_8KR IS31FL3736_PUR_8K_OHM
|
||||
#define PUR_16KR IS31FL3736_PUR_16K_OHM
|
||||
#define PUR_32KR IS31FL3736_PUR_32K_OHM
|
||||
// ========
|
||||
|
||||
#define IS31FL3736_REG_INTERRUPT_MASK 0xF0
|
||||
#define IS31FL3736_REG_INTERRUPT_STATUS 0xF1
|
||||
|
||||
|
@ -24,36 +24,6 @@
|
||||
#include "progmem.h"
|
||||
#include "util.h"
|
||||
|
||||
// ======== DEPRECATED DEFINES - DO NOT USE ========
|
||||
#ifdef ISSI_TIMEOUT
|
||||
# define IS31FL3737_I2C_TIMEOUT ISSI_TIMEOUT
|
||||
#endif
|
||||
#ifdef ISSI_PERSISTENCE
|
||||
# define IS31FL3737_I2C_PERSISTENCE ISSI_PERSISTENCE
|
||||
#endif
|
||||
#ifdef ISSI_PWM_FREQUENCY
|
||||
# define IS31FL3737_PWM_FREQUENCY ISSI_PWM_FREQUENCY
|
||||
#endif
|
||||
#ifdef ISSI_SWPULLUP
|
||||
# define IS31FL3737_SW_PULLUP ISSI_SWPULLUP
|
||||
#endif
|
||||
#ifdef ISSI_CSPULLUP
|
||||
# define IS31FL3737_CS_PULLDOWN ISSI_CSPULLUP
|
||||
#endif
|
||||
#ifdef ISSI_GLOBALCURRENT
|
||||
# define IS31FL3737_GLOBAL_CURRENT ISSI_GLOBALCURRENT
|
||||
#endif
|
||||
|
||||
#define PUR_0R IS31FL3737_PUR_0_OHM
|
||||
#define PUR_05KR IS31FL3737_PUR_0K5_OHM
|
||||
#define PUR_1KR IS31FL3737_PUR_1K_OHM
|
||||
#define PUR_2KR IS31FL3737_PUR_2K_OHM
|
||||
#define PUR_4KR IS31FL3737_PUR_4K_OHM
|
||||
#define PUR_8KR IS31FL3737_PUR_8K_OHM
|
||||
#define PUR_16KR IS31FL3737_PUR_16K_OHM
|
||||
#define PUR_32KR IS31FL3737_PUR_32K_OHM
|
||||
// ========
|
||||
|
||||
#define IS31FL3737_REG_INTERRUPT_MASK 0xF0
|
||||
#define IS31FL3737_REG_INTERRUPT_STATUS 0xF1
|
||||
|
||||
|
@ -24,51 +24,6 @@
|
||||
#include "progmem.h"
|
||||
#include "util.h"
|
||||
|
||||
// ======== DEPRECATED DEFINES - DO NOT USE ========
|
||||
#ifdef DRIVER_ADDR_1
|
||||
# define IS31FL3737_I2C_ADDRESS_1 DRIVER_ADDR_1
|
||||
#endif
|
||||
#ifdef DRIVER_ADDR_2
|
||||
# define IS31FL3737_I2C_ADDRESS_2 DRIVER_ADDR_2
|
||||
#endif
|
||||
#ifdef DRIVER_ADDR_3
|
||||
# define IS31FL3737_I2C_ADDRESS_3 DRIVER_ADDR_3
|
||||
#endif
|
||||
#ifdef DRIVER_ADDR_4
|
||||
# define IS31FL3737_I2C_ADDRESS_4 DRIVER_ADDR_4
|
||||
#endif
|
||||
#ifdef ISSI_TIMEOUT
|
||||
# define IS31FL3737_I2C_TIMEOUT ISSI_TIMEOUT
|
||||
#endif
|
||||
#ifdef ISSI_PERSISTENCE
|
||||
# define IS31FL3737_I2C_PERSISTENCE ISSI_PERSISTENCE
|
||||
#endif
|
||||
#ifdef ISSI_PWM_FREQUENCY
|
||||
# define IS31FL3737_PWM_FREQUENCY ISSI_PWM_FREQUENCY
|
||||
#endif
|
||||
#ifdef ISSI_SWPULLUP
|
||||
# define IS31FL3737_SW_PULLUP ISSI_SWPULLUP
|
||||
#endif
|
||||
#ifdef ISSI_CSPULLUP
|
||||
# define IS31FL3737_CS_PULLDOWN ISSI_CSPULLUP
|
||||
#endif
|
||||
#ifdef ISSI_GLOBALCURRENT
|
||||
# define IS31FL3737_GLOBAL_CURRENT ISSI_GLOBALCURRENT
|
||||
#endif
|
||||
|
||||
#define is31_led is31fl3737_led_t
|
||||
#define g_is31_leds g_is31fl3737_leds
|
||||
|
||||
#define PUR_0R IS31FL3737_PUR_0_OHM
|
||||
#define PUR_05KR IS31FL3737_PUR_0K5_OHM
|
||||
#define PUR_1KR IS31FL3737_PUR_1K_OHM
|
||||
#define PUR_2KR IS31FL3737_PUR_2K_OHM
|
||||
#define PUR_4KR IS31FL3737_PUR_4K_OHM
|
||||
#define PUR_8KR IS31FL3737_PUR_8K_OHM
|
||||
#define PUR_16KR IS31FL3737_PUR_16K_OHM
|
||||
#define PUR_32KR IS31FL3737_PUR_32K_OHM
|
||||
// ========
|
||||
|
||||
#define IS31FL3737_REG_INTERRUPT_MASK 0xF0
|
||||
#define IS31FL3737_REG_INTERRUPT_STATUS 0xF1
|
||||
|
||||
@ -314,161 +269,3 @@ void is31fl3737_flush(void);
|
||||
#define SW12_CS10 0xBB
|
||||
#define SW12_CS11 0xBC
|
||||
#define SW12_CS12 0xBD
|
||||
|
||||
// DEPRECATED - DO NOT USE
|
||||
|
||||
#define A_1 SW1_CS1
|
||||
#define A_2 SW1_CS2
|
||||
#define A_3 SW1_CS3
|
||||
#define A_4 SW1_CS4
|
||||
#define A_5 SW1_CS5
|
||||
#define A_6 SW1_CS6
|
||||
#define A_7 SW1_CS7
|
||||
#define A_8 SW1_CS8
|
||||
#define A_9 SW1_CS9
|
||||
#define A_10 SW1_CS10
|
||||
#define A_11 SW1_CS11
|
||||
#define A_12 SW1_CS12
|
||||
|
||||
#define B_1 SW2_CS1
|
||||
#define B_2 SW2_CS2
|
||||
#define B_3 SW2_CS3
|
||||
#define B_4 SW2_CS4
|
||||
#define B_5 SW2_CS5
|
||||
#define B_6 SW2_CS6
|
||||
#define B_7 SW2_CS7
|
||||
#define B_8 SW2_CS8
|
||||
#define B_9 SW2_CS9
|
||||
#define B_10 SW2_CS10
|
||||
#define B_11 SW2_CS11
|
||||
#define B_12 SW2_CS12
|
||||
|
||||
#define C_1 SW3_CS1
|
||||
#define C_2 SW3_CS2
|
||||
#define C_3 SW3_CS3
|
||||
#define C_4 SW3_CS4
|
||||
#define C_5 SW3_CS5
|
||||
#define C_6 SW3_CS6
|
||||
#define C_7 SW3_CS7
|
||||
#define C_8 SW3_CS8
|
||||
#define C_9 SW3_CS9
|
||||
#define C_10 SW3_CS10
|
||||
#define C_11 SW3_CS11
|
||||
#define C_12 SW3_CS12
|
||||
|
||||
#define D_1 SW4_CS1
|
||||
#define D_2 SW4_CS2
|
||||
#define D_3 SW4_CS3
|
||||
#define D_4 SW4_CS4
|
||||
#define D_5 SW4_CS5
|
||||
#define D_6 SW4_CS6
|
||||
#define D_7 SW4_CS7
|
||||
#define D_8 SW4_CS8
|
||||
#define D_9 SW4_CS9
|
||||
#define D_10 SW4_CS10
|
||||
#define D_11 SW4_CS11
|
||||
#define D_12 SW4_CS12
|
||||
|
||||
#define E_1 SW5_CS1
|
||||
#define E_2 SW5_CS2
|
||||
#define E_3 SW5_CS3
|
||||
#define E_4 SW5_CS4
|
||||
#define E_5 SW5_CS5
|
||||
#define E_6 SW5_CS6
|
||||
#define E_7 SW5_CS7
|
||||
#define E_8 SW5_CS8
|
||||
#define E_9 SW5_CS9
|
||||
#define E_10 SW5_CS10
|
||||
#define E_11 SW5_CS11
|
||||
#define E_12 SW5_CS12
|
||||
|
||||
#define F_1 SW6_CS1
|
||||
#define F_2 SW6_CS2
|
||||
#define F_3 SW6_CS3
|
||||
#define F_4 SW6_CS4
|
||||
#define F_5 SW6_CS5
|
||||
#define F_6 SW6_CS6
|
||||
#define F_7 SW6_CS7
|
||||
#define F_8 SW6_CS8
|
||||
#define F_9 SW6_CS9
|
||||
#define F_10 SW6_CS10
|
||||
#define F_11 SW6_CS11
|
||||
#define F_12 SW6_CS12
|
||||
|
||||
#define G_1 SW7_CS1
|
||||
#define G_2 SW7_CS2
|
||||
#define G_3 SW7_CS3
|
||||
#define G_4 SW7_CS4
|
||||
#define G_5 SW7_CS5
|
||||
#define G_6 SW7_CS6
|
||||
#define G_7 SW7_CS7
|
||||
#define G_8 SW7_CS8
|
||||
#define G_9 SW7_CS9
|
||||
#define G_10 SW7_CS10
|
||||
#define G_11 SW7_CS11
|
||||
#define G_12 SW7_CS12
|
||||
|
||||
#define H_1 SW8_CS1
|
||||
#define H_2 SW8_CS2
|
||||
#define H_3 SW8_CS3
|
||||
#define H_4 SW8_CS4
|
||||
#define H_5 SW8_CS5
|
||||
#define H_6 SW8_CS6
|
||||
#define H_7 SW8_CS7
|
||||
#define H_8 SW8_CS8
|
||||
#define H_9 SW8_CS9
|
||||
#define H_10 SW8_CS10
|
||||
#define H_11 SW8_CS11
|
||||
#define H_12 SW8_CS12
|
||||
|
||||
#define I_1 SW9_CS1
|
||||
#define I_2 SW9_CS2
|
||||
#define I_3 SW9_CS3
|
||||
#define I_4 SW9_CS4
|
||||
#define I_5 SW9_CS5
|
||||
#define I_6 SW9_CS6
|
||||
#define I_7 SW9_CS7
|
||||
#define I_8 SW9_CS8
|
||||
#define I_9 SW9_CS9
|
||||
#define I_10 SW9_CS10
|
||||
#define I_11 SW9_CS11
|
||||
#define I_12 SW9_CS12
|
||||
|
||||
#define J_1 SW10_CS1
|
||||
#define J_2 SW10_CS2
|
||||
#define J_3 SW10_CS3
|
||||
#define J_4 SW10_CS4
|
||||
#define J_5 SW10_CS5
|
||||
#define J_6 SW10_CS6
|
||||
#define J_7 SW10_CS7
|
||||
#define J_8 SW10_CS8
|
||||
#define J_9 SW10_CS9
|
||||
#define J_10 SW10_CS10
|
||||
#define J_11 SW10_CS11
|
||||
#define J_12 SW10_CS12
|
||||
|
||||
#define K_1 SW11_CS1
|
||||
#define K_2 SW11_CS2
|
||||
#define K_3 SW11_CS3
|
||||
#define K_4 SW11_CS4
|
||||
#define K_5 SW11_CS5
|
||||
#define K_6 SW11_CS6
|
||||
#define K_7 SW11_CS7
|
||||
#define K_8 SW11_CS8
|
||||
#define K_9 SW11_CS9
|
||||
#define K_10 SW11_CS10
|
||||
#define K_11 SW11_CS11
|
||||
#define K_12 SW11_CS12
|
||||
|
||||
#define L_1 SW12_CS1
|
||||
#define L_2 SW12_CS2
|
||||
#define L_3 SW12_CS3
|
||||
#define L_4 SW12_CS4
|
||||
#define L_5 SW12_CS5
|
||||
#define L_6 SW12_CS6
|
||||
#define L_7 SW12_CS7
|
||||
#define L_8 SW12_CS8
|
||||
#define L_9 SW12_CS9
|
||||
#define L_10 SW12_CS10
|
||||
#define L_11 SW12_CS11
|
||||
#define L_12 SW12_CS12
|
||||
|
@ -24,36 +24,6 @@
|
||||
#include "progmem.h"
|
||||
#include "util.h"
|
||||
|
||||
// ======== DEPRECATED DEFINES - DO NOT USE ========
|
||||
#ifdef ISSI_TIMEOUT
|
||||
# define IS31FL3741_I2C_TIMEOUT ISSI_TIMEOUT
|
||||
#endif
|
||||
#ifdef ISSI_PERSISTENCE
|
||||
# define IS31FL3741_I2C_PERSISTENCE ISSI_PERSISTENCE
|
||||
#endif
|
||||
#ifdef ISSI_CONFIGURATION
|
||||
# define IS31FL3741_CONFIGURATION ISSI_CONFIGURATION
|
||||
#endif
|
||||
#ifdef ISSI_SWPULLUP
|
||||
# define IS31FL3741_SW_PULLUP ISSI_SWPULLUP
|
||||
#endif
|
||||
#ifdef ISSI_CSPULLUP
|
||||
# define IS31FL3741_CS_PULLDOWN ISSI_CSPULLUP
|
||||
#endif
|
||||
#ifdef ISSI_GLOBALCURRENT
|
||||
# define IS31FL3741_GLOBAL_CURRENT ISSI_GLOBALCURRENT
|
||||
#endif
|
||||
|
||||
#define PUR_0R IS31FL3741_PUR_0_OHM
|
||||
#define PUR_05KR IS31FL3741_PUR_0K5_OHM
|
||||
#define PUR_1KR IS31FL3741_PUR_1K_OHM
|
||||
#define PUR_2KR IS31FL3741_PUR_2K_OHM
|
||||
#define PUR_4KR IS31FL3741_PUR_4K_OHM
|
||||
#define PUR_8KR IS31FL3741_PUR_8K_OHM
|
||||
#define PUR_16KR IS31FL3741_PUR_16K_OHM
|
||||
#define PUR_32KR IS31FL3741_PUR_32K_OHM
|
||||
// ========
|
||||
|
||||
#define IS31FL3741_REG_INTERRUPT_MASK 0xF0
|
||||
#define IS31FL3741_REG_INTERRUPT_STATUS 0xF1
|
||||
#define IS31FL3741_REG_ID 0xFC
|
||||
@ -514,374 +484,3 @@ void is31fl3741_flush(void);
|
||||
#define SW9_CS37 0x1A8
|
||||
#define SW9_CS38 0x1A9
|
||||
#define SW9_CS39 0x1AA
|
||||
|
||||
// DEPRECATED - DO NOT USE
|
||||
|
||||
#define CS1_SW1 SW1_CS1
|
||||
#define CS2_SW1 SW1_CS2
|
||||
#define CS3_SW1 SW1_CS3
|
||||
#define CS4_SW1 SW1_CS4
|
||||
#define CS5_SW1 SW1_CS5
|
||||
#define CS6_SW1 SW1_CS6
|
||||
#define CS7_SW1 SW1_CS7
|
||||
#define CS8_SW1 SW1_CS8
|
||||
#define CS9_SW1 SW1_CS9
|
||||
#define CS10_SW1 SW1_CS10
|
||||
#define CS11_SW1 SW1_CS11
|
||||
#define CS12_SW1 SW1_CS12
|
||||
#define CS13_SW1 SW1_CS13
|
||||
#define CS14_SW1 SW1_CS14
|
||||
#define CS15_SW1 SW1_CS15
|
||||
#define CS16_SW1 SW1_CS16
|
||||
#define CS17_SW1 SW1_CS17
|
||||
#define CS18_SW1 SW1_CS18
|
||||
#define CS19_SW1 SW1_CS19
|
||||
#define CS20_SW1 SW1_CS20
|
||||
#define CS21_SW1 SW1_CS21
|
||||
#define CS22_SW1 SW1_CS22
|
||||
#define CS23_SW1 SW1_CS23
|
||||
#define CS24_SW1 SW1_CS24
|
||||
#define CS25_SW1 SW1_CS25
|
||||
#define CS26_SW1 SW1_CS26
|
||||
#define CS27_SW1 SW1_CS27
|
||||
#define CS28_SW1 SW1_CS28
|
||||
#define CS29_SW1 SW1_CS29
|
||||
#define CS30_SW1 SW1_CS30
|
||||
|
||||
#define CS1_SW2 SW2_CS1
|
||||
#define CS2_SW2 SW2_CS2
|
||||
#define CS3_SW2 SW2_CS3
|
||||
#define CS4_SW2 SW2_CS4
|
||||
#define CS5_SW2 SW2_CS5
|
||||
#define CS6_SW2 SW2_CS6
|
||||
#define CS7_SW2 SW2_CS7
|
||||
#define CS8_SW2 SW2_CS8
|
||||
#define CS9_SW2 SW2_CS9
|
||||
#define CS10_SW2 SW2_CS10
|
||||
#define CS11_SW2 SW2_CS11
|
||||
#define CS12_SW2 SW2_CS12
|
||||
#define CS13_SW2 SW2_CS13
|
||||
#define CS14_SW2 SW2_CS14
|
||||
#define CS15_SW2 SW2_CS15
|
||||
#define CS16_SW2 SW2_CS16
|
||||
#define CS17_SW2 SW2_CS17
|
||||
#define CS18_SW2 SW2_CS18
|
||||
#define CS19_SW2 SW2_CS19
|
||||
#define CS20_SW2 SW2_CS20
|
||||
#define CS21_SW2 SW2_CS21
|
||||
#define CS22_SW2 SW2_CS22
|
||||
#define CS23_SW2 SW2_CS23
|
||||
#define CS24_SW2 SW2_CS24
|
||||
#define CS25_SW2 SW2_CS25
|
||||
#define CS26_SW2 SW2_CS26
|
||||
#define CS27_SW2 SW2_CS27
|
||||
#define CS28_SW2 SW2_CS28
|
||||
#define CS29_SW2 SW2_CS29
|
||||
#define CS30_SW2 SW2_CS30
|
||||
|
||||
#define CS1_SW3 SW3_CS1
|
||||
#define CS2_SW3 SW3_CS2
|
||||
#define CS3_SW3 SW3_CS3
|
||||
#define CS4_SW3 SW3_CS4
|
||||
#define CS5_SW3 SW3_CS5
|
||||
#define CS6_SW3 SW3_CS6
|
||||
#define CS7_SW3 SW3_CS7
|
||||
#define CS8_SW3 SW3_CS8
|
||||
#define CS9_SW3 SW3_CS9
|
||||
#define CS10_SW3 SW3_CS10
|
||||
#define CS11_SW3 SW3_CS11
|
||||
#define CS12_SW3 SW3_CS12
|
||||
#define CS13_SW3 SW3_CS13
|
||||
#define CS14_SW3 SW3_CS14
|
||||
#define CS15_SW3 SW3_CS15
|
||||
#define CS16_SW3 SW3_CS16
|
||||
#define CS17_SW3 SW3_CS17
|
||||
#define CS18_SW3 SW3_CS18
|
||||
#define CS19_SW3 SW3_CS19
|
||||
#define CS20_SW3 SW3_CS20
|
||||
#define CS21_SW3 SW3_CS21
|
||||
#define CS22_SW3 SW3_CS22
|
||||
#define CS23_SW3 SW3_CS23
|
||||
#define CS24_SW3 SW3_CS24
|
||||
#define CS25_SW3 SW3_CS25
|
||||
#define CS26_SW3 SW3_CS26
|
||||
#define CS27_SW3 SW3_CS27
|
||||
#define CS28_SW3 SW3_CS28
|
||||
#define CS29_SW3 SW3_CS29
|
||||
#define CS30_SW3 SW3_CS30
|
||||
|
||||
#define CS1_SW4 SW4_CS1
|
||||
#define CS2_SW4 SW4_CS2
|
||||
#define CS3_SW4 SW4_CS3
|
||||
#define CS4_SW4 SW4_CS4
|
||||
#define CS5_SW4 SW4_CS5
|
||||
#define CS6_SW4 SW4_CS6
|
||||
#define CS7_SW4 SW4_CS7
|
||||
#define CS8_SW4 SW4_CS8
|
||||
#define CS9_SW4 SW4_CS9
|
||||
#define CS10_SW4 SW4_CS10
|
||||
#define CS11_SW4 SW4_CS11
|
||||
#define CS12_SW4 SW4_CS12
|
||||
#define CS13_SW4 SW4_CS13
|
||||
#define CS14_SW4 SW4_CS14
|
||||
#define CS15_SW4 SW4_CS15
|
||||
#define CS16_SW4 SW4_CS16
|
||||
#define CS17_SW4 SW4_CS17
|
||||
#define CS18_SW4 SW4_CS18
|
||||
#define CS19_SW4 SW4_CS19
|
||||
#define CS20_SW4 SW4_CS20
|
||||
#define CS21_SW4 SW4_CS21
|
||||
#define CS22_SW4 SW4_CS22
|
||||
#define CS23_SW4 SW4_CS23
|
||||
#define CS24_SW4 SW4_CS24
|
||||
#define CS25_SW4 SW4_CS25
|
||||
#define CS26_SW4 SW4_CS26
|
||||
#define CS27_SW4 SW4_CS27
|
||||
#define CS28_SW4 SW4_CS28
|
||||
#define CS29_SW4 SW4_CS29
|
||||
#define CS30_SW4 SW4_CS30
|
||||
|
||||
#define CS1_SW5 SW5_CS1
|
||||
#define CS2_SW5 SW5_CS2
|
||||
#define CS3_SW5 SW5_CS3
|
||||
#define CS4_SW5 SW5_CS4
|
||||
#define CS5_SW5 SW5_CS5
|
||||
#define CS6_SW5 SW5_CS6
|
||||
#define CS7_SW5 SW5_CS7
|
||||
#define CS8_SW5 SW5_CS8
|
||||
#define CS9_SW5 SW5_CS9
|
||||
#define CS10_SW5 SW5_CS10
|
||||
#define CS11_SW5 SW5_CS11
|
||||
#define CS12_SW5 SW5_CS12
|
||||
#define CS13_SW5 SW5_CS13
|
||||
#define CS14_SW5 SW5_CS14
|
||||
#define CS15_SW5 SW5_CS15
|
||||
#define CS16_SW5 SW5_CS16
|
||||
#define CS17_SW5 SW5_CS17
|
||||
#define CS18_SW5 SW5_CS18
|
||||
#define CS19_SW5 SW5_CS19
|
||||
#define CS20_SW5 SW5_CS20
|
||||
#define CS21_SW5 SW5_CS21
|
||||
#define CS22_SW5 SW5_CS22
|
||||
#define CS23_SW5 SW5_CS23
|
||||
#define CS24_SW5 SW5_CS24
|
||||
#define CS25_SW5 SW5_CS25
|
||||
#define CS26_SW5 SW5_CS26
|
||||
#define CS27_SW5 SW5_CS27
|
||||
#define CS28_SW5 SW5_CS28
|
||||
#define CS29_SW5 SW5_CS29
|
||||
#define CS30_SW5 SW5_CS30
|
||||
|
||||
#define CS1_SW6 SW6_CS1
|
||||
#define CS2_SW6 SW6_CS2
|
||||
#define CS3_SW6 SW6_CS3
|
||||
#define CS4_SW6 SW6_CS4
|
||||
#define CS5_SW6 SW6_CS5
|
||||
#define CS6_SW6 SW6_CS6
|
||||
#define CS7_SW6 SW6_CS7
|
||||
#define CS8_SW6 SW6_CS8
|
||||
#define CS9_SW6 SW6_CS9
|
||||
#define CS10_SW6 SW6_CS10
|
||||
#define CS11_SW6 SW6_CS11
|
||||
#define CS12_SW6 SW6_CS12
|
||||
#define CS13_SW6 SW6_CS13
|
||||
#define CS14_SW6 SW6_CS14
|
||||
#define CS15_SW6 SW6_CS15
|
||||
#define CS16_SW6 SW6_CS16
|
||||
#define CS17_SW6 SW6_CS17
|
||||
#define CS18_SW6 SW6_CS18
|
||||
#define CS19_SW6 SW6_CS19
|
||||
#define CS20_SW6 SW6_CS20
|
||||
#define CS21_SW6 SW6_CS21
|
||||
#define CS22_SW6 SW6_CS22
|
||||
#define CS23_SW6 SW6_CS23
|
||||
#define CS24_SW6 SW6_CS24
|
||||
#define CS25_SW6 SW6_CS25
|
||||
#define CS26_SW6 SW6_CS26
|
||||
#define CS27_SW6 SW6_CS27
|
||||
#define CS28_SW6 SW6_CS28
|
||||
#define CS29_SW6 SW6_CS29
|
||||
#define CS30_SW6 SW6_CS30
|
||||
|
||||
#define CS1_SW7 SW7_CS1
|
||||
#define CS2_SW7 SW7_CS2
|
||||
#define CS3_SW7 SW7_CS3
|
||||
#define CS4_SW7 SW7_CS4
|
||||
#define CS5_SW7 SW7_CS5
|
||||
#define CS6_SW7 SW7_CS6
|
||||
#define CS7_SW7 SW7_CS7
|
||||
#define CS8_SW7 SW7_CS8
|
||||
#define CS9_SW7 SW7_CS9
|
||||
#define CS10_SW7 SW7_CS10
|
||||
#define CS11_SW7 SW7_CS11
|
||||
#define CS12_SW7 SW7_CS12
|
||||
#define CS13_SW7 SW7_CS13
|
||||
#define CS14_SW7 SW7_CS14
|
||||
#define CS15_SW7 SW7_CS15
|
||||
#define CS16_SW7 SW7_CS16
|
||||
#define CS17_SW7 SW7_CS17
|
||||
#define CS18_SW7 SW7_CS18
|
||||
#define CS19_SW7 SW7_CS19
|
||||
#define CS20_SW7 SW7_CS20
|
||||
#define CS21_SW7 SW7_CS21
|
||||
#define CS22_SW7 SW7_CS22
|
||||
#define CS23_SW7 SW7_CS23
|
||||
#define CS24_SW7 SW7_CS24
|
||||
#define CS25_SW7 SW7_CS25
|
||||
#define CS26_SW7 SW7_CS26
|
||||
#define CS27_SW7 SW7_CS27
|
||||
#define CS28_SW7 SW7_CS28
|
||||
#define CS29_SW7 SW7_CS29
|
||||
#define CS30_SW7 SW7_CS30
|
||||
|
||||
#define CS1_SW8 SW8_CS1
|
||||
#define CS2_SW8 SW8_CS2
|
||||
#define CS3_SW8 SW8_CS3
|
||||
#define CS4_SW8 SW8_CS4
|
||||
#define CS5_SW8 SW8_CS5
|
||||
#define CS6_SW8 SW8_CS6
|
||||
#define CS7_SW8 SW8_CS7
|
||||
#define CS8_SW8 SW8_CS8
|
||||
#define CS9_SW8 SW8_CS9
|
||||
#define CS10_SW8 SW8_CS10
|
||||
#define CS11_SW8 SW8_CS11
|
||||
#define CS12_SW8 SW8_CS12
|
||||
#define CS13_SW8 SW8_CS13
|
||||
#define CS14_SW8 SW8_CS14
|
||||
#define CS15_SW8 SW8_CS15
|
||||
#define CS16_SW8 SW8_CS16
|
||||
#define CS17_SW8 SW8_CS17
|
||||
#define CS18_SW8 SW8_CS18
|
||||
#define CS19_SW8 SW8_CS19
|
||||
#define CS20_SW8 SW8_CS20
|
||||
#define CS21_SW8 SW8_CS21
|
||||
#define CS22_SW8 SW8_CS22
|
||||
#define CS23_SW8 SW8_CS23
|
||||
#define CS24_SW8 SW8_CS24
|
||||
#define CS25_SW8 SW8_CS25
|
||||
#define CS26_SW8 SW8_CS26
|
||||
#define CS27_SW8 SW8_CS27
|
||||
#define CS28_SW8 SW8_CS28
|
||||
#define CS29_SW8 SW8_CS29
|
||||
#define CS30_SW8 SW8_CS30
|
||||
|
||||
#define CS1_SW9 SW9_CS1
|
||||
#define CS2_SW9 SW9_CS2
|
||||
#define CS3_SW9 SW9_CS3
|
||||
#define CS4_SW9 SW9_CS4
|
||||
#define CS5_SW9 SW9_CS5
|
||||
#define CS6_SW9 SW9_CS6
|
||||
#define CS7_SW9 SW9_CS7
|
||||
#define CS8_SW9 SW9_CS8
|
||||
#define CS9_SW9 SW9_CS9
|
||||
#define CS10_SW9 SW9_CS10
|
||||
#define CS11_SW9 SW9_CS11
|
||||
#define CS12_SW9 SW9_CS12
|
||||
#define CS13_SW9 SW9_CS13
|
||||
#define CS14_SW9 SW9_CS14
|
||||
#define CS15_SW9 SW9_CS15
|
||||
#define CS16_SW9 SW9_CS16
|
||||
#define CS17_SW9 SW9_CS17
|
||||
#define CS18_SW9 SW9_CS18
|
||||
#define CS19_SW9 SW9_CS19
|
||||
#define CS20_SW9 SW9_CS20
|
||||
#define CS21_SW9 SW9_CS21
|
||||
#define CS22_SW9 SW9_CS22
|
||||
#define CS23_SW9 SW9_CS23
|
||||
#define CS24_SW9 SW9_CS24
|
||||
#define CS25_SW9 SW9_CS25
|
||||
#define CS26_SW9 SW9_CS26
|
||||
#define CS27_SW9 SW9_CS27
|
||||
#define CS28_SW9 SW9_CS28
|
||||
#define CS29_SW9 SW9_CS29
|
||||
#define CS30_SW9 SW9_CS30
|
||||
|
||||
#define CS31_SW1 SW1_CS31
|
||||
#define CS32_SW1 SW1_CS32
|
||||
#define CS33_SW1 SW1_CS33
|
||||
#define CS34_SW1 SW1_CS34
|
||||
#define CS35_SW1 SW1_CS35
|
||||
#define CS36_SW1 SW1_CS36
|
||||
#define CS37_SW1 SW1_CS37
|
||||
#define CS38_SW1 SW1_CS38
|
||||
#define CS39_SW1 SW1_CS39
|
||||
|
||||
#define CS31_SW2 SW2_CS31
|
||||
#define CS32_SW2 SW2_CS32
|
||||
#define CS33_SW2 SW2_CS33
|
||||
#define CS34_SW2 SW2_CS34
|
||||
#define CS35_SW2 SW2_CS35
|
||||
#define CS36_SW2 SW2_CS36
|
||||
#define CS37_SW2 SW2_CS37
|
||||
#define CS38_SW2 SW2_CS38
|
||||
#define CS39_SW2 SW2_CS39
|
||||
|
||||
#define CS31_SW3 SW3_CS31
|
||||
#define CS32_SW3 SW3_CS32
|
||||
#define CS33_SW3 SW3_CS33
|
||||
#define CS34_SW3 SW3_CS34
|
||||
#define CS35_SW3 SW3_CS35
|
||||
#define CS36_SW3 SW3_CS36
|
||||
#define CS37_SW3 SW3_CS37
|
||||
#define CS38_SW3 SW3_CS38
|
||||
#define CS39_SW3 SW3_CS39
|
||||
|
||||
#define CS31_SW4 SW4_CS31
|
||||
#define CS32_SW4 SW4_CS32
|
||||
#define CS33_SW4 SW4_CS33
|
||||
#define CS34_SW4 SW4_CS34
|
||||
#define CS35_SW4 SW4_CS35
|
||||
#define CS36_SW4 SW4_CS36
|
||||
#define CS37_SW4 SW4_CS37
|
||||
#define CS38_SW4 SW4_CS38
|
||||
#define CS39_SW4 SW4_CS39
|
||||
|
||||
#define CS31_SW5 SW5_CS31
|
||||
#define CS32_SW5 SW5_CS32
|
||||
#define CS33_SW5 SW5_CS33
|
||||
#define CS34_SW5 SW5_CS34
|
||||
#define CS35_SW5 SW5_CS35
|
||||
#define CS36_SW5 SW5_CS36
|
||||
#define CS37_SW5 SW5_CS37
|
||||
#define CS38_SW5 SW5_CS38
|
||||
#define CS39_SW5 SW5_CS39
|
||||
|
||||
#define CS31_SW6 SW6_CS31
|
||||
#define CS32_SW6 SW6_CS32
|
||||
#define CS33_SW6 SW6_CS33
|
||||
#define CS34_SW6 SW6_CS34
|
||||
#define CS35_SW6 SW6_CS35
|
||||
#define CS36_SW6 SW6_CS36
|
||||
#define CS37_SW6 SW6_CS37
|
||||
#define CS38_SW6 SW6_CS38
|
||||
#define CS39_SW6 SW6_CS39
|
||||
|
||||
#define CS31_SW7 SW7_CS31
|
||||
#define CS32_SW7 SW7_CS32
|
||||
#define CS33_SW7 SW7_CS33
|
||||
#define CS34_SW7 SW7_CS34
|
||||
#define CS35_SW7 SW7_CS35
|
||||
#define CS36_SW7 SW7_CS36
|
||||
#define CS37_SW7 SW7_CS37
|
||||
#define CS38_SW7 SW7_CS38
|
||||
#define CS39_SW7 SW7_CS39
|
||||
|
||||
#define CS31_SW8 SW8_CS31
|
||||
#define CS32_SW8 SW8_CS32
|
||||
#define CS33_SW8 SW8_CS33
|
||||
#define CS34_SW8 SW8_CS34
|
||||
#define CS35_SW8 SW8_CS35
|
||||
#define CS36_SW8 SW8_CS36
|
||||
#define CS37_SW8 SW8_CS37
|
||||
#define CS38_SW8 SW8_CS38
|
||||
#define CS39_SW8 SW8_CS39
|
||||
|
||||
#define CS31_SW9 SW9_CS31
|
||||
#define CS32_SW9 SW9_CS32
|
||||
#define CS33_SW9 SW9_CS33
|
||||
#define CS34_SW9 SW9_CS34
|
||||
#define CS35_SW9 SW9_CS35
|
||||
#define CS36_SW9 SW9_CS36
|
||||
#define CS37_SW9 SW9_CS37
|
||||
#define CS38_SW9 SW9_CS38
|
||||
#define CS39_SW9 SW9_CS39
|
||||
|
@ -24,51 +24,6 @@
|
||||
#include "progmem.h"
|
||||
#include "util.h"
|
||||
|
||||
// ======== DEPRECATED DEFINES - DO NOT USE ========
|
||||
#ifdef DRIVER_ADDR_1
|
||||
# define IS31FL3741_I2C_ADDRESS_1 DRIVER_ADDR_1
|
||||
#endif
|
||||
#ifdef DRIVER_ADDR_2
|
||||
# define IS31FL3741_I2C_ADDRESS_2 DRIVER_ADDR_2
|
||||
#endif
|
||||
#ifdef DRIVER_ADDR_3
|
||||
# define IS31FL3741_I2C_ADDRESS_3 DRIVER_ADDR_3
|
||||
#endif
|
||||
#ifdef DRIVER_ADDR_4
|
||||
# define IS31FL3741_I2C_ADDRESS_4 DRIVER_ADDR_4
|
||||
#endif
|
||||
#ifdef ISSI_TIMEOUT
|
||||
# define IS31FL3741_I2C_TIMEOUT ISSI_TIMEOUT
|
||||
#endif
|
||||
#ifdef ISSI_PERSISTENCE
|
||||
# define IS31FL3741_I2C_PERSISTENCE ISSI_PERSISTENCE
|
||||
#endif
|
||||
#ifdef ISSI_CONFIGURATION
|
||||
# define IS31FL3741_CONFIGURATION ISSI_CONFIGURATION
|
||||
#endif
|
||||
#ifdef ISSI_SWPULLUP
|
||||
# define IS31FL3741_SW_PULLUP ISSI_SWPULLUP
|
||||
#endif
|
||||
#ifdef ISSI_CSPULLUP
|
||||
# define IS31FL3741_CS_PULLDOWN ISSI_CSPULLUP
|
||||
#endif
|
||||
#ifdef ISSI_GLOBALCURRENT
|
||||
# define IS31FL3741_GLOBAL_CURRENT ISSI_GLOBALCURRENT
|
||||
#endif
|
||||
|
||||
#define is31_led is31fl3741_led_t
|
||||
#define g_is31_leds g_is31fl3741_leds
|
||||
|
||||
#define PUR_0R IS31FL3741_PUR_0_OHM
|
||||
#define PUR_05KR IS31FL3741_PUR_0K5_OHM
|
||||
#define PUR_1KR IS31FL3741_PUR_1K_OHM
|
||||
#define PUR_2KR IS31FL3741_PUR_2K_OHM
|
||||
#define PUR_4KR IS31FL3741_PUR_4K_OHM
|
||||
#define PUR_8KR IS31FL3741_PUR_8K_OHM
|
||||
#define PUR_16KR IS31FL3741_PUR_16K_OHM
|
||||
#define PUR_32KR IS31FL3741_PUR_32K_OHM
|
||||
// ========
|
||||
|
||||
#define IS31FL3741_REG_INTERRUPT_MASK 0xF0
|
||||
#define IS31FL3741_REG_INTERRUPT_STATUS 0xF1
|
||||
#define IS31FL3741_REG_ID 0xFC
|
||||
@ -531,374 +486,3 @@ void is31fl3741_flush(void);
|
||||
#define SW9_CS37 0x1A8
|
||||
#define SW9_CS38 0x1A9
|
||||
#define SW9_CS39 0x1AA
|
||||
|
||||
// DEPRECATED - DO NOT USE
|
||||
|
||||
#define CS1_SW1 SW1_CS1
|
||||
#define CS2_SW1 SW1_CS2
|
||||
#define CS3_SW1 SW1_CS3
|
||||
#define CS4_SW1 SW1_CS4
|
||||
#define CS5_SW1 SW1_CS5
|
||||
#define CS6_SW1 SW1_CS6
|
||||
#define CS7_SW1 SW1_CS7
|
||||
#define CS8_SW1 SW1_CS8
|
||||
#define CS9_SW1 SW1_CS9
|
||||
#define CS10_SW1 SW1_CS10
|
||||
#define CS11_SW1 SW1_CS11
|
||||
#define CS12_SW1 SW1_CS12
|
||||
#define CS13_SW1 SW1_CS13
|
||||
#define CS14_SW1 SW1_CS14
|
||||
#define CS15_SW1 SW1_CS15
|
||||
#define CS16_SW1 SW1_CS16
|
||||
#define CS17_SW1 SW1_CS17
|
||||
#define CS18_SW1 SW1_CS18
|
||||
#define CS19_SW1 SW1_CS19
|
||||
#define CS20_SW1 SW1_CS20
|
||||
#define CS21_SW1 SW1_CS21
|
||||
#define CS22_SW1 SW1_CS22
|
||||
#define CS23_SW1 SW1_CS23
|
||||
#define CS24_SW1 SW1_CS24
|
||||
#define CS25_SW1 SW1_CS25
|
||||
#define CS26_SW1 SW1_CS26
|
||||
#define CS27_SW1 SW1_CS27
|
||||
#define CS28_SW1 SW1_CS28
|
||||
#define CS29_SW1 SW1_CS29
|
||||
#define CS30_SW1 SW1_CS30
|
||||
|
||||
#define CS1_SW2 SW2_CS1
|
||||
#define CS2_SW2 SW2_CS2
|
||||
#define CS3_SW2 SW2_CS3
|
||||
#define CS4_SW2 SW2_CS4
|
||||
#define CS5_SW2 SW2_CS5
|
||||
#define CS6_SW2 SW2_CS6
|
||||
#define CS7_SW2 SW2_CS7
|
||||
#define CS8_SW2 SW2_CS8
|
||||
#define CS9_SW2 SW2_CS9
|
||||
#define CS10_SW2 SW2_CS10
|
||||
#define CS11_SW2 SW2_CS11
|
||||
#define CS12_SW2 SW2_CS12
|
||||
#define CS13_SW2 SW2_CS13
|
||||
#define CS14_SW2 SW2_CS14
|
||||
#define CS15_SW2 SW2_CS15
|
||||
#define CS16_SW2 SW2_CS16
|
||||
#define CS17_SW2 SW2_CS17
|
||||
#define CS18_SW2 SW2_CS18
|
||||
#define CS19_SW2 SW2_CS19
|
||||
#define CS20_SW2 SW2_CS20
|
||||
#define CS21_SW2 SW2_CS21
|
||||
#define CS22_SW2 SW2_CS22
|
||||
#define CS23_SW2 SW2_CS23
|
||||
#define CS24_SW2 SW2_CS24
|
||||
#define CS25_SW2 SW2_CS25
|
||||
#define CS26_SW2 SW2_CS26
|
||||
#define CS27_SW2 SW2_CS27
|
||||
#define CS28_SW2 SW2_CS28
|
||||
#define CS29_SW2 SW2_CS29
|
||||
#define CS30_SW2 SW2_CS30
|
||||
|
||||
#define CS1_SW3 SW3_CS1
|
||||
#define CS2_SW3 SW3_CS2
|
||||
#define CS3_SW3 SW3_CS3
|
||||
#define CS4_SW3 SW3_CS4
|
||||
#define CS5_SW3 SW3_CS5
|
||||
#define CS6_SW3 SW3_CS6
|
||||
#define CS7_SW3 SW3_CS7
|
||||
#define CS8_SW3 SW3_CS8
|
||||
#define CS9_SW3 SW3_CS9
|
||||
#define CS10_SW3 SW3_CS10
|
||||
#define CS11_SW3 SW3_CS11
|
||||
#define CS12_SW3 SW3_CS12
|
||||
#define CS13_SW3 SW3_CS13
|
||||
#define CS14_SW3 SW3_CS14
|
||||
#define CS15_SW3 SW3_CS15
|
||||
#define CS16_SW3 SW3_CS16
|
||||
#define CS17_SW3 SW3_CS17
|
||||
#define CS18_SW3 SW3_CS18
|
||||
#define CS19_SW3 SW3_CS19
|
||||
#define CS20_SW3 SW3_CS20
|
||||
#define CS21_SW3 SW3_CS21
|
||||
#define CS22_SW3 SW3_CS22
|
||||
#define CS23_SW3 SW3_CS23
|
||||
#define CS24_SW3 SW3_CS24
|
||||
#define CS25_SW3 SW3_CS25
|
||||
#define CS26_SW3 SW3_CS26
|
||||
#define CS27_SW3 SW3_CS27
|
||||
#define CS28_SW3 SW3_CS28
|
||||
#define CS29_SW3 SW3_CS29
|
||||
#define CS30_SW3 SW3_CS30
|
||||
|
||||
#define CS1_SW4 SW4_CS1
|
||||
#define CS2_SW4 SW4_CS2
|
||||
#define CS3_SW4 SW4_CS3
|
||||
#define CS4_SW4 SW4_CS4
|
||||
#define CS5_SW4 SW4_CS5
|
||||
#define CS6_SW4 SW4_CS6
|
||||
#define CS7_SW4 SW4_CS7
|
||||
#define CS8_SW4 SW4_CS8
|
||||
#define CS9_SW4 SW4_CS9
|
||||
#define CS10_SW4 SW4_CS10
|
||||
#define CS11_SW4 SW4_CS11
|
||||
#define CS12_SW4 SW4_CS12
|
||||
#define CS13_SW4 SW4_CS13
|
||||
#define CS14_SW4 SW4_CS14
|
||||
#define CS15_SW4 SW4_CS15
|
||||
#define CS16_SW4 SW4_CS16
|
||||
#define CS17_SW4 SW4_CS17
|
||||
#define CS18_SW4 SW4_CS18
|
||||
#define CS19_SW4 SW4_CS19
|
||||
#define CS20_SW4 SW4_CS20
|
||||
#define CS21_SW4 SW4_CS21
|
||||
#define CS22_SW4 SW4_CS22
|
||||
#define CS23_SW4 SW4_CS23
|
||||
#define CS24_SW4 SW4_CS24
|
||||
#define CS25_SW4 SW4_CS25
|
||||
#define CS26_SW4 SW4_CS26
|
||||
#define CS27_SW4 SW4_CS27
|
||||
#define CS28_SW4 SW4_CS28
|
||||
#define CS29_SW4 SW4_CS29
|
||||
#define CS30_SW4 SW4_CS30
|
||||
|
||||
#define CS1_SW5 SW5_CS1
|
||||
#define CS2_SW5 SW5_CS2
|
||||
#define CS3_SW5 SW5_CS3
|
||||
#define CS4_SW5 SW5_CS4
|
||||
#define CS5_SW5 SW5_CS5
|
||||
#define CS6_SW5 SW5_CS6
|
||||
#define CS7_SW5 SW5_CS7
|
||||
#define CS8_SW5 SW5_CS8
|
||||
#define CS9_SW5 SW5_CS9
|
||||
#define CS10_SW5 SW5_CS10
|
||||
#define CS11_SW5 SW5_CS11
|
||||
#define CS12_SW5 SW5_CS12
|
||||
#define CS13_SW5 SW5_CS13
|
||||
#define CS14_SW5 SW5_CS14
|
||||
#define CS15_SW5 SW5_CS15
|
||||
#define CS16_SW5 SW5_CS16
|
||||
#define CS17_SW5 SW5_CS17
|
||||
#define CS18_SW5 SW5_CS18
|
||||
#define CS19_SW5 SW5_CS19
|
||||
#define CS20_SW5 SW5_CS20
|
||||
#define CS21_SW5 SW5_CS21
|
||||
#define CS22_SW5 SW5_CS22
|
||||
#define CS23_SW5 SW5_CS23
|
||||
#define CS24_SW5 SW5_CS24
|
||||
#define CS25_SW5 SW5_CS25
|
||||
#define CS26_SW5 SW5_CS26
|
||||
#define CS27_SW5 SW5_CS27
|
||||
#define CS28_SW5 SW5_CS28
|
||||
#define CS29_SW5 SW5_CS29
|
||||
#define CS30_SW5 SW5_CS30
|
||||
|
||||
#define CS1_SW6 SW6_CS1
|
||||
#define CS2_SW6 SW6_CS2
|
||||
#define CS3_SW6 SW6_CS3
|
||||
#define CS4_SW6 SW6_CS4
|
||||
#define CS5_SW6 SW6_CS5
|
||||
#define CS6_SW6 SW6_CS6
|
||||
#define CS7_SW6 SW6_CS7
|
||||
#define CS8_SW6 SW6_CS8
|
||||
#define CS9_SW6 SW6_CS9
|
||||
#define CS10_SW6 SW6_CS10
|
||||
#define CS11_SW6 SW6_CS11
|
||||
#define CS12_SW6 SW6_CS12
|
||||
#define CS13_SW6 SW6_CS13
|
||||
#define CS14_SW6 SW6_CS14
|
||||
#define CS15_SW6 SW6_CS15
|
||||
#define CS16_SW6 SW6_CS16
|
||||
#define CS17_SW6 SW6_CS17
|
||||
#define CS18_SW6 SW6_CS18
|
||||
#define CS19_SW6 SW6_CS19
|
||||
#define CS20_SW6 SW6_CS20
|
||||
#define CS21_SW6 SW6_CS21
|
||||
#define CS22_SW6 SW6_CS22
|
||||
#define CS23_SW6 SW6_CS23
|
||||
#define CS24_SW6 SW6_CS24
|
||||
#define CS25_SW6 SW6_CS25
|
||||
#define CS26_SW6 SW6_CS26
|
||||
#define CS27_SW6 SW6_CS27
|
||||
#define CS28_SW6 SW6_CS28
|
||||
#define CS29_SW6 SW6_CS29
|
||||
#define CS30_SW6 SW6_CS30
|
||||
|
||||
#define CS1_SW7 SW7_CS1
|
||||
#define CS2_SW7 SW7_CS2
|
||||
#define CS3_SW7 SW7_CS3
|
||||
#define CS4_SW7 SW7_CS4
|
||||
#define CS5_SW7 SW7_CS5
|
||||
#define CS6_SW7 SW7_CS6
|
||||
#define CS7_SW7 SW7_CS7
|
||||
#define CS8_SW7 SW7_CS8
|
||||
#define CS9_SW7 SW7_CS9
|
||||
#define CS10_SW7 SW7_CS10
|
||||
#define CS11_SW7 SW7_CS11
|
||||
#define CS12_SW7 SW7_CS12
|
||||
#define CS13_SW7 SW7_CS13
|
||||
#define CS14_SW7 SW7_CS14
|
||||
#define CS15_SW7 SW7_CS15
|
||||
#define CS16_SW7 SW7_CS16
|
||||
#define CS17_SW7 SW7_CS17
|
||||
#define CS18_SW7 SW7_CS18
|
||||
#define CS19_SW7 SW7_CS19
|
||||
#define CS20_SW7 SW7_CS20
|
||||
#define CS21_SW7 SW7_CS21
|
||||
#define CS22_SW7 SW7_CS22
|
||||
#define CS23_SW7 SW7_CS23
|
||||
#define CS24_SW7 SW7_CS24
|
||||
#define CS25_SW7 SW7_CS25
|
||||
#define CS26_SW7 SW7_CS26
|
||||
#define CS27_SW7 SW7_CS27
|
||||
#define CS28_SW7 SW7_CS28
|
||||
#define CS29_SW7 SW7_CS29
|
||||
#define CS30_SW7 SW7_CS30
|
||||
|
||||
#define CS1_SW8 SW8_CS1
|
||||
#define CS2_SW8 SW8_CS2
|
||||
#define CS3_SW8 SW8_CS3
|
||||
#define CS4_SW8 SW8_CS4
|
||||
#define CS5_SW8 SW8_CS5
|
||||
#define CS6_SW8 SW8_CS6
|
||||
#define CS7_SW8 SW8_CS7
|
||||
#define CS8_SW8 SW8_CS8
|
||||
#define CS9_SW8 SW8_CS9
|
||||
#define CS10_SW8 SW8_CS10
|
||||
#define CS11_SW8 SW8_CS11
|
||||
#define CS12_SW8 SW8_CS12
|
||||
#define CS13_SW8 SW8_CS13
|
||||
#define CS14_SW8 SW8_CS14
|
||||
#define CS15_SW8 SW8_CS15
|
||||
#define CS16_SW8 SW8_CS16
|
||||
#define CS17_SW8 SW8_CS17
|
||||
#define CS18_SW8 SW8_CS18
|
||||
#define CS19_SW8 SW8_CS19
|
||||
#define CS20_SW8 SW8_CS20
|
||||
#define CS21_SW8 SW8_CS21
|
||||
#define CS22_SW8 SW8_CS22
|
||||
#define CS23_SW8 SW8_CS23
|
||||
#define CS24_SW8 SW8_CS24
|
||||
#define CS25_SW8 SW8_CS25
|
||||
#define CS26_SW8 SW8_CS26
|
||||
#define CS27_SW8 SW8_CS27
|
||||
#define CS28_SW8 SW8_CS28
|
||||
#define CS29_SW8 SW8_CS29
|
||||
#define CS30_SW8 SW8_CS30
|
||||
|
||||
#define CS1_SW9 SW9_CS1
|
||||
#define CS2_SW9 SW9_CS2
|
||||
#define CS3_SW9 SW9_CS3
|
||||
#define CS4_SW9 SW9_CS4
|
||||
#define CS5_SW9 SW9_CS5
|
||||
#define CS6_SW9 SW9_CS6
|
||||
#define CS7_SW9 SW9_CS7
|
||||
#define CS8_SW9 SW9_CS8
|
||||
#define CS9_SW9 SW9_CS9
|
||||
#define CS10_SW9 SW9_CS10
|
||||
#define CS11_SW9 SW9_CS11
|
||||
#define CS12_SW9 SW9_CS12
|
||||
#define CS13_SW9 SW9_CS13
|
||||
#define CS14_SW9 SW9_CS14
|
||||
#define CS15_SW9 SW9_CS15
|
||||
#define CS16_SW9 SW9_CS16
|
||||
#define CS17_SW9 SW9_CS17
|
||||
#define CS18_SW9 SW9_CS18
|
||||
#define CS19_SW9 SW9_CS19
|
||||
#define CS20_SW9 SW9_CS20
|
||||
#define CS21_SW9 SW9_CS21
|
||||
#define CS22_SW9 SW9_CS22
|
||||
#define CS23_SW9 SW9_CS23
|
||||
#define CS24_SW9 SW9_CS24
|
||||
#define CS25_SW9 SW9_CS25
|
||||
#define CS26_SW9 SW9_CS26
|
||||
#define CS27_SW9 SW9_CS27
|
||||
#define CS28_SW9 SW9_CS28
|
||||
#define CS29_SW9 SW9_CS29
|
||||
#define CS30_SW9 SW9_CS30
|
||||
|
||||
#define CS31_SW1 SW1_CS31
|
||||
#define CS32_SW1 SW1_CS32
|
||||
#define CS33_SW1 SW1_CS33
|
||||
#define CS34_SW1 SW1_CS34
|
||||
#define CS35_SW1 SW1_CS35
|
||||
#define CS36_SW1 SW1_CS36
|
||||
#define CS37_SW1 SW1_CS37
|
||||
#define CS38_SW1 SW1_CS38
|
||||
#define CS39_SW1 SW1_CS39
|
||||
|
||||
#define CS31_SW2 SW2_CS31
|
||||
#define CS32_SW2 SW2_CS32
|
||||
#define CS33_SW2 SW2_CS33
|
||||
#define CS34_SW2 SW2_CS34
|
||||
#define CS35_SW2 SW2_CS35
|
||||
#define CS36_SW2 SW2_CS36
|
||||
#define CS37_SW2 SW2_CS37
|
||||
#define CS38_SW2 SW2_CS38
|
||||
#define CS39_SW2 SW2_CS39
|
||||
|
||||
#define CS31_SW3 SW3_CS31
|
||||
#define CS32_SW3 SW3_CS32
|
||||
#define CS33_SW3 SW3_CS33
|
||||
#define CS34_SW3 SW3_CS34
|
||||
#define CS35_SW3 SW3_CS35
|
||||
#define CS36_SW3 SW3_CS36
|
||||
#define CS37_SW3 SW3_CS37
|
||||
#define CS38_SW3 SW3_CS38
|
||||
#define CS39_SW3 SW3_CS39
|
||||
|
||||
#define CS31_SW4 SW4_CS31
|
||||
#define CS32_SW4 SW4_CS32
|
||||
#define CS33_SW4 SW4_CS33
|
||||
#define CS34_SW4 SW4_CS34
|
||||
#define CS35_SW4 SW4_CS35
|
||||
#define CS36_SW4 SW4_CS36
|
||||
#define CS37_SW4 SW4_CS37
|
||||
#define CS38_SW4 SW4_CS38
|
||||
#define CS39_SW4 SW4_CS39
|
||||
|
||||
#define CS31_SW5 SW5_CS31
|
||||
#define CS32_SW5 SW5_CS32
|
||||
#define CS33_SW5 SW5_CS33
|
||||
#define CS34_SW5 SW5_CS34
|
||||
#define CS35_SW5 SW5_CS35
|
||||
#define CS36_SW5 SW5_CS36
|
||||
#define CS37_SW5 SW5_CS37
|
||||
#define CS38_SW5 SW5_CS38
|
||||
#define CS39_SW5 SW5_CS39
|
||||
|
||||
#define CS31_SW6 SW6_CS31
|
||||
#define CS32_SW6 SW6_CS32
|
||||
#define CS33_SW6 SW6_CS33
|
||||
#define CS34_SW6 SW6_CS34
|
||||
#define CS35_SW6 SW6_CS35
|
||||
#define CS36_SW6 SW6_CS36
|
||||
#define CS37_SW6 SW6_CS37
|
||||
#define CS38_SW6 SW6_CS38
|
||||
#define CS39_SW6 SW6_CS39
|
||||
|
||||
#define CS31_SW7 SW7_CS31
|
||||
#define CS32_SW7 SW7_CS32
|
||||
#define CS33_SW7 SW7_CS33
|
||||
#define CS34_SW7 SW7_CS34
|
||||
#define CS35_SW7 SW7_CS35
|
||||
#define CS36_SW7 SW7_CS36
|
||||
#define CS37_SW7 SW7_CS37
|
||||
#define CS38_SW7 SW7_CS38
|
||||
#define CS39_SW7 SW7_CS39
|
||||
|
||||
#define CS31_SW8 SW8_CS31
|
||||
#define CS32_SW8 SW8_CS32
|
||||
#define CS33_SW8 SW8_CS33
|
||||
#define CS34_SW8 SW8_CS34
|
||||
#define CS35_SW8 SW8_CS35
|
||||
#define CS36_SW8 SW8_CS36
|
||||
#define CS37_SW8 SW8_CS37
|
||||
#define CS38_SW8 SW8_CS38
|
||||
#define CS39_SW8 SW8_CS39
|
||||
|
||||
#define CS31_SW9 SW9_CS31
|
||||
#define CS32_SW9 SW9_CS32
|
||||
#define CS33_SW9 SW9_CS33
|
||||
#define CS34_SW9 SW9_CS34
|
||||
#define CS35_SW9 SW9_CS35
|
||||
#define CS36_SW9 SW9_CS36
|
||||
#define CS37_SW9 SW9_CS37
|
||||
#define CS38_SW9 SW9_CS38
|
||||
#define CS39_SW9 SW9_CS39
|
||||
|
@ -328,214 +328,3 @@ void is31fl3743a_flush(void);
|
||||
#define SW11_CS16 0xC3
|
||||
#define SW11_CS17 0xC4
|
||||
#define SW11_CS18 0xC5
|
||||
|
||||
// DEPRECATED - DO NOT USE
|
||||
|
||||
#define CS1_SW1 SW1_CS1
|
||||
#define CS2_SW1 SW1_CS2
|
||||
#define CS3_SW1 SW1_CS3
|
||||
#define CS4_SW1 SW1_CS4
|
||||
#define CS5_SW1 SW1_CS5
|
||||
#define CS6_SW1 SW1_CS6
|
||||
#define CS7_SW1 SW1_CS7
|
||||
#define CS8_SW1 SW1_CS8
|
||||
#define CS9_SW1 SW1_CS9
|
||||
#define CS10_SW1 SW1_CS10
|
||||
#define CS11_SW1 SW1_CS11
|
||||
#define CS12_SW1 SW1_CS12
|
||||
#define CS13_SW1 SW1_CS13
|
||||
#define CS14_SW1 SW1_CS14
|
||||
#define CS15_SW1 SW1_CS15
|
||||
#define CS16_SW1 SW1_CS16
|
||||
#define CS17_SW1 SW1_CS17
|
||||
#define CS18_SW1 SW1_CS18
|
||||
|
||||
#define CS1_SW2 SW2_CS1
|
||||
#define CS2_SW2 SW2_CS2
|
||||
#define CS3_SW2 SW2_CS3
|
||||
#define CS4_SW2 SW2_CS4
|
||||
#define CS5_SW2 SW2_CS5
|
||||
#define CS6_SW2 SW2_CS6
|
||||
#define CS7_SW2 SW2_CS7
|
||||
#define CS8_SW2 SW2_CS8
|
||||
#define CS9_SW2 SW2_CS9
|
||||
#define CS10_SW2 SW2_CS10
|
||||
#define CS11_SW2 SW2_CS11
|
||||
#define CS12_SW2 SW2_CS12
|
||||
#define CS13_SW2 SW2_CS13
|
||||
#define CS14_SW2 SW2_CS14
|
||||
#define CS15_SW2 SW2_CS15
|
||||
#define CS16_SW2 SW2_CS16
|
||||
#define CS17_SW2 SW2_CS17
|
||||
#define CS18_SW2 SW2_CS18
|
||||
|
||||
#define CS1_SW3 SW3_CS1
|
||||
#define CS2_SW3 SW3_CS2
|
||||
#define CS3_SW3 SW3_CS3
|
||||
#define CS4_SW3 SW3_CS4
|
||||
#define CS5_SW3 SW3_CS5
|
||||
#define CS6_SW3 SW3_CS6
|
||||
#define CS7_SW3 SW3_CS7
|
||||
#define CS8_SW3 SW3_CS8
|
||||
#define CS9_SW3 SW3_CS9
|
||||
#define CS10_SW3 SW3_CS10
|
||||
#define CS11_SW3 SW3_CS11
|
||||
#define CS12_SW3 SW3_CS12
|
||||
#define CS13_SW3 SW3_CS13
|
||||
#define CS14_SW3 SW3_CS14
|
||||
#define CS15_SW3 SW3_CS15
|
||||
#define CS16_SW3 SW3_CS16
|
||||
#define CS17_SW3 SW3_CS17
|
||||
#define CS18_SW3 SW3_CS18
|
||||
|
||||
#define CS1_SW4 SW4_CS1
|
||||
#define CS2_SW4 SW4_CS2
|
||||
#define CS3_SW4 SW4_CS3
|
||||
#define CS4_SW4 SW4_CS4
|
||||
#define CS5_SW4 SW4_CS5
|
||||
#define CS6_SW4 SW4_CS6
|
||||
#define CS7_SW4 SW4_CS7
|
||||
#define CS8_SW4 SW4_CS8
|
||||
#define CS9_SW4 SW4_CS9
|
||||
#define CS10_SW4 SW4_CS10
|
||||
#define CS11_SW4 SW4_CS11
|
||||
#define CS12_SW4 SW4_CS12
|
||||
#define CS13_SW4 SW4_CS13
|
||||
#define CS14_SW4 SW4_CS14
|
||||
#define CS15_SW4 SW4_CS15
|
||||
#define CS16_SW4 SW4_CS16
|
||||
#define CS17_SW4 SW4_CS17
|
||||
#define CS18_SW4 SW4_CS18
|
||||
|
||||
#define CS1_SW5 SW5_CS1
|
||||
#define CS2_SW5 SW5_CS2
|
||||
#define CS3_SW5 SW5_CS3
|
||||
#define CS4_SW5 SW5_CS4
|
||||
#define CS5_SW5 SW5_CS5
|
||||
#define CS6_SW5 SW5_CS6
|
||||
#define CS7_SW5 SW5_CS7
|
||||
#define CS8_SW5 SW5_CS8
|
||||
#define CS9_SW5 SW5_CS9
|
||||
#define CS10_SW5 SW5_CS10
|
||||
#define CS11_SW5 SW5_CS11
|
||||
#define CS12_SW5 SW5_CS12
|
||||
#define CS13_SW5 SW5_CS13
|
||||
#define CS14_SW5 SW5_CS14
|
||||
#define CS15_SW5 SW5_CS15
|
||||
#define CS16_SW5 SW5_CS16
|
||||
#define CS17_SW5 SW5_CS17
|
||||
#define CS18_SW5 SW5_CS18
|
||||
|
||||
#define CS1_SW6 SW6_CS1
|
||||
#define CS2_SW6 SW6_CS2
|
||||
#define CS3_SW6 SW6_CS3
|
||||
#define CS4_SW6 SW6_CS4
|
||||
#define CS5_SW6 SW6_CS5
|
||||
#define CS6_SW6 SW6_CS6
|
||||
#define CS7_SW6 SW6_CS7
|
||||
#define CS8_SW6 SW6_CS8
|
||||
#define CS9_SW6 SW6_CS9
|
||||
#define CS10_SW6 SW6_CS10
|
||||
#define CS11_SW6 SW6_CS11
|
||||
#define CS12_SW6 SW6_CS12
|
||||
#define CS13_SW6 SW6_CS13
|
||||
#define CS14_SW6 SW6_CS14
|
||||
#define CS15_SW6 SW6_CS15
|
||||
#define CS16_SW6 SW6_CS16
|
||||
#define CS17_SW6 SW6_CS17
|
||||
#define CS18_SW6 SW6_CS18
|
||||
|
||||
#define CS1_SW7 SW7_CS1
|
||||
#define CS2_SW7 SW7_CS2
|
||||
#define CS3_SW7 SW7_CS3
|
||||
#define CS4_SW7 SW7_CS4
|
||||
#define CS5_SW7 SW7_CS5
|
||||
#define CS6_SW7 SW7_CS6
|
||||
#define CS7_SW7 SW7_CS7
|
||||
#define CS8_SW7 SW7_CS8
|
||||
#define CS9_SW7 SW7_CS9
|
||||
#define CS10_SW7 SW7_CS10
|
||||
#define CS11_SW7 SW7_CS11
|
||||
#define CS12_SW7 SW7_CS12
|
||||
#define CS13_SW7 SW7_CS13
|
||||
#define CS14_SW7 SW7_CS14
|
||||
#define CS15_SW7 SW7_CS15
|
||||
#define CS16_SW7 SW7_CS16
|
||||
#define CS17_SW7 SW7_CS17
|
||||
#define CS18_SW7 SW7_CS18
|
||||
|
||||
#define CS1_SW8 SW8_CS1
|
||||
#define CS2_SW8 SW8_CS2
|
||||
#define CS3_SW8 SW8_CS3
|
||||
#define CS4_SW8 SW8_CS4
|
||||
#define CS5_SW8 SW8_CS5
|
||||
#define CS6_SW8 SW8_CS6
|
||||
#define CS7_SW8 SW8_CS7
|
||||
#define CS8_SW8 SW8_CS8
|
||||
#define CS9_SW8 SW8_CS9
|
||||
#define CS10_SW8 SW8_CS10
|
||||
#define CS11_SW8 SW8_CS11
|
||||
#define CS12_SW8 SW8_CS12
|
||||
#define CS13_SW8 SW8_CS13
|
||||
#define CS14_SW8 SW8_CS14
|
||||
#define CS15_SW8 SW8_CS15
|
||||
#define CS16_SW8 SW8_CS16
|
||||
#define CS17_SW8 SW8_CS17
|
||||
#define CS18_SW8 SW8_CS18
|
||||
|
||||
#define CS1_SW9 SW9_CS1
|
||||
#define CS2_SW9 SW9_CS2
|
||||
#define CS3_SW9 SW9_CS3
|
||||
#define CS4_SW9 SW9_CS4
|
||||
#define CS5_SW9 SW9_CS5
|
||||
#define CS6_SW9 SW9_CS6
|
||||
#define CS7_SW9 SW9_CS7
|
||||
#define CS8_SW9 SW9_CS8
|
||||
#define CS9_SW9 SW9_CS9
|
||||
#define CS10_SW9 SW9_CS10
|
||||
#define CS11_SW9 SW9_CS11
|
||||
#define CS12_SW9 SW9_CS12
|
||||
#define CS13_SW9 SW9_CS13
|
||||
#define CS14_SW9 SW9_CS14
|
||||
#define CS15_SW9 SW9_CS15
|
||||
#define CS16_SW9 SW9_CS16
|
||||
#define CS17_SW9 SW9_CS17
|
||||
#define CS18_SW9 SW9_CS18
|
||||
|
||||
#define CS1_SW10 SW10_CS1
|
||||
#define CS2_SW10 SW10_CS2
|
||||
#define CS3_SW10 SW10_CS3
|
||||
#define CS4_SW10 SW10_CS4
|
||||
#define CS5_SW10 SW10_CS5
|
||||
#define CS6_SW10 SW10_CS6
|
||||
#define CS7_SW10 SW10_CS7
|
||||
#define CS8_SW10 SW10_CS8
|
||||
#define CS9_SW10 SW10_CS9
|
||||
#define CS10_SW10 SW10_CS10
|
||||
#define CS11_SW10 SW10_CS11
|
||||
#define CS12_SW10 SW10_CS12
|
||||
#define CS13_SW10 SW10_CS13
|
||||
#define CS14_SW10 SW10_CS14
|
||||
#define CS15_SW10 SW10_CS15
|
||||
#define CS16_SW10 SW10_CS16
|
||||
#define CS17_SW10 SW10_CS17
|
||||
#define CS18_SW10 SW10_CS18
|
||||
|
||||
#define CS1_SW11 SW11_CS1
|
||||
#define CS2_SW11 SW11_CS2
|
||||
#define CS3_SW11 SW11_CS3
|
||||
#define CS4_SW11 SW11_CS4
|
||||
#define CS5_SW11 SW11_CS5
|
||||
#define CS6_SW11 SW11_CS6
|
||||
#define CS7_SW11 SW11_CS7
|
||||
#define CS8_SW11 SW11_CS8
|
||||
#define CS9_SW11 SW11_CS9
|
||||
#define CS10_SW11 SW11_CS10
|
||||
#define CS11_SW11 SW11_CS11
|
||||
#define CS12_SW11 SW11_CS12
|
||||
#define CS13_SW11 SW11_CS13
|
||||
#define CS14_SW11 SW11_CS14
|
||||
#define CS15_SW11 SW11_CS15
|
||||
#define CS16_SW11 SW11_CS16
|
||||
#define CS17_SW11 SW11_CS17
|
||||
#define CS18_SW11 SW11_CS18
|
||||
|
@ -21,37 +21,6 @@
|
||||
#include "progmem.h"
|
||||
#include "util.h"
|
||||
|
||||
// ======== DEPRECATED DEFINES - DO NOT USE ========
|
||||
#ifdef CKLED2001_TIMEOUT
|
||||
# define SNLED27351_I2C_TIMEOUT CKLED2001_TIMEOUT
|
||||
#endif
|
||||
#ifdef CKLED2001_PERSISTENCE
|
||||
# define SNLED27351_I2C_PERSISTENCE CKLED2001_PERSISTENCE
|
||||
#endif
|
||||
#ifdef PHASE_CHANNEL
|
||||
# define SNLED27351_PHASE_CHANNEL PHASE_CHANNEL
|
||||
#endif
|
||||
#ifdef CKLED2001_CURRENT_TUNE
|
||||
# define SNLED27351_CURRENT_TUNE CKLED2001_CURRENT_TUNE
|
||||
#endif
|
||||
|
||||
#define MSKPHASE_12CHANNEL SNLED27351_SCAN_PHASE_12_CHANNEL
|
||||
#define MSKPHASE_11CHANNEL SNLED27351_SCAN_PHASE_11_CHANNEL
|
||||
#define MSKPHASE_10CHANNEL SNLED27351_SCAN_PHASE_10_CHANNEL
|
||||
#define MSKPHASE_9CHANNEL SNLED27351_SCAN_PHASE_9_CHANNEL
|
||||
#define MSKPHASE_8CHANNEL SNLED27351_SCAN_PHASE_8_CHANNEL
|
||||
#define MSKPHASE_7CHANNEL SNLED27351_SCAN_PHASE_7_CHANNEL
|
||||
#define MSKPHASE_6CHANNEL SNLED27351_SCAN_PHASE_6_CHANNEL
|
||||
#define MSKPHASE_5CHANNEL SNLED27351_SCAN_PHASE_5_CHANNEL
|
||||
#define MSKPHASE_4CHANNEL SNLED27351_SCAN_PHASE_4_CHANNEL
|
||||
#define MSKPHASE_3CHANNEL SNLED27351_SCAN_PHASE_3_CHANNEL
|
||||
#define MSKPHASE_2CHANNEL SNLED27351_SCAN_PHASE_2_CHANNEL
|
||||
#define MSKPHASE_1CHANNEL SNLED27351_SCAN_PHASE_1_CHANNEL
|
||||
|
||||
#define ckled2001_led snled27351_led_t
|
||||
#define g_ckled2001_leds g_snled27351_leds
|
||||
// ========
|
||||
|
||||
#define SNLED27351_REG_COMMAND 0xFD
|
||||
#define SNLED27351_COMMAND_LED_CONTROL 0x00
|
||||
#define SNLED27351_COMMAND_PWM 0x01
|
||||
@ -378,209 +347,3 @@ void snled27351_sw_shutdown(uint8_t index);
|
||||
#define CB12_CA14 0xBD
|
||||
#define CB12_CA15 0xBE
|
||||
#define CB12_CA16 0xBF
|
||||
|
||||
// DEPRECATED - DO NOT USE
|
||||
|
||||
#define A_1 CB1_CA1
|
||||
#define A_2 CB1_CA2
|
||||
#define A_3 CB1_CA3
|
||||
#define A_4 CB1_CA4
|
||||
#define A_5 CB1_CA5
|
||||
#define A_6 CB1_CA6
|
||||
#define A_7 CB1_CA7
|
||||
#define A_8 CB1_CA8
|
||||
#define A_9 CB1_CA9
|
||||
#define A_10 CB1_CA10
|
||||
#define A_11 CB1_CA11
|
||||
#define A_12 CB1_CA12
|
||||
#define A_13 CB1_CA13
|
||||
#define A_14 CB1_CA14
|
||||
#define A_15 CB1_CA15
|
||||
#define A_16 CB1_CA16
|
||||
|
||||
#define B_1 CB2_CA1
|
||||
#define B_2 CB2_CA2
|
||||
#define B_3 CB2_CA3
|
||||
#define B_4 CB2_CA4
|
||||
#define B_5 CB2_CA5
|
||||
#define B_6 CB2_CA6
|
||||
#define B_7 CB2_CA7
|
||||
#define B_8 CB2_CA8
|
||||
#define B_9 CB2_CA9
|
||||
#define B_10 CB2_CA10
|
||||
#define B_11 CB2_CA11
|
||||
#define B_12 CB2_CA12
|
||||
#define B_13 CB2_CA13
|
||||
#define B_14 CB2_CA14
|
||||
#define B_15 CB2_CA15
|
||||
#define B_16 CB2_CA16
|
||||
|
||||
#define C_1 CB3_CA1
|
||||
#define C_2 CB3_CA2
|
||||
#define C_3 CB3_CA3
|
||||
#define C_4 CB3_CA4
|
||||
#define C_5 CB3_CA5
|
||||
#define C_6 CB3_CA6
|
||||
#define C_7 CB3_CA7
|
||||
#define C_8 CB3_CA8
|
||||
#define C_9 CB3_CA9
|
||||
#define C_10 CB3_CA10
|
||||
#define C_11 CB3_CA11
|
||||
#define C_12 CB3_CA12
|
||||
#define C_13 CB3_CA13
|
||||
#define C_14 CB3_CA14
|
||||
#define C_15 CB3_CA15
|
||||
#define C_16 CB3_CA16
|
||||
|
||||
#define D_1 CB4_CA1
|
||||
#define D_2 CB4_CA2
|
||||
#define D_3 CB4_CA3
|
||||
#define D_4 CB4_CA4
|
||||
#define D_5 CB4_CA5
|
||||
#define D_6 CB4_CA6
|
||||
#define D_7 CB4_CA7
|
||||
#define D_8 CB4_CA8
|
||||
#define D_9 CB4_CA9
|
||||
#define D_10 CB4_CA10
|
||||
#define D_11 CB4_CA11
|
||||
#define D_12 CB4_CA12
|
||||
#define D_13 CB4_CA13
|
||||
#define D_14 CB4_CA14
|
||||
#define D_15 CB4_CA15
|
||||
#define D_16 CB4_CA16
|
||||
|
||||
#define E_1 CB5_CA1
|
||||
#define E_2 CB5_CA2
|
||||
#define E_3 CB5_CA3
|
||||
#define E_4 CB5_CA4
|
||||
#define E_5 CB5_CA5
|
||||
#define E_6 CB5_CA6
|
||||
#define E_7 CB5_CA7
|
||||
#define E_8 CB5_CA8
|
||||
#define E_9 CB5_CA9
|
||||
#define E_10 CB5_CA10
|
||||
#define E_11 CB5_CA11
|
||||
#define E_12 CB5_CA12
|
||||
#define E_13 CB5_CA13
|
||||
#define E_14 CB5_CA14
|
||||
#define E_15 CB5_CA15
|
||||
#define E_16 CB5_CA16
|
||||
|
||||
#define F_1 CB6_CA1
|
||||
#define F_2 CB6_CA2
|
||||
#define F_3 CB6_CA3
|
||||
#define F_4 CB6_CA4
|
||||
#define F_5 CB6_CA5
|
||||
#define F_6 CB6_CA6
|
||||
#define F_7 CB6_CA7
|
||||
#define F_8 CB6_CA8
|
||||
#define F_9 CB6_CA9
|
||||
#define F_10 CB6_CA10
|
||||
#define F_11 CB6_CA11
|
||||
#define F_12 CB6_CA12
|
||||
#define F_13 CB6_CA13
|
||||
#define F_14 CB6_CA14
|
||||
#define F_15 CB6_CA15
|
||||
#define F_16 CB6_CA16
|
||||
|
||||
#define G_1 CB7_CA1
|
||||
#define G_2 CB7_CA2
|
||||
#define G_3 CB7_CA3
|
||||
#define G_4 CB7_CA4
|
||||
#define G_5 CB7_CA5
|
||||
#define G_6 CB7_CA6
|
||||
#define G_7 CB7_CA7
|
||||
#define G_8 CB7_CA8
|
||||
#define G_9 CB7_CA9
|
||||
#define G_10 CB7_CA10
|
||||
#define G_11 CB7_CA11
|
||||
#define G_12 CB7_CA12
|
||||
#define G_13 CB7_CA13
|
||||
#define G_14 CB7_CA14
|
||||
#define G_15 CB7_CA15
|
||||
#define G_16 CB7_CA16
|
||||
|
||||
#define H_1 CB8_CA1
|
||||
#define H_2 CB8_CA2
|
||||
#define H_3 CB8_CA3
|
||||
#define H_4 CB8_CA4
|
||||
#define H_5 CB8_CA5
|
||||
#define H_6 CB8_CA6
|
||||
#define H_7 CB8_CA7
|
||||
#define H_8 CB8_CA8
|
||||
#define H_9 CB8_CA9
|
||||
#define H_10 CB8_CA10
|
||||
#define H_11 CB8_CA11
|
||||
#define H_12 CB8_CA12
|
||||
#define H_13 CB8_CA13
|
||||
#define H_14 CB8_CA14
|
||||
#define H_15 CB8_CA15
|
||||
#define H_16 CB8_CA16
|
||||
|
||||
#define I_1 CB9_CA1
|
||||
#define I_2 CB9_CA2
|
||||
#define I_3 CB9_CA3
|
||||
#define I_4 CB9_CA4
|
||||
#define I_5 CB9_CA5
|
||||
#define I_6 CB9_CA6
|
||||
#define I_7 CB9_CA7
|
||||
#define I_8 CB9_CA8
|
||||
#define I_9 CB9_CA9
|
||||
#define I_10 CB9_CA10
|
||||
#define I_11 CB9_CA11
|
||||
#define I_12 CB9_CA12
|
||||
#define I_13 CB9_CA13
|
||||
#define I_14 CB9_CA14
|
||||
#define I_15 CB9_CA15
|
||||
#define I_16 CB9_CA16
|
||||
|
||||
#define J_1 CB10_CA1
|
||||
#define J_2 CB10_CA2
|
||||
#define J_3 CB10_CA3
|
||||
#define J_4 CB10_CA4
|
||||
#define J_5 CB10_CA5
|
||||
#define J_6 CB10_CA6
|
||||
#define J_7 CB10_CA7
|
||||
#define J_8 CB10_CA8
|
||||
#define J_9 CB10_CA9
|
||||
#define J_10 CB10_CA10
|
||||
#define J_11 CB10_CA11
|
||||
#define J_12 CB10_CA12
|
||||
#define J_13 CB10_CA13
|
||||
#define J_14 CB10_CA14
|
||||
#define J_15 CB10_CA15
|
||||
#define J_16 CB10_CA16
|
||||
|
||||
#define K_1 CB11_CA1
|
||||
#define K_2 CB11_CA2
|
||||
#define K_3 CB11_CA3
|
||||
#define K_4 CB11_CA4
|
||||
#define K_5 CB11_CA5
|
||||
#define K_6 CB11_CA6
|
||||
#define K_7 CB11_CA7
|
||||
#define K_8 CB11_CA8
|
||||
#define K_9 CB11_CA9
|
||||
#define K_10 CB11_CA10
|
||||
#define K_11 CB11_CA11
|
||||
#define K_12 CB11_CA12
|
||||
#define K_13 CB11_CA13
|
||||
#define K_14 CB11_CA14
|
||||
#define K_15 CB11_CA15
|
||||
#define K_16 CB11_CA16
|
||||
|
||||
#define L_1 CB12_CA1
|
||||
#define L_2 CB12_CA2
|
||||
#define L_3 CB12_CA3
|
||||
#define L_4 CB12_CA4
|
||||
#define L_5 CB12_CA5
|
||||
#define L_6 CB12_CA6
|
||||
#define L_7 CB12_CA7
|
||||
#define L_8 CB12_CA8
|
||||
#define L_9 CB12_CA9
|
||||
#define L_10 CB12_CA10
|
||||
#define L_11 CB12_CA11
|
||||
#define L_12 CB12_CA12
|
||||
#define L_13 CB12_CA13
|
||||
#define L_14 CB12_CA14
|
||||
#define L_15 CB12_CA15
|
||||
#define L_16 CB12_CA16
|
||||
|
@ -21,49 +21,6 @@
|
||||
#include "progmem.h"
|
||||
#include "util.h"
|
||||
|
||||
// ======== DEPRECATED DEFINES - DO NOT USE ========
|
||||
#ifdef DRIVER_ADDR_1
|
||||
# define SNLED27351_I2C_ADDRESS_1 DRIVER_ADDR_1
|
||||
#endif
|
||||
#ifdef DRIVER_ADDR_2
|
||||
# define SNLED27351_I2C_ADDRESS_2 DRIVER_ADDR_2
|
||||
#endif
|
||||
#ifdef DRIVER_ADDR_3
|
||||
# define SNLED27351_I2C_ADDRESS_3 DRIVER_ADDR_3
|
||||
#endif
|
||||
#ifdef DRIVER_ADDR_4
|
||||
# define SNLED27351_I2C_ADDRESS_4 DRIVER_ADDR_4
|
||||
#endif
|
||||
#ifdef CKLED2001_TIMEOUT
|
||||
# define SNLED27351_I2C_TIMEOUT CKLED2001_TIMEOUT
|
||||
#endif
|
||||
#ifdef CKLED2001_PERSISTENCE
|
||||
# define SNLED27351_I2C_PERSISTENCE CKLED2001_PERSISTENCE
|
||||
#endif
|
||||
#ifdef PHASE_CHANNEL
|
||||
# define SNLED27351_PHASE_CHANNEL PHASE_CHANNEL
|
||||
#endif
|
||||
#ifdef CKLED2001_CURRENT_TUNE
|
||||
# define SNLED27351_CURRENT_TUNE CKLED2001_CURRENT_TUNE
|
||||
#endif
|
||||
|
||||
#define MSKPHASE_12CHANNEL SNLED27351_SCAN_PHASE_12_CHANNEL
|
||||
#define MSKPHASE_11CHANNEL SNLED27351_SCAN_PHASE_11_CHANNEL
|
||||
#define MSKPHASE_10CHANNEL SNLED27351_SCAN_PHASE_10_CHANNEL
|
||||
#define MSKPHASE_9CHANNEL SNLED27351_SCAN_PHASE_9_CHANNEL
|
||||
#define MSKPHASE_8CHANNEL SNLED27351_SCAN_PHASE_8_CHANNEL
|
||||
#define MSKPHASE_7CHANNEL SNLED27351_SCAN_PHASE_7_CHANNEL
|
||||
#define MSKPHASE_6CHANNEL SNLED27351_SCAN_PHASE_6_CHANNEL
|
||||
#define MSKPHASE_5CHANNEL SNLED27351_SCAN_PHASE_5_CHANNEL
|
||||
#define MSKPHASE_4CHANNEL SNLED27351_SCAN_PHASE_4_CHANNEL
|
||||
#define MSKPHASE_3CHANNEL SNLED27351_SCAN_PHASE_3_CHANNEL
|
||||
#define MSKPHASE_2CHANNEL SNLED27351_SCAN_PHASE_2_CHANNEL
|
||||
#define MSKPHASE_1CHANNEL SNLED27351_SCAN_PHASE_1_CHANNEL
|
||||
|
||||
#define ckled2001_led snled27351_led_t
|
||||
#define g_ckled2001_leds g_snled27351_leds
|
||||
// ========
|
||||
|
||||
#define SNLED27351_REG_COMMAND 0xFD
|
||||
#define SNLED27351_COMMAND_LED_CONTROL 0x00
|
||||
#define SNLED27351_COMMAND_PWM 0x01
|
||||
@ -392,209 +349,3 @@ void snled27351_sw_shutdown(uint8_t index);
|
||||
#define CB12_CA14 0xBD
|
||||
#define CB12_CA15 0xBE
|
||||
#define CB12_CA16 0xBF
|
||||
|
||||
// DEPRECATED - DO NOT USE
|
||||
|
||||
#define A_1 CB1_CA1
|
||||
#define A_2 CB1_CA2
|
||||
#define A_3 CB1_CA3
|
||||
#define A_4 CB1_CA4
|
||||
#define A_5 CB1_CA5
|
||||
#define A_6 CB1_CA6
|
||||
#define A_7 CB1_CA7
|
||||
#define A_8 CB1_CA8
|
||||
#define A_9 CB1_CA9
|
||||
#define A_10 CB1_CA10
|
||||
#define A_11 CB1_CA11
|
||||
#define A_12 CB1_CA12
|
||||
#define A_13 CB1_CA13
|
||||
#define A_14 CB1_CA14
|
||||
#define A_15 CB1_CA15
|
||||
#define A_16 CB1_CA16
|
||||
|
||||
#define B_1 CB2_CA1
|
||||
#define B_2 CB2_CA2
|
||||
#define B_3 CB2_CA3
|
||||
#define B_4 CB2_CA4
|
||||
#define B_5 CB2_CA5
|
||||
#define B_6 CB2_CA6
|
||||
#define B_7 CB2_CA7
|
||||
#define B_8 CB2_CA8
|
||||
#define B_9 CB2_CA9
|
||||
#define B_10 CB2_CA10
|
||||
#define B_11 CB2_CA11
|
||||
#define B_12 CB2_CA12
|
||||
#define B_13 CB2_CA13
|
||||
#define B_14 CB2_CA14
|
||||
#define B_15 CB2_CA15
|
||||
#define B_16 CB2_CA16
|
||||
|
||||
#define C_1 CB3_CA1
|
||||
#define C_2 CB3_CA2
|
||||
#define C_3 CB3_CA3
|
||||
#define C_4 CB3_CA4
|
||||
#define C_5 CB3_CA5
|
||||
#define C_6 CB3_CA6
|
||||
#define C_7 CB3_CA7
|
||||
#define C_8 CB3_CA8
|
||||
#define C_9 CB3_CA9
|
||||
#define C_10 CB3_CA10
|
||||
#define C_11 CB3_CA11
|
||||
#define C_12 CB3_CA12
|
||||
#define C_13 CB3_CA13
|
||||
#define C_14 CB3_CA14
|
||||
#define C_15 CB3_CA15
|
||||
#define C_16 CB3_CA16
|
||||
|
||||
#define D_1 CB4_CA1
|
||||
#define D_2 CB4_CA2
|
||||
#define D_3 CB4_CA3
|
||||
#define D_4 CB4_CA4
|
||||
#define D_5 CB4_CA5
|
||||
#define D_6 CB4_CA6
|
||||
#define D_7 CB4_CA7
|
||||
#define D_8 CB4_CA8
|
||||
#define D_9 CB4_CA9
|
||||
#define D_10 CB4_CA10
|
||||
#define D_11 CB4_CA11
|
||||
#define D_12 CB4_CA12
|
||||
#define D_13 CB4_CA13
|
||||
#define D_14 CB4_CA14
|
||||
#define D_15 CB4_CA15
|
||||
#define D_16 CB4_CA16
|
||||
|
||||
#define E_1 CB5_CA1
|
||||
#define E_2 CB5_CA2
|
||||
#define E_3 CB5_CA3
|
||||
#define E_4 CB5_CA4
|
||||
#define E_5 CB5_CA5
|
||||
#define E_6 CB5_CA6
|
||||
#define E_7 CB5_CA7
|
||||
#define E_8 CB5_CA8
|
||||
#define E_9 CB5_CA9
|
||||
#define E_10 CB5_CA10
|
||||
#define E_11 CB5_CA11
|
||||
#define E_12 CB5_CA12
|
||||
#define E_13 CB5_CA13
|
||||
#define E_14 CB5_CA14
|
||||
#define E_15 CB5_CA15
|
||||
#define E_16 CB5_CA16
|
||||
|
||||
#define F_1 CB6_CA1
|
||||
#define F_2 CB6_CA2
|
||||
#define F_3 CB6_CA3
|
||||
#define F_4 CB6_CA4
|
||||
#define F_5 CB6_CA5
|
||||
#define F_6 CB6_CA6
|
||||
#define F_7 CB6_CA7
|
||||
#define F_8 CB6_CA8
|
||||
#define F_9 CB6_CA9
|
||||
#define F_10 CB6_CA10
|
||||
#define F_11 CB6_CA11
|
||||
#define F_12 CB6_CA12
|
||||
#define F_13 CB6_CA13
|
||||
#define F_14 CB6_CA14
|
||||
#define F_15 CB6_CA15
|
||||
#define F_16 CB6_CA16
|
||||
|
||||
#define G_1 CB7_CA1
|
||||
#define G_2 CB7_CA2
|
||||
#define G_3 CB7_CA3
|
||||
#define G_4 CB7_CA4
|
||||
#define G_5 CB7_CA5
|
||||
#define G_6 CB7_CA6
|
||||
#define G_7 CB7_CA7
|
||||
#define G_8 CB7_CA8
|
||||
#define G_9 CB7_CA9
|
||||
#define G_10 CB7_CA10
|
||||
#define G_11 CB7_CA11
|
||||
#define G_12 CB7_CA12
|
||||
#define G_13 CB7_CA13
|
||||
#define G_14 CB7_CA14
|
||||
#define G_15 CB7_CA15
|
||||
#define G_16 CB7_CA16
|
||||
|
||||
#define H_1 CB8_CA1
|
||||
#define H_2 CB8_CA2
|
||||
#define H_3 CB8_CA3
|
||||
#define H_4 CB8_CA4
|
||||
#define H_5 CB8_CA5
|
||||
#define H_6 CB8_CA6
|
||||
#define H_7 CB8_CA7
|
||||
#define H_8 CB8_CA8
|
||||
#define H_9 CB8_CA9
|
||||
#define H_10 CB8_CA10
|
||||
#define H_11 CB8_CA11
|
||||
#define H_12 CB8_CA12
|
||||
#define H_13 CB8_CA13
|
||||
#define H_14 CB8_CA14
|
||||
#define H_15 CB8_CA15
|
||||
#define H_16 CB8_CA16
|
||||
|
||||
#define I_1 CB9_CA1
|
||||
#define I_2 CB9_CA2
|
||||
#define I_3 CB9_CA3
|
||||
#define I_4 CB9_CA4
|
||||
#define I_5 CB9_CA5
|
||||
#define I_6 CB9_CA6
|
||||
#define I_7 CB9_CA7
|
||||
#define I_8 CB9_CA8
|
||||
#define I_9 CB9_CA9
|
||||
#define I_10 CB9_CA10
|
||||
#define I_11 CB9_CA11
|
||||
#define I_12 CB9_CA12
|
||||
#define I_13 CB9_CA13
|
||||
#define I_14 CB9_CA14
|
||||
#define I_15 CB9_CA15
|
||||
#define I_16 CB9_CA16
|
||||
|
||||
#define J_1 CB10_CA1
|
||||
#define J_2 CB10_CA2
|
||||
#define J_3 CB10_CA3
|
||||
#define J_4 CB10_CA4
|
||||
#define J_5 CB10_CA5
|
||||
#define J_6 CB10_CA6
|
||||
#define J_7 CB10_CA7
|
||||
#define J_8 CB10_CA8
|
||||
#define J_9 CB10_CA9
|
||||
#define J_10 CB10_CA10
|
||||
#define J_11 CB10_CA11
|
||||
#define J_12 CB10_CA12
|
||||
#define J_13 CB10_CA13
|
||||
#define J_14 CB10_CA14
|
||||
#define J_15 CB10_CA15
|
||||
#define J_16 CB10_CA16
|
||||
|
||||
#define K_1 CB11_CA1
|
||||
#define K_2 CB11_CA2
|
||||
#define K_3 CB11_CA3
|
||||
#define K_4 CB11_CA4
|
||||
#define K_5 CB11_CA5
|
||||
#define K_6 CB11_CA6
|
||||
#define K_7 CB11_CA7
|
||||
#define K_8 CB11_CA8
|
||||
#define K_9 CB11_CA9
|
||||
#define K_10 CB11_CA10
|
||||
#define K_11 CB11_CA11
|
||||
#define K_12 CB11_CA12
|
||||
#define K_13 CB11_CA13
|
||||
#define K_14 CB11_CA14
|
||||
#define K_15 CB11_CA15
|
||||
#define K_16 CB11_CA16
|
||||
|
||||
#define L_1 CB12_CA1
|
||||
#define L_2 CB12_CA2
|
||||
#define L_3 CB12_CA3
|
||||
#define L_4 CB12_CA4
|
||||
#define L_5 CB12_CA5
|
||||
#define L_6 CB12_CA6
|
||||
#define L_7 CB12_CA7
|
||||
#define L_8 CB12_CA8
|
||||
#define L_9 CB12_CA9
|
||||
#define L_10 CB12_CA10
|
||||
#define L_11 CB12_CA11
|
||||
#define L_12 CB12_CA12
|
||||
#define L_13 CB12_CA13
|
||||
#define L_14 CB12_CA14
|
||||
#define L_15 CB12_CA15
|
||||
#define L_16 CB12_CA16
|
||||
|
218
drivers/painter/sh1107/qp_sh1107.c
Normal file
218
drivers/painter/sh1107/qp_sh1107.c
Normal file
@ -0,0 +1,218 @@
|
||||
#include "qp_internal.h"
|
||||
#include "qp_comms.h"
|
||||
#include "qp_surface_internal.h"
|
||||
#include "qp_oled_panel.h"
|
||||
#include "qp_sh1107.h"
|
||||
#include "qp_sh1107_opcodes.h"
|
||||
#include "qp_surface.h"
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Driver storage
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
typedef struct sh1107_device_t {
|
||||
oled_panel_painter_device_t oled;
|
||||
|
||||
uint8_t framebuffer[SURFACE_REQUIRED_BUFFER_BYTE_SIZE(128, 128, 1)];
|
||||
} sh1107_device_t;
|
||||
|
||||
static sh1107_device_t sh1107_drivers[SH1107_NUM_DEVICES] = {0};
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Quantum Painter API implementations
|
||||
|
||||
// Initialisation
|
||||
__attribute__((weak)) bool qp_sh1107_init(painter_device_t device, painter_rotation_t rotation) {
|
||||
sh1107_device_t *driver = (sh1107_device_t *)device;
|
||||
|
||||
// Change the surface geometry based on the panel rotation
|
||||
if (rotation == QP_ROTATION_90 || rotation == QP_ROTATION_270) {
|
||||
driver->oled.surface.base.panel_width = driver->oled.base.panel_height;
|
||||
driver->oled.surface.base.panel_height = driver->oled.base.panel_width;
|
||||
} else {
|
||||
driver->oled.surface.base.panel_width = driver->oled.base.panel_width;
|
||||
driver->oled.surface.base.panel_height = driver->oled.base.panel_height;
|
||||
}
|
||||
|
||||
// Init the internal surface
|
||||
if (!qp_init(&driver->oled.surface.base, QP_ROTATION_0)) {
|
||||
qp_dprintf("Failed to init internal surface in qp_sh1107_init\n");
|
||||
return false;
|
||||
}
|
||||
|
||||
// clang-format off
|
||||
uint8_t sh1107_init_sequence[] = {
|
||||
// Command, Delay, N, Data[N]
|
||||
SH1107_SET_MUX_RATIO, 0, 1, 0x7F, // 1/128 duty
|
||||
SH1107_DISPLAY_OFFSET, 0, 1, 0x00,
|
||||
SH1107_SET_START_LINE, 0, 1, 0x00, // Different from SH1106
|
||||
SH1107_SET_SEGMENT_REMAP_INV, 0, 0,
|
||||
SH1107_COM_SCAN_DIR_DEC, 0, 0,
|
||||
SH1107_COM_PADS_HW_CFG, 0, 1, 0x12,
|
||||
SH1107_SET_CONTRAST, 0, 1, 0x7F,
|
||||
SH1107_ALL_ON_RESUME, 0, 0,
|
||||
SH1107_NON_INVERTING_DISPLAY, 0, 0,
|
||||
SH1107_SET_OSC_DIVFREQ, 0, 1, 0x80,
|
||||
SH1107_SET_CHARGE_PUMP, 0, 1, 0x14,
|
||||
SH1107_DISPLAY_ON, 0, 0,
|
||||
};
|
||||
// clang-format on
|
||||
|
||||
// If the display width is anything other than the default 128 pixels, change SH1107_SET_MUX_RATIO data byte to the correct value.
|
||||
if (driver->oled.base.panel_width != 128) {
|
||||
sh1107_init_sequence[3] = driver->oled.base.panel_width - 1;
|
||||
}
|
||||
|
||||
// If the display width is less than the default 128 pixels, change SH1107_DISPLAY_OFFSET to use the center columns.
|
||||
if (driver->oled.base.panel_width < 128) {
|
||||
sh1107_init_sequence[7] = (128U - driver->oled.base.panel_width) / 2;
|
||||
}
|
||||
|
||||
// For smaller displays, change SH1107_COM_PADS_HW_CFG data byte from alternative (0x12) to sequential (0x02) configuration
|
||||
if (driver->oled.base.panel_height <= 64) {
|
||||
sh1107_init_sequence[20] = 0x02;
|
||||
}
|
||||
|
||||
qp_comms_bulk_command_sequence(device, sh1107_init_sequence, sizeof(sh1107_init_sequence));
|
||||
return true;
|
||||
}
|
||||
|
||||
// Screen flush
|
||||
bool qp_sh1107_flush(painter_device_t device) {
|
||||
sh1107_device_t *driver = (sh1107_device_t *)device;
|
||||
|
||||
if (!driver->oled.surface.dirty.is_dirty) {
|
||||
return true;
|
||||
}
|
||||
|
||||
switch (driver->oled.base.rotation) {
|
||||
default:
|
||||
case QP_ROTATION_0:
|
||||
qp_oled_panel_page_column_flush_rot0(device, &driver->oled.surface.dirty, driver->framebuffer);
|
||||
break;
|
||||
case QP_ROTATION_90:
|
||||
qp_oled_panel_page_column_flush_rot90(device, &driver->oled.surface.dirty, driver->framebuffer);
|
||||
break;
|
||||
case QP_ROTATION_180:
|
||||
qp_oled_panel_page_column_flush_rot180(device, &driver->oled.surface.dirty, driver->framebuffer);
|
||||
break;
|
||||
case QP_ROTATION_270:
|
||||
qp_oled_panel_page_column_flush_rot270(device, &driver->oled.surface.dirty, driver->framebuffer);
|
||||
break;
|
||||
}
|
||||
|
||||
// Clear the dirty area
|
||||
qp_flush(&driver->oled.surface);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Driver vtable
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
const oled_panel_painter_driver_vtable_t sh1107_driver_vtable = {
|
||||
.base =
|
||||
{
|
||||
.init = qp_sh1107_init,
|
||||
.power = qp_oled_panel_power,
|
||||
.clear = qp_oled_panel_clear,
|
||||
.flush = qp_sh1107_flush,
|
||||
.pixdata = qp_oled_panel_passthru_pixdata,
|
||||
.viewport = qp_oled_panel_passthru_viewport,
|
||||
.palette_convert = qp_oled_panel_passthru_palette_convert,
|
||||
.append_pixels = qp_oled_panel_passthru_append_pixels,
|
||||
.append_pixdata = qp_oled_panel_passthru_append_pixdata,
|
||||
},
|
||||
.opcodes =
|
||||
{
|
||||
.display_on = SH1107_DISPLAY_ON,
|
||||
.display_off = SH1107_DISPLAY_OFF,
|
||||
.set_page = SH1107_PAGE_ADDR,
|
||||
.set_column_lsb = SH1107_SETCOLUMN_LSB,
|
||||
.set_column_msb = SH1107_SETCOLUMN_MSB,
|
||||
},
|
||||
};
|
||||
|
||||
#ifdef QUANTUM_PAINTER_SH1107_SPI_ENABLE
|
||||
// Factory function for creating a handle to the SH1107 device
|
||||
painter_device_t qp_sh1107_make_spi_device(uint16_t panel_width, uint16_t panel_height, pin_t chip_select_pin, pin_t dc_pin, pin_t reset_pin, uint16_t spi_divisor, int spi_mode) {
|
||||
for (uint32_t i = 0; i < SH1107_NUM_DEVICES; ++i) {
|
||||
sh1107_device_t *driver = &sh1107_drivers[i];
|
||||
if (!driver->oled.base.driver_vtable) {
|
||||
painter_device_t surface = qp_make_mono1bpp_surface_advanced(&driver->oled.surface, 1, panel_width, panel_height, driver->framebuffer);
|
||||
if (!surface) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
// Setup the OLED device
|
||||
driver->oled.base.driver_vtable = (const painter_driver_vtable_t *)&sh1107_driver_vtable;
|
||||
driver->oled.base.comms_vtable = (const painter_comms_vtable_t *)&spi_comms_with_dc_vtable;
|
||||
driver->oled.base.native_bits_per_pixel = 1; // 1bpp mono
|
||||
driver->oled.base.panel_width = panel_width;
|
||||
driver->oled.base.panel_height = panel_height;
|
||||
driver->oled.base.rotation = QP_ROTATION_0;
|
||||
driver->oled.base.offset_x = 0;
|
||||
driver->oled.base.offset_y = 0;
|
||||
|
||||
// SPI and other pin configuration
|
||||
driver->oled.base.comms_config = &driver->oled.spi_dc_reset_config;
|
||||
driver->oled.spi_dc_reset_config.spi_config.chip_select_pin = chip_select_pin;
|
||||
driver->oled.spi_dc_reset_config.spi_config.divisor = spi_divisor;
|
||||
driver->oled.spi_dc_reset_config.spi_config.lsb_first = false;
|
||||
driver->oled.spi_dc_reset_config.spi_config.mode = spi_mode;
|
||||
driver->oled.spi_dc_reset_config.dc_pin = dc_pin;
|
||||
driver->oled.spi_dc_reset_config.reset_pin = reset_pin;
|
||||
driver->oled.spi_dc_reset_config.command_params_uses_command_pin = true;
|
||||
|
||||
if (!qp_internal_register_device((painter_device_t)driver)) {
|
||||
memset(driver, 0, sizeof(sh1107_device_t));
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return (painter_device_t)driver;
|
||||
}
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
#endif // QUANTUM_PAINTER_SH1107_SPI_ENABLE
|
||||
|
||||
#ifdef QUANTUM_PAINTER_SH1107_I2C_ENABLE
|
||||
// Factory function for creating a handle to the SH1107 device
|
||||
painter_device_t qp_sh1107_make_i2c_device(uint16_t panel_width, uint16_t panel_height, uint8_t i2c_address) {
|
||||
for (uint32_t i = 0; i < SH1107_NUM_DEVICES; ++i) {
|
||||
sh1107_device_t *driver = &sh1107_drivers[i];
|
||||
if (!driver->oled.base.driver_vtable) {
|
||||
// Instantiate the surface
|
||||
painter_device_t surface = qp_make_mono1bpp_surface_advanced(&driver->oled.surface, 1, panel_width, panel_height, driver->framebuffer);
|
||||
if (!surface) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
// Setup the OLED device
|
||||
driver->oled.base.driver_vtable = (const painter_driver_vtable_t *)&sh1107_driver_vtable;
|
||||
driver->oled.base.comms_vtable = (const painter_comms_vtable_t *)&i2c_comms_cmddata_vtable;
|
||||
driver->oled.base.native_bits_per_pixel = 1; // 1bpp mono
|
||||
driver->oled.base.panel_width = panel_width;
|
||||
driver->oled.base.panel_height = panel_height;
|
||||
driver->oled.base.rotation = QP_ROTATION_0;
|
||||
driver->oled.base.offset_x = 0;
|
||||
driver->oled.base.offset_y = 0;
|
||||
|
||||
// I2C configuration
|
||||
driver->oled.base.comms_config = &driver->oled.i2c_config;
|
||||
driver->oled.i2c_config.chip_address = i2c_address;
|
||||
|
||||
if (!qp_internal_register_device((painter_device_t)driver)) {
|
||||
memset(driver, 0, sizeof(sh1107_device_t));
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return (painter_device_t)driver;
|
||||
}
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
#endif // QUANTUM_PAINTER_SH1107_I2C_ENABLE
|
64
drivers/painter/sh1107/qp_sh1107.h
Normal file
64
drivers/painter/sh1107/qp_sh1107.h
Normal file
@ -0,0 +1,64 @@
|
||||
#pragma once
|
||||
|
||||
#include "gpio.h"
|
||||
#include "qp_internal.h"
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Quantum Painter SH1107 configurables (add to your keyboard's config.h)
|
||||
|
||||
#if defined(QUANTUM_PAINTER_SH1107_SPI_ENABLE) && !defined(SH1107_NUM_SPI_DEVICES)
|
||||
/**
|
||||
* @def This controls the maximum number of SPI SH1107 devices that Quantum Painter can communicate with at any one time.
|
||||
* Increasing this number allows for multiple displays to be used.
|
||||
*/
|
||||
# define SH1107_NUM_SPI_DEVICES 1
|
||||
#else
|
||||
# define SH1107_NUM_SPI_DEVICES 0
|
||||
#endif
|
||||
|
||||
#if defined(QUANTUM_PAINTER_SH1107_I2C_ENABLE) && !defined(SH1107_NUM_I2C_DEVICES)
|
||||
/**
|
||||
* @def This controls the maximum number of I2C SH1107 devices that Quantum Painter can communicate with at any one time.
|
||||
* Increasing this number allows for multiple displays to be used.
|
||||
*/
|
||||
# define SH1107_NUM_I2C_DEVICES 1
|
||||
#else
|
||||
# define SH1107_NUM_I2C_DEVICES 0
|
||||
#endif
|
||||
|
||||
#define SH1107_NUM_DEVICES ((SH1107_NUM_SPI_DEVICES) + (SH1107_NUM_I2C_DEVICES))
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Quantum Painter SH1107 device factories
|
||||
|
||||
#ifdef QUANTUM_PAINTER_SH1107_SPI_ENABLE
|
||||
|
||||
/**
|
||||
* Factory method for an SH1107 SPI LCD device.
|
||||
*
|
||||
* @param panel_width[in] the width of the display in pixels (usually 64)
|
||||
* @param panel_height[in] the height of the display in pixels (usually 128)
|
||||
* @param chip_select_pin[in] the GPIO pin used for SPI chip select
|
||||
* @param dc_pin[in] the GPIO pin used for D/C control
|
||||
* @param reset_pin[in] the GPIO pin used for RST
|
||||
* @param spi_divisor[in] the SPI divisor to use when communicating with the display
|
||||
* @param spi_mode[in] the SPI mode to use when communicating with the display
|
||||
* @return the device handle used with all drawing routines in Quantum Painter
|
||||
*/
|
||||
painter_device_t qp_sh1107_make_spi_device(uint16_t panel_width, uint16_t panel_height, pin_t chip_select_pin, pin_t dc_pin, pin_t reset_pin, uint16_t spi_divisor, int spi_mode);
|
||||
|
||||
#endif // QUANTUM_PAINTER_SH1107_SPI_ENABLE
|
||||
|
||||
#ifdef QUANTUM_PAINTER_SH1107_I2C_ENABLE
|
||||
|
||||
/**
|
||||
* Factory method for an SH1107 I2C LCD device.
|
||||
*
|
||||
* @param panel_width[in] the width of the display in pixels (usually 64)
|
||||
* @param panel_height[in] the height of the display in pixels (usually 128)
|
||||
* @param i2c_address[in] the I2C address to use
|
||||
* @return the device handle used with all drawing routines in Quantum Painter
|
||||
*/
|
||||
painter_device_t qp_sh1107_make_i2c_device(uint16_t panel_width, uint16_t panel_height, uint8_t i2c_address);
|
||||
|
||||
#endif // QUANTUM_PAINTER_SH1107_I2C_ENABLE
|
25
drivers/painter/sh1107/qp_sh1107_opcodes.h
Normal file
25
drivers/painter/sh1107/qp_sh1107_opcodes.h
Normal file
@ -0,0 +1,25 @@
|
||||
// Copyright 2024 Steve Branam (@smbranam)
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
#pragma once
|
||||
|
||||
#define SH1107_DISPLAY_ON 0xAF
|
||||
#define SH1107_DISPLAY_OFF 0xAE
|
||||
#define SH1107_SET_OSC_DIVFREQ 0xD5
|
||||
#define SH1107_SET_MUX_RATIO 0xA8
|
||||
#define SH1107_DISPLAY_OFFSET 0xD3
|
||||
#define SH1107_SET_START_LINE 0xDC // Key/sole difference from SH1106 (which uses 0x40)
|
||||
#define SH1107_SET_CHARGE_PUMP 0x8D
|
||||
#define SH1107_SET_SEGMENT_REMAP_NORMAL 0xA0
|
||||
#define SH1107_SET_SEGMENT_REMAP_INV 0xA1
|
||||
#define SH1107_COM_SCAN_DIR_INC 0xC0
|
||||
#define SH1107_COM_SCAN_DIR_DEC 0xC8
|
||||
#define SH1107_COM_PADS_HW_CFG 0xDA
|
||||
#define SH1107_SET_CONTRAST 0x81
|
||||
#define SH1107_SET_PRECHARGE_PERIOD 0xD9
|
||||
#define SH1107_VCOM_DESELECT_LEVEL 0xDB
|
||||
#define SH1107_ALL_ON_RESUME 0xA4
|
||||
#define SH1107_NON_INVERTING_DISPLAY 0xA6
|
||||
#define SH1107_DEACTIVATE_SCROLL 0x2E
|
||||
#define SH1107_SETCOLUMN_LSB 0x00
|
||||
#define SH1107_SETCOLUMN_MSB 0x10
|
||||
#define SH1107_PAGE_ADDR 0xB0
|
@ -17,6 +17,7 @@
|
||||
#define AZOTEQ_IQS5XX_REG_PREVIOUS_CYCLE_TIME 0x000C
|
||||
#define AZOTEQ_IQS5XX_REG_SYSTEM_CONTROL_1 0x0432
|
||||
#define AZOTEQ_IQS5XX_REG_REPORT_RATE_ACTIVE 0x057A
|
||||
#define AZOTEQ_IQS5XX_REG_IDLE_MODE_TIMEOUT 0x0586
|
||||
#define AZOTEQ_IQS5XX_REG_SYSTEM_CONFIG_0 0x058E
|
||||
#define AZOTEQ_IQS5XX_REG_SYSTEM_CONFIG_1 0x058F
|
||||
#define AZOTEQ_IQS5XX_REG_X_RESOLUTION 0x066E
|
||||
@ -77,6 +78,10 @@
|
||||
#ifndef AZOTEQ_IQS5XX_ZOOM_CONSECUTIVE_DISTANCE
|
||||
# define AZOTEQ_IQS5XX_ZOOM_CONSECUTIVE_DISTANCE 0x19
|
||||
#endif
|
||||
#ifndef AZOTEQ_IQS5XX_EVENT_MODE
|
||||
// Event mode can't be used until the pointing code has changed (stuck buttons)
|
||||
# define AZOTEQ_IQS5XX_EVENT_MODE false
|
||||
#endif
|
||||
|
||||
#if defined(AZOTEQ_IQS5XX_TPS43)
|
||||
# define AZOTEQ_IQS5XX_WIDTH_MM 43
|
||||
@ -112,12 +117,6 @@ static struct {
|
||||
uint16_t resolution_y;
|
||||
} azoteq_iqs5xx_device_resolution_t;
|
||||
|
||||
i2c_status_t azoteq_iqs5xx_wake(void) {
|
||||
uint8_t data = 0;
|
||||
i2c_status_t status = i2c_read_register16(AZOTEQ_IQS5XX_ADDRESS, AZOTEQ_IQS5XX_REG_PREVIOUS_CYCLE_TIME, (uint8_t *)&data, sizeof(data), 1);
|
||||
wait_us(150);
|
||||
return status;
|
||||
}
|
||||
i2c_status_t azoteq_iqs5xx_end_session(void) {
|
||||
const uint8_t END_BYTE = 1; // any data
|
||||
return i2c_write_register16(AZOTEQ_IQS5XX_ADDRESS, AZOTEQ_IQS5XX_REG_END_COMMS, &END_BYTE, 1, AZOTEQ_IQS5XX_TIMEOUT_MS);
|
||||
@ -324,14 +323,19 @@ static i2c_status_t azoteq_iqs5xx_init_status = 1;
|
||||
|
||||
void azoteq_iqs5xx_init(void) {
|
||||
i2c_init();
|
||||
azoteq_iqs5xx_wake();
|
||||
i2c_ping_address(AZOTEQ_IQS5XX_ADDRESS, 1); // wake
|
||||
azoteq_iqs5xx_reset_suspend(true, false, true);
|
||||
wait_ms(100);
|
||||
azoteq_iqs5xx_wake();
|
||||
i2c_ping_address(AZOTEQ_IQS5XX_ADDRESS, 1); // wake
|
||||
if (azoteq_iqs5xx_get_product() != AZOTEQ_IQS5XX_UNKNOWN) {
|
||||
azoteq_iqs5xx_setup_resolution();
|
||||
azoteq_iqs5xx_init_status = azoteq_iqs5xx_set_report_rate(AZOTEQ_IQS5XX_REPORT_RATE, AZOTEQ_IQS5XX_ACTIVE, false);
|
||||
azoteq_iqs5xx_init_status |= azoteq_iqs5xx_set_event_mode(false, false);
|
||||
azoteq_iqs5xx_init_status |= azoteq_iqs5xx_set_report_rate(AZOTEQ_IQS5XX_REPORT_RATE, AZOTEQ_IQS5XX_IDLE, false);
|
||||
azoteq_iqs5xx_init_status |= azoteq_iqs5xx_set_report_rate(AZOTEQ_IQS5XX_REPORT_RATE, AZOTEQ_IQS5XX_IDLE_TOUCH, false);
|
||||
|
||||
uint8_t no_timeout = 255;
|
||||
azoteq_iqs5xx_init_status |= i2c_write_register16(AZOTEQ_IQS5XX_ADDRESS, AZOTEQ_IQS5XX_REG_IDLE_MODE_TIMEOUT, &no_timeout, 1, AZOTEQ_IQS5XX_TIMEOUT_MS); // Don't enter LP1, LP2 states
|
||||
azoteq_iqs5xx_init_status |= azoteq_iqs5xx_set_event_mode(AZOTEQ_IQS5XX_EVENT_MODE, false);
|
||||
azoteq_iqs5xx_init_status |= azoteq_iqs5xx_set_reati(true, false);
|
||||
#if defined(AZOTEQ_IQS5XX_ROTATION_90)
|
||||
azoteq_iqs5xx_init_status |= azoteq_iqs5xx_set_xy_config(false, true, true, true, false);
|
||||
@ -348,21 +352,19 @@ void azoteq_iqs5xx_init(void) {
|
||||
};
|
||||
|
||||
report_mouse_t azoteq_iqs5xx_get_report(report_mouse_t mouse_report) {
|
||||
report_mouse_t temp_report = {0};
|
||||
static uint8_t previous_button_state = 0;
|
||||
static uint8_t read_error_count = 0;
|
||||
report_mouse_t temp_report = {0};
|
||||
|
||||
if (azoteq_iqs5xx_init_status == I2C_STATUS_SUCCESS) {
|
||||
azoteq_iqs5xx_base_data_t base_data = {0};
|
||||
#if !defined(POINTING_DEVICE_MOTION_PIN)
|
||||
azoteq_iqs5xx_wake();
|
||||
#endif
|
||||
i2c_status_t status = azoteq_iqs5xx_get_base_data(&base_data);
|
||||
bool ignore_movement = false;
|
||||
azoteq_iqs5xx_base_data_t base_data = {0};
|
||||
i2c_status_t status = azoteq_iqs5xx_get_base_data(&base_data);
|
||||
bool ignore_movement = false;
|
||||
|
||||
if (status == I2C_STATUS_SUCCESS) {
|
||||
// pd_dprintf("IQS5XX - previous cycle time: %d \n", base_data.previous_cycle_time);
|
||||
read_error_count = 0;
|
||||
#ifdef POINTING_DEVICE_DEBUG
|
||||
if (base_data.previous_cycle_time > AZOTEQ_IQS5XX_REPORT_RATE) {
|
||||
pd_dprintf("IQS5XX - previous cycle time missed, took: %dms\n", base_data.previous_cycle_time);
|
||||
}
|
||||
#endif
|
||||
if (base_data.gesture_events_0.single_tap || base_data.gesture_events_0.press_and_hold) {
|
||||
pd_dprintf("IQS5XX - Single tap/hold.\n");
|
||||
temp_report.buttons = pointing_device_handle_buttons(temp_report.buttons, true, POINTING_DEVICE_BUTTON1);
|
||||
@ -403,20 +405,11 @@ report_mouse_t azoteq_iqs5xx_get_report(report_mouse_t mouse_report) {
|
||||
temp_report.y = CONSTRAIN_HID_XY(AZOTEQ_IQS5XX_COMBINE_H_L_BYTES(base_data.y.h, base_data.y.l));
|
||||
}
|
||||
|
||||
previous_button_state = temp_report.buttons;
|
||||
|
||||
} else {
|
||||
if (read_error_count > 10) {
|
||||
read_error_count = 0;
|
||||
previous_button_state = 0;
|
||||
} else {
|
||||
read_error_count++;
|
||||
}
|
||||
temp_report.buttons = previous_button_state;
|
||||
pd_dprintf("IQS5XX - get report failed: %d \n", status);
|
||||
pd_dprintf("IQS5XX - get report failed, i2c status: %d \n", status);
|
||||
}
|
||||
} else {
|
||||
pd_dprintf("IQS5XX - Init failed: %d \n", azoteq_iqs5xx_init_status);
|
||||
pd_dprintf("IQS5XX - Init failed, i2c status: %d \n", azoteq_iqs5xx_init_status);
|
||||
}
|
||||
|
||||
return temp_report;
|
||||
|
@ -173,7 +173,8 @@ typedef struct {
|
||||
# define AZOTEQ_IQS5XX_REPORT_RATE 10
|
||||
#endif
|
||||
#if !defined(POINTING_DEVICE_TASK_THROTTLE_MS) && !defined(POINTING_DEVICE_MOTION_PIN)
|
||||
# define POINTING_DEVICE_TASK_THROTTLE_MS AZOTEQ_IQS5XX_REPORT_RATE
|
||||
// Polling the Azoteq isn't recommended, ensuring we only poll after the report is ready stops any unexpected NACKs
|
||||
# define POINTING_DEVICE_TASK_THROTTLE_MS AZOTEQ_IQS5XX_REPORT_RATE + 1
|
||||
#endif
|
||||
|
||||
const pointing_device_driver_t azoteq_iqs5xx_pointing_device_driver;
|
||||
|
116
drivers/spi_master.h
Normal file
116
drivers/spi_master.h
Normal file
@ -0,0 +1,116 @@
|
||||
// Copyright 2025 QMK
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <stdint.h>
|
||||
#include <stdbool.h>
|
||||
#include "gpio.h"
|
||||
|
||||
/**
|
||||
* \file
|
||||
*
|
||||
* \defgroup spi_master SPI Master API
|
||||
*
|
||||
* \brief API to communicate with SPI devices.
|
||||
* \{
|
||||
*/
|
||||
|
||||
// Hardware SS pin is defined in the header so that user code can refer to it
|
||||
#ifdef __AVR__
|
||||
# if defined(__AVR_AT90USB162__) || defined(__AVR_ATmega16U2__) || defined(__AVR_ATmega32U2__) || defined(__AVR_ATmega16U4__) || defined(__AVR_ATmega32U4__) || defined(__AVR_AT90USB646__) || defined(__AVR_AT90USB647__) || defined(__AVR_AT90USB1286__) || defined(__AVR_AT90USB1287__)
|
||||
# define SPI_SS_PIN B0
|
||||
# elif defined(__AVR_ATmega32A__)
|
||||
# define SPI_SS_PIN B4
|
||||
# elif defined(__AVR_ATmega328P__) || defined(__AVR_ATmega328__)
|
||||
# define SPI_SS_PIN B2
|
||||
# endif
|
||||
#endif
|
||||
|
||||
typedef int16_t spi_status_t;
|
||||
|
||||
#define SPI_STATUS_SUCCESS (0)
|
||||
#define SPI_STATUS_ERROR (-1)
|
||||
#define SPI_STATUS_TIMEOUT (-2)
|
||||
|
||||
#define SPI_TIMEOUT_IMMEDIATE (0)
|
||||
#define SPI_TIMEOUT_INFINITE (0xFFFF)
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
typedef struct spi_start_config_t {
|
||||
pin_t slave_pin;
|
||||
bool lsb_first;
|
||||
uint8_t mode;
|
||||
uint16_t divisor;
|
||||
bool cs_active_low;
|
||||
} spi_start_config_t;
|
||||
|
||||
/**
|
||||
* \brief Initialize the SPI driver. This function must be called only once, before any of the below functions can be called.
|
||||
*/
|
||||
void spi_init(void);
|
||||
|
||||
/**
|
||||
* \brief Start an SPI transaction.
|
||||
*
|
||||
* \param slavePin The GPIO pin connected to the desired device's `SS` line.
|
||||
* \param lsbFirst Determines the endianness of the transmission. If `true`, the least significant bit of each byte is sent first.
|
||||
* \param mode The SPI mode to use.
|
||||
* \param divisor The SPI clock divisor.
|
||||
*
|
||||
* \return `true` if the operation was successful, otherwise `false` if the supplied parameters are invalid or the SPI peripheral is already in use.
|
||||
*/
|
||||
bool spi_start(pin_t slavePin, bool lsbFirst, uint8_t mode, uint16_t divisor);
|
||||
|
||||
bool spi_start_extended(spi_start_config_t *start_config);
|
||||
|
||||
/**
|
||||
* \brief Write a byte to the selected SPI device.
|
||||
*
|
||||
* \param data The byte to write.
|
||||
*
|
||||
* \return `SPI_STATUS_TIMEOUT` if the timeout period elapses, or `SPI_STATUS_SUCCESS`.
|
||||
*/
|
||||
spi_status_t spi_write(uint8_t data);
|
||||
|
||||
/**
|
||||
* \brief Read a byte from the selected SPI device.
|
||||
*
|
||||
* \return `SPI_STATUS_TIMEOUT` if the timeout period elapses, otherwise the byte read from the device.
|
||||
*/
|
||||
spi_status_t spi_read(void);
|
||||
|
||||
/**
|
||||
* \brief Send multiple bytes to the selected SPI device.
|
||||
*
|
||||
* \param data A pointer to the data to write from.
|
||||
* \param length The number of bytes to write. Take care not to overrun the length of `data`.
|
||||
*
|
||||
* \return `SPI_STATUS_TIMEOUT` if the timeout period elapses, `SPI_STATUS_ERROR` if some other error occurs, otherwise `SPI_STATUS_SUCCESS`.
|
||||
*/
|
||||
spi_status_t spi_transmit(const uint8_t *data, uint16_t length);
|
||||
|
||||
/**
|
||||
* \brief Receive multiple bytes from the selected SPI device.
|
||||
*
|
||||
* \param data A pointer to a buffer to read into.
|
||||
* \param length The number of bytes to read. Take care not to overrun the length of `data`.
|
||||
*
|
||||
* \return `SPI_STATUS_TIMEOUT` if the timeout period elapses, `SPI_STATUS_ERROR` if some other error occurs, otherwise `SPI_STATUS_SUCCESS`.
|
||||
*/
|
||||
spi_status_t spi_receive(uint8_t *data, uint16_t length);
|
||||
|
||||
/**
|
||||
* \brief End the current SPI transaction. This will deassert the slave select pin and reset the endianness, mode and divisor configured by `spi_start()`.
|
||||
*
|
||||
*/
|
||||
void spi_stop(void);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
/** \} */
|
62
drivers/uart.h
Normal file
62
drivers/uart.h
Normal file
@ -0,0 +1,62 @@
|
||||
// Copyright 2025 QMK
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <stdint.h>
|
||||
#include <stdbool.h>
|
||||
|
||||
/**
|
||||
* \file
|
||||
*
|
||||
* \defgroup uart UART API
|
||||
*
|
||||
* \brief API to communicate with UART devices.
|
||||
* \{
|
||||
*/
|
||||
|
||||
/**
|
||||
* \brief Initialize the UART driver. This function must be called only once, before any of the below functions can be called.
|
||||
*
|
||||
* \param baud The baud rate to transmit and receive at. This may depend on the device you are communicating with. Common values are 1200, 2400, 4800, 9600, 19200, 38400, 57600, and 115200.
|
||||
*/
|
||||
void uart_init(uint32_t baud);
|
||||
|
||||
/**
|
||||
* \brief Transmit a single byte.
|
||||
*
|
||||
* \param data The byte to write.
|
||||
*/
|
||||
void uart_write(uint8_t data);
|
||||
|
||||
/**
|
||||
* \brief Receive a single byte.
|
||||
*
|
||||
* \return The byte read from the receive buffer. This function will block if the buffer is empty (ie. no data to read).
|
||||
*/
|
||||
uint8_t uart_read(void);
|
||||
|
||||
/**
|
||||
* \brief Transmit multiple bytes.
|
||||
*
|
||||
* \param data A pointer to the data to write from.
|
||||
* \param length The number of bytes to write. Take care not to overrun the length of `data`.
|
||||
*/
|
||||
void uart_transmit(const uint8_t *data, uint16_t length);
|
||||
|
||||
/**
|
||||
* \brief Receive multiple bytes.
|
||||
*
|
||||
* \param data A pointer to a buffer to read into.
|
||||
* \param length The number of bytes to read. Take care not to overrun the length of `data`.
|
||||
*/
|
||||
void uart_receive(uint8_t *data, uint16_t length);
|
||||
|
||||
/**
|
||||
* \brief Return whether the receive buffer contains data. Call this function to determine if `uart_read()` will return data immediately.
|
||||
*
|
||||
* \return true if there is data available to read.
|
||||
*/
|
||||
bool uart_available(void);
|
||||
|
||||
/** \} */
|
@ -1 +0,0 @@
|
||||
DEFAULT_FOLDER = 0_sixty/base
|
@ -1 +0,0 @@
|
||||
DEFAULT_FOLDER = 0xcb/splaytoraid/rp2040_ce
|
@ -1 +0,0 @@
|
||||
DEFAULT_FOLDER = 1upkeyboards/pi40/mit_v1_0
|
@ -1 +0,0 @@
|
||||
DEFAULT_FOLDER = 1upkeyboards/pi50/grid
|
@ -1 +0,0 @@
|
||||
DEFAULT_FOLDER = 1upkeyboards/sweet16/v1
|
@ -1 +0,0 @@
|
||||
DEFAULT_FOLDER = 25keys/aleth42/rev1
|
@ -1 +0,0 @@
|
||||
DEFAULT_FOLDER = 25keys/zinc/rev1
|
@ -1 +0,0 @@
|
||||
DEFAULT_FOLDER = 40percentclub/i75/promicro
|
@ -1 +0,0 @@
|
||||
DEFAULT_FOLDER = 40percentclub/polyandry/promicro
|
@ -1 +0,0 @@
|
||||
DEFAULT_FOLDER = 8pack/rev12
|
@ -20,7 +20,7 @@
|
||||
},
|
||||
"indicators": {
|
||||
"caps_lock": "A9",
|
||||
"num_lock": "A10"
|
||||
"scroll_lock": "A10"
|
||||
},
|
||||
"matrix_pins": {
|
||||
"cols": ["B0", "B1", "B2", "B3", "B4", "B5", "B6", "B7", "B8", "B9", "B10", "B11", "B12", "B13"],
|
||||
|
@ -25,19 +25,19 @@ const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
[0] = LAYOUT(
|
||||
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SCRL, KC_PAUS, KC_MUTE,
|
||||
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_PAUS, KC_DEL, KC_MUTE,
|
||||
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_HOME,
|
||||
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL,
|
||||
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGUP,
|
||||
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_PGDN,
|
||||
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP,
|
||||
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGDN,
|
||||
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END,
|
||||
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RIGHT
|
||||
),
|
||||
[1] = LAYOUT(
|
||||
_______, KC_MSEL, KC_VOLD, KC_VOLU, KC_MUTE, KC_MSTP, KC_MPRV, KC_MPLY, KC_MNXT, KC_MAIL, KC_WHOM, KC_MYCM, KC_CALC, _______, _______, _______, _______,
|
||||
_______, KC_MSEL, KC_VOLD, KC_VOLU, KC_MUTE, KC_MSTP, KC_MPRV, KC_MPLY, KC_MNXT, KC_MAIL, KC_WHOM, KC_MYCM, KC_CALC, _______, _______, KC_SCRL, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_INS,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_END,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PSCR,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_SCRL,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, GU_TOGG, _______, _______, _______, _______, _______, _______, _______, _______
|
||||
)
|
||||
};
|
@ -1,8 +1,8 @@
|
||||
# A-JAZZ AKC084
|
||||
# A-JAZZ AKC084 (AKP846)
|
||||
|
||||
A customizable 84keys keyboard
|
||||
|
||||

|
||||

|
||||
* Keyboard Maintainer: [Feng](https://github.com/fenggx-a-jazz)
|
||||
* Hardware Supported: [a-jazz](https://www.a-jazz.com)
|
||||
* Hardware Availability: [a-jazz](https://ajazzstore.com/collections/all/products/ajazz-akp846)
|
||||
@ -18,6 +18,6 @@ Flashing example for this keyboard:
|
||||
See the build environment setup and the make instructions for more information. Brand new to QMK? Start with our Complete Newbs Guide.
|
||||
|
||||
## Bootloader ESC the bootloader in 3 ways:
|
||||
* **Bootmagic reset: Hold down Enter in the keyboard then replug
|
||||
* **Bootmagic reset: Hold down Esc in the keyboard then replug
|
||||
* **Physical reset button: Briefly press the button on the back of the PCB
|
||||
* **Keycode in layout: Press the key mapped to QK_BOOT
|
||||
|
@ -1 +0,0 @@
|
||||
DEFAULT_FOLDER = adkb96/rev1
|
@ -1 +0,0 @@
|
||||
DEFAULT_FOLDER = adm42/rev4
|
@ -1 +0,0 @@
|
||||
DEFAULT_FOLDER = aeboards/constellation/rev1
|
@ -1 +0,0 @@
|
||||
DEFAULT_FOLDER = aeboards/ext65/rev2
|
@ -1 +0,0 @@
|
||||
DEFAULT_FOLDER = aeboards/satellite/rev1
|
@ -1,7 +1,5 @@
|
||||
# TriangleLabs AL1
|
||||
|
||||

|
||||
|
||||
* Keyboard Maintainer: [MechMerlin](https://github.com/mechmerlin), [Olivia](https://github.com/olivia)
|
||||
* Hardware Supported: AL1 PCB
|
||||
* Hardware Availability: [GroupBuy](https://geekhack.org/index.php?topic=93258.0)
|
||||
|
@ -1,7 +1,5 @@
|
||||
# dc60
|
||||
|
||||

|
||||
|
||||
A 60% PCB sold with the Alf DC60.
|
||||
|
||||
Keyboard Maintainer: [MechMerlin](https://github.com/mechmerlin)
|
||||
|
@ -1 +0,0 @@
|
||||
DEFAULT_FOLDER = atreus/astar
|
@ -1 +0,0 @@
|
||||
DEFAULT_FOLDER = atreyu/rev1
|
@ -1 +0,0 @@
|
||||
DEFAULT_FOLDER = biacco42/ergo42/rev1
|
@ -5,8 +5,7 @@
|
||||
meishi2 - The better micro macro keyboard
|
||||
|
||||
Keyboard Maintainer: [Biacco42](https://github.com/Biacco42)
|
||||
Hardware Supported: The PCBs, controllers supported
|
||||
Hardware Availability: [links to where you can find this hardware](https://github.com/Biacco42/meishi2)
|
||||
Hardware Availability: https://github.com/Biacco42/meishi2
|
||||
|
||||
Make example for this keyboard (after setting up your build environment):
|
||||
|
||||
|
@ -1,3 +0,0 @@
|
||||
# This file is mostly left blank
|
||||
|
||||
DEFAULT_FOLDER = binepad/bn009/r2
|
@ -1 +0,0 @@
|
||||
DEFAULT_FOLDER = binepad/bnr1/v2
|
@ -1 +0,0 @@
|
||||
DEFAULT_FOLDER = boston_meetup/2019
|
@ -1 +0,0 @@
|
||||
DEFAULT_FOLDER=bpiphany/frosty_flake/20140521
|
@ -1 +0,0 @@
|
||||
DEFAULT_FOLDER=bpiphany/pegasushoof/2013
|
@ -1,9 +1,5 @@
|
||||
# unloved_bastard
|
||||
|
||||

|
||||
|
||||
A short description of the keyboard/project
|
||||
|
||||
Keyboard Maintainer: [Alexander Fougner](https://github.com/fougner)
|
||||
Hardware Supported: CoolerMaster Masterkeys S PBT (Not the Pro versions with backlighting etc)
|
||||
Hardware Availability: Pretty much anywhere
|
||||
|
@ -1 +0,0 @@
|
||||
DEFAULT_FOLDER = buzzard/rev1
|
@ -1,4 +1,2 @@
|
||||
# Wildcard to allow APM32 MCU
|
||||
DFU_SUFFIX_ARGS = -v FFFF -p FFFF
|
||||
|
||||
DEFAULT_FOLDER = westm/westm9/rev2
|
@ -1,4 +1,2 @@
|
||||
# Wildcard to allow APM32 MCU
|
||||
DFU_SUFFIX_ARGS = -v FFFF -p FFFF
|
||||
|
||||
DEFAULT_FOLDER = westm/westm68/rev2
|
@ -1,4 +1,2 @@
|
||||
# Wildcard to allow APM32 MCU
|
||||
DFU_SUFFIX_ARGS = -v FFFF -p FFFF
|
||||
|
||||
DEFAULT_FOLDER = cannonkeys/db60/rev2
|
@ -1,2 +0,0 @@
|
||||
# Default Folder
|
||||
DEFAULT_FOLDER = clickety_split/leeloo/rev3
|
@ -1,20 +0,0 @@
|
||||
{
|
||||
"keyboard_name": "Stowaway Converter",
|
||||
"manufacturer": "QMK",
|
||||
"url": "",
|
||||
"maintainer": "qmk",
|
||||
"usb": {
|
||||
"vid": "0xFEED",
|
||||
"pid": "0x0001",
|
||||
"device_version": "1.0.0"
|
||||
},
|
||||
"processor": "atmega32u4",
|
||||
"bootloader": "caterina",
|
||||
"features": {
|
||||
"bootmagic": false,
|
||||
"mousekey": false,
|
||||
"extrakey": false,
|
||||
"console": true,
|
||||
"command": true
|
||||
}
|
||||
}
|
@ -1,4 +1,22 @@
|
||||
{
|
||||
"keyboard_name": "Stowaway Converter",
|
||||
"manufacturer": "QMK",
|
||||
"url": "",
|
||||
"maintainer": "qmk",
|
||||
"usb": {
|
||||
"vid": "0xFEED",
|
||||
"pid": "0x0001",
|
||||
"device_version": "1.0.0"
|
||||
},
|
||||
"processor": "atmega32u4",
|
||||
"bootloader": "caterina",
|
||||
"features": {
|
||||
"bootmagic": false,
|
||||
"mousekey": false,
|
||||
"extrakey": false,
|
||||
"console": true,
|
||||
"command": true
|
||||
},
|
||||
"layouts": {
|
||||
"LAYOUT": {
|
||||
"layout": [
|
||||
|
@ -3,5 +3,3 @@ CUSTOM_MATRIX = yes
|
||||
|
||||
SRC += matrix.c
|
||||
UART_DRIVER_REQUIRED = yes
|
||||
|
||||
DEFAULT_FOLDER = converter/palm_usb/stowaway
|
@ -28,7 +28,7 @@ git clone のあと、
|
||||
|
||||
-----------------
|
||||
## English
|
||||
- [Here](https://github.com/telzo2000/cool836A) are a full description of this project and build guide by the great Designer: [m.ki](imgur.com image replace me!)
|
||||
- [Here](https://github.com/telzo2000/cool836A) are a full description of this project and build guide by the great Designer: m.ki
|
||||
|
||||
- Each virsions(A, B+, C+) of cool836A has the same circuit and that means you can install this firmware on any of them.
|
||||
- However, this repository is currently(Jan 7, 2021) tested on ver.B+ (RED version) only. Feel free to contact [ME](https://github.com/ketcha-k) for any problems.
|
||||
|
@ -1 +0,0 @@
|
||||
DEFAULT_FOLDER = crkbd/rev1
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user