Merge branch 'master' of http://github.com/jackhumbert/qmk_firmware
commit
57a6828a7a
@ -0,0 +1,94 @@
|
|||||||
|
# auto for anything unspecified
|
||||||
|
* text=auto
|
||||||
|
|
||||||
|
# sources
|
||||||
|
*.c text
|
||||||
|
*.cc text
|
||||||
|
*.cxx text
|
||||||
|
*.cpp text
|
||||||
|
*.c++ text
|
||||||
|
*.hpp text
|
||||||
|
*.h text
|
||||||
|
*.h++ text
|
||||||
|
*.hh text
|
||||||
|
*.bat text
|
||||||
|
*.coffee text
|
||||||
|
*.css text
|
||||||
|
*.htm text
|
||||||
|
*.html text
|
||||||
|
*.inc text
|
||||||
|
*.ini text
|
||||||
|
*.js text
|
||||||
|
*.jsx text
|
||||||
|
*.json text
|
||||||
|
*.less text
|
||||||
|
*.php text
|
||||||
|
*.pl text
|
||||||
|
*.py text
|
||||||
|
*.rb text
|
||||||
|
*.sass text
|
||||||
|
*.scm text
|
||||||
|
*.scss text
|
||||||
|
*.sh text
|
||||||
|
*.sql text
|
||||||
|
*.styl text
|
||||||
|
*.ts text
|
||||||
|
*.xml text
|
||||||
|
*.xhtml text
|
||||||
|
|
||||||
|
# make files (need to always use lf for compatibility with Windows 10 bash)
|
||||||
|
Makefile eol=lf
|
||||||
|
*.mk eol=lf
|
||||||
|
|
||||||
|
# make files (need to always use lf for compatibility with Windows 10 bash)
|
||||||
|
*.sh eol=lf
|
||||||
|
|
||||||
|
# documentation
|
||||||
|
*.markdown text
|
||||||
|
*.md text
|
||||||
|
*.mdwn text
|
||||||
|
*.mdown text
|
||||||
|
*.mkd text
|
||||||
|
*.mkdn text
|
||||||
|
*.mdtxt text
|
||||||
|
*.mdtext text
|
||||||
|
*.txt text
|
||||||
|
AUTHORS text
|
||||||
|
CHANGELOG text
|
||||||
|
CHANGES text
|
||||||
|
CONTRIBUTING text
|
||||||
|
COPYING text
|
||||||
|
INSTALL text
|
||||||
|
license text
|
||||||
|
LICENSE text
|
||||||
|
NEWS text
|
||||||
|
readme text
|
||||||
|
*README* text
|
||||||
|
TODO text
|
||||||
|
|
||||||
|
GRAPHICS
|
||||||
|
*.ai binary
|
||||||
|
*.bmp binary
|
||||||
|
*.eps binary
|
||||||
|
*.gif binary
|
||||||
|
*.ico binary
|
||||||
|
*.jng binary
|
||||||
|
*.jp2 binary
|
||||||
|
*.jpg binary
|
||||||
|
*.jpeg binary
|
||||||
|
*.jpx binary
|
||||||
|
*.jxr binary
|
||||||
|
*.pdf binary
|
||||||
|
*.png binary
|
||||||
|
*.psb binary
|
||||||
|
*.psd binary
|
||||||
|
*.svg text
|
||||||
|
*.svgz binary
|
||||||
|
*.tif binary
|
||||||
|
*.tiff binary
|
||||||
|
*.wbmp binary
|
||||||
|
*.webp binary
|
||||||
|
|
||||||
|
# hex files
|
||||||
|
*.hex binary
|
||||||
|
*.eep binary
|
@ -0,0 +1,226 @@
|
|||||||
|
ifndef VERBOSE
|
||||||
|
.SILENT:
|
||||||
|
endif
|
||||||
|
|
||||||
|
.DEFAULT_GOAL := all
|
||||||
|
|
||||||
|
include common.mk
|
||||||
|
|
||||||
|
ifneq ($(SUBPROJECT),)
|
||||||
|
TARGET ?= $(KEYBOARD)_$(SUBPROJECT)_$(KEYMAP)
|
||||||
|
KEYBOARD_OUTPUT := $(BUILD_DIR)/obj_$(KEYBOARD)_$(SUBPROJECT)
|
||||||
|
else
|
||||||
|
TARGET ?= $(KEYBOARD)_$(KEYMAP)
|
||||||
|
KEYBOARD_OUTPUT := $(BUILD_DIR)/obj_$(KEYBOARD)
|
||||||
|
endif
|
||||||
|
|
||||||
|
# Force expansion
|
||||||
|
TARGET := $(TARGET)
|
||||||
|
|
||||||
|
|
||||||
|
MASTER ?= left
|
||||||
|
ifdef master
|
||||||
|
MASTER = $(master)
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq ($(MASTER),right)
|
||||||
|
OPT_DEFS += -DMASTER_IS_ON_RIGHT
|
||||||
|
else
|
||||||
|
ifneq ($(MASTER),left)
|
||||||
|
$(error MASTER does not have a valid value(left/right))
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
KEYBOARD_PATH := keyboards/$(KEYBOARD)
|
||||||
|
KEYBOARD_C := $(KEYBOARD_PATH)/$(KEYBOARD).c
|
||||||
|
|
||||||
|
ifneq ("$(wildcard $(KEYBOARD_C))","")
|
||||||
|
include $(KEYBOARD_PATH)/rules.mk
|
||||||
|
else
|
||||||
|
$(error "$(KEYBOARD_C)" does not exist)
|
||||||
|
endif
|
||||||
|
|
||||||
|
|
||||||
|
ifneq ($(SUBPROJECT),)
|
||||||
|
SUBPROJECT_PATH := keyboards/$(KEYBOARD)/$(SUBPROJECT)
|
||||||
|
SUBPROJECT_C := $(SUBPROJECT_PATH)/$(SUBPROJECT).c
|
||||||
|
ifneq ("$(wildcard $(SUBPROJECT_C))","")
|
||||||
|
OPT_DEFS += -DSUBPROJECT_$(SUBPROJECT)
|
||||||
|
include $(SUBPROJECT_PATH)/rules.mk
|
||||||
|
else
|
||||||
|
$(error "$(SUBPROJECT_PATH)/$(SUBPROJECT).c" does not exist)
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
|
# We can assume a ChibiOS target When MCU_FAMILY is defined, since it's not used for LUFA
|
||||||
|
ifdef MCU_FAMILY
|
||||||
|
PLATFORM=CHIBIOS
|
||||||
|
else
|
||||||
|
PLATFORM=AVR
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq ($(PLATFORM),CHIBIOS)
|
||||||
|
include $(TMK_PATH)/protocol/chibios.mk
|
||||||
|
include $(TMK_PATH)/chibios.mk
|
||||||
|
OPT_OS = chibios
|
||||||
|
ifneq ("$(wildcard $(SUBPROJECT_PATH)/bootloader_defs.h)","")
|
||||||
|
OPT_DEFS += -include $(SUBPROJECT_PATH)/bootloader_defs.h
|
||||||
|
else ifneq ("$(wildcard $(SUBPROJECT_PATH)/boards/$(BOARD)/bootloader_defs.h)","")
|
||||||
|
OPT_DEFS += -include $(SUBPROJECT_PATH)/boards/$(BOARD)/bootloader_defs.h
|
||||||
|
else ifneq ("$(wildcard $(KEYBOARD_PATH)/bootloader_defs.h)","")
|
||||||
|
OPT_DEFS += -include $(KEYBOARD_PATH)/bootloader_defs.h
|
||||||
|
else ifneq ("$(wildcard $(KEYBOARD_PATH)/boards/$(BOARD)/bootloader_defs.h)","")
|
||||||
|
OPT_DEFS += -include $(KEYBOARD_PATH)/boards/$(BOARD)/bootloader_defs.h
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
|
CONFIG_H = $(KEYBOARD_PATH)/config.h
|
||||||
|
ifneq ($(SUBPROJECT),)
|
||||||
|
ifneq ("$(wildcard $(SUBPROJECT_C))","")
|
||||||
|
CONFIG_H = $(SUBPROJECT_PATH)/config.h
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
|
# Save the defines and includes here, so we don't include any keymap specific ones
|
||||||
|
PROJECT_DEFS := $(OPT_DEFS)
|
||||||
|
PROJECT_INC := $(VPATH) $(EXTRAINCDIRS) $(SUBPROJECT_PATH) $(KEYBOARD_PATH)
|
||||||
|
PROJECT_CONFIG := $(CONFIG_H)
|
||||||
|
|
||||||
|
MAIN_KEYMAP_PATH := $(KEYBOARD_PATH)/keymaps/$(KEYMAP)
|
||||||
|
MAIN_KEYMAP_C := $(MAIN_KEYMAP_PATH)/keymap.c
|
||||||
|
SUBPROJ_KEYMAP_PATH := $(SUBPROJECT_PATH)/keymaps/$(KEYMAP)
|
||||||
|
SUBPROJ_KEYMAP_C := $(SUBPROJ_KEYMAP_PATH)/keymap.c
|
||||||
|
ifneq ("$(wildcard $(SUBPROJ_KEYMAP_C))","")
|
||||||
|
-include $(SUBPROJ_KEYMAP_PATH)/Makefile
|
||||||
|
KEYMAP_C := $(SUBPROJ_KEYMAP_C)
|
||||||
|
KEYMAP_PATH := $(SUBPROJ_KEYMAP_PATH)
|
||||||
|
else ifneq ("$(wildcard $(MAIN_KEYMAP_C))","")
|
||||||
|
-include $(MAIN_KEYMAP_PATH)/Makefile
|
||||||
|
KEYMAP_C := $(MAIN_KEYMAP_C)
|
||||||
|
KEYMAP_PATH := $(MAIN_KEYMAP_PATH)
|
||||||
|
else
|
||||||
|
$(error "$(MAIN_KEYMAP_C)/keymap.c" does not exist)
|
||||||
|
endif
|
||||||
|
|
||||||
|
|
||||||
|
# Object files directory
|
||||||
|
# To put object files in current directory, use a dot (.), do NOT make
|
||||||
|
# this an empty or blank macro!
|
||||||
|
KEYMAP_OUTPUT := $(BUILD_DIR)/obj_$(TARGET)
|
||||||
|
|
||||||
|
|
||||||
|
ifneq ("$(wildcard $(KEYMAP_PATH)/config.h)","")
|
||||||
|
CONFIG_H = $(KEYMAP_PATH)/config.h
|
||||||
|
endif
|
||||||
|
|
||||||
|
# # project specific files
|
||||||
|
SRC += $(KEYBOARD_C) \
|
||||||
|
$(KEYMAP_C) \
|
||||||
|
$(QUANTUM_DIR)/quantum.c \
|
||||||
|
$(QUANTUM_DIR)/keymap_common.c \
|
||||||
|
$(QUANTUM_DIR)/keycode_config.c \
|
||||||
|
$(QUANTUM_DIR)/process_keycode/process_leader.c
|
||||||
|
|
||||||
|
ifneq ($(SUBPROJECT),)
|
||||||
|
SRC += $(SUBPROJECT_C)
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifndef CUSTOM_MATRIX
|
||||||
|
SRC += $(QUANTUM_DIR)/matrix.c
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq ($(strip $(MIDI_ENABLE)), yes)
|
||||||
|
OPT_DEFS += -DMIDI_ENABLE
|
||||||
|
SRC += $(QUANTUM_DIR)/process_keycode/process_midi.c
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq ($(strip $(VIRTSER_ENABLE)), yes)
|
||||||
|
OPT_DEFS += -DVIRTSER_ENABLE
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq ($(strip $(AUDIO_ENABLE)), yes)
|
||||||
|
OPT_DEFS += -DAUDIO_ENABLE
|
||||||
|
SRC += $(QUANTUM_DIR)/process_keycode/process_music.c
|
||||||
|
SRC += $(QUANTUM_DIR)/audio/audio.c
|
||||||
|
SRC += $(QUANTUM_DIR)/audio/voices.c
|
||||||
|
SRC += $(QUANTUM_DIR)/audio/luts.c
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq ($(strip $(UCIS_ENABLE)), yes)
|
||||||
|
OPT_DEFS += -DUCIS_ENABLE
|
||||||
|
UNICODE_ENABLE = yes
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq ($(strip $(UNICODE_ENABLE)), yes)
|
||||||
|
OPT_DEFS += -DUNICODE_ENABLE
|
||||||
|
SRC += $(QUANTUM_DIR)/process_keycode/process_unicode.c
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq ($(strip $(RGBLIGHT_ENABLE)), yes)
|
||||||
|
OPT_DEFS += -DRGBLIGHT_ENABLE
|
||||||
|
SRC += $(QUANTUM_DIR)/light_ws2812.c
|
||||||
|
SRC += $(QUANTUM_DIR)/rgblight.c
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq ($(strip $(TAP_DANCE_ENABLE)), yes)
|
||||||
|
OPT_DEFS += -DTAP_DANCE_ENABLE
|
||||||
|
SRC += $(QUANTUM_DIR)/process_keycode/process_tap_dance.c
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq ($(strip $(SERIAL_LINK_ENABLE)), yes)
|
||||||
|
SRC += $(patsubst $(QUANTUM_PATH)/%,%,$(SERIAL_SRC))
|
||||||
|
OPT_DEFS += $(SERIAL_DEFS)
|
||||||
|
VAPTH += $(SERIAL_PATH)
|
||||||
|
endif
|
||||||
|
|
||||||
|
# Optimize size but this may cause error "relocation truncated to fit"
|
||||||
|
#EXTRALDFLAGS = -Wl,--relax
|
||||||
|
|
||||||
|
# Search Path
|
||||||
|
VPATH += $(KEYMAP_PATH)
|
||||||
|
ifneq ($(SUBPROJECT),)
|
||||||
|
VPATH += $(SUBPROJECT_PATH)
|
||||||
|
endif
|
||||||
|
VPATH += $(KEYBOARD_PATH)
|
||||||
|
VPATH += $(COMMON_VPATH)
|
||||||
|
|
||||||
|
|
||||||
|
include $(TMK_PATH)/common.mk
|
||||||
|
SRC += $(TMK_COMMON_SRC)
|
||||||
|
OPT_DEFS += $(TMK_COMMON_DEFS)
|
||||||
|
EXTRALDFLAGS += $(TMK_COMMON_LDFLAGS)
|
||||||
|
|
||||||
|
ifeq ($(PLATFORM),AVR)
|
||||||
|
include $(TMK_PATH)/protocol/lufa.mk
|
||||||
|
include $(TMK_PATH)/avr.mk
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq ($(strip $(VISUALIZER_ENABLE)), yes)
|
||||||
|
VISUALIZER_DIR = $(QUANTUM_DIR)/visualizer
|
||||||
|
VISUALIZER_PATH = $(QUANTUM_PATH)/visualizer
|
||||||
|
include $(VISUALIZER_PATH)/visualizer.mk
|
||||||
|
endif
|
||||||
|
|
||||||
|
OUTPUTS := $(KEYMAP_OUTPUT) $(KEYBOARD_OUTPUT)
|
||||||
|
$(KEYMAP_OUTPUT)_SRC := $(SRC)
|
||||||
|
$(KEYMAP_OUTPUT)_DEFS := $(OPT_DEFS) -DQMK_KEYBOARD=\"$(KEYBOARD)\" -DQMK_KEYMAP=\"$(KEYMAP)\"
|
||||||
|
$(KEYMAP_OUTPUT)_INC := $(VPATH) $(EXTRAINCDIRS)
|
||||||
|
$(KEYMAP_OUTPUT)_CONFIG := $(CONFIG_H)
|
||||||
|
$(KEYBOARD_OUTPUT)_SRC := $(CHIBISRC)
|
||||||
|
$(KEYBOARD_OUTPUT)_DEFS := $(PROJECT_DEFS)
|
||||||
|
$(KEYBOARD_OUTPUT)_INC := $(PROJECT_INC)
|
||||||
|
$(KEYBOARD_OUTPUT)_CONFIG := $(PROJECT_CONFIG)
|
||||||
|
|
||||||
|
# Default target.
|
||||||
|
all: build sizeafter
|
||||||
|
|
||||||
|
# Change the build target to build a HEX file or a library.
|
||||||
|
build: elf hex
|
||||||
|
#build: elf hex eep lss sym
|
||||||
|
#build: lib
|
||||||
|
|
||||||
|
|
||||||
|
include $(TMK_PATH)/rules.mk
|
||||||
|
|
@ -0,0 +1,57 @@
|
|||||||
|
ifndef VERBOSE
|
||||||
|
.SILENT:
|
||||||
|
endif
|
||||||
|
|
||||||
|
.DEFAULT_GOAL := all
|
||||||
|
|
||||||
|
include common.mk
|
||||||
|
|
||||||
|
TARGET=test/$(TEST)
|
||||||
|
|
||||||
|
GTEST_OUTPUT = $(BUILD_DIR)/gtest
|
||||||
|
|
||||||
|
TEST_OBJ = $(BUILD_DIR)/test_obj
|
||||||
|
|
||||||
|
OUTPUTS := $(TEST_OBJ)/$(TEST) $(GTEST_OUTPUT)
|
||||||
|
|
||||||
|
GTEST_INC := \
|
||||||
|
$(LIB_PATH)/googletest/googletest/include\
|
||||||
|
$(LIB_PATH)/googletest/googlemock/include\
|
||||||
|
|
||||||
|
GTEST_INTERNAL_INC :=\
|
||||||
|
$(LIB_PATH)/googletest/googletest\
|
||||||
|
$(LIB_PATH)/googletest/googlemock
|
||||||
|
|
||||||
|
$(GTEST_OUTPUT)_SRC :=\
|
||||||
|
googletest/src/gtest-all.cc\
|
||||||
|
googletest/src/gtest_main.cc\
|
||||||
|
googlemock/src/gmock-all.cc
|
||||||
|
|
||||||
|
$(GTEST_OUTPUT)_DEFS :=
|
||||||
|
$(GTEST_OUTPUT)_INC := $(GTEST_INC) $(GTEST_INTERNAL_INC)
|
||||||
|
|
||||||
|
LDFLAGS += -lstdc++ -lpthread -shared-libgcc
|
||||||
|
CREATE_MAP := no
|
||||||
|
|
||||||
|
VPATH +=\
|
||||||
|
$(LIB_PATH)/googletest\
|
||||||
|
$(LIB_PATH)/googlemock
|
||||||
|
|
||||||
|
all: elf
|
||||||
|
|
||||||
|
VPATH += $(COMMON_VPATH)
|
||||||
|
|
||||||
|
include $(TMK_PATH)/common.mk
|
||||||
|
include $(QUANTUM_PATH)/serial_link/tests/rules.mk
|
||||||
|
|
||||||
|
$(TEST_OBJ)/$(TEST)_SRC := $($(TEST)_SRC)
|
||||||
|
$(TEST_OBJ)/$(TEST)_INC := $($(TEST)_INC) $(VPATH) $(GTEST_INC)
|
||||||
|
$(TEST_OBJ)/$(TEST)_DEFS := $($(TEST)_DEFS)
|
||||||
|
|
||||||
|
include $(TMK_PATH)/native.mk
|
||||||
|
include $(TMK_PATH)/rules.mk
|
||||||
|
|
||||||
|
|
||||||
|
$(shell mkdir -p $(BUILD_DIR)/test 2>/dev/null)
|
||||||
|
$(shell mkdir -p $(TEST_OBJ) 2>/dev/null)
|
||||||
|
|
@ -0,0 +1,26 @@
|
|||||||
|
include message.mk
|
||||||
|
|
||||||
|
# Directory common source files exist
|
||||||
|
TOP_DIR = .
|
||||||
|
TMK_DIR = tmk_core
|
||||||
|
TMK_PATH = $(TOP_DIR)/$(TMK_DIR)
|
||||||
|
LIB_PATH = $(TOP_DIR)/lib
|
||||||
|
|
||||||
|
QUANTUM_DIR = quantum
|
||||||
|
QUANTUM_PATH = $(TOP_DIR)/$(QUANTUM_DIR)
|
||||||
|
|
||||||
|
BUILD_DIR := $(TOP_DIR)/.build
|
||||||
|
|
||||||
|
SERIAL_DIR := $(QUANTUM_DIR)/serial_link
|
||||||
|
SERIAL_PATH := $(QUANTUM_PATH)/serial_link
|
||||||
|
SERIAL_SRC := $(wildcard $(SERIAL_PATH)/protocol/*.c)
|
||||||
|
SERIAL_SRC += $(wildcard $(SERIAL_PATH)/system/*.c)
|
||||||
|
SERIAL_DEFS += -DSERIAL_LINK_ENABLE
|
||||||
|
|
||||||
|
COMMON_VPATH := $(TOP_DIR)
|
||||||
|
COMMON_VPATH += $(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 += $(SERIAL_PATH)
|
@ -1,70 +1,3 @@
|
|||||||
|
ifndef MAKEFILE_INCLUDED
|
||||||
|
|
||||||
# Target file name (without extension).
|
|
||||||
|
|
||||||
# project specific files
|
|
||||||
SRC = led.c
|
|
||||||
|
|
||||||
# MCU name
|
|
||||||
MCU = atmega32u2
|
|
||||||
|
|
||||||
# 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(+60)
|
|
||||||
OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
|
|
||||||
|
|
||||||
|
|
||||||
# Boot Section Size in *bytes*
|
|
||||||
# Teensy halfKay 512
|
|
||||||
# Teensy++ halfKay 1024
|
|
||||||
# Atmel DFU loader 4096
|
|
||||||
# LUFA bootloader 4096
|
|
||||||
# USBaspLoader 2048
|
|
||||||
OPT_DEFS += -DBOOTLOADER_SIZE=4096
|
|
||||||
|
|
||||||
|
|
||||||
# Build Options
|
|
||||||
# comment out to disable the options.
|
|
||||||
#
|
|
||||||
BOOTMAGIC_ENABLE ?= yes # Virtual DIP switch configuration(+1000)
|
|
||||||
MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700)
|
|
||||||
EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450)
|
|
||||||
CONSOLE_ENABLE ?= yes # Console for debug(+400)
|
|
||||||
COMMAND_ENABLE ?= yes # Commands for debug and configuration
|
|
||||||
#SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend
|
|
||||||
#NKRO_ENABLE = yes # USB Nkey Rollover - not yet supported in LUFA
|
|
||||||
|
|
||||||
ifndef QUANTUM_DIR
|
|
||||||
include ../../Makefile
|
include ../../Makefile
|
||||||
endif
|
endif
|
@ -0,0 +1,66 @@
|
|||||||
|
|
||||||
|
|
||||||
|
# Target file name (without extension).
|
||||||
|
|
||||||
|
# project specific files
|
||||||
|
SRC = led.c
|
||||||
|
|
||||||
|
# MCU name
|
||||||
|
MCU = atmega32u2
|
||||||
|
|
||||||
|
# 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(+60)
|
||||||
|
OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
|
||||||
|
|
||||||
|
|
||||||
|
# Boot Section Size in *bytes*
|
||||||
|
# Teensy halfKay 512
|
||||||
|
# Teensy++ halfKay 1024
|
||||||
|
# Atmel DFU loader 4096
|
||||||
|
# LUFA bootloader 4096
|
||||||
|
# USBaspLoader 2048
|
||||||
|
OPT_DEFS += -DBOOTLOADER_SIZE=4096
|
||||||
|
|
||||||
|
|
||||||
|
# Build Options
|
||||||
|
# comment out to disable the options.
|
||||||
|
#
|
||||||
|
BOOTMAGIC_ENABLE ?= yes # Virtual DIP switch configuration(+1000)
|
||||||
|
MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700)
|
||||||
|
EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450)
|
||||||
|
CONSOLE_ENABLE ?= yes # Console for debug(+400)
|
||||||
|
COMMAND_ENABLE ?= yes # Commands for debug and configuration
|
||||||
|
#SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend
|
||||||
|
#NKRO_ENABLE = yes # USB Nkey Rollover - not yet supported in LUFA
|
@ -0,0 +1,3 @@
|
|||||||
|
ifndef MAKEFILE_INCLUDED
|
||||||
|
include ../../Makefile
|
||||||
|
endif
|
@ -0,0 +1,30 @@
|
|||||||
|
#include "amj60.h"
|
||||||
|
#include "led.h"
|
||||||
|
|
||||||
|
void matrix_init_kb(void) {
|
||||||
|
// put your keyboard start-up code here
|
||||||
|
// runs once when the firmware starts up
|
||||||
|
matrix_init_user();
|
||||||
|
led_init_ports();
|
||||||
|
};
|
||||||
|
|
||||||
|
void matrix_scan_kb(void) {
|
||||||
|
// put your looping keyboard code here
|
||||||
|
// runs every cycle (a lot)
|
||||||
|
matrix_scan_user();
|
||||||
|
};
|
||||||
|
|
||||||
|
void led_init_ports(void) {
|
||||||
|
// * Set our LED pins as output
|
||||||
|
DDRB |= (1<<2);
|
||||||
|
}
|
||||||
|
|
||||||
|
void led_set_kb(uint8_t usb_led) {
|
||||||
|
if (usb_led & (1<<USB_LED_CAPS_LOCK)) {
|
||||||
|
// Turn capslock on
|
||||||
|
PORTB &= ~(1<<2);
|
||||||
|
} else {
|
||||||
|
// Turn capslock off
|
||||||
|
PORTB |= (1<<2);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,153 @@
|
|||||||
|
#ifndef AMJ60_H
|
||||||
|
#define AMJ60_H
|
||||||
|
|
||||||
|
#include "quantum.h"
|
||||||
|
|
||||||
|
// readability
|
||||||
|
#define XXX KC_NO
|
||||||
|
|
||||||
|
/* AMJ60 layout to the best of my knowledge matrix layout
|
||||||
|
* ,-----------------------------------------------------------.
|
||||||
|
* | 00 |01| 02| 03| 04| 05| 06| 07| 08| 09| 0a| 0b| 0c| 0d| 49|
|
||||||
|
* |-----------------------------------------------------------|
|
||||||
|
* | 10 | 11| 12| 13| 14| 15| 16| 17| 18| 19| 1a| 1b| 1c| 1d |
|
||||||
|
* |-----------------------------------------------------------|
|
||||||
|
* | 20 | 21| 22| 23| 24| 25| 26| 27| 28| 29| 2a| 2b| 2d |
|
||||||
|
* |-----------------------------------------------------------|
|
||||||
|
* | 30 | 31| 32| 33| 34| 35| 36| 37| 38| 39| 3a| 3b| 3c | 3d |
|
||||||
|
* |-----------------------------------------------------------|
|
||||||
|
* | 40 | 41 | 42 | 45 | 4a | 4b | 4c | 4d |
|
||||||
|
* `-----------------------------------------------------------'
|
||||||
|
*/
|
||||||
|
#define KEYMAP( \
|
||||||
|
k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, k49,\
|
||||||
|
k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, \
|
||||||
|
k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d, \
|
||||||
|
k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d, \
|
||||||
|
k40, k41, k42, k45, k4a, k4b, k4c, k4d \
|
||||||
|
) \
|
||||||
|
{ \
|
||||||
|
{k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d}, \
|
||||||
|
{k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d}, \
|
||||||
|
{k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d}, \
|
||||||
|
{k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d}, \
|
||||||
|
{k40, k41, k42, XXX, XXX, k45, XXX, XXX, XXX, k49, k4a, k4b, k4c, k4d} \
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* ANSI
|
||||||
|
* ,-----------------------------------------------------------.
|
||||||
|
* | 00 |01| 02| 03| 04| 05| 06| 07| 08| 09| 0a| 0b| 0c| 0d |
|
||||||
|
* |-----------------------------------------------------------|
|
||||||
|
* | 10 | 11| 12| 13| 14| 15| 16| 17| 18| 19| 1a| 1b| 1c| 1d |
|
||||||
|
* |-----------------------------------------------------------|
|
||||||
|
* | 20 | 21| 22| 23| 24| 25| 26| 27| 28| 29| 2a| 2b| 2d |
|
||||||
|
* |-----------------------------------------------------------|
|
||||||
|
* | 30 | 32| 33| 34| 35| 36| 37| 38| 39| 3a| 3b| 3d |
|
||||||
|
* |-----------------------------------------------------------|
|
||||||
|
* | 40 | 41 | 42 | 45 | 4a | 4b | 4c | 4d |
|
||||||
|
* `-----------------------------------------------------------'
|
||||||
|
*/
|
||||||
|
#define KEYMAP_ANSI( \
|
||||||
|
k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, \
|
||||||
|
k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, \
|
||||||
|
k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2d, \
|
||||||
|
k30, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3d, \
|
||||||
|
k40, k41, k42, k45, k4a, k4b, k4c, k4d \
|
||||||
|
) \
|
||||||
|
{ \
|
||||||
|
{k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d}, \
|
||||||
|
{k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d}, \
|
||||||
|
{k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, XXX, k2d}, \
|
||||||
|
{k30, XXX, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, XXX, k3d}, \
|
||||||
|
{k40, k41, k42, XXX, XXX, k45, XXX, XXX, XXX, XXX, k4a, k4b, k4c, k4d} \
|
||||||
|
}
|
||||||
|
|
||||||
|
/* AMJ60 HHKB matrix layout
|
||||||
|
* ,------------------------------------------------------------.
|
||||||
|
* | 00 |01| 02| 03| 04| 05| 06| 07| 08| 09| 0a| 0b| 0c| 0d| 49 |
|
||||||
|
* |------------------------------------------------------------|
|
||||||
|
* | 10 | 11| 12| 13| 14| 15| 16| 17| 18| 19| 1a| 1b| 1c| 1d |
|
||||||
|
* |------------------------------------------------------------|
|
||||||
|
* | 20 | 21| 22| 23| 24| 25| 26| 27| 28| 29| 2a| 2b| 2d |
|
||||||
|
* |------------------------------------------------------------|
|
||||||
|
* | 30 | 32| 33| 34| 35| 36| 37| 38| 39| 3a| 3b| 3d | 3c |
|
||||||
|
* |------------------------------------------------------------|
|
||||||
|
* | 40 | 41 | 42 | 45 | 4a | 4b | 4c | 4d |
|
||||||
|
* `------------------------------------------------------------'
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define KEYMAP_HHKB( \
|
||||||
|
k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, k49, \
|
||||||
|
k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, \
|
||||||
|
k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2d, \
|
||||||
|
k30, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3d, k3c, \
|
||||||
|
k40, k41, k42, k45, k4a, k4b, k4c, k4d \
|
||||||
|
) \
|
||||||
|
{ \
|
||||||
|
{k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d}, \
|
||||||
|
{k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d}, \
|
||||||
|
{k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, XXX, k2d}, \
|
||||||
|
{k30, XXX, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d}, \
|
||||||
|
{k40, k41, k42, XXX, XXX, k45, XXX, XXX, XXX, k49, k4a, k4b, k4c, k4d} \
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ISO
|
||||||
|
* ,-----------------------------------------------------------.
|
||||||
|
* | 00 |01| 02| 03| 04| 05| 06| 07| 08| 09| 0a| 0b| 0c| 0d |
|
||||||
|
* |-----------------------------------------------------------|
|
||||||
|
* | 10 | 11| 12| 13| 14| 15| 16| 17| 18| 19| 1a| 1b| 1c| 1d |
|
||||||
|
* |-----------------------------------------------------------|
|
||||||
|
* | 20 | 21| 22| 23| 24| 25| 26| 27| 28| 29| 2a| 2b| 2c|2d |
|
||||||
|
* |-----------------------------------------------------------|
|
||||||
|
* | 30 | 31| 32| 33| 34| 35| 36| 37| 38| 39| 3a| 3b| 3d |
|
||||||
|
* |-----------------------------------------------------------|
|
||||||
|
* | 40 | 41 | 42 | 45 | 4a | 4b | 4c | 4d |
|
||||||
|
* `-----------------------------------------------------------'
|
||||||
|
*/
|
||||||
|
#define KEYMAP_ISO( \
|
||||||
|
k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, \
|
||||||
|
k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, \
|
||||||
|
k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d, \
|
||||||
|
k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3d, \
|
||||||
|
k40, k41, k42, k45, k4a, k4b, k4c, k4d \
|
||||||
|
) \
|
||||||
|
{ \
|
||||||
|
{k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d}, \
|
||||||
|
{k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d}, \
|
||||||
|
{k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d}, \
|
||||||
|
{k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, XXX}, \
|
||||||
|
{k40, k41, k42, XXX, XXX, k45, XXX, XXX, XXX, XXX, k4a, k4b, k4c, k4d} \
|
||||||
|
}
|
||||||
|
/* ISO w/ split right shift key matrix layout
|
||||||
|
* ,-----------------------------------------------------------.
|
||||||
|
* | 00 |01| 02| 03| 04| 05| 06| 07| 08| 09| 0a| 0b| 0c| 0d |
|
||||||
|
* |-----------------------------------------------------------|
|
||||||
|
* | 10 | 11| 12| 13| 14| 15| 16| 17| 18| 19| 1a| 1b| 1c| 1d |
|
||||||
|
* |-----------------------------------------------------------|
|
||||||
|
* | 20 | 21| 22| 23| 24| 25| 26| 27| 28| 29| 2a| 2b| 2c|2d |
|
||||||
|
* |-----------------------------------------------------------|
|
||||||
|
* | 30 | 31| 32| 33| 34| 35| 36| 37| 38| 39| 3a| 3b| 3d | 3c |
|
||||||
|
* |-----------------------------------------------------------|
|
||||||
|
* | 40 | 41 | 42 | 45 | 4a | 4b | 4c | 4d |
|
||||||
|
* `-----------------------------------------------------------'
|
||||||
|
*/
|
||||||
|
#define KEYMAP_ISO_SPLITRSHIFT( \
|
||||||
|
k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, \
|
||||||
|
k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, \
|
||||||
|
k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d, \
|
||||||
|
k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3d, k3c, \
|
||||||
|
k40, k41, k42, k45, k4a, k4b, k4c, k4d \
|
||||||
|
) \
|
||||||
|
{ \
|
||||||
|
{k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d}, \
|
||||||
|
{k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d}, \
|
||||||
|
{k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d}, \
|
||||||
|
{k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d}, \
|
||||||
|
{k40, k41, k42, XXX, XXX, k45, XXX, XXX, XXX, XXX, k4a, k4b, k4c, k4d} \
|
||||||
|
}
|
||||||
|
|
||||||
|
void matrix_init_user(void);
|
||||||
|
void matrix_scan_user(void);
|
||||||
|
|
||||||
|
#endif
|
@ -0,0 +1,94 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2012 Jun Wako <wakojun@gmail.com>
|
||||||
|
|
||||||
|
This program is free software: you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation, either version 2 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef CONFIG_H
|
||||||
|
#define CONFIG_H
|
||||||
|
|
||||||
|
#include "config_common.h"
|
||||||
|
|
||||||
|
/* USB Device descriptor parameter */
|
||||||
|
#define VENDOR_ID 0xFEED
|
||||||
|
#define PRODUCT_ID 0x6066
|
||||||
|
#define DEVICE_VER 0x0001
|
||||||
|
#define MANUFACTURER Han Chen
|
||||||
|
#define PRODUCT AMJ60
|
||||||
|
#define DESCRIPTION qmk port of AMJ60 PCB
|
||||||
|
|
||||||
|
/* key matrix size */
|
||||||
|
#define MATRIX_ROWS 5
|
||||||
|
#define MATRIX_COLS 14
|
||||||
|
|
||||||
|
// ROWS: Top to bottom, COLS: Left to right
|
||||||
|
|
||||||
|
#define MATRIX_ROW_PINS { F7, F6, F5, F4, D5}
|
||||||
|
#define MATRIX_COL_PINS { F1, F0, E6, C7, C6, B0, D4, B1, B7, B5, B4, D7, D6, B3}
|
||||||
|
#define UNUSED_PINS
|
||||||
|
|
||||||
|
#define BACKLIGHT_PIN B6
|
||||||
|
|
||||||
|
/* COL2ROW or ROW2COL */
|
||||||
|
#define DIODE_DIRECTION COL2ROW
|
||||||
|
|
||||||
|
/* define if matrix has ghost */
|
||||||
|
//#define MATRIX_HAS_GHOST
|
||||||
|
|
||||||
|
/* Set 0 if debouncing isn't needed */
|
||||||
|
#define DEBOUNCING_DELAY 5
|
||||||
|
|
||||||
|
/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
|
||||||
|
#define LOCKING_SUPPORT_ENABLE
|
||||||
|
/* Locking resynchronize hack */
|
||||||
|
#define LOCKING_RESYNC_ENABLE
|
||||||
|
|
||||||
|
/* key combination for command */
|
||||||
|
#define IS_COMMAND() ( \
|
||||||
|
keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
|
||||||
|
)
|
||||||
|
|
||||||
|
/* Backlight configuration
|
||||||
|
*/
|
||||||
|
#define BACKLIGHT_LEVELS 4
|
||||||
|
|
||||||
|
/* Underlight configuration
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define RGB_DI_PIN E2
|
||||||
|
#define RGBLIGHT_TIMER
|
||||||
|
#define RGBLED_NUM 8 // Number of LEDs
|
||||||
|
#define RGBLIGHT_HUE_STEP 10
|
||||||
|
#define RGBLIGHT_SAT_STEP 17
|
||||||
|
#define RGBLIGHT_VAL_STEP 17
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Feature disable options
|
||||||
|
* These options are also useful to firmware size reduction.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* disable debug print */
|
||||||
|
//#define NO_DEBUG
|
||||||
|
|
||||||
|
/* disable print */
|
||||||
|
//#define NO_PRINT
|
||||||
|
|
||||||
|
/* disable action features */
|
||||||
|
//#define NO_ACTION_LAYER
|
||||||
|
//#define NO_ACTION_TAPPING
|
||||||
|
//#define NO_ACTION_ONESHOT
|
||||||
|
//#define NO_ACTION_MACRO
|
||||||
|
//#define NO_ACTION_FUNCTION
|
||||||
|
|
||||||
|
#endif
|
@ -0,0 +1,23 @@
|
|||||||
|
# Build Options
|
||||||
|
# change to "no" to disable the options, or define them in the Makefile in
|
||||||
|
# the appropriate keymap folder that will get included automatically
|
||||||
|
#
|
||||||
|
BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
|
||||||
|
MOUSEKEY_ENABLE = no # Mouse keys(+4700)
|
||||||
|
EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
|
||||||
|
CONSOLE_ENABLE = no # Console for debug(+400)
|
||||||
|
COMMAND_ENABLE = yes # Commands for debug and configuration
|
||||||
|
NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
|
||||||
|
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
|
||||||
|
MIDI_ENABLE = no # MIDI controls
|
||||||
|
AUDIO_ENABLE = no # Audio output on port C6
|
||||||
|
UNICODE_ENABLE = no # Unicode
|
||||||
|
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
|
||||||
|
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
|
||||||
|
|
||||||
|
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
|
||||||
|
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
|
||||||
|
|
||||||
|
ifndef QUANTUM_DIR
|
||||||
|
include ../../../../Makefile
|
||||||
|
endif
|
@ -0,0 +1,42 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# adjust for cpu
|
||||||
|
# -j 16 gave best result on a hyperthreaded quad core core i7
|
||||||
|
|
||||||
|
LIMIT=10
|
||||||
|
THREADS="-j 16"
|
||||||
|
KMAP=iso_split_rshift
|
||||||
|
|
||||||
|
echo "We need sudo later"
|
||||||
|
sudo ls 2>&1 /dev/null
|
||||||
|
|
||||||
|
function wait_bootloader {
|
||||||
|
echo "Waiting for Bootloader..."
|
||||||
|
local STARTTIME=$(date +"%s")
|
||||||
|
local REMIND=0
|
||||||
|
local EXEC=dfu-programmer
|
||||||
|
local TARGET=atmega32u4
|
||||||
|
while true
|
||||||
|
do
|
||||||
|
sudo $EXEC $TARGET get > /dev/null 2>&1
|
||||||
|
[ $? -eq 0 ] && break
|
||||||
|
ENDTIME=$(date +"%s")
|
||||||
|
DURATION=$(($ENDTIME-$STARTTIME))
|
||||||
|
if [ $REMIND -eq 0 -a $DURATION -gt $LIMIT ]
|
||||||
|
then
|
||||||
|
echo "Did you forget to press the reset button?"
|
||||||
|
REMIND=1
|
||||||
|
fi
|
||||||
|
sleep 1
|
||||||
|
done
|
||||||
|
}
|
||||||
|
make clean
|
||||||
|
make KEYMAP=${KMAP} ${THREADS}
|
||||||
|
if [[ $? -eq 0 ]]
|
||||||
|
then
|
||||||
|
echo "please trigger flashing!"
|
||||||
|
wait_bootloader
|
||||||
|
sudo make KEYMAP=${KMAP} dfu ${THREADS}
|
||||||
|
else
|
||||||
|
echo "make failed"
|
||||||
|
exit 77
|
||||||
|
fi
|
@ -0,0 +1,147 @@
|
|||||||
|
// This is the canonical layout file for the Quantum project. If you want to add another keyboard,
|
||||||
|
// this is the style you want to emulate.
|
||||||
|
|
||||||
|
#include "amj60.h"
|
||||||
|
|
||||||
|
// Each layer gets a name for readability, which is then used in the keymap matrix below.
|
||||||
|
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
|
||||||
|
// Layer names don't all need to be of the same length, obviously, and you can also skip them
|
||||||
|
// entirely and just use numbers.
|
||||||
|
#define _DEF 0
|
||||||
|
#define _SPC 1
|
||||||
|
#define _TAB 2
|
||||||
|
#define _SFX 3
|
||||||
|
|
||||||
|
// dual-role shortcuts
|
||||||
|
#define TABDUAL LT(_TAB, KC_TAB)
|
||||||
|
#define CAPSDUAL CTL_T(KC_ESC)
|
||||||
|
#define SPACEDUAL LT(_SPC, KC_SPACE)
|
||||||
|
#define ENTERDUAL CTL_T(KC_ENT)
|
||||||
|
// arrow cluster duality bottom right corner
|
||||||
|
#define ARRLEFT ALT_T(KC_LEFT)
|
||||||
|
#define ARRDOWN GUI_T(KC_DOWN)
|
||||||
|
#define ARRUP SFT_T(KC_UP)
|
||||||
|
#define ARRRIGHT CTL_T(KC_RIGHT)
|
||||||
|
// german brackets
|
||||||
|
#define GER_CUR_L RALT(KC_7) // [
|
||||||
|
#define GER_CUR_R RALT(KC_0) // ]
|
||||||
|
#define GER_PAR_L LSFT(KC_8) // (
|
||||||
|
#define GER_PAR_R LSFT(KC_9) // )
|
||||||
|
#define GER_ANG_L KC_NUBS // <
|
||||||
|
#define GER_ANG_R LSFT(KC_NUBS) // >
|
||||||
|
#define GER_BRC_L RALT(KC_8) // [
|
||||||
|
#define GER_BRC_R RALT(KC_9) // ]
|
||||||
|
|
||||||
|
// increase readability
|
||||||
|
#define _______ KC_TRNS
|
||||||
|
#define XXXXXXX KC_NO
|
||||||
|
|
||||||
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
/* Keymap _DEF: Default Layer
|
||||||
|
* ,-----------------------------------------------------------.
|
||||||
|
* |Grv| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backsp |
|
||||||
|
* |-----------------------------------------------------------|
|
||||||
|
* |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \ | Tab is Fn1
|
||||||
|
* |-----------------------------------------------------------|
|
||||||
|
* |Ctrl | A| S| D| F| G| H| J| K| L| ;| '| Return |
|
||||||
|
* |-----------------------------------------------------------|
|
||||||
|
* |Sft | < | Z| X| C| V| B| N| M| ,| .| /|Shift |Fn2| RShift is UP
|
||||||
|
* |-----------------------------------------------------------|
|
||||||
|
* |Ctrl|Win |Alt | Space/Fn0 |Alt |Win |Menu|RCtl| Gui Menu, RCtrl is
|
||||||
|
* `-----------------------------------------------------------' LEFT DWN RIGHT
|
||||||
|
*/
|
||||||
|
[_DEF] = KEYMAP_ISO_SPLITRSHIFT(
|
||||||
|
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, \
|
||||||
|
TABDUAL, 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, \
|
||||||
|
CAPSDUAL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, ENTERDUAL, \
|
||||||
|
KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, ARRUP, TG(_SFX), \
|
||||||
|
KC_LCTL, KC_LGUI, KC_LALT, SPACEDUAL, KC_RALT, ARRLEFT, ARRDOWN, ARRRIGHT),
|
||||||
|
|
||||||
|
/* Keymap 1: F-and-vim Layer, modified with Space (by holding space)
|
||||||
|
* ,-----------------------------------------------------------.
|
||||||
|
* |PrSc| F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|Delete|
|
||||||
|
* |-----------------------------------------------------------|
|
||||||
|
* | |Paus| Up| [ | ] | | | | ( | ) | | | | |
|
||||||
|
* |-----------------------------------------------------------|
|
||||||
|
* | |Lft|Dwn|Rgt| | |Left|Down|Right|Up| | | PLAY |
|
||||||
|
* |-----------------------------------------------------------|
|
||||||
|
* | | | | | < | > | |M0 | | | | | Vol+ | |
|
||||||
|
* |-----------------------------------------------------------|
|
||||||
|
* | | | | |Alt |Prev|Vol-|Next|
|
||||||
|
* `-----------------------------------------------------------'
|
||||||
|
*/
|
||||||
|
[_SPC] = KEYMAP_ISO_SPLITRSHIFT(
|
||||||
|
KC_PSCR, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, \
|
||||||
|
_______, KC_PAUS, KC_UP, GER_BRC_L, GER_BRC_R, _______, _______, GER_PAR_L, GER_PAR_R, _______, _______, _______, _______, _______, \
|
||||||
|
_______, KC_LEFT, KC_DOWN, KC_RIGHT, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, _______, _______, _______, KC_MPLY, \
|
||||||
|
_______, _______, _______, _______, GER_ANG_L, GER_ANG_R, KC_SPACE, M(0), _______, _______, _______, _______, KC_VOLU, _______, \
|
||||||
|
_______, _______, _______, _______, _______, KC_MPRV, KC_VOLD, KC_MNXT),
|
||||||
|
|
||||||
|
/* Keymap 2: Tab Layer w/ vim pageup, modified with Tab (by holding tab)
|
||||||
|
* ,-----------------------------------------------------------.
|
||||||
|
* |WAKE| | | | | | | | | | | | |Insert| TAB+GRC = WAKE
|
||||||
|
* |-----------------------------------------------------------|
|
||||||
|
* | | | | | | | | | { | } | | | | |
|
||||||
|
* |-----------------------------------------------------------|
|
||||||
|
* | | | | | | |Pos1|PgDn|PgUp|End| | |Retrn |
|
||||||
|
* |-----------------------------------------------------------|
|
||||||
|
* | | | | | | | |AF2| | | | | PgUp | |
|
||||||
|
* |-----------------------------------------------------------|
|
||||||
|
* | | | | |Alt |Pos1|PgDn|End |
|
||||||
|
* `-----------------------------------------------------------'
|
||||||
|
*/
|
||||||
|
[_TAB] = KEYMAP_ISO_SPLITRSHIFT(
|
||||||
|
KC_WAKE, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_INS, \
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, GER_CUR_L, GER_CUR_R, _______, _______, _______, _______, _______, \
|
||||||
|
_______, _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END, _______, _______, _______, KC_ENT, \
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, M(1), _______, _______, _______, _______, KC_PGUP, _______, \
|
||||||
|
_______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_END),
|
||||||
|
|
||||||
|
/* Keymap 3: Split right shift Numpad toggle Layer (by tapping the split rshift key)
|
||||||
|
* ,-----------------------------------------------------------.
|
||||||
|
* |RSET| | | | | | | 7| 8| 9| | | |Backsp |
|
||||||
|
* |-----------------------------------------------------------|
|
||||||
|
* | | | | | | | | 4 | 5 | 6 | | | | \ |
|
||||||
|
* |-----------------------------------------------------------|
|
||||||
|
* | | L | L | | | | | 1 | 2 | 3 | | | Return |
|
||||||
|
* |-----------------------------------------------------------|
|
||||||
|
* | | | L | L | L | L | L | L | | 0 | | /| Up | | All "L"s represent
|
||||||
|
* |-----------------------------------------------------------| LED controlling
|
||||||
|
* |Ctrl|Win |Alt | |Alt |Left|Down|Right|
|
||||||
|
* `-----------------------------------------------------------'
|
||||||
|
*/
|
||||||
|
[_SFX] = KEYMAP_ISO_SPLITRSHIFT(
|
||||||
|
RESET, _______, _______, _______, _______, _______, _______, KC_7, KC_8, KC_9, _______, _______, _______, KC_BSPC, \
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, KC_4, KC_5, KC_6, _______, _______, _______, KC_BSLS, \
|
||||||
|
_______, F(2), F(3), _______, _______, _______, _______, KC_1, KC_2, KC_3, _______, _______, XXXXXXX, KC_ENT, \
|
||||||
|
_______, F(4), F(5), F(6), F(7), F(8), F(9), _______, _______, KC_0, _______, KC_SLSH, KC_UP, _______, \
|
||||||
|
_______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_RGHT),
|
||||||
|
};
|
||||||
|
|
||||||
|
enum function_id {
|
||||||
|
LAUNCH,
|
||||||
|
RGBLED_TOGGLE,
|
||||||
|
};
|
||||||
|
|
||||||
|
const uint16_t PROGMEM fn_actions[] = {
|
||||||
|
[1] = ACTION_FUNCTION(LAUNCH),
|
||||||
|
[10] = ACTION_MODS_TAP_KEY(MOD_LCTL, KC_ENT),
|
||||||
|
};
|
||||||
|
|
||||||
|
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
|
||||||
|
{
|
||||||
|
// MACRODOWN only works in this function
|
||||||
|
switch(id) {
|
||||||
|
case 0:
|
||||||
|
return (record->event.pressed ?
|
||||||
|
MACRO( D(RALT), T(SPC), U(RALT), END )
|
||||||
|
:MACRO( END ));
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
return (record->event.pressed ?
|
||||||
|
MACRO( D(LALT), T(F2), U(LALT), END )
|
||||||
|
:MACRO( END ));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return MACRO_NONE;
|
||||||
|
};
|
@ -0,0 +1,30 @@
|
|||||||
|
toneman77's custom spacefn Layout
|
||||||
|
=====================
|
||||||
|
|
||||||
|
##Quantum MK Firmware
|
||||||
|
For the full Quantum feature list, see the parent readme.md.
|
||||||
|
|
||||||
|
# Features
|
||||||
|
* heavily modified ISO (!) layout with split right shift key
|
||||||
|
* spaceFn
|
||||||
|
* Dual-Role keys:
|
||||||
|
*
|
||||||
|
| Original key | when tapped | when held |
|
||||||
|
| ---------------- | ------------- | ------------- |
|
||||||
|
| Space | Space | layer change |
|
||||||
|
| Caps lock | Escape | Control |
|
||||||
|
| Tab | Tab | layer change |
|
||||||
|
| Enter | Enter | Control |
|
||||||
|
|
||||||
|
* vim-style arrow keys on hjkl (spacefn layer)
|
||||||
|
* corresponding Home/PgDn/PgUp/End on hjkl (tab layer)
|
||||||
|
* bonus arrow keys in the bottom right corner on Alt/Win/Menu/rCtrl/Shift
|
||||||
|
* more bonus arrow keys on wasd (spacefn layer)
|
||||||
|
* media keys prev/next/play/vol+/vol- (spacefn layer)
|
||||||
|
* firmware bootloader button
|
||||||
|
* additional brackets that only work in german layout due to horrible placement
|
||||||
|
in the default qwertz layout
|
||||||
|
|
||||||
|
|
||||||
|
### Additional Credits
|
||||||
|
* visualization of the layers [here](http://www.keyboard-layout-editor.com/#/gists/aba4e4396459ede85bc66a22cee88e48) (without the LED keys)
|
@ -0,0 +1,4 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
git checkout amj60 # gets you on branch amj60
|
||||||
|
git fetch origin # gets you up to date with origin
|
||||||
|
git merge origin/master
|
@ -0,0 +1,57 @@
|
|||||||
|
AMJ60 keyboard firmware
|
||||||
|
======================
|
||||||
|
DIY/Assembled compact 60% keyboard.
|
||||||
|
|
||||||
|
## Quantum MK Firmware
|
||||||
|
|
||||||
|
For the full Quantum feature list, see [the parent readme.md](/readme.md).
|
||||||
|
|
||||||
|
## Building
|
||||||
|
|
||||||
|
Download or clone the whole firmware and navigate to the keyboards/amj60
|
||||||
|
folder. Once your dev env is setup, you'll be able to type `make` to generate
|
||||||
|
your .hex - you can then use `make dfu` to program your PCB once you hit the
|
||||||
|
reset button.
|
||||||
|
|
||||||
|
Depending on which keymap you would like to use, you will have to compile
|
||||||
|
slightly differently.
|
||||||
|
|
||||||
|
### Default
|
||||||
|
To build with the default keymap, simply run `make`.
|
||||||
|
|
||||||
|
### Other Keymaps
|
||||||
|
Several version of keymap are available in advance but you are recommended to
|
||||||
|
define your favorite layout yourself. To define your own keymap create file
|
||||||
|
named `<name>.c` in the keymaps folder, and see keymap document (you can find
|
||||||
|
in top readme.md) and existent keymap files.
|
||||||
|
|
||||||
|
To build the firmware binary hex file with a keymap just do `make` with
|
||||||
|
`KEYMAP` option like:
|
||||||
|
``
|
||||||
|
$ make KEYMAP=[default|jack|<name>]
|
||||||
|
``
|
||||||
|
Keymaps follow the format **__\<name\>.c__** and are stored in the `keymaps`
|
||||||
|
folder.
|
||||||
|
|
||||||
|
## Variations
|
||||||
|
KEYMAP macros for the following layouts are available:
|
||||||
|
|
||||||
|
* default, for all the available, possible keys
|
||||||
|
* ANSI, for 60% ANSI keyboard
|
||||||
|
* ISO
|
||||||
|
* ISO w/ split right shift key
|
||||||
|
* HHKB
|
||||||
|
|
||||||
|
Remark: all but "ISO w/ split right shift key" are untested and were done to the best of my knowledge.
|
||||||
|
|
||||||
|
### Original tmk firmware
|
||||||
|
The original firmware that was used to port to qmk can be found [here](https://github.com/AMJKeyboard/AMJ60).
|
||||||
|
|
||||||
|
## Further information
|
||||||
|
Since information and documentation for this board are sparse, (at least for non-chinese speaking ppl) here is everything that could be found
|
||||||
|
|
||||||
|
* [geekhack discussion](https://geekhack.org/index.php?topic=53070.0)
|
||||||
|
* [chinese discussion](https://www.v2ex.com/t/161887)
|
||||||
|
* Board has [dedicated pinouts](https://i.imgur.com/D0sWhyh.jpg?1) for a bluetooth module
|
||||||
|
* has pins for external power [picture](https://i.imgur.com/00VrtIp.jpg?1).
|
||||||
|
* most information comes from [reddit](https://www.reddit.com/r/MechanicalKeyboards/comments/32oonr/gh60_pcb_for_your_custom_keyboard/)
|
@ -0,0 +1,66 @@
|
|||||||
|
|
||||||
|
# MCU name
|
||||||
|
#MCU = at90usb1287
|
||||||
|
MCU = atmega32u4
|
||||||
|
|
||||||
|
# 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(+60)
|
||||||
|
OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
|
||||||
|
|
||||||
|
|
||||||
|
# Boot Section Size in *bytes*
|
||||||
|
# Teensy halfKay 512
|
||||||
|
# Teensy++ halfKay 1024
|
||||||
|
# Atmel DFU loader 4096
|
||||||
|
# LUFA bootloader 4096
|
||||||
|
# USBaspLoader 2048
|
||||||
|
OPT_DEFS += -DBOOTLOADER_SIZE=4096
|
||||||
|
|
||||||
|
|
||||||
|
# Build Options
|
||||||
|
# comment out to disable the options.
|
||||||
|
#
|
||||||
|
BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration(+1000)
|
||||||
|
MOUSEKEY_ENABLE ?= no # Mouse keys(+4700)
|
||||||
|
EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450)
|
||||||
|
CONSOLE_ENABLE ?= yes # Console for debug(+400)
|
||||||
|
COMMAND_ENABLE ?= yes # Commands for debug and configuration
|
||||||
|
NKRO_ENABLE ?= yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
|
||||||
|
RGBLIGHT_ENABLE ?= yes # Enable keyboard underlight functionality (+4870)
|
||||||
|
BACKLIGHT_ENABLE ?= yes # Enable keyboard backlight functionality (+1150)
|
||||||
|
MIDI_ENABLE ?= no # MIDI controls
|
||||||
|
AUDIO_ENABLE ?= no
|
||||||
|
UNICODE_ENABLE ?= no # Unicode
|
||||||
|
BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID
|
@ -1,74 +1,3 @@
|
|||||||
|
ifndef MAKEFILE_INCLUDED
|
||||||
|
|
||||||
# MCU name
|
|
||||||
#MCU = at90usb1287
|
|
||||||
MCU = atmega32u4
|
|
||||||
|
|
||||||
# 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(+60)
|
|
||||||
OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
|
|
||||||
|
|
||||||
|
|
||||||
# Boot Section Size in *bytes*
|
|
||||||
# Teensy halfKay 512
|
|
||||||
# Teensy++ halfKay 1024
|
|
||||||
# Atmel DFU loader 4096
|
|
||||||
# LUFA bootloader 4096
|
|
||||||
# USBaspLoader 2048
|
|
||||||
OPT_DEFS += -DBOOTLOADER_SIZE=512
|
|
||||||
|
|
||||||
|
|
||||||
# Build Options
|
|
||||||
# change yes to no to disable
|
|
||||||
#
|
|
||||||
BOOTMAGIC_ENABLE ?= yes # Virtual DIP switch configuration(+1000)
|
|
||||||
MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700)
|
|
||||||
EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450)
|
|
||||||
CONSOLE_ENABLE ?= yes # Console for debug(+400)
|
|
||||||
COMMAND_ENABLE ?= yes # Commands for debug and configuration
|
|
||||||
KEYBOARD_LOCK_ENABLE ?= yes # Allow locking of keyboard via magic key
|
|
||||||
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
|
|
||||||
SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend
|
|
||||||
# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
|
|
||||||
NKRO_ENABLE ?= yes # USB Nkey Rollover
|
|
||||||
BACKLIGHT_ENABLE ?= yes # Enable keyboard backlight functionality
|
|
||||||
MIDI_ENABLE ?= no # MIDI controls
|
|
||||||
UNICODE_ENABLE ?= no # Unicode
|
|
||||||
BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID
|
|
||||||
AUDIO_ENABLE ?= no # Audio output on port C6
|
|
||||||
|
|
||||||
ifndef QUANTUM_DIR
|
|
||||||
include ../../Makefile
|
include ../../Makefile
|
||||||
endif
|
endif
|
@ -1,24 +1,133 @@
|
|||||||
arrow_pad keyboard firmware
|
arrow_pad keyboard firmware
|
||||||
======================
|
======================
|
||||||
|
|
||||||
|
## Keyboard Info
|
||||||
|
|
||||||
|
The ArrowPad is a wired conversion that can be made to any stand-alone keypad. It uses two main layers - a standard numpad, and a more advanced arrow cluster navigator.
|
||||||
|
|
||||||
|
The first 24-key ArrowPad was handwired, but the PCB was wired as listed below.
|
||||||
|
|
||||||
|
```
|
||||||
|
<Chip Ref Des> pin <Pin #>
|
||||||
|
<Keycap Name> (Silkscreen Name if different) - <Switch Pin #>
|
||||||
|
|
||||||
|
|
||||||
|
Note:
|
||||||
|
U2 pin 2 is the Num Lock LED and is active low.
|
||||||
|
|
||||||
|
U2 pin 1
|
||||||
|
Clear (Num Lock) - 1
|
||||||
|
Enter - 2
|
||||||
|
Esc (ESC) - 2
|
||||||
|
|
||||||
|
|
||||||
|
U2 pin 3
|
||||||
|
- - 1
|
||||||
|
|
||||||
|
U2 pin 4
|
||||||
|
7 - 2
|
||||||
|
8 - 2
|
||||||
|
9 - 2
|
||||||
|
|
||||||
|
U2 pin 5
|
||||||
|
* - 2
|
||||||
|
Delete (BACK SPACE) - 2
|
||||||
|
|
||||||
|
U2 pin 6
|
||||||
|
1 - 2
|
||||||
|
0 - 2
|
||||||
|
. - 2
|
||||||
|
, - 2
|
||||||
|
|
||||||
|
U2 pin 7
|
||||||
|
4 - 2
|
||||||
|
5 - 2
|
||||||
|
6 - 2
|
||||||
|
|
||||||
|
U2 pin 8
|
||||||
|
Tab - 2
|
||||||
|
= (/) - 2
|
||||||
|
|
||||||
|
U2 pin 13
|
||||||
|
Delete (BACK SPACE) - 1
|
||||||
|
9 - 1
|
||||||
|
6 - 1
|
||||||
|
3 - 1
|
||||||
|
. - 1
|
||||||
|
|
||||||
|
U2 pin 14
|
||||||
|
Tab - 1
|
||||||
|
8 - 1
|
||||||
|
5 - 1
|
||||||
|
2 - 1
|
||||||
|
0 - 1
|
||||||
|
|
||||||
|
U2 pin 15
|
||||||
|
Esc (ESC) - 1
|
||||||
|
= (/) - 1
|
||||||
|
/ (*) - 1
|
||||||
|
7 - 1
|
||||||
|
4 - 1
|
||||||
|
1 - 1
|
||||||
|
+ - 1
|
||||||
|
|
||||||
|
U2 pin 16
|
||||||
|
Enter - 1
|
||||||
|
* (<--) - 1
|
||||||
|
, - 1
|
||||||
|
|
||||||
|
U2 pin 17
|
||||||
|
Fn (#NAME?) - 1
|
||||||
|
- - 2
|
||||||
|
Clear (Num Lock) - 2
|
||||||
|
|
||||||
|
U2 pin 18
|
||||||
|
Fn (#NAME?) - 2
|
||||||
|
* (<--) - 2
|
||||||
|
+ - 2
|
||||||
|
3 - 2
|
||||||
|
2 - 2
|
||||||
|
```
|
||||||
|
|
||||||
|
More info can be found on [GeekHack](https://geekhack.org/index.php?topic=73632.msg1802497#msg1802497)
|
||||||
|
|
||||||
|
The second ArrowPad was a conversion from a 21-key Genovation keypad. It used a 2 row x 11 column matrix.
|
||||||
|
|
||||||
|
```
|
||||||
|
#define KEYMAP( \
|
||||||
|
KM_ESC, KM_TAB, KM_BSL, KM_ARR, \
|
||||||
|
KM_NUM, KM_FSL, KM_AST, KM_MIN, \
|
||||||
|
KM___7, KM___8, KM___9, ___PLS, \
|
||||||
|
KM___4, KM___5, KM___6, KM_PLS, \
|
||||||
|
KM___1, KM___2, KM___3, ___ENT, \
|
||||||
|
KM___0, _____0, KM_DOT, KM_ENT \
|
||||||
|
) { \
|
||||||
|
{ KM_ESC, KM_TAB, KM_BSL, KM_ARR, KM___7, KM___8, KM___9, KM_PLS, KM___1, KM___2, KM___3, }, \
|
||||||
|
{ KM_NUM, KM_FSL, KM_AST, KM_MIN, KM___4, KM___5, KM___6, KM_ENT, KC_NO, KM___0, KM_DOT, }, \
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
## Quantum MK Firmware
|
## Quantum MK Firmware
|
||||||
|
|
||||||
For the full Quantum feature list, see [the parent readme.md](/readme.md).
|
For the full Quantum feature list, see [the parent readme.md](/readme.md).
|
||||||
|
|
||||||
## Building
|
## Building
|
||||||
|
|
||||||
Download or clone the whole firmware and navigate to the keyboards/arrow_pad folder. Once your dev env is setup, you'll be able to type `make` to generate your .hex - you can then use the Teensy Loader to program your .hex file.
|
Download or clone the whole firmware and navigate to the keyboards/arrow_pad folder. Once your dev env is setup, you'll be able to type `make` to generate your .hex - you can then use the Teensy Loader to program your .hex file.
|
||||||
|
|
||||||
Depending on which keymap you would like to use, you will have to compile slightly differently.
|
Depending on which keymap you would like to use, you will have to compile slightly differently.
|
||||||
|
|
||||||
### Default
|
### Default
|
||||||
To build with the default keymap, simply run `make`.
|
To build with the default keymap, simply run `make default`.
|
||||||
|
|
||||||
### Other Keymaps
|
### Other Keymaps
|
||||||
Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create file named `<name>.c` in the keymaps folder, and see keymap document (you can find in top readme.md) and existent keymap files.
|
Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create file named `<name>.c` in the keymaps folder, and see keymap document (you can find in top readme.md) and existent keymap files.
|
||||||
|
|
||||||
To build the firmware binary hex file with a keymap just do `make` with `KEYMAP` option like:
|
To build the firmware binary hex file with a keymap just do `make` with a keymap like this:
|
||||||
|
|
||||||
```
|
```
|
||||||
$ make KEYMAP=[default|jack|<name>]
|
$ make [default|pad_21|pad_24|<name>]
|
||||||
```
|
```
|
||||||
Keymaps follow the format **__\<name\>.c__** and are stored in the `keymaps` folder.
|
|
||||||
|
Keymaps follow the format **__\<name\>.c__** and are stored in the `keymaps` folder.
|
||||||
|
@ -0,0 +1,70 @@
|
|||||||
|
|
||||||
|
|
||||||
|
# MCU name
|
||||||
|
#MCU = at90usb1287
|
||||||
|
MCU = atmega32u4
|
||||||
|
|
||||||
|
# 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(+60)
|
||||||
|
OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
|
||||||
|
|
||||||
|
|
||||||
|
# Boot Section Size in *bytes*
|
||||||
|
# Teensy halfKay 512
|
||||||
|
# Teensy++ halfKay 1024
|
||||||
|
# Atmel DFU loader 4096
|
||||||
|
# LUFA bootloader 4096
|
||||||
|
# USBaspLoader 2048
|
||||||
|
OPT_DEFS += -DBOOTLOADER_SIZE=512
|
||||||
|
|
||||||
|
|
||||||
|
# Build Options
|
||||||
|
# change yes to no to disable
|
||||||
|
#
|
||||||
|
BOOTMAGIC_ENABLE ?= yes # Virtual DIP switch configuration(+1000)
|
||||||
|
MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700)
|
||||||
|
EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450)
|
||||||
|
CONSOLE_ENABLE ?= yes # Console for debug(+400)
|
||||||
|
COMMAND_ENABLE ?= yes # Commands for debug and configuration
|
||||||
|
KEYBOARD_LOCK_ENABLE ?= yes # Allow locking of keyboard via magic key
|
||||||
|
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
|
||||||
|
SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend
|
||||||
|
# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
|
||||||
|
NKRO_ENABLE ?= yes # USB Nkey Rollover
|
||||||
|
BACKLIGHT_ENABLE ?= yes # Enable keyboard backlight functionality
|
||||||
|
MIDI_ENABLE ?= no # MIDI controls
|
||||||
|
UNICODE_ENABLE ?= no # Unicode
|
||||||
|
BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID
|
||||||
|
AUDIO_ENABLE ?= no # Audio output on port C6
|
@ -1,73 +1,3 @@
|
|||||||
|
ifndef MAKEFILE_INCLUDED
|
||||||
|
|
||||||
# MCU name
|
|
||||||
#MCU = at90usb1287
|
|
||||||
MCU = atmega32u4
|
|
||||||
|
|
||||||
# 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(+60)
|
|
||||||
OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
|
|
||||||
|
|
||||||
|
|
||||||
# Boot Section Size in *bytes*
|
|
||||||
# Teensy halfKay 512
|
|
||||||
# Teensy++ halfKay 1024
|
|
||||||
# Atmel DFU loader 4096
|
|
||||||
# LUFA bootloader 4096
|
|
||||||
# USBaspLoader 2048
|
|
||||||
OPT_DEFS += -DBOOTLOADER_SIZE=4096
|
|
||||||
|
|
||||||
# Build Options
|
|
||||||
# change to "no" to disable the options, or define them in the Makefile in
|
|
||||||
# the appropriate keymap folder that will get included automatically
|
|
||||||
#
|
|
||||||
BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration(+1000)
|
|
||||||
MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700)
|
|
||||||
EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450)
|
|
||||||
CONSOLE_ENABLE ?= no # Console for debug(+400)
|
|
||||||
COMMAND_ENABLE ?= yes # Commands for debug and configuration
|
|
||||||
NKRO_ENABLE ?= no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
|
|
||||||
BACKLIGHT_ENABLE ?= yes # Enable keyboard backlight functionality
|
|
||||||
MIDI_ENABLE ?= no # MIDI controls
|
|
||||||
AUDIO_ENABLE ?= no # Audio output on port C6
|
|
||||||
UNICODE_ENABLE ?= no # Unicode
|
|
||||||
BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID
|
|
||||||
RGBLIGHT_ENABLE ?= no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
|
|
||||||
|
|
||||||
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
|
|
||||||
SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend
|
|
||||||
|
|
||||||
ifndef QUANTUM_DIR
|
|
||||||
include ../../Makefile
|
include ../../Makefile
|
||||||
endif
|
endif
|
@ -0,0 +1,69 @@
|
|||||||
|
|
||||||
|
|
||||||
|
# MCU name
|
||||||
|
#MCU = at90usb1287
|
||||||
|
MCU = atmega32u4
|
||||||
|
|
||||||
|
# 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(+60)
|
||||||
|
OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
|
||||||
|
|
||||||
|
|
||||||
|
# Boot Section Size in *bytes*
|
||||||
|
# Teensy halfKay 512
|
||||||
|
# Teensy++ halfKay 1024
|
||||||
|
# Atmel DFU loader 4096
|
||||||
|
# LUFA bootloader 4096
|
||||||
|
# USBaspLoader 2048
|
||||||
|
OPT_DEFS += -DBOOTLOADER_SIZE=4096
|
||||||
|
|
||||||
|
# Build Options
|
||||||
|
# change to "no" to disable the options, or define them in the Makefile in
|
||||||
|
# the appropriate keymap folder that will get included automatically
|
||||||
|
#
|
||||||
|
BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration(+1000)
|
||||||
|
MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700)
|
||||||
|
EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450)
|
||||||
|
CONSOLE_ENABLE ?= no # Console for debug(+400)
|
||||||
|
COMMAND_ENABLE ?= yes # Commands for debug and configuration
|
||||||
|
NKRO_ENABLE ?= no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
|
||||||
|
BACKLIGHT_ENABLE ?= yes # Enable keyboard backlight functionality
|
||||||
|
MIDI_ENABLE ?= no # MIDI controls
|
||||||
|
AUDIO_ENABLE ?= no # Audio output on port C6
|
||||||
|
UNICODE_ENABLE ?= no # Unicode
|
||||||
|
BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID
|
||||||
|
RGBLIGHT_ENABLE ?= no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
|
||||||
|
|
||||||
|
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
|
||||||
|
SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend
|
@ -1,88 +1,3 @@
|
|||||||
|
ifndef MAKEFILE_INCLUDED
|
||||||
|
|
||||||
ifdef TEENSY2
|
|
||||||
OPT_DEFS += -DATREUS_TEENSY2
|
|
||||||
ATRUES_UPLOAD_COMMAND = teensy_loader_cli -w -mmcu=$(MCU) $(TARGET).hex
|
|
||||||
else
|
|
||||||
OPT_DEFS += -DATREUS_ASTAR
|
|
||||||
OPT_DEFS += -DCATERINA_BOOTLOADER
|
|
||||||
ATRUES_UPLOAD_COMMAND = while [ ! -r $(USB) ]; do sleep 1; done; \
|
|
||||||
avrdude -p $(MCU) -c avr109 -U flash:w:$(TARGET).hex -P $(USB)
|
|
||||||
endif
|
|
||||||
|
|
||||||
# MCU name
|
|
||||||
#MCU = at90usb1287
|
|
||||||
MCU = atmega32u4
|
|
||||||
|
|
||||||
# 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(+60)
|
|
||||||
OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
|
|
||||||
|
|
||||||
|
|
||||||
# Boot Section Size in *bytes*
|
|
||||||
# Teensy halfKay 512
|
|
||||||
# Teensy++ halfKay 1024
|
|
||||||
# Atmel DFU loader 4096
|
|
||||||
# LUFA bootloader 4096
|
|
||||||
# USBaspLoader 2048
|
|
||||||
OPT_DEFS += -DBOOTLOADER_SIZE=4096
|
|
||||||
|
|
||||||
|
|
||||||
# Build Options
|
|
||||||
# comment out to disable the options.
|
|
||||||
#
|
|
||||||
#BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000)
|
|
||||||
MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700)
|
|
||||||
EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450)
|
|
||||||
CONSOLE_ENABLE ?= yes # Console for debug(+400)
|
|
||||||
COMMAND_ENABLE ?= yes # Commands for debug and configuration
|
|
||||||
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
|
|
||||||
# SLEEP_LED_ENABLE ?= yes # Breathing sleep LED during USB suspend
|
|
||||||
NKRO_ENABLE ?= yes # USB Nkey Rollover - not yet supported in LUFA
|
|
||||||
# BACKLIGHT_ENABLE ?= yes # Enable keyboard backlight functionality
|
|
||||||
# MIDI_ENABLE ?= YES # MIDI controls
|
|
||||||
UNICODE_ENABLE ?= YES # Unicode
|
|
||||||
# BLUETOOTH_ENABLE ?= yes # Enable Bluetooth with the Adafruit EZ-Key HID
|
|
||||||
|
|
||||||
|
|
||||||
ifndef QUANTUM_DIR
|
|
||||||
include ../../Makefile
|
include ../../Makefile
|
||||||
endif
|
endif
|
||||||
|
|
||||||
USB ?= /dev/cu.usbmodem1411
|
|
||||||
|
|
||||||
upload: build
|
|
||||||
$(ATRUES_UPLOAD_COMMAND)
|
|
||||||
|
|
@ -0,0 +1,48 @@
|
|||||||
|
#include "atreus.h"
|
||||||
|
|
||||||
|
// Each layer gets a name for readability, which is then used in the keymap matrix below.
|
||||||
|
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
|
||||||
|
// Layer names don't all need to be of the same length, obviously, and you can also skip them
|
||||||
|
// entirely and just use numbers.
|
||||||
|
#define _QW 0
|
||||||
|
#define _RS 1
|
||||||
|
#define _LW 2
|
||||||
|
|
||||||
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
[_QW] = { /* Qwerty */
|
||||||
|
{KC_Q, KC_W, KC_E, KC_R, KC_T, KC_TRNS, KC_Y, KC_U, KC_I, KC_O, KC_P },
|
||||||
|
{KC_A, KC_S, KC_D, KC_F, KC_G, KC_TRNS, KC_H, KC_J, KC_K, KC_L, KC_SCLN },
|
||||||
|
{KC_Z, KC_X, KC_C, KC_V, KC_B, KC_LALT, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH },
|
||||||
|
{KC_ESC, KC_TAB, KC_LGUI, KC_LSFT, KC_BSPC, KC_LCTL, KC_SPC, MO(_RS), KC_MINS, KC_QUOT, KC_ENT }
|
||||||
|
},
|
||||||
|
[_RS] = { /* [> RAISE <] */
|
||||||
|
{KC_EXLM, KC_AT, KC_LCBR, KC_RCBR, KC_PIPE, KC_TRNS, KC_PGUP, KC_7, KC_8, KC_9, KC_ASTR},
|
||||||
|
{KC_HASH, KC_DLR, KC_LPRN, KC_RPRN, KC_GRV, KC_TRNS, KC_PGDN, KC_4, KC_5, KC_6, KC_PLUS},
|
||||||
|
{KC_PERC, KC_CIRC, KC_LBRC, KC_RBRC, KC_TILD, KC_LALT, KC_AMPR, KC_1, KC_2, KC_3, KC_BSLS},
|
||||||
|
{TG(_LW), KC_INS, KC_LGUI, KC_LSFT, KC_BSPC, KC_LCTL, KC_SPC, KC_TRNS, KC_DOT, KC_0, KC_EQL}
|
||||||
|
},
|
||||||
|
[_LW] = { /* [> LOWER <] */
|
||||||
|
{KC_INS, KC_HOME, KC_UP, KC_END, KC_PGUP, KC_TRNS, KC_UP, KC_F7, KC_F8, KC_F9, KC_F10},
|
||||||
|
{KC_DELT, KC_LEFT, KC_DOWN, KC_RGHT, KC_DOWN, KC_TRNS, KC_DOWN, KC_F4, KC_F5, KC_F6, KC_F11},
|
||||||
|
{KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LALT, KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F12},
|
||||||
|
{KC_TRNS, KC_TRNS, KC_LGUI, KC_LSFT, KC_BSPC, KC_LCTL, KC_SPC, DF(_QW), KC_TRNS, KC_TRNS, RESET}
|
||||||
|
}};
|
||||||
|
|
||||||
|
const uint16_t PROGMEM fn_actions[] = {
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
|
||||||
|
{
|
||||||
|
// MACRODOWN only works in this function
|
||||||
|
switch(id) {
|
||||||
|
case 0:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
register_code(KC_RSFT);
|
||||||
|
} else {
|
||||||
|
unregister_code(KC_RSFT);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return MACRO_NONE;
|
||||||
|
};
|
@ -0,0 +1,96 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2012 Jun Wako <wakojun@gmail.com>
|
||||||
|
|
||||||
|
This program is free software: you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation, either version 2 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef CONFIG_H
|
||||||
|
#define CONFIG_H
|
||||||
|
|
||||||
|
#include "config_common.h"
|
||||||
|
|
||||||
|
|
||||||
|
/* Make Overloaded Keys switch faster */
|
||||||
|
#define TAPPING_TERM 150
|
||||||
|
|
||||||
|
/* USB Device descriptor parameter */
|
||||||
|
|
||||||
|
#define VENDOR_ID 0xFEED
|
||||||
|
#define PRODUCT_ID 0x6060
|
||||||
|
#define DEVICE_VER 0x0001
|
||||||
|
#define MANUFACTURER Technomancy
|
||||||
|
#define PRODUCT Atreus
|
||||||
|
#define DESCRIPTION q.m.k. keyboard firmware for Atreus
|
||||||
|
|
||||||
|
/* key matrix size */
|
||||||
|
#define MATRIX_ROWS 4
|
||||||
|
#define MATRIX_COLS 11
|
||||||
|
|
||||||
|
// Change this to how you wired your keyboard
|
||||||
|
// COLS: Left to right, ROWS: Top to bottom
|
||||||
|
#if defined(ATREUS_ASTAR)
|
||||||
|
# define MATRIX_ROW_PINS { D0, D1, D3, D2 }
|
||||||
|
#if defined(PCBDOWN)
|
||||||
|
# define MATRIX_COL_PINS { B7, D6, F7, F6, B6, D4, E6, B4, B5, C6, D7 }
|
||||||
|
#else
|
||||||
|
# define MATRIX_COL_PINS { D7, C6, B5, B4, E6, D4, B6, F6, F7, D6, B7 }
|
||||||
|
#endif
|
||||||
|
# define UNUSED_PINS
|
||||||
|
#elif defined(ATREUS_TEENSY2)
|
||||||
|
# define MATRIX_ROW_PINS { D0, D1, D2, D3 }
|
||||||
|
# define MATRIX_COL_PINS { F6, F5, F4, B7, B6, B5, B4, B3, B2, B1, B0 }
|
||||||
|
# define UNUSED_PINS
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* COL2ROW or ROW2COL */
|
||||||
|
#define DIODE_DIRECTION COL2ROW
|
||||||
|
|
||||||
|
/* define if matrix has ghost */
|
||||||
|
//#define MATRIX_HAS_GHOST
|
||||||
|
|
||||||
|
/* number of backlight levels */
|
||||||
|
//#define BACKLIGHT_LEVELS 3
|
||||||
|
|
||||||
|
/* Set 0 if debouncing isn't needed */
|
||||||
|
#define DEBOUNCING_DELAY 5
|
||||||
|
|
||||||
|
/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
|
||||||
|
#define LOCKING_SUPPORT_ENABLE
|
||||||
|
/* Locking resynchronize hack */
|
||||||
|
#define LOCKING_RESYNC_ENABLE
|
||||||
|
|
||||||
|
/* key combination for command */
|
||||||
|
#define IS_COMMAND() ( \
|
||||||
|
keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
|
||||||
|
)
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Feature disable options
|
||||||
|
* These options are also useful to firmware size reduction.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* disable debug print */
|
||||||
|
//#define NO_DEBUG
|
||||||
|
|
||||||
|
/* disable print */
|
||||||
|
//#define NO_PRINT
|
||||||
|
|
||||||
|
/* disable action features */
|
||||||
|
//#define NO_ACTION_LAYER
|
||||||
|
//#define NO_ACTION_TAPPING
|
||||||
|
//#define NO_ACTION_ONESHOT
|
||||||
|
//#define NO_ACTION_MACRO
|
||||||
|
//#define NO_ACTION_FUNCTION
|
||||||
|
|
||||||
|
#endif
|
@ -0,0 +1,61 @@
|
|||||||
|
// this is the style you want to emulate.
|
||||||
|
// This is the canonical layout file for the Quantum project. If you want to add another keyboard,
|
||||||
|
|
||||||
|
#include "atreus.h"
|
||||||
|
|
||||||
|
// Each layer gets a name for readability, which is then used in the keymap matrix below.
|
||||||
|
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
|
||||||
|
// Layer names don't all need to be of the same length, obviously, and you can also skip them
|
||||||
|
// entirely and just use numbers.
|
||||||
|
#define BASE 0
|
||||||
|
#define NUMS 1
|
||||||
|
#define MOUS 2
|
||||||
|
|
||||||
|
// Some quick aliases, just to make it look pretty
|
||||||
|
#define _______ KC_TRNS
|
||||||
|
#define XXXXXXX KC_NO
|
||||||
|
|
||||||
|
|
||||||
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
[BASE] = KEYMAP( /* Qwerty */
|
||||||
|
KC_Q , KC_W , KC_E , KC_R , KC_T , KC_Y , KC_U , KC_I , KC_O , KC_P ,
|
||||||
|
KC_A , KC_S , KC_D , KC_F , KC_G , KC_H , KC_J , KC_K , KC_L , KC_SCLN ,
|
||||||
|
SFT_T(KC_Z), KC_X , KC_C , KC_V , KC_B , KC_N , KC_M , KC_COMM, KC_DOT , SFT_T(KC_QUOT),
|
||||||
|
KC_LCTL , KC_LALT, KC_LALT, KC_LGUI, KC_BSPC, KC_ESC, KC_ENT, KC_SPC, F(NUMS), KC_RALT, KC_SLSH, KC_BSLS ),
|
||||||
|
|
||||||
|
[NUMS] = KEYMAP( /* Numbers / Arrows / Symbols */
|
||||||
|
KC_GRV , KC_1 , KC_2 , KC_3 , KC_4 , KC_LPRN, KC_RPRN, KC_MINS, KC_EQL , KC_LBRC,
|
||||||
|
KC_TAB , KC_5 , KC_6 , KC_7 , KC_8 , KC_LEFT, KC_DOWN, KC_UP , KC_RGHT, KC_RBRC,
|
||||||
|
_______, KC_9 , KC_0 , KC_DOT , KC_COMM, KC_HOME, KC_PGDN, KC_PGUP, KC_END , _______,
|
||||||
|
_______, _______, _______, _______, KC_DEL , F(MOUS), _______, _______, _______, _______, _______, _______),
|
||||||
|
|
||||||
|
[MOUS] = KEYMAP( /* Mouse and Media Keys */
|
||||||
|
KC_SLCK, KC_PAUSE, KC_F11 , KC_F10 , KC_F9 , KC_F8 , KC_F7 , KC_F6 , KC_F5 , KC_F4,
|
||||||
|
KC_VOLD, KC_ACL0 , KC_ACL1, KC_ACL2, KC_VOLU, KC_MS_L, KC_MS_D, KC_MS_U, KC_MS_R, KC_F3,
|
||||||
|
KC_MUTE, KC_MPRV , KC_MPLY, KC_MNXT, KC_MUTE, KC_WH_R, KC_WH_U, KC_WH_D, KC_WH_L, KC_F2,
|
||||||
|
_______, _______ , _______, _______, _______, _______, _______, KC_BTN1, F(BASE), RESET , KC_F12 , KC_F1)
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// I prefer this layer switching strategy to the TG and MO functions.
|
||||||
|
// so that I can get out of mouse mode just by tapping/holding my base layer FN key.
|
||||||
|
const uint16_t PROGMEM fn_actions[] = {
|
||||||
|
[BASE] = ACTION_LAYER_OFF(2, 1), // switch back to layer 0
|
||||||
|
[NUMS] = ACTION_LAYER_MOMENTARY(1), // to Fn overlay
|
||||||
|
[MOUS] = ACTION_LAYER_ON(2, 1) // switch to layer 2
|
||||||
|
};
|
||||||
|
|
||||||
|
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
|
||||||
|
{
|
||||||
|
// MACRODOWN only works in this function
|
||||||
|
switch(id) {
|
||||||
|
case 0:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
register_code(KC_RSFT);
|
||||||
|
} else {
|
||||||
|
unregister_code(KC_RSFT);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return MACRO_NONE;
|
||||||
|
};
|
Binary file not shown.
After Width: | Height: | Size: 74 KiB |
Binary file not shown.
After Width: | Height: | Size: 89 KiB |
Binary file not shown.
After Width: | Height: | Size: 90 KiB |
Binary file not shown.
After Width: | Height: | Size: 71 KiB |
Binary file not shown.
After Width: | Height: | Size: 72 KiB |
@ -0,0 +1,94 @@
|
|||||||
|
/*
|
||||||
|
Config file - Atreus QMK with replicaJunction layout
|
||||||
|
|
||||||
|
This program is free software: you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation, either version 2 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef CONFIG_H
|
||||||
|
#define CONFIG_H
|
||||||
|
|
||||||
|
#include "config_common.h"
|
||||||
|
|
||||||
|
/* USB Device descriptor parameter */
|
||||||
|
|
||||||
|
#define VENDOR_ID 0xFEED
|
||||||
|
#define PRODUCT_ID 0x6060
|
||||||
|
#define DEVICE_VER 0x0001
|
||||||
|
#define MANUFACTURER Technomancy
|
||||||
|
#define PRODUCT Atreus
|
||||||
|
#define DESCRIPTION q.m.k. keyboard firmware for Atreus
|
||||||
|
|
||||||
|
/* key matrix size */
|
||||||
|
#define MATRIX_ROWS 4
|
||||||
|
#define MATRIX_COLS 11
|
||||||
|
|
||||||
|
// Change this to how you wired your keyboard
|
||||||
|
// COLS: Left to right, ROWS: Top to bottom
|
||||||
|
#if defined(ATREUS_ASTAR)
|
||||||
|
# define MATRIX_ROW_PINS { D0, D1, D3, D2 }
|
||||||
|
# define MATRIX_COL_PINS { D7, C6, B5, B4, E6, D4, B6, F6, F7, D6, B7 }
|
||||||
|
# define UNUSED_PINS
|
||||||
|
#elif defined(ATREUS_TEENSY2)
|
||||||
|
# define MATRIX_ROW_PINS { D0, D1, D2, D3 }
|
||||||
|
# define MATRIX_COL_PINS { F6, F5, F4, B7, B6, B5, B4, B3, B2, B1, B0 }
|
||||||
|
# define UNUSED_PINS
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* COL2ROW or ROW2COL */
|
||||||
|
#define DIODE_DIRECTION COL2ROW
|
||||||
|
|
||||||
|
/* define if matrix has ghost */
|
||||||
|
//#define MATRIX_HAS_GHOST
|
||||||
|
|
||||||
|
/* number of backlight levels */
|
||||||
|
//#define BACKLIGHT_LEVELS 3
|
||||||
|
|
||||||
|
/* Set 0 if debouncing isn't needed */
|
||||||
|
// Default: 5
|
||||||
|
#define DEBOUNCING_DELAY 6
|
||||||
|
|
||||||
|
// I don't have any locking keys, so I don't need these features
|
||||||
|
|
||||||
|
/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
|
||||||
|
//#define LOCKING_SUPPORT_ENABLE
|
||||||
|
/* Locking resynchronize hack */
|
||||||
|
//#define LOCKING_RESYNC_ENABLE
|
||||||
|
|
||||||
|
/* key combination for command */
|
||||||
|
#define IS_COMMAND() ( \
|
||||||
|
keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
|
||||||
|
)
|
||||||
|
|
||||||
|
/* Prevent modifiers from sticking when switching layers */
|
||||||
|
#define PREVENT_STUCK_MODIFIERS
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Feature disable options
|
||||||
|
* These options are also useful to firmware size reduction.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* disable debug print */
|
||||||
|
//#define NO_DEBUG
|
||||||
|
|
||||||
|
/* disable print */
|
||||||
|
//#define NO_PRINT
|
||||||
|
|
||||||
|
/* disable action features */
|
||||||
|
//#define NO_ACTION_LAYER
|
||||||
|
//#define NO_ACTION_TAPPING
|
||||||
|
//#define NO_ACTION_ONESHOT
|
||||||
|
//#define NO_ACTION_MACRO
|
||||||
|
//#define NO_ACTION_FUNCTION
|
||||||
|
|
||||||
|
#endif
|
@ -0,0 +1,107 @@
|
|||||||
|
/*
|
||||||
|
* Keyboard: Atreus
|
||||||
|
* Keymap: replicaJunction
|
||||||
|
* Version: 0.3
|
||||||
|
*
|
||||||
|
* This keymap is designed to complement my Ergodox keyboard layout, found in keyboards/ergodox_ez.
|
||||||
|
* The Atreus keyboard is a 40% board whose design was heavily influenced by the Ergodox. I now
|
||||||
|
* have both keyboards, so I've designed these layouts in an effort to make switching between the
|
||||||
|
* two as easy as possible.
|
||||||
|
*
|
||||||
|
* Clearly, the Atreus is the limiting factor in this equation, so I've taken heavy advantage of
|
||||||
|
* function and dual-role keys.
|
||||||
|
*
|
||||||
|
* The default key layout in this keymap is Colemak-ModDH. Information on that layout can be found
|
||||||
|
* here: https://colemakmods.github.io/mod-dh/
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "atreus.h"
|
||||||
|
|
||||||
|
// Each layer gets a name for readability, which is then used in the keymap matrix below.
|
||||||
|
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
|
||||||
|
// Layer names don't all need to be of the same length, obviously, and you can also skip them
|
||||||
|
// entirely and just use numbers.
|
||||||
|
|
||||||
|
// Note that whatever is set as layer 0 will be the default layer of the keyboard.
|
||||||
|
|
||||||
|
#define _CO 0 // Colemak
|
||||||
|
#define _QW 1 // QWERTY
|
||||||
|
#define _GA 2 // Gaming
|
||||||
|
#define _EX 3 // Extend
|
||||||
|
#define _NU 4 // Numpad
|
||||||
|
#define _FN 5 // Function
|
||||||
|
|
||||||
|
// Some quick aliases, just to make it look pretty
|
||||||
|
#define _______ KC_TRNS
|
||||||
|
#define KCX_CA LCTL(KC_LALT)
|
||||||
|
#define KCX_CS LCTL(KC_LSFT)
|
||||||
|
#define KCX_CSA LCTL(LSFT(KC_LALT))
|
||||||
|
#define KCX_LST LSFT(KC_TAB)
|
||||||
|
#define KX_COPY LCTL(KC_C)
|
||||||
|
#define KX_CUT LCTL(KC_X)
|
||||||
|
#define KX_PAST LCTL(KC_V)
|
||||||
|
#define KX_UNDO LCTL(KC_Z)
|
||||||
|
|
||||||
|
; // This doesn't do anything. It's just for VSCode because its syntax highlighting is weird for the above #define statements.
|
||||||
|
|
||||||
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
[_CO] = KEYMAP(
|
||||||
|
KC_Q, KC_W, KC_F, KC_P, KC_B, KC_J, KC_L, KC_U, KC_Y, KC_SCLN,
|
||||||
|
KC_A, KC_R, KC_S, KC_T, KC_G, KC_M, KC_N, KC_E, KC_I, KC_O,
|
||||||
|
SFT_T(KC_Z), KC_X, KC_C, KC_D, KC_V, KC_K, KC_H, KC_COMM, KC_DOT, SFT_T(KC_SLSH),
|
||||||
|
KC_ESC, KC_LGUI, KC_TAB, KC_LALT, KC_BSPC, CTL_T(KC_DEL), ALT_T(KC_ENT), LT(_NU, KC_SPC), MO(_EX), KC_MINS, KC_QUOT, KC_EQL
|
||||||
|
),
|
||||||
|
|
||||||
|
[_QW] = KEYMAP( /* Qwerty */
|
||||||
|
KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,
|
||||||
|
KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,
|
||||||
|
SFT_T(KC_Z), KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, SFT_T(KC_SLSH),
|
||||||
|
KC_ESC, KC_LGUI, KC_TAB, KC_LALT, KC_BSPC, CTL_T(KC_DEL), ALT_T(KC_ENT), LT(_NU, KC_SPC), MO(_EX), KC_MINS, KC_QUOT, KC_EQL
|
||||||
|
),
|
||||||
|
|
||||||
|
[_EX] = KEYMAP( /* Extend */
|
||||||
|
KC_CAPS, _______, _______, _______, _______, KC_PGUP, KC_HOME, KC_UP, KC_END, KC_DEL,
|
||||||
|
_______, KC_LGUI, KC_LALT, KC_LCTL, _______, KC_PGDN, KC_LEFT, KC_DOWN, KC_RGHT, KC_BSPC,
|
||||||
|
_______, KX_CUT, KX_COPY, _______, KX_PAST, _______, KC_TAB, KCX_LST, _______, KC_INSERT,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, KC_SPC, _______, _______, _______, KC_PSCR
|
||||||
|
),
|
||||||
|
|
||||||
|
[_NU] = KEYMAP( /* Numbers and symbols */
|
||||||
|
KC_EXLM, KC_AT, KC_LCBR, KC_RCBR, KC_AMPR, KC_SLSH, KC_7, KC_8, KC_9, KC_ASTR,
|
||||||
|
KC_HASH, KC_DLR, KC_LPRN, KC_RPRN, KC_TILD, KC_PIPE, KC_4, KC_5, KC_6, KC_MINS,
|
||||||
|
KC_PERC, KC_CIRC, KC_LBRC, KC_RBRC, KC_GRV, KC_BSLS, KC_1, KC_2, KC_3, KC_PLUS,
|
||||||
|
_______, TG(_GA), _______, MO(_FN), _______, _______, _______, _______, KC_0, KC_DOT, KC_EQL, _______
|
||||||
|
),
|
||||||
|
|
||||||
|
[_FN] = KEYMAP( /* Functions */
|
||||||
|
KC_DEL, KC_HOME, KC_UP, KC_END, KC_PGUP, _______, KC_F7, KC_F8, KC_F9, KC_F10,
|
||||||
|
KC_BSPC, KC_LEFT, KC_DOWN, KC_RGHT, KC_DOWN, _______, KC_F4, KC_F5, KC_F6, KC_F11,
|
||||||
|
_______, KC_VOLU, KC_MUTE, KC_VOLD, KC_MPLY, _______, KC_F1, KC_F2, KC_F3, KC_F12,
|
||||||
|
_______, _______, _______, _______, KC_MSTP, _______, _______, _______, KC_NO, DF(_CO), DF(_QW), RESET
|
||||||
|
),
|
||||||
|
|
||||||
|
[_GA] = KEYMAP( /* Gaming */
|
||||||
|
_______, _______, _______, _______, _______, _______, KC_WH_U, KC_MS_U, KC_WH_D, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, KC_MS_L, KC_MS_D, KC_MS_R, _______,
|
||||||
|
KC_Z, _______, _______, _______, _______, KC_BTN3, _______, KC_MS_D, _______, _______,
|
||||||
|
_______, TG(_GA), _______, KC_LSFT, KC_SPC, KC_BSPC, KC_BTN2, KC_BTN1, _______, _______, _______, _______
|
||||||
|
)};
|
||||||
|
|
||||||
|
const uint16_t PROGMEM fn_actions[] = {
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
|
||||||
|
{
|
||||||
|
// MACRODOWN only works in this function
|
||||||
|
switch(id) {
|
||||||
|
case 0:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
register_code(KC_RSFT);
|
||||||
|
} else {
|
||||||
|
unregister_code(KC_RSFT);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return MACRO_NONE;
|
||||||
|
};
|
@ -0,0 +1,57 @@
|
|||||||
|
# replicaJunction - Atreus Layout #
|
||||||
|
|
||||||
|
This layout is designed to make the absolute most out of the Atreus 40% keyboard.
|
||||||
|
|
||||||
|
I was enchanted with the idea of the Atreus keyboard after using my Ergodox for several months. I wanted something of a similar form factor that was easily portable, so I could bring and transport a keyboard to my workplace without much hassle. After building the Atreus keyboard, though, I realized very quickly that the 40% form factor requires a lot more creativity than a full-size keyboard (even one as strangely-shaped as the Ergodox).
|
||||||
|
|
||||||
|
The default Atreus keyboard layout provides all the necessary keys in order to function with the keyboard, but as a programmer, I needed quicker access to just about everything. I noticed that the default layer didn't include any dual-role keys, and so I started on my journey to build my perfect layout for the Atreus.
|
||||||
|
|
||||||
|
I won't claim that this layout is perfect for everyone. It does make several significant changes from the "normal" Atreus layout. In my own use, though, I've found this keyboard turbocharges my Atreus, and gives it the power of a full-size keyboard without the size.
|
||||||
|
|
||||||
|
## Base Layer ##
|
||||||
|
|
||||||
|
![Atreus base layout](atreus-replica-base-colemakdh.png)
|
||||||
|
|
||||||
|
The letters on this layout are arranged in the [Colemak Mod-DH layout](https://colemakmods.github.io/mod-dh/).
|
||||||
|
|
||||||
|
Note that there are four dual-purpose keys: Shift (Backspace), Ctrl (Delete), Alt (Enter), and Space (Number layer). In QMK, these dual-role keys can be made to hold their primary key by double-tapping the key and holding on the second tap. For example, if I wanted to insert a long string of Spaces, I would tap the Space key, then tap it again and hold. A single press and hold would trigger the secondary function of the key instead.
|
||||||
|
|
||||||
|
The secondary Alt on the left bottom row exists to provide a single-hand Alt+Tab shortcut, which would take two rows otherwise.
|
||||||
|
|
||||||
|
## Extend Layer ##
|
||||||
|
|
||||||
|
![Atreus extend layer](atreus-replica-extend.png)
|
||||||
|
|
||||||
|
This layout is designed primarily for keyboard navigation. Arrow keys are easily accessible under the right hand (a welcome change from the original Atreus layout, which places them under the left hand), along with Home/End and PgUp/PgDn.
|
||||||
|
|
||||||
|
Modifiers are also placed under the home row of the left hand. One of the single keyboard actions I use most is Shift+Ctrl+Left/Right to select a whole word; this layer makes those keypresses simple by adding the Ctrl key in an easy-to-reach location.
|
||||||
|
|
||||||
|
For the common Ctrl shortcuts, I also added some hotkeys to this layer over the letter keys they are associated with. This gives the Extend key some extra utility by letting it "feel" like a Ctrl key in some cases.
|
||||||
|
|
||||||
|
The Space key exists to prevent going from this layer directly into the Number layer. Similarly, the Shift key on the left pinky helps make sure that the normal letter (Z) doesn't fire.
|
||||||
|
|
||||||
|
## Number and Symbol Layer ##
|
||||||
|
|
||||||
|
![Atreus number and symbol layer](atreus-replica-num.png)
|
||||||
|
|
||||||
|
This layer provides the only way of accessing number keys on this keyboard, since it's too small for its own number row. Note that even though they are laid out in the number pad fashion, they send the "regular" number keystrokes. Games and programs that specifically use NumPad keys are not supported in this layout at the moment.
|
||||||
|
|
||||||
|
This layer also provides plenty of symbol shortcuts. Most of these can be accessed through other means (like Shift+8 for the asterisk), but having shortcut keys to them makes for one less keypress, which adds up quickly when using these symbols on a regular basis. I've been through many revisions of this concept on my Ergodox as well as the Atreus, and I've finally arrived at this layout as the one that provides the symbols I need most frequently in places I can think to expect them. The Ordinary layout from the Ergodox-EZ keyboard in this repository was a large influence in this design.
|
||||||
|
|
||||||
|
## Function Layer ##
|
||||||
|
|
||||||
|
![Atreus function layer](atreus-replica-function.png)
|
||||||
|
|
||||||
|
Function keys (F1-F12) are on this layer, as well as some more generic "functions" such as media keys. I've also set up a mirror image of the arrows from the Extend layer in case I need to use these with my left hand, but I don't do this very often.
|
||||||
|
|
||||||
|
The reset key is on this layer, as well as a toggle from Colemak to QWERTY and back. The QWERTY layer is not currently documented, but it is functionally identical to the base layer except for letter positions.
|
||||||
|
|
||||||
|
## Gaming Layer ##
|
||||||
|
|
||||||
|
![Atreus gaming layer](atreus-replica-game.png)
|
||||||
|
|
||||||
|
This is a small layer developed to allow some simple gameplay without a mouse. This layer is a toggle (from the Number layer), so it is designed to stay on while in use.
|
||||||
|
|
||||||
|
The keys on the left hand bring Space into the left thumb's reach, as well as overriding the dual-role Shift with its standard function (Z in both QWERTY and in Colemak). This allows easy Shift presses without blocking the Z key, commonly used in games.
|
||||||
|
|
||||||
|
I would probably not consider this a hard-core gaming keyboard, and this layout does have the huge problem of blocking access to the number keys, but for more casual games, it plays quite well. I've used it quite a bit on Minecraft, for example, and I'm quite pleased with it.
|
@ -0,0 +1,89 @@
|
|||||||
|
// This is the personal keymap of Ian Sterling (@xyverz). It is based on the keymap by
|
||||||
|
// Chris Gerber (@gerbercj), with the addition of persistent layers like the Planck and
|
||||||
|
// Preonic keyboards by Jack Humbert.
|
||||||
|
|
||||||
|
#include "atreus.h"
|
||||||
|
#include "action_layer.h"
|
||||||
|
#include "eeconfig.h"
|
||||||
|
|
||||||
|
extern keymap_config_t keymap_config;
|
||||||
|
|
||||||
|
// Each layer gets a name for readability, which is then used in the keymap matrix below.
|
||||||
|
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
|
||||||
|
// Layer names don't all need to be of the same length, obviously, and you can also skip them
|
||||||
|
// entirely and just use numbers.
|
||||||
|
#define _DV 0
|
||||||
|
#define _QW 1
|
||||||
|
#define _CM 2
|
||||||
|
#define _L1 3
|
||||||
|
#define _L2 4
|
||||||
|
|
||||||
|
// Macro name shortcuts
|
||||||
|
#define DVORAK M(_DV)
|
||||||
|
#define QWERTY M(_QW)
|
||||||
|
#define COLEMAK M(_CM)
|
||||||
|
|
||||||
|
|
||||||
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
[_DV] = { /* Dvorak */
|
||||||
|
{KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_NO, KC_F, KC_G, KC_C, KC_R, KC_L },
|
||||||
|
{KC_A, KC_O, KC_E, KC_U, KC_I, KC_NO, KC_D, KC_H, KC_T, KC_N, KC_S },
|
||||||
|
{SFT_T(KC_SCLN), KC_Q, KC_J, KC_K, KC_X, CTL_T(KC_DEL), KC_B, KC_M, KC_W, KC_V, SFT_T(KC_Z) },
|
||||||
|
{KC_ESC, KC_TAB, KC_LGUI, MO(_L2), KC_BSPC, ALT_T(KC_ENT), KC_SPC, MO(_L1), KC_MINS, KC_SLSH, KC_EQL}
|
||||||
|
},
|
||||||
|
[_QW] = { /* Qwerty */
|
||||||
|
{KC_Q, KC_W, KC_E, KC_R, KC_T, KC_NO, KC_Y, KC_U, KC_I, KC_O, KC_P },
|
||||||
|
{KC_A, KC_S, KC_D, KC_F, KC_G, KC_NO, KC_H, KC_J, KC_K, KC_L, KC_SCLN},
|
||||||
|
{SFT_T(KC_Z), KC_X, KC_C, KC_V, KC_B, CTL_T(KC_DEL), KC_N, KC_M, KC_COMM, KC_DOT, SFT_T(KC_SLSH) },
|
||||||
|
{KC_ESC, KC_TAB, KC_LGUI, MO(_L2), KC_BSPC, ALT_T(KC_ENT), KC_SPC, MO(_L1), KC_MINS, KC_QUOT, KC_ENT}
|
||||||
|
},
|
||||||
|
[_CM] = { /* Colemak */
|
||||||
|
{KC_Q, KC_W, KC_F, KC_P, KC_G, KC_NO, KC_J, KC_L, KC_U, KC_Y, KC_SCLN},
|
||||||
|
{KC_A, KC_R, KC_S, KC_T, KC_D, KC_NO, KC_H, KC_N, KC_E, KC_I, KC_O },
|
||||||
|
{SFT_T(KC_Z), KC_X, KC_C, KC_V, KC_B, CTL_T(KC_DEL), KC_K, KC_M, KC_COMM, KC_DOT, SFT_T(KC_SLSH) },
|
||||||
|
{KC_ESC, KC_TAB, KC_LGUI, MO(_L2), KC_BSPC, ALT_T(KC_ENT), KC_SPC, MO(_L1), KC_MINS, KC_QUOT, KC_ENT}
|
||||||
|
},
|
||||||
|
[_L1] = { /* LAYER 1 */
|
||||||
|
{KC_1, KC_2, KC_3, KC_4, KC_5, KC_NO, KC_6, KC_7, KC_8, KC_9, KC_0 },
|
||||||
|
{KC_TAB, KC_INS, KC_UP, KC_DEL, KC_HOME, KC_NO, KC_PGUP, KC_MUTE, KC_VOLD, KC_VOLU, KC_EQL },
|
||||||
|
{KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_END, KC_LCTL, KC_PGDN, KC_MPRV, KC_MPLY, KC_MNXT, KC_BSLS},
|
||||||
|
{KC_TRNS, KC_GRV, KC_LGUI, KC_TRNS, KC_DEL, KC_LALT, KC_SPC, KC_TRNS, KC_LBRC, KC_RBRC, KC_ENT }
|
||||||
|
},
|
||||||
|
[_L2] = { /* LAYER 2 */
|
||||||
|
{KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_NO, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN},
|
||||||
|
{KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_NO, KC_TRNS, KC_F6, KC_F7, KC_F8, KC_PLUS},
|
||||||
|
{KC_TRNS, KC_TRNS, DVORAK, QWERTY, COLEMAK, KC_LCTL, KC_TRNS, KC_F9, KC_F10, KC_F11, KC_F12 },
|
||||||
|
{KC_TRNS, KC_TRNS, KC_LGUI, KC_TRNS, KC_BSPC, KC_LALT, KC_SPC, KC_TRNS, LSFT(KC_LBRC), LSFT(KC_RBRC), RESET}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
const uint16_t PROGMEM fn_actions[] = {
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
void persistant_default_layer_set(uint16_t default_layer) {
|
||||||
|
eeconfig_update_default_layer(default_layer);
|
||||||
|
default_layer_set(default_layer);
|
||||||
|
}
|
||||||
|
|
||||||
|
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
|
||||||
|
{
|
||||||
|
switch(id) {
|
||||||
|
case _DV:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
persistant_default_layer_set(1UL<<_DV);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case _QW:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
persistant_default_layer_set(1UL<<_QW);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case _CM:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
persistant_default_layer_set(1UL<<_CM);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return MACRO_NONE;
|
||||||
|
};
|
@ -0,0 +1,82 @@
|
|||||||
|
|
||||||
|
|
||||||
|
ifdef TEENSY2
|
||||||
|
OPT_DEFS += -DATREUS_TEENSY2
|
||||||
|
ATREUS_UPLOAD_COMMAND = teensy_loader_cli -w -mmcu=$(MCU) $(TARGET).hex
|
||||||
|
else
|
||||||
|
OPT_DEFS += -DATREUS_ASTAR
|
||||||
|
OPT_DEFS += -DCATERINA_BOOTLOADER
|
||||||
|
ATREUS_UPLOAD_COMMAND = while [ ! -r $(USB) ]; do sleep 1; done; \
|
||||||
|
avrdude -p $(MCU) -c avr109 -U flash:w:$(TARGET).hex -P $(USB)
|
||||||
|
endif
|
||||||
|
|
||||||
|
# MCU name
|
||||||
|
#MCU = at90usb1287
|
||||||
|
MCU = atmega32u4
|
||||||
|
|
||||||
|
# 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(+60)
|
||||||
|
OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
|
||||||
|
|
||||||
|
|
||||||
|
# Boot Section Size in *bytes*
|
||||||
|
# Teensy halfKay 512
|
||||||
|
# Teensy++ halfKay 1024
|
||||||
|
# Atmel DFU loader 4096
|
||||||
|
# LUFA bootloader 4096
|
||||||
|
# USBaspLoader 2048
|
||||||
|
OPT_DEFS += -DBOOTLOADER_SIZE=4096
|
||||||
|
|
||||||
|
|
||||||
|
# Build Options
|
||||||
|
# comment out to disable the options.
|
||||||
|
#
|
||||||
|
#BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000)
|
||||||
|
MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700)
|
||||||
|
EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450)
|
||||||
|
CONSOLE_ENABLE ?= yes # Console for debug(+400)
|
||||||
|
COMMAND_ENABLE ?= yes # Commands for debug and configuration
|
||||||
|
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
|
||||||
|
# SLEEP_LED_ENABLE ?= yes # Breathing sleep LED during USB suspend
|
||||||
|
NKRO_ENABLE ?= yes # USB Nkey Rollover - not yet supported in LUFA
|
||||||
|
# BACKLIGHT_ENABLE ?= yes # Enable keyboard backlight functionality
|
||||||
|
# MIDI_ENABLE ?= YES # MIDI controls
|
||||||
|
UNICODE_ENABLE ?= YES # Unicode
|
||||||
|
# BLUETOOTH_ENABLE ?= yes # Enable Bluetooth with the Adafruit EZ-Key HID
|
||||||
|
|
||||||
|
USB ?= /dev/cu.usbmodem1411
|
||||||
|
|
||||||
|
upload: build
|
||||||
|
$(ATREUS_UPLOAD_COMMAND)
|
@ -1,72 +1,3 @@
|
|||||||
|
ifndef MAKEFILE_INCLUDED
|
||||||
|
|
||||||
# MCU name
|
|
||||||
#MCU = at90usb1287
|
|
||||||
MCU = atmega32u4
|
|
||||||
|
|
||||||
# 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(+60)
|
|
||||||
OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
|
|
||||||
|
|
||||||
|
|
||||||
# Boot Section Size in *bytes*
|
|
||||||
# Teensy halfKay 512
|
|
||||||
# Teensy++ halfKay 1024
|
|
||||||
# Atmel DFU loader 4096
|
|
||||||
# LUFA bootloader 4096
|
|
||||||
# USBaspLoader 2048
|
|
||||||
OPT_DEFS += -DBOOTLOADER_SIZE=512
|
|
||||||
|
|
||||||
|
|
||||||
# Build Options
|
|
||||||
# comment out to disable the options.
|
|
||||||
#
|
|
||||||
BOOTMAGIC_ENABLE ?= yes # Virtual DIP switch configuration(+1000)
|
|
||||||
MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700)
|
|
||||||
EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450)
|
|
||||||
CONSOLE_ENABLE ?= yes # Console for debug(+400)
|
|
||||||
COMMAND_ENABLE ?= yes # Commands for debug and configuration
|
|
||||||
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
|
|
||||||
# SLEEP_LED_ENABLE ?= yes # Breathing sleep LED during USB suspend
|
|
||||||
# NKRO_ENABLE ?= yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
|
|
||||||
# BACKLIGHT_ENABLE ?= yes # Enable keyboard backlight functionality
|
|
||||||
# MIDI_ENABLE ?= YES # MIDI controls
|
|
||||||
# UNICODE_ENABLE ?= YES # Unicode
|
|
||||||
# BLUETOOTH_ENABLE ?= yes # Enable Bluetooth with the Adafruit EZ-Key HID
|
|
||||||
|
|
||||||
ifndef QUANTUM_DIR
|
|
||||||
include ../../Makefile
|
include ../../Makefile
|
||||||
endif
|
endif
|
||||||
|
|
@ -0,0 +1,67 @@
|
|||||||
|
|
||||||
|
|
||||||
|
# MCU name
|
||||||
|
#MCU = at90usb1287
|
||||||
|
MCU = atmega32u4
|
||||||
|
|
||||||
|
# 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(+60)
|
||||||
|
OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
|
||||||
|
|
||||||
|
|
||||||
|
# Boot Section Size in *bytes*
|
||||||
|
# Teensy halfKay 512
|
||||||
|
# Teensy++ halfKay 1024
|
||||||
|
# Atmel DFU loader 4096
|
||||||
|
# LUFA bootloader 4096
|
||||||
|
# USBaspLoader 2048
|
||||||
|
OPT_DEFS += -DBOOTLOADER_SIZE=512
|
||||||
|
|
||||||
|
|
||||||
|
# Build Options
|
||||||
|
# comment out to disable the options.
|
||||||
|
#
|
||||||
|
BOOTMAGIC_ENABLE ?= yes # Virtual DIP switch configuration(+1000)
|
||||||
|
MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700)
|
||||||
|
EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450)
|
||||||
|
CONSOLE_ENABLE ?= yes # Console for debug(+400)
|
||||||
|
COMMAND_ENABLE ?= yes # Commands for debug and configuration
|
||||||
|
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
|
||||||
|
# SLEEP_LED_ENABLE ?= yes # Breathing sleep LED during USB suspend
|
||||||
|
# NKRO_ENABLE ?= yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
|
||||||
|
# BACKLIGHT_ENABLE ?= yes # Enable keyboard backlight functionality
|
||||||
|
# MIDI_ENABLE ?= YES # MIDI controls
|
||||||
|
# UNICODE_ENABLE ?= YES # Unicode
|
||||||
|
# BLUETOOTH_ENABLE ?= yes # Enable Bluetooth with the Adafruit EZ-Key HID
|
@ -1,14 +1,5 @@
|
|||||||
SUBPROJECT_DEFAULT = stm32_f072_onekey
|
SUBPROJECT_DEFAULT = stm32_f072_onekey
|
||||||
|
|
||||||
#BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration
|
ifndef MAKEFILE_INCLUDED
|
||||||
MOUSEKEY_ENABLE ?= yes # Mouse keys
|
|
||||||
EXTRAKEY_ENABLE ?= yes # Audio control and System control
|
|
||||||
CONSOLE_ENABLE ?= yes # Console for debug
|
|
||||||
COMMAND_ENABLE ?= yes # Commands for debug and configuration
|
|
||||||
SLEEP_LED_ENABLE ?= yes # Breathing sleep LED during USB suspend
|
|
||||||
NKRO_ENABLE ?= yes # USB Nkey Rollover
|
|
||||||
CUSTOM_MATRIX ?= yes # Custom matrix file
|
|
||||||
|
|
||||||
ifndef QUANTUM_DIR
|
|
||||||
include ../../Makefile
|
include ../../Makefile
|
||||||
endif
|
endif
|
@ -1,49 +1,49 @@
|
|||||||
/*
|
/*
|
||||||
ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio
|
ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio
|
||||||
|
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
you may not use this file except in compliance with the License.
|
you may not use this file except in compliance with the License.
|
||||||
You may obtain a copy of the License at
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
http://www.apache.org/licenses/LICENSE-2.0
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
Unless required by applicable law or agreed to in writing, software
|
Unless required by applicable law or agreed to in writing, software
|
||||||
distributed under the License is distributed on an "AS IS" BASIS,
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
See the License for the specific language governing permissions and
|
See the License for the specific language governing permissions and
|
||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "hal.h"
|
#include "hal.h"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief PAL setup.
|
* @brief PAL setup.
|
||||||
* @details Digital I/O ports static configuration as defined in @p board.h.
|
* @details Digital I/O ports static configuration as defined in @p board.h.
|
||||||
* This variable is used by the HAL when initializing the PAL driver.
|
* This variable is used by the HAL when initializing the PAL driver.
|
||||||
*/
|
*/
|
||||||
#if HAL_USE_PAL || defined(__DOXYGEN__)
|
#if HAL_USE_PAL || defined(__DOXYGEN__)
|
||||||
const PALConfig pal_default_config =
|
const PALConfig pal_default_config =
|
||||||
{
|
{
|
||||||
{VAL_GPIOAODR, VAL_GPIOACRL, VAL_GPIOACRH},
|
{VAL_GPIOAODR, VAL_GPIOACRL, VAL_GPIOACRH},
|
||||||
{VAL_GPIOBODR, VAL_GPIOBCRL, VAL_GPIOBCRH},
|
{VAL_GPIOBODR, VAL_GPIOBCRL, VAL_GPIOBCRH},
|
||||||
{VAL_GPIOCODR, VAL_GPIOCCRL, VAL_GPIOCCRH},
|
{VAL_GPIOCODR, VAL_GPIOCCRL, VAL_GPIOCCRH},
|
||||||
{VAL_GPIODODR, VAL_GPIODCRL, VAL_GPIODCRH},
|
{VAL_GPIODODR, VAL_GPIODCRL, VAL_GPIODCRH},
|
||||||
{VAL_GPIOEODR, VAL_GPIOECRL, VAL_GPIOECRH},
|
{VAL_GPIOEODR, VAL_GPIOECRL, VAL_GPIOECRH},
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Early initialization code.
|
* Early initialization code.
|
||||||
* This initialization must be performed just after stack setup and before
|
* This initialization must be performed just after stack setup and before
|
||||||
* any other initialization.
|
* any other initialization.
|
||||||
*/
|
*/
|
||||||
void __early_init(void) {
|
void __early_init(void) {
|
||||||
|
|
||||||
stm32_clock_init();
|
stm32_clock_init();
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Board-specific initialization code.
|
* Board-specific initialization code.
|
||||||
*/
|
*/
|
||||||
void boardInit(void) {
|
void boardInit(void) {
|
||||||
}
|
}
|
||||||
|
@ -1,166 +1,166 @@
|
|||||||
/*
|
/*
|
||||||
ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio
|
ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio
|
||||||
|
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
you may not use this file except in compliance with the License.
|
you may not use this file except in compliance with the License.
|
||||||
You may obtain a copy of the License at
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
http://www.apache.org/licenses/LICENSE-2.0
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
Unless required by applicable law or agreed to in writing, software
|
Unless required by applicable law or agreed to in writing, software
|
||||||
distributed under the License is distributed on an "AS IS" BASIS,
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
See the License for the specific language governing permissions and
|
See the License for the specific language governing permissions and
|
||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef _BOARD_H_
|
#ifndef _BOARD_H_
|
||||||
#define _BOARD_H_
|
#define _BOARD_H_
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Setup for a Generic STM32F103 board.
|
* Setup for a Generic STM32F103 board.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Board identifier.
|
* Board identifier.
|
||||||
*/
|
*/
|
||||||
#define BOARD_GENERIC_STM32_F103
|
#define BOARD_GENERIC_STM32_F103
|
||||||
#define BOARD_NAME "Generic STM32F103x board"
|
#define BOARD_NAME "Generic STM32F103x board"
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Board frequencies.
|
* Board frequencies.
|
||||||
*/
|
*/
|
||||||
#define STM32_LSECLK 32768
|
#define STM32_LSECLK 32768
|
||||||
#define STM32_HSECLK 8000000
|
#define STM32_HSECLK 8000000
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* MCU type, supported types are defined in ./os/hal/platforms/hal_lld.h.
|
* MCU type, supported types are defined in ./os/hal/platforms/hal_lld.h.
|
||||||
*/
|
*/
|
||||||
#define STM32F103xB
|
#define STM32F103xB
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* IO pins assignments
|
* IO pins assignments
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* on-board */
|
/* on-board */
|
||||||
|
|
||||||
#define GPIOC_LED 13
|
#define GPIOC_LED 13
|
||||||
#define GPIOD_OSC_IN 0
|
#define GPIOD_OSC_IN 0
|
||||||
#define GPIOD_OSC_OUT 1
|
#define GPIOD_OSC_OUT 1
|
||||||
|
|
||||||
/* In case your board has a "USB enable" hardware
|
/* In case your board has a "USB enable" hardware
|
||||||
controlled by a pin, define it here. (It could be just
|
controlled by a pin, define it here. (It could be just
|
||||||
a 1.5k resistor connected to D+ line.)
|
a 1.5k resistor connected to D+ line.)
|
||||||
*/
|
*/
|
||||||
/*
|
/*
|
||||||
#define GPIOB_USB_DISC 10
|
#define GPIOB_USB_DISC 10
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* I/O ports initial setup, this configuration is established soon after reset
|
* I/O ports initial setup, this configuration is established soon after reset
|
||||||
* in the initialization code.
|
* in the initialization code.
|
||||||
*
|
*
|
||||||
* The digits have the following meaning:
|
* The digits have the following meaning:
|
||||||
* 0 - Analog input.
|
* 0 - Analog input.
|
||||||
* 1 - Push Pull output 10MHz.
|
* 1 - Push Pull output 10MHz.
|
||||||
* 2 - Push Pull output 2MHz.
|
* 2 - Push Pull output 2MHz.
|
||||||
* 3 - Push Pull output 50MHz.
|
* 3 - Push Pull output 50MHz.
|
||||||
* 4 - Digital input.
|
* 4 - Digital input.
|
||||||
* 5 - Open Drain output 10MHz.
|
* 5 - Open Drain output 10MHz.
|
||||||
* 6 - Open Drain output 2MHz.
|
* 6 - Open Drain output 2MHz.
|
||||||
* 7 - Open Drain output 50MHz.
|
* 7 - Open Drain output 50MHz.
|
||||||
* 8 - Digital input with PullUp or PullDown resistor depending on ODR.
|
* 8 - Digital input with PullUp or PullDown resistor depending on ODR.
|
||||||
* 9 - Alternate Push Pull output 10MHz.
|
* 9 - Alternate Push Pull output 10MHz.
|
||||||
* A - Alternate Push Pull output 2MHz.
|
* A - Alternate Push Pull output 2MHz.
|
||||||
* B - Alternate Push Pull output 50MHz.
|
* B - Alternate Push Pull output 50MHz.
|
||||||
* C - Reserved.
|
* C - Reserved.
|
||||||
* D - Alternate Open Drain output 10MHz.
|
* D - Alternate Open Drain output 10MHz.
|
||||||
* E - Alternate Open Drain output 2MHz.
|
* E - Alternate Open Drain output 2MHz.
|
||||||
* F - Alternate Open Drain output 50MHz.
|
* F - Alternate Open Drain output 50MHz.
|
||||||
* Please refer to the STM32 Reference Manual for details.
|
* Please refer to the STM32 Reference Manual for details.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Port A setup.
|
* Port A setup.
|
||||||
* Everything input with pull-up except:
|
* Everything input with pull-up except:
|
||||||
* PA2 - Alternate output (USART2 TX).
|
* PA2 - Alternate output (USART2 TX).
|
||||||
* PA3 - Normal input (USART2 RX).
|
* PA3 - Normal input (USART2 RX).
|
||||||
* PA9 - Alternate output (USART1 TX).
|
* PA9 - Alternate output (USART1 TX).
|
||||||
* PA10 - Normal input (USART1 RX).
|
* PA10 - Normal input (USART1 RX).
|
||||||
*/
|
*/
|
||||||
#define VAL_GPIOACRL 0x88884B88 /* PA7...PA0 */
|
#define VAL_GPIOACRL 0x88884B88 /* PA7...PA0 */
|
||||||
#define VAL_GPIOACRH 0x888884B8 /* PA15...PA8 */
|
#define VAL_GPIOACRH 0x888884B8 /* PA15...PA8 */
|
||||||
#define VAL_GPIOAODR 0xFFFFFFFF
|
#define VAL_GPIOAODR 0xFFFFFFFF
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Port B setup.
|
* Port B setup.
|
||||||
* Everything input with pull-up except:
|
* Everything input with pull-up except:
|
||||||
* PB10 - Push Pull output (USB switch).
|
* PB10 - Push Pull output (USB switch).
|
||||||
*/
|
*/
|
||||||
#define VAL_GPIOBCRL 0x88888888 /* PB7...PB0 */
|
#define VAL_GPIOBCRL 0x88888888 /* PB7...PB0 */
|
||||||
#define VAL_GPIOBCRH 0x88888388 /* PB15...PB8 */
|
#define VAL_GPIOBCRH 0x88888388 /* PB15...PB8 */
|
||||||
#define VAL_GPIOBODR 0xFFFFFFFF
|
#define VAL_GPIOBODR 0xFFFFFFFF
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Port C setup.
|
* Port C setup.
|
||||||
* Everything input with pull-up except:
|
* Everything input with pull-up except:
|
||||||
* PC13 - Push Pull output (LED).
|
* PC13 - Push Pull output (LED).
|
||||||
*/
|
*/
|
||||||
#define VAL_GPIOCCRL 0x88888888 /* PC7...PC0 */
|
#define VAL_GPIOCCRL 0x88888888 /* PC7...PC0 */
|
||||||
#define VAL_GPIOCCRH 0x88388888 /* PC15...PC8 */
|
#define VAL_GPIOCCRH 0x88388888 /* PC15...PC8 */
|
||||||
#define VAL_GPIOCODR 0xFFFFFFFF
|
#define VAL_GPIOCODR 0xFFFFFFFF
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Port D setup.
|
* Port D setup.
|
||||||
* Everything input with pull-up except:
|
* Everything input with pull-up except:
|
||||||
* PD0 - Normal input (XTAL).
|
* PD0 - Normal input (XTAL).
|
||||||
* PD1 - Normal input (XTAL).
|
* PD1 - Normal input (XTAL).
|
||||||
*/
|
*/
|
||||||
#define VAL_GPIODCRL 0x88888844 /* PD7...PD0 */
|
#define VAL_GPIODCRL 0x88888844 /* PD7...PD0 */
|
||||||
#define VAL_GPIODCRH 0x88888888 /* PD15...PD8 */
|
#define VAL_GPIODCRH 0x88888888 /* PD15...PD8 */
|
||||||
#define VAL_GPIODODR 0xFFFFFFFF
|
#define VAL_GPIODODR 0xFFFFFFFF
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Port E setup.
|
* Port E setup.
|
||||||
* Everything input with pull-up except:
|
* Everything input with pull-up except:
|
||||||
*/
|
*/
|
||||||
#define VAL_GPIOECRL 0x88888888 /* PE7...PE0 */
|
#define VAL_GPIOECRL 0x88888888 /* PE7...PE0 */
|
||||||
#define VAL_GPIOECRH 0x88888888 /* PE15...PE8 */
|
#define VAL_GPIOECRH 0x88888888 /* PE15...PE8 */
|
||||||
#define VAL_GPIOEODR 0xFFFFFFFF
|
#define VAL_GPIOEODR 0xFFFFFFFF
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* USB bus activation macro, required by the USB driver.
|
* USB bus activation macro, required by the USB driver.
|
||||||
*/
|
*/
|
||||||
/* The point is that most of the generic STM32F103* boards
|
/* The point is that most of the generic STM32F103* boards
|
||||||
have a 1.5k resistor connected on one end to the D+ line
|
have a 1.5k resistor connected on one end to the D+ line
|
||||||
and on the other end to some pin. Or even a slightly more
|
and on the other end to some pin. Or even a slightly more
|
||||||
complicated "USB enable" circuit, controlled by a pin.
|
complicated "USB enable" circuit, controlled by a pin.
|
||||||
That should go here.
|
That should go here.
|
||||||
|
|
||||||
However on some boards (e.g. one that I have), there's no
|
However on some boards (e.g. one that I have), there's no
|
||||||
such hardware. In which case it's better to not do anything.
|
such hardware. In which case it's better to not do anything.
|
||||||
*/
|
*/
|
||||||
/*
|
/*
|
||||||
#define usb_lld_connect_bus(usbp) palClearPad(GPIOB, GPIOB_USB_DISC)
|
#define usb_lld_connect_bus(usbp) palClearPad(GPIOB, GPIOB_USB_DISC)
|
||||||
*/
|
*/
|
||||||
#define usb_lld_connect_bus(usbp) palSetPadMode(GPIOA, 12, PAL_MODE_INPUT);
|
#define usb_lld_connect_bus(usbp) palSetPadMode(GPIOA, 12, PAL_MODE_INPUT);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* USB bus de-activation macro, required by the USB driver.
|
* USB bus de-activation macro, required by the USB driver.
|
||||||
*/
|
*/
|
||||||
/*
|
/*
|
||||||
#define usb_lld_disconnect_bus(usbp) palSetPad(GPIOB, GPIOB_USB_DISC)
|
#define usb_lld_disconnect_bus(usbp) palSetPad(GPIOB, GPIOB_USB_DISC)
|
||||||
*/
|
*/
|
||||||
#define usb_lld_disconnect_bus(usbp) palSetPadMode(GPIOA, 12, PAL_MODE_OUTPUT_PUSHPULL); palClearPad(GPIOA, 12);
|
#define usb_lld_disconnect_bus(usbp) palSetPadMode(GPIOA, 12, PAL_MODE_OUTPUT_PUSHPULL); palClearPad(GPIOA, 12);
|
||||||
|
|
||||||
#if !defined(_FROM_ASM_)
|
#if !defined(_FROM_ASM_)
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
void boardInit(void);
|
void boardInit(void);
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
#endif /* _FROM_ASM_ */
|
#endif /* _FROM_ASM_ */
|
||||||
|
|
||||||
#endif /* _BOARD_H_ */
|
#endif /* _BOARD_H_ */
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
# List of all the board related files.
|
# List of all the board related files.
|
||||||
BOARDSRC = $(KEYBOARD_PATH)/boards/GENERIC_STM32_F103/board.c
|
BOARDSRC = $(KEYBOARD_PATH)/boards/GENERIC_STM32_F103/board.c
|
||||||
|
|
||||||
# Required include directories
|
# Required include directories
|
||||||
BOARDINC = $(KEYBOARD_PATH)/boards/GENERIC_STM32_F103
|
BOARDINC = $(KEYBOARD_PATH)/boards/GENERIC_STM32_F103
|
||||||
|
@ -1,105 +1,105 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (C) 2013-2016 Fabio Utzig, http://fabioutzig.com
|
* Copyright (C) 2013-2016 Fabio Utzig, http://fabioutzig.com
|
||||||
* (C) 2016 flabbergast <s3+flabbergast@sdfeu.org>
|
* (C) 2016 flabbergast <s3+flabbergast@sdfeu.org>
|
||||||
*
|
*
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining
|
* Permission is hereby granted, free of charge, to any person obtaining
|
||||||
* a copy of this software and associated documentation files (the "Software"),
|
* a copy of this software and associated documentation files (the "Software"),
|
||||||
* to deal in the Software without restriction, including without limitation
|
* to deal in the Software without restriction, including without limitation
|
||||||
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||||
* and/or sell copies of the Software, and to permit persons to whom the
|
* and/or sell copies of the Software, and to permit persons to whom the
|
||||||
* Software is furnished to do so, subject to the following conditions:
|
* Software is furnished to do so, subject to the following conditions:
|
||||||
*
|
*
|
||||||
* The above copyright notice and this permission notice shall be included in
|
* The above copyright notice and this permission notice shall be included in
|
||||||
* all copies or substantial portions of the Software.
|
* all copies or substantial portions of the Software.
|
||||||
*
|
*
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||||
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
* SOFTWARE.
|
* SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* KL26Z64 memory setup.
|
* KL26Z64 memory setup.
|
||||||
*/
|
*/
|
||||||
MEMORY
|
MEMORY
|
||||||
{
|
{
|
||||||
flash0 : org = 0x00000000, len = 0x100
|
flash0 : org = 0x00000000, len = 0x100
|
||||||
flash1 : org = 0x00000400, len = 0x10
|
flash1 : org = 0x00000400, len = 0x10
|
||||||
flash2 : org = 0x00000410, len = 62k - 0x410
|
flash2 : org = 0x00000410, len = 62k - 0x410
|
||||||
flash3 : org = 0x0000F800, len = 2k
|
flash3 : org = 0x0000F800, len = 2k
|
||||||
flash4 : org = 0x00000000, len = 0
|
flash4 : org = 0x00000000, len = 0
|
||||||
flash5 : org = 0x00000000, len = 0
|
flash5 : org = 0x00000000, len = 0
|
||||||
flash6 : org = 0x00000000, len = 0
|
flash6 : org = 0x00000000, len = 0
|
||||||
flash7 : org = 0x00000000, len = 0
|
flash7 : org = 0x00000000, len = 0
|
||||||
ram0 : org = 0x1FFFF800, len = 8k
|
ram0 : org = 0x1FFFF800, len = 8k
|
||||||
ram1 : org = 0x00000000, len = 0
|
ram1 : org = 0x00000000, len = 0
|
||||||
ram2 : org = 0x00000000, len = 0
|
ram2 : org = 0x00000000, len = 0
|
||||||
ram3 : org = 0x00000000, len = 0
|
ram3 : org = 0x00000000, len = 0
|
||||||
ram4 : org = 0x00000000, len = 0
|
ram4 : org = 0x00000000, len = 0
|
||||||
ram5 : org = 0x00000000, len = 0
|
ram5 : org = 0x00000000, len = 0
|
||||||
ram6 : org = 0x00000000, len = 0
|
ram6 : org = 0x00000000, len = 0
|
||||||
ram7 : org = 0x00000000, len = 0
|
ram7 : org = 0x00000000, len = 0
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Flash region for the configuration bytes.*/
|
/* Flash region for the configuration bytes.*/
|
||||||
SECTIONS
|
SECTIONS
|
||||||
{
|
{
|
||||||
.cfmprotect : ALIGN(4) SUBALIGN(4)
|
.cfmprotect : ALIGN(4) SUBALIGN(4)
|
||||||
{
|
{
|
||||||
KEEP(*(.cfmconfig))
|
KEEP(*(.cfmconfig))
|
||||||
} > flash1
|
} > flash1
|
||||||
}
|
}
|
||||||
|
|
||||||
/* For each data/text section two region are defined, a virtual region
|
/* For each data/text section two region are defined, a virtual region
|
||||||
and a load region (_LMA suffix).*/
|
and a load region (_LMA suffix).*/
|
||||||
|
|
||||||
/* Flash region to be used for exception vectors.*/
|
/* Flash region to be used for exception vectors.*/
|
||||||
REGION_ALIAS("VECTORS_FLASH", flash0);
|
REGION_ALIAS("VECTORS_FLASH", flash0);
|
||||||
REGION_ALIAS("VECTORS_FLASH_LMA", flash0);
|
REGION_ALIAS("VECTORS_FLASH_LMA", flash0);
|
||||||
|
|
||||||
/* Flash region to be used for constructors and destructors.*/
|
/* Flash region to be used for constructors and destructors.*/
|
||||||
REGION_ALIAS("XTORS_FLASH", flash2);
|
REGION_ALIAS("XTORS_FLASH", flash2);
|
||||||
REGION_ALIAS("XTORS_FLASH_LMA", flash2);
|
REGION_ALIAS("XTORS_FLASH_LMA", flash2);
|
||||||
|
|
||||||
/* Flash region to be used for code text.*/
|
/* Flash region to be used for code text.*/
|
||||||
REGION_ALIAS("TEXT_FLASH", flash2);
|
REGION_ALIAS("TEXT_FLASH", flash2);
|
||||||
REGION_ALIAS("TEXT_FLASH_LMA", flash2);
|
REGION_ALIAS("TEXT_FLASH_LMA", flash2);
|
||||||
|
|
||||||
/* Flash region to be used for read only data.*/
|
/* Flash region to be used for read only data.*/
|
||||||
REGION_ALIAS("RODATA_FLASH", flash2);
|
REGION_ALIAS("RODATA_FLASH", flash2);
|
||||||
REGION_ALIAS("RODATA_FLASH_LMA", flash2);
|
REGION_ALIAS("RODATA_FLASH_LMA", flash2);
|
||||||
|
|
||||||
/* Flash region to be used for various.*/
|
/* Flash region to be used for various.*/
|
||||||
REGION_ALIAS("VARIOUS_FLASH", flash2);
|
REGION_ALIAS("VARIOUS_FLASH", flash2);
|
||||||
REGION_ALIAS("VARIOUS_FLASH_LMA", flash2);
|
REGION_ALIAS("VARIOUS_FLASH_LMA", flash2);
|
||||||
|
|
||||||
/* Flash region to be used for RAM(n) initialization data.*/
|
/* Flash region to be used for RAM(n) initialization data.*/
|
||||||
REGION_ALIAS("RAM_INIT_FLASH_LMA", flash2);
|
REGION_ALIAS("RAM_INIT_FLASH_LMA", flash2);
|
||||||
|
|
||||||
/* RAM region to be used for Main stack. This stack accommodates the processing
|
/* RAM region to be used for Main stack. This stack accommodates the processing
|
||||||
of all exceptions and interrupts.*/
|
of all exceptions and interrupts.*/
|
||||||
REGION_ALIAS("MAIN_STACK_RAM", ram0);
|
REGION_ALIAS("MAIN_STACK_RAM", ram0);
|
||||||
|
|
||||||
/* RAM region to be used for the process stack. This is the stack used by
|
/* RAM region to be used for the process stack. This is the stack used by
|
||||||
the main() function.*/
|
the main() function.*/
|
||||||
REGION_ALIAS("PROCESS_STACK_RAM", ram0);
|
REGION_ALIAS("PROCESS_STACK_RAM", ram0);
|
||||||
|
|
||||||
/* RAM region to be used for data segment.*/
|
/* RAM region to be used for data segment.*/
|
||||||
REGION_ALIAS("DATA_RAM", ram0);
|
REGION_ALIAS("DATA_RAM", ram0);
|
||||||
REGION_ALIAS("DATA_RAM_LMA", flash2);
|
REGION_ALIAS("DATA_RAM_LMA", flash2);
|
||||||
|
|
||||||
/* RAM region to be used for BSS segment.*/
|
/* RAM region to be used for BSS segment.*/
|
||||||
REGION_ALIAS("BSS_RAM", ram0);
|
REGION_ALIAS("BSS_RAM", ram0);
|
||||||
|
|
||||||
/* RAM region to be used for the default heap.*/
|
/* RAM region to be used for the default heap.*/
|
||||||
REGION_ALIAS("HEAP_RAM", ram0);
|
REGION_ALIAS("HEAP_RAM", ram0);
|
||||||
|
|
||||||
__eeprom_workarea_start__ = ORIGIN(flash3);
|
__eeprom_workarea_start__ = ORIGIN(flash3);
|
||||||
__eeprom_workarea_size__ = LENGTH(flash3);
|
__eeprom_workarea_size__ = LENGTH(flash3);
|
||||||
__eeprom_workarea_end__ = __eeprom_workarea_start__ + __eeprom_workarea_size__;
|
__eeprom_workarea_end__ = __eeprom_workarea_start__ + __eeprom_workarea_size__;
|
||||||
|
|
||||||
/* Generic rules inclusion.*/
|
/* Generic rules inclusion.*/
|
||||||
INCLUDE rules.ld
|
INCLUDE rules.ld
|
||||||
|
@ -1,88 +1,88 @@
|
|||||||
/*
|
/*
|
||||||
ChibiOS - Copyright (C) 2006..2016 Giovanni Di Sirio
|
ChibiOS - Copyright (C) 2006..2016 Giovanni Di Sirio
|
||||||
|
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
you may not use this file except in compliance with the License.
|
you may not use this file except in compliance with the License.
|
||||||
You may obtain a copy of the License at
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
http://www.apache.org/licenses/LICENSE-2.0
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
Unless required by applicable law or agreed to in writing, software
|
Unless required by applicable law or agreed to in writing, software
|
||||||
distributed under the License is distributed on an "AS IS" BASIS,
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
See the License for the specific language governing permissions and
|
See the License for the specific language governing permissions and
|
||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* ST32F103xB memory setup for use with the maplemini bootloader.
|
* ST32F103xB memory setup for use with the maplemini bootloader.
|
||||||
* You will have to
|
* You will have to
|
||||||
* #define CORTEX_VTOR_INIT 0x5000
|
* #define CORTEX_VTOR_INIT 0x5000
|
||||||
* in your projects chconf.h
|
* in your projects chconf.h
|
||||||
*/
|
*/
|
||||||
MEMORY
|
MEMORY
|
||||||
{
|
{
|
||||||
flash0 : org = 0x08002000, len = 128k - 0x2000
|
flash0 : org = 0x08002000, len = 128k - 0x2000
|
||||||
flash1 : org = 0x00000000, len = 0
|
flash1 : org = 0x00000000, len = 0
|
||||||
flash2 : org = 0x00000000, len = 0
|
flash2 : org = 0x00000000, len = 0
|
||||||
flash3 : org = 0x00000000, len = 0
|
flash3 : org = 0x00000000, len = 0
|
||||||
flash4 : org = 0x00000000, len = 0
|
flash4 : org = 0x00000000, len = 0
|
||||||
flash5 : org = 0x00000000, len = 0
|
flash5 : org = 0x00000000, len = 0
|
||||||
flash6 : org = 0x00000000, len = 0
|
flash6 : org = 0x00000000, len = 0
|
||||||
flash7 : org = 0x00000000, len = 0
|
flash7 : org = 0x00000000, len = 0
|
||||||
ram0 : org = 0x20000000, len = 20k
|
ram0 : org = 0x20000000, len = 20k
|
||||||
ram1 : org = 0x00000000, len = 0
|
ram1 : org = 0x00000000, len = 0
|
||||||
ram2 : org = 0x00000000, len = 0
|
ram2 : org = 0x00000000, len = 0
|
||||||
ram3 : org = 0x00000000, len = 0
|
ram3 : org = 0x00000000, len = 0
|
||||||
ram4 : org = 0x00000000, len = 0
|
ram4 : org = 0x00000000, len = 0
|
||||||
ram5 : org = 0x00000000, len = 0
|
ram5 : org = 0x00000000, len = 0
|
||||||
ram6 : org = 0x00000000, len = 0
|
ram6 : org = 0x00000000, len = 0
|
||||||
ram7 : org = 0x00000000, len = 0
|
ram7 : org = 0x00000000, len = 0
|
||||||
}
|
}
|
||||||
|
|
||||||
/* For each data/text section two region are defined, a virtual region
|
/* For each data/text section two region are defined, a virtual region
|
||||||
and a load region (_LMA suffix).*/
|
and a load region (_LMA suffix).*/
|
||||||
|
|
||||||
/* Flash region to be used for exception vectors.*/
|
/* Flash region to be used for exception vectors.*/
|
||||||
REGION_ALIAS("VECTORS_FLASH", flash0);
|
REGION_ALIAS("VECTORS_FLASH", flash0);
|
||||||
REGION_ALIAS("VECTORS_FLASH_LMA", flash0);
|
REGION_ALIAS("VECTORS_FLASH_LMA", flash0);
|
||||||
|
|
||||||
/* Flash region to be used for constructors and destructors.*/
|
/* Flash region to be used for constructors and destructors.*/
|
||||||
REGION_ALIAS("XTORS_FLASH", flash0);
|
REGION_ALIAS("XTORS_FLASH", flash0);
|
||||||
REGION_ALIAS("XTORS_FLASH_LMA", flash0);
|
REGION_ALIAS("XTORS_FLASH_LMA", flash0);
|
||||||
|
|
||||||
/* Flash region to be used for code text.*/
|
/* Flash region to be used for code text.*/
|
||||||
REGION_ALIAS("TEXT_FLASH", flash0);
|
REGION_ALIAS("TEXT_FLASH", flash0);
|
||||||
REGION_ALIAS("TEXT_FLASH_LMA", flash0);
|
REGION_ALIAS("TEXT_FLASH_LMA", flash0);
|
||||||
|
|
||||||
/* Flash region to be used for read only data.*/
|
/* Flash region to be used for read only data.*/
|
||||||
REGION_ALIAS("RODATA_FLASH", flash0);
|
REGION_ALIAS("RODATA_FLASH", flash0);
|
||||||
REGION_ALIAS("RODATA_FLASH_LMA", flash0);
|
REGION_ALIAS("RODATA_FLASH_LMA", flash0);
|
||||||
|
|
||||||
/* Flash region to be used for various.*/
|
/* Flash region to be used for various.*/
|
||||||
REGION_ALIAS("VARIOUS_FLASH", flash0);
|
REGION_ALIAS("VARIOUS_FLASH", flash0);
|
||||||
REGION_ALIAS("VARIOUS_FLASH_LMA", flash0);
|
REGION_ALIAS("VARIOUS_FLASH_LMA", flash0);
|
||||||
|
|
||||||
/* Flash region to be used for RAM(n) initialization data.*/
|
/* Flash region to be used for RAM(n) initialization data.*/
|
||||||
REGION_ALIAS("RAM_INIT_FLASH_LMA", flash0);
|
REGION_ALIAS("RAM_INIT_FLASH_LMA", flash0);
|
||||||
|
|
||||||
/* RAM region to be used for Main stack. This stack accommodates the processing
|
/* RAM region to be used for Main stack. This stack accommodates the processing
|
||||||
of all exceptions and interrupts.*/
|
of all exceptions and interrupts.*/
|
||||||
REGION_ALIAS("MAIN_STACK_RAM", ram0);
|
REGION_ALIAS("MAIN_STACK_RAM", ram0);
|
||||||
|
|
||||||
/* RAM region to be used for the process stack. This is the stack used by
|
/* RAM region to be used for the process stack. This is the stack used by
|
||||||
the main() function.*/
|
the main() function.*/
|
||||||
REGION_ALIAS("PROCESS_STACK_RAM", ram0);
|
REGION_ALIAS("PROCESS_STACK_RAM", ram0);
|
||||||
|
|
||||||
/* RAM region to be used for data segment.*/
|
/* RAM region to be used for data segment.*/
|
||||||
REGION_ALIAS("DATA_RAM", ram0);
|
REGION_ALIAS("DATA_RAM", ram0);
|
||||||
REGION_ALIAS("DATA_RAM_LMA", flash0);
|
REGION_ALIAS("DATA_RAM_LMA", flash0);
|
||||||
|
|
||||||
/* RAM region to be used for BSS segment.*/
|
/* RAM region to be used for BSS segment.*/
|
||||||
REGION_ALIAS("BSS_RAM", ram0);
|
REGION_ALIAS("BSS_RAM", ram0);
|
||||||
|
|
||||||
/* RAM region to be used for the default heap.*/
|
/* RAM region to be used for the default heap.*/
|
||||||
REGION_ALIAS("HEAP_RAM", ram0);
|
REGION_ALIAS("HEAP_RAM", ram0);
|
||||||
|
|
||||||
/* Generic rules inclusion.*/
|
/* Generic rules inclusion.*/
|
||||||
INCLUDE rules.ld
|
INCLUDE rules.ld
|
||||||
|
@ -0,0 +1,8 @@
|
|||||||
|
#BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration
|
||||||
|
MOUSEKEY_ENABLE ?= yes # Mouse keys
|
||||||
|
EXTRAKEY_ENABLE ?= yes # Audio control and System control
|
||||||
|
CONSOLE_ENABLE ?= yes # Console for debug
|
||||||
|
COMMAND_ENABLE ?= yes # Commands for debug and configuration
|
||||||
|
SLEEP_LED_ENABLE ?= yes # Breathing sleep LED during USB suspend
|
||||||
|
NKRO_ENABLE ?= yes # USB Nkey Rollover
|
||||||
|
CUSTOM_MATRIX ?= yes # Custom matrix file
|
@ -1,41 +1,3 @@
|
|||||||
# project specific files
|
ifndef MAKEFILE_INCLUDED
|
||||||
SRC = matrix.c \
|
|
||||||
led.c
|
|
||||||
|
|
||||||
## 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/ports/ARMCMx/compilers/GCC/ld/
|
|
||||||
# or <this_dir>/ld/
|
|
||||||
MCU_LDSCRIPT = STM32F072xB
|
|
||||||
# startup code to use
|
|
||||||
# is should exist in <chibios>/os/common/ports/ARMCMx/compilers/GCC/mk/
|
|
||||||
MCU_STARTUP = stm32f0xx
|
|
||||||
# it should exist either in <chibios>/os/hal/boards/
|
|
||||||
# or <this_dir>/boards
|
|
||||||
BOARD = ST_STM32F072B_DISCOVERY
|
|
||||||
# Cortex version
|
|
||||||
# Teensy LC is cortex-m0; Teensy 3.x are cortex-m4
|
|
||||||
MCU = cortex-m0
|
|
||||||
# ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7
|
|
||||||
ARMV = 6
|
|
||||||
# If you want to be able to jump to bootloader from firmware on STM32 MCUs,
|
|
||||||
# set the correct BOOTLOADER_ADDRESS. Either set it here, or define it in
|
|
||||||
# ./bootloader_defs.h or in ./boards/<FOO>/bootloader_defs.h (if you have
|
|
||||||
# a custom board definition that you plan to reuse).
|
|
||||||
# If you're not setting it here, leave it commented out.
|
|
||||||
# It is chip dependent, the correct number can be looked up here (page 175):
|
|
||||||
# http://www.st.com/web/en/resource/technical/document/application_note/CD00167594.pdf
|
|
||||||
# This also requires a patch to chibios:
|
|
||||||
# <tmk_dir>/tmk_core/tool/chibios/ch-bootloader-jump.patch
|
|
||||||
#STM32_BOOTLOADER_ADDRESS = 0x1FFFC800
|
|
||||||
|
|
||||||
# Build Options
|
|
||||||
# comment out to disable the options.
|
|
||||||
#
|
|
||||||
ifndef QUANTUM_DIR
|
|
||||||
include ../../../Makefile
|
include ../../../Makefile
|
||||||
endif
|
endif
|
@ -1,171 +1,171 @@
|
|||||||
/*
|
/*
|
||||||
ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio
|
ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio
|
||||||
|
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
you may not use this file except in compliance with the License.
|
you may not use this file except in compliance with the License.
|
||||||
You may obtain a copy of the License at
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
http://www.apache.org/licenses/LICENSE-2.0
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
Unless required by applicable law or agreed to in writing, software
|
Unless required by applicable law or agreed to in writing, software
|
||||||
distributed under the License is distributed on an "AS IS" BASIS,
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
See the License for the specific language governing permissions and
|
See the License for the specific language governing permissions and
|
||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef _MCUCONF_H_
|
#ifndef _MCUCONF_H_
|
||||||
#define _MCUCONF_H_
|
#define _MCUCONF_H_
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* STM32F0xx drivers configuration.
|
* STM32F0xx drivers configuration.
|
||||||
* The following settings override the default settings present in
|
* The following settings override the default settings present in
|
||||||
* the various device driver implementation headers.
|
* the various device driver implementation headers.
|
||||||
* Note that the settings for each driver only have effect if the whole
|
* Note that the settings for each driver only have effect if the whole
|
||||||
* driver is enabled in halconf.h.
|
* driver is enabled in halconf.h.
|
||||||
*
|
*
|
||||||
* IRQ priorities:
|
* IRQ priorities:
|
||||||
* 3...0 Lowest...Highest.
|
* 3...0 Lowest...Highest.
|
||||||
*
|
*
|
||||||
* DMA priorities:
|
* DMA priorities:
|
||||||
* 0...3 Lowest...Highest.
|
* 0...3 Lowest...Highest.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define STM32F0xx_MCUCONF
|
#define STM32F0xx_MCUCONF
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* HAL driver system settings.
|
* HAL driver system settings.
|
||||||
*/
|
*/
|
||||||
#define STM32_NO_INIT FALSE
|
#define STM32_NO_INIT FALSE
|
||||||
#define STM32_PVD_ENABLE FALSE
|
#define STM32_PVD_ENABLE FALSE
|
||||||
#define STM32_PLS STM32_PLS_LEV0
|
#define STM32_PLS STM32_PLS_LEV0
|
||||||
#define STM32_HSI_ENABLED TRUE
|
#define STM32_HSI_ENABLED TRUE
|
||||||
#define STM32_HSI14_ENABLED TRUE
|
#define STM32_HSI14_ENABLED TRUE
|
||||||
#define STM32_HSI48_ENABLED FALSE
|
#define STM32_HSI48_ENABLED FALSE
|
||||||
#define STM32_LSI_ENABLED TRUE
|
#define STM32_LSI_ENABLED TRUE
|
||||||
#define STM32_HSE_ENABLED FALSE
|
#define STM32_HSE_ENABLED FALSE
|
||||||
#define STM32_LSE_ENABLED FALSE
|
#define STM32_LSE_ENABLED FALSE
|
||||||
#define STM32_SW STM32_SW_PLL
|
#define STM32_SW STM32_SW_PLL
|
||||||
#define STM32_PLLSRC STM32_PLLSRC_HSI_DIV2
|
#define STM32_PLLSRC STM32_PLLSRC_HSI_DIV2
|
||||||
#define STM32_PREDIV_VALUE 1
|
#define STM32_PREDIV_VALUE 1
|
||||||
#define STM32_PLLMUL_VALUE 12
|
#define STM32_PLLMUL_VALUE 12
|
||||||
#define STM32_HPRE STM32_HPRE_DIV1
|
#define STM32_HPRE STM32_HPRE_DIV1
|
||||||
#define STM32_PPRE STM32_PPRE_DIV1
|
#define STM32_PPRE STM32_PPRE_DIV1
|
||||||
#define STM32_ADCSW STM32_ADCSW_HSI14
|
#define STM32_ADCSW STM32_ADCSW_HSI14
|
||||||
#define STM32_ADCPRE STM32_ADCPRE_DIV4
|
#define STM32_ADCPRE STM32_ADCPRE_DIV4
|
||||||
#define STM32_MCOSEL STM32_MCOSEL_NOCLOCK
|
#define STM32_MCOSEL STM32_MCOSEL_NOCLOCK
|
||||||
#define STM32_ADCPRE STM32_ADCPRE_DIV4
|
#define STM32_ADCPRE STM32_ADCPRE_DIV4
|
||||||
#define STM32_ADCSW STM32_ADCSW_HSI14
|
#define STM32_ADCSW STM32_ADCSW_HSI14
|
||||||
#define STM32_USBSW STM32_USBSW_HSI48
|
#define STM32_USBSW STM32_USBSW_HSI48
|
||||||
#define STM32_CECSW STM32_CECSW_HSI
|
#define STM32_CECSW STM32_CECSW_HSI
|
||||||
#define STM32_I2C1SW STM32_I2C1SW_HSI
|
#define STM32_I2C1SW STM32_I2C1SW_HSI
|
||||||
#define STM32_USART1SW STM32_USART1SW_PCLK
|
#define STM32_USART1SW STM32_USART1SW_PCLK
|
||||||
#define STM32_RTCSEL STM32_RTCSEL_LSI
|
#define STM32_RTCSEL STM32_RTCSEL_LSI
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* ADC driver system settings.
|
* ADC driver system settings.
|
||||||
*/
|
*/
|
||||||
#define STM32_ADC_USE_ADC1 FALSE
|
#define STM32_ADC_USE_ADC1 FALSE
|
||||||
#define STM32_ADC_ADC1_DMA_PRIORITY 2
|
#define STM32_ADC_ADC1_DMA_PRIORITY 2
|
||||||
#define STM32_ADC_IRQ_PRIORITY 2
|
#define STM32_ADC_IRQ_PRIORITY 2
|
||||||
#define STM32_ADC_ADC1_DMA_IRQ_PRIORITY 2
|
#define STM32_ADC_ADC1_DMA_IRQ_PRIORITY 2
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* EXT driver system settings.
|
* EXT driver system settings.
|
||||||
*/
|
*/
|
||||||
#define STM32_EXT_EXTI0_1_IRQ_PRIORITY 3
|
#define STM32_EXT_EXTI0_1_IRQ_PRIORITY 3
|
||||||
#define STM32_EXT_EXTI2_3_IRQ_PRIORITY 3
|
#define STM32_EXT_EXTI2_3_IRQ_PRIORITY 3
|
||||||
#define STM32_EXT_EXTI4_15_IRQ_PRIORITY 3
|
#define STM32_EXT_EXTI4_15_IRQ_PRIORITY 3
|
||||||
#define STM32_EXT_EXTI16_IRQ_PRIORITY 3
|
#define STM32_EXT_EXTI16_IRQ_PRIORITY 3
|
||||||
#define STM32_EXT_EXTI17_IRQ_PRIORITY 3
|
#define STM32_EXT_EXTI17_IRQ_PRIORITY 3
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* GPT driver system settings.
|
* GPT driver system settings.
|
||||||
*/
|
*/
|
||||||
#define STM32_GPT_USE_TIM1 FALSE
|
#define STM32_GPT_USE_TIM1 FALSE
|
||||||
#define STM32_GPT_USE_TIM2 FALSE
|
#define STM32_GPT_USE_TIM2 FALSE
|
||||||
#define STM32_GPT_USE_TIM3 FALSE
|
#define STM32_GPT_USE_TIM3 FALSE
|
||||||
#define STM32_GPT_USE_TIM14 FALSE
|
#define STM32_GPT_USE_TIM14 FALSE
|
||||||
#define STM32_GPT_TIM1_IRQ_PRIORITY 2
|
#define STM32_GPT_TIM1_IRQ_PRIORITY 2
|
||||||
#define STM32_GPT_TIM2_IRQ_PRIORITY 2
|
#define STM32_GPT_TIM2_IRQ_PRIORITY 2
|
||||||
#define STM32_GPT_TIM3_IRQ_PRIORITY 2
|
#define STM32_GPT_TIM3_IRQ_PRIORITY 2
|
||||||
#define STM32_GPT_TIM14_IRQ_PRIORITY 2
|
#define STM32_GPT_TIM14_IRQ_PRIORITY 2
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* I2C driver system settings.
|
* I2C driver system settings.
|
||||||
*/
|
*/
|
||||||
#define STM32_I2C_USE_I2C1 FALSE
|
#define STM32_I2C_USE_I2C1 FALSE
|
||||||
#define STM32_I2C_USE_I2C2 FALSE
|
#define STM32_I2C_USE_I2C2 FALSE
|
||||||
#define STM32_I2C_BUSY_TIMEOUT 50
|
#define STM32_I2C_BUSY_TIMEOUT 50
|
||||||
#define STM32_I2C_I2C1_IRQ_PRIORITY 3
|
#define STM32_I2C_I2C1_IRQ_PRIORITY 3
|
||||||
#define STM32_I2C_I2C2_IRQ_PRIORITY 3
|
#define STM32_I2C_I2C2_IRQ_PRIORITY 3
|
||||||
#define STM32_I2C_USE_DMA TRUE
|
#define STM32_I2C_USE_DMA TRUE
|
||||||
#define STM32_I2C_I2C1_DMA_PRIORITY 1
|
#define STM32_I2C_I2C1_DMA_PRIORITY 1
|
||||||
#define STM32_I2C_I2C2_DMA_PRIORITY 1
|
#define STM32_I2C_I2C2_DMA_PRIORITY 1
|
||||||
#define STM32_I2C_DMA_ERROR_HOOK(i2cp) osalSysHalt("DMA failure")
|
#define STM32_I2C_DMA_ERROR_HOOK(i2cp) osalSysHalt("DMA failure")
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* ICU driver system settings.
|
* ICU driver system settings.
|
||||||
*/
|
*/
|
||||||
#define STM32_ICU_USE_TIM1 FALSE
|
#define STM32_ICU_USE_TIM1 FALSE
|
||||||
#define STM32_ICU_USE_TIM2 FALSE
|
#define STM32_ICU_USE_TIM2 FALSE
|
||||||
#define STM32_ICU_USE_TIM3 FALSE
|
#define STM32_ICU_USE_TIM3 FALSE
|
||||||
#define STM32_ICU_TIM1_IRQ_PRIORITY 3
|
#define STM32_ICU_TIM1_IRQ_PRIORITY 3
|
||||||
#define STM32_ICU_TIM2_IRQ_PRIORITY 3
|
#define STM32_ICU_TIM2_IRQ_PRIORITY 3
|
||||||
#define STM32_ICU_TIM3_IRQ_PRIORITY 3
|
#define STM32_ICU_TIM3_IRQ_PRIORITY 3
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* PWM driver system settings.
|
* PWM driver system settings.
|
||||||
*/
|
*/
|
||||||
#define STM32_PWM_USE_ADVANCED FALSE
|
#define STM32_PWM_USE_ADVANCED FALSE
|
||||||
#define STM32_PWM_USE_TIM1 FALSE
|
#define STM32_PWM_USE_TIM1 FALSE
|
||||||
#define STM32_PWM_USE_TIM2 FALSE
|
#define STM32_PWM_USE_TIM2 FALSE
|
||||||
#define STM32_PWM_USE_TIM3 FALSE
|
#define STM32_PWM_USE_TIM3 FALSE
|
||||||
#define STM32_PWM_TIM1_IRQ_PRIORITY 3
|
#define STM32_PWM_TIM1_IRQ_PRIORITY 3
|
||||||
#define STM32_PWM_TIM2_IRQ_PRIORITY 3
|
#define STM32_PWM_TIM2_IRQ_PRIORITY 3
|
||||||
#define STM32_PWM_TIM3_IRQ_PRIORITY 3
|
#define STM32_PWM_TIM3_IRQ_PRIORITY 3
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* SERIAL driver system settings.
|
* SERIAL driver system settings.
|
||||||
*/
|
*/
|
||||||
#define STM32_SERIAL_USE_USART1 FALSE
|
#define STM32_SERIAL_USE_USART1 FALSE
|
||||||
#define STM32_SERIAL_USE_USART2 FALSE
|
#define STM32_SERIAL_USE_USART2 FALSE
|
||||||
#define STM32_SERIAL_USART1_PRIORITY 3
|
#define STM32_SERIAL_USART1_PRIORITY 3
|
||||||
#define STM32_SERIAL_USART2_PRIORITY 3
|
#define STM32_SERIAL_USART2_PRIORITY 3
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* SPI driver system settings.
|
* SPI driver system settings.
|
||||||
*/
|
*/
|
||||||
#define STM32_SPI_USE_SPI1 FALSE
|
#define STM32_SPI_USE_SPI1 FALSE
|
||||||
#define STM32_SPI_USE_SPI2 FALSE
|
#define STM32_SPI_USE_SPI2 FALSE
|
||||||
#define STM32_SPI_SPI1_DMA_PRIORITY 1
|
#define STM32_SPI_SPI1_DMA_PRIORITY 1
|
||||||
#define STM32_SPI_SPI2_DMA_PRIORITY 1
|
#define STM32_SPI_SPI2_DMA_PRIORITY 1
|
||||||
#define STM32_SPI_SPI1_IRQ_PRIORITY 2
|
#define STM32_SPI_SPI1_IRQ_PRIORITY 2
|
||||||
#define STM32_SPI_SPI2_IRQ_PRIORITY 2
|
#define STM32_SPI_SPI2_IRQ_PRIORITY 2
|
||||||
#define STM32_SPI_DMA_ERROR_HOOK(spip) osalSysHalt("DMA failure")
|
#define STM32_SPI_DMA_ERROR_HOOK(spip) osalSysHalt("DMA failure")
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* ST driver system settings.
|
* ST driver system settings.
|
||||||
*/
|
*/
|
||||||
#define STM32_ST_IRQ_PRIORITY 2
|
#define STM32_ST_IRQ_PRIORITY 2
|
||||||
#define STM32_ST_USE_TIMER 2
|
#define STM32_ST_USE_TIMER 2
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* UART driver system settings.
|
* UART driver system settings.
|
||||||
*/
|
*/
|
||||||
#define STM32_UART_USE_USART1 FALSE
|
#define STM32_UART_USE_USART1 FALSE
|
||||||
#define STM32_UART_USE_USART2 FALSE
|
#define STM32_UART_USE_USART2 FALSE
|
||||||
#define STM32_UART_USART1_IRQ_PRIORITY 3
|
#define STM32_UART_USART1_IRQ_PRIORITY 3
|
||||||
#define STM32_UART_USART2_IRQ_PRIORITY 3
|
#define STM32_UART_USART2_IRQ_PRIORITY 3
|
||||||
#define STM32_UART_USART1_DMA_PRIORITY 0
|
#define STM32_UART_USART1_DMA_PRIORITY 0
|
||||||
#define STM32_UART_USART2_DMA_PRIORITY 0
|
#define STM32_UART_USART2_DMA_PRIORITY 0
|
||||||
#define STM32_UART_DMA_ERROR_HOOK(uartp) osalSysHalt("DMA failure")
|
#define STM32_UART_DMA_ERROR_HOOK(uartp) osalSysHalt("DMA failure")
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* USB driver system settings.
|
* USB driver system settings.
|
||||||
*/
|
*/
|
||||||
#define STM32_USB_USE_USB1 TRUE
|
#define STM32_USB_USE_USB1 TRUE
|
||||||
#define STM32_USB_LOW_POWER_ON_SUSPEND FALSE
|
#define STM32_USB_LOW_POWER_ON_SUSPEND FALSE
|
||||||
#define STM32_USB_USB1_LP_IRQ_PRIORITY 3
|
#define STM32_USB_USB1_LP_IRQ_PRIORITY 3
|
||||||
|
|
||||||
#endif /* _MCUCONF_H_ */
|
#endif /* _MCUCONF_H_ */
|
||||||
|
@ -0,0 +1,41 @@
|
|||||||
|
# project specific files
|
||||||
|
SRC = matrix.c \
|
||||||
|
led.c
|
||||||
|
|
||||||
|
## 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/ports/ARMCMx/compilers/GCC/ld/
|
||||||
|
# or <this_dir>/ld/
|
||||||
|
MCU_LDSCRIPT = STM32F072xB
|
||||||
|
# startup code to use
|
||||||
|
# is should exist in <chibios>/os/common/ports/ARMCMx/compilers/GCC/mk/
|
||||||
|
MCU_STARTUP = stm32f0xx
|
||||||
|
# it should exist either in <chibios>/os/hal/boards/
|
||||||
|
# or <this_dir>/boards
|
||||||
|
BOARD = ST_STM32F072B_DISCOVERY
|
||||||
|
# Cortex version
|
||||||
|
# Teensy LC is cortex-m0; Teensy 3.x are cortex-m4
|
||||||
|
MCU = cortex-m0
|
||||||
|
# ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7
|
||||||
|
ARMV = 6
|
||||||
|
# If you want to be able to jump to bootloader from firmware on STM32 MCUs,
|
||||||
|
# set the correct BOOTLOADER_ADDRESS. Either set it here, or define it in
|
||||||
|
# ./bootloader_defs.h or in ./boards/<FOO>/bootloader_defs.h (if you have
|
||||||
|
# a custom board definition that you plan to reuse).
|
||||||
|
# If you're not setting it here, leave it commented out.
|
||||||
|
# It is chip dependent, the correct number can be looked up here (page 175):
|
||||||
|
# http://www.st.com/web/en/resource/technical/document/application_note/CD00167594.pdf
|
||||||
|
# This also requires a patch to chibios:
|
||||||
|
# <tmk_dir>/tmk_core/tool/chibios/ch-bootloader-jump.patch
|
||||||
|
#STM32_BOOTLOADER_ADDRESS = 0x1FFFC800
|
||||||
|
|
||||||
|
# Build Options
|
||||||
|
# comment out to disable the options.
|
||||||
|
#
|
||||||
|
ifndef QUANTUM_DIR
|
||||||
|
include ../../../Makefile
|
||||||
|
endif
|
@ -1,52 +1,3 @@
|
|||||||
# project specific files
|
ifndef MAKEFILE_INCLUDED
|
||||||
SRC = matrix.c \
|
|
||||||
led.c
|
|
||||||
|
|
||||||
# GENERIC STM32F103C8T6 board - stm32duino bootloader
|
|
||||||
OPT_DEFS = -DCORTEX_VTOR_INIT=0x2000
|
|
||||||
MCU_LDSCRIPT = STM32F103x8_stm32duino_bootloader
|
|
||||||
BOARD = GENERIC_STM32_F103
|
|
||||||
|
|
||||||
# GENERIC STM32F103C8T6 board - no bootloader (programmer over serial or SWD)
|
|
||||||
# OPT_DEFS =
|
|
||||||
# MCU_LDSCRIPT = STM32F103x8
|
|
||||||
# BOARD = GENERIC_STM32_F103
|
|
||||||
|
|
||||||
# MAPLE MINI
|
|
||||||
# OPT_DEFS = -DCORTEX_VTOR_INIT=0x5000
|
|
||||||
# MCU_LDSCRIPT = STM32F103xB_maplemini_bootloader
|
|
||||||
# BOARD = MAPLEMINI_STM32_F103
|
|
||||||
|
|
||||||
## 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/ports/ARMCMx/compilers/GCC/ld/
|
|
||||||
# or <this_dir>/ld/
|
|
||||||
# startup code to use
|
|
||||||
# is should exist in <chibios>/os/common/ports/ARMCMx/compilers/GCC/mk/
|
|
||||||
MCU_STARTUP = stm32f1xx
|
|
||||||
# it should exist either in <chibios>/os/hal/boards/
|
|
||||||
# or <this_dir>/boards
|
|
||||||
# Cortex version
|
|
||||||
# Teensy LC is cortex-m0; Teensy 3.x are cortex-m4
|
|
||||||
MCU = cortex-m3
|
|
||||||
# ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7
|
|
||||||
ARMV = 7
|
|
||||||
# If you want to be able to jump to bootloader from firmware on STM32 MCUs,
|
|
||||||
# set the correct BOOTLOADER_ADDRESS. Either set it here, or define it in
|
|
||||||
# ./bootloader_defs.h or in ./boards/<FOO>/bootloader_defs.h (if you have
|
|
||||||
# a custom board definition that you plan to reuse).
|
|
||||||
# If you're not setting it here, leave it commented out.
|
|
||||||
# It is chip dependent, the correct number can be looked up here (page 175):
|
|
||||||
# http://www.st.com/web/en/resource/technical/document/application_note/CD00167594.pdf
|
|
||||||
# This also requires a patch to chibios:
|
|
||||||
# <tmk_dir>/tmk_core/tool/chibios/ch-bootloader-jump.patch
|
|
||||||
#STM32_BOOTLOADER_ADDRESS = 0x1FFFC800
|
|
||||||
|
|
||||||
|
|
||||||
ifndef QUANTUM_DIR
|
|
||||||
include ../../../Makefile
|
include ../../../Makefile
|
||||||
endif
|
endif
|
@ -1,209 +1,209 @@
|
|||||||
/*
|
/*
|
||||||
ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio
|
ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio
|
||||||
|
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
you may not use this file except in compliance with the License.
|
you may not use this file except in compliance with the License.
|
||||||
You may obtain a copy of the License at
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
http://www.apache.org/licenses/LICENSE-2.0
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
Unless required by applicable law or agreed to in writing, software
|
Unless required by applicable law or agreed to in writing, software
|
||||||
distributed under the License is distributed on an "AS IS" BASIS,
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
See the License for the specific language governing permissions and
|
See the License for the specific language governing permissions and
|
||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef _MCUCONF_H_
|
#ifndef _MCUCONF_H_
|
||||||
#define _MCUCONF_H_
|
#define _MCUCONF_H_
|
||||||
|
|
||||||
#define STM32F103_MCUCONF
|
#define STM32F103_MCUCONF
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* STM32F103 drivers configuration.
|
* STM32F103 drivers configuration.
|
||||||
* The following settings override the default settings present in
|
* The following settings override the default settings present in
|
||||||
* the various device driver implementation headers.
|
* the various device driver implementation headers.
|
||||||
* Note that the settings for each driver only have effect if the whole
|
* Note that the settings for each driver only have effect if the whole
|
||||||
* driver is enabled in halconf.h.
|
* driver is enabled in halconf.h.
|
||||||
*
|
*
|
||||||
* IRQ priorities:
|
* IRQ priorities:
|
||||||
* 15...0 Lowest...Highest.
|
* 15...0 Lowest...Highest.
|
||||||
*
|
*
|
||||||
* DMA priorities:
|
* DMA priorities:
|
||||||
* 0...3 Lowest...Highest.
|
* 0...3 Lowest...Highest.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* HAL driver system settings.
|
* HAL driver system settings.
|
||||||
*/
|
*/
|
||||||
#define STM32_NO_INIT FALSE
|
#define STM32_NO_INIT FALSE
|
||||||
#define STM32_HSI_ENABLED TRUE
|
#define STM32_HSI_ENABLED TRUE
|
||||||
#define STM32_LSI_ENABLED FALSE
|
#define STM32_LSI_ENABLED FALSE
|
||||||
#define STM32_HSE_ENABLED TRUE
|
#define STM32_HSE_ENABLED TRUE
|
||||||
#define STM32_LSE_ENABLED FALSE
|
#define STM32_LSE_ENABLED FALSE
|
||||||
#define STM32_SW STM32_SW_PLL
|
#define STM32_SW STM32_SW_PLL
|
||||||
#define STM32_PLLSRC STM32_PLLSRC_HSE
|
#define STM32_PLLSRC STM32_PLLSRC_HSE
|
||||||
#define STM32_PLLXTPRE STM32_PLLXTPRE_DIV1
|
#define STM32_PLLXTPRE STM32_PLLXTPRE_DIV1
|
||||||
#define STM32_PLLMUL_VALUE 9
|
#define STM32_PLLMUL_VALUE 9
|
||||||
#define STM32_HPRE STM32_HPRE_DIV1
|
#define STM32_HPRE STM32_HPRE_DIV1
|
||||||
#define STM32_PPRE1 STM32_PPRE1_DIV2
|
#define STM32_PPRE1 STM32_PPRE1_DIV2
|
||||||
#define STM32_PPRE2 STM32_PPRE2_DIV2
|
#define STM32_PPRE2 STM32_PPRE2_DIV2
|
||||||
#define STM32_ADCPRE STM32_ADCPRE_DIV4
|
#define STM32_ADCPRE STM32_ADCPRE_DIV4
|
||||||
#define STM32_USB_CLOCK_REQUIRED TRUE
|
#define STM32_USB_CLOCK_REQUIRED TRUE
|
||||||
#define STM32_USBPRE STM32_USBPRE_DIV1P5
|
#define STM32_USBPRE STM32_USBPRE_DIV1P5
|
||||||
#define STM32_MCOSEL STM32_MCOSEL_NOCLOCK
|
#define STM32_MCOSEL STM32_MCOSEL_NOCLOCK
|
||||||
#define STM32_RTCSEL STM32_RTCSEL_HSEDIV
|
#define STM32_RTCSEL STM32_RTCSEL_HSEDIV
|
||||||
#define STM32_PVD_ENABLE FALSE
|
#define STM32_PVD_ENABLE FALSE
|
||||||
#define STM32_PLS STM32_PLS_LEV0
|
#define STM32_PLS STM32_PLS_LEV0
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* ADC driver system settings.
|
* ADC driver system settings.
|
||||||
*/
|
*/
|
||||||
#define STM32_ADC_USE_ADC1 FALSE
|
#define STM32_ADC_USE_ADC1 FALSE
|
||||||
#define STM32_ADC_ADC1_DMA_PRIORITY 2
|
#define STM32_ADC_ADC1_DMA_PRIORITY 2
|
||||||
#define STM32_ADC_ADC1_IRQ_PRIORITY 6
|
#define STM32_ADC_ADC1_IRQ_PRIORITY 6
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* CAN driver system settings.
|
* CAN driver system settings.
|
||||||
*/
|
*/
|
||||||
#define STM32_CAN_USE_CAN1 FALSE
|
#define STM32_CAN_USE_CAN1 FALSE
|
||||||
#define STM32_CAN_CAN1_IRQ_PRIORITY 11
|
#define STM32_CAN_CAN1_IRQ_PRIORITY 11
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* EXT driver system settings.
|
* EXT driver system settings.
|
||||||
*/
|
*/
|
||||||
#define STM32_EXT_EXTI0_IRQ_PRIORITY 6
|
#define STM32_EXT_EXTI0_IRQ_PRIORITY 6
|
||||||
#define STM32_EXT_EXTI1_IRQ_PRIORITY 6
|
#define STM32_EXT_EXTI1_IRQ_PRIORITY 6
|
||||||
#define STM32_EXT_EXTI2_IRQ_PRIORITY 6
|
#define STM32_EXT_EXTI2_IRQ_PRIORITY 6
|
||||||
#define STM32_EXT_EXTI3_IRQ_PRIORITY 6
|
#define STM32_EXT_EXTI3_IRQ_PRIORITY 6
|
||||||
#define STM32_EXT_EXTI4_IRQ_PRIORITY 6
|
#define STM32_EXT_EXTI4_IRQ_PRIORITY 6
|
||||||
#define STM32_EXT_EXTI5_9_IRQ_PRIORITY 6
|
#define STM32_EXT_EXTI5_9_IRQ_PRIORITY 6
|
||||||
#define STM32_EXT_EXTI10_15_IRQ_PRIORITY 6
|
#define STM32_EXT_EXTI10_15_IRQ_PRIORITY 6
|
||||||
#define STM32_EXT_EXTI16_IRQ_PRIORITY 6
|
#define STM32_EXT_EXTI16_IRQ_PRIORITY 6
|
||||||
#define STM32_EXT_EXTI17_IRQ_PRIORITY 6
|
#define STM32_EXT_EXTI17_IRQ_PRIORITY 6
|
||||||
#define STM32_EXT_EXTI18_IRQ_PRIORITY 6
|
#define STM32_EXT_EXTI18_IRQ_PRIORITY 6
|
||||||
#define STM32_EXT_EXTI19_IRQ_PRIORITY 6
|
#define STM32_EXT_EXTI19_IRQ_PRIORITY 6
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* GPT driver system settings.
|
* GPT driver system settings.
|
||||||
*/
|
*/
|
||||||
#define STM32_GPT_USE_TIM1 FALSE
|
#define STM32_GPT_USE_TIM1 FALSE
|
||||||
#define STM32_GPT_USE_TIM2 FALSE
|
#define STM32_GPT_USE_TIM2 FALSE
|
||||||
#define STM32_GPT_USE_TIM3 FALSE
|
#define STM32_GPT_USE_TIM3 FALSE
|
||||||
#define STM32_GPT_USE_TIM4 FALSE
|
#define STM32_GPT_USE_TIM4 FALSE
|
||||||
#define STM32_GPT_USE_TIM5 FALSE
|
#define STM32_GPT_USE_TIM5 FALSE
|
||||||
#define STM32_GPT_USE_TIM8 FALSE
|
#define STM32_GPT_USE_TIM8 FALSE
|
||||||
#define STM32_GPT_TIM1_IRQ_PRIORITY 7
|
#define STM32_GPT_TIM1_IRQ_PRIORITY 7
|
||||||
#define STM32_GPT_TIM2_IRQ_PRIORITY 7
|
#define STM32_GPT_TIM2_IRQ_PRIORITY 7
|
||||||
#define STM32_GPT_TIM3_IRQ_PRIORITY 7
|
#define STM32_GPT_TIM3_IRQ_PRIORITY 7
|
||||||
#define STM32_GPT_TIM4_IRQ_PRIORITY 7
|
#define STM32_GPT_TIM4_IRQ_PRIORITY 7
|
||||||
#define STM32_GPT_TIM5_IRQ_PRIORITY 7
|
#define STM32_GPT_TIM5_IRQ_PRIORITY 7
|
||||||
#define STM32_GPT_TIM8_IRQ_PRIORITY 7
|
#define STM32_GPT_TIM8_IRQ_PRIORITY 7
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* I2C driver system settings.
|
* I2C driver system settings.
|
||||||
*/
|
*/
|
||||||
#define STM32_I2C_USE_I2C1 FALSE
|
#define STM32_I2C_USE_I2C1 FALSE
|
||||||
#define STM32_I2C_USE_I2C2 FALSE
|
#define STM32_I2C_USE_I2C2 FALSE
|
||||||
#define STM32_I2C_BUSY_TIMEOUT 50
|
#define STM32_I2C_BUSY_TIMEOUT 50
|
||||||
#define STM32_I2C_I2C1_IRQ_PRIORITY 5
|
#define STM32_I2C_I2C1_IRQ_PRIORITY 5
|
||||||
#define STM32_I2C_I2C2_IRQ_PRIORITY 5
|
#define STM32_I2C_I2C2_IRQ_PRIORITY 5
|
||||||
#define STM32_I2C_I2C1_DMA_PRIORITY 3
|
#define STM32_I2C_I2C1_DMA_PRIORITY 3
|
||||||
#define STM32_I2C_I2C2_DMA_PRIORITY 3
|
#define STM32_I2C_I2C2_DMA_PRIORITY 3
|
||||||
#define STM32_I2C_DMA_ERROR_HOOK(i2cp) osalSysHalt("DMA failure")
|
#define STM32_I2C_DMA_ERROR_HOOK(i2cp) osalSysHalt("DMA failure")
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* ICU driver system settings.
|
* ICU driver system settings.
|
||||||
*/
|
*/
|
||||||
#define STM32_ICU_USE_TIM1 FALSE
|
#define STM32_ICU_USE_TIM1 FALSE
|
||||||
#define STM32_ICU_USE_TIM2 FALSE
|
#define STM32_ICU_USE_TIM2 FALSE
|
||||||
#define STM32_ICU_USE_TIM3 FALSE
|
#define STM32_ICU_USE_TIM3 FALSE
|
||||||
#define STM32_ICU_USE_TIM4 FALSE
|
#define STM32_ICU_USE_TIM4 FALSE
|
||||||
#define STM32_ICU_USE_TIM5 FALSE
|
#define STM32_ICU_USE_TIM5 FALSE
|
||||||
#define STM32_ICU_USE_TIM8 FALSE
|
#define STM32_ICU_USE_TIM8 FALSE
|
||||||
#define STM32_ICU_TIM1_IRQ_PRIORITY 7
|
#define STM32_ICU_TIM1_IRQ_PRIORITY 7
|
||||||
#define STM32_ICU_TIM2_IRQ_PRIORITY 7
|
#define STM32_ICU_TIM2_IRQ_PRIORITY 7
|
||||||
#define STM32_ICU_TIM3_IRQ_PRIORITY 7
|
#define STM32_ICU_TIM3_IRQ_PRIORITY 7
|
||||||
#define STM32_ICU_TIM4_IRQ_PRIORITY 7
|
#define STM32_ICU_TIM4_IRQ_PRIORITY 7
|
||||||
#define STM32_ICU_TIM5_IRQ_PRIORITY 7
|
#define STM32_ICU_TIM5_IRQ_PRIORITY 7
|
||||||
#define STM32_ICU_TIM8_IRQ_PRIORITY 7
|
#define STM32_ICU_TIM8_IRQ_PRIORITY 7
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* PWM driver system settings.
|
* PWM driver system settings.
|
||||||
*/
|
*/
|
||||||
#define STM32_PWM_USE_ADVANCED FALSE
|
#define STM32_PWM_USE_ADVANCED FALSE
|
||||||
#define STM32_PWM_USE_TIM1 FALSE
|
#define STM32_PWM_USE_TIM1 FALSE
|
||||||
#define STM32_PWM_USE_TIM2 FALSE
|
#define STM32_PWM_USE_TIM2 FALSE
|
||||||
#define STM32_PWM_USE_TIM3 FALSE
|
#define STM32_PWM_USE_TIM3 FALSE
|
||||||
#define STM32_PWM_USE_TIM4 FALSE
|
#define STM32_PWM_USE_TIM4 FALSE
|
||||||
#define STM32_PWM_USE_TIM5 FALSE
|
#define STM32_PWM_USE_TIM5 FALSE
|
||||||
#define STM32_PWM_USE_TIM8 FALSE
|
#define STM32_PWM_USE_TIM8 FALSE
|
||||||
#define STM32_PWM_TIM1_IRQ_PRIORITY 7
|
#define STM32_PWM_TIM1_IRQ_PRIORITY 7
|
||||||
#define STM32_PWM_TIM2_IRQ_PRIORITY 7
|
#define STM32_PWM_TIM2_IRQ_PRIORITY 7
|
||||||
#define STM32_PWM_TIM3_IRQ_PRIORITY 7
|
#define STM32_PWM_TIM3_IRQ_PRIORITY 7
|
||||||
#define STM32_PWM_TIM4_IRQ_PRIORITY 7
|
#define STM32_PWM_TIM4_IRQ_PRIORITY 7
|
||||||
#define STM32_PWM_TIM5_IRQ_PRIORITY 7
|
#define STM32_PWM_TIM5_IRQ_PRIORITY 7
|
||||||
#define STM32_PWM_TIM8_IRQ_PRIORITY 7
|
#define STM32_PWM_TIM8_IRQ_PRIORITY 7
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* RTC driver system settings.
|
* RTC driver system settings.
|
||||||
*/
|
*/
|
||||||
#define STM32_RTC_IRQ_PRIORITY 15
|
#define STM32_RTC_IRQ_PRIORITY 15
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* SERIAL driver system settings.
|
* SERIAL driver system settings.
|
||||||
*/
|
*/
|
||||||
#define STM32_SERIAL_USE_USART1 FALSE
|
#define STM32_SERIAL_USE_USART1 FALSE
|
||||||
#define STM32_SERIAL_USE_USART2 FALSE
|
#define STM32_SERIAL_USE_USART2 FALSE
|
||||||
#define STM32_SERIAL_USE_USART3 FALSE
|
#define STM32_SERIAL_USE_USART3 FALSE
|
||||||
#define STM32_SERIAL_USE_UART4 FALSE
|
#define STM32_SERIAL_USE_UART4 FALSE
|
||||||
#define STM32_SERIAL_USE_UART5 FALSE
|
#define STM32_SERIAL_USE_UART5 FALSE
|
||||||
#define STM32_SERIAL_USART1_PRIORITY 12
|
#define STM32_SERIAL_USART1_PRIORITY 12
|
||||||
#define STM32_SERIAL_USART2_PRIORITY 12
|
#define STM32_SERIAL_USART2_PRIORITY 12
|
||||||
#define STM32_SERIAL_USART3_PRIORITY 12
|
#define STM32_SERIAL_USART3_PRIORITY 12
|
||||||
#define STM32_SERIAL_UART4_PRIORITY 12
|
#define STM32_SERIAL_UART4_PRIORITY 12
|
||||||
#define STM32_SERIAL_UART5_PRIORITY 12
|
#define STM32_SERIAL_UART5_PRIORITY 12
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* SPI driver system settings.
|
* SPI driver system settings.
|
||||||
*/
|
*/
|
||||||
#define STM32_SPI_USE_SPI1 FALSE
|
#define STM32_SPI_USE_SPI1 FALSE
|
||||||
#define STM32_SPI_USE_SPI2 FALSE
|
#define STM32_SPI_USE_SPI2 FALSE
|
||||||
#define STM32_SPI_USE_SPI3 FALSE
|
#define STM32_SPI_USE_SPI3 FALSE
|
||||||
#define STM32_SPI_SPI1_DMA_PRIORITY 1
|
#define STM32_SPI_SPI1_DMA_PRIORITY 1
|
||||||
#define STM32_SPI_SPI2_DMA_PRIORITY 1
|
#define STM32_SPI_SPI2_DMA_PRIORITY 1
|
||||||
#define STM32_SPI_SPI3_DMA_PRIORITY 1
|
#define STM32_SPI_SPI3_DMA_PRIORITY 1
|
||||||
#define STM32_SPI_SPI1_IRQ_PRIORITY 10
|
#define STM32_SPI_SPI1_IRQ_PRIORITY 10
|
||||||
#define STM32_SPI_SPI2_IRQ_PRIORITY 10
|
#define STM32_SPI_SPI2_IRQ_PRIORITY 10
|
||||||
#define STM32_SPI_SPI3_IRQ_PRIORITY 10
|
#define STM32_SPI_SPI3_IRQ_PRIORITY 10
|
||||||
#define STM32_SPI_DMA_ERROR_HOOK(spip) osalSysHalt("DMA failure")
|
#define STM32_SPI_DMA_ERROR_HOOK(spip) osalSysHalt("DMA failure")
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* ST driver system settings.
|
* ST driver system settings.
|
||||||
*/
|
*/
|
||||||
#define STM32_ST_IRQ_PRIORITY 8
|
#define STM32_ST_IRQ_PRIORITY 8
|
||||||
#define STM32_ST_USE_TIMER 2
|
#define STM32_ST_USE_TIMER 2
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* UART driver system settings.
|
* UART driver system settings.
|
||||||
*/
|
*/
|
||||||
#define STM32_UART_USE_USART1 FALSE
|
#define STM32_UART_USE_USART1 FALSE
|
||||||
#define STM32_UART_USE_USART2 FALSE
|
#define STM32_UART_USE_USART2 FALSE
|
||||||
#define STM32_UART_USE_USART3 FALSE
|
#define STM32_UART_USE_USART3 FALSE
|
||||||
#define STM32_UART_USART1_IRQ_PRIORITY 12
|
#define STM32_UART_USART1_IRQ_PRIORITY 12
|
||||||
#define STM32_UART_USART2_IRQ_PRIORITY 12
|
#define STM32_UART_USART2_IRQ_PRIORITY 12
|
||||||
#define STM32_UART_USART3_IRQ_PRIORITY 12
|
#define STM32_UART_USART3_IRQ_PRIORITY 12
|
||||||
#define STM32_UART_USART1_DMA_PRIORITY 0
|
#define STM32_UART_USART1_DMA_PRIORITY 0
|
||||||
#define STM32_UART_USART2_DMA_PRIORITY 0
|
#define STM32_UART_USART2_DMA_PRIORITY 0
|
||||||
#define STM32_UART_USART3_DMA_PRIORITY 0
|
#define STM32_UART_USART3_DMA_PRIORITY 0
|
||||||
#define STM32_UART_DMA_ERROR_HOOK(uartp) osalSysHalt("DMA failure")
|
#define STM32_UART_DMA_ERROR_HOOK(uartp) osalSysHalt("DMA failure")
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* USB driver system settings.
|
* USB driver system settings.
|
||||||
*/
|
*/
|
||||||
#define STM32_USB_USE_USB1 TRUE
|
#define STM32_USB_USE_USB1 TRUE
|
||||||
#define STM32_USB_LOW_POWER_ON_SUSPEND FALSE
|
#define STM32_USB_LOW_POWER_ON_SUSPEND FALSE
|
||||||
#define STM32_USB_USB1_HP_IRQ_PRIORITY 13
|
#define STM32_USB_USB1_HP_IRQ_PRIORITY 13
|
||||||
#define STM32_USB_USB1_LP_IRQ_PRIORITY 14
|
#define STM32_USB_USB1_LP_IRQ_PRIORITY 14
|
||||||
|
|
||||||
#endif /* _MCUCONF_H_ */
|
#endif /* _MCUCONF_H_ */
|
||||||
|
@ -0,0 +1,52 @@
|
|||||||
|
# project specific files
|
||||||
|
SRC = matrix.c \
|
||||||
|
led.c
|
||||||
|
|
||||||
|
# GENERIC STM32F103C8T6 board - stm32duino bootloader
|
||||||
|
OPT_DEFS = -DCORTEX_VTOR_INIT=0x2000
|
||||||
|
MCU_LDSCRIPT = STM32F103x8_stm32duino_bootloader
|
||||||
|
BOARD = GENERIC_STM32_F103
|
||||||
|
|
||||||
|
# GENERIC STM32F103C8T6 board - no bootloader (programmer over serial or SWD)
|
||||||
|
# OPT_DEFS =
|
||||||
|
# MCU_LDSCRIPT = STM32F103x8
|
||||||
|
# BOARD = GENERIC_STM32_F103
|
||||||
|
|
||||||
|
# MAPLE MINI
|
||||||
|
# OPT_DEFS = -DCORTEX_VTOR_INIT=0x5000
|
||||||
|
# MCU_LDSCRIPT = STM32F103xB_maplemini_bootloader
|
||||||
|
# BOARD = MAPLEMINI_STM32_F103
|
||||||
|
|
||||||
|
## 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/ports/ARMCMx/compilers/GCC/ld/
|
||||||
|
# or <this_dir>/ld/
|
||||||
|
# startup code to use
|
||||||
|
# is should exist in <chibios>/os/common/ports/ARMCMx/compilers/GCC/mk/
|
||||||
|
MCU_STARTUP = stm32f1xx
|
||||||
|
# it should exist either in <chibios>/os/hal/boards/
|
||||||
|
# or <this_dir>/boards
|
||||||
|
# Cortex version
|
||||||
|
# Teensy LC is cortex-m0; Teensy 3.x are cortex-m4
|
||||||
|
MCU = cortex-m3
|
||||||
|
# ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7
|
||||||
|
ARMV = 7
|
||||||
|
# If you want to be able to jump to bootloader from firmware on STM32 MCUs,
|
||||||
|
# set the correct BOOTLOADER_ADDRESS. Either set it here, or define it in
|
||||||
|
# ./bootloader_defs.h or in ./boards/<FOO>/bootloader_defs.h (if you have
|
||||||
|
# a custom board definition that you plan to reuse).
|
||||||
|
# If you're not setting it here, leave it commented out.
|
||||||
|
# It is chip dependent, the correct number can be looked up here (page 175):
|
||||||
|
# http://www.st.com/web/en/resource/technical/document/application_note/CD00167594.pdf
|
||||||
|
# This also requires a patch to chibios:
|
||||||
|
# <tmk_dir>/tmk_core/tool/chibios/ch-bootloader-jump.patch
|
||||||
|
#STM32_BOOTLOADER_ADDRESS = 0x1FFFC800
|
||||||
|
|
||||||
|
|
||||||
|
ifndef QUANTUM_DIR
|
||||||
|
include ../../../Makefile
|
||||||
|
endif
|
@ -1,49 +1,3 @@
|
|||||||
# project specific files
|
ifndef MAKEFILE_INCLUDED
|
||||||
SRC = matrix.c \
|
|
||||||
led.c
|
|
||||||
|
|
||||||
## chip/board settings
|
|
||||||
# - the next two should match the directories in
|
|
||||||
# <chibios>/os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES)
|
|
||||||
# - For Teensies, FAMILY = KINETIS and SERIES is either
|
|
||||||
# KL2x (LC) or K20x (3.0,3.1,3.2).
|
|
||||||
MCU_FAMILY = KINETIS
|
|
||||||
MCU_SERIES = KL2x
|
|
||||||
|
|
||||||
# Linker script to use
|
|
||||||
# - it should exist either in <chibios>/os/common/ports/ARMCMx/compilers/GCC/ld/
|
|
||||||
# or <this_dir>/ld/
|
|
||||||
# - NOTE: a custom ld script is needed for EEPROM on Teensy LC
|
|
||||||
# - LDSCRIPT =
|
|
||||||
# - MKL26Z64 for Teensy LC
|
|
||||||
# - MK20DX128 for Teensy 3.0
|
|
||||||
# - MK20DX256 for Teensy 3.1 and 3.2
|
|
||||||
MCU_LDSCRIPT = MKL26Z64
|
|
||||||
|
|
||||||
# Startup code to use
|
|
||||||
# - it should exist in <chibios>/os/common/ports/ARMCMx/compilers/GCC/mk/
|
|
||||||
# - STARTUP =
|
|
||||||
# - kl2x for Teensy LC
|
|
||||||
# - k20x5 for Teensy 3.0
|
|
||||||
# - k20x7 for Teensy 3.1 and 3.2
|
|
||||||
MCU_STARTUP = kl2x
|
|
||||||
|
|
||||||
# Board: it should exist either in <chibios>/os/hal/boards/
|
|
||||||
# or <this_dir>/boards
|
|
||||||
# - BOARD =
|
|
||||||
# - PJRC_TEENSY_LC for Teensy LC
|
|
||||||
# - PJRC_TEENSY_3 for Teensy 3.0
|
|
||||||
# - PJRC_TEENSY_3_1 for Teensy 3.1 or 3.2
|
|
||||||
BOARD = PJRC_TEENSY_LC
|
|
||||||
|
|
||||||
# Cortex version
|
|
||||||
# Teensy LC is cortex-m0plus; Teensy 3.x are cortex-m4
|
|
||||||
MCU = cortex-m0plus
|
|
||||||
|
|
||||||
# ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7
|
|
||||||
# I.e. 6 for Teensy LC; 7 for Teensy 3.x
|
|
||||||
ARMV = 6
|
|
||||||
|
|
||||||
ifndef QUANTUM_DIR
|
|
||||||
include ../../../Makefile
|
include ../../../Makefile
|
||||||
endif
|
endif
|
File diff suppressed because it is too large
Load Diff
@ -1,187 +1,187 @@
|
|||||||
/*
|
/*
|
||||||
ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio
|
ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio
|
||||||
|
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
you may not use this file except in compliance with the License.
|
you may not use this file except in compliance with the License.
|
||||||
You may obtain a copy of the License at
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
http://www.apache.org/licenses/LICENSE-2.0
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
Unless required by applicable law or agreed to in writing, software
|
Unless required by applicable law or agreed to in writing, software
|
||||||
distributed under the License is distributed on an "AS IS" BASIS,
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
See the License for the specific language governing permissions and
|
See the License for the specific language governing permissions and
|
||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @file templates/halconf.h
|
* @file templates/halconf.h
|
||||||
* @brief HAL configuration header.
|
* @brief HAL configuration header.
|
||||||
* @details HAL configuration file, this file allows to enable or disable the
|
* @details HAL configuration file, this file allows to enable or disable the
|
||||||
* various device drivers from your application. You may also use
|
* various device drivers from your application. You may also use
|
||||||
* this file in order to override the device drivers default settings.
|
* this file in order to override the device drivers default settings.
|
||||||
*
|
*
|
||||||
* @addtogroup HAL_CONF
|
* @addtogroup HAL_CONF
|
||||||
* @{
|
* @{
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef _HALCONF_H_
|
#ifndef _HALCONF_H_
|
||||||
#define _HALCONF_H_
|
#define _HALCONF_H_
|
||||||
|
|
||||||
#include "mcuconf.h"
|
#include "mcuconf.h"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Enables the PAL subsystem.
|
* @brief Enables the PAL subsystem.
|
||||||
*/
|
*/
|
||||||
#if !defined(HAL_USE_PAL) || defined(__DOXYGEN__)
|
#if !defined(HAL_USE_PAL) || defined(__DOXYGEN__)
|
||||||
#define HAL_USE_PAL TRUE
|
#define HAL_USE_PAL TRUE
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Enables the ADC subsystem.
|
* @brief Enables the ADC subsystem.
|
||||||
*/
|
*/
|
||||||
#if !defined(HAL_USE_ADC) || defined(__DOXYGEN__)
|
#if !defined(HAL_USE_ADC) || defined(__DOXYGEN__)
|
||||||
#define HAL_USE_ADC FALSE
|
#define HAL_USE_ADC FALSE
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Enables the CAN subsystem.
|
* @brief Enables the CAN subsystem.
|
||||||
*/
|
*/
|
||||||
#if !defined(HAL_USE_CAN) || defined(__DOXYGEN__)
|
#if !defined(HAL_USE_CAN) || defined(__DOXYGEN__)
|
||||||
#define HAL_USE_CAN FALSE
|
#define HAL_USE_CAN FALSE
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Enables the DAC subsystem.
|
* @brief Enables the DAC subsystem.
|
||||||
*/
|
*/
|
||||||
#if !defined(HAL_USE_DAC) || defined(__DOXYGEN__)
|
#if !defined(HAL_USE_DAC) || defined(__DOXYGEN__)
|
||||||
#define HAL_USE_DAC FALSE
|
#define HAL_USE_DAC FALSE
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Enables the EXT subsystem.
|
* @brief Enables the EXT subsystem.
|
||||||
*/
|
*/
|
||||||
#if !defined(HAL_USE_EXT) || defined(__DOXYGEN__)
|
#if !defined(HAL_USE_EXT) || defined(__DOXYGEN__)
|
||||||
#define HAL_USE_EXT FALSE
|
#define HAL_USE_EXT FALSE
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Enables the GPT subsystem.
|
* @brief Enables the GPT subsystem.
|
||||||
*/
|
*/
|
||||||
#if !defined(HAL_USE_GPT) || defined(__DOXYGEN__)
|
#if !defined(HAL_USE_GPT) || defined(__DOXYGEN__)
|
||||||
#define HAL_USE_GPT FALSE
|
#define HAL_USE_GPT FALSE
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Enables the I2C subsystem.
|
* @brief Enables the I2C subsystem.
|
||||||
*/
|
*/
|
||||||
#if !defined(HAL_USE_I2C) || defined(__DOXYGEN__)
|
#if !defined(HAL_USE_I2C) || defined(__DOXYGEN__)
|
||||||
#define HAL_USE_I2C FALSE
|
#define HAL_USE_I2C FALSE
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Enables the I2S subsystem.
|
* @brief Enables the I2S subsystem.
|
||||||
*/
|
*/
|
||||||
#if !defined(HAL_USE_I2S) || defined(__DOXYGEN__)
|
#if !defined(HAL_USE_I2S) || defined(__DOXYGEN__)
|
||||||
#define HAL_USE_I2S FALSE
|
#define HAL_USE_I2S FALSE
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Enables the ICU subsystem.
|
* @brief Enables the ICU subsystem.
|
||||||
*/
|
*/
|
||||||
#if !defined(HAL_USE_ICU) || defined(__DOXYGEN__)
|
#if !defined(HAL_USE_ICU) || defined(__DOXYGEN__)
|
||||||
#define HAL_USE_ICU FALSE
|
#define HAL_USE_ICU FALSE
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Enables the MAC subsystem.
|
* @brief Enables the MAC subsystem.
|
||||||
*/
|
*/
|
||||||
#if !defined(HAL_USE_MAC) || defined(__DOXYGEN__)
|
#if !defined(HAL_USE_MAC) || defined(__DOXYGEN__)
|
||||||
#define HAL_USE_MAC FALSE
|
#define HAL_USE_MAC FALSE
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Enables the MMC_SPI subsystem.
|
* @brief Enables the MMC_SPI subsystem.
|
||||||
*/
|
*/
|
||||||
#if !defined(HAL_USE_MMC_SPI) || defined(__DOXYGEN__)
|
#if !defined(HAL_USE_MMC_SPI) || defined(__DOXYGEN__)
|
||||||
#define HAL_USE_MMC_SPI FALSE
|
#define HAL_USE_MMC_SPI FALSE
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Enables the PWM subsystem.
|
* @brief Enables the PWM subsystem.
|
||||||
*/
|
*/
|
||||||
#if !defined(HAL_USE_PWM) || defined(__DOXYGEN__)
|
#if !defined(HAL_USE_PWM) || defined(__DOXYGEN__)
|
||||||
#define HAL_USE_PWM FALSE
|
#define HAL_USE_PWM FALSE
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Enables the RTC subsystem.
|
* @brief Enables the RTC subsystem.
|
||||||
*/
|
*/
|
||||||
#if !defined(HAL_USE_RTC) || defined(__DOXYGEN__)
|
#if !defined(HAL_USE_RTC) || defined(__DOXYGEN__)
|
||||||
#define HAL_USE_RTC FALSE
|
#define HAL_USE_RTC FALSE
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Enables the SDC subsystem.
|
* @brief Enables the SDC subsystem.
|
||||||
*/
|
*/
|
||||||
#if !defined(HAL_USE_SDC) || defined(__DOXYGEN__)
|
#if !defined(HAL_USE_SDC) || defined(__DOXYGEN__)
|
||||||
#define HAL_USE_SDC FALSE
|
#define HAL_USE_SDC FALSE
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Enables the SERIAL subsystem.
|
* @brief Enables the SERIAL subsystem.
|
||||||
*/
|
*/
|
||||||
#if !defined(HAL_USE_SERIAL) || defined(__DOXYGEN__)
|
#if !defined(HAL_USE_SERIAL) || defined(__DOXYGEN__)
|
||||||
#define HAL_USE_SERIAL FALSE
|
#define HAL_USE_SERIAL FALSE
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Enables the SERIAL over USB subsystem.
|
* @brief Enables the SERIAL over USB subsystem.
|
||||||
*/
|
*/
|
||||||
#if !defined(HAL_USE_SERIAL_USB) || defined(__DOXYGEN__)
|
#if !defined(HAL_USE_SERIAL_USB) || defined(__DOXYGEN__)
|
||||||
#define HAL_USE_SERIAL_USB FALSE
|
#define HAL_USE_SERIAL_USB FALSE
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Enables the SPI subsystem.
|
* @brief Enables the SPI subsystem.
|
||||||
*/
|
*/
|
||||||
#if !defined(HAL_USE_SPI) || defined(__DOXYGEN__)
|
#if !defined(HAL_USE_SPI) || defined(__DOXYGEN__)
|
||||||
#define HAL_USE_SPI FALSE
|
#define HAL_USE_SPI FALSE
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Enables the UART subsystem.
|
* @brief Enables the UART subsystem.
|
||||||
*/
|
*/
|
||||||
#if !defined(HAL_USE_UART) || defined(__DOXYGEN__)
|
#if !defined(HAL_USE_UART) || defined(__DOXYGEN__)
|
||||||
#define HAL_USE_UART FALSE
|
#define HAL_USE_UART FALSE
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Enables the USB subsystem.
|
* @brief Enables the USB subsystem.
|
||||||
*/
|
*/
|
||||||
#if !defined(HAL_USE_USB) || defined(__DOXYGEN__)
|
#if !defined(HAL_USE_USB) || defined(__DOXYGEN__)
|
||||||
#define HAL_USE_USB TRUE
|
#define HAL_USE_USB TRUE
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Enables the WDG subsystem.
|
* @brief Enables the WDG subsystem.
|
||||||
*/
|
*/
|
||||||
#if !defined(HAL_USE_WDG) || defined(__DOXYGEN__)
|
#if !defined(HAL_USE_WDG) || defined(__DOXYGEN__)
|
||||||
#define HAL_USE_WDG FALSE
|
#define HAL_USE_WDG FALSE
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*===========================================================================*/
|
/*===========================================================================*/
|
||||||
/* USB driver related settings. */
|
/* USB driver related settings. */
|
||||||
/*===========================================================================*/
|
/*===========================================================================*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Enables synchronous APIs.
|
* @brief Enables synchronous APIs.
|
||||||
* @note Disabling this option saves both code and data space.
|
* @note Disabling this option saves both code and data space.
|
||||||
*/
|
*/
|
||||||
#if !defined(USB_USE_WAIT) || defined(__DOXYGEN__)
|
#if !defined(USB_USE_WAIT) || defined(__DOXYGEN__)
|
||||||
#define USB_USE_WAIT TRUE
|
#define USB_USE_WAIT TRUE
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif /* _HALCONF_H_ */
|
#endif /* _HALCONF_H_ */
|
||||||
|
|
||||||
/** @} */
|
/** @} */
|
||||||
|
@ -1,55 +1,55 @@
|
|||||||
/*
|
/*
|
||||||
ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio
|
ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio
|
||||||
|
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
you may not use this file except in compliance with the License.
|
you may not use this file except in compliance with the License.
|
||||||
You may obtain a copy of the License at
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
http://www.apache.org/licenses/LICENSE-2.0
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
Unless required by applicable law or agreed to in writing, software
|
Unless required by applicable law or agreed to in writing, software
|
||||||
distributed under the License is distributed on an "AS IS" BASIS,
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
See the License for the specific language governing permissions and
|
See the License for the specific language governing permissions and
|
||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef _MCUCONF_H_
|
#ifndef _MCUCONF_H_
|
||||||
#define _MCUCONF_H_
|
#define _MCUCONF_H_
|
||||||
|
|
||||||
#define KL2x_MCUCONF
|
#define KL2x_MCUCONF
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* HAL driver system settings.
|
* HAL driver system settings.
|
||||||
*/
|
*/
|
||||||
#if 1
|
#if 1
|
||||||
/* PEE mode - 48MHz system clock driven by (16 MHz) external crystal. */
|
/* PEE mode - 48MHz system clock driven by (16 MHz) external crystal. */
|
||||||
#define KINETIS_MCG_MODE KINETIS_MCG_MODE_PEE
|
#define KINETIS_MCG_MODE KINETIS_MCG_MODE_PEE
|
||||||
#define KINETIS_PLLCLK_FREQUENCY 96000000UL
|
#define KINETIS_PLLCLK_FREQUENCY 96000000UL
|
||||||
#define KINETIS_SYSCLK_FREQUENCY 48000000UL
|
#define KINETIS_SYSCLK_FREQUENCY 48000000UL
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
/* crystal-less FEI mode - 48 MHz with internal 32.768 kHz crystal */
|
/* crystal-less FEI mode - 48 MHz with internal 32.768 kHz crystal */
|
||||||
#define KINETIS_MCG_MODE KINETIS_MCG_MODE_FEI
|
#define KINETIS_MCG_MODE KINETIS_MCG_MODE_FEI
|
||||||
#define KINETIS_MCG_FLL_DMX32 1 /* Fine-tune for 32.768 kHz */
|
#define KINETIS_MCG_FLL_DMX32 1 /* Fine-tune for 32.768 kHz */
|
||||||
#define KINETIS_MCG_FLL_DRS 1 /* 1464x FLL factor */
|
#define KINETIS_MCG_FLL_DRS 1 /* 1464x FLL factor */
|
||||||
#define KINETIS_SYSCLK_FREQUENCY 47972352UL /* 32.768 kHz * 1464 (~48 MHz) */
|
#define KINETIS_SYSCLK_FREQUENCY 47972352UL /* 32.768 kHz * 1464 (~48 MHz) */
|
||||||
#define KINETIS_CLKDIV1_OUTDIV1 1 /* do not divide system clock */
|
#define KINETIS_CLKDIV1_OUTDIV1 1 /* do not divide system clock */
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* SERIAL driver system settings.
|
* SERIAL driver system settings.
|
||||||
*/
|
*/
|
||||||
#define KINETIS_SERIAL_USE_UART0 TRUE
|
#define KINETIS_SERIAL_USE_UART0 TRUE
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* USB driver settings
|
* USB driver settings
|
||||||
*/
|
*/
|
||||||
#define KINETIS_USB_USE_USB0 TRUE
|
#define KINETIS_USB_USE_USB0 TRUE
|
||||||
/* Need to redefine this, since the default is for K20x */
|
/* Need to redefine this, since the default is for K20x */
|
||||||
/* This is for Teensy LC; you should comment it out (or change to 5)
|
/* This is for Teensy LC; you should comment it out (or change to 5)
|
||||||
* for Teensy 3.x */
|
* for Teensy 3.x */
|
||||||
#define KINETIS_USB_USB0_IRQ_PRIORITY 2
|
#define KINETIS_USB_USB0_IRQ_PRIORITY 2
|
||||||
|
|
||||||
#endif /* _MCUCONF_H_ */
|
#endif /* _MCUCONF_H_ */
|
||||||
|
@ -0,0 +1,49 @@
|
|||||||
|
# project specific files
|
||||||
|
SRC = matrix.c \
|
||||||
|
led.c
|
||||||
|
|
||||||
|
## chip/board settings
|
||||||
|
# - the next two should match the directories in
|
||||||
|
# <chibios>/os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES)
|
||||||
|
# - For Teensies, FAMILY = KINETIS and SERIES is either
|
||||||
|
# KL2x (LC) or K20x (3.0,3.1,3.2).
|
||||||
|
MCU_FAMILY = KINETIS
|
||||||
|
MCU_SERIES = KL2x
|
||||||
|
|
||||||
|
# Linker script to use
|
||||||
|
# - it should exist either in <chibios>/os/common/ports/ARMCMx/compilers/GCC/ld/
|
||||||
|
# or <this_dir>/ld/
|
||||||
|
# - NOTE: a custom ld script is needed for EEPROM on Teensy LC
|
||||||
|
# - LDSCRIPT =
|
||||||
|
# - MKL26Z64 for Teensy LC
|
||||||
|
# - MK20DX128 for Teensy 3.0
|
||||||
|
# - MK20DX256 for Teensy 3.1 and 3.2
|
||||||
|
MCU_LDSCRIPT = MKL26Z64
|
||||||
|
|
||||||
|
# Startup code to use
|
||||||
|
# - it should exist in <chibios>/os/common/ports/ARMCMx/compilers/GCC/mk/
|
||||||
|
# - STARTUP =
|
||||||
|
# - kl2x for Teensy LC
|
||||||
|
# - k20x5 for Teensy 3.0
|
||||||
|
# - k20x7 for Teensy 3.1 and 3.2
|
||||||
|
MCU_STARTUP = kl2x
|
||||||
|
|
||||||
|
# Board: it should exist either in <chibios>/os/hal/boards/
|
||||||
|
# or <this_dir>/boards
|
||||||
|
# - BOARD =
|
||||||
|
# - PJRC_TEENSY_LC for Teensy LC
|
||||||
|
# - PJRC_TEENSY_3 for Teensy 3.0
|
||||||
|
# - PJRC_TEENSY_3_1 for Teensy 3.1 or 3.2
|
||||||
|
BOARD = PJRC_TEENSY_LC
|
||||||
|
|
||||||
|
# Cortex version
|
||||||
|
# Teensy LC is cortex-m0plus; Teensy 3.x are cortex-m4
|
||||||
|
MCU = cortex-m0plus
|
||||||
|
|
||||||
|
# ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7
|
||||||
|
# I.e. 6 for Teensy LC; 7 for Teensy 3.x
|
||||||
|
ARMV = 6
|
||||||
|
|
||||||
|
ifndef QUANTUM_DIR
|
||||||
|
include ../../../Makefile
|
||||||
|
endif
|
@ -1,109 +1,5 @@
|
|||||||
#----------------------------------------------------------------------------
|
|
||||||
# On command line:
|
|
||||||
#
|
|
||||||
# make all = Make software.
|
|
||||||
#
|
|
||||||
# make clean = Clean out built project files.
|
|
||||||
#
|
|
||||||
# make coff = Convert ELF to AVR COFF.
|
|
||||||
#
|
|
||||||
# make extcoff = Convert ELF to AVR Extended COFF.
|
|
||||||
#
|
|
||||||
# make program = Download the hex file to the device.
|
|
||||||
# Please customize your programmer settings(PROGRAM_CMD)
|
|
||||||
#
|
|
||||||
# make teensy = Download the hex file to the device, using teensy_loader_cli.
|
|
||||||
# (must have teensy_loader_cli installed).
|
|
||||||
#
|
|
||||||
# make dfu = Download the hex file to the device, using dfu-programmer (must
|
|
||||||
# have dfu-programmer installed).
|
|
||||||
#
|
|
||||||
# make flip = Download the hex file to the device, using Atmel FLIP (must
|
|
||||||
# have Atmel FLIP installed).
|
|
||||||
#
|
|
||||||
# make dfu-ee = Download the eeprom file to the device, using dfu-programmer
|
|
||||||
# (must have dfu-programmer installed).
|
|
||||||
#
|
|
||||||
# make flip-ee = Download the eeprom file to the device, using Atmel FLIP
|
|
||||||
# (must have Atmel FLIP installed).
|
|
||||||
#
|
|
||||||
# make debug = Start either simulavr or avarice as specified for debugging,
|
|
||||||
# with avr-gdb or avr-insight as the front end for debugging.
|
|
||||||
#
|
|
||||||
# make filename.s = Just compile filename.c into the assembler code only.
|
|
||||||
#
|
|
||||||
# make filename.i = Create a preprocessed source file for use in submitting
|
|
||||||
# bug reports to the GCC project.
|
|
||||||
#
|
|
||||||
# To rebuild project do "make clean" then "make all".
|
|
||||||
#----------------------------------------------------------------------------
|
|
||||||
|
|
||||||
SUBPROJECT_DEFAULT = rev2
|
SUBPROJECT_DEFAULT = rev2
|
||||||
|
|
||||||
# MCU name
|
ifndef MAKEFILE_INCLUDED
|
||||||
MCU = atmega32u4
|
|
||||||
|
|
||||||
# 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(+60)
|
|
||||||
OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
|
|
||||||
|
|
||||||
|
|
||||||
# Boot Section Size in *bytes*
|
|
||||||
# Teensy halfKay 512
|
|
||||||
# Teensy++ halfKay 1024
|
|
||||||
# Atmel DFU loader 4096
|
|
||||||
# LUFA bootloader 4096
|
|
||||||
# USBaspLoader 2048
|
|
||||||
OPT_DEFS += -DBOOTLOADER_SIZE=4096
|
|
||||||
|
|
||||||
|
|
||||||
# Build Options
|
|
||||||
# comment out to disable the options.
|
|
||||||
#
|
|
||||||
BOOTMAGIC_ENABLE ?= yes # Virtual DIP switch configuration(+1000)
|
|
||||||
MOUSEKEY_ENABLE ?= no # Mouse keys(+4700)
|
|
||||||
EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450)
|
|
||||||
CONSOLE_ENABLE ?= yes # Console for debug(+400)
|
|
||||||
COMMAND_ENABLE ?= yes # Commands for debug and configuration
|
|
||||||
NKRO_ENABLE ?= yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
|
|
||||||
AUDIO_ENABLE ?= no
|
|
||||||
RGBLIGHT_ENABLE ?= no # Enable keyboard underlight functionality
|
|
||||||
MIDI_ENABLE ?= no # MIDI controls
|
|
||||||
UNICODE_ENABLE ?= no # Unicode
|
|
||||||
BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID
|
|
||||||
|
|
||||||
ifndef QUANTUM_DIR
|
|
||||||
include ../../Makefile
|
include ../../Makefile
|
||||||
endif
|
endif
|
@ -0,0 +1,5 @@
|
|||||||
|
# skullY's Clueboard Layout
|
||||||
|
|
||||||
|
This layout is what I (@skullydazed) use on my personal Clueboards. I mostly use it for programming, CAD, and general typing.
|
||||||
|
|
||||||
|
The most notable change from the default layout is putting Ctrl on the Capslock key. I also swap Alt and Cmd because I mostly use a Mac day to day.
|
@ -1,4 +1,97 @@
|
|||||||
Clueboard keyboard firmware
|
Clueboard keyboard firmware
|
||||||
======================
|
======================
|
||||||
|
|
||||||
TODO: to be updated.
|
DIY/Assembled compact 66% keyboard by [Clueboard](http://clueboard.co).
|
||||||
|
|
||||||
|
For the full Quantum Mechanical Keyboard feature list, see [the parent readme.md](/readme.md).
|
||||||
|
|
||||||
|
## First Time Setup
|
||||||
|
|
||||||
|
Download or clone the whole firmware and navigate to the keyboards/clueboard directory. Once your dev env is setup, you'll be able to generate the default .hex:
|
||||||
|
|
||||||
|
```
|
||||||
|
$ make
|
||||||
|
```
|
||||||
|
|
||||||
|
You will see a lot of output and if everything worked correctly you will see something similar to this:
|
||||||
|
|
||||||
|
```
|
||||||
|
Size after:
|
||||||
|
text data bss dec hex filename
|
||||||
|
0 19992 0 19992 4e18 clueboard_rev2_default.hex
|
||||||
|
```
|
||||||
|
|
||||||
|
At this point you can press RESET on your Clueboard and flash your keyboard with this command:
|
||||||
|
|
||||||
|
```
|
||||||
|
$ make dfu
|
||||||
|
```
|
||||||
|
|
||||||
|
If you would like to use one of the alternative keymaps, or create your own, see below.
|
||||||
|
|
||||||
|
## Clueboard 1.0
|
||||||
|
|
||||||
|
If you have a first generation Clueboard (one with a black PCB) you will need to use the revision 1 code. To do so add `rev1` to your make command, like this:
|
||||||
|
|
||||||
|
```
|
||||||
|
$ make rev1
|
||||||
|
```
|
||||||
|
|
||||||
|
And when flashing your keyboard:
|
||||||
|
|
||||||
|
```
|
||||||
|
$ make rev1-dfu
|
||||||
|
```
|
||||||
|
|
||||||
|
If you are flashing an alternative layout to your rev1, include both `rev1` and `<keymap>` in your command, for example when flashing max:
|
||||||
|
|
||||||
|
```
|
||||||
|
$ make rev1-max-dfu
|
||||||
|
```
|
||||||
|
|
||||||
|
## Alternate Keymaps
|
||||||
|
|
||||||
|
There are many alternative and user-contributed layouts available in the [keymaps/](keymaps/) directory. To compile and flash an alternative you will want to add `<keymap>` to your command:
|
||||||
|
|
||||||
|
```
|
||||||
|
$ make skully
|
||||||
|
```
|
||||||
|
|
||||||
|
And when flashing your keyboard, put `<keymap>` between "make" and "dfu":
|
||||||
|
|
||||||
|
```
|
||||||
|
$ make skully-dfu
|
||||||
|
```
|
||||||
|
|
||||||
|
### Notable Layouts
|
||||||
|
|
||||||
|
These layouts are notable for one reason or another. If you are looking for ideas or inspiration you should look at these first:
|
||||||
|
|
||||||
|
* [keymaps/default](keymaps/default) - The default Clueboard layout
|
||||||
|
* [keymaps/max](keymaps/max) - A maximised layout that makes use of every key and feature of the Clueboard 2.0 PCB.
|
||||||
|
* [keymaps/skully](keymaps/skully) - The layout that @skullydazed uses on his own Clueboards.
|
||||||
|
|
||||||
|
## Create Your Own Keymap
|
||||||
|
|
||||||
|
There are a lot of possibilities when creating your own keymap, and the primary documentation for doing that is [Customizing Your Keymap](/readme.md##customizing-your-keymap) in the main readme.md. As a way to get started, here is the procedure I recommend:
|
||||||
|
|
||||||
|
* Copy `[keymaps/default](keymaps/default/)` to `keymaps/<your_layout>`.
|
||||||
|
* Compile the firmware (`$ make <your_layout>`)
|
||||||
|
* Flash the firmware (`$ make <your_layout>-dfu`)
|
||||||
|
* Make sure everything works like the default keyboard
|
||||||
|
* Modify `keymaps/<your_layout>/readme.md` to tell others about your layout.
|
||||||
|
* Modify `keymaps/<your_layout>/keymap.c` to reflect your desired layout.
|
||||||
|
* Compile your new custom firmware (`$ make <your_layout>`)
|
||||||
|
** If you have warnings you may flash without fixing them, but something may not work right.
|
||||||
|
** If you have any errors you must fix them before continuing.
|
||||||
|
* Flash the firmware (`$ make <your_layout>-dfu`)
|
||||||
|
|
||||||
|
## Share Your Keymap
|
||||||
|
|
||||||
|
Got your layout dialed in? Please share it with the world so we can benefit from your work! Simply submit a pull request with your layout and we'll include it in the official repository. Please use the following guidelines when putting together your pull request:
|
||||||
|
|
||||||
|
* Include a readme.md that states what your primary keyboard use is, how your layout differs from the default, and highlights anything you think makes your layout particularly great.
|
||||||
|
* If your layout requires certain features (EG, RGB underlight or backlighting) ensure you have a Makefile and config.h that reflects that
|
||||||
|
* If your layout requires special hardware to be added, please describe that in the readme.md
|
||||||
|
|
||||||
|
TODO: Write up or link quick how-to on creating and submitting a PR. (Pull requests accepted. :)
|
||||||
|
@ -1,5 +1,3 @@
|
|||||||
BACKLIGHT_ENABLE = no
|
ifndef MAKEFILE_INCLUDED
|
||||||
|
|
||||||
ifndef QUANTUM_DIR
|
|
||||||
include ../../../Makefile
|
include ../../../Makefile
|
||||||
endif
|
endif
|
@ -0,0 +1,5 @@
|
|||||||
|
BACKLIGHT_ENABLE = no
|
||||||
|
|
||||||
|
ifndef QUANTUM_DIR
|
||||||
|
include ../../../Makefile
|
||||||
|
endif
|
@ -1,5 +1,3 @@
|
|||||||
BACKLIGHT_ENABLE = yes
|
ifndef MAKEFILE_INCLUDED
|
||||||
|
|
||||||
ifndef QUANTUM_DIR
|
|
||||||
include ../../../Makefile
|
include ../../../Makefile
|
||||||
endif
|
endif
|
@ -0,0 +1,5 @@
|
|||||||
|
BACKLIGHT_ENABLE = yes
|
||||||
|
|
||||||
|
ifndef QUANTUM_DIR
|
||||||
|
include ../../../Makefile
|
||||||
|
endif
|
@ -0,0 +1,103 @@
|
|||||||
|
#----------------------------------------------------------------------------
|
||||||
|
# On command line:
|
||||||
|
#
|
||||||
|
# make all = Make software.
|
||||||
|
#
|
||||||
|
# make clean = Clean out built project files.
|
||||||
|
#
|
||||||
|
# make coff = Convert ELF to AVR COFF.
|
||||||
|
#
|
||||||
|
# make extcoff = Convert ELF to AVR Extended COFF.
|
||||||
|
#
|
||||||
|
# make program = Download the hex file to the device.
|
||||||
|
# Please customize your programmer settings(PROGRAM_CMD)
|
||||||
|
#
|
||||||
|
# make teensy = Download the hex file to the device, using teensy_loader_cli.
|
||||||
|
# (must have teensy_loader_cli installed).
|
||||||
|
#
|
||||||
|
# make dfu = Download the hex file to the device, using dfu-programmer (must
|
||||||
|
# have dfu-programmer installed).
|
||||||
|
#
|
||||||
|
# make flip = Download the hex file to the device, using Atmel FLIP (must
|
||||||
|
# have Atmel FLIP installed).
|
||||||
|
#
|
||||||
|
# make dfu-ee = Download the eeprom file to the device, using dfu-programmer
|
||||||
|
# (must have dfu-programmer installed).
|
||||||
|
#
|
||||||
|
# make flip-ee = Download the eeprom file to the device, using Atmel FLIP
|
||||||
|
# (must have Atmel FLIP installed).
|
||||||
|
#
|
||||||
|
# make debug = Start either simulavr or avarice as specified for debugging,
|
||||||
|
# with avr-gdb or avr-insight as the front end for debugging.
|
||||||
|
#
|
||||||
|
# make filename.s = Just compile filename.c into the assembler code only.
|
||||||
|
#
|
||||||
|
# make filename.i = Create a preprocessed source file for use in submitting
|
||||||
|
# bug reports to the GCC project.
|
||||||
|
#
|
||||||
|
# To rebuild project do "make clean" then "make all".
|
||||||
|
#----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
# MCU name
|
||||||
|
MCU = atmega32u4
|
||||||
|
|
||||||
|
# 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(+60)
|
||||||
|
OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
|
||||||
|
|
||||||
|
|
||||||
|
# Boot Section Size in *bytes*
|
||||||
|
# Teensy halfKay 512
|
||||||
|
# Teensy++ halfKay 1024
|
||||||
|
# Atmel DFU loader 4096
|
||||||
|
# LUFA bootloader 4096
|
||||||
|
# USBaspLoader 2048
|
||||||
|
OPT_DEFS += -DBOOTLOADER_SIZE=4096
|
||||||
|
|
||||||
|
|
||||||
|
# Build Options
|
||||||
|
# comment out to disable the options.
|
||||||
|
#
|
||||||
|
BOOTMAGIC_ENABLE ?= yes # Virtual DIP switch configuration(+1000)
|
||||||
|
MOUSEKEY_ENABLE ?= no # Mouse keys(+4700)
|
||||||
|
EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450)
|
||||||
|
CONSOLE_ENABLE ?= yes # Console for debug(+400)
|
||||||
|
COMMAND_ENABLE ?= yes # Commands for debug and configuration
|
||||||
|
NKRO_ENABLE ?= yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
|
||||||
|
AUDIO_ENABLE ?= no
|
||||||
|
RGBLIGHT_ENABLE ?= no # Enable keyboard underlight functionality
|
||||||
|
MIDI_ENABLE ?= no # MIDI controls
|
||||||
|
UNICODE_ENABLE ?= no # Unicode
|
||||||
|
BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID
|
@ -1,63 +0,0 @@
|
|||||||
#include "clueboard2.h"
|
|
||||||
|
|
||||||
void matrix_init_kb(void) {
|
|
||||||
// put your keyboard start-up code here
|
|
||||||
// runs once when the firmware starts up
|
|
||||||
matrix_init_user();
|
|
||||||
led_init_ports();
|
|
||||||
|
|
||||||
// JTAG disable for PORT F. write JTD bit twice within four cycles.
|
|
||||||
MCUCR |= (1<<JTD);
|
|
||||||
MCUCR |= (1<<JTD);
|
|
||||||
};
|
|
||||||
|
|
||||||
void led_init_ports() {
|
|
||||||
// * Set our LED pins as output
|
|
||||||
DDRB |= (1<<4);
|
|
||||||
}
|
|
||||||
|
|
||||||
void led_set_kb(uint8_t usb_led) {
|
|
||||||
if (usb_led & (1<<USB_LED_CAPS_LOCK)) {
|
|
||||||
// Turn capslock on
|
|
||||||
PORTB |= (1<<4);
|
|
||||||
} else {
|
|
||||||
// Turn capslock off
|
|
||||||
PORTB &= ~(1<<4);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Clueboard 2.0 LED locations:
|
|
||||||
*
|
|
||||||
* Capslock: B4, pull high to turn on
|
|
||||||
* LCtrl: Shared with Capslock, DO NOT INSTALL LED'S IN BOTH
|
|
||||||
* Page Up: B7, pull high to turn on
|
|
||||||
* Escape: D6, pull high to turn on
|
|
||||||
* Arrows: D4, pull high to turn on
|
|
||||||
*/
|
|
||||||
|
|
||||||
void backlight_init_ports(void) {
|
|
||||||
print("init_backlight_pin()\n");
|
|
||||||
// Set our LED pins as output
|
|
||||||
DDRD |= (1<<6); // Esc
|
|
||||||
DDRB |= (1<<7); // Page Up
|
|
||||||
DDRD |= (1<<4); // Arrows
|
|
||||||
|
|
||||||
// Set our LED pins low
|
|
||||||
PORTD &= ~(1<<6); // Esc
|
|
||||||
PORTB &= ~(1<<7); // Page Up
|
|
||||||
PORTD &= ~(1<<4); // Arrows
|
|
||||||
}
|
|
||||||
|
|
||||||
void backlight_set(uint8_t level) {
|
|
||||||
if ( level == 0 ) {
|
|
||||||
// Turn off light
|
|
||||||
PORTD |= (1<<6); // Esc
|
|
||||||
PORTB |= (1<<7); // Page Up
|
|
||||||
PORTD |= (1<<4); // Arrows
|
|
||||||
} else {
|
|
||||||
// Turn on light
|
|
||||||
PORTD &= ~(1<<6); // Esc
|
|
||||||
PORTB &= ~(1<<7); // Page Up
|
|
||||||
PORTD &= ~(1<<4); // Arrows
|
|
||||||
}
|
|
||||||
}
|
|
@ -0,0 +1,3 @@
|
|||||||
|
ifndef MAKEFILE_INCLUDED
|
||||||
|
include ../../Makefile
|
||||||
|
endif
|
@ -0,0 +1,98 @@
|
|||||||
|
#include "cluecard.h"
|
||||||
|
#define BL_RED OCR1B
|
||||||
|
#define BL_GREEN OCR1A
|
||||||
|
#define BL_BLUE OCR1C
|
||||||
|
|
||||||
|
void matrix_init_kb(void) {
|
||||||
|
// put your keyboard start-up code here
|
||||||
|
// runs once when the firmware starts up
|
||||||
|
|
||||||
|
matrix_init_user();
|
||||||
|
}
|
||||||
|
|
||||||
|
void matrix_scan_kb(void) {
|
||||||
|
// put your looping keyboard code here
|
||||||
|
// runs every cycle (a lot)
|
||||||
|
|
||||||
|
matrix_scan_user();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
|
||||||
|
// put your per-action keyboard code here
|
||||||
|
// runs for every action, just before processing by the firmware
|
||||||
|
|
||||||
|
return process_record_user(keycode, record);
|
||||||
|
}
|
||||||
|
|
||||||
|
void led_set_kb(uint8_t usb_led) {
|
||||||
|
// put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
|
||||||
|
|
||||||
|
led_set_user(usb_led);
|
||||||
|
}
|
||||||
|
|
||||||
|
void backlight_init_ports(void)
|
||||||
|
{
|
||||||
|
// Set B5, B6, and B7 as output
|
||||||
|
DDRB |= (1<<7)|(1<<6)|(1<<5);
|
||||||
|
|
||||||
|
// Setup PWM
|
||||||
|
ICR1 = 0xFFFF;
|
||||||
|
TCCR1A = 0b10101010;
|
||||||
|
TCCR1B = 0b00011001;
|
||||||
|
|
||||||
|
BL_RED = 0xFFFF;
|
||||||
|
BL_GREEN = 0xFFFF;
|
||||||
|
BL_BLUE = 0xFFFF;
|
||||||
|
}
|
||||||
|
|
||||||
|
void backlight_set(uint8_t level)
|
||||||
|
{
|
||||||
|
// Set the RGB color
|
||||||
|
switch (level)
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
// Off
|
||||||
|
BL_RED = 0xFFFF;
|
||||||
|
BL_GREEN = 0xFFFF;
|
||||||
|
BL_BLUE = 0xFFFF;
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
// Red
|
||||||
|
BL_RED = 0x0000;
|
||||||
|
BL_GREEN = 0xFFFF;
|
||||||
|
BL_BLUE = 0xFFFF;
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
// Green
|
||||||
|
BL_RED = 0xFFFF;
|
||||||
|
BL_GREEN = 0x0000;
|
||||||
|
BL_BLUE = 0xFFFF;
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
// Blue
|
||||||
|
BL_RED = 0xFFFF;
|
||||||
|
BL_GREEN = 0xFFFF;
|
||||||
|
BL_BLUE = 0x0000;
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
// Magenta
|
||||||
|
BL_RED = 0x4000;
|
||||||
|
BL_GREEN = 0x4000;
|
||||||
|
BL_BLUE = 0x4000;
|
||||||
|
break;
|
||||||
|
case 5:
|
||||||
|
// Purple
|
||||||
|
BL_RED = 0x0000;
|
||||||
|
BL_GREEN = 0xFFFF;
|
||||||
|
BL_BLUE = 0x0000;
|
||||||
|
break;
|
||||||
|
case 6:
|
||||||
|
// Yellow
|
||||||
|
BL_RED = 0x0000;
|
||||||
|
BL_GREEN = 0x0000;
|
||||||
|
BL_BLUE = 0xFFFF;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
xprintf("Unknown level: %d\n", level);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,22 @@
|
|||||||
|
#ifndef CLUECARD_H
|
||||||
|
#define CLUECARD_H
|
||||||
|
|
||||||
|
#include "quantum.h"
|
||||||
|
|
||||||
|
// This a shortcut to help you visually see your layout.
|
||||||
|
// The first section contains all of the arguements
|
||||||
|
// The second converts the arguments into a two-dimensional array
|
||||||
|
#define KEYMAP( \
|
||||||
|
k00, k01, k02, \
|
||||||
|
k10, k12, \
|
||||||
|
k20, k21, k22, \
|
||||||
|
k11, \
|
||||||
|
k30, k31, k32 \
|
||||||
|
) { \
|
||||||
|
{ k00, k01, k02, }, \
|
||||||
|
{ k10, k11, k12, }, \
|
||||||
|
{ k20, k21, k22, }, \
|
||||||
|
{ k30, k31, k32, } \
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
@ -0,0 +1,167 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2012 Jun Wako <wakojun@gmail.com>
|
||||||
|
|
||||||
|
This program is free software: you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation, either version 2 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef CONFIG_H
|
||||||
|
#define CONFIG_H
|
||||||
|
|
||||||
|
#include "config_common.h"
|
||||||
|
|
||||||
|
/* USB Device descriptor parameter */
|
||||||
|
#define VENDOR_ID 0xC1ED
|
||||||
|
#define PRODUCT_ID 0x2330
|
||||||
|
#define DEVICE_VER 0x0001
|
||||||
|
#define MANUFACTURER Clueboard
|
||||||
|
#define PRODUCT ATMEGA32U4 Firmware Dev Kit
|
||||||
|
#define DESCRIPTION A small board to help you hack on QMK.
|
||||||
|
|
||||||
|
/* key matrix size */
|
||||||
|
#define MATRIX_ROWS 4
|
||||||
|
#define MATRIX_COLS 3
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Keyboard Matrix Assignments
|
||||||
|
*
|
||||||
|
* Change this to how you wired your keyboard
|
||||||
|
* COLS: AVR pins used for columns, left to right
|
||||||
|
* ROWS: AVR pins used for rows, top to bottom
|
||||||
|
* DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
|
||||||
|
* ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
#define MATRIX_ROW_PINS { F0, F5, F4, B4 }
|
||||||
|
#define MATRIX_COL_PINS { F1, F7, F6 }
|
||||||
|
#define UNUSED_PINS
|
||||||
|
|
||||||
|
/* COL2ROW or ROW2COL */
|
||||||
|
#define DIODE_DIRECTION ROW2COL
|
||||||
|
|
||||||
|
/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
|
||||||
|
#define DEBOUNCING_DELAY 20
|
||||||
|
|
||||||
|
/* define if matrix has ghost (lacks anti-ghosting diodes) */
|
||||||
|
//#define MATRIX_HAS_GHOST
|
||||||
|
|
||||||
|
/* number of backlight levels */
|
||||||
|
#define BACKLIGHT_LEVELS 6
|
||||||
|
|
||||||
|
/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
|
||||||
|
//#define LOCKING_SUPPORT_ENABLE
|
||||||
|
/* Locking resynchronize hack */
|
||||||
|
//#define LOCKING_RESYNC_ENABLE
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Force NKRO
|
||||||
|
*
|
||||||
|
* Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
|
||||||
|
* state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
|
||||||
|
* makefile for this to work.)
|
||||||
|
*
|
||||||
|
* If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
|
||||||
|
* until the next keyboard reset.
|
||||||
|
*
|
||||||
|
* NKRO may prevent your keystrokes from being detected in the BIOS, but it is
|
||||||
|
* fully operational during normal computer usage.
|
||||||
|
*
|
||||||
|
* For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
|
||||||
|
* or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
|
||||||
|
* bootmagic, NKRO mode will always be enabled until it is toggled again during a
|
||||||
|
* power-up.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
//#define FORCE_NKRO
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Magic Key Options
|
||||||
|
*
|
||||||
|
* Magic keys are hotkey commands that allow control over firmware functions of
|
||||||
|
* the keyboard. They are best used in combination with the HID Listen program,
|
||||||
|
* found here: https://www.pjrc.com/teensy/hid_listen.html
|
||||||
|
*
|
||||||
|
* The options below allow the magic key functionality to be changed. This is
|
||||||
|
* useful if your keyboard/keypad is missing keys and you want magic key support.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* key combination for magic key command */
|
||||||
|
#define IS_COMMAND() ( \
|
||||||
|
keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
|
||||||
|
)
|
||||||
|
|
||||||
|
/* control how magic key switches layers */
|
||||||
|
//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true
|
||||||
|
//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true
|
||||||
|
//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false
|
||||||
|
|
||||||
|
/* override magic key keymap */
|
||||||
|
//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS
|
||||||
|
//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS
|
||||||
|
//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM
|
||||||
|
//#define MAGIC_KEY_HELP1 H
|
||||||
|
//#define MAGIC_KEY_HELP2 SLASH
|
||||||
|
//#define MAGIC_KEY_DEBUG D
|
||||||
|
//#define MAGIC_KEY_DEBUG_MATRIX X
|
||||||
|
//#define MAGIC_KEY_DEBUG_KBD K
|
||||||
|
//#define MAGIC_KEY_DEBUG_MOUSE M
|
||||||
|
//#define MAGIC_KEY_VERSION V
|
||||||
|
//#define MAGIC_KEY_STATUS S
|
||||||
|
//#define MAGIC_KEY_CONSOLE C
|
||||||
|
//#define MAGIC_KEY_LAYER0_ALT1 ESC
|
||||||
|
//#define MAGIC_KEY_LAYER0_ALT2 GRAVE
|
||||||
|
//#define MAGIC_KEY_LAYER0 0
|
||||||
|
//#define MAGIC_KEY_LAYER1 1
|
||||||
|
//#define MAGIC_KEY_LAYER2 2
|
||||||
|
//#define MAGIC_KEY_LAYER3 3
|
||||||
|
//#define MAGIC_KEY_LAYER4 4
|
||||||
|
//#define MAGIC_KEY_LAYER5 5
|
||||||
|
//#define MAGIC_KEY_LAYER6 6
|
||||||
|
//#define MAGIC_KEY_LAYER7 7
|
||||||
|
//#define MAGIC_KEY_LAYER8 8
|
||||||
|
//#define MAGIC_KEY_LAYER9 9
|
||||||
|
//#define MAGIC_KEY_BOOTLOADER PAUSE
|
||||||
|
//#define MAGIC_KEY_LOCK CAPS
|
||||||
|
//#define MAGIC_KEY_EEPROM E
|
||||||
|
//#define MAGIC_KEY_NKRO N
|
||||||
|
//#define MAGIC_KEY_SLEEP_LED Z
|
||||||
|
|
||||||
|
/* Underlight configuration
|
||||||
|
*/
|
||||||
|
#define RGB_DI_PIN E6
|
||||||
|
//#define RGBLIGHT_TIMER
|
||||||
|
#define RGBLED_NUM 4 // Number of LEDs
|
||||||
|
#define RGBLIGHT_HUE_STEP 10
|
||||||
|
#define RGBLIGHT_SAT_STEP 17
|
||||||
|
#define RGBLIGHT_VAL_STEP 17
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Feature disable options
|
||||||
|
* These options are also useful to firmware size reduction.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* disable debug print */
|
||||||
|
//#define NO_DEBUG
|
||||||
|
|
||||||
|
/* disable print */
|
||||||
|
//#define NO_PRINT
|
||||||
|
|
||||||
|
/* disable action features */
|
||||||
|
//#define NO_ACTION_LAYER
|
||||||
|
//#define NO_ACTION_TAPPING
|
||||||
|
//#define NO_ACTION_ONESHOT
|
||||||
|
//#define NO_ACTION_MACRO
|
||||||
|
//#define NO_ACTION_FUNCTION
|
||||||
|
|
||||||
|
#endif
|
@ -0,0 +1,21 @@
|
|||||||
|
# Build Options
|
||||||
|
# change to "no" to disable the options, or define them in the Makefile in
|
||||||
|
# the appropriate keymap folder that will get included automatically
|
||||||
|
#
|
||||||
|
BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
|
||||||
|
MOUSEKEY_ENABLE = no # Mouse keys(+4700)
|
||||||
|
EXTRAKEY_ENABLE = no # Audio control and System control(+450)
|
||||||
|
CONSOLE_ENABLE = yes # Console for debug(+400)
|
||||||
|
COMMAND_ENABLE = yes # Commands for debug and configuration
|
||||||
|
NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
|
||||||
|
BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
|
||||||
|
MIDI_ENABLE = no # MIDI controls
|
||||||
|
AUDIO_ENABLE = yes # Audio output on port C6
|
||||||
|
UNICODE_ENABLE = no # Unicode
|
||||||
|
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
|
||||||
|
RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
|
||||||
|
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
|
||||||
|
|
||||||
|
ifndef QUANTUM_DIR
|
||||||
|
include ../../../../Makefile
|
||||||
|
endif
|
@ -0,0 +1,8 @@
|
|||||||
|
#ifndef CONFIG_USER_H
|
||||||
|
#define CONFIG_USER_H
|
||||||
|
|
||||||
|
#include "../../config.h"
|
||||||
|
|
||||||
|
// place overrides here
|
||||||
|
|
||||||
|
#endif
|
@ -0,0 +1,63 @@
|
|||||||
|
#include "cluecard.h"
|
||||||
|
#ifdef AUDIO_ENABLE
|
||||||
|
#include "audio.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
[0] = KEYMAP(
|
||||||
|
RGB_TOG, RGB_SAI, RGB_VAI, \
|
||||||
|
RGB_HUD, RGB_HUI, \
|
||||||
|
RGB_MOD, RGB_SAD, RGB_VAD, \
|
||||||
|
BL_STEP, \
|
||||||
|
F(0), F(1), F(2) \
|
||||||
|
)
|
||||||
|
};
|
||||||
|
|
||||||
|
#ifdef AUDIO_ENABLE
|
||||||
|
|
||||||
|
float tone_startup[][2] = SONG(STARTUP_SOUND);
|
||||||
|
float tone_qwerty[][2] = SONG(QWERTY_SOUND);
|
||||||
|
float tone_dvorak[][2] = SONG(DVORAK_SOUND);
|
||||||
|
float tone_colemak[][2] = SONG(COLEMAK_SOUND);
|
||||||
|
float tone_plover[][2] = SONG(PLOVER_SOUND);
|
||||||
|
float tone_plover_gb[][2] = SONG(PLOVER_GOODBYE_SOUND);
|
||||||
|
float music_scale[][2] = SONG(MUSIC_SCALE_SOUND);
|
||||||
|
|
||||||
|
float tone_goodbye[][2] = SONG(GOODBYE_SOUND);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
const uint16_t PROGMEM fn_actions[] = {
|
||||||
|
[0] = ACTION_FUNCTION(0),
|
||||||
|
[1] = ACTION_FUNCTION(1),
|
||||||
|
[2] = ACTION_FUNCTION(2)
|
||||||
|
};
|
||||||
|
|
||||||
|
void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) {
|
||||||
|
if (record->event.pressed) {
|
||||||
|
switch (id) {
|
||||||
|
case 0:
|
||||||
|
PLAY_NOTE_ARRAY(tone_startup, false, 0);
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
PLAY_NOTE_ARRAY(music_scale, false, 0);
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
PLAY_NOTE_ARRAY(tone_goodbye, false, 0);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
void matrix_init_user(void) {
|
||||||
|
}
|
||||||
|
|
||||||
|
void matrix_scan_user(void) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void led_set_user(uint8_t usb_led) {
|
||||||
|
}
|
@ -0,0 +1 @@
|
|||||||
|
# The default keymap for cluecard
|
@ -0,0 +1,28 @@
|
|||||||
|
cluecard keyboard firmware
|
||||||
|
======================
|
||||||
|
|
||||||
|
## Quantum MK Firmware
|
||||||
|
|
||||||
|
For the full Quantum feature list, see [the parent readme.md](/doc/readme.md).
|
||||||
|
|
||||||
|
## Building
|
||||||
|
|
||||||
|
Download or clone the whole firmware and navigate to the keyboards/cluecard folder. Once your dev env is setup, you'll be able to type `make` to generate your .hex - you can then use the Teensy Loader to program your .hex file.
|
||||||
|
|
||||||
|
Depending on which keymap you would like to use, you will have to compile slightly differently.
|
||||||
|
|
||||||
|
### Default
|
||||||
|
|
||||||
|
To build with the default keymap, simply run `make default`.
|
||||||
|
|
||||||
|
### Other Keymaps
|
||||||
|
|
||||||
|
Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create a folder with the name of your keymap in the keymaps folder, and see keymap documentation (you can find in top readme.md) and existant keymap files.
|
||||||
|
|
||||||
|
To build the firmware binary hex file with a keymap just do `make` with a keymap like this:
|
||||||
|
|
||||||
|
```
|
||||||
|
$ make [default|jack|<name>]
|
||||||
|
```
|
||||||
|
|
||||||
|
Keymaps follow the format **__keymap.c__** and are stored in folders in the `keymaps` folder, eg `keymaps/my_keymap/`
|
@ -0,0 +1,70 @@
|
|||||||
|
|
||||||
|
|
||||||
|
# MCU name
|
||||||
|
#MCU = at90usb1287
|
||||||
|
MCU = atmega32u4
|
||||||
|
|
||||||
|
# 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(+60)
|
||||||
|
OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
|
||||||
|
|
||||||
|
|
||||||
|
# Boot Section Size in *bytes*
|
||||||
|
# Teensy halfKay 512
|
||||||
|
# Teensy++ halfKay 1024
|
||||||
|
# Atmel DFU loader 4096
|
||||||
|
# LUFA bootloader 4096
|
||||||
|
# USBaspLoader 2048
|
||||||
|
OPT_DEFS += -DBOOTLOADER_SIZE=4096
|
||||||
|
|
||||||
|
|
||||||
|
# Build Options
|
||||||
|
# change yes to no to disable
|
||||||
|
#
|
||||||
|
BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration(+1000)
|
||||||
|
MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700)
|
||||||
|
EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450)
|
||||||
|
CONSOLE_ENABLE ?= yes # Console for debug(+400)
|
||||||
|
COMMAND_ENABLE ?= yes # Commands for debug and configuration
|
||||||
|
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
|
||||||
|
SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend
|
||||||
|
# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
|
||||||
|
NKRO_ENABLE ?= no # USB Nkey Rollover
|
||||||
|
RGBLIGHT_ENABLE ?= yes # Enable keyboard underlight functionality (+4870)
|
||||||
|
BACKLIGHT_ENABLE ?= yes # Enable keyboard backlight functionality by default
|
||||||
|
MIDI_ENABLE ?= no # MIDI controls
|
||||||
|
UNICODE_ENABLE ?= no # Unicode
|
||||||
|
BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID
|
||||||
|
AUDIO_ENABLE ?= yes # Audio output on port C6
|
@ -1,70 +1,3 @@
|
|||||||
|
ifndef MAKEFILE_INCLUDED
|
||||||
# MCU name
|
|
||||||
#MCU = at90usb1287
|
|
||||||
MCU = atmega32u4
|
|
||||||
|
|
||||||
# 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(+60)
|
|
||||||
OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
|
|
||||||
|
|
||||||
|
|
||||||
# Boot Section Size in *bytes*
|
|
||||||
# Teensy halfKay 512
|
|
||||||
# Teensy++ halfKay 1024
|
|
||||||
# Atmel DFU loader 4096
|
|
||||||
# LUFA bootloader 4096
|
|
||||||
# USBaspLoader 2048
|
|
||||||
OPT_DEFS += -DBOOTLOADER_SIZE=4096
|
|
||||||
|
|
||||||
|
|
||||||
# Build Options
|
|
||||||
# comment out to disable the options.
|
|
||||||
#
|
|
||||||
BOOTMAGIC_ENABLE ?= yes # Virtual DIP switch configuration(+1000)
|
|
||||||
# MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700)
|
|
||||||
# EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450)
|
|
||||||
# CONSOLE_ENABLE ?= yes # Console for debug(+400)
|
|
||||||
# COMMAND_ENABLE ?= yes # Commands for debug and configuration
|
|
||||||
NKRO_ENABLE ?= yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
|
|
||||||
BACKLIGHT_ENABLE ?= yes # Enable numpad's backlight functionality
|
|
||||||
RGBLIGHT_ENABLE ?= yes
|
|
||||||
# MIDI_ENABLE ?= YES # MIDI controls
|
|
||||||
# UNICODE_ENABLE ?= YES # Unicode
|
|
||||||
# BLUETOOTH_ENABLE ?= yes # Enable Bluetooth with the Adafruit EZ-Key HID
|
|
||||||
|
|
||||||
|
|
||||||
ifndef QUANTUM_DIR
|
|
||||||
include ../../Makefile
|
include ../../Makefile
|
||||||
endif
|
endif
|
@ -0,0 +1,65 @@
|
|||||||
|
|
||||||
|
# MCU name
|
||||||
|
#MCU = at90usb1287
|
||||||
|
MCU = atmega32u4
|
||||||
|
|
||||||
|
# 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(+60)
|
||||||
|
OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
|
||||||
|
|
||||||
|
|
||||||
|
# Boot Section Size in *bytes*
|
||||||
|
# Teensy halfKay 512
|
||||||
|
# Teensy++ halfKay 1024
|
||||||
|
# Atmel DFU loader 4096
|
||||||
|
# LUFA bootloader 4096
|
||||||
|
# USBaspLoader 2048
|
||||||
|
OPT_DEFS += -DBOOTLOADER_SIZE=4096
|
||||||
|
|
||||||
|
|
||||||
|
# Build Options
|
||||||
|
# comment out to disable the options.
|
||||||
|
#
|
||||||
|
BOOTMAGIC_ENABLE ?= yes # Virtual DIP switch configuration(+1000)
|
||||||
|
# MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700)
|
||||||
|
# EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450)
|
||||||
|
# CONSOLE_ENABLE ?= yes # Console for debug(+400)
|
||||||
|
# COMMAND_ENABLE ?= yes # Commands for debug and configuration
|
||||||
|
NKRO_ENABLE ?= yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
|
||||||
|
BACKLIGHT_ENABLE ?= yes # Enable numpad's backlight functionality
|
||||||
|
RGBLIGHT_ENABLE ?= yes
|
||||||
|
# MIDI_ENABLE ?= YES # MIDI controls
|
||||||
|
# UNICODE_ENABLE ?= YES # Unicode
|
||||||
|
# BLUETOOTH_ENABLE ?= yes # Enable Bluetooth with the Adafruit EZ-Key HID
|
@ -1,34 +1,5 @@
|
|||||||
#----------------------------------------------------------------------------
|
|
||||||
# On command line:
|
|
||||||
#
|
|
||||||
# make = Make software.
|
|
||||||
#
|
|
||||||
# make clean = Clean out built project files.
|
|
||||||
#
|
|
||||||
# That's pretty much all you need. To compile, always go make clean,
|
|
||||||
# followed by make.
|
|
||||||
#
|
|
||||||
# For advanced users only:
|
|
||||||
# make teensy = Download the hex file to the device, using teensy_loader_cli.
|
|
||||||
# (must have teensy_loader_cli installed).
|
|
||||||
#
|
|
||||||
#----------------------------------------------------------------------------
|
|
||||||
SUBPROJECT_DEFAULT = ez
|
SUBPROJECT_DEFAULT = ez
|
||||||
|
|
||||||
# Build Options
|
ifndef MAKEFILE_INCLUDED
|
||||||
# comment out to disable the options.
|
|
||||||
#
|
|
||||||
BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration(+1000)
|
|
||||||
MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700)
|
|
||||||
EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450)
|
|
||||||
CONSOLE_ENABLE ?= no # Console for debug(+400)
|
|
||||||
COMMAND_ENABLE ?= yes # Commands for debug and configuration
|
|
||||||
CUSTOM_MATRIX ?= yes # Custom matrix file for the ErgoDox EZ
|
|
||||||
SLEEP_LED_ENABLE ?= yes # Breathing sleep LED during USB suspend
|
|
||||||
NKRO_ENABLE ?= yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
|
|
||||||
MIDI_ENABLE ?= no # MIDI controls
|
|
||||||
UNICODE_ENABLE ?= yes # Unicode
|
|
||||||
|
|
||||||
ifndef QUANTUM_DIR
|
|
||||||
include ../../Makefile
|
include ../../Makefile
|
||||||
endif
|
endif
|
@ -1,76 +1,3 @@
|
|||||||
#----------------------------------------------------------------------------
|
ifndef MAKEFILE_INCLUDED
|
||||||
# On command line:
|
|
||||||
#
|
|
||||||
# make = Make software.
|
|
||||||
#
|
|
||||||
# make clean = Clean out built project files.
|
|
||||||
#
|
|
||||||
# That's pretty much all you need. To compile, always go make clean,
|
|
||||||
# followed by make.
|
|
||||||
#
|
|
||||||
# For advanced users only:
|
|
||||||
# make teensy = Download the hex file to the device, using teensy_loader_cli.
|
|
||||||
# (must have teensy_loader_cli installed).
|
|
||||||
#
|
|
||||||
#----------------------------------------------------------------------------
|
|
||||||
|
|
||||||
# # project specific files
|
|
||||||
SRC = twimaster.c \
|
|
||||||
matrix.c
|
|
||||||
|
|
||||||
# MCU name
|
|
||||||
MCU = atmega32u4
|
|
||||||
|
|
||||||
# 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(+60)
|
|
||||||
OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
|
|
||||||
|
|
||||||
|
|
||||||
# Boot Section Size in *bytes*
|
|
||||||
# Teensy halfKay 512
|
|
||||||
# Teensy++ halfKay 1024
|
|
||||||
# Atmel DFU loader 4096
|
|
||||||
# LUFA bootloader 4096
|
|
||||||
# USBaspLoader 2048
|
|
||||||
OPT_DEFS += -DBOOTLOADER_SIZE=512
|
|
||||||
|
|
||||||
|
|
||||||
# Build Options
|
|
||||||
# comment out to disable the options.
|
|
||||||
#
|
|
||||||
|
|
||||||
ifndef QUANTUM_DIR
|
|
||||||
include ../../../Makefile
|
include ../../../Makefile
|
||||||
endif
|
endif
|
Binary file not shown.
After Width: | Height: | Size: 20 KiB |
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue