Open-source keyboard firmware for Atmel AVR and Arm USB families
Go to file
Andrew Pritchard cd30a60d0e Change to per-key eager debouncing for ErgoDox EZ.
Empirically, waiting for N consecutive identical scans as a debouncing
strategy doesn't work very well for the ErgoDox EZ where scans are very
slow compared to most keyboards.  Instead, debounce the signals by
eagerly reporting a change as soon as one scan observes it, but then
ignoring further changes from that key for the next N scans.

This is implemented by keeping an extra matrix of uint8 countdowns, such
that only keys whose countdown is currently zero are eligible to change.
When we do observe a change, we bump that key's countdown to DEBOUNCE.
During each scan, every nonzero countdown is decremented.

With this approach to debouncing, much higher debounce constants are
tolerable, because latency does not increase with the constant, and
debounce countdowns on one key do not interfere with events on other
keys.  The only negative effect of increasing the constant is that the
minimum duration of a keypress increases.  Perhaps I'm just extremely
unlucky w.r.t. key switch quality, but I saw occasional bounces even
with DEBOUNCE=10; with 15, I've seen none so far.  That's around 47ms,
which seems like an absolutely insane amount of time for a key to be
bouncy, but at least it works.
2017-04-26 15:29:39 -07:00
doc Fix formatting in BUILD_GUIDE.md (#1208) 2017-04-04 22:39:28 -07:00
keyboards Change to per-key eager debouncing for ErgoDox EZ. 2017-04-26 15:29:39 -07:00
lib
quantum Faux clicky bug fixes 2017-04-19 01:40:16 +07:00
tmk_core Add make option for allowing warnings 2017-04-13 16:12:55 +03:00
util
.gitattributes
.gitignore
.gitmodules
.travis.yml
build_keyboard.mk Fix process_unicode_common.c being included twice 2017-04-13 16:03:01 +03:00
build_test.mk
common.mk
Dockerfile
license_GPLv2.md
license_GPLv3.md
license_Modified_BSD.md
Makefile Add SKIP_VERSION option to speed up compilation 2017-04-13 16:00:29 +03:00
message.mk
readme.md Update readme.md 2017-04-02 18:44:15 -06:00
testlist.mk
Vagrantfile

Quantum Mechanical Keyboard Firmware

Build Status Gitter

This is a keyboard firmware based on the tmk_keyboard firmware with some useful features for Atmel AVR controllers, and more specifically, the OLKB product line, the ErgoDox EZ keyboard, and the Clueboard product line.

Official website (currently under construction with the move to the wiki)

For an easy-to-read version of this document and the repository, check out http://qmk.fm. Nicely formatted keyboard and keymap listings are also available there, along with the ability to download .hex files instead of having to setup a build environment and compile them.

Included Keyboards

The project also includes community support for lots of other keyboards.

Maintainers

QMK is developed and maintained by Jack Humbert of OLKB with contributions from the community, and of course, Hasu. This repo used to be a fork of TMK, and we are incredibly grateful for his founding contributions to the firmware. We've had to break the fork due to purely technical reasons - it simply became too different over time, and we've had to start refactoring some of the basic bits and pieces. We are huge fans of TMK and Hasu :)

This documentation is edited and maintained by Erez Zukerman of ErgoDox EZ. If you spot any typos or inaccuracies, please open an issue.

The OLKB product firmwares are maintained by Jack Humbert, the Ergodox EZ by Erez Zukerman, and the Clueboard by Zach White.

Documentation roadmap

This is not a tiny project. While this is the main readme, there are many other files you might want to consult. Here are some points of interest:

  • The Wiki - the entirety of the readme has been moved here
  • The readme for your own keyboard: This is found under keyboards/<your keyboards's name>/. So for the ErgoDox, it's here; for the Planck, it's here and so on.
  • The list of possible keycodes you can use in your keymap is actually spread out in a few different places:
    • doc/keycode.txt - an explanation of those same keycodes.
    • quantum/quantum_keycodes.h - this is where the QMK-specific aliases are all set up. Things like the Hyper and Meh key, the Leader key, and all of the other QMK innovations. These are also explained and documented below, but quantum_keycodes.h is where they're actually defined.
  • The TMK documentation. QMK is based on TMK, and this explains how it works internally.