qmk_firmware/keyboards/model01/rules.mk
James Laird-Wah 03b8ce206d Keyboard: add Keyboardio Model 01 (#3900)
* Keyboard: add Keyboardio Model01

This port implements key scanning and everything in their default
keymap.

It doesn't implement mouse warping; QMK can't do that (yet).

LED control is mostly not implemented. The ability to set all LEDs is
included because they can get stuck on coming from the bootloader
otherwise. Single LED control is also implemented for numpad indication.
The scanners also support batch LED transfer which is what you'd need if
you wanted to do fast effects. Gamma correction is also not implemented,
but is present in the original firmware. The necessary info for further
implementation is in the KeyboardioScanner module for Kaleidoscope.

To install on your keyboard:

    make model01:avrdude

When prompted, hold the "prog" key on the keyboard to put it into
programming mode. This can also be achieved by holding the "prog" key
while plugging in the keyboard. This works even if the firmware is
corrupt or missing.

Hot plugging the halves seems to work fine, but there is no explicit
support for eg. making sure the matrix scan rate is reconfigured.

* model01: clean up includes and include guards

Uses #pragma once everywhere.

* model01: split LED and matrix code

This makes space if someone wants to implement better LED support
later on, the keyboard is a lot more capable than the current code.

* model01: separate I2C timeouts for matrix vs. LED

If the scanners have no data they don't ACK reads and just time out.
So we want a pretty short timeout to keep scan rates high.

Meanwhile the LED transfers might take longer - I don't know though,
so here we are conservative.

* model01: implement better LED control

- gamma correction from the manufacturer's firmware
- suitable delays to allow back to back LED writes
    - this is fast enough to write the whole keyboard without noticeable
    delay, in my experience
- minor bug fix: RHS Fn key was not addressable

* model01: add license to wire-protocol-constants.h

* model01: replace gamma LUT

The original was of unclear license origin. This one is functionally
identical and includes a generator should people wish to adjust it.

* model01: use the already-present CIE1931 lightness curve

...rather than baking in another gamma curve.

It's said that CIE1931 is the right thing to be using rather than gamma.
OK. Let it be so.

* model01: call matrix_init_user() from matrix_init_kb()

* model01: remove inapplicable config options from rules.mk

* model01: readme.md: update build environment links
2018-09-17 15:49:20 -07:00

63 lines
2.5 KiB
Makefile

SRC += i2c_master.c \
leds.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
BOOTLOADER = caterina
# Build Options
# change yes to no to disable
#
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 = no # 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
MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config)
UNICODE_ENABLE = no # Unicode
CUSTOM_MATRIX = yes
CIE1931_CURVE = yes