keychron_qmk_firmware/keyboards
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
..
1upkeyboards
2key2crawl
3w6 [Keyboard] add 3w6 (#13746) 2021-08-19 11:13:00 -07:00
4by3
4pplet
6ball
7c8/framework
7skb
7splus
8pack
9key
10bleoledhub
30wer
40percentclub
45_ats
0_sixty
0xcb
abacus
absinthe
abstract/ellipse
acekeyboard/titan60
acheron Merge remote-tracking branch 'upstream/master' into develop 2021-08-19 11:32:23 -07:00
acr60
adelheid
adkb96
aeboards
afternoonlabs
ai03
ajisai74
akb
akegata_denki/device_one
al1
aleblazer/zodiark
aleth42
alf
alfredslab/swift65/solder
allison
allison_numpad
alpha
alpine65
alps64
alu84
amag23
amj40
amj60
amj96
amjkeyboard/amj66
amjpad
anavi/macropad8
angel17
angel64
anomalykb/a65i
aos/tkl
aozora/hotswap
aplyard/aplx6
arabica37
arch_36
ares
arisu
arrayperipherals
ash_xiix
ash1800
ashpil/modelm_usbc
at_at/660m
at101_bh
atomic
atreus
atreus62
atxkb
aves65
axolstudio
babyv/keymaps/melonbred
baguette
bakeneko60
bakeneko65
bakeneko80
bantam44
barleycorn
barleycorn_smd
barracuda
basekeys
basketweave
bastardkb Updated RGB Matrix suspend define part 3 (#13954) 2021-08-22 09:46:35 +10:00
bat43
bear_face
beatervan
bemeier/bmek
bfake
bigseries
binepad/bn003
bioi
blackplum
blank_tehnologii/manibus
blockey
bm16a
bm16s
bm40hsrgb
bm43a
bm60poker
bm60rgb
bm60rgb_iso
bm65iso
bm68rgb
boardrun
boardsource
boardwalk
bop
boston
boston_meetup
botanicalkeyboards/fm2u
box75
bpiphany
bt66tech/bt66tech60
bthlabs/geekpad
buildakb
business_card
butterstick
c39
caffeinated/serpent65
cannonkeys
capsunlocked
carbo65
cassette42
catch22
centromere
cest73/tkm
charue/sunsetter
chavdai40
checkerboards
cherrybstudio
cheshire/curiosity
chidori
chili
chimera_ergo
chimera_ls
chimera_ortho
chimera_ortho_plus
chlx/merro60
choc_taro
choco60
christmas_tree
ck60i
ckeys
claw44
clawsome
clueboard
cmm_studio/saka68
coarse
cocoa40
comet46
compound
contra
converter Merge remote-tracking branch 'origin/master' into develop 2021-08-20 13:14:35 +00:00
cool836a
copenhagen_click/click_pad_v1
coseyfannitutti
cospad
cozykeys
craftwalk
crawlpad
crazy_keyboard_68
crbn
crin
crkbd
cu24
cu75
cu80
custommk/genesis
cutie_club
cx60
cybergear/macro25
daisy
daji/seis_cinco
db/db63
dc01
dekunukem/duckypad
delikeeb
delilah
deltasplit75
dichotomy
dinofizz/fnrow/v1
diverge3
divergetm2
dk60
dm9records
dmqdesign/spin
do60
donutcables
doodboard
doppelganger
doro67
dozen0
dp60
draculad
draytronics
dubba175
duck
ducky/one2mini
dumbo
dumbpad Merge remote-tracking branch 'origin/master' into develop 2021-08-20 04:22:05 +00:00
durgod
dz60
dztech Updated RGB Matrix suspend define part 3 (#13954) 2021-08-22 09:46:35 +10:00
e88
ealdin
earth_rover
ebastler
eco
edc40
edda
edi/hardlight/mk1
eek
efreet
eggman
emajesty/eiri
emi20
emptystring/NQG
eniigmakeyboards
ep
epoch80
ergo42
ergoarrows
ergodash
ergodone
ergodox_ez
ergodox_infinity Make solo half of split keyboards (more) usable. (#13523) 2021-08-22 10:51:17 +10:00
ergodox_stm32
ergosaurus
ergoslab
ergotaco
ergotravel
ericrlau/numdiscipline
esca
espectro
eve/meteor
evil80
evolv
evyd13 [Keyboard] Refactor atom47 and add rev4 and rev5 (#13201) 2021-08-19 09:40:28 -07:00
exclusive
exent
eyeohdesigns
ez_maker/directpins
facew
fallacy
fc660c
fc980c
feels/feels65 Merge remote-tracking branch 'origin/master' into develop 2021-08-20 04:36:09 +00:00
felix
ferris
ffkeebs/siris
fjlabs Merge remote-tracking branch 'origin/master' into develop 2021-08-19 16:31:49 +00:00
flehrad
fleuron
fluorite
flx
flxlb/zplit
flygone60/rev3
foostan/cornelius
for_science
forever65
fortitude60
four_banger
foxlab
fr4
fractal
freyr
friedrich
frooastboard
ft/mars80
function96
funky40
gami_studio/lex60
gboards
geekboards
geminate60
generic_panda/panda65_01
genone
georgi
gergo
getta25
ggkeyboards/genesis
gh60
gh80_3000
ghs/rar
gingham
gkeyboard/gkb_m16
gmmk Updated RGB Matrix suspend define part 3 (#13954) 2021-08-22 09:46:35 +10:00
gon
gorthage_truck
gowla
gray_studio
grid600
gskt00
gvalchca
h0oni/hotduck
hadron
halberd
halfcliff
hand88
handwired [Keymap] Drashna's Improve OLEDs and custom Split code (#14063) 2021-08-21 13:34:44 -07:00
hardlineworks/otd_plus
hecomi
heliar/wm1_hotswap
helix
hhkb
hhkb_lite_2
hid_liber
hidtech/bastyl
hifumi
hineybush
holyswitch/southpaw75
honeycomb
hotdox
hp69
hs60
hub16
hub20
ianklug/grooveboard
id67
id80
id87
idb/idb_60
idobo
illuminati/is0
illusion/rosa
ilumkb move volcano660 to ilumkb folder (#13550) 2021-08-19 20:02:07 +01:00
inett_studio/sqx
infinity60
irene
iriskeyboards
iron180
ivy
j80
jacky_studio
jae/j01
jagdpietr/drakon
jc65
jd40
jd45
jian
jiran
jisplit89
jj4x4
jj40 Merge remote-tracking branch 'upstream/master' into develop 2021-08-19 11:32:23 -07:00
jj50
jkdlab/binary_monkey
jm60
jnao
jones
just60
k_type
kabedon
kagamidget
kb_elmo Merge remote-tracking branch 'upstream/master' into develop 2021-08-19 11:32:23 -07:00
kbdclack/kaishi65
kbdfans Updated RGB Matrix suspend define part 3 (#13954) 2021-08-22 09:46:35 +10:00
kc60
kc60se
keebio [Keymap] Drashna's Improve OLEDs and custom Split code (#14063) 2021-08-21 13:34:44 -07:00
keebsforall/freebird60
keebwerk
keebzdotnet Merge remote-tracking branch 'upstream/master' into develop 2021-08-19 11:32:23 -07:00
keybage/radpad
keyboardio
keycapsss
keychron/q1
keyhive/maypad
keyprez
keysofkings/twokey
kikoslab/kl90
kindakeyboards/conone65
kinesis
kineticlabs/emu
kingly_keys
kira75
kira80
kiwikeebs
kiwikey
kmac
kmac_pad
kmini
knobgoblin
knops
kona_classic
kopibeng/xt65
kudox
kudox_game
kv/revt
kwub/bloop
ky01
labyrinth75
laptreus
latin6rgb
latin17rgb
latin47ble
latin60rgb
latin64ble
latinpad
latinpadble
lattice60
launchpad
lazydesigners
lck75
le_chiffre
leafcutterlabs/bigknob
leeku/finger65
lets_split
lets_split_eh
lfkeyboards Updated RGB Matrix suspend define part 3 (#13954) 2021-08-22 09:46:35 +10:00
lily58
linworks Merge remote-tracking branch 'origin/master' into develop 2021-08-19 17:14:07 +00:00
littlealby
lizard_trick/tenkey_plusplus
lm_keyboard/lm60n
longnald/corin
ls_60
lucid
m3n3van
m10a
m65
majistic
makrosu
manta60
manyboard/macro
marksard
massdrop
masterworks/classy_tkl
matchstickworks/southpad
matrix
maxipad
maxr1998
mb44
mc_76k
mechkeys/mk60
mechllama/g35
mechlovin
mechmini
mechstudio
mechwild Merge remote-tracking branch 'upstream/master' into develop 2021-08-19 11:32:23 -07:00
mehkee96
meira
meishi
meishi2
melgeek
melody96
meme
merge
mesa/mesa_tkl
meson
metamechs/timberwolf
mexsistor/ludmila
miller/gm862
millipad
mini_elixivy [Keyboard] Minor fixes for mini_elixivy/info.json (#14022) 2021-08-19 11:44:47 -07:00
miniaxe
minidox
minim
minimacro5
mint60
mio
misonoworks
misterknife
mitosis
miuni32
mixi
mnk50
mnk1800s
mode/eighty
model_v
molecule
momoka_ergo
monarch
monstargear/xo87
montex
montsinger
moon
moonlander
mountainblocks/mb17
mschwingen/modelm
mt40
mt64rgb
mt84
mt980
murcielago
mxss
mysticworks/wyvern
nack
nafuda
naiping [Keyboard] Fix naiping/npminila layout macro (#14098) 2021-08-21 14:13:02 +10:00
naked48
naked60
naked64
namecard2x4
navi10
ncc1701kb
nebula12
nebula68
neito
nek_type_a
nemui
neokeys/g67
neopad
neson_design/n6
newgame40
nibiria/stream15
nightingale_studios/hailey
nightly_boards
nightmare
nimrod
niu_mini
nix_studio/oxalys80
nk1
nk65
nk87
nknl7en
nknl7jp
nomu30
nopunin10did
novelpad
noxary
np12
nullbitsco
numatreus
ocean
oddball
oddforge/vea
odelia
ogre
ogurec
ok60
omnikey_bh
omnikeyish
opendeck
opus
orange75
org60
ortho5by12
orthocode
orthodox [Keymap] Drashna's Improve OLEDs and custom Split code (#14063) 2021-08-21 13:34:44 -07:00
otaku_split
owl8
owlab/voice65 Updated RGB Matrix suspend define part 3 (#13954) 2021-08-22 09:46:35 +10:00
pabile
paladin64
palette1202
panc40
panc60
pandora
pdxkbc
pearl
pearlboards/pandora
peej
peranekofactory/tone
percent
phantom
phase_studio/titan65
phoenix
pico
picolab/frusta_fundamental
pimentoso
pinky
pisces
pistachio
pistachio_mp
pistachio_pro
pizzakeyboards/pizza65
pkb65
planck Merge remote-tracking branch 'upstream/master' into develop 2021-08-19 11:32:23 -07:00
playkbtw
plexus75
ploopyco Improve pmw3360 sensor and make it more hardware agnostic (#14097) 2021-08-20 21:14:23 -07:00
plume/plume65
plx
pohjolaworks/louhi
poker87c
poker87d
polilla
polycarbdiet
pom_keyboards/tnln95
portal_66
pos78
preonic
primekb
program_yoink
projectcain/vault45
projectkb
prototypist/j01
pteron36
puck
punk75
pursuit40
q4z
qaz
quad_h/lb75
quantrik/kyuu
quark Merge remote-tracking branch 'upstream/master' into develop 2021-08-19 11:32:23 -07:00
qvex
qwertyydox
rabbit/rabbit68
rabbit_capture_plan
rainkeeb
ramonimbao
rart
rect44
redox
redox_w
redscarf_i
redscarf_iiplus
retro_75
reversestudio/decadepad
reviung5
reviung33
reviung34
reviung39
reviung41
reviung61
rgbkb
ristretto
rocketboard_16
rominronin/katana60
roseslite
rotr
rpiguy9907/southpaw66
rubi
runes/vaengr
runner3680
ryanbaekr/rb86
ryloo_studio/m0110
sam
sanctified/dystopia
satt/vision
sawnsprojects/satxri6key
scarletbandana
scatter42
sck
scythe
seigaiha
sekigon/grs_70ec
sendyyeah
senselessclay/had60
sentraq
sergiopoverony/creator_pro
setta21
shambles
shiro
shk9
sidderskb/majbritt
signum/3_0/elitec
silverbullet44
singa
sirius
sixkeyboard
skeletn87
skergo
slz40
smallice
smk60
snampad
sneakbox Merge remote-tracking branch 'origin/master' into develop 2021-08-19 18:59:06 +00:00
sofle
soup10
southpole
sowbug
soy20
space_space Merge remote-tracking branch 'origin/master' into develop 2021-08-20 04:27:09 +00:00
spaceman
spacetime
spacey
sparrow62
specskeys
spiderisland/split78
splitish
splitkb [Keymap] Drashna's Improve OLEDs and custom Split code (#14063) 2021-08-21 13:34:44 -07:00
splitreus62
splitty
squiggle
standaside
staryu
steal_this_keyboard
stella
stratos
studiokestra
subatomic
suihankey
swiftrax/retropad
switchplate
sx60
tada68
takashicompany/endzone34
taleguers/taleguers75
tanuki
tau4
team0110/p1800fl
technika
telophase
tempo_turtle/bradpad
tender/macrowo_pad
tenki
terrazzo
tetris
tg4x
tgr
the_royal
the_ruler
the_uni
thedogkeyboard
themadnoodle
thevankeyboards
tiger910
tkc
tkw
tmo50
toad
tokyokeyboard
torn
touchpad
tr60w
trashman
treadstone32
treadstone48
treasure
tronguylabs/m122_3270
tszaboo/ortho4exent
tunks/ergo33
tw40
txuu
ua62
uk78
undead60m
underscore33
ungodly
unikorn
unison
uno
uranuma
ut472
utd80
uzu42
v60_type_r
vagrant_10
viktus
vitamins_included
vn66
waldo
wallaby
walletburner
wekey/we27
westfoxtrot
whale/sk
wheatfield
whitefox
wilba_tech
wings42
winkeyless
wolfmarkclub/wm1
work_louder
wsk
wuque Merge remote-tracking branch 'upstream/master' into develop 2021-08-19 11:32:23 -07:00
x16
xbows
xd002
xd004
xd60
xd68
xd75
xd84
xd84pro
xd87
xd96
xelus
xiaomi/mk02
xmmx
xw60
yampad
yasui
yatara/drink_me
yd60mq
yd68
yeehaw
ymd75
ymd96
ymdk
ymdk_np21
yncognito/batpad
yoichiro/lunakey_mini
yosino58
yugo_m
yurei
yushakobo/quick7
yynmt/acperience12
z150_bh
zfrontier/big_switch
zinc
zj68
zlant
zoo/wampus
ztboards
zvecr
readme.md

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.