@ -0,0 +1,30 @@ | |||
name: Unit Tests | |||
on: | |||
push: | |||
branches: | |||
- master | |||
- develop | |||
pull_request: | |||
paths: | |||
- 'builddefs/**' | |||
- 'quantum/**' | |||
- 'platforms/**' | |||
- 'tmk_core/**' | |||
- 'tests/**' | |||
- '*.mk' | |||
- 'Makefile' | |||
- '.github/workflows/unit_test.yml' | |||
jobs: | |||
test: | |||
runs-on: ubuntu-latest | |||
container: qmkfm/base_container | |||
steps: | |||
- uses: actions/checkout@v2 | |||
with: | |||
submodules: recursive | |||
- name: Run tests | |||
run: make test:all |
@ -1,58 +0,0 @@ | |||
#!/usr/bin/env python3 | |||
"""CLI wrapper for running QMK commands. | |||
""" | |||
import os | |||
import sys | |||
from pathlib import Path | |||
# Add the QMK python libs to our path | |||
script_dir = Path(os.path.realpath(__file__)).parent | |||
qmk_dir = script_dir.parent | |||
python_lib_dir = Path(qmk_dir / 'lib' / 'python').resolve() | |||
sys.path.append(str(python_lib_dir)) | |||
# Setup the CLI | |||
import milc # noqa | |||
milc.EMOJI_LOGLEVELS['INFO'] = '{fg_blue}Ψ{style_reset_all}' | |||
@milc.cli.entrypoint('QMK Helper Script') | |||
def qmk_main(cli): | |||
"""The function that gets run when no subcommand is provided. | |||
""" | |||
cli.print_help() | |||
def main(): | |||
"""Setup our environment and then call the CLI entrypoint. | |||
""" | |||
# Change to the root of our checkout | |||
os.environ['ORIG_CWD'] = os.getcwd() | |||
os.environ['DEPRECATED_BIN_QMK'] = '1' | |||
os.chdir(qmk_dir) | |||
print('Warning: The bin/qmk script is being deprecated. Please install the QMK CLI: python3 -m pip install qmk', file=sys.stderr) | |||
# Import the subcommands | |||
import milc.subcommand.config # noqa | |||
import qmk.cli # noqa | |||
# Execute | |||
return_code = milc.cli() | |||
if return_code is False: | |||
exit(1) | |||
elif return_code is not True and isinstance(return_code, int): | |||
if return_code < 0 or return_code > 255: | |||
milc.cli.log.error('Invalid return_code: %d', return_code) | |||
exit(255) | |||
exit(return_code) | |||
exit(0) | |||
if __name__ == '__main__': | |||
main() |
@ -1,154 +0,0 @@ | |||
# Copyright 2017 Jack Humbert | |||
# | |||
# This program is free software: you can redistribute it and/or modify | |||
# it under the terms of the GNU General Public License as published by | |||
# the Free Software Foundation, either version 2 of the License, or | |||
# (at your option) any later version. | |||
# | |||
# This program is distributed in the hope that it will be useful, | |||
# but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||
# GNU General Public License for more details. | |||
# | |||
# You should have received a copy of the GNU General Public License | |||
# along with this program. If not, see <http://www.gnu.org/licenses/>. | |||
# If it's possible that multiple bootloaders can be used for one project, | |||
# you can leave this unset, and the correct size will be selected | |||
# automatically. | |||
# | |||
# Sets the bootloader defined in the keyboard's/keymap's rules.mk | |||
# Current options: | |||
# | |||
# AVR: | |||
# halfkay PJRC Teensy | |||
# caterina Pro Micro (Sparkfun/generic) | |||
# atmel-dfu Atmel factory DFU | |||
# lufa-dfu LUFA DFU | |||
# qmk-dfu QMK DFU (LUFA + blinkenlight) | |||
# qmk-hid QMK HID (LUFA + blinkenlight) | |||
# bootloadhid HIDBootFlash compatible (ATmega32A) | |||
# usbasploader USBaspLoader (ATmega328P) | |||
# ARM: | |||
# kiibohd Input:Club Kiibohd bootloader (only used on their boards) | |||
# stm32duino STM32Duino (STM32F103x8) | |||
# stm32-dfu STM32 USB DFU in ROM | |||
# apm32-dfu APM32 USB DFU in ROM | |||
# | |||
# BOOTLOADER_SIZE can still be defined manually, but it's recommended | |||
# you add any possible configuration to this list | |||
ifeq ($(strip $(BOOTLOADER)), atmel-dfu) | |||
OPT_DEFS += -DBOOTLOADER_ATMEL_DFU | |||
OPT_DEFS += -DBOOTLOADER_DFU | |||
ifneq (,$(filter $(MCU), at90usb162 atmega16u2 atmega32u2 atmega16u4 atmega32u4 at90usb646 at90usb647)) | |||
BOOTLOADER_SIZE = 4096 | |||
endif | |||
ifneq (,$(filter $(MCU), at90usb1286 at90usb1287)) | |||
BOOTLOADER_SIZE = 8192 | |||
endif | |||
endif | |||
ifeq ($(strip $(BOOTLOADER)), lufa-dfu) | |||
OPT_DEFS += -DBOOTLOADER_LUFA_DFU | |||
OPT_DEFS += -DBOOTLOADER_DFU | |||
ifneq (,$(filter $(MCU), at90usb162 atmega16u2 atmega32u2 atmega16u4 atmega32u4 at90usb646 at90usb647)) | |||
BOOTLOADER_SIZE ?= 4096 | |||
endif | |||
ifneq (,$(filter $(MCU), at90usb1286 at90usb1287)) | |||
BOOTLOADER_SIZE ?= 8192 | |||
endif | |||
endif | |||
ifeq ($(strip $(BOOTLOADER)), qmk-dfu) | |||
OPT_DEFS += -DBOOTLOADER_QMK_DFU | |||
OPT_DEFS += -DBOOTLOADER_DFU | |||
ifneq (,$(filter $(MCU), at90usb162 atmega16u2 atmega32u2 atmega16u4 atmega32u4 at90usb646 at90usb647)) | |||
BOOTLOADER_SIZE ?= 4096 | |||
endif | |||
ifneq (,$(filter $(MCU), at90usb1286 at90usb1287)) | |||
BOOTLOADER_SIZE ?= 8192 | |||
endif | |||
endif | |||
ifeq ($(strip $(BOOTLOADER)), qmk-hid) | |||
OPT_DEFS += -DBOOTLOADER_QMK_HID | |||
OPT_DEFS += -DBOOTLOADER_HID | |||
BOOTLOADER_SIZE ?= 4096 | |||
endif | |||
ifeq ($(strip $(BOOTLOADER)), halfkay) | |||
OPT_DEFS += -DBOOTLOADER_HALFKAY | |||
ifeq ($(strip $(MCU)), atmega32u4) | |||
BOOTLOADER_SIZE = 512 | |||
endif | |||
ifeq ($(strip $(MCU)), at90usb1286) | |||
BOOTLOADER_SIZE = 1024 | |||
endif | |||
endif | |||
ifeq ($(strip $(BOOTLOADER)), caterina) | |||
OPT_DEFS += -DBOOTLOADER_CATERINA | |||
BOOTLOADER_SIZE = 4096 | |||
endif | |||
ifneq (,$(filter $(BOOTLOADER), bootloadhid bootloadHID)) | |||
OPT_DEFS += -DBOOTLOADER_BOOTLOADHID | |||
BOOTLOADER_SIZE = 4096 | |||
endif | |||
ifneq (,$(filter $(BOOTLOADER), usbasploader USBasp)) | |||
OPT_DEFS += -DBOOTLOADER_USBASP | |||
BOOTLOADER_SIZE = 4096 | |||
endif | |||
ifeq ($(strip $(BOOTLOADER)), lufa-ms) | |||
OPT_DEFS += -DBOOTLOADER_MS | |||
BOOTLOADER_SIZE ?= 8192 | |||
FIRMWARE_FORMAT = bin | |||
cpfirmware: lufa_warning | |||
.INTERMEDIATE: lufa_warning | |||
lufa_warning: $(FIRMWARE_FORMAT) | |||
$(info @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@) | |||
$(info LUFA MASS STORAGE Bootloader selected) | |||
$(info DO NOT USE THIS BOOTLOADER IN NEW PROJECTS!) | |||
$(info It is extremely prone to bricking, and is only included to support existing boards.) | |||
$(info @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@) | |||
endif | |||
ifdef BOOTLOADER_SIZE | |||
OPT_DEFS += -DBOOTLOADER_SIZE=$(strip $(BOOTLOADER_SIZE)) | |||
endif | |||
ifeq ($(strip $(BOOTLOADER)), stm32-dfu) | |||
OPT_DEFS += -DBOOTLOADER_STM32_DFU | |||
# Options to pass to dfu-util when flashing | |||
DFU_ARGS ?= -d 0483:DF11 -a 0 -s 0x08000000:leave | |||
DFU_SUFFIX_ARGS ?= -v 0483 -p DF11 | |||
endif | |||
ifeq ($(strip $(BOOTLOADER)), apm32-dfu) | |||
OPT_DEFS += -DBOOTLOADER_APM32_DFU | |||
# Options to pass to dfu-util when flashing | |||
DFU_ARGS ?= -d 314B:0106 -a 0 -s 0x08000000:leave | |||
DFU_SUFFIX_ARGS ?= -v 314B -p 0106 | |||
endif | |||
ifeq ($(strip $(BOOTLOADER)), kiibohd) | |||
OPT_DEFS += -DBOOTLOADER_KIIBOHD | |||
ifeq ($(strip $(MCU_ORIG)), MK20DX128) | |||
MCU_LDSCRIPT = MK20DX128BLDR4 | |||
endif | |||
ifeq ($(strip $(MCU_ORIG)), MK20DX256) | |||
MCU_LDSCRIPT = MK20DX256BLDR8 | |||
endif | |||
# Options to pass to dfu-util when flashing | |||
DFU_ARGS = -d 1C11:B007 | |||
DFU_SUFFIX_ARGS = -v 1C11 -p B007 | |||
endif | |||
ifeq ($(strip $(BOOTLOADER)), stm32duino) | |||
OPT_DEFS += -DBOOTLOADER_STM32DUINO | |||
MCU_LDSCRIPT = STM32F103x8_stm32duino_bootloader | |||
BOARD = STM32_F103_STM32DUINO | |||
# STM32F103 does NOT have an USB bootloader in ROM (only serial), so setting anything here does not make much sense | |||
STM32_BOOTLOADER_ADDRESS = 0x80000000 | |||
# Options to pass to dfu-util when flashing | |||
DFU_ARGS = -d 1EAF:0003 -a 2 -R | |||
DFU_SUFFIX_ARGS = -v 1EAF -p 0003 | |||
endif | |||
ifeq ($(strip $(BOOTLOADER)), tinyuf2) | |||
OPT_DEFS += -DBOOTLOADER_TINYUF2 | |||
endif |
@ -0,0 +1,163 @@ | |||
# Copyright 2017 Jack Humbert | |||
# | |||
# This program is free software: you can redistribute it and/or modify | |||
# it under the terms of the GNU General Public License as published by | |||
# the Free Software Foundation, either version 2 of the License, or | |||
# (at your option) any later version. | |||
# | |||
# This program is distributed in the hope that it will be useful, | |||
# but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||
# GNU General Public License for more details. | |||
# | |||
# You should have received a copy of the GNU General Public License | |||
# along with this program. If not, see <http://www.gnu.org/licenses/>. | |||
# If it's possible that multiple bootloaders can be used for one project, | |||
# you can leave this unset, and the correct size will be selected | |||
# automatically. | |||
# | |||
# Sets the bootloader defined in the keyboard's/keymap's rules.mk | |||
# Current options: | |||
# | |||
# AVR: | |||
# halfkay PJRC Teensy | |||
# caterina Pro Micro (Sparkfun/generic) | |||
# atmel-dfu Atmel factory DFU | |||
# lufa-dfu LUFA DFU | |||
# qmk-dfu QMK DFU (LUFA + blinkenlight) | |||
# qmk-hid QMK HID (LUFA + blinkenlight) | |||
# bootloadhid HIDBootFlash compatible (ATmega32A) | |||
# usbasploader USBaspLoader (ATmega328P) | |||
# ARM: | |||
# kiibohd Input:Club Kiibohd bootloader (only used on their boards) | |||
# stm32duino STM32Duino (STM32F103x8) | |||
# stm32-dfu STM32 USB DFU in ROM | |||
# apm32-dfu APM32 USB DFU in ROM | |||
# RISC-V: | |||
# gd32v-dfu GD32V USB DFU in ROM | |||
# | |||
# BOOTLOADER_SIZE can still be defined manually, but it's recommended | |||
# you add any possible configuration to this list | |||
ifeq ($(strip $(BOOTLOADER)), atmel-dfu) | |||
OPT_DEFS += -DBOOTLOADER_ATMEL_DFU | |||
OPT_DEFS += -DBOOTLOADER_DFU | |||
ifneq (,$(filter $(MCU), at90usb162 atmega16u2 atmega32u2 atmega16u4 atmega32u4 at90usb646 at90usb647)) | |||
BOOTLOADER_SIZE = 4096 | |||
endif | |||
ifneq (,$(filter $(MCU), at90usb1286 at90usb1287)) | |||
BOOTLOADER_SIZE = 8192 | |||
endif | |||
endif | |||
ifeq ($(strip $(BOOTLOADER)), lufa-dfu) | |||
OPT_DEFS += -DBOOTLOADER_LUFA_DFU | |||
OPT_DEFS += -DBOOTLOADER_DFU | |||
ifneq (,$(filter $(MCU), at90usb162 atmega16u2 atmega32u2 atmega16u4 atmega32u4 at90usb646 at90usb647)) | |||
BOOTLOADER_SIZE ?= 4096 | |||
endif | |||
ifneq (,$(filter $(MCU), at90usb1286 at90usb1287)) | |||
BOOTLOADER_SIZE ?= 8192 | |||
endif | |||
endif | |||
ifeq ($(strip $(BOOTLOADER)), qmk-dfu) | |||
OPT_DEFS += -DBOOTLOADER_QMK_DFU | |||
OPT_DEFS += -DBOOTLOADER_DFU | |||
ifneq (,$(filter $(MCU), at90usb162 atmega16u2 atmega32u2 atmega16u4 atmega32u4 at90usb646 at90usb647)) | |||
BOOTLOADER_SIZE ?= 4096 | |||
endif | |||
ifneq (,$(filter $(MCU), at90usb1286 at90usb1287)) | |||
BOOTLOADER_SIZE ?= 8192 | |||
endif | |||
endif | |||
ifeq ($(strip $(BOOTLOADER)), qmk-hid) | |||
OPT_DEFS += -DBOOTLOADER_QMK_HID | |||
OPT_DEFS += -DBOOTLOADER_HID | |||
BOOTLOADER_SIZE ?= 4096 | |||
endif | |||
ifeq ($(strip $(BOOTLOADER)), halfkay) | |||
OPT_DEFS += -DBOOTLOADER_HALFKAY | |||
ifeq ($(strip $(MCU)), atmega32u4) | |||
BOOTLOADER_SIZE = 512 | |||
endif | |||
ifeq ($(strip $(MCU)), at90usb1286) | |||
BOOTLOADER_SIZE = 1024 | |||
endif | |||
endif | |||
ifeq ($(strip $(BOOTLOADER)), caterina) | |||
OPT_DEFS += -DBOOTLOADER_CATERINA | |||
BOOTLOADER_SIZE = 4096 | |||
endif | |||
ifneq (,$(filter $(BOOTLOADER), bootloadhid bootloadHID)) | |||
OPT_DEFS += -DBOOTLOADER_BOOTLOADHID | |||
BOOTLOADER_SIZE = 4096 | |||
endif | |||
ifneq (,$(filter $(BOOTLOADER), usbasploader USBasp)) | |||
OPT_DEFS += -DBOOTLOADER_USBASP | |||
BOOTLOADER_SIZE = 4096 | |||
endif | |||
ifeq ($(strip $(BOOTLOADER)), lufa-ms) | |||
OPT_DEFS += -DBOOTLOADER_MS | |||
BOOTLOADER_SIZE ?= 8192 | |||
FIRMWARE_FORMAT = bin | |||
cpfirmware: lufa_warning | |||
.INTERMEDIATE: lufa_warning | |||
lufa_warning: $(FIRMWARE_FORMAT) | |||
$(info @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@) | |||
$(info LUFA MASS STORAGE Bootloader selected) | |||
$(info DO NOT USE THIS BOOTLOADER IN NEW PROJECTS!) | |||
$(info It is extremely prone to bricking, and is only included to support existing boards.) | |||
$(info @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@) | |||
endif | |||
ifdef BOOTLOADER_SIZE | |||
OPT_DEFS += -DBOOTLOADER_SIZE=$(strip $(BOOTLOADER_SIZE)) | |||
endif | |||
ifeq ($(strip $(BOOTLOADER)), stm32-dfu) | |||
OPT_DEFS += -DBOOTLOADER_STM32_DFU | |||
# Options to pass to dfu-util when flashing | |||
DFU_ARGS ?= -d 0483:DF11 -a 0 -s 0x08000000:leave | |||
DFU_SUFFIX_ARGS ?= -v 0483 -p DF11 | |||
endif | |||
ifeq ($(strip $(BOOTLOADER)), apm32-dfu) | |||
OPT_DEFS += -DBOOTLOADER_APM32_DFU | |||
# Options to pass to dfu-util when flashing | |||
DFU_ARGS ?= -d 314B:0106 -a 0 -s 0x08000000:leave | |||
DFU_SUFFIX_ARGS ?= -v 314B -p 0106 | |||
endif | |||
ifeq ($(strip $(BOOTLOADER)), gd32v-dfu) | |||
OPT_DEFS += -DBOOTLOADER_GD32V_DFU | |||
# Options to pass to dfu-util when flashing | |||
DFU_ARGS ?= -d 28E9:0189 -a 0 -s 0x08000000:leave | |||
DFU_SUFFIX_ARGS ?= -v 28E9 -p 0189 | |||
endif | |||
ifeq ($(strip $(BOOTLOADER)), kiibohd) | |||
OPT_DEFS += -DBOOTLOADER_KIIBOHD | |||
ifeq ($(strip $(MCU_ORIG)), MK20DX128) | |||
MCU_LDSCRIPT = MK20DX128BLDR4 | |||
endif | |||
ifeq ($(strip $(MCU_ORIG)), MK20DX256) | |||
MCU_LDSCRIPT = MK20DX256BLDR8 | |||
endif | |||
# Options to pass to dfu-util when flashing | |||
DFU_ARGS = -d 1C11:B007 | |||
DFU_SUFFIX_ARGS = -v 1C11 -p B007 | |||
endif | |||
ifeq ($(strip $(BOOTLOADER)), stm32duino) | |||
OPT_DEFS += -DBOOTLOADER_STM32DUINO | |||
MCU_LDSCRIPT = STM32F103x8_stm32duino_bootloader | |||
BOARD = STM32_F103_STM32DUINO | |||
# STM32F103 does NOT have an USB bootloader in ROM (only serial), so setting anything here does not make much sense | |||
STM32_BOOTLOADER_ADDRESS = 0x80000000 | |||
# Options to pass to dfu-util when flashing | |||
DFU_ARGS = -d 1EAF:0003 -a 2 -R | |||
DFU_SUFFIX_ARGS = -v 1EAF -p 0003 | |||
endif | |||
ifeq ($(strip $(BOOTLOADER)), tinyuf2) | |||
OPT_DEFS += -DBOOTLOADER_TINYUF2 | |||
endif |
@ -0,0 +1,28 @@ | |||
# Unconditionally disable features that a keyboard advertises it doesn't support | |||
FEATURE_NAMES := | |||
FEATURE_NAMES += AUDIO | |||
FEATURE_NAMES += BACKLIGHT | |||
FEATURE_NAMES += BLUETOOTH | |||
FEATURE_NAMES += DIP_SWITCH | |||
FEATURE_NAMES += DYNAMIC_KEYMAP | |||
FEATURE_NAMES += ENCODER | |||
FEATURE_NAMES += HAPTIC | |||
FEATURE_NAMES += HD44780 | |||
FEATURE_NAMES += IOS_DEVICE | |||
FEATURE_NAMES += LCD_BACKLIGHT | |||
FEATURE_NAMES += LCD | |||
FEATURE_NAMES += OLED | |||
FEATURE_NAMES += POINTING_DEVICE | |||
FEATURE_NAMES += PRINTING | |||
FEATURE_NAMES += PS2_MOUSE | |||
FEATURE_NAMES += RGBLIGHT | |||
FEATURE_NAMES += RGB_MATRIX | |||
FEATURE_NAMES += SLEEP_LED | |||
FEATURE_NAMES += STENO | |||
FEATURE_NAMES += SWAP_HANDS | |||
FEATURE_NAMES += WATCHDOG | |||
FEATURE_NAMES += XT | |||
$(foreach AFEATURE,$(FEATURE_NAMES),\ | |||
$(if $(filter $($(AFEATURE)_SUPPORTED),no),$(eval $(AFEATURE)_ENABLE=no))) |
@ -0,0 +1,52 @@ | |||
# Copyright 2021 QMK | |||
# | |||
# This program is free software: you can redistribute it and/or modify | |||
# it under the terms of the GNU General Public License as published by | |||
# the Free Software Foundation, either version 2 of the License, or | |||
# (at your option) any later version. | |||
# | |||
# This program is distributed in the hope that it will be useful, | |||
# but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||
# GNU General Public License for more details. | |||
# | |||
# You should have received a copy of the GNU General Public License | |||
# along with this program. If not, see <http://www.gnu.org/licenses/>. | |||
SPACE_CADET_ENABLE ?= yes | |||
GRAVE_ESC_ENABLE ?= yes | |||
GENERIC_FEATURES = \ | |||
COMBO \ | |||
COMMAND \ | |||
DEFERRED_EXEC \ | |||
DIGITIZER \ | |||
DIP_SWITCH \ | |||
DYNAMIC_KEYMAP \ | |||
DYNAMIC_MACRO \ | |||
ENCODER \ | |||
GRAVE_ESC \ | |||
HAPTIC \ | |||
KEY_LOCK \ | |||
KEY_OVERRIDE \ | |||
LEADER \ | |||
PROGRAMMABLE_BUTTON \ | |||
SPACE_CADET \ | |||
SWAP_HANDS \ | |||
TAP_DANCE \ | |||
VELOCIKEY \ | |||
WPM \ | |||
DYNAMIC_TAPPING_TERM \ | |||
define HANDLE_GENERIC_FEATURE | |||
# $$(info "Processing: $1_ENABLE $2.c") | |||
SRC += $$(wildcard $$(QUANTUM_DIR)/process_keycode/process_$2.c) | |||
SRC += $$(wildcard $$(QUANTUM_DIR)/$2.c) | |||
OPT_DEFS += -D$1_ENABLE | |||
endef | |||
$(foreach F,$(GENERIC_FEATURES),\ | |||
$(if $(filter yes, $(strip $($(F)_ENABLE))),\ | |||
$(eval $(call HANDLE_GENERIC_FEATURE,$(F),$(shell echo $(F) | tr '[:upper:]' '[:lower:]'))) \ | |||
) \ | |||
) |
@ -0,0 +1,697 @@ | |||
MCU_ORIG := $(MCU) | |||
ifneq ($(findstring MKL26Z64, $(MCU)),) | |||
# Cortex version | |||
MCU = cortex-m0plus | |||
# ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7 | |||
ARMV = 6 | |||
## chip/board settings | |||
# - the next two should match the directories in | |||
# <chibios>/os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES) | |||
MCU_FAMILY = KINETIS | |||
MCU_SERIES = KL2x | |||
# Linker script to use | |||
# - it should exist either in <chibios>/os/common/ports/ARMCMx/compilers/GCC/ld/ | |||
# or <keyboard_dir>/ld/ | |||
MCU_LDSCRIPT ?= MKL26Z64 | |||
# Startup code to use | |||
# - it should exist in <chibios>/os/common/ports/ARMCMx/compilers/GCC/mk/ | |||
MCU_STARTUP ?= kl2x | |||
# Board: it should exist either in <chibios>/os/hal/boards/, | |||
# <keyboard_dir>/boards/, or drivers/boards/ | |||
BOARD ?= PJRC_TEENSY_LC | |||
endif | |||
ifneq ($(findstring MK20DX128, $(MCU)),) | |||
# Cortex version | |||
MCU = cortex-m4 | |||
# ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7 | |||
ARMV = 7 | |||
## chip/board settings | |||
# - the next two should match the directories in | |||
# <chibios>/os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES) | |||
MCU_FAMILY = KINETIS | |||
MCU_SERIES = K20x | |||
# Linker script to use | |||
# - it should exist either in <chibios>/os/common/ports/ARMCMx/compilers/GCC/ld/ | |||
# or <keyboard_dir>/ld/ | |||
MCU_LDSCRIPT ?= MK20DX128 | |||
# Startup code to use | |||
# - it should exist in <chibios>/os/common/ports/ARMCMx/compilers/GCC/mk/ | |||
MCU_STARTUP ?= k20x5 | |||
# Board: it should exist either in <chibios>/os/hal/boards/, | |||
# <keyboard_dir>/boards/, or drivers/boards/ | |||
BOARD ?= PJRC_TEENSY_3 | |||
endif | |||
ifneq ($(findstring MK20DX256, $(MCU)),) | |||
# Cortex version | |||
MCU = cortex-m4 | |||
# ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7 | |||
ARMV = 7 | |||
## chip/board settings | |||
# - the next two should match the directories in | |||
# <chibios>/os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES) | |||
MCU_FAMILY = KINETIS | |||
MCU_SERIES = K20x | |||
# Linker script to use | |||
# - it should exist either in <chibios>/os/common/ports/ARMCMx/compilers/GCC/ld/ | |||
# or <keyboard_dir>/ld/ | |||
MCU_LDSCRIPT ?= MK20DX256 | |||
# Startup code to use | |||
# - it should exist in <chibios>/os/common/ports/ARMCMx/compilers/GCC/mk/ | |||
MCU_STARTUP ?= k20x7 | |||
# Board: it should exist either in <chibios>/os/hal/boards/, | |||
# <keyboard_dir>/boards/, or drivers/boards/ | |||
BOARD ?= PJRC_TEENSY_3_1 | |||
endif | |||
ifneq ($(findstring MK66FX1M0, $(MCU)),) | |||
# Cortex version | |||
MCU = cortex-m4 | |||
# ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7 | |||
ARMV = 7 | |||
## chip/board settings | |||
# - the next two should match the directories in | |||
# <chibios>/os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES) | |||
MCU_FAMILY = KINETIS | |||
MCU_SERIES = MK66F18 | |||
# Linker script to use | |||
# - it should exist either in <chibios>/os/common/ports/ARMCMx/compilers/GCC/ld/ | |||
# or <keyboard_dir>/ld/ | |||
MCU_LDSCRIPT ?= MK66FX1M0 | |||
# Startup code to use | |||
# - it should exist in <chibios>/os/common/startup/ARMCMx/compilers/GCC/mk/ | |||
MCU_STARTUP ?= MK66F18 | |||
# Board: it should exist either in <chibios>/os/hal/boards/, | |||
# <keyboard_dir>/boards/, or drivers/boards/ | |||
BOARD ?= PJRC_TEENSY_3_6 | |||
endif | |||
ifneq ($(findstring STM32F042, $(MCU)),) | |||
# Cortex version | |||
MCU = cortex-m0 | |||
# ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7 | |||
ARMV = 6 | |||
## chip/board settings | |||
# - the next two should match the directories in | |||
# <chibios>/os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES) | |||
MCU_FAMILY = STM32 | |||
MCU_SERIES = STM32F0xx | |||
# Linker script to use | |||
# - it should exist either in <chibios>/os/common/startup/ARMCMx/compilers/GCC/ld/ | |||
# or <keyboard_dir>/ld/ | |||
MCU_LDSCRIPT ?= STM32F042x6 | |||
# Startup code to use | |||
# - it should exist in <chibios>/os/common/startup/ARMCMx/compilers/GCC/mk/ | |||
MCU_STARTUP ?= stm32f0xx | |||
# Board: it should exist either in <chibios>/os/hal/boards/, | |||
# <keyboard_dir>/boards/, or drivers/boards/ | |||
BOARD ?= GENERIC_STM32_F042X6 | |||
USE_FPU ?= no | |||
# UF2 settings | |||
UF2_FAMILY ?= STM32F0 | |||
# Stack sizes: Since this chip has limited RAM capacity, the stack area needs to be reduced. | |||
# This ensures that the EEPROM page buffer fits into RAM | |||
USE_PROCESS_STACKSIZE = 0x600 | |||
USE_EXCEPTIONS_STACKSIZE = 0x300 | |||
endif | |||
ifneq ($(findstring STM32F072, $(MCU)),) | |||
# Cortex version | |||
MCU = cortex-m0 | |||
# ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7 | |||
ARMV = 6 | |||
## chip/board settings | |||
# - the next two should match the directories in | |||
# <chibios>/os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES) | |||
MCU_FAMILY = STM32 | |||
MCU_SERIES = STM32F0xx | |||
# Linker script to use | |||
# - it should exist either in <chibios>/os/common/startup/ARMCMx/compilers/GCC/ld/ | |||
# or <keyboard_dir>/ld/ | |||
MCU_LDSCRIPT ?= STM32F072xB | |||
# Startup code to use | |||
# - it should exist in <chibios>/os/common/startup/ARMCMx/compilers/GCC/mk/ | |||
MCU_STARTUP ?= stm32f0xx | |||
# Board: it should exist either in <chibios>/os/hal/boards/, | |||
# <keyboard_dir>/boards/, or drivers/boards/ | |||
BOARD ?= GENERIC_STM32_F072XB | |||
USE_FPU ?= no | |||
# UF2 settings | |||
UF2_FAMILY ?= STM32F0 | |||
endif | |||
ifneq ($(findstring STM32F103, $(MCU)),) | |||
# Cortex version | |||
MCU = cortex-m3 | |||
# ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7 | |||
ARMV = 7 | |||
## chip/board settings | |||
# - the next two should match the directories in | |||
# <chibios>/os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES) | |||
MCU_FAMILY = STM32 | |||
MCU_SERIES = STM32F1xx | |||
# Linker script to use | |||
# - it should exist either in <chibios>/os/common/startup/ARMCMx/compilers/GCC/ld/ | |||
# or <keyboard_dir>/ld/ | |||
MCU_LDSCRIPT ?= STM32F103x8 | |||
# Startup code to use | |||
# - it should exist in <chibios>/os/common/startup/ARMCMx/compilers/GCC/mk/ | |||
MCU_STARTUP ?= stm32f1xx | |||
# Board: it should exist either in <chibios>/os/hal/boards/, | |||
# <keyboard_dir>/boards/, or drivers/boards/ | |||
BOARD ?= GENERIC_STM32_F103 | |||
USE_FPU ?= no | |||
# UF2 settings | |||
UF2_FAMILY ?= STM32F1 | |||
endif | |||
ifneq ($(findstring STM32F303, $(MCU)),) | |||
# Cortex version | |||
MCU = cortex-m4 | |||
# ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7 | |||
ARMV = 7 | |||
## chip/board settings | |||
# - the next two should match the directories in | |||
# <chibios>/os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES) | |||
MCU_FAMILY = STM32 | |||
MCU_SERIES = STM32F3xx | |||
# Linker script to use | |||
# - it should exist either in <chibios>/os/common/startup/ARMCMx/compilers/GCC/ld/ | |||
# or <keyboard_dir>/ld/ | |||
MCU_LDSCRIPT ?= STM32F303xC | |||
# Startup code to use | |||
# - it should exist in <chibios>/os/common/startup/ARMCMx/compilers/GCC/mk/ | |||
MCU_STARTUP ?= stm32f3xx | |||
# Board: it should exist either in <chibios>/os/hal/boards/, | |||
# <keyboard_dir>/boards/, or drivers/boards/ | |||
BOARD ?= GENERIC_STM32_F303XC | |||
USE_FPU ?= yes | |||
# UF2 settings | |||
UF2_FAMILY ?= STM32F3 | |||
endif | |||
ifneq ($(findstring STM32F401, $(MCU)),) | |||
# Cortex version | |||
MCU = cortex-m4 | |||
# ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7 | |||
ARMV = 7 | |||
## chip/board settings | |||
# - the next two should match the directories in | |||
# <chibios>/os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES) | |||
MCU_FAMILY = STM32 | |||
MCU_SERIES = STM32F4xx | |||
# Linker script to use | |||
# - it should exist either in <chibios>/os/common/startup/ARMCMx/compilers/GCC/ld/ | |||
# or <keyboard_dir>/ld/ | |||
ifeq ($(strip $(BOOTLOADER)), tinyuf2) | |||
MCU_LDSCRIPT ?= STM32F401xC_tinyuf2 | |||
FIRMWARE_FORMAT ?= uf2 | |||
else | |||
MCU_LDSCRIPT ?= STM32F401xC | |||
endif | |||
# Startup code to use | |||
# - it should exist in <chibios>/os/common/startup/ARMCMx/compilers/GCC/mk/ | |||
MCU_STARTUP ?= stm32f4xx | |||
# Board: it should exist either in <chibios>/os/hal/boards/, | |||
# <keyboard_dir>/boards/, or drivers/boards/ | |||
BOARD ?= BLACKPILL_STM32_F401 | |||
USE_FPU ?= yes | |||
# UF2 settings | |||
UF2_FAMILY ?= STM32F4 | |||
endif | |||
ifneq ($(findstring STM32F405, $(MCU)),) | |||
# Cortex version | |||
MCU = cortex-m4 | |||
# ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7 | |||
ARMV = 7 | |||
## chip/board settings | |||
# - the next two should match the directories in | |||
# <chibios>/os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES) | |||
MCU_FAMILY = STM32 | |||
MCU_SERIES = STM32F4xx | |||
# Linker script to use | |||
# - it should exist either in <chibios>/os/common/ports/ARMCMx/compilers/GCC/ld/ | |||
# or <keyboard_dir>/ld/ | |||
MCU_LDSCRIPT ?= STM32F405xG | |||
# Startup code to use | |||
# - it should exist in <chibios>/os/common/startup/ARMCMx/compilers/GCC/mk/ | |||
MCU_STARTUP ?= stm32f4xx | |||
# Board: it should exist either in <chibios>/os/hal/boards/, | |||
# <keyboard_dir>/boards/, or drivers/boards/ | |||
BOARD ?= GENERIC_STM32_F405XG | |||
USE_FPU ?= yes | |||
# UF2 settings | |||
UF2_FAMILY ?= STM32F4 | |||
endif | |||
ifneq ($(findstring STM32F407, $(MCU)),) | |||
# Cortex version | |||
MCU = cortex-m4 | |||
# ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7 | |||
ARMV = 7 | |||
## chip/board settings | |||
# - the next two should match the directories in | |||
# <chibios>/os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES) | |||
MCU_FAMILY = STM32 | |||
MCU_SERIES = STM32F4xx | |||
# Linker script to use | |||
# - it should exist either in <chibios>/os/common/startup/ARMCMx/compilers/GCC/ld/ | |||
# or <keyboard_dir>/ld/ | |||
MCU_LDSCRIPT ?= STM32F407xE | |||
# Startup code to use | |||
# - it should exist in <chibios>/os/common/startup/ARMCMx/compilers/GCC/mk/ | |||
MCU_STARTUP ?= stm32f4xx | |||
# Board: it should exist either in <chibios>/os/hal/boards/, | |||
# <keyboard_dir>/boards/, or drivers/boards/ | |||
BOARD ?= GENERIC_STM32_F407XE | |||
USE_FPU ?= yes | |||
# UF2 settings | |||
UF2_FAMILY ?= STM32F4 | |||
endif | |||
ifneq ($(findstring STM32F411, $(MCU)),) | |||
# Cortex version | |||
MCU = cortex-m4 | |||
# ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7 | |||
ARMV = 7 | |||
## chip/board settings | |||
# - the next two should match the directories in | |||
# <chibios>/os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES) | |||
MCU_FAMILY = STM32 | |||
MCU_SERIES = STM32F4xx | |||
# Linker script to use | |||
# - it should exist either in <chibios>/os/common/startup/ARMCMx/compilers/GCC/ld/ | |||
# or <keyboard_dir>/ld/ | |||
ifeq ($(strip $(BOOTLOADER)), tinyuf2) | |||
MCU_LDSCRIPT ?= STM32F411xE_tinyuf2 | |||
FIRMWARE_FORMAT ?= uf2 | |||
else | |||
MCU_LDSCRIPT ?= STM32F411xE | |||
endif | |||
# Startup code to use | |||
# - it should exist in <chibios>/os/common/startup/ARMCMx/compilers/GCC/mk/ | |||
MCU_STARTUP ?= stm32f4xx | |||
# Board: it should exist either in <chibios>/os/hal/boards/, | |||
# <keyboard_dir>/boards/, or drivers/boards/ | |||
BOARD ?= BLACKPILL_STM32_F411 | |||
USE_FPU ?= yes | |||
# UF2 settings | |||
UF2_FAMILY ?= STM32F4 | |||
endif | |||
ifneq ($(findstring STM32F446, $(MCU)),) | |||
# Cortex version | |||
MCU = cortex-m4 | |||
# ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7 | |||
ARMV = 7 | |||
## chip/board settings | |||
# - the next two should match the directories in | |||
# <chibios>/os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES) | |||
MCU_FAMILY = STM32 | |||
MCU_SERIES = STM32F4xx | |||
# Linker script to use | |||
# - it should exist either in <chibios>/os/common/startup/ARMCMx/compilers/GCC/ld/ | |||
# or <keyboard_dir>/ld/ | |||
MCU_LDSCRIPT ?= STM32F446xE | |||
# Startup code to use | |||
# - it should exist in <chibios>/os/common/startup/ARMCMx/compilers/GCC/mk/ | |||
MCU_STARTUP ?= stm32f4xx | |||
# Board: it should exist either in <chibios>/os/hal/boards/, | |||
# <keyboard_dir>/boards/, or drivers/boards/ | |||
BOARD ?= GENERIC_STM32_F446XE | |||
USE_FPU ?= yes | |||
endif | |||
ifneq ($(findstring STM32G431, $(MCU)),) | |||
# Cortex version | |||
MCU = cortex-m4 | |||
# ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7 | |||
ARMV = 7 | |||
## chip/board settings | |||
# - the next two should match the directories in | |||
# <chibios>/os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES) | |||
MCU_FAMILY = STM32 | |||
MCU_SERIES = STM32G4xx | |||
# Linker script to use | |||
# - it should exist either in <chibios>/os/common/startup/ARMCMx/compilers/GCC/ld/ | |||
# or <keyboard_dir>/ld/ | |||
MCU_LDSCRIPT ?= STM32G431xB | |||
# Startup code to use | |||
# - it should exist in <chibios>/os/common/startup/ARMCMx/compilers/GCC/mk/ | |||
MCU_STARTUP ?= stm32g4xx | |||
# Board: it should exist either in <chibios>/os/hal/boards/, | |||
# <keyboard_dir>/boards/, or drivers/boards/ | |||
BOARD ?= GENERIC_STM32_G431XB | |||
USE_FPU ?= yes | |||
# UF2 settings | |||
UF2_FAMILY ?= STM32G4 | |||
endif | |||
ifneq ($(findstring STM32G474, $(MCU)),) | |||
# Cortex version | |||
MCU = cortex-m4 | |||
# ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7 | |||
ARMV = 7 | |||
## chip/board settings | |||
# - the next two should match the directories in | |||
# <chibios>/os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES) | |||
MCU_FAMILY = STM32 | |||
MCU_SERIES = STM32G4xx | |||
# Linker script to use | |||
# - it should exist either in <chibios>/os/common/startup/ARMCMx/compilers/GCC/ld/ | |||
# or <keyboard_dir>/ld/ | |||
MCU_LDSCRIPT ?= STM32G474xE | |||
# Startup code to use | |||
# - it should exist in <chibios>/os/common/startup/ARMCMx/compilers/GCC/mk/ | |||
MCU_STARTUP ?= stm32g4xx | |||
# Board: it should exist either in <chibios>/os/hal/boards/, | |||
# <keyboard_dir>/boards/, or drivers/boards/ | |||
BOARD ?= GENERIC_STM32_G474XE | |||
USE_FPU ?= yes | |||
# UF2 settings | |||
UF2_FAMILY ?= STM32G4 | |||
endif | |||
ifneq (,$(filter $(MCU),STM32L433 STM32L443)) | |||
# Cortex version | |||
MCU = cortex-m4 | |||
# ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7 | |||
ARMV = 7 | |||
## chip/board settings | |||
# - the next two should match the directories in | |||
# <chibios>/os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES) | |||
MCU_FAMILY = STM32 | |||
MCU_SERIES = STM32L4xx | |||
# Linker script to use | |||
# - it should exist either in <chibios>/os/common/startup/ARMCMx/compilers/GCC/ld/ | |||
# or <keyboard_dir>/ld/ | |||
MCU_LDSCRIPT ?= STM32L432xC | |||
# Startup code to use | |||
# - it should exist in <chibios>/os/common/startup/ARMCMx/compilers/GCC/mk/ | |||
MCU_STARTUP ?= stm32l4xx | |||
# Board: it should exist either in <chibios>/os/hal/boards/, | |||
# <keyboard_dir>/boards/, or drivers/boards/ | |||
BOARD ?= GENERIC_STM32_L433XC | |||
PLATFORM_NAME ?= platform_l432 | |||
USE_FPU ?= yes | |||
# UF2 settings | |||
UF2_FAMILY ?= STM32L4 | |||
endif | |||
ifneq (,$(filter $(MCU),STM32L412 STM32L422)) | |||
# Cortex version | |||
MCU = cortex-m4 | |||
# ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7 | |||
ARMV = 7 | |||
## chip/board settings | |||
# - the next two should match the directories in | |||
# <chibios>/os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES) | |||
MCU_FAMILY = STM32 | |||
MCU_SERIES = STM32L4xx | |||
# Linker script to use | |||
# - it should exist either in <chibios>/os/common/startup/ARMCMx/compilers/GCC/ld/ | |||
# or <keyboard_dir>/ld/ | |||
MCU_LDSCRIPT ?= STM32L412xB | |||
# Startup code to use | |||
# - it should exist in <chibios>/os/common/startup/ARMCMx/compilers/GCC/mk/ | |||
MCU_STARTUP ?= stm32l4xx | |||
# Board: it should exist either in <chibios>/os/hal/boards/, | |||
# <keyboard_dir>/boards/, or drivers/boards/ | |||
BOARD ?= GENERIC_STM32_L412XB | |||
PLATFORM_NAME ?= platform_l432 | |||
USE_FPU ?= yes | |||
# UF2 settings | |||
UF2_FAMILY ?= STM32L4 | |||
endif | |||
ifneq ($(findstring WB32F3G71, $(MCU)),) | |||
# Cortex version | |||
MCU = cortex-m3 | |||
# ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7 | |||
ARMV = 7 | |||
## chip/board settings | |||
# - the next two should match the directories in | |||
# <chibios>/os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES) | |||
MCU_FAMILY = WB32 | |||
MCU_SERIES = WB32F3G71xx | |||
# Linker script to use | |||
# - it should exist either in <chibios>/os/common/ports/ARMCMx/compilers/GCC/ld/ | |||
# or <keyboard_dir>/ld/ | |||
MCU_LDSCRIPT ?= WB32F3G71x9 | |||
# Startup code to use | |||
# - it should exist in <chibios>/os/common/startup/ARMCMx/compilers/GCC/mk/ | |||
MCU_STARTUP ?= wb32f3g71xx | |||
# Board: it should exist either in <chibios>/os/hal/boards/, | |||
# <keyboard_dir>/boards/, or drivers/boards/ | |||
BOARD ?= GENERIC_WB32_F3G71XX | |||
USE_FPU ?= no | |||
endif | |||
ifneq ($(findstring GD32VF103, $(MCU)),) | |||
# RISC-V | |||
MCU = risc-v | |||
# RISC-V extensions and abi configuration | |||
MCU_ARCH = rv32imac | |||
MCU_ABI = ilp32 | |||
MCU_CMODEL = medlow | |||
## chip/board settings | |||
# - the next two should match the directories in | |||
# <chibios>/os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES) | |||
MCU_FAMILY = GD32V | |||
MCU_SERIES = GD32VF103 | |||
# Linker script to use | |||
# - it should exist either in <chibios>/os/common/startup/RISCV-ECLIC/compilers/GCC/ld/ | |||
# or <keyboard_dir>/ld/ | |||
MCU_LDSCRIPT ?= GD32VF103xB | |||
# Startup code to use | |||
# - it should exist in <chibios>/os/common/startup/RISCV-ECLIC/compilers/GCC/mk/ | |||
MCU_STARTUP ?= gd32vf103 | |||
# Board: it should exist either in <chibios>/os/hal/boards/, | |||
# <keyboard_dir>/boards/, or drivers/boards/ | |||
BOARD ?= SIPEED_LONGAN_NANO | |||
USE_FPU ?= no | |||
endif | |||
ifneq (,$(filter $(MCU),at90usb162 atmega16u2 atmega32u2 atmega16u4 atmega32u4 at90usb646 at90usb647 at90usb1286 at90usb1287)) | |||
PROTOCOL = LUFA | |||
# Processor frequency. | |||
# This will define a symbol, F_CPU, in all source code files equal to the | |||
# processor frequency in Hz. You can then use this symbol in your source code to | |||
# calculate timings. Do NOT tack on a 'UL' at the end, this will be done | |||
# automatically to create a 32-bit value in your source code. | |||
# | |||
# This will be an integer division of F_USB below, as it is sourced by | |||
# F_USB after it has run through any CPU prescalers. Note that this value | |||
# does not *change* the processor frequency - it should merely be updated to | |||
# reflect the processor speed set externally so that the code can use accurate | |||
# software delays. | |||
F_CPU ?= 16000000 | |||
# LUFA specific | |||
# | |||
# Target architecture (see library "Board Types" documentation). | |||
ARCH = AVR8 | |||
# Input clock frequency. | |||
# This will define a symbol, F_USB, in all source code files equal to the | |||
# input clock frequency (before any prescaling is performed) in Hz. This value may | |||
# differ from F_CPU if prescaling is used on the latter, and is required as the | |||
# raw input clock is fed directly to the PLL sections of the AVR for high speed | |||
# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' | |||
# at the end, this will be done automatically to create a 32-bit value in your | |||
# source code. | |||
# | |||
# If no clock division is performed on the input clock inside the AVR (via the | |||
# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. | |||
F_USB ?= $(F_CPU) | |||
# Interrupt driven control endpoint task | |||
ifeq (,$(filter $(NO_INTERRUPT_CONTROL_ENDPOINT),yes)) | |||
OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT | |||
endif | |||
ifneq (,$(filter $(MCU),at90usb162 atmega16u2 atmega32u2)) | |||
NO_I2C = yes | |||
endif | |||
endif | |||
ifneq (,$(filter $(MCU),atmega32a)) | |||
# MCU name for avrdude | |||
AVRDUDE_MCU = m32 | |||
PROTOCOL = VUSB | |||
# Processor frequency. | |||
# This will define a symbol, F_CPU, in all source code files equal to the | |||
# processor frequency in Hz. You can then use this symbol in your source code to | |||
# calculate timings. Do NOT tack on a 'UL' at the end, this will be done | |||
# automatically to create a 32-bit value in your source code. | |||
F_CPU ?= 12000000 | |||
endif | |||
ifneq (,$(filter $(MCU),atmega328p)) | |||
# MCU name for avrdude | |||
AVRDUDE_MCU = m328p | |||
PROTOCOL = VUSB | |||
# Processor frequency. | |||
# This will define a symbol, F_CPU, in all source code files equal to the | |||
# processor frequency in Hz. You can then use this symbol in your source code to | |||
# calculate timings. Do NOT tack on a 'UL' at the end, this will be done | |||
# automatically to create a 32-bit value in your source code. | |||
F_CPU ?= 16000000 | |||
endif | |||
ifneq (,$(filter $(MCU),atmega328)) | |||
# MCU name for avrdude | |||
AVRDUDE_MCU = m328 | |||
PROTOCOL = VUSB | |||
# Processor frequency. | |||
# This will define a symbol, F_CPU, in all source code files equal to the | |||
# processor frequency in Hz. You can then use this symbol in your source code to | |||
# calculate timings. Do NOT tack on a 'UL' at the end, this will be done | |||
# automatically to create a 32-bit value in your source code. | |||
F_CPU ?= 16000000 | |||
endif | |||
ifneq (,$(filter $(MCU),attiny85)) | |||
PROTOCOL = VUSB | |||
# Processor frequency. | |||
# This will define a symbol, F_CPU, in all source code files equal to the | |||
# processor frequency in Hz. You can then use this symbol in your source code to | |||
# calculate timings. Do NOT tack on a 'UL' at the end, this will be done | |||
# automatically to create a 32-bit value in your source code. | |||
F_CPU ?= 16500000 | |||
endif |
@ -0,0 +1,148 @@ | |||
BUILD_OPTION_NAMES = \ | |||
BOOTMAGIC_ENABLE \ | |||
MOUSEKEY_ENABLE \ | |||
EXTRAKEY_ENABLE \ | |||
CONSOLE_ENABLE \ | |||
COMMAND_ENABLE \ | |||
NKRO_ENABLE \ | |||
TERMINAL_ENABLE \ | |||
CUSTOM_MATRIX \ | |||
DEBOUNCE_TYPE \ | |||
SPLIT_KEYBOARD \ | |||
DYNAMIC_KEYMAP_ENABLE \ | |||
USB_HID_ENABLE \ | |||
VIA_ENABLE | |||
HARDWARE_OPTION_NAMES = \ | |||
SLEEP_LED_ENABLE \ | |||
BACKLIGHT_ENABLE \ | |||
BACKLIGHT_DRIVER \ | |||
RGBLIGHT_ENABLE \ | |||
RGBLIGHT_CUSTOM_DRIVER \ | |||
RGB_MATRIX_ENABLE \ | |||
RGB_MATRIX_DRIVER \ | |||
CIE1931_CURVE \ | |||
MIDI_ENABLE \ | |||
BLUETOOTH_ENABLE \ | |||
BLUETOOTH_DRIVER \ | |||
AUDIO_ENABLE \ | |||
HD44780_ENABLE \ | |||
ENCODER_ENABLE \ | |||
LED_TABLES \ | |||
POINTING_DEVICE_ENABLE \ | |||
DIP_SWITCH_ENABLE | |||
OTHER_OPTION_NAMES = \ | |||
UNICODE_ENABLE \ | |||
UCIS_ENABLE \ | |||
UNICODEMAP_ENABLE \ | |||
UNICODE_COMMON \ | |||
AUTO_SHIFT_ENABLE \ | |||
AUTO_SHIFT_MODIFIERS \ | |||
DYNAMIC_TAPPING_TERM_ENABLE \ | |||
COMBO_ENABLE \ | |||
KEY_LOCK_ENABLE \ | |||
KEY_OVERRIDE_ENABLE \ | |||
LEADER_ENABLE \ | |||
PRINTING_ENABLE \ | |||
STENO_ENABLE \ | |||
TAP_DANCE_ENABLE \ | |||
VIRTSER_ENABLE \ | |||
OLED_ENABLE \ | |||
OLED_DRIVER \ | |||
LED_BACK_ENABLE \ | |||
LED_UNDERGLOW_ENABLE \ | |||
LED_ANIMATIONS \ | |||
IOS_DEVICE_ENABLE \ | |||
HELIX ZINC \ | |||
AUTOLOG_ENABLE \ | |||
DEBUG_ENABLE \ | |||
ENCODER_ENABLE_CUSTOM \ | |||
GERMAN_ENABLE \ | |||
HAPTIC_ENABLE \ | |||
HHKB_RN42_ENABLE \ | |||
ISSI_ENABLE \ | |||
KEYLOGGER_ENABLE \ | |||
LCD_BACKLIGHT_ENABLE \ | |||
MACROS_ENABLED \ | |||
PS2_MOUSE_ENABLE \ | |||
RAW_ENABLE \ | |||
SWAP_HANDS_ENABLE \ | |||
RING_BUFFERED_6KRO_REPORT_ENABLE \ | |||
WATCHDOG_ENABLE \ | |||
ERGOINU \ | |||
NO_USB_STARTUP_CHECK \ | |||
DISABLE_PROMICRO_LEDs \ | |||
MITOSIS_DATAGROK_BOTTOMSPACE \ | |||
MITOSIS_DATAGROK_SLOWUART \ | |||
RGB_MATRIX_KEYPRESSES \ | |||
LED_MIRRORED \ | |||
RGBLIGHT_FULL_POWER \ | |||
LTO_ENABLE \ | |||
PROGRAMMABLE_BUTTON_ENABLE | |||
define NAME_ECHO | |||
@printf " %-30s = %-16s # %s\\n" "$1" "$($1)" "$(origin $1)" | |||
endef | |||
define YAML_NAME_ECHO | |||
@echo ' $1 : "$(strip $($1))"' | |||
endef | |||
.PHONY: show_build_options0 show_build_options | |||
show_build_options0: | |||
@echo " KEYBOARD = $(KEYBOARD)" | |||
@echo " KEYMAP = $(KEYMAP)" | |||
@echo " MCU = $(MCU)" | |||
@echo " MCU_SERIES = $(MCU_SERIES)" | |||
@echo " PLATFORM = $(PLATFORM)" | |||
@echo " BOOTLOADER = $(BOOTLOADER)" | |||
@echo " FIRMWARE_FORMAT = $(FIRMWARE_FORMAT)" | |||
@echo | |||
@echo "Build Options:" | |||
$(foreach A_OPTION_NAME,$(sort $(BUILD_OPTION_NAMES)),\ | |||
$(call NAME_ECHO,$(A_OPTION_NAME))) | |||
show_build_options: show_build_options0 | |||
@echo | |||
@echo "If you want to know more, please try 'show_all_features' or 'show_full_features'" | |||
@echo | |||
.PHONY: show_all_features | |||
show_all_features: show_build_options0 | |||
@echo | |||
@echo "Hardware Options:" | |||
$(foreach A_OPTION_NAME,$(sort $(HARDWARE_OPTION_NAMES)),\ | |||
$(if $($(A_OPTION_NAME)),$(call NAME_ECHO,$(A_OPTION_NAME)))) | |||
@echo | |||
@echo "Other Options:" | |||
$(foreach A_OPTION_NAME,$(sort $(OTHER_OPTION_NAMES)),\ | |||
$(if $($(A_OPTION_NAME)),$(call NAME_ECHO,$(A_OPTION_NAME)))) | |||
.PHONY: show_full_features | |||
show_full_features: show_build_options0 | |||
@echo | |||
@echo "Hardware Options:" | |||
$(foreach A_OPTION_NAME,$(sort $(HARDWARE_OPTION_NAMES)),\ | |||
$(call NAME_ECHO,$(A_OPTION_NAME))) | |||
@echo | |||
@echo "Other Options:" | |||
$(foreach A_OPTION_NAME,$(sort $(OTHER_OPTION_NAMES)),\ | |||
$(call NAME_ECHO,$(A_OPTION_NAME))) | |||
.PHONY: yaml_build_options | |||
yaml_build_options: | |||
@echo '- KEYBOARD : "$(KEYBOARD)"' | |||
@echo ' KEYMAP : "$(KEYMAP)"' | |||
@echo ' MCU : "$(MCU)"' | |||
@echo ' MCU_SERIES : "$(MCU_SERIES)"' | |||
@echo ' PLATFORM : "$(PLATFORM)"' | |||
@echo ' FIRMWARE_FORMAT : "$(FIRMWARE_FORMAT)"' | |||
$(foreach A_OPTION_NAME,$(sort $(BUILD_OPTION_NAMES)),\ | |||
$(call YAML_NAME_ECHO,$(A_OPTION_NAME))) | |||
$(foreach A_OPTION_NAME,$(sort $(HARDWARE_OPTION_NAMES)),\ | |||
$(if $($(A_OPTION_NAME)),$(call YAML_NAME_ECHO,$(A_OPTION_NAME)))) | |||
$(foreach A_OPTION_NAME,$(sort $(OTHER_OPTION_NAMES)),\ | |||
$(if $($(A_OPTION_NAME)),$(call YAML_NAME_ECHO,$(A_OPTION_NAME)))) |
@ -1,28 +0,0 @@ | |||
include message.mk | |||
# Directory common source files exist | |||
TOP_DIR = . | |||
TMK_DIR = tmk_core | |||
TMK_PATH = $(TMK_DIR) | |||
LIB_PATH = lib | |||
QUANTUM_DIR = quantum | |||
QUANTUM_PATH = $(QUANTUM_DIR) | |||
DRIVER_DIR = drivers | |||
DRIVER_PATH = $(DRIVER_DIR) | |||
PLATFORM_DIR = platforms | |||
PLATFORM_PATH = $(PLATFORM_DIR) | |||
BUILD_DIR := .build | |||
COMMON_VPATH := $(TOP_DIR) | |||
COMMON_VPATH += $(TMK_PATH) | |||
COMMON_VPATH += $(QUANTUM_PATH) | |||
COMMON_VPATH += $(QUANTUM_PATH)/keymap_extras | |||
COMMON_VPATH += $(QUANTUM_PATH)/audio | |||
COMMON_VPATH += $(QUANTUM_PATH)/process_keycode | |||
COMMON_VPATH += $(QUANTUM_PATH)/api | |||
COMMON_VPATH += $(QUANTUM_PATH)/sequencer | |||
COMMON_VPATH += $(DRIVER_PATH) |
@ -1,31 +0,0 @@ | |||
# Unconditionally disable features that a keyboard advertises it doesn't support | |||
FEATURE_NAMES := | |||
FEATURE_NAMES += ADAFRUIT_BLE | |||
FEATURE_NAMES += AUDIO | |||
FEATURE_NAMES += BACKLIGHT | |||
FEATURE_NAMES += BLUETOOTH | |||
FEATURE_NAMES += DIP_SWITCH | |||
FEATURE_NAMES += DYNAMIC_KEYMAP | |||
FEATURE_NAMES += ENCODER | |||
FEATURE_NAMES += HAPTIC | |||
FEATURE_NAMES += HD44780 | |||
FEATURE_NAMES += IOS_DEVICE | |||
FEATURE_NAMES += LCD_BACKLIGHT | |||
FEATURE_NAMES += LCD | |||
FEATURE_NAMES += OLED | |||
FEATURE_NAMES += POINTING_DEVICE | |||
FEATURE_NAMES += PRINTING | |||
FEATURE_NAMES += PS2_MOUSE | |||
FEATURE_NAMES += RGBLIGHT | |||
FEATURE_NAMES += RGB_MATRIX | |||
FEATURE_NAMES += SLEEP_LED | |||
FEATURE_NAMES += SERIAL_LINK | |||
FEATURE_NAMES += STENO | |||
FEATURE_NAMES += SWAP_HANDS | |||
FEATURE_NAMES += VISUALIZER | |||
FEATURE_NAMES += WATCHDOG | |||
FEATURE_NAMES += XT | |||
$(foreach AFEATURE,$(FEATURE_NAMES),\ | |||
$(if $(filter $($(AFEATURE)_SUPPORTED),no),$(eval $(AFEATURE)_ENABLE=no))) |
@ -0,0 +1,457 @@ | |||
# QMK Breaking Changes - 2021 November 27 Changelog | |||
## 2000 keyboards! :id=qmk-2000th-keyboard | |||
QMK had it's 2000th keyboard submitted during this breaking changes cycle.... and it only _just_ made the cut-off! | |||
```shell | |||
% qmk list-keyboards | wc -l | |||
2003 | |||
``` | |||
From the whole QMK team, a major thankyou to the community for embracing QMK as your preferred keyboard firmware! | |||
## Notable Features :id=notable-features | |||
### Expanded Pointing Device support ([#14343](https://github.com/qmk/qmk_firmware/pull/14343)) :id=expanded-pointing-device | |||
Pointing device support has been reworked and reimplemented to allow for easier integration of new peripherals. | |||
Usages of `POINTING_DEVICE_ENABLE = yes` in `rules.mk` files now need to be accompanied by a corresponding `POINTING_DEVICE_DRIVER = ???` line, specifying which driver to use during the build. Existing keyboards have already been migrated across to the new usage pattern, so most likely no change is required by users. | |||
QMK now has core-supplied support for the following pointing device peripherals: | |||
| `rules.mk` line | Supported device | | |||
|------------------------------------------------|-----------------------------------------| | |||
| `POINTING_DEVICE_DRIVER = analog_joystick` | Analog joysticks, such as PSP joysticks | | |||
| `POINTING_DEVICE_DRIVER = adns5050` | ADNS 5050 sensor | | |||
| `POINTING_DEVICE_DRIVER = adns9800` | ADNS 9800 laser sensor | | |||
| `POINTING_DEVICE_DRIVER = cirque_pinnacle_i2c` | Cirque touchpad, I2C mode | | |||
| `POINTING_DEVICE_DRIVER = cirque_pinnacle_spi` | Cirque Touchpad, SPI mode | | |||
| `POINTING_DEVICE_DRIVER = pimoroni_trackball` | Pimoroni Trackball | | |||
| `POINTING_DEVICE_DRIVER = pmw3360` | PMW 3360 | | |||
See the new documentation for the [Pointing Device](../feature_pointing_device.md) feature for more information on specific configuration for each driver. | |||
### Dynamic Tapping Term ([#11036](https://github.com/qmk/qmk_firmware/pull/11036)) :id=dynamic-tapping-term | |||
For people who are starting out with tapping keys, or for people who think tapping keys don't "feel right", it's sometimes quite difficult to determine what duration of tapping term to use to make things seem natural. | |||
If you're in this stage of discovery, you can now add `DYNAMIC_TAPPING_TERM_ENABLE = yes` to your `rules.mk`, which enables the use of the following keycodes in your keymap: | |||
| Key | Description | | |||
|-----------|-------------------------------------------------------------------------------| | |||
| `DT_PRNT` | "Dynamic Tapping Term Print": Types the current tapping term, in milliseconds | | |||
| `DT_UP` | "Dynamic Tapping Term Up": Increases the current tapping term by 5ms | | |||
| `DT_DOWN` | "Dynamic Tapping Term Down": Decreases the current tapping term by 5ms | | |||
Coupled with the use of `qmk console` or QMK Toolbox to show console output from your keyboard, you can tweak the tapping term dynamically in order to narrow down what "feels right" to you. Once you're happy, drop in the resulting number into your keymap's `config.h` and you're good to go! | |||
### Macros in JSON keymaps ([#14374](https://github.com/qmk/qmk_firmware/pull/14374)) :id=macros-in-keymap-json | |||
You can now define up to 32 macros in your `keymap.json` file, as used by [QMK Configurator](newbs_building_firmware_configurator.md), and `qmk compile`. You can define these macros in a list under the `macros` keyword, like this: | |||
```json | |||
{ | |||
"keyboard": "handwired/my_macropad", | |||
"keymap": "my_keymap", | |||
"macros": [ | |||
[ // first listed is MACRO_0... | |||
{"action":"down", "keycodes": ["LSFT"]}, | |||
"hello world1", | |||
{"action": "up","keycodes": ["LSFT"]} | |||
], | |||
[ // ...then MACRO_1... | |||
{"action":"tap", "keycodes": ["LCTL", "LALT", "DEL"]} | |||
], | |||
[ // ...then MACRO_2... | |||
"ding!", | |||
{"action":"beep"} | |||
], | |||
[ // ...and MACRO_3. | |||
{"action":"tap", "keycodes": ["F1"]}, | |||
{"action":"delay", "duration": "1000"}, | |||
{"action":"tap", "keycodes": ["PGDN"]} | |||
] | |||
], | |||
"layout": "LAYOUT_all", | |||
"layers": [ | |||
["MACRO_0", "MACRO_1", "MACRO_2", "MACRO_3"] | |||
] | |||
} | |||
``` | |||
In due course, [QMK Configurator](https://config.qmk.fm/) will pick up support for defining these in its UI, but for now the json is the only way to define macros. | |||
## Changes Requiring User Action :id=changes-requiring-user-action | |||
### Updated Keyboard Codebases :id=updated-keyboard-codebases | |||
The following keyboards have had their source moved within QMK: | |||
| Old Keyboard Name | New Keyboard Name | | |||
|------------------------|---------------------------------| | |||
| aozora/hotswap | aozora | | |||
| gskt00 | kapcave/gskt00 | | |||
| handwired/dtisaac01 | dtisaac/dtisaac01 | | |||
| kprepublic/bm60poker | kprepublic/bm60hsrgb_poker/rev1 | | |||
| kprepublic/bm60rgb | kprepublic/bm60hsrgb/rev1 | | |||
| kprepublic/bm60rgb_iso | kprepublic/bm60hsrgb_iso/rev1 | | |||
| kprepublic/bm65iso | kprepublic/bm65hsrgb_iso | | |||
| kprepublic/bm68rgb | kprepublic/bm68hsrgb | | |||
| paladin64 | kapcave/paladin64 | | |||
| portal_66 | portal_66/soldered | | |||
| signum/3_0/elitec | signum/3_0 | | |||
| tgr/jane | tgr/jane/v2 | | |||
### Squeezing space out of AVR ([#15243](https://github.com/qmk/qmk_firmware/pull/15243)) :id=squeezing-space-from-avr | |||
The AVR platform has been problematic for some time, in the sense that it is severely resource-constrained -- this makes life difficult for anyone attempting to add new functionality such as display panels to their keymap code. The illustrious Drashna has contributed some newer documentation on how to attempt to free up some space on AVR-based keyboards that are in short supply. | |||
Of course, there are much fewer constraints with ARM chips... ;) | |||
### Require explicit enabling of RGB Matrix modes ([#15018](https://github.com/qmk/qmk_firmware/pull/15018)) :id=explicit-rgb-modes | |||
Related to the previous section -- RGB Matrix modes have now been made to be opt-in, rather than opt-out. As these animations are now opt-in, you may find that your keyboard no longer has all the RGB modes you're expecting -- you may need to configure and recompile your firmware and enable your animations of choice... with any luck they'll still fit in the space available. | |||
Most keyboards keep their original functionality, but over time the QMK maintainers have found that removal of animations ends up being the quickest way to free up space... and some keyboards have had animations such as reactive effects disabled by default in order to still fit within the flash space available. | |||
The full list of configurables to turn specific animations back on can be found at on the [RGB Matrix documentation](feature_rgb_matrix.md#rgb-matrix-effects) page. | |||
### OLED task refactoring ([#14864](https://github.com/qmk/qmk_firmware/pull/14864)) :id=oled-task-refactor | |||
OLED display code was traditionally difficult to override in keymaps as they did not follow the standard pattern of `bool *_kb()` deferring to `bool *_user()` functions, allowing signalling to the higher level that processing had already been done. | |||
This changes the standard OLED drawing function model to allow for a base implementation to be provided by a keyboard, but also still allow for keymap-level overrides without needing to modify the keyboard's code. | |||
The old keymap code went something like this: | |||
```c | |||
void oled_task_user(void) { | |||
// keymap drawing code | |||
} | |||
``` | |||
...but the new keymap code looks like this: | |||
```c | |||
bool oled_task_user(void) { | |||
// keymap drawing code | |||
return false; | |||
} | |||
``` | |||
Keyboard designers should now structure their keyboard-level drawing routines like the following, in order to allow for keymap overrides: | |||
```c | |||
bool oled_task_kb(void) { | |||
// Defer to the keymap if they want to override | |||
if(!oled_task_user()) { return false; } | |||
// default keyboard drawing code | |||
return false; | |||
} | |||
``` | |||
### Bootmagic Full Removal ([#15002](https://github.com/qmk/qmk_firmware/pull/15002)) :id=bootmagic-full-removal | |||
As noted during previous breaking changes cycles, QMK decided to deprecate the full Bootmagic feature and leave Bootmagic Lite as the only remaining option. | |||
This removal is now complete! | |||
This pull request changes the behavior of `BOOTMAGIC_ENABLE` such that specifying `lite` or `full` results in an error, allowing only `yes` or `no`, with `yes` mirroring historical `lite` functionality. | |||
All use of the `lite` keyword within the repository has been migrated to `yes` -- any new submissions using `lite` will now fail to build and should be updated accordingly. | |||
#### Bootmagic Full Deprecation Schedule: Complete! | |||
This is the historical timeline for the behavior of `BOOTMAGIC_ENABLE`: | |||
- (done) From 2021 May 29, setting `BOOTMAGIC_ENABLE = yes` will enable Bootmagic Lite instead of full Bootmagic. | |||
- (done) From 2021 Aug 28, `BOOTMAGIC_ENABLE` must be either `yes`, `lite`, or `no` – setting `BOOTMAGIC_ENABLE = full` will cause compilation to fail. | |||
- (now) From 2021 Nov 27, `BOOTMAGIC_ENABLE` must be either `yes` or `no` – setting `BOOTMAGIC_ENABLE = lite` will cause compilation to fail. | |||
### Remove QWIIC_DRIVERS ([#14174](https://github.com/qmk/qmk_firmware/pull/14174)) :id=remove-qwiic | |||
Due to minimal QWIIC adoption and other options for similar functionality, the QWIIC drivers were removed from QMK. Existing OLED usages have been migrated across to the normal QMK OLED driver instead. | |||
## Notable core changes :id=notable-core | |||
### New MCU Support :id=new-mcu-support | |||
QMK firmware picked up support for a handful of new MCU families, potentially making it a bit easier to source components. | |||
QMK firmware is now no longer limited to AVR and ARM - it also picked up support for our first RISC-V chip, the GD32VF103. | |||
* Add support for RISC-V builds and GD32VF103 MCU ([#12508](https://github.com/qmk/qmk_firmware/pull/12508)) | |||
* Add HT32 support to core ([#14388](https://github.com/qmk/qmk_firmware/pull/14388)) | |||
* Westberrytech pr ([#14422](https://github.com/qmk/qmk_firmware/pull/14422)) | |||
* Initial pass of F405 support ([#14584](https://github.com/qmk/qmk_firmware/pull/14584)) | |||
### EEPROM Changes :id=eeprom-changes | |||
There were a few EEPROM-related changes that landed during this breaking changes cycle, most prominently the long-awaited ability for the Drop boards to gain persistent storage. Any users of the Drop CTRL or Drop ALT should update QMK Toolbox as well -- coupled with a QMK firmware update settings should now be saved. | |||
* massdrop alt/ctrl: support saving into nvm ([#6068](https://github.com/qmk/qmk_firmware/pull/6068)) | |||
* Implement F4 eeprom ([#14195](https://github.com/qmk/qmk_firmware/pull/14195)) | |||
* make the full 4096 bytes of EEPROM work on Teensy 3.6 ([#12947](https://github.com/qmk/qmk_firmware/pull/12947)) | |||
* Further tidy up of STM32 eeprom emulation ([#14591](https://github.com/qmk/qmk_firmware/pull/14591)) | |||
* Enable eeprom with F401xE ld ([#14752](https://github.com/qmk/qmk_firmware/pull/14752)) | |||
### Compilation Database :id=compile-commands | |||
A clang-compatible compilation database generator has been added as an option in order to help development environments such as Visual Studio Code. | |||
Running `qmk generate-compilation-database -kb <yourkb> -km <yourkeymap>` from within the QMK firmware directory will generate a `compile_commands.json` file -- using a compatible IDE will likely see this and correctly start detecting the correct locations for source files as well as type and function information that are relevant to your build. | |||
Do note that switching keyboards will require re-generation of this file. | |||
* New CLI subcommand to create clang-compatible compilation database (`compile_commands.json`) ([#14370](https://github.com/qmk/qmk_firmware/pull/14370)) | |||
* compiledb: query include paths from gcc directly. ([#14462](https://github.com/qmk/qmk_firmware/pull/14462)) | |||
### Codebase restructure and cleanup :id=codebase-restructure | |||
QMK continues on its restructuring journey, in order to make it easier to integrate newer features and add support for new hardware. This quarter's batch of changes include: | |||
* add 'include keyboard_features.mk' into build_keyboard.mk ([#8422](https://github.com/qmk/qmk_firmware/pull/8422)) | |||
* Infer more when building features ([#13890](https://github.com/qmk/qmk_firmware/pull/13890)) | |||
* Move `tmk_core/common/<plat>` ([#13918](https://github.com/qmk/qmk_firmware/pull/13918)) | |||
* Move feature suspend logic out of platform specific code ([#14210](https://github.com/qmk/qmk_firmware/pull/14210)) | |||
* Remove bin/qmk ([#14231](https://github.com/qmk/qmk_firmware/pull/14231)) | |||
* Move Audio drivers from quantum to platform drivers folder ([#14308](https://github.com/qmk/qmk_firmware/pull/14308)) | |||
* Remove Arduino-style `analogRead()` ([#14348](https://github.com/qmk/qmk_firmware/pull/14348)) | |||
* Remove unreferenced IBM4704, Sony NEWS, NeXT keyboard code. ([#14380](https://github.com/qmk/qmk_firmware/pull/14380)) | |||
* Move Bluetooth config to common_features.mk ([#14404](https://github.com/qmk/qmk_firmware/pull/14404)) | |||
* Relocate Adafruit BLE code ([#14530](https://github.com/qmk/qmk_firmware/pull/14530)) | |||
* Change `MK66F18` -> `MK66FX1M0` ([#14659](https://github.com/qmk/qmk_firmware/pull/14659)) | |||
* Remove sysex API ([#14723](https://github.com/qmk/qmk_firmware/pull/14723)) | |||
* Basic keycode overhaul ([#14726](https://github.com/qmk/qmk_firmware/pull/14726)) | |||
* Remove SERIAL_LINK feature ([#14727](https://github.com/qmk/qmk_firmware/pull/14727)) | |||
* Move converter specific tmk_core protocols ([#14743](https://github.com/qmk/qmk_firmware/pull/14743)) | |||
* Align PS/2 GPIO defines ([#14745](https://github.com/qmk/qmk_firmware/pull/14745)) | |||
* Clean up LED/RGB Matrix driver config ([#14760](https://github.com/qmk/qmk_firmware/pull/14760)) | |||
* Update UART driver API ([#14839](https://github.com/qmk/qmk_firmware/pull/14839)) | |||
* Tidy up LCD_ENABLE/visualizer references ([#14855](https://github.com/qmk/qmk_firmware/pull/14855)) | |||
* Remove legacy Makefile functionality ([#14858](https://github.com/qmk/qmk_firmware/pull/14858)) | |||
* Begin to carve out platform/protocol API - Migrate keyboard_* calls ([#14888](https://github.com/qmk/qmk_firmware/pull/14888)) | |||
* Rename platform SRC variable ([#14894](https://github.com/qmk/qmk_firmware/pull/14894)) | |||
* Relocate PS2 code ([#14895](https://github.com/qmk/qmk_firmware/pull/14895)) | |||
* Move USE_CCACHE logic to common location ([#14899](https://github.com/qmk/qmk_firmware/pull/14899)) | |||
* Migrate makefile utilities to sub-directory ([#14917](https://github.com/qmk/qmk_firmware/pull/14917)) | |||
* Remove SERIAL_MOUSE ([#14969](https://github.com/qmk/qmk_firmware/pull/14969)) | |||
* Relocate protocol files within tmk_core/common/ ([#14972](https://github.com/qmk/qmk_firmware/pull/14972)) | |||
* More platform/protocol alignment ([#14976](https://github.com/qmk/qmk_firmware/pull/14976)) | |||
* Fix uart function prototypes ([#15162](https://github.com/qmk/qmk_firmware/pull/15162)) | |||
* Remove deprecated KEYMAP alias ([#15037](https://github.com/qmk/qmk_firmware/pull/15037)) | |||
* Move non-assignment code to post_rules.mk ([#14207](https://github.com/qmk/qmk_firmware/pull/14207)) | |||
* Helix use `post_rules.mk` ([#14216](https://github.com/qmk/qmk_firmware/pull/14216)) | |||
* Make ChibiOS PAL interactions less STM32 specific - Round 2 ([#14456](https://github.com/qmk/qmk_firmware/pull/14456)) | |||
--- | |||
## Full changelist | |||
Core: | |||
* massdrop alt/ctrl: support saving into nvm ([#6068](https://github.com/qmk/qmk_firmware/pull/6068)) | |||
* Made AVR backlight pwm resolution configurable ([#7521](https://github.com/qmk/qmk_firmware/pull/7521)) | |||
* add 'include keyboard_features.mk' into build_keyboard.mk ([#8422](https://github.com/qmk/qmk_firmware/pull/8422)) | |||
* New feature: `DYNAMIC_TAPPING_TERM_ENABLE` ([#11036](https://github.com/qmk/qmk_firmware/pull/11036)) | |||
* Add Retro Shift (Auto Shift for Tap Hold via Retro Tapping) and Custom Auto Shifts ([#11059](https://github.com/qmk/qmk_firmware/pull/11059)) | |||
* Add support for RISC-V builds and GD32VF103 MCU ([#12508](https://github.com/qmk/qmk_firmware/pull/12508)) | |||
* Add Fractal RGB matrix effects ([#12670](https://github.com/qmk/qmk_firmware/pull/12670)) | |||
* Added power tracking api ([#12691](https://github.com/qmk/qmk_firmware/pull/12691)) | |||
* haptic: Feature to disable it when usb port is not configured or suspended. ([#12692](https://github.com/qmk/qmk_firmware/pull/12692)) | |||
* make the full 4096 bytes of EEPROM work on Teensy 3.6 ([#12947](https://github.com/qmk/qmk_firmware/pull/12947)) | |||
* Add Support for USB programmable buttons ([#12950](https://github.com/qmk/qmk_firmware/pull/12950)) | |||
* [Tests] Increase QMK test coverage ([#13789](https://github.com/qmk/qmk_firmware/pull/13789)) | |||
* Add support for ISSI drivers on both sides of a split keyboard ([#13842](https://github.com/qmk/qmk_firmware/pull/13842)) | |||
* Infer more when building features ([#13890](https://github.com/qmk/qmk_firmware/pull/13890)) | |||
* Reimplements WPM feature to be smaller & precise ([#13902](https://github.com/qmk/qmk_firmware/pull/13902)) | |||
* Move `tmk_core/common/<plat>` ([#13918](https://github.com/qmk/qmk_firmware/pull/13918)) | |||
* Improvements to handling of disconnected split keyboards. ([#14033](https://github.com/qmk/qmk_firmware/pull/14033)) | |||
* Add Pixel Rain RGB Matrix effect ([#14155](https://github.com/qmk/qmk_firmware/pull/14155)) | |||
* Remove QWIIC_DRIVERS ([#14174](https://github.com/qmk/qmk_firmware/pull/14174)) | |||
* Add LM() keys to the list of keys disabled by NO_HAPTIC_MOD ([#14181](https://github.com/qmk/qmk_firmware/pull/14181)) | |||
* Implement F4 eeprom ([#14195](https://github.com/qmk/qmk_firmware/pull/14195)) | |||
* define to AUTO_SHIFT_DISABLED_AT_STARTUP ([#14201](https://github.com/qmk/qmk_firmware/pull/14201)) | |||
* Move feature suspend logic out of platform specific code ([#14210](https://github.com/qmk/qmk_firmware/pull/14210)) | |||
* Remove bin/qmk ([#14231](https://github.com/qmk/qmk_firmware/pull/14231)) | |||
* Change keyboard level include guards to `pragma once` ([#14248](https://github.com/qmk/qmk_firmware/pull/14248)) | |||
* i2c_master: Add support for reading/writing to 16-bit registers ([#14289](https://github.com/qmk/qmk_firmware/pull/14289)) | |||
* Move Audio drivers from quantum to platform drivers folder ([#14308](https://github.com/qmk/qmk_firmware/pull/14308)) | |||
* Add RGBW support to PWM and SPI drivers for ChibiOS ([#14327](https://github.com/qmk/qmk_firmware/pull/14327)) | |||
* Rework and expand Pointing Device support ([#14343](https://github.com/qmk/qmk_firmware/pull/14343)) | |||
* Remove Arduino-style `analogRead()` ([#14348](https://github.com/qmk/qmk_firmware/pull/14348)) | |||
* Macros in JSON keymaps ([#14374](https://github.com/qmk/qmk_firmware/pull/14374)) | |||
* Remove unreferenced IBM4704, Sony NEWS, NeXT keyboard code. ([#14380](https://github.com/qmk/qmk_firmware/pull/14380)) | |||
* Add HT32 support to core ([#14388](https://github.com/qmk/qmk_firmware/pull/14388)) | |||
* Align ChibiOS I2C defs with other drivers ([#14399](https://github.com/qmk/qmk_firmware/pull/14399)) | |||
* Move Bluetooth config to common_features.mk ([#14404](https://github.com/qmk/qmk_firmware/pull/14404)) | |||
* Westberrytech pr ([#14422](https://github.com/qmk/qmk_firmware/pull/14422)) | |||
* Refactor use of STM32_SYSCLK ([#14430](https://github.com/qmk/qmk_firmware/pull/14430)) | |||
* Migrate STM32_EEPROM_ENABLE to use EEPROM_DRIVER ([#14433](https://github.com/qmk/qmk_firmware/pull/14433)) | |||
* Refactor use of _STM32_ defines ([#14439](https://github.com/qmk/qmk_firmware/pull/14439)) | |||
* Add i2c defaults for Convert to Proton C ([#14470](https://github.com/qmk/qmk_firmware/pull/14470)) | |||
* Use opendrain pin with external pullup again ([#14474](https://github.com/qmk/qmk_firmware/pull/14474)) | |||
* Add ability to use numpad digits for unicode mode UC_WIN ([#14496](https://github.com/qmk/qmk_firmware/pull/14496)) | |||
* Enable de-ghosting for RGB/LED matrix on all ISSI LED drivers ([#14508](https://github.com/qmk/qmk_firmware/pull/14508)) | |||
* Relocate Adafruit BLE code ([#14530](https://github.com/qmk/qmk_firmware/pull/14530)) | |||
* Initial pass of F405 support ([#14584](https://github.com/qmk/qmk_firmware/pull/14584)) | |||
* Further tidy up of STM32 eeprom emulation ([#14591](https://github.com/qmk/qmk_firmware/pull/14591)) | |||
* Remove GCC version check from song list inclusion ([#14600](https://github.com/qmk/qmk_firmware/pull/14600)) | |||
* Change `MK66F18` -> `MK66FX1M0` ([#14659](https://github.com/qmk/qmk_firmware/pull/14659)) | |||
* Add ifndef to WS2812 timing constraints ([#14678](https://github.com/qmk/qmk_firmware/pull/14678)) | |||
* Reuse of EEPROM debounce logic ([#14699](https://github.com/qmk/qmk_firmware/pull/14699)) | |||
* Remove sysex API ([#14723](https://github.com/qmk/qmk_firmware/pull/14723)) | |||
* Basic keycode overhaul ([#14726](https://github.com/qmk/qmk_firmware/pull/14726)) | |||
* Remove SERIAL_LINK feature ([#14727](https://github.com/qmk/qmk_firmware/pull/14727)) | |||
* Enable CLI flashing via mdloader ([#14729](https://github.com/qmk/qmk_firmware/pull/14729)) | |||
* Correct the Turkish F '?' keycode (TR_QUES) ([#14740](https://github.com/qmk/qmk_firmware/pull/14740)) | |||
* Move converter specific tmk_core protocols ([#14743](https://github.com/qmk/qmk_firmware/pull/14743)) | |||
* Align PS/2 GPIO defines ([#14745](https://github.com/qmk/qmk_firmware/pull/14745)) | |||
* Improve Adafruit BLE configuration defines ([#14749](https://github.com/qmk/qmk_firmware/pull/14749)) | |||
* Enable eeprom with F401xE ld ([#14752](https://github.com/qmk/qmk_firmware/pull/14752)) | |||
* Clean up LED/RGB Matrix driver config ([#14760](https://github.com/qmk/qmk_firmware/pull/14760)) | |||
* Initial USB2422 driver ([#14835](https://github.com/qmk/qmk_firmware/pull/14835)) | |||
* Update UART driver API ([#14839](https://github.com/qmk/qmk_firmware/pull/14839)) | |||
* Split out arm_atsam shift register logic ([#14848](https://github.com/qmk/qmk_firmware/pull/14848)) | |||
* Split out HAPTIC_ENABLE to have separate DRIVER option ([#14854](https://github.com/qmk/qmk_firmware/pull/14854)) | |||
* Tidy up LCD_ENABLE/visualizer references ([#14855](https://github.com/qmk/qmk_firmware/pull/14855)) | |||
* Remove legacy Makefile functionality ([#14858](https://github.com/qmk/qmk_firmware/pull/14858)) | |||
* Add support for deferred executors. ([#14859](https://github.com/qmk/qmk_firmware/pull/14859)) | |||
* Change OLED task function to be boolean ([#14864](https://github.com/qmk/qmk_firmware/pull/14864)) | |||
* Add a new led driver for Keychron's keyboards. ([#14872](https://github.com/qmk/qmk_firmware/pull/14872)) | |||
* Begin to carve out platform/protocol API - Migrate keyboard_* calls ([#14888](https://github.com/qmk/qmk_firmware/pull/14888)) | |||
* Rename platform SRC variable ([#14894](https://github.com/qmk/qmk_firmware/pull/14894)) | |||
* Relocate PS2 code ([#14895](https://github.com/qmk/qmk_firmware/pull/14895)) | |||
* Move USE_CCACHE logic to common location ([#14899](https://github.com/qmk/qmk_firmware/pull/14899)) | |||
* Migrate makefile utilities to sub-directory ([#14917](https://github.com/qmk/qmk_firmware/pull/14917)) | |||
* Remove legacy handling for ErgoDox Infinity handedness ([#14919](https://github.com/qmk/qmk_firmware/pull/14919)) | |||
* Align usbasp flashing behaviour ([#14928](https://github.com/qmk/qmk_firmware/pull/14928)) | |||
* Optimize matrix scanning by removing variable shifts ([#14947](https://github.com/qmk/qmk_firmware/pull/14947)) | |||
* Stop-gap forward-port Drop LED features for CTRL and ALT ([#14967](https://github.com/qmk/qmk_firmware/pull/14967)) | |||
* Remove SERIAL_MOUSE ([#14969](https://github.com/qmk/qmk_firmware/pull/14969)) | |||
* Relocate protocol files within tmk_core/common/ ([#14972](https://github.com/qmk/qmk_firmware/pull/14972)) | |||
* Move LTO logic from common.mk ([#14973](https://github.com/qmk/qmk_firmware/pull/14973)) | |||
* More platform/protocol alignment ([#14976](https://github.com/qmk/qmk_firmware/pull/14976)) | |||
* Add support to persist MD LED framework settings ([#14980](https://github.com/qmk/qmk_firmware/pull/14980)) | |||
* Enable configuration of PWM frequency for IS31FL3733B ([#14983](https://github.com/qmk/qmk_firmware/pull/14983)) | |||
* Remove `BOOTMAGIC_ENABLE = lite` option ([#15002](https://github.com/qmk/qmk_firmware/pull/15002)) | |||
* Manually format develop ([#15003](https://github.com/qmk/qmk_firmware/pull/15003)) | |||
* Require explicit enabling of RGB Matrix modes ([#15018](https://github.com/qmk/qmk_firmware/pull/15018)) | |||
* Remove deprecated KEYMAP alias ([#15037](https://github.com/qmk/qmk_firmware/pull/15037)) | |||
* Fix uart function prototypes ([#15162](https://github.com/qmk/qmk_firmware/pull/15162)) | |||
* Rename RGB fractal ([#15174](https://github.com/qmk/qmk_firmware/pull/15174)) | |||
* Format code according to conventions ([#15195](https://github.com/qmk/qmk_firmware/pull/15195)) | |||
* Format code according to conventions ([#15196](https://github.com/qmk/qmk_firmware/pull/15196)) | |||
* Add uint to char functions ([#15244](https://github.com/qmk/qmk_firmware/pull/15244)) | |||
* [Tests] Increase QMK test coverage take 2 ([#15269](https://github.com/qmk/qmk_firmware/pull/15269)) | |||
* Tidy up adjustable ws2812 timing ([#15299](https://github.com/qmk/qmk_firmware/pull/15299)) | |||
* Add script for performing compilation size regression investigations. ([#15303](https://github.com/qmk/qmk_firmware/pull/15303)) | |||
* WB32F3G71 config migration with removal of unnecessary items. ([#15309](https://github.com/qmk/qmk_firmware/pull/15309)) | |||
* Re-add encoder tests ([#15312](https://github.com/qmk/qmk_firmware/pull/15312)) | |||
CLI: | |||
* Add check for non-assignment code in rules.mk ([#12108](https://github.com/qmk/qmk_firmware/pull/12108)) | |||
* Export list of `develop` PRs to be merged into `master` ([#13944](https://github.com/qmk/qmk_firmware/pull/13944)) | |||
* remove qmk console, which is now part of the global cli ([#14206](https://github.com/qmk/qmk_firmware/pull/14206)) | |||
* New CLI subcommand to create clang-compatible compilation database (`compile_commands.json`) ([#14370](https://github.com/qmk/qmk_firmware/pull/14370)) | |||
* compiledb: query include paths from gcc directly. ([#14462](https://github.com/qmk/qmk_firmware/pull/14462)) | |||
Submodule updates: | |||
* Update to ChibiOS 20.3.4, support builds against trunk ([#14208](https://github.com/qmk/qmk_firmware/pull/14208)) | |||
* Update ChibiOS-Contrib ([#14408](https://github.com/qmk/qmk_firmware/pull/14408)) | |||
* Update ChibiOS-Contrib ([#14419](https://github.com/qmk/qmk_firmware/pull/14419)) | |||
* Purge uGFX. ([#14720](https://github.com/qmk/qmk_firmware/pull/14720)) | |||
Keyboards: | |||
* Add support for PaladinPad, Arya pcb and move keyboards by KapCave into their own directory ([#14194](https://github.com/qmk/qmk_firmware/pull/14194)) | |||
* Move non-assignment code to post_rules.mk ([#14207](https://github.com/qmk/qmk_firmware/pull/14207)) | |||
* Helix use `post_rules.mk` ([#14216](https://github.com/qmk/qmk_firmware/pull/14216)) | |||
* handwired/symmetric70_proto use post_rules.mk ([#14235](https://github.com/qmk/qmk_firmware/pull/14235)) | |||
* Add Adelais PCB. Adelais RGB rev.3, Adelais rev. 4 APM32F103, Adelais AVR rev. 1 ([#14252](https://github.com/qmk/qmk_firmware/pull/14252)) | |||
* GMMK Pro keymap ([#14389](https://github.com/qmk/qmk_firmware/pull/14389)) | |||
* Migrate boston_meetup/2019 away from QWIIC_DRIVERS ([#14413](https://github.com/qmk/qmk_firmware/pull/14413)) | |||
* Migrate hadron away from QWIIC_DRIVERS ([#14415](https://github.com/qmk/qmk_firmware/pull/14415)) | |||
* Enable Proton C defaults for SplitKB Kyria ([#14490](https://github.com/qmk/qmk_firmware/pull/14490)) | |||
* Set USB max power consumption of kint* controllers to 100mA ([#14546](https://github.com/qmk/qmk_firmware/pull/14546)) | |||
* Remove complex `fn_actions` macros ([#14662](https://github.com/qmk/qmk_firmware/pull/14662)) | |||
* New Keyboard: TGR Jane CE ([#14713](https://github.com/qmk/qmk_firmware/pull/14713)) | |||
* Migrate satisfaction75 away from QWIIC_DRIVERS ([#14747](https://github.com/qmk/qmk_firmware/pull/14747)) | |||
* add Lefty keyboard ([#14898](https://github.com/qmk/qmk_firmware/pull/14898)) | |||
* overnumpad controller: Add support for turning off solenoid enable in low power. ([#15021](https://github.com/qmk/qmk_firmware/pull/15021)) | |||
* Reduce compile size for melgeek mach80 ([#15034](https://github.com/qmk/qmk_firmware/pull/15034)) | |||
* Update updated KPrepublic boards to be prepared for the update ([#15040](https://github.com/qmk/qmk_firmware/pull/15040)) | |||
* rename kprepublic bm keyboards to have a standardized naming format ([#15047](https://github.com/qmk/qmk_firmware/pull/15047)) | |||
* matrix/abelx - Update ChibiOS conf files ([#15130](https://github.com/qmk/qmk_firmware/pull/15130)) | |||
* Disable console on Keebio foldkb and iris rev3 ([#15260](https://github.com/qmk/qmk_firmware/pull/15260)) | |||
* Disable console on Sofle default keymap ([#15261](https://github.com/qmk/qmk_firmware/pull/15261)) | |||
* Disable features on SplitKB boards to fit under size ([#15262](https://github.com/qmk/qmk_firmware/pull/15262)) | |||
* Enable LTO on viktus/sp_mini via keymap ([#15263](https://github.com/qmk/qmk_firmware/pull/15263)) | |||
Keyboard fixes: | |||
* Fix number of elements in info.json does not match errors ([#14213](https://github.com/qmk/qmk_firmware/pull/14213)) | |||
* Fix typos from 14248 ([#14261](https://github.com/qmk/qmk_firmware/pull/14261)) | |||
* Stream cheap via fixes/updates ([#14325](https://github.com/qmk/qmk_firmware/pull/14325)) | |||
* Map `PRODUCT` define to `keyboard_name` ([#14372](https://github.com/qmk/qmk_firmware/pull/14372)) | |||
* Fix BT rules for dosa40rgb ([#14497](https://github.com/qmk/qmk_firmware/pull/14497)) | |||
* Fix typo in mechloving adelais header files ([#14590](https://github.com/qmk/qmk_firmware/pull/14590)) | |||
* Fix for mechlovin/adelais/standard_led/arm/rev4 ([#14639](https://github.com/qmk/qmk_firmware/pull/14639)) | |||
* Fix OLED timeout on recent qwiic migrations ([#14775](https://github.com/qmk/qmk_firmware/pull/14775)) | |||
* Fix OLED timeout on satisfaction75 after migration from QWIIC ([#14780](https://github.com/qmk/qmk_firmware/pull/14780)) | |||
* Fix Compile issues for lefty ([#14982](https://github.com/qmk/qmk_firmware/pull/14982)) | |||
* Fix missing return for oled task on Lefty ([#15010](https://github.com/qmk/qmk_firmware/pull/15010)) | |||
* Fix missing return for oled task on Arabica37 ([#15011](https://github.com/qmk/qmk_firmware/pull/15011)) | |||
* Fix missing return for oled task in drashna userspace ([#15012](https://github.com/qmk/qmk_firmware/pull/15012)) | |||
* Fix size issues on pistachio pro via keymap ([#15017](https://github.com/qmk/qmk_firmware/pull/15017)) | |||
* Fix keycode collision in craftwalk keymap ([#15055](https://github.com/qmk/qmk_firmware/pull/15055)) | |||
* Fix compilation issues for yanghu Unicorne ([#15068](https://github.com/qmk/qmk_firmware/pull/15068)) | |||
* Fixup broken build after #15040 ([#15073](https://github.com/qmk/qmk_firmware/pull/15073)) | |||
* Fix compilation issues for Lime ([#15116](https://github.com/qmk/qmk_firmware/pull/15116)) | |||
* Fix additional board sizes for RGB Matrix ([#15170](https://github.com/qmk/qmk_firmware/pull/15170)) | |||
* Fix bandominedoni via keymap compilation ([#15171](https://github.com/qmk/qmk_firmware/pull/15171)) | |||
* Fix handful of boards compiling too large due to RGB matrix changes ([#15184](https://github.com/qmk/qmk_firmware/pull/15184)) | |||
* Fix oled_task_user for ffkeebs/puca ([#15185](https://github.com/qmk/qmk_firmware/pull/15185)) | |||
* More headroom. ([#15301](https://github.com/qmk/qmk_firmware/pull/15301)) | |||
* More headroom. ([#15302](https://github.com/qmk/qmk_firmware/pull/15302)) | |||
Others: | |||
* Clean up some code block languages ([#14434](https://github.com/qmk/qmk_firmware/pull/14434)) | |||
* Clarify "nested" and "rolling" key sequences ([#14655](https://github.com/qmk/qmk_firmware/pull/14655)) | |||
* CI: Create GitHub Actions unit test workflow ([#15223](https://github.com/qmk/qmk_firmware/pull/15223)) | |||
* Squeezing space out of AVR ([#15243](https://github.com/qmk/qmk_firmware/pull/15243)) | |||
Bugs: | |||
* Fix parallel builds w/ LTO on systems where make is not GNU make. ([#13955](https://github.com/qmk/qmk_firmware/pull/13955)) | |||
* fix automatic directory for qmk lint ([#14215](https://github.com/qmk/qmk_firmware/pull/14215)) | |||
* RN42 Bluetooth typo fix ([#14421](https://github.com/qmk/qmk_firmware/pull/14421)) | |||
* fix typo in backlight code from #14439 ([#14442](https://github.com/qmk/qmk_firmware/pull/14442)) | |||
* fix compilation issues with USB programmable buttons ([#14454](https://github.com/qmk/qmk_firmware/pull/14454)) | |||
* Fix descriptor for USB Programmable Buttons ([#14455](https://github.com/qmk/qmk_firmware/pull/14455)) | |||
* Make ChibiOS PAL interactions less STM32 specific - Round 2 ([#14456](https://github.com/qmk/qmk_firmware/pull/14456)) | |||
* fix logical minimum in Programmable Button rdesc ([#14464](https://github.com/qmk/qmk_firmware/pull/14464)) | |||
* Fix i2c_readReg16 ([#14730](https://github.com/qmk/qmk_firmware/pull/14730)) | |||
* Put back eeconfig_update_ functions ([#14751](https://github.com/qmk/qmk_firmware/pull/14751)) | |||
* Fix misplaced endif in led_matrix_drivers.c ([#14785](https://github.com/qmk/qmk_firmware/pull/14785)) | |||
* Fix builds for ChibiOS + Cortex-M0[+] ([#14879](https://github.com/qmk/qmk_firmware/pull/14879)) | |||
* Fix ccache default ([#14906](https://github.com/qmk/qmk_firmware/pull/14906)) | |||
* Fix issues with Oneshot disabling ([#14934](https://github.com/qmk/qmk_firmware/pull/14934)) | |||
* Fix develop after recent changes ([#14975](https://github.com/qmk/qmk_firmware/pull/14975)) | |||
* Fix up issues shown by clang-format of vusb ([#15004](https://github.com/qmk/qmk_firmware/pull/15004)) | |||
* Fix unterminated ifdef in ISSI 3733 driver ([#15014](https://github.com/qmk/qmk_firmware/pull/15014)) | |||
* Fix build failures caused by #12947. ([#15019](https://github.com/qmk/qmk_firmware/pull/15019)) | |||
* Fixup LED matrix. ([#15020](https://github.com/qmk/qmk_firmware/pull/15020)) | |||
* Revert to old init order for host driver ([#15029](https://github.com/qmk/qmk_firmware/pull/15029)) | |||
* Fixup #15029 ([#15031](https://github.com/qmk/qmk_firmware/pull/15031)) | |||
* RISC-V toolchain and picolibc fixes ([#15109](https://github.com/qmk/qmk_firmware/pull/15109)) | |||
* gcc10 LTO - Only specify adhlns assembler options at link time ([#15115](https://github.com/qmk/qmk_firmware/pull/15115)) | |||
* Add needed include to pointing_device.c ([#15167](https://github.com/qmk/qmk_firmware/pull/15167)) | |||
* Fix missing variable for Backlight Breathing ([#15199](https://github.com/qmk/qmk_firmware/pull/15199)) | |||
* Revert backlight pins on function call ([#15205](https://github.com/qmk/qmk_firmware/pull/15205)) | |||
* Fix timer include in override_wiring.c ([#15221](https://github.com/qmk/qmk_firmware/pull/15221)) | |||
* fix broken macro in transport.h ([#15239](https://github.com/qmk/qmk_firmware/pull/15239)) | |||
* Short term bodge for PRODUCT warning ([#15240](https://github.com/qmk/qmk_firmware/pull/15240)) | |||
* Remove use of __flash due to LTO issues ([#15268](https://github.com/qmk/qmk_firmware/pull/15268)) | |||
* Documentation typo fix ([#15298](https://github.com/qmk/qmk_firmware/pull/15298)) | |||
* [Core] Hotfix for HOLD_ON_OTHER_KEY_PRESS after #11059 ([#15307](https://github.com/qmk/qmk_firmware/pull/15307)) | |||
* Fix call to pointing_device_handle_buttons ([#15313](https://github.com/qmk/qmk_firmware/pull/15313)) | |||
* [Develop] Fix ploopy readme typos ([#15316](https://github.com/qmk/qmk_firmware/pull/15316)) |
@ -0,0 +1,74 @@ | |||
## Programmable Button | |||
Programmable button is a feature that can be used to send keys that have no | |||
predefined meaning. | |||
This means they can be processed on the host side by custom software without | |||
colliding without the operating system trying to interpret these keys. | |||
The keycodes are emitted according to the HID usage | |||
"Telephony Device Page" (0x0B), "Programmable button usage" (0x07). | |||
On Linux (> 5.14) they are handled automatically and translated to `KEY_MACRO#` | |||
keycodes. | |||
(Up to `KEY_MACRO30`) | |||
### Enabling Programmable Button support | |||
To enable Programmable Button, add the following line to your keymap’s `rules.mk`: | |||
```c | |||
PROGRAMMABLE_BUTTON_ENABLE = yes | |||
``` | |||
### Mapping | |||
In your keymap you can use the following keycodes to map key presses to Programmable Buttons: | |||
|Key |Description | | |||
|------------------------|----------------------| | |||
|`PROGRAMMABLE_BUTTON_1` |Programmable button 1 | | |||
|`PROGRAMMABLE_BUTTON_2` |Programmable button 2 | | |||
|`PROGRAMMABLE_BUTTON_3` |Programmable button 3 | | |||
|`PROGRAMMABLE_BUTTON_4` |Programmable button 4 | | |||
|`PROGRAMMABLE_BUTTON_5` |Programmable button 5 | | |||
|`PROGRAMMABLE_BUTTON_6` |Programmable button 6 | | |||
|`PROGRAMMABLE_BUTTON_7` |Programmable button 7 | | |||
|`PROGRAMMABLE_BUTTON_8` |Programmable button 8 | | |||
|`PROGRAMMABLE_BUTTON_9` |Programmable button 9 | | |||
|`PROGRAMMABLE_BUTTON_10`|Programmable button 10| | |||
|`PROGRAMMABLE_BUTTON_11`|Programmable button 11| | |||
|`PROGRAMMABLE_BUTTON_12`|Programmable button 12| | |||
|`PROGRAMMABLE_BUTTON_13`|Programmable button 13| | |||
|`PROGRAMMABLE_BUTTON_14`|Programmable button 14| | |||
|`PROGRAMMABLE_BUTTON_15`|Programmable button 15| | |||
|`PROGRAMMABLE_BUTTON_16`|Programmable button 16| | |||
|`PROGRAMMABLE_BUTTON_17`|Programmable button 17| | |||
|`PROGRAMMABLE_BUTTON_18`|Programmable button 18| | |||
|`PROGRAMMABLE_BUTTON_19`|Programmable button 19| | |||
|`PROGRAMMABLE_BUTTON_20`|Programmable button 20| | |||
|`PROGRAMMABLE_BUTTON_21`|Programmable button 21| | |||
|`PROGRAMMABLE_BUTTON_22`|Programmable button 22| | |||
|`PROGRAMMABLE_BUTTON_23`|Programmable button 23| | |||
|`PROGRAMMABLE_BUTTON_24`|Programmable button 24| | |||
|`PROGRAMMABLE_BUTTON_25`|Programmable button 25| | |||
|`PROGRAMMABLE_BUTTON_26`|Programmable button 26| | |||
|`PROGRAMMABLE_BUTTON_27`|Programmable button 27| | |||
|`PROGRAMMABLE_BUTTON_28`|Programmable button 28| | |||
|`PROGRAMMABLE_BUTTON_29`|Programmable button 29| | |||
|`PROGRAMMABLE_BUTTON_30`|Programmable button 30| | |||
|`PROGRAMMABLE_BUTTON_31`|Programmable button 31| | |||
|`PROGRAMMABLE_BUTTON_32`|Programmable button 32| | |||
|`PB_1` to `PB_32` |Aliases for keymaps | | |||
### API | |||
You can also use a dedicated API defined in `programmable_button.h` to interact with this feature: | |||
``` | |||
void programmable_button_clear(void); | |||
void programmable_button_send(void); | |||
void programmable_button_on(uint8_t code); | |||
void programmable_button_off(uint8_t code); | |||
bool programmable_button_is_on(uint8_t code); | |||
uint32_t programmable_button_get_report(void); | |||
void programmable_button_set_report(uint32_t report); | |||
``` |