Compare commits
604 Commits
Author | SHA1 | Date | |
---|---|---|---|
563d5919b3 | |||
0fee906e09 | |||
c2fd7f1b5b | |||
faa3e62e70 | |||
5f5a6fff8b | |||
f1c33423b0 | |||
5f8e8540fb | |||
4f6f7b59cf | |||
e2e287ec5f | |||
dfcd4f0d25 | |||
b2271d984d | |||
8d3fca57a3 | |||
fced377ac0 | |||
7b8a013826 | |||
5263dfd465 | |||
13206b2f87 | |||
cb9be8a9dc | |||
a1af8542c7 | |||
1a5dc278bc | |||
10c1e1b3ab | |||
00c1401d3c | |||
a9b3c0a807 | |||
ac447d8acb | |||
a5e749d8cd | |||
4ee623fdd5 | |||
751316c344 | |||
5d3bf8a050 | |||
6501377070 | |||
af2ca13604 | |||
451c472d1d | |||
bfe76053ba | |||
9d41281a1d | |||
ba5e1f1bae | |||
e4823aadec | |||
5c9906eb4f | |||
f56d333db1 | |||
d8f76f9e6d | |||
6ca00c2152 | |||
dc6fe85b87 | |||
883dd2df80 | |||
2ac3a51d71 | |||
f66680d233 | |||
503cf18aed | |||
38d2c8cedf | |||
53224e03d6 | |||
7ef2ea3d49 | |||
9e4037465a | |||
fd4f102977 | |||
6d84795bc1 | |||
179e5c018f | |||
5246acb2e4 | |||
02a8c874f8 | |||
dae6f6b39b | |||
526c185e7e | |||
c63fd051da | |||
b95979560c | |||
65150984bd | |||
205321c377 | |||
1816ad01d0 | |||
9c8f61dfa0 | |||
d1df576ece | |||
83ebbf57b3 | |||
8e1f706ac6 | |||
b0c780ed32 | |||
3ad2be52a7 | |||
0fbcb41c85 | |||
ddca422776 | |||
82bb7d2852 | |||
1044519f36 | |||
209942366b | |||
494b34b63f | |||
58e3b01f37 | |||
6c2008c688 | |||
bcedc80ec7 | |||
ef5fad137b | |||
15dd05c402 | |||
32d03db371 | |||
c9d396dd47 | |||
2afb29e095 | |||
fcf150bd82 | |||
ee2eb01653 | |||
0bece1d442 | |||
be69dd22e8 | |||
b9675d2106 | |||
f689f043b1 | |||
54b04d9665 | |||
4604c70c4c | |||
010c5b12bd | |||
4adf4d5a89 | |||
d0e0202b27 | |||
fb9425df82 | |||
22ad35b225 | |||
f6cec668c7 | |||
2651edc243 | |||
2a43989d30 | |||
2f5521cd48 | |||
ac3d2a3810 | |||
1786490993 | |||
e55d55edc0 | |||
ad014c2539 | |||
81698df056 | |||
fca35a3540 | |||
5d01cc45be | |||
eaab0844e8 | |||
ce842f912e | |||
cceab93baa | |||
4161573b28 | |||
d0e684ef55 | |||
f125406700 | |||
afebb6576c | |||
7f6ba2bf8a | |||
142ebaea46 | |||
bbd17def21 | |||
d89e552419 | |||
9cf69a1997 | |||
c6cf1ae4e7 | |||
2c9ab8a606 | |||
0bf60acc4b | |||
6b54f3ce1c | |||
c3aaed8dfb | |||
ebc274209e | |||
1bdfac8afc | |||
9b716b7ada | |||
b591c0c24a | |||
6ba014a572 | |||
2dd47a3bf4 | |||
887c1c4e0e | |||
f66850bfd0 | |||
632285c982 | |||
805f5cb72b | |||
a8a8bf0ff3 | |||
fadd3cb461 | |||
a41f973f75 | |||
7abbc95cd6 | |||
30a6f231bf | |||
44ff14f290 | |||
741c7d5eec | |||
f3c30e80cc | |||
d846660e00 | |||
774384ce31 | |||
361ac2f32a | |||
d15a60d2d3 | |||
73992c68d5 | |||
8ca4ed9a98 | |||
640d12d070 | |||
3beda5c16e | |||
fb7fc54923 | |||
179c868059 | |||
7b11dcce10 | |||
e2fa05c6d2 | |||
4c4009c0fd | |||
e7860d673b | |||
2fe7e221ec | |||
e0f548085c | |||
94fc32f431 | |||
1f7bbf279c | |||
803610a284 | |||
cd0edbb1fb | |||
6919772fb9 | |||
fedd8e81d1 | |||
adda5d7770 | |||
d2581884d9 | |||
58fd782ce0 | |||
8e56d10e4e | |||
43868a5e20 | |||
db167ecf79 | |||
2b8b1045a1 | |||
7a6e52b5d8 | |||
ae5f7365ea | |||
606438692d | |||
5d29a13e22 | |||
81c648e947 | |||
923bad46f9 | |||
19513fac5f | |||
7bb9c76c80 | |||
57e67a4cc8 | |||
cf3913cd79 | |||
a30cc37c09 | |||
b18c261040 | |||
bac5d6bc6a | |||
ab1650606c | |||
dc00942be1 | |||
e8f842e798 | |||
3745ebc22b | |||
d646cba72a | |||
15e84f79f1 | |||
6f30b402a2 | |||
1ff526dac0 | |||
e17b55e33a | |||
f31bf1b202 | |||
5f82b0782f | |||
2e6959ed87 | |||
c482a2944b | |||
65c8ac9ac9 | |||
e182a38e7c | |||
fe4581c1a1 | |||
ddd055b1e2 | |||
f7324ec684 | |||
3d760caa85 | |||
750c7c2bdb | |||
4846c8eba0 | |||
3de4c3ea6a | |||
830bd5460c | |||
9f54a26dc0 | |||
16a15c1cfc | |||
37a4b53c4f | |||
a84d239661 | |||
41fd60d624 | |||
231464c49c | |||
d26a14c169 | |||
195be50745 | |||
8fdb229b66 | |||
fd3456f362 | |||
812d80efbd | |||
86c4c4e91d | |||
168ba88ada | |||
5f5c2a219c | |||
e415198235 | |||
b17482c3fd | |||
5b4870c046 | |||
374525c995 | |||
e02a3c559d | |||
e1217dae5a | |||
485a0b0bc3 | |||
23cfc4b145 | |||
bd639752db | |||
aaeef7a833 | |||
0d6614f71f | |||
d322ec5452 | |||
c7449b3840 | |||
4c51049b2b | |||
dd60fcda28 | |||
fd6b674b49 | |||
2c0deb8a13 | |||
a904371b29 | |||
cfdd105d9d | |||
82ae6ee007 | |||
f220e7d713 | |||
3cb6fb2935 | |||
5c666398d5 | |||
a47915d2d2 | |||
6ec3cc029e | |||
4597f2bcc8 | |||
52af38da37 | |||
b2dbc3f515 | |||
86b62eadc2 | |||
3337eb10b2 | |||
32bab55def | |||
47fc2f8855 | |||
ee29b515ec | |||
c031e13982 | |||
84bf82f2c9 | |||
af26238385 | |||
28e5969f78 | |||
59246756e5 | |||
423ce39f18 | |||
217debff07 | |||
52e9719d09 | |||
9df367e227 | |||
8650b9f10c | |||
5c9c45619e | |||
09caf19389 | |||
4baf49191f | |||
427da3c19c | |||
1df8bb3cdb | |||
99eacdc47a | |||
5e235d30c7 | |||
6586280bf3 | |||
0722986d7a | |||
22a10cc8a3 | |||
b349fa0a57 | |||
e98a9578a1 | |||
d2b03bf150 | |||
35ca1c2212 | |||
ccc8338b0e | |||
bafa35ff46 | |||
182286680a | |||
c1c579c554 | |||
19bd8aa942 | |||
d0d105b083 | |||
c0a57c2a50 | |||
738c6612ca | |||
643fc1d806 | |||
f78896589e | |||
837ffd0006 | |||
92a50a386a | |||
357c6009be | |||
e916ce5f3e | |||
086a7cf800 | |||
99f7fe6bd4 | |||
d0c3a4c8d5 | |||
2dca087b04 | |||
b80340c207 | |||
cb4a86475e | |||
7e4cf9ace2 | |||
0d658e0c95 | |||
1522d97c2b | |||
2d39a9dcdb | |||
33bf4863f5 | |||
ad547c1fdd | |||
9b70e53508 | |||
33a5dc4fcf | |||
e0fffcde99 | |||
06bffbd45b | |||
c261076f8e | |||
51ecd37d7b | |||
ed5e69093c | |||
43785126a7 | |||
8c97b4a3a4 | |||
0698b15aa5 | |||
d600631ad1 | |||
f3595f65b7 | |||
23df763a31 | |||
ed910c8e97 | |||
7e1c0bd4c0 | |||
d2b8398f75 | |||
195324cc4c | |||
cd5399942b | |||
fd4bbd8d11 | |||
f43cb31476 | |||
89eb3a9e42 | |||
66d94dc22a | |||
5a8f59503e | |||
7918f7d61d | |||
a6bd8fe67b | |||
55b43f02f0 | |||
db4b11f866 | |||
46a84ec84a | |||
3b5998085c | |||
7a9980fd85 | |||
bc13dcd349 | |||
55002338b1 | |||
99d9250045 | |||
4a92dd327c | |||
7873b49d40 | |||
fcf2b45263 | |||
5607af8524 | |||
5a45627e17 | |||
17d0f6338e | |||
484c059d86 | |||
3cc68543ca | |||
daf6dedb02 | |||
7a0d145e27 | |||
e990863296 | |||
d06340f665 | |||
4c0065dda7 | |||
2ae39ccf38 | |||
5185c52b4a | |||
c0b99badcb | |||
f9bb9ef0b8 | |||
3d9ffd3efb | |||
3cea9fedff | |||
575d99816e | |||
4bccde37d4 | |||
f6b40da7f8 | |||
6fb048fdaf | |||
06b571aa53 | |||
355b693e4e | |||
f514ad5503 | |||
09a1917103 | |||
46e4493761 | |||
157d121c71 | |||
7e6b550ebf | |||
7f4ce4a8b7 | |||
6452973761 | |||
a2309b306a | |||
52ac6c4303 | |||
05e9ff6554 | |||
17bda000f3 | |||
46a69d1f3b | |||
b56a41800a | |||
d3c29c9b3c | |||
370577e4ed | |||
6e84247ec2 | |||
5380c29dd7 | |||
23f19852b9 | |||
8a5c1e1859 | |||
6265b78307 | |||
23124b9fd1 | |||
eb7fc7f9d9 | |||
c2df714c3b | |||
799b21f8cd | |||
750179e111 | |||
f538b2273a | |||
50e85f91e8 | |||
27e7f322a5 | |||
dfdc89296b | |||
671020af08 | |||
b8c3f4c60b | |||
511fe643c2 | |||
f7601dba13 | |||
89cab95b63 | |||
cc38627816 | |||
6c2c3c13e9 | |||
e4cc642a79 | |||
c3c3943432 | |||
061ed87b89 | |||
5c1aca0b88 | |||
6384a2abd8 | |||
439afc883a | |||
07c75feba3 | |||
b5aa5e4338 | |||
be8443b35b | |||
4b10235f67 | |||
6ef13f83e2 | |||
be2f5816b6 | |||
ff213d5fe1 | |||
3234118e52 | |||
a1ffc40b36 | |||
8fe5c718b4 | |||
38f14c4174 | |||
eb683c8c52 | |||
21799be1ca | |||
5cfc3ce02e | |||
724f20ed32 | |||
c61f016fa4 | |||
ea7e40bae1 | |||
974f83ec4b | |||
400ca2d035 | |||
e409fb47f2 | |||
0499f30f59 | |||
ae74922d14 | |||
3349a8b49b | |||
b4ef72423e | |||
f4b67cde8a | |||
0a643be39e | |||
6c8e205fc0 | |||
7901006753 | |||
9bfa713421 | |||
b6fc3ad8e7 | |||
e0909a31c7 | |||
d6bffdf577 | |||
d1190df10b | |||
bf38f39c3f | |||
6add103827 | |||
62d1d69ba9 | |||
7642075fc3 | |||
ca91dc594b | |||
26cb83b8c0 | |||
2392ddb76b | |||
6de77141a4 | |||
6f6c2e1c5c | |||
48cad94d7e | |||
90665aeec9 | |||
845953cc67 | |||
c3c2eb71e1 | |||
28a6a4a15b | |||
ccb37f673a | |||
c5efbc45a1 | |||
6a0d3c3517 | |||
2fbbac04bb | |||
04c81a04c7 | |||
120fcc58b6 | |||
2f15cb2126 | |||
8af156d976 | |||
70b5015162 | |||
3fad3854d6 | |||
38d7145da2 | |||
6e8876be39 | |||
0bb2924670 | |||
2f623daa45 | |||
ebbaba9001 | |||
5f35b07102 | |||
59188bf29d | |||
9c4bf0ac4a | |||
f2901375ce | |||
f65e79477f | |||
3094422b33 | |||
31fd0cbc1c | |||
2b427f774a | |||
85444176b2 | |||
52b48997eb | |||
808aab8496 | |||
0742f9fc96 | |||
58a9c84d6b | |||
c217186bea | |||
781308507d | |||
2eb6cb0dfd | |||
95c5c11d0b | |||
b6a09502c6 | |||
1962135418 | |||
d79be051dd | |||
3fe8d604a4 | |||
194bc7a7e1 | |||
fec4283022 | |||
17af712b7c | |||
712ded1f2f | |||
c67e304593 | |||
8c80475fcc | |||
3e18bb914c | |||
4434649c2f | |||
c6c94eeabc | |||
2c201ab9ad | |||
e5b10079cf | |||
854d46f833 | |||
bdfdc506da | |||
51a81813b0 | |||
8566a684bc | |||
28d3c29704 | |||
dd5cb64851 | |||
b9a64ec93b | |||
c9067dfe4f | |||
1592d7df24 | |||
9acd5e04d5 | |||
0afcb8a36c | |||
89a675d57c | |||
b892a1429d | |||
e90d66f93e | |||
bfef2c7b05 | |||
74c01654c7 | |||
dc98d44582 | |||
defa1a1dc7 | |||
c89c084146 | |||
13fff52f6b | |||
7bf9d9dc0a | |||
14079ce698 | |||
05d9a0ff03 | |||
b9d0b1f064 | |||
ed80874f72 | |||
23e942ae4e | |||
c077300e19 | |||
11f12d386b | |||
4d76d85d7b | |||
981ea87b05 | |||
65252ebf67 | |||
5bd0a5a585 | |||
9fbf17b90e | |||
96bfce7000 | |||
d68c4d8106 | |||
9fb988b6e8 | |||
016d417253 | |||
de58b07659 | |||
6ceaae30f5 | |||
5075a1d9e4 | |||
3587e20e70 | |||
963bba1fc3 | |||
571a589cfa | |||
3c2d5599b9 | |||
3b05f25221 | |||
e05e671871 | |||
2d5b492550 | |||
ad8774d6fa | |||
297aad6ebd | |||
8f69983c58 | |||
b779078c60 | |||
b936048b0b | |||
7e0dc5376f | |||
6d1af63842 | |||
6c4a744a1b | |||
f7722ef9ca | |||
76cb2b1160 | |||
5117dff6a2 | |||
e5d34fd084 | |||
bfb2f8e0a8 | |||
d8f3c28a37 | |||
eef0cb2f90 | |||
63e4ad13c8 | |||
f9e67338a4 | |||
5f9f62fb8c | |||
147bc6ec43 | |||
bea62add55 | |||
d511e52c1f | |||
789e199450 | |||
a747c1c3de | |||
a521fc2b6c | |||
8651eef298 | |||
f4799481cd | |||
675b153525 | |||
5df2424651 | |||
f9c53ca71a | |||
0d189582c1 | |||
c6b667623a | |||
d96380e654 | |||
7e80686f1e | |||
e967471c4f | |||
eca3f9d935 | |||
44c62117ee | |||
f235822fba | |||
5d5ff807c6 | |||
1c7c5daad4 | |||
aeab11da88 | |||
b53934805a | |||
6bfbdc30ca | |||
02eb949479 | |||
3a0f11eb27 | |||
c2013f0b7c | |||
19d7cbc858 | |||
73f903906e | |||
d235612e48 | |||
6ad3328b83 | |||
13d736d6ab | |||
0b810bdff3 | |||
3f19117124 | |||
fe3e5cba69 | |||
6ba383cc5f | |||
d44ca60cb0 | |||
42b0e95ae6 | |||
b6316c5024 | |||
fc4ef6934d | |||
0dff26b550 | |||
76d8558b1a | |||
8123dd2649 | |||
1ec648932f | |||
427f7b3a39 |
.clang_completedoxygen-todorequirements-dev.txtrequirements.txt
.github/workflows
.gitignore.gitmodules.vscode
MakefileVagrantfileautocomplete.shbin
build_json.mkbuild_keyboard.mkbuild_test.mkcommon_features.mkdocs
ChangeLog
_summary.mdbreaking_changes.mdbreaking_changes_instructions.mdcli.mdcli_commands.mdcli_configuration.mdcli_development.mdcoding_conventions_c.mdcoding_conventions_python.mdconfig_options.mdconfigurator_step_by_step.mdcustom_quantum_functions.mdde
eeprom_driver.mdes
README.md_summary.mdnewbs_best_practices.mdnewbs_building_firmware_configurator.mdnewbs_learn_more_resources.md
faq_build.mdfaq_debug.mdfeature_advanced_keycodes.mdfeature_bootmagic.mdfeature_debounce_type.mdfeature_encoders.mdfeature_hd44780.mdfeature_layers.mdfeature_leader_key.mdfeature_macros.mdfeature_pointing_device.mdfeature_ps2_mouse.mdfeature_rawhid.mdfeature_rgb_matrix.mdfeature_rgblight.mdfeature_split_keyboard.mdfeature_swap_hands.mdfeature_unicode.mdfeature_userspace.mdfeature_wpm.mdflashing.mdfr-fr
README.md_summary.mdbreaking_changes.mdfaq_debug.mdflashing.mdgetting_started_github.mdnewbs_best_practices.md
getting_started_docker.mdgetting_started_github.mdgetting_started_vagrant.mdhardware_keyboard_guidelines.mdhe-il
index.htmlinternals_gpio_control.mdisp_flashing_guide.mdja
README.md_summary.mdarm_debugging.mdcli.mdcli_commands.mdcli_configuration.mdconfig_options.mdcontributing.mdcustom_matrix.mdcustom_quantum_functions.mdfaq.mdfaq_debug.mdfaq_general.mdfaq_keymap.mdfeature_advanced_keycodes.mdfeature_audio.mdfeature_auto_shift.mdfeature_backlight.mdfeature_bluetooth.mdfeature_bootmagic.mdfeature_combo.mdfeature_command.mdfeature_dip_switch.mdfeature_dynamic_macros.mdfeature_encoders.mdfeature_grave_esc.mdfeature_haptic_feedback.mdfeature_hd44780.mdfeature_key_lock.mdfeature_layouts.mdfeature_leader_key.mdfeature_led_matrix.mdfeature_pointing_device.mdfeature_thermal_printer.mdfeature_velocikey.mdflashing.mdgetting_started_build_tools.mdgetting_started_getting_help.mdgetting_started_github.mdgetting_started_introduction.mdgetting_started_vagrant.mdhardware_avr.mdhardware_drivers.mdhardware_keyboard_guidelines.mdi2c_driver.mdkeymap.mdnewbs_building_firmware_configurator.mdnewbs_learn_more_resources.md
keycodes.mdkeycodes_basic.mdkeymap.mdmod_tap.mdnewbs_flashing.mdnewbs_getting_started.mdother_vscode.mdplatformdev_chibios_earlyinit.mdproton_c_conversion.mdpt-br
ref_functions.mdreference_glossary.mdreference_keymap_extras.mdru-ru
serial_driver.mdspi_driver.mdsupport.mdsyllabus.mdtap_hold.mdunderstanding_qmk.mdunit_testing.mdzh-cn
drivers
avr
apa102.ci2c_master.ci2c_master.hi2c_slave.ci2c_slave.hspi_master.cspi_master.hssd1306.hws2812.cws2812.h
chibios
analog.canalog.hi2c_master.ci2c_master.hserial.cserial.hserial_usart.cspi_master.cspi_master.hws2812.cws2812.hws2812_pwm.cws2812_spi.c
eeprom
issi
oled
keyboards
1upkeyboards
super16/keymaps/nblyumberg
sweet16
40percentclub
7skb
8pack
abacus
absinthe
acheron
ai03
allison
allison_numpad
alps64
amjkeyboard/amj66
aos/tkl
aplx6
arabica37
ares
at101_bh
at101_blackheart
at_at/660m
atomic/keymaps/pvc
atreus
atreus62/keymaps
aves65
baguette
bakeneko80
basekeys/slice
config.h
keymaps
readme.mdrev1
rev1_rgb
slice.cslice.hslice_font.cbat43
bear_face
bfake
blackplum
bm16a
boardsource/3x4
botanicalkeyboards/fm2u
bpiphany/pegasushoof/keymaps/blowrak
butterstick/keymaps/dennytom
candybar
cannonkeys
an_c
atlas
bluepill
chimera65
db60
devastatingtkl
instant60
iron165
obliterated75
ortho48
ortho60
ortho75
practice60
practice65
rekt1800
satisfaction75
savage65
stm32f072
tmov2
centromere/keymaps/mini
cheshire/curiosity
chidori
chimera_ortho_plus
choco60/keymaps/default
ckeys
claw44
clawsome/bookerboard
clueboard
2x1800
2018
2018.c2018.hconfig.hinfo.jsonreadme.mdrules.mk
keymaps
default
default_4u
default_7u
macroboard
mouseboard_left
mouseboard_right
2019
2019.c2019.hconfig.hinfo.jsonreadme.mdrules.mk
info.jsonkeymaps
default
default_1u_ansi
default_1u_iso
default_2u_ansi
default_2u_iso
default_4u_ansi
default_4u_iso
default_7u_ansi
default_7u_iso
keymaps/mouseboard_right
readme.mdcard/keymaps/default
comet46
contra
converter
palm_usb
siemens_tastatur
usb_usb
hasu
keymaps
coseyfannitutti
discipad
discipline
config.hdiscipline.hinfo.jsonrules.mkusbconfig.h
keymaps
67_ansi
coseyfannitutti
default
iso
via
wkl_ansi_2_right_mods
wkl_ansi_3_right_mods
mysterium
romeo
cospad
crkbd
cu75
daisy
db/db63
dm9records
ergoinu
config.hergoinu.cergoinu.hinfo.json
keymaps
matrix.creadme.mdrules.mkserial.cserial.hserial_config.hsplit_util.csplit_util.hplaid
tartan
dmqdesign/spin
donutcables/budget96
doro67/multi/keymaps/konstantin
dp60
duck/orion/v3
dz60
dztech
dz60rgb
dz60rgb_ansi
dz60rgb_wkl
dz65rgb
eco
eniigmakeyboards/ek87
ergodash/rev1/keymaps
333fred
shadowprogr
tw1t611
ergodone/keymaps/art
ergodox_ez
config.hergodox_ez.hinfo.jsonled_i2c.creadme.mdrules.mk
keymaps
danielo515
default
ericgebhart
nathanvercaemert
pvinis
toshi0383
ergodox_stm32
ergotravel/keymaps/ckofy
ericrlau/numdiscipline
eve/meteor
exclusive
e6v2
e7v1
e7v1se
exent
facew
flx/lodestone
fortitude60
foxlab
key65
hotswap
universal
leaf60
ft/mars80
funky40
gboards
combos
dicts/aset
_generator
main.go
cmd-keymap.defda-keymap.defde-keymap.defen-colemak-keymap.defen-dvorak-keymap.defen-keymap.defes-keymap.deffn-keymap.deffr-keymap.defhu-keymap.defit-keymap.deflayer-keymap.defnl-keymap.defnum-keymap.defnw-keymap.defpl-keymap.defpt-keymap.defro-keymap.defsv-keymap.deftr-keymap.defsrc
engine
g
readme.mdgeorgi/keymaps/dennytom
gergo/keymaps
gh60
revc
satan
gingham
gray_studio
handwired
aek64
aplx2
bdn9_ble
bluepill/bluepill70
ck4x4
d48
dactyl_manuform/5x6/keymaps/333fred
ddg_56
fc200rt_qmk
floorboard
fruity60
hnah40
jotpad16
jtallbean/split_65
k8split
mechboards_micropad
ms_sculpt_mobile/keymaps/milestogo
novem
obuwunkunubi/spaget
onekey
blackpill_f401
blackpill_f411
bluepill
elite_c
keymaps
adc
default_json
eep_rst
i2c_scanner
promicro
proton_c
pytest/templates
stm32f0_disco
teensy_2
teensy_2pp
p1800fl
prime_exl
sick68
slash
twadlee/tp69
chconf.hconfig.hhalconf.hinfo.json
keymaps/default
mcuconf.hreadme.mdrules.mktp69.ctp69.htwadlee-tp69-kle.jsonvideowriter
xealousbrown
helix
local_drivers
pico
rev1
rev2
hhkb
ansi
ansi.cansi.hconfig.hhhkb_avr.hinfo.jsonmatrix.creadme.mdrules.mk
hhkb.ckeymaps
blakedietz
brett
cinaeco
dbroqua
default
eric
krusli
lxol
mjt
schaeferdev
shela
smt
tobiasvl_iso
tominabox1
via
xyverz
jp
config.hhhkb_avr.hinfo.jsonjp.cjp.hmatrix.creadme.mdrules.mk
keymaps
bakingpy
default
default_mac
dhertz
enoch_jp
halfqwerty_jp
rdg_jp
sh_jp
via
keymaps/dbroqua
hineybush
hs60
id80
idb/idb_60
infinity60/keymaps/jpetermans
j80
jae/j01
jc65/v32a
jd45/keymaps
jisplit89
jj40
jj4x4
jj50
jm60
just60
kbdclack/kaishi65
kbdfans
kbd67
hotswap
mkii_soldered
mkiirgb/v2
rev1
rev2
kbd6x
kbd8x_mk2
kbdpad/mk1
maja
kc60
keebio
bdn9
bfo9000/keymaps/abstractkb
choconum
chocopad
dilly
ergodicity
iris
keymaps
333fred
default
dvorak
fsck
khitsule
pvinis
via
rev1
rev1_led
rev2
rev3
rev4
levinson
nyquist
keymaps
danielhklein
georgepetri
georgepetri3
rev2
rev3
quefrency
viterbi
keebwerk/nano_slider
keyboardio
model01
config.hinfo.json
readme.mdkeymaps
leds.cleds.hmatrix.cmodel01.cmodel01.hreadme.mdrules.mkwire-protocol-constants.hkeycapsss
kinesis/keymaps
kingly_keys/romac_plus/keymaps/via
kira80
kudox
kudox_game
kv/revt
kyria/keymaps
asapjockey
default
drashna
plattfot
thomasbaart
latinpad
lattice60
launchpad
le_chiffre
leeku/finger65
lets_split/keymaps
lfkeyboards
lily58
config.hi2c.ci2c.h
keymaps
bcat
chuan
default
yuchi
lib
lily58.crev1
rules.mkserial_config.hssd1306.cssd1306.hm0lly
maartenwut
mx5160
plain60
ta65
wasdat
wasdat_code
wonderland
massdrop/ctrl
maxr1998
phoebe
pulse4k
mc_76k
mechlovin
adelais
hannah60rgb
pisces
mechmini/v1
mehkee96
meira/keymaps
meishi/keymaps/default
melody96
meson
miller/gm862
minidox/keymaps
mint60
montsinger/rebound
mountainblocks/mb17
mt40
murcielago
naked60/keymaps/333fred
navi10/rev3
nightmare
niu_mini
nk65
nomu30/keymaps
oddball
ok60
omnikey_bh
omnikey_blackheart
pabile
p18
p20
p40
palette1202
panc60
pancake
pdxkbc
pearl
percent
pimentoso/paddino02
plaid
planck
ez
keymaps
ab
angerthosenear
austin
brandon
chance
charlie
circuit
david
dr_notsokind
dzobert
emilyh
espynn
ishtob
joe
kyle
lucas
matrixman
max
mollat
oeywil
piemod
pvc
sigul
that_canadian
yttyx
zrichard
old_keymap_files
common_keymaps
keymap_brett.ckeymap_dotcom.ckeymap_jack.ckeymap_joe.ckeymap_matthew.ckeymap_nathan.ckeymap_paul.ckeymap_peasant.ckeymap_reed.ckeymap_sean.ckeymap_shane.ckeymap_simon.ckeymap_tim.ckeymap_wilba.c
keymap_common.hrev6
preonic
keymaps
AlexDaigre
elisiano
pvillano
that_canadian
rev1
rev2
rev3
primekb/prime_e
projectkb/alice
quad_h/lb75
retro_75
reversestudio/decadepad
reviung39/keymaps/toshi0383
rgbkb
scarletbandana
sck/neiso
sentraq
s60_x/keymaps
ansi_qwertz
hasu
jpec
poker
poker_bit
poker_set
spacefn
s65_x/keymaps
shambles
signum/3_0/elitec/keymaps/default
silverbullet44
singa
sirius/uni660
sofle
spaceman
2_milk
2_milk.c2_milk.hconfig.hinfo.jsonreadme.mdrules.mk
keymaps
binary
copypasta
default
emoji
excessbread
mikethetiger
mouse
pancake
splitish
splitreus62
staryu
subatomic
switchplate
southpaw_65
southpaw_fullsize
tada68
tartan
tenki
tg4x
tgr
910
910ce
alice
jane
tris
the_royal
thevankeyboards
minivan
roadkit/keymaps/mjt
tkc1800
tokyo60
treadstone32
treadstone48
underscore33
unikorn
uranuma
vinta
vision_division
vitamins_included
wallaby
walletburner/neuron
westfoxtrot/cypher/rev5
wete
wheatfield
blocked65
split75
whitefox/keymaps/konstantin
wilba_tech
winkeyless
wolfmarkclub/wm1
bootloader_defs.hchconf.hconfig.hhalconf.hinfo.json
keymaps/default
ld
mcuconf.hreadme.mdrules.mkwm1.cwm1.hwsk
xd002
xd60
keymaps
rev2
rev3
xd68
xd75
config.h
keymaps
xd87
xelus/snap96
xiaomi/mk02
yd60mq
ymd75
ymd96
ymdk
bface
ymd09
ymdk_np21
yosino58
yurei
yushakobo/quick7
z150_bh
zinc
config.hi2c.ci2c.hreadme.md
keymaps
default
ginjake
monks
toshi0383
rev1
config.hmatrix.crev1.crev1.hrules.mkserial_config.hserial_config_simpleapi.hsplit_scomm.csplit_scomm.hsplit_util.csplit_util.h
reva
config.hmatrix.creva.creva.hrules.mkserial_config.hserial_config_simpleapi.hsplit_scomm.csplit_scomm.hsplit_util.csplit_util.h
rules.mkserial.cserial.hzinc.hzvecr/split_blackpill
layouts
community
60_ansi_split_bs_rshift/bcat
60_iso/unxmaal
60_tsangan_hhkb
65_ansi/mechmerlin
65_ansi_blocker_split_bs/bcat
75_ansi/spidey3
ergodox
333fred
algernon
colemak_osx_pc_no
drashna
guni
j3rn
kastyle
mpiechotka
norwegian_programmer_osx_pc
norwegian_programmer_osx_pc_colemak
townk_osx
xyverz
ortho_4x12
ortho_4x4/jotix
ortho_5x12/333fred
default
65_ansi_blocker_split_bs
65_ansi_blocker_tsangan
lib
printf
message.mkpython
kle2xy.pymilc.py
vusbqmk
quantum
audio
backlight
config_common.hdebounce
dip_switch.ckeymap_common.ckeymap_extras
keymap_belgian.hkeymap_bepo.hkeymap_canadian_multilingual.hkeymap_croatian.hkeymap_czech.hkeymap_dvp.hkeymap_estonian.hkeymap_finnish.hkeymap_fr_ch.hkeymap_french_osx.hkeymap_german_ch.hkeymap_german_osx.hkeymap_greek.hkeymap_icelandic.hkeymap_irish.hkeymap_italian.hkeymap_italian_osx_ansi.hkeymap_italian_osx_iso.hkeymap_jp.hkeymap_korean.hkeymap_latvian.hkeymap_lithuanian_azerty.hkeymap_lithuanian_qwerty.hkeymap_neo2.hkeymap_polish.hkeymap_portuguese.hkeymap_romanian.hkeymap_russian.hkeymap_serbian.hkeymap_serbian_latin.hkeymap_slovak.hkeymap_slovenian.hkeymap_spanish_dvorak.hkeymap_swedish.hkeymap_uk.hkeymap_us_international.hkeymap_workman_zxcvm.hsendstring_bepo.hsendstring_canadian_multilingual.hsendstring_croatian.hsendstring_czech.hsendstring_danish.hsendstring_dvp.hsendstring_estonian.hsendstring_finnish.hsendstring_fr_ch.hsendstring_french.hsendstring_french_osx.hsendstring_german_ch.hsendstring_german_osx.hsendstring_icelandic.hsendstring_italian_osx_ansi.hsendstring_italian_osx_iso.hsendstring_jis.hsendstring_latvian.hsendstring_lithuanian_azerty.hsendstring_lithuanian_qwerty.hsendstring_portuguese.hsendstring_romanian.hsendstring_serbian_latin.hsendstring_slovak.hsendstring_spanish.hsendstring_spanish_dvorak.hsendstring_turkish_f.hsendstring_turkish_q.hsendstring_workman_zxcvm.h
matrix.cmcu_selection.mkpincontrol.hprocess_keycode
quantum.cquantum.hquantum_keycodes.hrgb_matrix.crgb_matrix.hrgb_matrix_animations
rgb_matrix_runners
rgb_matrix_types.hrgblight.crgblight.hrgblight_modes.hsend_string_keycodes.hsplit_common
stm32
template
via.cvia.hwpm.cwpm.htmk_core
avr.mkchibios.mkcommon.mkring_buffer.hrules.mk
common
action.caction.haction_code.haction_layer.caction_layer.haction_tapping.caction_tapping.haction_util.caction_util.h
avr
bootmagic_lite.cchibios
command.ckeyboard.ckeycode.hprint.hprogmem.hreport.hsendchar_null.ctimer.hutil.cprotocol
arm_atsam
bluefruit.mkbluefruit
chibios
ibm4704.ciwrap.mkiwrap
lufa.mklufa
ps2_mouse.cusb_descriptor.cusb_descriptor_common.hvusb.mkvusb
main.csendchar_usart.cusbconfig.h
usbdrv
Changelog.txtCommercialLicense.txtLicense.txtReadme.txtUSB-ID-FAQ.txtUSB-IDs-for-free.txtasmcommon.incoddebug.coddebug.husbconfig-prototype.husbdrv.cusbdrv.husbdrvasm.Susbdrvasm.asmusbdrvasm12.incusbdrvasm128.incusbdrvasm15.incusbdrvasm16.incusbdrvasm165.incusbdrvasm18-crc.incusbdrvasm20.incusbportability.h
vusb.cvusb.husers
333fred
alfrdmalr
anderson
art
bcat
dennytom/chording_engine
README.mdchord.pyengine.part.1engine.part.2engine.part.3keymap_def.schema.jsonparser.pystate_machine.dotstate_machine.svg
tests
drashna
config.hdrashna.cdrashna.holed_stuff.coled_stuff.hprocess_records.cprocess_records.hrgb_matrix_stuff.crgb_matrix_stuff.hrgb_stuff.crgb_stuff.hrules.mk
ericgebhart
konstantin
kuchosauronad0
miles2go
babblePaste.cbabblePaste.hbabblePaste.mdbabl_chromeos.cbabl_emacs.cbabl_linux.cbabl_mac.cbabl_readmux.cbabl_vi.cbabl_windows.cconfig.h
keymaps/handwired/ms_sculpt_mobile
milestogo.cmilestogo.hreadme.mdrules.mkmtdjr
ninjonas
pvinis
ridingqwerty
rossman360
scheiklp
sigul
spidey3
stanrc85
tominabox1
vosechu
xulkal
yanfali
yanfali_wklutil
1-setup-path-win.bat2-setup-environment-win.batELEVATE_LICENSE.mdWin_Check.batactivate_msys2.shactivate_wsl.shadd-paths.batbootloader_at90usb128_1.0.1.hexbootloader_at90usb64_1.0.0.hexbootloader_atmega16u4_1.0.1.hexbootloader_atmega32a_1_0_0.hexbootloader_atmega32u4_1.0.0.hexbootloader_ps2avrgb_bootloadhid_1.0.1.hexelevate.exefreebsd_install.shlinux_install.shmacos_install.shmsys2_install.shwin_shared_install.shwsl_install.sh
@ -1,24 +0,0 @@
|
||||
|
||||
-I.
|
||||
-I./drivers
|
||||
-I./drivers/avr
|
||||
-I./keyboards/ergodox_ez
|
||||
-I./keyboards/ergodox_ez/keymaps/vim
|
||||
-I./lib
|
||||
-I./lib/lufa
|
||||
-I./quantum
|
||||
-I./quantum/api
|
||||
-I./quantum/audio
|
||||
-I./quantum/keymap_extras
|
||||
-I./quantum/process_keycode
|
||||
-I./quantum/serial_link
|
||||
-I./quantum/template
|
||||
-I./quantum/tools
|
||||
-I./quantum/visualizer
|
||||
-I./tmk_core
|
||||
-I./tmk_core/common
|
||||
-I./tmk_core/common/debug.h
|
||||
-I./tmk_core/protocol
|
||||
-I./tmk_core/protocol/lufa
|
||||
-I./util
|
||||
-DQMK_KEYBOARD=\"$(KEYBOARD)\" -DQMK_KEYMAP=\"$(KEYMAP)\"
|
2
.github/workflows/cli.yml
vendored
2
.github/workflows/cli.yml
vendored
@ -19,7 +19,7 @@ jobs:
|
||||
container: qmkfm/base_container
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v1
|
||||
- uses: actions/checkout@v2
|
||||
with:
|
||||
submodules: recursive
|
||||
- name: Install dependencies
|
||||
|
2
.gitignore
vendored
2
.gitignore
vendored
@ -24,6 +24,7 @@ quantum/version.h
|
||||
.idea/
|
||||
CMakeLists.txt
|
||||
cmake-build-debug
|
||||
.clang_complete
|
||||
doxygen/
|
||||
.DS_Store
|
||||
/util/wsl_downloaded
|
||||
@ -47,7 +48,6 @@ doxygen/
|
||||
*.iml
|
||||
.browse.VC.db*
|
||||
*.stackdump
|
||||
util/Win_Check_Output.txt
|
||||
# Let these ones be user specific, since we have so many different configurations
|
||||
.vscode/c_cpp_properties.json
|
||||
.vscode/launch.json
|
||||
|
8
.gitmodules
vendored
8
.gitmodules
vendored
@ -12,7 +12,13 @@
|
||||
branch = master
|
||||
[submodule "lib/googletest"]
|
||||
path = lib/googletest
|
||||
url = https://github.com/google/googletest
|
||||
url = https://github.com/qmk/googletest
|
||||
[submodule "lib/lufa"]
|
||||
path = lib/lufa
|
||||
url = https://github.com/qmk/lufa
|
||||
[submodule "lib/vusb"]
|
||||
path = lib/vusb
|
||||
url = https://github.com/qmk/v-usb
|
||||
[submodule "lib/printf"]
|
||||
path = lib/printf
|
||||
url = https://github.com/qmk/printf
|
||||
|
19
.vscode/settings.json
vendored
19
.vscode/settings.json
vendored
@ -9,12 +9,17 @@
|
||||
"**/*.bin": true
|
||||
},
|
||||
"files.associations": {
|
||||
"*.h": "c",
|
||||
"*.c": "c",
|
||||
"*.cpp": "cpp",
|
||||
"*.hpp": "cpp",
|
||||
"xstddef": "c",
|
||||
"type_traits": "c",
|
||||
"utility": "c"
|
||||
"*.h": "c",
|
||||
"*.c": "c",
|
||||
"*.inc": "c",
|
||||
"*.cpp": "cpp",
|
||||
"*.hpp": "cpp",
|
||||
"xstddef": "c",
|
||||
"type_traits": "c",
|
||||
"utility": "c"
|
||||
},
|
||||
"[markdown]": {
|
||||
"editor.trimAutoWhitespace": false,
|
||||
"files.trimTrailingWhitespace": false
|
||||
}
|
||||
}
|
||||
|
13
Makefile
13
Makefile
@ -29,6 +29,9 @@ $(info QMK Firmware $(QMK_VERSION))
|
||||
endif
|
||||
endif
|
||||
|
||||
# avoid 'Entering|Leaving directory' messages
|
||||
MAKEFLAGS += --no-print-directory
|
||||
|
||||
ON_ERROR := error_occurred=1
|
||||
|
||||
BREAK_ON_ERRORS = no
|
||||
@ -291,8 +294,8 @@ define PARSE_RULE
|
||||
$$(info | QMK's make format recently changed to use folder locations and colons:)
|
||||
$$(info | make project_folder:keymap[:target])
|
||||
$$(info | Examples:)
|
||||
$$(info | make planck/rev4:default:dfu)
|
||||
$$(info | make planck:default)
|
||||
$$(info | make dz60:default)
|
||||
$$(info | make planck/rev6:default:flash)
|
||||
$$(info |)
|
||||
endif
|
||||
endef
|
||||
@ -559,14 +562,16 @@ endef
|
||||
%:
|
||||
# Check if we have the CMP tool installed
|
||||
cmp $(ROOT_DIR)/Makefile $(ROOT_DIR)/Makefile >/dev/null 2>&1; if [ $$? -gt 0 ]; then printf "$(MSG_NO_CMP)"; exit 1; fi;
|
||||
# Ensure that python3 is installed. This check can be removed after python is used in more places.
|
||||
if ! python3 --version 1> /dev/null 2>&1; then printf "$(MSG_PYTHON_MISSING)"; fi
|
||||
# Ensure that bin/qmk works. This will be a failing check after the next develop merge on 2020 Aug 29.
|
||||
if ! bin/qmk hello 1> /dev/null 2>&1; then printf "$(MSG_PYTHON_MISSING)"; fi
|
||||
# Check if the submodules are dirty, and display a warning if they are
|
||||
ifndef SKIP_GIT
|
||||
if [ ! -e lib/chibios ]; then git submodule sync lib/chibios && git submodule update --depth 50 --init lib/chibios; fi
|
||||
if [ ! -e lib/chibios-contrib ]; then git submodule sync lib/chibios-contrib && git submodule update --depth 50 --init lib/chibios-contrib; fi
|
||||
if [ ! -e lib/ugfx ]; then git submodule sync lib/ugfx && git submodule update --depth 50 --init lib/ugfx; fi
|
||||
if [ ! -e lib/lufa ]; then git submodule sync lib/lufa && git submodule update --depth 50 --init lib/lufa; fi
|
||||
if [ ! -e lib/vusb ]; then git submodule sync lib/vusb && git submodule update --depth 50 --init lib/vusb; fi
|
||||
if [ ! -e lib/printf ]; then git submodule sync lib/printf && git submodule update --depth 50 --init lib/printf; fi
|
||||
git submodule status --recursive 2>/dev/null | \
|
||||
while IFS= read -r x; do \
|
||||
case "$$x" in \
|
||||
|
2
Vagrantfile
vendored
2
Vagrantfile
vendored
@ -89,7 +89,7 @@ Vagrant.configure(2) do |config|
|
||||
|
||||
Examples:
|
||||
make planck/rev4:default:dfu
|
||||
make planck:default
|
||||
make planck/rev4:default
|
||||
|
||||
EOT
|
||||
end
|
||||
|
File diff suppressed because one or more lines are too long
67
bin/qmk
67
bin/qmk
@ -2,52 +2,61 @@
|
||||
"""CLI wrapper for running QMK commands.
|
||||
"""
|
||||
import os
|
||||
import subprocess
|
||||
import sys
|
||||
from importlib.util import find_spec
|
||||
from time import strftime
|
||||
from pathlib import Path
|
||||
|
||||
# Add the QMK python libs to our path
|
||||
script_dir = os.path.dirname(os.path.realpath(__file__))
|
||||
qmk_dir = os.path.abspath(os.path.join(script_dir, '..'))
|
||||
python_lib_dir = os.path.abspath(os.path.join(qmk_dir, 'lib', 'python'))
|
||||
sys.path.append(python_lib_dir)
|
||||
script_dir = Path(os.path.realpath(__file__)).parent
|
||||
qmk_dir = script_dir.parent
|
||||
python_lib_dir = Path(qmk_dir / 'lib' / 'python').resolve()
|
||||
sys.path.append(str(python_lib_dir))
|
||||
|
||||
# Make sure our modules have been setup
|
||||
with open(os.path.join(qmk_dir, 'requirements.txt'), 'r') as fd:
|
||||
for line in fd.readlines():
|
||||
line = line.strip().replace('<', '=').replace('>', '=')
|
||||
|
||||
if line[0] == '#':
|
||||
continue
|
||||
def _check_modules(requirements):
|
||||
""" Check if the modules in the given requirements.txt are available.
|
||||
"""
|
||||
with Path(qmk_dir / requirements).open() as fd:
|
||||
for line in fd.readlines():
|
||||
line = line.strip().replace('<', '=').replace('>', '=')
|
||||
|
||||
if '#' in line:
|
||||
line = line.split('#')[0]
|
||||
if len(line) == 0 or line[0] == '#' or line.startswith('-r'):
|
||||
continue
|
||||
|
||||
module = line.split('=')[0] if '=' in line else line
|
||||
if '#' in line:
|
||||
line = line.split('#')[0]
|
||||
|
||||
module = dict()
|
||||
module['name'] = module['import'] = line.split('=')[0] if '=' in line else line
|
||||
|
||||
if module in ['pep8-naming']:
|
||||
# Not every module is importable by its own name.
|
||||
continue
|
||||
if module['name'] == "pep8-naming":
|
||||
module['import'] = "pep8ext_naming"
|
||||
|
||||
if not find_spec(module):
|
||||
print('Could not find module %s!' % module)
|
||||
print('Please run `pip3 install -r requirements.txt` to install the python dependencies.')
|
||||
exit(255)
|
||||
if not find_spec(module['import']):
|
||||
print('Could not find module %s!' % module['name'])
|
||||
print('Please run `python3 -m pip install -r %s` to install required python dependencies.' % (qmk_dir / requirements,))
|
||||
if developer:
|
||||
print('You can also turn off developer mode: qmk config user.developer=None')
|
||||
print()
|
||||
exit(255)
|
||||
|
||||
# Figure out our version
|
||||
# TODO(skullydazed/anyone): Find a method that doesn't involve git. This is slow in docker and on windows.
|
||||
command = ['git', 'describe', '--abbrev=6', '--dirty', '--always', '--tags']
|
||||
result = subprocess.run(command, universal_newlines=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
|
||||
|
||||
if result.returncode == 0:
|
||||
os.environ['QMK_VERSION'] = result.stdout.strip()
|
||||
else:
|
||||
os.environ['QMK_VERSION'] = 'nogit-' + strftime('%Y-%m-%d-%H:%M:%S') + '-dirty'
|
||||
developer = False
|
||||
# Make sure our modules have been setup
|
||||
_check_modules('requirements.txt')
|
||||
|
||||
# Setup the CLI
|
||||
import milc # noqa
|
||||
|
||||
# For developers additional modules are needed
|
||||
if milc.cli.config.user.developer:
|
||||
# Do not run the check for 'config',
|
||||
# so users can turn off developer mode
|
||||
if len(sys.argv) == 1 or (len(sys.argv) > 1 and 'config' != sys.argv[1]):
|
||||
developer = True
|
||||
_check_modules('requirements-dev.txt')
|
||||
|
||||
milc.EMOJI_LOGLEVELS['INFO'] = '{fg_blue}Ψ{style_reset_all}'
|
||||
|
||||
|
||||
|
@ -21,6 +21,11 @@ else ifneq ("$(wildcard $(MAIN_KEYMAP_PATH_1)/keymap.json)","")
|
||||
KEYMAP_PATH := $(MAIN_KEYMAP_PATH_1)
|
||||
endif
|
||||
|
||||
# Load the keymap-level rules.mk if exists
|
||||
ifneq ("$(wildcard $(KEYMAP_PATH))", "")
|
||||
-include $(KEYMAP_PATH)/rules.mk
|
||||
endif
|
||||
|
||||
# Generate the keymap.c
|
||||
$(KEYBOARD_OUTPUT)/src/keymap.c: $(KEYMAP_JSON)
|
||||
bin/qmk json2c --quiet --output $(KEYMAP_C) $(KEYMAP_JSON)
|
||||
|
@ -231,44 +231,19 @@ endif
|
||||
# We can assume a ChibiOS target When MCU_FAMILY is defined since it's
|
||||
# not used for LUFA
|
||||
ifdef MCU_FAMILY
|
||||
FIRMWARE_FORMAT?=bin
|
||||
PLATFORM=CHIBIOS
|
||||
PLATFORM_KEY=chibios
|
||||
FIRMWARE_FORMAT?=bin
|
||||
else ifdef ARM_ATSAM
|
||||
PLATFORM=ARM_ATSAM
|
||||
PLATFORM_KEY=arm_atsam
|
||||
FIRMWARE_FORMAT=bin
|
||||
else
|
||||
PLATFORM=AVR
|
||||
PLATFORM_KEY=avr
|
||||
FIRMWARE_FORMAT?=hex
|
||||
endif
|
||||
|
||||
ifeq ($(PLATFORM),CHIBIOS)
|
||||
include $(TMK_PATH)/chibios.mk
|
||||
OPT_OS = chibios
|
||||
ifneq ("$(wildcard $(KEYBOARD_PATH_5)/bootloader_defs.h)","")
|
||||
OPT_DEFS += -include $(KEYBOARD_PATH_5)/bootloader_defs.h
|
||||
else ifneq ("$(wildcard $(KEYBOARD_PATH_5)/boards/$(BOARD)/bootloader_defs.h)","")
|
||||
OPT_DEFS += -include $(KEYBOARD_PATH_5)/boards/$(BOARD)/bootloader_defs.h
|
||||
else ifneq ("$(wildcard $(KEYBOARD_PATH_4)/bootloader_defs.h)","")
|
||||
OPT_DEFS += -include $(KEYBOARD_PATH_4)/bootloader_defs.h
|
||||
else ifneq ("$(wildcard $(KEYBOARD_PATH_4)/boards/$(BOARD)/bootloader_defs.h)","")
|
||||
OPT_DEFS += -include $(KEYBOARD_PATH_4)/boards/$(BOARD)/bootloader_defs.h
|
||||
else ifneq ("$(wildcard $(KEYBOARD_PATH_3)/bootloader_defs.h)","")
|
||||
OPT_DEFS += -include $(KEYBOARD_PATH_3)/bootloader_defs.h
|
||||
else ifneq ("$(wildcard $(KEYBOARD_PATH_3)/boards/$(BOARD)/bootloader_defs.h)","")
|
||||
OPT_DEFS += -include $(KEYBOARD_PATH_3)/boards/$(BOARD)/bootloader_defs.h
|
||||
else ifneq ("$(wildcard $(KEYBOARD_PATH_2)/bootloader_defs.h)","")
|
||||
OPT_DEFS += -include $(KEYBOARD_PATH_2)/bootloader_defs.h
|
||||
else ifneq ("$(wildcard $(KEYBOARD_PATH_2)/boards/$(BOARD)/bootloader_defs.h)","")
|
||||
OPT_DEFS += -include $(KEYBOARD_PATH_2)/boards/$(BOARD)/bootloader_defs.h
|
||||
else ifneq ("$(wildcard $(KEYBOARD_PATH_1)/bootloader_defs.h)","")
|
||||
OPT_DEFS += -include $(KEYBOARD_PATH_1)/bootloader_defs.h
|
||||
else ifneq ("$(wildcard $(KEYBOARD_PATH_1)/boards/$(BOARD)/bootloader_defs.h)","")
|
||||
OPT_DEFS += -include $(KEYBOARD_PATH_1)/boards/$(BOARD)/bootloader_defs.h
|
||||
else ifneq ("$(wildcard $(TOP_DIR)/drivers/boards/$(BOARD)/bootloader_defs.h)","")
|
||||
OPT_DEFS += -include $(TOP_DIR)/drivers/boards/$(BOARD)/bootloader_defs.h
|
||||
endif
|
||||
endif
|
||||
|
||||
# Find all of the config.h files and add them to our CONFIG_H define.
|
||||
CONFIG_H :=
|
||||
ifneq ("$(wildcard $(KEYBOARD_PATH_5)/config.h)","")
|
||||
@ -304,11 +279,6 @@ ifneq ("$(wildcard $(KEYBOARD_PATH_5)/post_config.h)","")
|
||||
POST_CONFIG_H += $(KEYBOARD_PATH_5)/post_config.h
|
||||
endif
|
||||
|
||||
# Save the defines and includes here, so we don't include any keymap specific ones
|
||||
PROJECT_DEFS := $(OPT_DEFS)
|
||||
PROJECT_INC := $(VPATH) $(EXTRAINCDIRS) $(KEYBOARD_PATHS)
|
||||
PROJECT_CONFIG := $(CONFIG_H)
|
||||
|
||||
# Userspace setup and definitions
|
||||
ifeq ("$(USER_NAME)","")
|
||||
USER_NAME := $(KEYMAP)
|
||||
@ -354,23 +324,17 @@ SRC += $(TMK_COMMON_SRC)
|
||||
OPT_DEFS += $(TMK_COMMON_DEFS)
|
||||
EXTRALDFLAGS += $(TMK_COMMON_LDFLAGS)
|
||||
|
||||
ifeq ($(PLATFORM),AVR)
|
||||
ifeq ($(strip $(PROTOCOL)), VUSB)
|
||||
include $(TMK_PATH)/protocol/vusb.mk
|
||||
include $(TMK_PATH)/$(PLATFORM_KEY).mk
|
||||
ifneq ($(strip $(PROTOCOL)),)
|
||||
include $(TMK_PATH)/protocol/$(strip $(shell echo $(PROTOCOL) | tr '[:upper:]' '[:lower:]')).mk
|
||||
else
|
||||
include $(TMK_PATH)/protocol/lufa.mk
|
||||
endif
|
||||
include $(TMK_PATH)/avr.mk
|
||||
include $(TMK_PATH)/protocol/$(PLATFORM_KEY).mk
|
||||
endif
|
||||
|
||||
ifeq ($(PLATFORM),ARM_ATSAM)
|
||||
include $(TMK_PATH)/arm_atsam.mk
|
||||
include $(TMK_PATH)/protocol/arm_atsam.mk
|
||||
endif
|
||||
|
||||
ifeq ($(PLATFORM),CHIBIOS)
|
||||
include $(TMK_PATH)/protocol/chibios.mk
|
||||
endif
|
||||
# TODO: remove this bodge?
|
||||
PROJECT_DEFS := $(OPT_DEFS)
|
||||
PROJECT_INC := $(VPATH) $(EXTRAINCDIRS) $(KEYBOARD_PATHS)
|
||||
PROJECT_CONFIG := $(CONFIG_H)
|
||||
|
||||
ifeq ($(strip $(VISUALIZER_ENABLE)), yes)
|
||||
VISUALIZER_DIR = $(QUANTUM_DIR)/visualizer
|
||||
|
@ -41,6 +41,7 @@ all: elf
|
||||
|
||||
VPATH += $(COMMON_VPATH)
|
||||
PLATFORM:=TEST
|
||||
PLATFORM_KEY:=test
|
||||
|
||||
ifneq ($(filter $(FULL_TESTS),$(TEST)),)
|
||||
include tests/$(TEST)/rules.mk
|
||||
|
File diff suppressed because it is too large
Load Diff
239
docs/ChangeLog/20200530.md
Normal file
239
docs/ChangeLog/20200530.md
Normal file
@ -0,0 +1,239 @@
|
||||
# QMK Breaking Change - 2020 May 30 Changelog
|
||||
|
||||
Four times a year QMK runs a process for merging Breaking Changes. A Breaking Change is any change which modifies how QMK behaves in a way that is incompatible or potentially dangerous. We limit these changes to 4 times per year so that users can have confidence that updating their QMK tree will not break their keymaps.
|
||||
|
||||
The list of changes follows.
|
||||
|
||||
|
||||
## Core Changes
|
||||
|
||||
### Converting V-USB usbdrv to a submodule
|
||||
|
||||
[#8321](https://github.com/qmk/qmk_firmware/pull/8321) and [qmk_compiler#62](https://github.com/qmk/qmk_compiler/pull/62).
|
||||
|
||||
These PRs move the V-USB driver code out of the qmk_firmware repository and into a submodule pointed at https://github.com/obdev/v-usb. This will make it easier to update the codebase if needed, while applying any potential QMK-specific modifications by forking it to the QMK GitHub organization.
|
||||
|
||||
### Unify Tap Hold functions and documentation
|
||||
|
||||
[#8348](https://github.com/qmk/qmk_firmware/pull/8348)
|
||||
|
||||
Updates all of the per key tap-hold functions to pass the `keyrecord_t` structure, and include documentation changes.
|
||||
|
||||
Any remaining versions or code outside of the main repo will need to be converted:
|
||||
| Old function | New Function |
|
||||
|------------------------------------------------------|---------------------------------------------------------------------------|
|
||||
|`uint16_t get_tapping_term(uint16_t keycode)` |`uint16_t get_tapping_term(uint16_t keycode, keyrecord_t *record)` |
|
||||
|`bool get_ignore_mod_tap_interrupt(uint16_t keycode)` |`bool get_ignore_mod_tap_interrupt(uint16_t keycode, keyrecord_t *record)` |
|
||||
|
||||
### Python Required In The Build Process
|
||||
|
||||
[#9000](https://github.com/qmk/qmk_firmware/pull/9000)
|
||||
|
||||
This is the last release of QMK that will work without having Python 3.6 (or later) installed. If your environment is not fully setup you will get a warning instructing you to set it up.
|
||||
|
||||
After the next breaking change you will not be able to build if `bin/qmk hello` does not work.
|
||||
|
||||
### Upgrade from tinyprintf to mpaland/printf
|
||||
|
||||
[#8269](https://github.com/qmk/qmk_firmware/pull/8269)
|
||||
|
||||
- Provides debug functionality on ChibiOS/ARM that is more compliant than previous integrations.
|
||||
- Less maintenence, fewer QMK customisations, and allows QMK to sidestep previous compile and runtime issues.
|
||||
- A `make git-submodule` may be required after pulling the latest QMK Firmware code to update to the new dependency.
|
||||
|
||||
### Fixed RGB_DISABLE_AFTER_TIMEOUT to be seconds based & small internals cleanup
|
||||
|
||||
[#6480](https://github.com/qmk/qmk_firmware/pull/6480)
|
||||
|
||||
- Changes `RGB_DISABLE_AFTER_TIMEOUT` to be based on milliseconds instead of ticks.
|
||||
- Includes a code cleanup, resulting in a savings of 100 bytes, depending on features used.
|
||||
- Fixed issues with timeouts / suspending at the wrong time not turning off all LEDs in some cases.
|
||||
|
||||
The `RGB_DISABLE_AFTER_TIMEOUT` definition is now deprecated, and has been superseded by `RGB_DISABLE_TIMEOUT`. To use the new definition, rename `RGB_DISABLE_AFTER_TIMEOUT` to `RGB_DISABLE_TIMEOUT` in your `config.h` file, and multiply the value set by 1200.
|
||||
|
||||
Before: `#define RGB_DISABLE_AFTER_TIMEOUT 100`
|
||||
After: `#define RGB_DISABLE_TIMEOUT 120000`
|
||||
|
||||
### Switch to qmk forks for everything
|
||||
|
||||
[#9019](https://github.com/qmk/qmk_firmware/pull/9019)
|
||||
|
||||
Fork all QMK submodules to protect against upstream repositories disappearing.
|
||||
|
||||
### code cleanup regarding deprecated macro PLAY_NOTE_ARRAY by replacing it with PLAY_SONG
|
||||
|
||||
[#8484](https://github.com/qmk/qmk_firmware/pull/8484)
|
||||
|
||||
Removes the deprecated `PLAY_NOTE_ARRAY` macro. References to it are replaced with `PLAY_SONG`, which references the same function.
|
||||
|
||||
### fixing wrong configuration of AUDIO feature
|
||||
|
||||
[#8903](https://github.com/qmk/qmk_firmware/pull/8903) and [#8974](https://github.com/qmk/qmk_firmware/pull/8974)
|
||||
|
||||
`audio_avr.c` does not default to any pin; there has to be a #define XX_AUDIO in config.h at some level for Audio to actually work. Otherwise, the Audio code ends up cluttering the firmware, possibly breaking builds because the maximum allowed firmware size is exceeded.
|
||||
|
||||
These changes fix this by disabling Audio on keyboards that have the feature misconfigured, and therefore non-functional.
|
||||
|
||||
Also, add a compile-time error to alert the user to a missing pin-configuration (on AVR boards) when `AUDIO_ENABLE = yes` is set.
|
||||
|
||||
|
||||
## Keyboard Refactors
|
||||
|
||||
### Migrating Lily58 to use split_common
|
||||
|
||||
[#6260](https://github.com/qmk/qmk_firmware/pull/6260)
|
||||
|
||||
Modifies the default firmware for Lily58 to use the `split_common` library, instead of including and depending on its own set of libraries for the following functionality:
|
||||
|
||||
- SSD1306 display
|
||||
- i2c for OLED
|
||||
- Serial Communication
|
||||
|
||||
This allows current lily58 firmware to advance with updates to the `split_common` library, which is shared with many other split keyboards.
|
||||
|
||||
#### To migrate existing Lily58 firmware:
|
||||
|
||||
[Changes to `config.h`](https://github.com/qmk/qmk_firmware/pull/6260/files#diff-445ac369c8717dcd6fc6fc3630836fc1):
|
||||
- Remove `#define SSD1306OLED` from config.h
|
||||
|
||||
|
||||
[Changes to `keymap.c`](https://github.com/qmk/qmk_firmware/pull/6260/files#diff-20943ea59856e9bdf3d99ecb2eee40b7):
|
||||
- Find/Replace each instance of `#ifdef SSD1306OLED` with `#ifdef OLED_DRIVER_ENABLE`
|
||||
- The following changes are for compatibility with the OLED driver. If you don't use the OLED driver you may safely delete [this section](https://github.com/qmk/qmk_firmware/blob/e6b9980bd45c186f7360df68c24b6e05a80c10dc/keyboards/lily58/keymaps/default/keymap.c#L144-L190)
|
||||
- Alternatively, if you did not change the OLED code from that in `default`, you may find it easier to simply copy the [relevant section](https://github.com/qmk/qmk_firmware/blob/4ac310668501ae6786c711ecc8f01f62ddaa1c0b/keyboards/lily58/keymaps/default/keymap.c#L138-L172). Otherwise, the changes you need to make are as follows (sample change [here](https://github.com/qmk/qmk_firmware/pull/6260/files#diff-20943ea59856e9bdf3d99ecb2eee40b7R138-R173))
|
||||
- [Remove](https://github.com/qmk/qmk_firmware/pull/6260/files#diff-20943ea59856e9bdf3d99ecb2eee40b7L138-L141) the block
|
||||
```c
|
||||
#ifdef SSD1306OLED
|
||||
iota_gfx_init(!has_usb()); // turns on the display
|
||||
#endif
|
||||
```
|
||||
- Within the block bounded by `#ifdef OLED_DRIVER_ENABLE` and `#endif // OLED_DRIVER_ENABLE`, add the following block to ensure that your two OLEDs are rotated correctly across the left and right sides:
|
||||
```c
|
||||
oled_rotation_t oled_init_user(oled_rotation_t rotation) {
|
||||
if (!is_keyboard_master())
|
||||
return OLED_ROTATION_180; // flips the display 180 degrees if offhand
|
||||
return rotation;
|
||||
}
|
||||
```
|
||||
- Remove the functions `matrix_scan_user`, `matrix_update` and `iota_gfx_task_user`
|
||||
- Find/Replace `matrix_render_user(struct CharacterMatrix *matrix)` with `iota_gfx_task_user(void)`
|
||||
- Find/Replace `is_master` with `is_keyboard_master()`
|
||||
- For each instance of `matrix_write_ln(matrix, display_fn())`, rewrite it as `oled_write_ln(read_layer_state(), false);`
|
||||
- For each instance of `matrix_write(matrix, read_logo());`, replace with `oled_write(read_logo(), false);`
|
||||
|
||||
### Refactor zinc to use split_common
|
||||
|
||||
[#7114](https://github.com/qmk/qmk_firmware/pull/7114) and [#9171](https://github.com/qmk/qmk_firmware/pull/9171)
|
||||
|
||||
* Refactor to use split_common and remove split codes under the zinc/revx/
|
||||
* Add - backlight RGB LED and/or underglow RGB LED option
|
||||
* Add - continuous RGB animations feature (between L and R halves)
|
||||
* Fix - keymap files to adapt to changes
|
||||
* all authors of keymaps confirmed this PR
|
||||
* Update - documents and rules.mk
|
||||
|
||||
### Refactor of TKC1800 to use common OLED code
|
||||
|
||||
[#8472](https://github.com/qmk/qmk_firmware/pull/8472)
|
||||
|
||||
Modifies the default firmware for TKC1800 to use the in-built I2C and OLED drivers, instead of including and depending on its own set of libraries for the following functionality:
|
||||
|
||||
- SSD1306 display
|
||||
- i2c for OLED
|
||||
|
||||
This allows current TKC1800 firmware to advance with updates to those drivers, which are shared with other keyboards.
|
||||
|
||||
#### To migrate existing TKC1800 firmware:
|
||||
|
||||
[Changes to `config.h`](https://github.com/qmk/qmk_firmware/pull/8472/files#diff-d10b26e676b4a55cbb00d71955116526):
|
||||
- Remove `#define SSD1306OLED` from config.h
|
||||
|
||||
[Changes to `tkc1800.c`](https://github.com/qmk/qmk_firmware/pull/8472/files#diff-3b35bd30abe89c8110717c6972cd2cc5):
|
||||
- Add the following to avoid debug errors on HID_listen if the screen is not present
|
||||
```c
|
||||
void keyboard_pre_init_kb(void) {
|
||||
setPinInputHigh(D0);
|
||||
setPinInputHigh(D1);
|
||||
|
||||
keyboard_pre_init_user();
|
||||
}
|
||||
```
|
||||
|
||||
[Changes to `keymap.c`](https://github.com/qmk/qmk_firmware/pull/8472/files#diff-05a2a344ce27e4d045fe68520ccd4771):
|
||||
- Find/Replace each instance of `#ifdef SSD1306OLED` with `#ifdef OLED_DRIVER_ENABLE`
|
||||
- The following changes are for compatibility with the OLED driver. If you don't use the OLED driver you may safely delete [this section](https://github.com/qmk/qmk_firmware/blob/e6b9980bd45c186f7360df68c24b6e05a80c10dc/keyboards/lily58/keymaps/default/keymap.c#L144-L190)
|
||||
- [Remove](https://github.com/qmk/qmk_firmware/pull/6260/files#diff-20943ea59856e9bdf3d99ecb2eee40b7L91-L158) the block
|
||||
```c
|
||||
#ifdef SSD1306OLED
|
||||
iota_gfx_init(!has_usb()); // turns on the display
|
||||
#endif
|
||||
```
|
||||
- Within the block bounded by `#ifdef OLED_DRIVER_ENABLE` and `#endif // OLED_DRIVER_ENABLE`, add the following block to ensure that your two OLEDs are rotated correctly across the left and right sides:
|
||||
```c
|
||||
oled_rotation_t oled_init_user(oled_rotation_t rotation) {
|
||||
if (!is_keyboard_master())
|
||||
return OLED_ROTATION_180; // flips the display 180 degrees if offhand
|
||||
return rotation;
|
||||
}
|
||||
```
|
||||
- Remove the function `iota_gfx_task_user`
|
||||
|
||||
### Split HHKB to ANSI and JP layouts and Add VIA support for each
|
||||
|
||||
[#8582](https://github.com/qmk/qmk_firmware/pull/8582)
|
||||
|
||||
- Splits the HHKB codebase into two separate folders `keyboards/hhkb/ansi` and `keyboards/hhkb/jp`.
|
||||
- Adds VIA Configurator support for both versions.
|
||||
|
||||
#### Migrating existing HHKB keymaps
|
||||
|
||||
- Remove any checks for the `HHKB_JP` definition
|
||||
- All checks for this definition have been removed, and each version uses the source that is appropriate to that version.
|
||||
- Move the directory for your keymap into the appropriate `keymaps` directory
|
||||
- `keyboards/hhkb/ansi/keymaps/` for ANSI HHKBs
|
||||
- `keyboards/hhkb/jp/keymaps/` for HHKB JPs
|
||||
- Compile with the new keyboard names
|
||||
- This PR changes the compilation instructions for the HHKB Alternate Controller. To compile firmware for this controller moving forward, use:
|
||||
- `make hhkb/ansi` for ANSI-layout HHKBs
|
||||
- `make hhkb/jp` for HHKB JP keyboards
|
||||
|
||||
|
||||
## Keyboard Moves
|
||||
|
||||
- [#8412](https://github.com/qmk/qmk_firmware/pull/8412 "Changing board names to prevent confusion") by blindassassin111
|
||||
- [#8499](https://github.com/qmk/qmk_firmware/pull/8499 "Move the Keyboardio Model01 to a keyboardio/ subdir") by algernon
|
||||
- [#8830](https://github.com/qmk/qmk_firmware/pull/8830 "Move spaceman keyboards") by Spaceman (formerly known as Rionlion100)
|
||||
- [#8537](https://github.com/qmk/qmk_firmware/pull/8537 "Organizing my keyboards (plaid, tartan, ergoinu)") by hsgw
|
||||
|
||||
Keyboards by Keyboardio, Spaceman, and hsgw move to vendor folders, while PCBs designed by blindassassin111 are renamed.
|
||||
|
||||
Old Name | New Name
|
||||
:----------------- | :-----------------
|
||||
2_milk | spaceman/2_milk
|
||||
at101_blackheart | at101_bh
|
||||
ergoinu | dm9records/ergoinu
|
||||
model01 | keyboardio/model01
|
||||
omnikey_blackheart | omnikey_bh
|
||||
pancake | spaceman/pancake
|
||||
plaid | dm9records/plaid
|
||||
tartan | dm9records/tartan
|
||||
z150_blackheart | z150_bh
|
||||
|
||||
If you own one of these PCBs, please use the new names to compile your firmware moving forward.
|
||||
|
||||
|
||||
## Keycode Migration PRs
|
||||
|
||||
[#8954](https://github.com/qmk/qmk_firmware/pull/8954 "Migrate `ACTION_LAYER_TOGGLE` to `TG()`"), [#8957](https://github.com/qmk/qmk_firmware/pull/8957 "Migrate `ACTION_MODS_ONESHOT` to `OSM()`"), [#8958](https://github.com/qmk/qmk_firmware/pull/8958 "Migrate `ACTION_DEFAULT_LAYER_SET` to `DF()`"), [#8959](https://github.com/qmk/qmk_firmware/pull/8959 "Migrate `ACTION_LAYER_MODS` to `LM()`"), [#8968](https://github.com/qmk/qmk_firmware/pull/8968 "Migrate `ACTION_MODS_TAP_KEY` to `MT()`"), [#8977](https://github.com/qmk/qmk_firmware/pull/8977 "Migrate miscellaneous `fn_actions` entries"), and [#8979](https://github.com/qmk/qmk_firmware/pull/8979 "Migrate `ACTION_MODS_KEY` to chained mod keycodes")
|
||||
|
||||
Authored by fauxpark, these pull requests remove references to deprecated TMK macros that have been superseded by native QMK keycodes.
|
||||
|
||||
Old `fn_actions` action | New QMK keycode
|
||||
:---------------------- | :--------------
|
||||
`ACTION_DEFAULT_LAYER_SET(layer)` | `DF(layer)`
|
||||
`ACTION_LAYER_MODS(layer, mod)` | `LM(layer, mod)`
|
||||
`ACTION_LAYER_ONESHOT(mod)` | `OSL(mod)`
|
||||
`ACTION_LAYER_TOGGLE(layer)` | `TG(layer)`
|
||||
`ACTION_MODS_ONESHOT(mod)` | `OSM(mod)`
|
||||
`ACTION_MODS_TAP_KEY(mod, kc)` | `MT(mod, kc)`
|
||||
`ACTION_MODS_KEY(mod, kc)`<br>e.g. `ACTION_MODS_KEY(MOD_LCTL, KC_0)` | `MOD(kc)`<br>e.g. `LCTL(KC_0)`
|
@ -6,6 +6,7 @@
|
||||
* [Testing and Debugging](newbs_testing_debugging.md)
|
||||
* [Getting Help/Support](support.md)
|
||||
* [Other Resources](newbs_learn_more_resources.md)
|
||||
* [Syllabus](syllabus.md)
|
||||
|
||||
* FAQs
|
||||
* [General FAQ](faq_general.md)
|
||||
@ -33,7 +34,9 @@
|
||||
* [Customizing Functionality](custom_quantum_functions.md)
|
||||
* [Driver Installation with Zadig](driver_installation_zadig.md)
|
||||
* [Keymap Overview](keymap.md)
|
||||
* [Vagrant Guide](getting_started_vagrant.md)
|
||||
* Development Environments
|
||||
* [Docker Guide](getting_started_docker.md)
|
||||
* [Vagrant Guide](getting_started_vagrant.md)
|
||||
* Flashing
|
||||
* [Flashing](flashing.md)
|
||||
* [Flashing ATmega32A (ps2avrgb)](flashing_bootloadhid.md)
|
||||
@ -52,7 +55,8 @@
|
||||
* Simple Keycodes
|
||||
* [Full List](keycodes.md)
|
||||
* [Basic Keycodes](keycodes_basic.md)
|
||||
* [Layer Switching](feature_advanced_keycodes.md)
|
||||
* [Language-Specific Keycodes](reference_keymap_extras.md)
|
||||
* [Modifier Keys](feature_advanced_keycodes.md)
|
||||
* [Quantum Keycodes](quantum_keycodes.md)
|
||||
|
||||
* Advanced Keycodes
|
||||
@ -71,14 +75,17 @@
|
||||
* [Combos](feature_combo.md)
|
||||
* [Debounce API](feature_debounce_type.md)
|
||||
* [Key Lock](feature_key_lock.md)
|
||||
* [Layers](feature_layers.md)
|
||||
* [One Shot Keys](one_shot_keys.md)
|
||||
* [Pointing Device](feature_pointing_device.md)
|
||||
* [Raw HID](feature_rawhid.md)
|
||||
* [Swap Hands](feature_swap_hands.md)
|
||||
* [Tap Dance](feature_tap_dance.md)
|
||||
* [Tap-Hold Configuration](tap_hold.md)
|
||||
* [Terminal](feature_terminal.md)
|
||||
* [Unicode](feature_unicode.md)
|
||||
* [Userspace](feature_userspace.md)
|
||||
* [WPM Calculation](feature_wpm.md)
|
||||
|
||||
* Hardware Features
|
||||
* Displays
|
||||
@ -108,6 +115,7 @@
|
||||
* [Overview](breaking_changes.md)
|
||||
* [My Pull Request Was Flagged](breaking_changes_instructions.md)
|
||||
* History
|
||||
* [2020 May 30](ChangeLog/20200530.md)
|
||||
* [2020 Feb 29](ChangeLog/20200229.md)
|
||||
* [2019 Aug 30](ChangeLog/20190830.md)
|
||||
|
||||
@ -119,8 +127,10 @@
|
||||
* [Drivers](hardware_drivers.md)
|
||||
* [ADC Driver](adc_driver.md)
|
||||
* [I2C Driver](i2c_driver.md)
|
||||
* [SPI Driver](spi_driver.md)
|
||||
* [WS2812 Driver](ws2812_driver.md)
|
||||
* [EEPROM Driver](eeprom_driver.md)
|
||||
* ['serial' Driver](serial_driver.md)
|
||||
* [GPIO Controls](internals_gpio_control.md)
|
||||
* [Keyboard Guidelines](hardware_keyboard_guidelines.md)
|
||||
|
||||
@ -133,6 +143,10 @@
|
||||
* [Development Environment](api_development_environment.md)
|
||||
* [Architecture Overview](api_development_overview.md)
|
||||
|
||||
* Hardware Platform Development
|
||||
* Arm/ChibiOS
|
||||
* [Early initialization](platformdev_chibios_earlyinit.md)
|
||||
|
||||
* QMK Reference
|
||||
* [Contributing to QMK](contributing.md)
|
||||
* [Translating the QMK Docs](translating.md)
|
||||
|
@ -6,27 +6,28 @@ The breaking change period is when we will merge PR's that change QMK in dangero
|
||||
|
||||
## What has been included in past Breaking Changes?
|
||||
|
||||
* [2020 May 30](ChangeLog/20200530.md)
|
||||
* [2020 Feb 29](ChangeLog/20200229.md)
|
||||
* [2019 Aug 30](ChangeLog/20190830.md)
|
||||
|
||||
## When is the next Breaking Change?
|
||||
|
||||
The next Breaking Change is scheduled for May 30, 2020.
|
||||
The next Breaking Change is scheduled for Aug 29, 2020.
|
||||
|
||||
### Important Dates
|
||||
|
||||
* [x] 2020 Feb 29 - `future` is created. It will be rebased weekly.
|
||||
* [ ] 2020 May 2 - `future` closed to new PR's.
|
||||
* [ ] 2020 May 2 - Call for testers.
|
||||
* [ ] 2020 May 28 - `master` is locked, no PR's merged.
|
||||
* [ ] 2020 May 30 - Merge `future` to `master`.
|
||||
* [ ] 2020 May 30 - `master` is unlocked. PR's can be merged again.
|
||||
* [x] 2020 May 30 - `develop` is created. It will be rebased weekly.
|
||||
* [ ] 2020 Aug 1 - `develop` closed to new PR's.
|
||||
* [ ] 2020 Aug 1 - Call for testers.
|
||||
* [ ] 2020 Aug 27 - `master` is locked, no PR's merged.
|
||||
* [ ] 2020 Aug 29 - Merge `develop` to `master`.
|
||||
* [ ] 2020 Aug 29 - `master` is unlocked. PR's can be merged again.
|
||||
|
||||
## What changes will be included?
|
||||
|
||||
To see a list of breaking change candidates you can look at the [`breaking_change` label](https://github.com/qmk/qmk_firmware/pulls?q=is%3Aopen+label%3Abreaking_change+is%3Apr). New changes might be added between now and when `future` is closed, and a PR with that label applied is not guaranteed to be merged.
|
||||
To see a list of breaking change candidates you can look at the [`breaking_change` label](https://github.com/qmk/qmk_firmware/pulls?q=is%3Aopen+label%3Abreaking_change+is%3Apr). New changes might be added between now and when `develop` is closed, and a PR with that label applied is not guaranteed to be merged.
|
||||
|
||||
If you want your breaking change to be included in this round you need to create a PR with the `breaking_change` label and have it accepted before `future` closes. After `future` closes no new breaking changes will be accepted.
|
||||
If you want your breaking change to be included in this round you need to create a PR with the `breaking_change` label and have it accepted before `develop` closes. After `develop` closes no new breaking changes will be accepted.
|
||||
|
||||
Criteria for acceptance:
|
||||
|
||||
@ -37,9 +38,9 @@ Criteria for acceptance:
|
||||
|
||||
This section documents various processes we use when running the Breaking Changes process.
|
||||
|
||||
## Rebase `future` from `master`
|
||||
## Rebase `develop` from `master`
|
||||
|
||||
This is run every Friday while `future` is open.
|
||||
This is run every Friday while `develop` is open.
|
||||
|
||||
Process:
|
||||
|
||||
@ -47,31 +48,31 @@ Process:
|
||||
cd qmk_firmware
|
||||
git checkout master
|
||||
git pull --ff-only
|
||||
git checkout future
|
||||
git checkout develop
|
||||
git rebase master
|
||||
git push --force
|
||||
```
|
||||
|
||||
## Creating the `future` branch
|
||||
## Creating the `develop` branch
|
||||
|
||||
This happens immediately after the previous `future` branch is merged.
|
||||
This happens immediately after the previous `develop` branch is merged.
|
||||
|
||||
* `qmk_firmware` git commands
|
||||
* [ ] `git checkout master`
|
||||
* [ ] `git pull --ff-only`
|
||||
* [ ] `git checkout -b future`
|
||||
* [ ] `git checkout -b develop`
|
||||
* [ ] Edit `readme.md`
|
||||
* [ ] Add a big notice at the top that this is a testing branch.
|
||||
* [ ] Include a link to this document
|
||||
* [ ] `git commit -m 'Branch point for <DATE> Breaking Change'`
|
||||
* [ ] `git tag breakpoint_<YYYY>_<MM>_<DD>`
|
||||
* [ ] `git tag <next_version>` # Prevent the breakpoint tag from confusing version incrementing
|
||||
* [ ] `git push origin future`
|
||||
* [ ] `git push origin develop`
|
||||
* [ ] `git push --tags`
|
||||
|
||||
## 4 Weeks Before Merge
|
||||
|
||||
* `future` is now closed to new PR's, only fixes for current PR's may be merged
|
||||
* `develop` is now closed to new PR's, only fixes for current PR's may be merged
|
||||
* Post call for testers
|
||||
* [ ] Discord
|
||||
* [ ] GitHub PR
|
||||
@ -94,15 +95,15 @@ This happens immediately after the previous `future` branch is merged.
|
||||
## Day Of Merge
|
||||
|
||||
* `qmk_firmware` git commands
|
||||
* [ ] `git checkout future`
|
||||
* [ ] `git checkout develop`
|
||||
* [ ] `git pull --ff-only`
|
||||
* [ ] `git rebase origin/master`
|
||||
* [ ] Edit `readme.md`
|
||||
* [ ] Remove the notes about `future`
|
||||
* [ ] Remove the notes about `develop`
|
||||
* [ ] Roll up the ChangeLog into one file.
|
||||
* [ ] `git commit -m 'Merge point for <DATE> Breaking Change'`
|
||||
* [ ] `git push origin future`
|
||||
* Github Actions
|
||||
* [ ] Create a PR for `future`
|
||||
* [ ] `git push origin develop`
|
||||
* GitHub Actions
|
||||
* [ ] Create a PR for `develop`
|
||||
* [ ] Make sure travis comes back clean
|
||||
* [ ] Merge `future` PR
|
||||
* [ ] Merge `develop` PR
|
||||
|
@ -27,7 +27,7 @@ If you are contributing core code, and the only reason it needs to go through br
|
||||
|
||||
We require submissions that go through the Breaking Change process to include a changelog entry. The entry should be a short summary of the changes your pull request makes – [each section here started as a changelog](ChangeLog/20190830.md "n.b. This should link to the 2019 Aug 30 Breaking Changes doc - @noroadsleft").
|
||||
|
||||
Your changelog should be located at `docs/ChangeLog/YYYYMMDD/PR####.md`, where `YYYYMMDD` is the date on which QMK's breaking change branch – usually named `future` – will be merged into the `master` branch, and `####` is the number of your pull request.
|
||||
Your changelog should be located at `docs/ChangeLog/YYYYMMDD/PR####.md`, where `YYYYMMDD` is the date on which QMK's breaking change branch – usually named `develop` – will be merged into the `master` branch, and `####` is the number of your pull request.
|
||||
|
||||
If your submission requires action on the part of users, your changelog should instruct users what action(s) must be taken, or link to a location that does so.
|
||||
|
||||
|
11
docs/cli.md
11
docs/cli.md
@ -6,25 +6,24 @@ The QMK CLI makes building and working with QMK keyboards easier. We have provid
|
||||
|
||||
### Requirements :id=requirements
|
||||
|
||||
The CLI requires Python 3.5 or greater. We try to keep the number of requirements small but you will also need to install the packages listed in [`requirements.txt`](https://github.com/qmk/qmk_firmware/blob/master/requirements.txt). These are installed automatically when you install the QMK CLI.
|
||||
QMK requires Python 3.6 or greater. We try to keep the number of requirements small but you will also need to install the packages listed in [`requirements.txt`](https://github.com/qmk/qmk_firmware/blob/master/requirements.txt). These are installed automatically when you install the QMK CLI.
|
||||
|
||||
### Install Using Homebrew (macOS, some Linux) :id=install-using-homebrew
|
||||
|
||||
If you have installed [Homebrew](https://brew.sh) you can tap and install QMK:
|
||||
|
||||
```
|
||||
brew tap qmk/qmk
|
||||
brew install qmk
|
||||
brew install qmk/qmk/qmk
|
||||
export QMK_HOME='~/qmk_firmware' # Optional, set the location for `qmk_firmware`
|
||||
qmk setup # This will clone `qmk/qmk_firmware` and optionally set up your build environment
|
||||
```
|
||||
|
||||
### Install Using easy_install or pip :id=install-using-easy_install-or-pip
|
||||
### Install Using pip :id=install-using-easy_install-or-pip
|
||||
|
||||
If your system is not listed above you can install QMK manually. First ensure that you have python 3.5 (or later) installed and have installed pip. Then install QMK with this command:
|
||||
If your system is not listed above you can install QMK manually. First ensure that you have Python 3.6 (or later) installed and have installed pip. Then install QMK with this command:
|
||||
|
||||
```
|
||||
pip3 install qmk
|
||||
python3 -m pip install qmk
|
||||
export QMK_HOME='~/qmk_firmware' # Optional, set the location for `qmk_firmware`
|
||||
qmk setup # This will clone `qmk/qmk_firmware` and optionally set up your build environment
|
||||
```
|
||||
|
@ -1,43 +1,13 @@
|
||||
# QMK CLI Commands
|
||||
|
||||
# CLI Commands
|
||||
|
||||
## `qmk cformat`
|
||||
|
||||
This command formats C code using clang-format.
|
||||
|
||||
Run it with no arguments to format all core code that has been changed. Default checks `origin/master` with `git diff`, branch can be changed using `-b <branch_name>`
|
||||
|
||||
Run it with `-a` to format all core code, or pass filenames on the command line to run it on specific files.
|
||||
|
||||
**Usage for specified files**:
|
||||
|
||||
```
|
||||
qmk cformat [file1] [file2] [...] [fileN]
|
||||
```
|
||||
|
||||
**Usage for all core files**:
|
||||
|
||||
```
|
||||
qmk cformat -a
|
||||
```
|
||||
|
||||
**Usage for only changed files against origin/master**:
|
||||
|
||||
```
|
||||
qmk cformat
|
||||
```
|
||||
|
||||
**Usage for only changed files against branch_name**:
|
||||
|
||||
```
|
||||
qmk cformat -b branch_name
|
||||
```
|
||||
# User Commands
|
||||
|
||||
## `qmk compile`
|
||||
|
||||
This command allows you to compile firmware from any directory. You can compile JSON exports from <https://config.qmk.fm>, compile keymaps in the repo, or compile the keyboard in the current working directory.
|
||||
|
||||
This command is directory aware. It will automatically fill in KEYBOARD and/or KEYMAP if you are in a keyboard or keymap directory.
|
||||
|
||||
**Usage for Configurator Exports**:
|
||||
|
||||
```
|
||||
@ -105,8 +75,9 @@ $ qmk compile -kb dz60
|
||||
|
||||
## `qmk flash`
|
||||
|
||||
This command is similar to `qmk compile`, but can also target a bootloader. The bootloader is optional, and is set to `:flash` by default.
|
||||
To specify a different bootloader, use `-bl <bootloader>`. Visit the [Flashing Firmware](flashing.md) guide for more details of the available bootloaders.
|
||||
This command is similar to `qmk compile`, but can also target a bootloader. The bootloader is optional, and is set to `:flash` by default. To specify a different bootloader, use `-bl <bootloader>`. Visit the [Flashing Firmware](flashing.md) guide for more details of the available bootloaders.
|
||||
|
||||
This command is directory aware. It will automatically fill in KEYBOARD and/or KEYMAP if you are in a keyboard or keymap directory.
|
||||
|
||||
**Usage for Configurator Exports**:
|
||||
|
||||
@ -136,16 +107,6 @@ This command lets you configure the behavior of QMK. For the full `qmk config` d
|
||||
qmk config [-ro] [config_token1] [config_token2] [...] [config_tokenN]
|
||||
```
|
||||
|
||||
## `qmk docs`
|
||||
|
||||
This command starts a local HTTP server which you can use for browsing or improving the docs. Default port is 8936.
|
||||
|
||||
**Usage**:
|
||||
|
||||
```
|
||||
qmk docs [-p PORT]
|
||||
```
|
||||
|
||||
## `qmk doctor`
|
||||
|
||||
This command examines your environment and alerts you to potential build or flash problems. It can fix many of them if you want it to.
|
||||
@ -170,6 +131,32 @@ Check your environment and report problems only:
|
||||
|
||||
qmk doctor -n
|
||||
|
||||
## `qmk info`
|
||||
|
||||
Displays information about keyboards and keymaps in QMK. You can use this to get information about a keyboard, show the layouts, display the underlying key matrix, or to pretty-print JSON keymaps.
|
||||
|
||||
**Usage**:
|
||||
|
||||
```
|
||||
qmk info [-f FORMAT] [-m] [-l] [-km KEYMAP] [-kb KEYBOARD]
|
||||
```
|
||||
|
||||
This command is directory aware. It will automatically fill in KEYBOARD and/or KEYMAP if you are in a keyboard or keymap directory.
|
||||
|
||||
**Examples**:
|
||||
|
||||
Show basic information for a keyboard:
|
||||
|
||||
qmk info -kb planck/rev5
|
||||
|
||||
Show the matrix for a keyboard:
|
||||
|
||||
qmk info -kb ergodox_ez -m
|
||||
|
||||
Show a JSON keymap for a keyboard:
|
||||
|
||||
qmk info -kb clueboard/california -km default
|
||||
|
||||
## `qmk json2c`
|
||||
|
||||
Creates a keymap.c from a QMK Configurator export.
|
||||
@ -180,6 +167,86 @@ Creates a keymap.c from a QMK Configurator export.
|
||||
qmk json2c [-o OUTPUT] filename
|
||||
```
|
||||
|
||||
## `qmk list-keyboards`
|
||||
|
||||
This command lists all the keyboards currently defined in `qmk_firmware`
|
||||
|
||||
**Usage**:
|
||||
|
||||
```
|
||||
qmk list-keyboards
|
||||
```
|
||||
|
||||
## `qmk list-keymaps`
|
||||
|
||||
This command lists all the keymaps for a specified keyboard (and revision).
|
||||
|
||||
This command is directory aware. It will automatically fill in KEYBOARD if you are in a keyboard directory.
|
||||
|
||||
**Usage**:
|
||||
|
||||
```
|
||||
qmk list-keymaps -kb planck/ez
|
||||
```
|
||||
|
||||
## `qmk new-keymap`
|
||||
|
||||
This command creates a new keymap based on a keyboard's existing default keymap.
|
||||
|
||||
This command is directory aware. It will automatically fill in KEYBOARD and/or KEYMAP if you are in a keyboard or keymap directory.
|
||||
|
||||
**Usage**:
|
||||
|
||||
```
|
||||
qmk new-keymap [-kb KEYBOARD] [-km KEYMAP]
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
# Developer Commands
|
||||
|
||||
## `qmk cformat`
|
||||
|
||||
This command formats C code using clang-format.
|
||||
|
||||
Run it with no arguments to format all core code that has been changed. Default checks `origin/master` with `git diff`, branch can be changed using `-b <branch_name>`
|
||||
|
||||
Run it with `-a` to format all core code, or pass filenames on the command line to run it on specific files.
|
||||
|
||||
**Usage for specified files**:
|
||||
|
||||
```
|
||||
qmk cformat [file1] [file2] [...] [fileN]
|
||||
```
|
||||
|
||||
**Usage for all core files**:
|
||||
|
||||
```
|
||||
qmk cformat -a
|
||||
```
|
||||
|
||||
**Usage for only changed files against origin/master**:
|
||||
|
||||
```
|
||||
qmk cformat
|
||||
```
|
||||
|
||||
**Usage for only changed files against branch_name**:
|
||||
|
||||
```
|
||||
qmk cformat -b branch_name
|
||||
```
|
||||
|
||||
## `qmk docs`
|
||||
|
||||
This command starts a local HTTP server which you can use for browsing or improving the docs. Default port is 8936.
|
||||
|
||||
**Usage**:
|
||||
|
||||
```
|
||||
qmk docs [-p PORT]
|
||||
```
|
||||
|
||||
## `qmk kle2json`
|
||||
|
||||
This command allows you to convert from raw KLE data to QMK Configurator JSON. It accepts either an absolute file path, or a file name in the current directory. By default it will not overwrite `info.json` if it is already present. Use the `-f` or `--force` flag to overwrite.
|
||||
@ -202,36 +269,6 @@ $ qmk kle2json -f kle.txt -f
|
||||
Ψ Wrote out to info.json
|
||||
```
|
||||
|
||||
## `qmk list-keyboards`
|
||||
|
||||
This command lists all the keyboards currently defined in `qmk_firmware`
|
||||
|
||||
**Usage**:
|
||||
|
||||
```
|
||||
qmk list-keyboards
|
||||
```
|
||||
|
||||
## `qmk list-keymaps`
|
||||
|
||||
This command lists all the keymaps for a specified keyboard (and revision).
|
||||
|
||||
**Usage**:
|
||||
|
||||
```
|
||||
qmk list-keymaps -kb planck/ez
|
||||
```
|
||||
|
||||
## `qmk new-keymap`
|
||||
|
||||
This command creates a new keymap based on a keyboard's existing default keymap.
|
||||
|
||||
**Usage**:
|
||||
|
||||
```
|
||||
qmk new-keymap [-kb KEYBOARD] [-km KEYMAP]
|
||||
```
|
||||
|
||||
## `qmk pyformat`
|
||||
|
||||
This command formats python code in `qmk_firmware`.
|
||||
@ -251,3 +288,4 @@ This command runs the python test suite. If you make changes to python code you
|
||||
```
|
||||
qmk pytest
|
||||
```
|
||||
|
||||
|
@ -108,7 +108,7 @@ compile.keymap: skully -> None
|
||||
|-----|---------------|-------------|
|
||||
| user.keyboard | None | The keyboard path (Example: `clueboard/66/rev4`) |
|
||||
| user.keymap | None | The keymap name (Example: `default`) |
|
||||
| user.name | None | The user's github username. |
|
||||
| user.name | None | The user's GitHub username. |
|
||||
|
||||
# All Configuration Options
|
||||
|
||||
|
@ -6,6 +6,18 @@ This document has useful information for developers wishing to write new `qmk` s
|
||||
|
||||
The QMK CLI operates using the subcommand pattern made famous by git. The main `qmk` script is simply there to setup the environment and pick the correct entrypoint to run. Each subcommand is a self-contained module with an entrypoint (decorated by `@cli.subcommand()`) that performs some action and returns a shell returncode, or None.
|
||||
|
||||
## Developer mode:
|
||||
|
||||
If you intend to maintain keyboards and/or contribute to QMK, you can enable the CLI's "Developer" mode:
|
||||
|
||||
`qmk config user.developer=True`
|
||||
|
||||
This will allow you to see all available subcommands.
|
||||
**Note:** You will have to install additional requirements:
|
||||
```bash
|
||||
python3 -m pip install -r requirements-dev.txt
|
||||
```
|
||||
|
||||
# Subcommands
|
||||
|
||||
[MILC](https://github.com/clueboard/milc) is the CLI framework `qmk` uses to handle argument parsing, configuration, logging, and many other features. It lets you focus on writing your tool without wasting your time writing glue code.
|
||||
@ -32,7 +44,7 @@ def hello(cli):
|
||||
|
||||
First we import the `cli` object from `milc`. This is how we interact with the user and control the script's behavior. We use `@cli.argument()` to define a command line flag, `--name`. This also creates a configuration variable named `hello.name` (and the corresponding `user.name`) which the user can set so they don't have to specify the argument. The `cli.subcommand()` decorator designates this function as a subcommand. The name of the subcommand will be taken from the name of the function.
|
||||
|
||||
Once inside our function we find a typical "Hello, World!" program. We use `cli.log` to access the underlying [Logger Object](https://docs.python.org/3.5/library/logging.html#logger-objects), whose behavior is user controllable. We also access the value for name supplied by the user as `cli.config.hello.name`. The value for `cli.config.hello.name` will be determined by looking at the `--name` argument supplied by the user, if not provided it will use the value in the `qmk.ini` config file, and if neither of those is provided it will fall back to the default supplied in the `cli.argument()` decorator.
|
||||
Once inside our function we find a typical "Hello, World!" program. We use `cli.log` to access the underlying [Logger Object](https://docs.python.org/3.6/library/logging.html#logger-objects), whose behavior is user controllable. We also access the value for name supplied by the user as `cli.config.hello.name`. The value for `cli.config.hello.name` will be determined by looking at the `--name` argument supplied by the user, if not provided it will use the value in the `qmk.ini` config file, and if neither of those is provided it will fall back to the default supplied in the `cli.argument()` decorator.
|
||||
|
||||
# User Interaction
|
||||
|
||||
@ -44,13 +56,13 @@ There are two main methods for outputting text in a subcommand- `cli.log` and `c
|
||||
|
||||
You can use special tokens to colorize your text, to make it easier to understand the output of your program. See [Colorizing Text](#colorizing-text) below.
|
||||
|
||||
Both of these methods support built-in string formatting using python's [printf style string format operations](https://docs.python.org/3.5/library/stdtypes.html#old-string-formatting). You can use tokens such as `%s` and `%d` within your text strings then pass the values as arguments. See our Hello, World program above for an example.
|
||||
Both of these methods support built-in string formatting using python's [printf style string format operations](https://docs.python.org/3.6/library/stdtypes.html#old-string-formatting). You can use tokens such as `%s` and `%d` within your text strings then pass the values as arguments. See our Hello, World program above for an example.
|
||||
|
||||
You should never use the format operator (`%`) directly, always pass values as arguments.
|
||||
|
||||
### Logging (`cli.log`)
|
||||
|
||||
The `cli.log` object gives you access to a [Logger Object](https://docs.python.org/3.5/library/logging.html#logger-objects). We have configured our log output to show the user a nice emoji for each log level (or the log level name if their terminal does not support unicode.) This way the user can tell at a glance which messages are most important when something goes wrong.
|
||||
The `cli.log` object gives you access to a [Logger Object](https://docs.python.org/3.6/library/logging.html#logger-objects). We have configured our log output to show the user a nice emoji for each log level (or the log level name if their terminal does not support unicode.) This way the user can tell at a glance which messages are most important when something goes wrong.
|
||||
|
||||
The default log level is `INFO`. If the user runs `qmk -v <subcommand>` the default log level will be set to `DEBUG`.
|
||||
|
||||
@ -198,7 +210,7 @@ Our tests can be found in `lib/python/qmk/tests/`. You will find both unit and i
|
||||
|
||||
If your PR does not include a comprehensive set of tests please add comments like this to your code so that other people know where they can help:
|
||||
|
||||
# TODO(unassigned/<yourGithubUsername>): Write <unit|integration> tests
|
||||
# TODO(unassigned/<your_github_username>): Write <unit|integration> tests
|
||||
|
||||
We use [nose2](https://nose2.readthedocs.io/en/latest/getting_started.html) to run our tests. You can refer to the nose2 documentation for more details on what you can do in your test functions.
|
||||
|
||||
|
@ -20,11 +20,11 @@ Most of our style is pretty easy to pick up on, but right now it's not entirely
|
||||
* We accept both forms of preprocessor if's: `#ifdef DEFINED` and `#if defined(DEFINED)`
|
||||
* If you are not sure which to prefer use the `#if defined(DEFINED)` form.
|
||||
* Do not change existing code from one style to the other, except when moving to a multiple condition `#if`.
|
||||
* Do not put whitespace between `#` and `if`.
|
||||
* When deciding how (or if) to indent directives keep these points in mind:
|
||||
* Readability is more important than consistency.
|
||||
* Follow the file's existing style. If the file is mixed follow the style that makes sense for the section you are modifying.
|
||||
* When choosing to indent you can follow the indention level of the surrounding C code, or preprocessor directives can have their own indent level. Choose the style that best communicates the intent of your code.
|
||||
* When deciding how (or if) to indent preprocessor directives, keep these points in mind:
|
||||
* Readability is more important than consistency.
|
||||
* Follow the file's existing style. If the file is mixed, follow the style that makes sense for the section you are modifying.
|
||||
* When indenting, keep the hash at the start of the line and add whitespace between `#` and `if`, starting with 4 spaces after the `#`.
|
||||
* You can follow the indention level of the surrounding C code, or preprocessor directives can have their own indentation levels. Choose the style that best communicates the intent of your code.
|
||||
|
||||
Here is an example for easy reference:
|
||||
|
||||
|
@ -2,7 +2,7 @@
|
||||
|
||||
Most of our style follows PEP8 with some local modifications to make things less nit-picky.
|
||||
|
||||
* We target Python 3.5 for compatability with all supported platforms.
|
||||
* We target Python 3.6 for compatability with all supported platforms.
|
||||
* We indent using four (4) spaces (soft tabs)
|
||||
* We encourage liberal use of comments
|
||||
* Think of them as a story describing the feature
|
||||
@ -317,7 +317,7 @@ At the time of this writing our tests are not very comprehensive. Looking at the
|
||||
|
||||
## Integration Tests
|
||||
|
||||
Integration tests can be found in `lib/python/qmk/tests/test_cli_commands.py`. This is where CLI commands are actually run and their overall behavior is verified. We use [`subprocess`](https://docs.python.org/3.5/library/subprocess.html#module-subprocess) to launch each CLI command and a combination of checking output and returncode to determine if the right thing happened.
|
||||
Integration tests can be found in `lib/python/qmk/tests/test_cli_commands.py`. This is where CLI commands are actually run and their overall behavior is verified. We use [`subprocess`](https://docs.python.org/3.6/library/subprocess.html#module-subprocess) to launch each CLI command and a combination of checking output and returncode to determine if the right thing happened.
|
||||
|
||||
## Unit Tests
|
||||
|
||||
|
@ -115,9 +115,9 @@ If you define these options you will disable the associated feature, which can s
|
||||
* `#define NO_ACTION_ONESHOT`
|
||||
* disable one-shot modifiers
|
||||
* `#define NO_ACTION_MACRO`
|
||||
* disable old style macro handling: MACRO() & action_get_macro
|
||||
* disable old-style macro handling using `MACRO()`, `action_get_macro()` _(deprecated)_
|
||||
* `#define NO_ACTION_FUNCTION`
|
||||
* disable calling of action_function() from the fn_actions array (deprecated)
|
||||
* disable old-style function handling using `fn_actions`, `action_function()` _(deprecated)_
|
||||
|
||||
## Features That Can Be Enabled
|
||||
|
||||
@ -191,7 +191,14 @@ If you define these options you will enable the associated feature, which may in
|
||||
* `#define RGBLIGHT_ANIMATIONS`
|
||||
* run RGB animations
|
||||
* `#define RGBLIGHT_LAYERS`
|
||||
* Lets you define [lighting layers](feature_rgblight.md) that can be toggled on or off. Great for showing the current keyboard layer or caps lock state.
|
||||
* Lets you define [lighting layers](feature_rgblight.md?id=lighting-layers) that can be toggled on or off. Great for showing the current keyboard layer or caps lock state.
|
||||
* `#define RGBLIGHT_MAX_LAYERS`
|
||||
* Defaults to 8. Can be expanded up to 32 if more [lighting layers](feature_rgblight.md?id=lighting-layers) are needed.
|
||||
* Note: Increasing the maximum will increase the firmware size and slow sync on split keyboards.
|
||||
* `#define RGBLIGHT_LAYER_BLINK`
|
||||
* Adds ability to [blink](feature_rgblight.md?id=lighting-layer-blink) a lighting layer for a specified number of milliseconds (e.g. to acknowledge an action).
|
||||
* `#define RGBLIGHT_LAYERS_OVERRIDE_RGB_OFF`
|
||||
* If defined, then [lighting layers](feature_rgblight?id=overriding-rgb-lighting-onoff-status) will be shown even if RGB Light is off.
|
||||
* `#define RGBLED_NUM 12`
|
||||
* number of LEDs
|
||||
* `#define RGBLIGHT_SPLIT`
|
||||
@ -317,10 +324,10 @@ This is a [make](https://www.gnu.org/software/make/manual/make.html) file that i
|
||||
* `LAYOUTS`
|
||||
* A list of [layouts](feature_layouts.md) this keyboard supports.
|
||||
* `LINK_TIME_OPTIMIZATION_ENABLE`
|
||||
* Enables Link Time Optimization (`LTO`) when compiling the keyboard. This makes the process take longer, but can significantly reduce the compiled size (and since the firmware is small, the added time is not noticeable). However, this will automatically disable the old Macros and Functions features automatically, as these break when `LTO` is enabled.
|
||||
It does this by automatically defining `NO_ACTION_MACRO` and `NO_ACTION_FUNCTION`
|
||||
* Enables Link Time Optimization (LTO) when compiling the keyboard. This makes the process take longer, but it can significantly reduce the compiled size (and since the firmware is small, the added time is not noticeable).
|
||||
However, this will automatically disable the legacy TMK Macros and Functions features, as these break when LTO is enabled. It does this by automatically defining `NO_ACTION_MACRO` and `NO_ACTION_FUNCTION`. (Note: This does not affect QMK [Macros](feature_macros.md) and [Layers](feature_layers.md).)
|
||||
* `LTO_ENABLE`
|
||||
* It has the same meaning as LINK_TIME_OPTIMIZATION_ENABLE. You can use `LTO_ENABLE` instead of `LINK_TIME_OPTIMIZATION_ENABLE`.
|
||||
* Has the same meaning as `LINK_TIME_OPTIMIZATION_ENABLE`. You can use `LTO_ENABLE` instead of `LINK_TIME_OPTIMIZATION_ENABLE`.
|
||||
|
||||
## AVR MCU Options
|
||||
* `MCU = atmega32u4`
|
||||
|
@ -12,7 +12,7 @@ I'll say that again because it's important:
|
||||
|
||||
!> **MAKE SURE YOU SELECT THE RIGHT VERSION!**
|
||||
|
||||
If your keyboard has been advertised to be powered by QMK but is not in the list, chances are a developer hasn't gotten to it yet or we haven't had a chance to merge it in yet. File an issue at [qmk_firmware](https://github.com/qmk/qmk_firmware/issues) requesting to support that particular keyboard, if there is no active [Pull Request](https://github.com/qmk/qmk_firmware/pulls?q=is%3Aopen+is%3Apr+label%3Akeyboard) for it. There are also QMK powered keyboards that are in their manufacturer's own github accounts. Double check for that as well. <!-- FIXME(skullydazed): This feels too wordy and I'm not sure we want to encourage these kinds of issues. Also, should we prompt them to bug the manufacutrer? -->
|
||||
If your keyboard has been advertised to be powered by QMK but is not in the list, chances are a developer hasn't gotten to it yet or we haven't had a chance to merge it in yet. File an issue at [qmk_firmware](https://github.com/qmk/qmk_firmware/issues) requesting to support that particular keyboard, if there is no active [Pull Request](https://github.com/qmk/qmk_firmware/pulls?q=is%3Aopen+is%3Apr+label%3Akeyboard) for it. There are also QMK powered keyboards that are in their manufacturer's own GitHub accounts. Double check for that as well. <!-- FIXME(skullydazed): This feels too wordy and I'm not sure we want to encourage these kinds of issues. Also, should we prompt them to bug the manufacutrer? -->
|
||||
|
||||
## Step 2: Select Your Keyboard Layout
|
||||
|
||||
|
@ -57,7 +57,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||
case KC_ENTER:
|
||||
// Play a tone when enter is pressed
|
||||
if (record->event.pressed) {
|
||||
PLAY_NOTE_ARRAY(tone_qwerty);
|
||||
PLAY_SONG(tone_qwerty);
|
||||
}
|
||||
return true; // Let QMK send the enter press/release events
|
||||
default:
|
||||
@ -438,7 +438,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||
case KC_ENTER:
|
||||
// Play a tone when enter is pressed
|
||||
if (record->event.pressed) {
|
||||
PLAY_NOTE_ARRAY(tone_qwerty);
|
||||
PLAY_SONG(tone_qwerty);
|
||||
}
|
||||
return true; // Let QMK send the enter press/release events
|
||||
case RGB_LYR: // This allows me to use underglow as layer indication, or as normal
|
||||
@ -486,56 +486,3 @@ And you're done. The RGB layer indication will only work if you want it to. And
|
||||
* Keymap: `void eeconfig_init_user(void)`, `uint32_t eeconfig_read_user(void)` and `void eeconfig_update_user(uint32_t val)`
|
||||
|
||||
The `val` is the value of the data that you want to write to EEPROM. And the `eeconfig_read_*` function return a 32 bit (DWORD) value from the EEPROM.
|
||||
|
||||
# Custom Tapping Term
|
||||
|
||||
By default, the tapping term and related options (such as `IGNORE_MOD_TAP_INTERRUPT`) are defined globally, and are not configurable by key. For most users, this is perfectly fine. But in some cases, dual function keys would be greatly improved by different timeout behaviors than `LT` keys, or because some keys may be easier to hold than others. Instead of using custom key codes for each, this allows for per key configurable timeout behaviors.
|
||||
|
||||
There are two configurable options to control per-key timeout behaviors:
|
||||
|
||||
- `TAPPING_TERM_PER_KEY`
|
||||
- `IGNORE_MOD_TAP_INTERRUPT_PER_KEY`
|
||||
|
||||
You need to add `#define` lines to your `config.h` for each feature you want.
|
||||
|
||||
```
|
||||
#define TAPPING_TERM_PER_KEY
|
||||
#define IGNORE_MOD_TAP_INTERRUPT_PER_KEY
|
||||
```
|
||||
|
||||
|
||||
## Example `get_tapping_term` Implementation
|
||||
|
||||
To change the `TAPPING_TERM` based on the keycode, you'd want to add something like the following to your `keymap.c` file:
|
||||
|
||||
```c
|
||||
uint16_t get_tapping_term(uint16_t keycode) {
|
||||
switch (keycode) {
|
||||
case SFT_T(KC_SPC):
|
||||
return TAPPING_TERM + 1250;
|
||||
case LT(1, KC_GRV):
|
||||
return 130;
|
||||
default:
|
||||
return TAPPING_TERM;
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Example `get_ignore_mod_tap_interrupt` Implementation
|
||||
|
||||
To change the `IGNORE_MOD_TAP_INTERRUPT` value based on the keycode, you'd want to add something like the following to your `keymap.c` file:
|
||||
|
||||
```c
|
||||
bool get_ignore_mod_tap_interrupt(uint16_t keycode) {
|
||||
switch (keycode) {
|
||||
case SFT_T(KC_SPC):
|
||||
return true;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## `get_tapping_term` / `get_ignore_mod_tap_interrupt` Function Documentation
|
||||
|
||||
Unlike many of the other functions here, there isn't a need (or even reason) to have a quantum or keyboard level function. Only user level functions are useful here, so no need to mark them as such.
|
||||
|
@ -13,7 +13,7 @@ QMK (*Quantum Mechanical Keyboard*) ist eine Open-Source-Community, welche die Q
|
||||
|
||||
## Bezugsquelle für QMK
|
||||
|
||||
Wenn Du vorhast, deine Tastatur, Tastaturbelegung oder Features zu QMK beizusteuern, geht das am einfachsten, indem Du das [Repository auf Github](https://github.com/qmk/qmk_firmware#fork-destination-box) forkst, die Änderungen in deinem lokalen Repo vornimmst und anschließend einen [Pull Request](https://github.com/qmk/qmk_firmware/pulls) einreichst.
|
||||
Wenn Du vorhast, deine Tastatur, Tastaturbelegung oder Features zu QMK beizusteuern, geht das am einfachsten, indem Du das [Repository auf GitHub](https://github.com/qmk/qmk_firmware#fork-destination-box) forkst, die Änderungen in deinem lokalen Repo vornimmst und anschließend einen [Pull Request](https://github.com/qmk/qmk_firmware/pulls) einreichst.
|
||||
|
||||
Ansonsten kannst Du es als [zip](https://github.com/qmk/qmk_firmware/zipball/master) oder [tar](https://github.com/qmk/qmk_firmware/tarball/master) herunterladen, oder es direkt via git klonen (`git clone git@github.com:qmk/qmk_firmware.git` bzw. `git clone https://github.com/qmk/qmk_firmware.git`).
|
||||
|
||||
|
@ -11,7 +11,7 @@
|
||||
* [QMK CLI](de/cli.md)
|
||||
* [QMK CLI Konfiguration](de/cli_configuration.md)
|
||||
* [Zu QMK beitragen](de/contributing.md)
|
||||
* [Anleitung für Github](de/getting_started_github.md)
|
||||
* [Anleitung für GitHub](de/getting_started_github.md)
|
||||
* [Nach Hilfe fragen](de/getting_started_getting_help.md)
|
||||
|
||||
* [Breaking Changes](de/breaking_changes.md)
|
||||
@ -98,6 +98,7 @@
|
||||
* [ISP Flashing Guide](de/isp_flashing_guide.md)
|
||||
* [ARM Debugging Guide](de/arm_debugging.md)
|
||||
* [I2C Driver](de/i2c_driver.md)
|
||||
* [SPI Driver](de/spi_driver.md)
|
||||
* [GPIO Controls](de/internals_gpio_control.md)
|
||||
* [Proton C Conversion](de/proton_c_conversion.md)
|
||||
|
||||
|
@ -6,7 +6,7 @@ Git Ressourcen:
|
||||
|
||||
* [Gutes allgemeines Tutorial](https://www.codecademy.com/learn/learn-git) (auf Englisch)
|
||||
* [Git spielerisch anhand von Beispielen lernen](https://learngitbranching.js.org/) (auf Englisch)
|
||||
* [Mehr über den allgemeinen Umgang mit Github](getting_started_github.md)
|
||||
* [Mehr über den allgemeinen Umgang mit GitHub](getting_started_github.md)
|
||||
* [Mehr über Git im Bezug zu QMK](contributing.md)
|
||||
|
||||
Mehr über die Arbeit mit der Befehlszeile:
|
||||
|
@ -1,4 +1,4 @@
|
||||
# EEPROM Driver Configuration
|
||||
# EEPROM Driver Configuration :id=eeprom-driver-configuration
|
||||
|
||||
The EEPROM driver can be swapped out depending on the needs of the keyboard, or whether extra hardware is present.
|
||||
|
||||
@ -6,15 +6,20 @@ Driver | Description
|
||||
-----------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
`EEPROM_DRIVER = vendor` (default) | Uses the on-chip driver provided by the chip manufacturer. For AVR, this is provided by avr-libc. This is supported on ARM for a subset of chips -- STM32F3xx, STM32F1xx, and STM32F072xB will be emulated by writing to flash. STM32L0xx and STM32L1xx will use the onboard dedicated true EEPROM. Other chips will generally act as "transient" below.
|
||||
`EEPROM_DRIVER = i2c` | Supports writing to I2C-based 24xx EEPROM chips. See the driver section below.
|
||||
`EEPROM_DRIVER = spi` | Supports writing to SPI-based 25xx EEPROM chips. See the driver section below.
|
||||
`EEPROM_DRIVER = transient` | Fake EEPROM driver -- supports reading/writing to RAM, and will be discarded when power is lost.
|
||||
|
||||
## Vendor Driver Configuration
|
||||
## Vendor Driver Configuration :id=vendor-eeprom-driver-configuration
|
||||
|
||||
#### STM32 L0/L1 Configuration :id=stm32l0l1-eeprom-driver-configuration
|
||||
|
||||
!> Resetting EEPROM using an STM32L0/L1 device takes up to 1 second for every 1kB of internal EEPROM used.
|
||||
|
||||
No configurable options are available.
|
||||
`config.h` override | Description | Default Value
|
||||
------------------------------------|--------------------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------
|
||||
`#define STM32_ONBOARD_EEPROM_SIZE` | The size of the EEPROM to use, in bytes. Erase times can be high, so it's configurable here, if not using the default value. | Minimum required to cover base _eeconfig_ data, or `1024` if VIA is enabled.
|
||||
|
||||
## I2C Driver Configuration
|
||||
## I2C Driver Configuration :id=i2c-eeprom-driver-configuration
|
||||
|
||||
Currently QMK supports 24xx-series chips over I2C. As such, requires a working i2c_master driver configuration. You can override the driver configuration via your config.h:
|
||||
|
||||
@ -41,7 +46,21 @@ MB85RC256V FRAM | `#define EEPROM_I2C_MB85RC256V` | <https://www.adafruit.com/p
|
||||
|
||||
?> If you find that the EEPROM is not cooperating, ensure you've correctly shifted up your EEPROM address by 1. For example, the datasheet might state the address as `0b01010000` -- the correct value of `EXTERNAL_EEPROM_I2C_BASE_ADDRESS` needs to be `0b10100000`.
|
||||
|
||||
## Transient Driver configuration
|
||||
## SPI Driver Configuration :id=spi-eeprom-driver-configuration
|
||||
|
||||
Currently QMK supports 25xx-series chips over SPI. As such, requires a working spi_master driver configuration. You can override the driver configuration via your config.h:
|
||||
|
||||
`config.h` override | Description | Default Value
|
||||
-----------------------------------------------|--------------------------------------------------------------------------------------|--------------
|
||||
`#define EXTERNAL_EEPROM_SPI_SLAVE_SELECT_PIN` | SPI Slave select pin in order to inform that the EEPROM is currently being addressed | _none_
|
||||
`#define EXTERNAL_EEPROM_SPI_CLOCK_DIVISOR` | Clock divisor used to divide the peripheral clock to derive the SPI frequency | `64`
|
||||
`#define EXTERNAL_EEPROM_BYTE_COUNT` | Total size of the EEPROM in bytes | 8192
|
||||
`#define EXTERNAL_EEPROM_PAGE_SIZE` | Page size of the EEPROM in bytes, as specified in the datasheet | 32
|
||||
`#define EXTERNAL_EEPROM_ADDRESS_SIZE` | The number of bytes to transmit for the memory location within the EEPROM | 2
|
||||
|
||||
!> There's no way to determine if there is an SPI EEPROM actually responding. Generally, this will result in reads of nothing but zero.
|
||||
|
||||
## Transient Driver configuration :id=transient-eeprom-driver-configuration
|
||||
|
||||
The only configurable item for the transient EEPROM driver is its size:
|
||||
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user