keychron_qmk_firmware/keyboards
a-chol d4be07dad3 Hid joystick interface (#4226)
* add support for hid gamepad interface
add documentation for HID joystick
Add joystick_task to read analog axes values even when no key is pressed or release. update doc
Update docs/feature_joystick.md
Manage pin setup and read to maintain matrix scan after analog read

* Incorporates patches and changes to HID reporting

There are some patches provided by @a-chol incorporated on this commit,
and also some changes I made to the HID Report structure.

The most interesting is the one dealing with number of buttons: Linux
doesn't seem to care, but Windows requires the HID structure to be byte
aligned (that's in the spec). So if one declares 8/16/32... buttons they
should not have any issues, but this is what happens when you have 9
buttons:

```
 bits |0|1|2|3|4|5|6|7|
      |*|*|*|*|*|*|*|*| axis 0 (report size 8)
      |*|*|*|*|*|*|*|*| ...
      |*|*|*|*|*|*|*|*|
      |*|*|*|*|*|*|*|*|
      |*|*|*|*|*|*|*|*|
      |*|*|*|*|*|*|*|*|
      |*|*|*|*|*|*|*|*| axis 6
      |*|*|*|*|*|*|*|*| first 8 buttons (report size 1)
      |*| | | | | | | | last of 9 buttons, not aligned
```

So for that I added a conditonal that will add a number of reports with
size 1 to make sure it aligns to the next multiple of 8. Those reports
send dummy inputs that don't do anything aside from aligning the data.

Tested on Linux, Windows 10 and Street Fighter (where the joystick is
recognized as direct-input)

* Add save and restore of each pin used in reading joystick (AVR).
Allow output pin to be JS_VIRTUAL_AXIS if the axis is connected to Vcc
instead of an output pin from the MCU.

Fix joystick report id

Fix broken v-usb hid joystick interface. Make it more resilient to unusual settings (none multiple of eight button count, 0 buttons or 0 axes)

Correct adc reading for multiple axes. Piecewise range conversion for uncentered raw value range. Input, output and ground pin configuration per axis.

Documentation fixes

* Fix port addressing for joystick analog read

* The other required set of changes
As per the PR, the changes still holding it up.
Add onekey for testing.
Fix ARM builds.
Fix device descriptor when either axes or buttons is zero.
Add compile-time check for at least one axis or button.
Move definition to try to fix conflict.
PR review comments.
qmk cformat

* avoid float functions to compute range mapping for axis adc reading

* Remove V-USB support for now. Updated docs accordingly.

* Update tmk_core/protocol/lufa/lufa.c

Co-Authored-By: Ryan <fauxpark@gmail.com>

* Update tmk_core/protocol/usb_descriptor.c

Co-Authored-By: Ryan <fauxpark@gmail.com>

* Update tmk_core/protocol/usb_descriptor.c

Co-Authored-By: Ryan <fauxpark@gmail.com>

* Update tmk_core/protocol/usb_descriptor.c

Co-Authored-By: Ryan <fauxpark@gmail.com>

* Add support for joystick adc reading for stm32 MCUs. Fix joystick hid report sending for chibios

* Fix HID joystick report sending for ChibiOS.
Add one analog axis to the onekey:joystick keymap.
Fix pin state save and restore during joystick analog read for STM32
MCUs.

* Update tmk_core/protocol/chibios/usb_main.c

Co-Authored-By: Ryan <fauxpark@gmail.com>

* Update tmk_core/protocol/lufa/lufa.c

Co-Authored-By: Ryan <fauxpark@gmail.com>

* Add missing mcuconf.h and halconf.h to onekey:joystick keymap.
Add suggested fixes from PR.

* Switch saveState and restoreState signature to use pin_t type.
onekey:joystick : add a second axis, virtual and programmatically animated.

* Update docs/feature_joystick.md

Co-Authored-By: Ryan <fauxpark@gmail.com>

* Update docs/feature_joystick.md

Co-Authored-By: Ryan <fauxpark@gmail.com>

* Add PR corrections

* Remove halconf.h and mcuconf.h from onekey keymaps

* Change ADC_PIN to A0

Co-authored-by: achol <allecooll@hotmail.com>
Co-authored-by: José Júnior <jose.junior@gmail.com>
Co-authored-by: a-chol <achol@notamail.com>
Co-authored-by: Nick Brassel <nick@tzarc.org>
Co-authored-by: Ryan <fauxpark@gmail.com>
2020-08-29 14:30:02 -07:00
..
1upkeyboards Super16 VIA support (#10076) 2020-08-18 13:10:43 -07:00
2key2crawl
4by3
4pplet
6ball
7skb
8pack
9key
10bleoledhub [Keyboard] 10 ble oled usbhub pad (#10095) 2020-08-24 11:55:24 -07:00
30wer
40percentclub
abacus
absinthe
abstract/ellipse
acheron
acr60
adelheid
adkb96
aeboards [Keyboard] AEBoards Constellation (#9972) 2020-08-17 23:12:55 -07:00
ai03 Fixed Soyuz LAYOUT_numpad_5x4 Preview on QMK Configurator (#10123) 2020-08-21 14:25:28 -07:00
ajisai74 [Keyboard] AJisai74 (#10021) 2020-08-19 18:50:43 -07:00
akb
akegata_denki/device_one
al1
alf
allison
allison_numpad
alpha
alps64
alu84
amj40
amj60
amj96
amjkeyboard/amj66
amjpad
anavi/macropad8
angel17
angel64
aos/tkl
aplx6
arabica37
arch_36
ares
arisu
ash1800
ash_xiix
ashpil/modelm_usbc Bigger combo index (#9318) 2020-08-29 14:30:02 -07:00
at101_bh
at_at/660m
atomic
atreus [Keymap] update dvorak_42_key keymaps for atreus and ergodox_ez: add VSCode shortcuts (#10054) 2020-08-19 18:38:52 -07:00
atreus62
atxkb
aves65
baguette
bakeneko80
bantam44
barleycorn [Keyboard] Barleycorn (#10118) 2020-08-24 20:37:01 -07:00
basekeys/slice
bat43
bear_face
bfake
bigseries
bigswitch
bioi/g60ble
blackplum
blockey
bm16a
bm16s
bm40hsrgb [Keyboard] Update bm40hsrgb with RGB Matrix support (#10044) 2020-08-17 23:39:17 -07:00
bm43a
bm60rgb
bm60rgb_iso [Keyboard] BM60 RGB ISO (#9975) 2020-08-17 23:28:47 -07:00
boardsource add VIA keymap for boardsource/3x4 (#10043) 2020-08-18 14:36:46 -07:00
boardwalk
boston_meetup
botanicalkeyboards/fm2u
bpiphany
bthlabs/geekpad
business_card
butterstick
c39
candybar
cannonkeys Update Ortho60 VIA keymap (#10130) 2020-08-24 07:49:25 -07:00
catch22
centromere
chavdai40
cheshire/curiosity
chidori
chili
chimera_ergo
chimera_ls
chimera_ortho
chimera_ortho_plus
choc_taro
choco60
christmas_tree
ckeys
claw44 Remove inclusion of adafruit_ble.h from ssd1306.c (#9355) 2020-08-29 14:30:02 -07:00
clawsome
clueboard
cocoa40
comet46 Remove inclusion of adafruit_ble.h from ssd1306.c (#9355) 2020-08-29 14:30:02 -07:00
contra
converter Update features to use Custom Tapping Term when appropriate (#6259) 2020-08-29 14:30:02 -07:00
copenhagen_click/click_pad_v1
coseyfannitutti
cospad
craftwalk
crawlpad
crkbd Remove inclusion of adafruit_ble.h from ssd1306.c (#9355) 2020-08-29 14:30:02 -07:00
cu24
cu75
cu80
cutie_club/wraith
daisy
db/db63
dc01
deltasplit75
dichotomy
diverge3
divergetm2
dk60
dm9records
dmqdesign/spin Keymap Updates for DMQ Design SPIN, Boardsource 4x12, and Gingham (#9911) 2020-08-17 01:32:07 -07:00
do60
donutcables
doppelganger
doro67
dozen0
dp60
drakon [Keyboard] Drakon (#10071) 2020-08-22 18:24:09 -07:00
duck
dumbo
dumbpad
dz60 [Keymap] chrisae9 dz60 updates (#10098) 2020-08-23 23:13:11 -07:00
dztech [Keymap] DZ60RGB - Add personal keymap (#9989) 2020-08-12 17:28:37 -07:00
e88 format code according to conventions [skip ci] 2020-08-25 09:47:03 +00:00
eco
efreet
emptystring/NQG
eniigmakeyboards
ep
ergo42
ergodash
ergodone
ergodox_ez [Keymap] update dvorak_42_key keymaps for atreus and ergodox_ez: add VSCode shortcuts (#10054) 2020-08-19 18:38:52 -07:00
ergodox_infinity Update features to use Custom Tapping Term when appropriate (#6259) 2020-08-29 14:30:02 -07:00
ergodox_stm32
ergosaurus
ergoslab
ergotaco
ergotravel
ericrlau/numdiscipline
espectro
eve/meteor
evil80
exclusive
exent
facew
fallacy
fc660c
fc980c
felix
fleuron
fluorite
flx
for_science [Keyboard] For Science (#9607) 2020-08-26 09:55:18 -07:00
fortitude60
four_banger
foxlab
fractal
freyr
ft/mars80
function96 function96 keyboard added (#10024) 2020-08-18 18:25:43 +10:00
funky40
gami_studio/lex60
gboards Bigger combo index (#9318) 2020-08-29 14:30:02 -07:00
geekboards/tester
generic_panda/panda65_01 [Keyboard] generic_panda/panda65_01 (#10006) 2020-08-18 14:28:25 -07:00
georgi
gergo
getta25
gh60
gh80_3000
ghs/rar Add indicator LEDs for GHS.RAR (#10028) 2020-08-14 14:56:27 +01:00
gingham Keymap Updates for DMQ Design SPIN, Boardsource 4x12, and Gingham (#9911) 2020-08-17 01:32:07 -07:00
gon
gowla
gray_studio
grid600
gskt00
hadron
halberd
handwired Hid joystick interface (#4226) 2020-08-29 14:30:02 -07:00
hardlineworks/otd_plus
hecomi
heliar/wm1_hotswap
helix Remove inclusion of adafruit_ble.h from ssd1306.c (#9355) 2020-08-29 14:30:02 -07:00
hhkb [keymap] Fixed an issue that long pressed alt key does not work on PSN_FN layer. (#10039) 2020-08-15 13:54:52 +01:00
hhkb_lite_2 [Keyboard] HHKB Lite 2 (#9188) 2020-08-18 00:06:19 -07:00
hid_liber
hifumi
hineybush add num lock indicator functionality to hineybush/h10 (#10100) 2020-08-24 14:55:49 -07:00
holyswitch/southpaw75 [Keyboard] HolySwitch Co Southpaw75 (#10011) 2020-08-19 18:49:31 -07:00
honeycomb
hotdox
hs60
hub16
id80 Fix IDOBAO ID80 board configurations. (#9796) 2020-08-22 01:12:19 -07:00
idb/idb_60
idobo
illuminati/is0
infinity60 Revert "Add Kiibohd bootloader type to bootloader.mk (#9908)" (#10126) 2020-08-21 15:42:28 -07:00
ivy
j80
jae/j01
jc65
jd40
jd45
jian Add jian/keymaps/via/config.h (#9948) 2020-08-13 00:05:02 +10:00
jiran
jisplit89
jj4x4
jj40
jj50 [Keymap] yoonbae81 keymap for JJ50 (#10052) 2020-08-17 22:03:55 -07:00
jm60
jnao
just60
k_type Revert "Add Kiibohd bootloader type to bootloader.mk (#9908)" (#10126) 2020-08-21 15:42:28 -07:00
kabedon
kagamidget
katana60
kb_elmo
kbdclack/kaishi65
kbdfans kbd67/mkiirgb - allow disabling rgb matrix (#10147) 2020-08-26 01:09:45 -07:00
kc60
kc60se
keebio Update keymap for Keebio/iris4/rev4 (#10062) 2020-08-19 09:13:55 +10:00
keebwerk/nano_slider
keebzdotnet/wazowski
keybage/radpad
keyboardio
keycapsss
keyhive/maypad
kinesis [Keyboard] Kinesis + Pro Micro (#9944) 2020-08-16 18:37:42 -07:00
kingly_keys
kira75
kira80
kiwikeebs [Keyboard] KiwiKeebs MacroBoard v1.0 (#10080) 2020-08-24 20:36:05 -07:00
kmac
kmini
knops
kona_classic
kudox
kudox_game
kv/revt
kyria [Keymap] update kejadlen keymaps (#9954) 2020-08-18 19:21:50 -07:00
laptreus
latinpad latinpad ADD BOOTMAGIC_ENABLE = lite (#10056) 2020-08-17 21:36:16 -07:00
lattice60
launchpad
lazydesigners [Keyboard] Add support for keyboard 'Bolt' (#10046) 2020-08-18 19:29:09 -07:00
le_chiffre
leeku/finger65
lets_split
lets_split_eh
lfkeyboards
lily58 Update Lily58 Keymaps and VendorID (#9979) 2020-08-24 09:08:35 -07:00
m0lly
m10a
maartenwut 60_ansi_arrows Community Layout; mrsendyyk keymaps for dz60 and maartenwut/eon65 (#9993) 2020-08-19 11:16:10 -07:00
manta60
massdrop
matrix [Keyboard] added matrix 8xv2.0 additional (#9470) 2020-08-22 13:45:06 -07:00
maxipad
maxr1998 Bigger combo index (#9318) 2020-08-29 14:30:02 -07:00
mc_76k
mechkeys/mk60
mechllama/g35
mechlovin Refactor Adelais PCB (#10069) 2020-08-18 18:13:16 -07:00
mechmini
mehkee96
meira
meishi
meishi2
melody96
meme
meson
metamechs/timberwolf
miller/gm862
miniaxe
minidox Bigger combo index (#9318) 2020-08-29 14:30:02 -07:00
mint60
mitosis
miuni32 [Keymap] add miuni32:cassdelacruzmunoz (#10108) 2020-08-24 16:56:27 -07:00
mixi
montsinger
moon
moonlander [Keyboard] Add ZSA Moonlander (#9853) 2020-08-22 07:44:42 -07:00
mountainblocks/mb17
mschwingen/modelm [Keyboard] add support for ModelM USB board (#9846) 2020-08-22 16:02:16 -07:00
mt40
mt980
murcielago
mxss
nafuda
naked48
naked60
naked64
namecard2x4
navi10
ncc1701kb
nckiibs
nebula12
nebula65
nek_type_a
nemui [Keyboard] Nemui (#10020) 2020-08-22 12:40:55 -07:00
newgame40
nightly_boards
nightmare
niu_mini
nk65
nk87 [Keyboard] NK87 (#9965) 2020-08-18 17:56:40 -07:00
nomu30
novelpad
noxary
numatreus
oddball
ogre
ok60
omnikey_bh
omnikeyish
orange75
org60
ortho5by12
orthodox
otaku_split
pabile
paladin64
palette1202
panc40
panc60
pandora
pdxkbc
pearl
peiorisboards/ixora Initial work for consolidation of ChibiOS platform files (#8327) 2020-08-29 14:30:02 -07:00
percent
phantom
pico
pimentoso/paddino02
pinky
pistachio [Keyboard] Pistachio (#10003) 2020-08-17 23:46:56 -07:00
planck Update features to use Custom Tapping Term when appropriate (#6259) 2020-08-29 14:30:02 -07:00
playkbtw
pom_keyboards/tnln95
preonic
primekb
projectkb
puck
punk75
qaz
quad_h/lb75
quantrik/kyuu
qwertyydox
rabbit/rabbit68
rabbit_capture_plan FIX rabbit_capture_plan info.json (#10139) 2020-08-23 00:27:01 -07:00
ramonimbao
rart
redox Redox: sync RGB on left and right sides (#10022) 2020-08-17 03:16:52 -07:00
redox_w
redscarf_i
redscarf_iiplus
retro_75
reversestudio/decadepad
reviung34
reviung39 Update reviung39 PRODUCT_ID (#10001) 2020-08-21 11:10:05 +10:00
reviung41
reviung61
rgbkb
rotr
runner3680
s7_elephant
satt/vision [Keyboard] Vision keyboard by SatT (#9768) 2020-08-19 11:18:52 -07:00
scarletbandana
sck
scythe
sentraq
setta21
shambles
shiro
sidderskb/majbritt
signum/3_0/elitec
silverbullet44
singa [Keymap] Add via keymap for singa (#10050) 2020-08-17 21:26:42 -07:00
sirius
sixkeyboard
smk60
snagpad
snampad
sofle
southpaw75 [Keyboard] Southpaw75 (#9844) 2020-08-16 18:42:26 -07:00
southpole
spaceman
spacetime
speedo
splitish
splitreus62
squiggle Fixing squiggle's layouts in the config.qmk.fm (#10019) 2020-08-13 23:14:19 +01:00
standaside
staryu
stella
stoutgat
subatomic
suihankey
switchplate
sx60
tada68 [Keymap] userspace and keymap for rupa (#9786) 2020-08-20 17:07:09 -07:00
tanuki
telophase
tenki
tetris
tg4x
tgr
the_royal
the_ruler
thedogkeyboard
themadnoodle
thevankeyboards Changes to thevankeyboards/minivan:king keymap (#10032) 2020-08-18 18:18:32 -07:00
tkc
tkc1800
tmo50
toad
tokyo60
touchpad
tr60w
treadstone32
treadstone48
treasure/type9
ua62
uk78
underscore33 Fix Configurator data: underscore33/rev1 2020-08-25 17:13:06 -07:00
unikorn
uranuma
ut472
uzu42
v60_type_r
vinta Initial work for consolidation of ChibiOS platform files (#8327) 2020-08-29 14:30:02 -07:00
vision_division
vitamins_included
vn66
waldo
wallaby
walletburner/neuron
westfoxtrot
whale/sk
wheatfield
whitefox Revert "Add Kiibohd bootloader type to bootloader.mk (#9908)" (#10126) 2020-08-21 15:42:28 -07:00
wilba_tech [Keyboard] NK87 (#9965) 2020-08-18 17:56:40 -07:00
winkeyless
wolfmarkclub/wm1
wsk
x16
xbows
xd60 [Keymap] xd60:shura30 (#10089) 2020-08-19 12:30:00 -07:00
xd68
xd75 Bigger combo index (#9318) 2020-08-29 14:30:02 -07:00
xd84
xd87
xd96
xd002
xd004
xelus [Keyboard] add Xelus Valor (#10079) 2020-08-18 20:20:22 -07:00
xiaomi/mk02
xmmx
xw60
yatara/drink_me
yd60mq
yd68
ymd75
ymd96
ymdk
ymdk_np21
yncognito/batpad
yosino58 Remove inclusion of adafruit_ble.h from ssd1306.c (#9355) 2020-08-29 14:30:02 -07:00
yurei
yushakobo/quick7
z150_bh
zfrontier/big_switch
zinc
zj68
zlant
ztboards
zvecr
readme.md

Included Keyboards

QMK runs on a diverse range of keyboards. Some of these keyboards are officially supported 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.