This repository has been archived on 2025-01-28. You can view files and clone it, but cannot push or open issues or pull requests.
Joakim Tufvegren 0ae20e7457
Make solo half of split keyboards (more) usable. (#13523)
* Make solo half of split keyboards (more) usable.

Using only one half of a split keyboard (that's using the split_common
framework to communicate) is not a great experience, since several read
timeouts per scan cycle cause an unusably slow scan rate.

This change blocks all split communication attempts for 500 ms
(configurable) after an error occurs, causing the scan rate to become at
least _more_ usable, but might need some tweaking to work fully on most
keyboards. One read timeout still needs to occur after the 500 ms has
passed, and if that timeout isn't low enough, some scan cycles may still
be too slow.

* Fix lint complaint.

* Require 25 consecutive comm errors to see comms as disconnected.

The number of max errors can be overridden by defining
`SPLIT_MAX_CONNECTION_ERRORS`.

* Add comments to new defines, and ability to disable disconnection check.

Also increase `SPLIT_MAX_CONNECTION_ERRORS` to 40, since it's divisible
by most relevant numbers for the description.

* Make lint happy ...again

* Only update `connection_check_timer` when needed.

* Add new defines to split keyboard documentation.

* Move connection timeout logic to transport.c, add `is_transport_connected`.

* Use split_common disconnection logic in matrix.c.

Instead of doing more or less the same thing twice.

* Move disconnection logic to `transport_master`.

Is a cleaner implementation, and causes the scan rate while disconnected
to increase instead of decrease.

* Lint fixes.

* Lower default `SERIAL_USART_TIMEOUT` to 20 ms.

The read timeout must be low enough to not cause exessively long scan
cycles when using a solo split half. 10 ms was determined from testing
to work fine even with the slowest defined baudrate of 19200 (5 ms was
too low for that case), so 20 ms should be fine for most cases.

* Remove `SERIAL_USART_TIMEOUT` from ergodox_infinity/config.h

Was somewhat mistakenly included in an earlier PR.

* Fix building with `USE_I2C`.

* Reduce built firmware size.

Not really sure why this works, the idea was taken from tzarc's work on
split disconnection.

* Tweak and improve opt-out for split disconnection logic.

There are now two ways to opt out from this feature:
* Set `SPLIT_MAX_CONNECTION_ERRORS` to 0. This will completely disable
  the connection status checks (also affects the slave matrix reset logic in
  matrix.c, though).
* Set `SPLIT_CONNECTION_CHECK_TIMEOUT` to 0. This will only disable the
  communication throttling while disconnected. Will make the firmware
  smaller.

* Make split disconnection logic work with custom transports.

Includes a fallback implementation for keyboards using a custom
split_util.c but not a custom matrix.c (currently no such keyboard seems
to be merged, though).

* Remove unnecessary include of timer.h

Co-authored-by: Joel Challis <git@zvecr.com>

Co-authored-by: Joel Challis <git@zvecr.com>
2021-08-22 10:51:17 +10:00
..
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-19 11:13:00 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-09 08:28:51 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-19 16:53:20 +01:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-08 23:17:46 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00
2021-08-06 23:59:56 -07:00

Included Keyboards

QMK runs on a diverse range of keyboards. Some of these keyboards are well maintained and see constant community contributions, while others are part of the repository for historical reasons.

Official QMK Keyboards

Ortholinear Keyboards - Jack Humbert

What makes OLKB keyboards shine is a combo of lean aesthetics, compact size, and killer tactile feel. These are available through olkb.com as well as through Massdrop from time to time, as easy to assemble kits.

  • Planck — A 40% DIY powerhouse of customizability and modification capability. It's a lean, mean, typing machine.
  • Preonic — Like the Planck, but bigger. 50%.
  • Atomic — Imagine the size of the Planck. Now imagine the size of the Preonic. Now imagine bigger. That is the Atomic. A 60% keyboard.

Clueboard - Zach White

Designed and built in Felton, CA, Clueboards keyboard emphasize quality and locally sourced components, available on clueboard.co

  • Clueboard — The 66% custom keyboard.
  • Cluecard — A small board to help you hack on QMK.
  • Cluepad — A mechanical numpad with QMK superpowers.

ErgoDox EZ and Planck EZ - ZSA Technology Labs

ZSA Technology Labs maintains its own fork of QMK which feeds its configurator, for stability and legal purposes. The ZSA boards are:

  • ErgoDox EZ — A powerful split mechanical keyboard.
  • Planck EZ — A 40% DIY powerhouse of customizability and modification capability. It's a lean, mean, typing machine, which ships fully assembled with a two-year warranty.

Community-supported QMK Keyboards

These keyboards are part of the QMK repository, but their manufacturers are not official maintainers of the repository.

  • 9key — A 9-key minipad sold by Bishop Keyboards.
  • Alps64 — A 60% keyboard for Alps keyswitches.
  • AMJ60 — DIY/Assembled compact 60% keyboard.
  • Arrow Pad — A custom creation by IBNobody.
  • Atreus — Made by Technomancy.
  • Bantam44 — It is a 44-key 40% staggered keyboard.
  • DataHand — DataHand keyboard converted to use a Teensy board.
  • Ergodox Infinity - Ergonomic Split Keyboard by Input Club.
  • GH60 — A 60% Geekhack community-driven project.
  • GON NerD — Korean custom 60% PCB
  • Happy Hacking Keyboard — The Happy Hacking keyboard can be hacked with a custom controller to run QMK.
  • Infinity 60% - — Compact community keyboard by Input Club.
  • JD45 — Another Geekhack community project, designed by jdcarpe.
  • JJ40 — ps2avrGB based ortholinear sold by KPrepublic
  • JJ50 — A compact 50% (5x12) ortholinear keyboard sold by KPrepublic.
  • KBD75 — A 75% keyboard made by made by KBDFans.
  • KC60 — A programmable Chinese-made keyboard, lost in the mists of time.
  • Kinesis Advantage — Contoured ergonomic keyboard by Kinesis Computer Ergonomics.
  • KMAC — Korean custom keyboard.
  • The Kitten Paw — A replacement controller (2016 revision) for the Filco Majestouch by Bathroom Epiphanies.
  • Lets Split - Split ortholinear 40% keyboard.
  • Phantom — A tenkeyless kit by Teel, also from Geekhack.
  • Retro Refit — Another creation by IBNobody.
  • S60-x — DIY compact keyboard designed by VinnyCordeiro for Sentraq.
  • Satan — A GH60 variant.
  • SixKeyBoard — A 6-key keyboard made by TechKeys.
  • TheVan 44 — A 44-key staggered keybard by Evangs.
  • WhiteFox — A 65% keyboard designed as a partnership by matt3o, Massdrop and Input Club
  • Vision Division — Full Size / Split Linear Keyboard by IBNobody.
  • XD004 — 1x4 macro keyboard sold by KPrepublic.
  • XD75 — 15x5 ortholinear keyboard by XIUDI.
  • YMDK NP21 — ps2avrGB based number pad (numpad) sold by YMDK on Aliexpress.