Compare commits

...

712 Commits

Author SHA1 Message Date
84012d8243 Merge pull request #1359 from agbell/PR
Permissive Hold, and two keymaps
2017-06-07 18:47:29 -04:00
8cc0035ea0 Add new keyboard layout for the ClueBoard (#1371) 2017-06-07 08:18:26 -07:00
5d83d320cb Merge pull request #1366 from abperiasamy/refine-layout
Replace enter with quote and few reorgs
2017-06-06 12:35:26 -04:00
05b0075391 Merge pull request #1368 from shieldsd/master
Additional tap dance keys/functions for planck/keymap/dshields
2017-06-06 12:35:04 -04:00
ad7a5bdc4f Additional tap dance keys/functions for planck/keymap/dshields 2017-06-06 13:09:55 +01:00
5e18e4ab48 update docs link 2017-06-05 16:25:59 -04:00
0db6ac46aa remove build stuff 2017-06-03 14:32:02 -04:00
4ab61344f5 Adding permissive_hold 2017-06-03 10:28:46 -04:00
587b0de6e5 adding lets split keymap 2017-06-03 10:28:46 -04:00
82de4d039d Ergodox Adam keymap 2017-06-03 10:28:36 -04:00
6d6dee2956 Adding docker compose 2017-06-03 09:32:44 -04:00
aaa67f6930 Merge pull request #1357 from shieldsd/gherkin
Initial commit for gherkin keyboard support. Compiles but untested.
2017-06-02 10:23:54 -04:00
7cbd16c902 Initial commit for gherkin keyboard support. Compiles but untested. 2017-06-02 14:45:42 +01:00
eefec19ad9 Update Keycodes.md 2017-06-02 09:44:08 -04:00
af931368ce Merge pull request #1356 from fabienheureux/patch-1
Broken Keymap docs link
2017-06-02 09:21:15 -04:00
47c209fa02 Update Keycodes.md 2017-06-02 09:21:01 -04:00
19816a4998 Broken Keymap docs link 2017-06-02 10:51:12 +02:00
9069edd934 Merge pull request #1347 from nooges/nyquist
Add Nyquist keyboard support
2017-06-01 12:58:33 -04:00
d548693c8b Merge pull request #1294 from shieldsd/master
Prevent the recording of looping dynamic macros.
2017-06-01 12:18:36 -04:00
606e13a47e Prevent the recording of looping dynamic macros.
If a macro play key is inadvertently recorded in a dynamic macro
a loop is created and the macro will not terminate when played.

This should be prevented.
2017-06-01 16:29:58 +01:00
ec3e684123 Merge pull request #1350 from originerd/add-originerd-planck-keymap
Add originerd planck keymap
2017-06-01 11:19:40 -04:00
05e6dd6527 Merge pull request #1351 from Alfrheim/fixing_dvorak_layout
replacing one R for a T
2017-06-01 11:19:20 -04:00
cf77c42c72 Merge pull request #1353 from 333fred/333fred-layout
ergodox/333fred layout
2017-06-01 11:18:56 -04:00
cc52856bac Merge pull request #1354 from shieldsd/tweaks
Tweak reported power consumption to work with iOS
2017-06-01 11:18:28 -04:00
aae727d9ec Update keymap layout comments 2017-06-01 11:15:21 -04:00
db0ac3bcb3 Tweak reported power consumption to work with iOS 2017-06-01 09:18:33 +01:00
db82b17d6e Remove OLED code and set I2C rate back to 100kHz 2017-06-01 01:26:06 -04:00
dded79a412 Update licensing on visualizer.c 2017-05-31 18:07:02 -07:00
cfaf34daec Updated readme 2017-05-31 17:57:38 -07:00
aa1b1c5756 Added several new macros 2017-05-31 17:42:50 -07:00
f35c82ccb2 Fixed numpad 0 layout 2017-05-31 10:27:39 -07:00
974a77a07c replacing one R for a T 2017-05-31 15:19:37 +02:00
c33c2bbade Add originerd planck keymap 2017-05-31 22:00:44 +09:00
4eba71841e Use code blocks for keyboard layouts 2017-05-30 23:56:28 -07:00
95ae256482 Completed iteration 1 of my layout 2017-05-30 23:52:20 -07:00
57cfb5f1ae Merge pull request #1348 from Dbroqua/master
Added DK60 keyboard
2017-05-30 23:12:11 -04:00
949540d601 Added initial keymap files 2017-05-30 18:01:09 -07:00
c5d3faace5 Merge remote-tracking branch 'origin/feature/DK60' 2017-05-30 23:10:14 +02:00
a381eb01f5 - Updated copyright 2017-05-30 23:09:39 +02:00
7a433a7f3d Update copyright info 2017-05-30 16:52:02 -04:00
fbec02c148 Remove Let’s Split plate files 2017-05-30 16:42:04 -04:00
061bb4a0b8 Merge remote-tracking branch 'origin/feature/DK60' 2017-05-30 22:17:20 +02:00
05f5243426 - Updated readme 2017-05-30 22:17:03 +02:00
55d6750254 Merge remote-tracking branch 'origin/feature/DK60' 2017-05-30 22:15:07 +02:00
e280f7aad7 - Added Capslock/Esc led 2017-05-30 22:13:34 +02:00
328bde1624 Merge pull request #1323 from nikchi/master
Variable tapping terms
2017-05-30 15:38:22 -04:00
3c4022c41b hmm? 2017-05-30 14:19:57 -04:00
2c9f846608 Merge pull request #2 from qmk/master
pull in new qmk changes
2017-05-30 14:17:48 -04:00
be204f9cdd Update readme 2017-05-30 13:29:30 -04:00
cb791cf6cd Merge branch 'master' of https://github.com/qmk/qmk_firmware 2017-05-30 12:49:38 -04:00
9ecfc23292 make qmk bot do the hard work 2017-05-30 12:49:26 -04:00
4549b0417e Merge pull request #1342 from priyadi/adafruit-mouse-buttons
Adafruit Feather BLE / BLE Friend mouse buttons support
2017-05-30 12:10:45 -04:00
3a1a7d6472 Merge branch 'master' of https://github.com/qmk/qmk_firmware 2017-05-30 11:46:34 -04:00
7eccbfe737 exclude PRs 2017-05-30 11:46:25 -04:00
f06f883589 - Some changes on DK60 2017-05-30 16:59:56 +02:00
5393bc6f4e switched to uint8 and 16 2017-05-29 21:25:50 -04:00
4a8da0cb45 Modify pinout and layouts for Nyquist 2017-05-29 16:20:06 -04:00
aeade1b197 Fork Let’s Split files 2017-05-29 16:04:46 -04:00
732a115b32 Merge pull request #1344 from qmk/jackhumbert-patch-1
Re-enable mouse buttons from #1327
2017-05-29 15:17:38 -04:00
b6c60333e4 Re-enable mouse buttons 2017-05-29 13:21:38 -04:00
0c351fa98b no master needed on push maybe 2017-05-29 12:49:25 -04:00
bd39e91f78 Merge branch 'master' of https://github.com/qmk/qmk_firmware 2017-05-29 12:15:03 -04:00
44832127d7 push to git url 2017-05-29 12:14:49 -04:00
7eebdd4760 Jokrik's Clueboard layout (#1340) 2017-05-29 09:10:34 -07:00
1d6a18db99 Merge pull request #1343 from Maartenwut/patch-1
Added SEND_STRING(); to the documentation.
2017-05-29 11:58:08 -04:00
cecf783e14 Merge pull request #1337 from fredizzimo/wsl_setup
Add script for setting up Windows Subsystem for Linux
2017-05-29 11:56:53 -04:00
91c6113cba Added SEND_STRING(); to the documentation. 2017-05-29 17:53:39 +02:00
988941cc0a Merge branch 'master' of https://github.com/qmk/qmk_firmware 2017-05-29 11:37:33 -04:00
ee0135fb81 get rid of folders in tar 2017-05-29 11:37:20 -04:00
e179dbd9e6 Merge pull request #1341 from Dbroqua/patch-3
Update Differences-from-TMK.md
2017-05-29 10:55:32 -04:00
7041055ace Merge branch 'master' of https://github.com/qmk/qmk_firmware 2017-05-29 10:54:56 -04:00
ae6b803ad6 more than one en-file, and actually ignore docs 2017-05-29 10:54:46 -04:00
51e44fd6c5 Update Differences-from-TMK.md
Removed fn_actions.

According this [comment](https://github.com/qmk/qmk_firmware/pull/1336#issuecomment-304634633)
2017-05-29 13:17:23 +02:00
f0fc2db4e2 Adafruit Feather BLE / BLE Friend mouse buttons support 2017-05-29 18:17:21 +07:00
80707d529c Merge pull request #1338 from qmk/hf/prevent_stuck_mods
Adds prevent stuck modifiers to EZ default
2017-05-28 20:14:36 -04:00
41fa638aa8 Adds prevent stuck modifiers to EZ default 2017-05-28 20:05:37 -04:00
71feac5717 ignore docs, fix tag/hex pushing 2017-05-28 16:16:56 -04:00
78aebe0631 Update windows 10 instructions 2017-05-28 22:35:45 +03:00
de0a058da7 Merge pull request #1336 from Dbroqua/patch-2
Update Differences-from-TMK.md
2017-05-28 14:47:57 -04:00
999b35c7f8 Create a symlink to qmk if requested 2017-05-28 21:38:14 +03:00
ec720ac1ea Add activate_wsl to .bashrc 2017-05-28 21:30:55 +03:00
fa4a492677 Fix symlink creation 2017-05-28 21:30:55 +03:00
3e4f2f5590 Use unzip instead of 7zip 2017-05-28 21:30:55 +03:00
3d3999d863 Actually install flip instead of just extracting 2017-05-28 21:30:55 +03:00
b8899b48b4 Make symlink to utils and export programmer variables 2017-05-28 21:30:55 +03:00
9c582fc797 Add install dependencies 2017-05-28 21:30:55 +03:00
477bd4b948 Add prompt for re-downloading the utils 2017-05-28 21:30:55 +03:00
c2096bb515 Add driver installation 2017-05-28 21:30:55 +03:00
aa26464480 Add checks for cloning to the right dir 2017-05-28 21:30:55 +03:00
28a4e90565 Download windows flashing utils and driver_installer 2017-05-28 21:30:55 +03:00
b2010cd478 Update Differences-from-TMK.md
Hello,

I'm not sure but it seems to be uint8_t for TMK/fn_actions (cf. https://github.com/tmk/tmk_keyboard/blob/master/README.md ).

Regards,
Damien
2017-05-28 19:17:22 +02:00
d0d81eecef Merge pull request #1334 from fredizzimo/fix_faq_lineending
Fix line endings in FAQ.md
2017-05-28 12:12:47 -04:00
623b1cd866 Fix line endings in FAQ.md 2017-05-28 12:28:02 +03:00
b8c1f25072 Updates book.json
Auto commit by GitBook Editor
2017-05-27 22:24:53 +00:00
931ad66ffa Updates book.json
Auto commit by GitBook Editor
2017-05-27 22:23:09 +00:00
2003cee609 Updates book.json
Auto commit by GitBook Editor
2017-05-27 22:21:58 +00:00
c3bdddb637 move book for gitbook 2017-05-27 18:20:46 -04:00
c95f08c439 Updates docs/book.json
Auto commit by GitBook Editor
2017-05-27 22:19:38 +00:00
7e84b0e3b3 move old doc to docs 2017-05-27 18:14:21 -04:00
704794bae3 subtree docs 2017-05-27 18:09:52 -04:00
e229dcadb5 Merge pull request #5 from Maartenwut/patch-1
Mention that TT needs 5 taps by default.
2017-05-27 11:03:34 -04:00
bb2a8c3611 Updates book.json
Auto commit by GitBook Editor
2017-05-27 14:56:13 +00:00
e7fccabb1c Mention that TT needs 5 taps by default.
Also gave an example of defining the amount of taps needed.
2017-05-27 12:34:16 +02:00
d24da945d1 Merge pull request #1319 from Johannes-Larsson/master
Add planck/johannes layout
2017-05-26 18:33:25 -04:00
453877422b Merge pull request #1327 from Dbroqua/master
Added Integration of IBM Trackpoint
2017-05-26 18:32:43 -04:00
9851e6f3b1 Merge pull request #1328 from yiancar/qmk_usb_startup_disable
Use variable to disable usb check at startup
2017-05-26 18:31:23 -04:00
492115a611 Merge pull request #4 from Dbroqua/master
Update Modding-your-keyboard.md
2017-05-26 18:30:41 -04:00
fa1b92fbb1 Use variable to disable usb check at startup
Adds a define variable which when defined disables the usb startup
check. Modified the makefile to separate above define from bluetooth
dependancy
2017-05-26 21:58:43 +01:00
6d12588cdf Merge pull request #1 from Dbroqua/patch-1
Update Modding-your-keyboard.md
2017-05-26 22:16:09 +02:00
66e9cf9718 clarified tap 2017-05-26 15:59:34 -04:00
6b994ecd82 - Added schematic for Trackpoint demonstration 2017-05-26 21:27:11 +02:00
81e85a1a4e - Added integration of IBM Trackpoint 2017-05-26 20:35:31 +02:00
6a0b13191b Update Modding-your-keyboard.md
Updated `USART version` chapter.

I think there were 2 `#endif` too .
2017-05-26 16:00:48 +02:00
0a4a966c66 Merge pull request #22 from qmk/master
Merge from QMK
2017-05-26 15:57:08 +02:00
1bff72c009 - 2017-05-26 00:19:12 -04:00
d462409762 tenative readme for variable timing tap 2017-05-26 00:18:59 -04:00
b3144112d3 removed need to set customtapping term 0. defaults to 0 already 2017-05-25 16:38:06 -04:00
7c8b166cce changed -1 to 0 can't have negative unsigned ints 🤔 2017-05-25 16:29:57 -04:00
aeb3a34636 moved specific tap term to its own function
included custom_tapping_term in action struct
2017-05-25 16:26:30 -04:00
e695b5a33b Added per case tapping term, updated FF-nikchi keymap. 2017-05-25 00:41:00 -04:00
b003669934 Merge pull request #3 from fieldju/patch-1
Fix typo in Macro.md in dynamic macro section.
2017-05-24 23:43:34 -04:00
17a378715e Tapping Term and Memes TD for FF 2017-05-24 23:43:02 -04:00
a9ef02105d Fix typo in Macro.md in dynamic macro section. 2017-05-24 20:13:03 -07:00
6d08de5c67 readme, media keys fix 2017-05-24 21:35:31 +02:00
e4f1b238b3 revert changes to config.h 2017-05-24 21:24:13 +02:00
7a4ec3bd92 Merge pull request #1316 from nikchi/master
FrostyFlake Keymap
2017-05-24 13:59:30 -04:00
690957cdbd media keys and stuff 2017-05-24 19:00:56 +02:00
006ba4bf36 moved unicodemap rules to localer make 2017-05-24 12:36:36 -04:00
b9cf386b21 Merge branch 'master' of https://github.com/qmk/qmk_firmware 2017-05-24 17:58:11 +02:00
ad420e7205 Merge pull request #1317 from qmk/hf/faster_mouse
tweaks default mouse speed constants
2017-05-24 05:09:29 -07:00
a965e5b735 tweaks default mouse speed constants 2017-05-24 07:56:41 -04:00
ef1714f443 more emoji function comments 2017-05-24 00:35:04 -04:00
6536b1ce2a Tap dancing emoji support 😩😩 2017-05-23 23:52:48 -04:00
e90a00c88c then some code blocks 2017-05-23 23:09:19 -04:00
870aaa0a7e pipes without backtics 2017-05-23 23:06:35 -04:00
be4ece0f3e grrr 2017-05-23 23:05:19 -04:00
9359abf33e surrounds stuff with backticks 2017-05-23 23:03:30 -04:00
260ddd3290 quick table tweak 2017-05-23 22:58:35 -04:00
b3eeb9d84a removed s 2017-05-23 18:47:06 -04:00
0e174fcb48 Merge branch 'master' of https://github.com/nikchi/qmk_firmware 2017-05-23 13:13:23 -04:00
3ed2147a88 preonic map 2017-05-23 13:13:20 -04:00
ec86fac6ee Merge pull request #1 from qmk/master
pull new to mine
2017-05-23 13:08:44 -04:00
4f1007952b merge 2017-05-22 15:27:57 +02:00
53b094934f matrix layout 2017-05-22 15:25:53 +02:00
f9a301761f Merge pull request #2 from Vifon/master
Update the dynamic macro docs according to the recent changes
2017-05-21 11:27:41 -04:00
8cd9d26246 Update the dynamic macro docs according to the recent changes
See qmk/qmk_firmware#1275.
2017-05-21 14:27:29 +02:00
d2ad5afaa6 Merge pull request #1 from Xyverz/master
Adding punctuation for clarity.
2017-05-20 21:44:00 -04:00
3588bd694e Adding punctuation for clarity. 2017-05-20 18:39:59 -07:00
68b8f37853 favicon 2017-05-20 13:30:27 -04:00
33f886ad74 favicon 2017-05-20 13:26:08 -04:00
0cd8eb02c7 favicon 2017-05-20 13:20:10 -04:00
c7e9e643fa Update readme.md 2017-05-20 12:38:30 -04:00
d380ed1f75 Update readme.md 2017-05-20 12:37:31 -04:00
684a02ae3f Update SUMMARY.md 2017-05-20 12:30:24 -04:00
b3bff6404c Update SUMMARY.md 2017-05-20 12:29:45 -04:00
046c5d332f Update SUMMARY.md 2017-05-20 12:27:07 -04:00
5e28f88707 Update book.json 2017-05-20 12:07:31 -04:00
d678899c83 Update book.json 2017-05-20 12:04:03 -04:00
2df879cbe3 Update book.json 2017-05-20 12:02:55 -04:00
9c284786e7 Workaround for the macOS caps lock delay (#1308)
* Add 80ms delay for KC_CAPS when used as a tap key

Workaround for the macOS caps lock delay

* Revert "Increase TAPPING_TERM for the Clueboard"

This reverts commit a74e69e9fa889113ee31fbc8dc7e6848fdb07576.
2017-05-19 17:24:47 -07:00
85df687348 m10a lowercase 2017-05-18 18:55:07 -04:00
0d8c73dc8d Merge pull request #1303 from cwesterlund/dvorak_dev_swe
Created a dvorak keymap for Swedish developers using Visual Studio
2017-05-18 15:31:16 -07:00
aaa01d0a4e ESC/GRAVE/TILDE better handling (#1307)
* revise HHKB bootloader_size to 4096 such that sw reset works

* cleanup esr/grave/tilde handling function
2017-05-17 18:20:01 -07:00
8da442f411 update travis script 2017-05-17 20:27:07 -04:00
a74e69e9fa Increase TAPPING_TERM for the Clueboard 2017-05-16 13:09:23 -07:00
3c5b915078 Make KC_GRV accessible 2017-05-16 13:02:22 -07:00
fcef83a5d0 Created a dvorak keymap for Swedish developers using Visual Studio 2017-05-16 15:15:42 +02:00
e5ed23c0b3 summary test 2017-05-15 22:45:20 -04:00
2513912975 Updates book.json
Auto commit by GitBook Editor
2017-05-16 02:39:49 +00:00
52562eaaea Updates book.json
Auto commit by GitBook Editor
2017-05-16 02:38:44 +00:00
3a7e0dd2f6 Updates book.json
Auto commit by GitBook Editor
2017-05-16 02:36:31 +00:00
e0689c000b Updates book.json
Auto commit by GitBook Editor
2017-05-16 02:35:00 +00:00
997a847f8c update links 2017-05-15 22:29:17 -04:00
60daffbe5d Update SUMMARY.md 2017-05-15 22:00:22 -04:00
e5b0095e6c Update SUMMARY.md 2017-05-15 22:00:14 -04:00
819f0998bd Updates SUMMARY.md
Auto commit by GitBook Editor
2017-05-16 01:50:44 +00:00
7cbbf62f5f Merge pull request #1298 from barrar/master
Anti-ghost improvement for older keyboards with empty spots in matrix
2017-05-15 12:20:17 -04:00
5d965a8d41 emojis and reorg 2017-05-15 02:19:50 -04:00
eb660ef218 emoji support but 2017-05-15 01:52:45 -04:00
b2b72058e5 change readme 2017-05-15 00:12:04 -04:00
888026ae73 nikchi flake 2017-05-15 00:10:25 -04:00
25c6ca750f added comments and made function name clearer 2017-05-14 15:36:44 -07:00
84395e8a04 whoops 2017-05-14 09:36:50 -07:00
b9b2244b82 faster, less bits :) 2017-05-14 08:01:01 -07:00
63d9698d5c faster and less bits... again 2017-05-13 19:07:05 -07:00
37f6f92765 faster and less bits 2017-05-13 18:24:43 -07:00
7b7e285a98 should be using matrix_row_t 2017-05-13 17:22:38 -07:00
acd3e97b83 a bit smaller 2017-05-13 17:01:27 -07:00
99877cdff3 a bit smaller 2017-05-13 16:57:23 -07:00
b9895771ed improvements 2017-05-13 13:19:28 -07:00
95ac79cb67 Updates SUMMARY.md
Auto commit by GitBook Editor
2017-05-13 20:17:26 +00:00
694db4130e Updates SUMMARY.md
Auto commit by GitBook Editor
2017-05-13 20:17:21 +00:00
7f4cf32af9 Updates book.json
Auto commit by GitBook Editor
2017-05-13 20:10:38 +00:00
e7da52c7de Updates book.json
Auto commit by GitBook Editor
2017-05-13 20:09:06 +00:00
43d1e05b31 Updates Home.md
Auto commit by GitBook Editor
2017-05-13 20:04:39 +00:00
05a6449d2d Updates readme.md
Auto commit by GitBook Editor
2017-05-13 18:25:08 +00:00
849ed5a6a0 anti-ghost improvement for older keyboards with empty spots in matrix 2017-05-13 08:51:20 -07:00
4fe58aa6ec Merge pull request #1 from qmk/master
pull
2017-05-13 08:37:25 -07:00
04069c94cc Merge pull request #1297 from khogeland/satan-colemak
Colemak layout for GH60 Satan
2017-05-12 16:24:51 -04:00
a82e752f64 Merge pull request #1291 from adzenith/persistent
Fix spelling of "persistent"
2017-05-12 16:24:29 -04:00
b767719fc8 Colemak layout GH60 Satan 2017-05-12 12:03:09 -07:00
8ddbf7f59f Fix spelling of "persistent"
Fixes #1201.
2017-05-11 15:32:35 -04:00
b412bb8d8c Merge pull request #1283 from TerryMathews/master
Establish support for Bathroom Epiphanies Tiger Lily controller
2017-05-11 14:34:02 -04:00
d6ce42b01c Merge pull request #1288 from Nephiel/led-set-on-layer-change
Call led_set for layer action events to update LEDs on layer changes
2017-05-11 14:32:56 -04:00
de2c51b7ca Merge pull request #1290 from shieldsd/master
Add new features to dshields keymap.
2017-05-11 14:31:11 -04:00
eb3f80b924 Add new features to dshields keymap.
- one shot layers, dynamic macros and tap dance keys
- add a basic readme.md and layout image.
2017-05-11 09:16:55 +01:00
bd2c0b9648 Call led_set for layer action events to update LEDs on layer changes 2017-05-10 19:26:39 +02:00
9a8904a9c0 Add smt keymap for Clueboard (HHKB-style layout) (#1286)
* Add keymap for smt Clueboard (HHKB layout)

* Add readme for smt Clueboard (HHKB) keymap

* Flesh out the keymap a bit more to support Colemak & Dvorak

* Update README with layout image
2017-05-08 15:32:15 -07:00
153eb95ab2 Merge pull request #1279 from awpr/master
Change to per-key eager debouncing for ErgoDox EZ.
2017-05-07 21:52:00 -04:00
d9b70cc1c9 Merge pull request #1275 from Vifon/dynamic_macro/trailing_keypresses
dynamic macros: Trim the trailing modifiers; further cleanup
2017-05-07 20:20:55 -04:00
b11a5be62c Merge pull request #1278 from shieldsd/master
Add new keymap for dshields.
2017-05-07 20:18:23 -04:00
0b050f6c33 Merge pull request #1280 from tobsn/patch-1
lowercase .jpg
2017-05-07 20:17:47 -04:00
05b356dea7 Merge pull request #1282 from coderkun/coderkun_neo2
Merge changes for coderkun’s Neo2 layout
2017-05-07 20:16:30 -04:00
7a7b57ffb1 Merge pull request #1284 from bigtunaIO/master
[Bigtuna.IO] Updating Miuni32 Layouts
2017-05-07 20:16:03 -04:00
84a358845b Fix compile error 2017-05-07 18:00:06 -04:00
22738df5f5 Merge branch 'dev' 2017-05-07 14:44:28 -07:00
d099266853 [Miuni32] Rm accidentally committed file 2017-05-07 14:42:21 -07:00
ba90cf422c Merge remote-tracking branch 'bigtunaio/layouts/adam-lee' into dev 2017-05-07 14:40:37 -07:00
f2fcab96a8 Merge remote-tracking branch 'upstream/master' 2017-05-07 14:36:10 -07:00
29df2be2a9 Merge remote-tracking branch 'upstream/master' into dev 2017-05-07 14:35:43 -07:00
3381254c65 Establish support for Bathroom Epiphanies Tiger Lily controller
Replacement controller for Filco Majestouch 2 104 key keyboard. BE
advises code will also work with the Black Petal controller - I don't
have one to test with. Tests working perfectly on my Filco.
2017-05-07 17:23:19 -04:00
230c70e285 - Initial commit for branch DK60 2017-05-07 22:56:27 +02:00
d28d390ad6 Update README for keymap “coderkun_neo2” 2017-05-06 12:25:24 +02:00
49046f621b Merge tag '0.5.43' into coderkun_neo2 2017-05-06 12:19:45 +02:00
9e7448ea89 Fix F-keys on right hand to start on first key 2017-05-06 12:17:51 +02:00
b2083e21a2 lowercase .jpg I think
i guess that fixes the image link - currently its broken
2017-05-05 23:55:06 +02:00
cb60fe393f Add new keymap for dshields. 2017-05-05 14:41:13 +01:00
a1e156a3d2 dynamic_macro.h: Do not use backlight_toggle if backlight is disabled
Fixes #1199.
2017-05-05 00:11:24 +02:00
10a7cd7e5a dynamic_macro.h: Add debug logs 2017-05-04 23:57:22 +02:00
8e94c9b4cb dynamic_macro.h: Make the documentation more clear 2017-05-04 22:39:02 +02:00
2704c163da Merge pull request #1272 from Thor77/ps2avrGB-keymap-kc-prefix
[ps2avrGB] Add KEYMAP without KC-prefix
2017-05-04 15:07:57 -04:00
3af95509b5 Merge pull request #1273 from Vifon/pr_1267_fix
Add DYN_REC_STOP to the dynamic macros, cleanup PR #1267
2017-05-04 15:07:04 -04:00
425f0a768b revise HHKB bootloader_size to 4096 such that sw reset works (#1274) 2017-05-04 10:27:35 -07:00
4b50ea15a9 dynamic_macro.h: Do not save the keys being held when stopping the recording
More specifically, we save them and then place the `macro_end` pointer
before them so they are essentially ignored and the other macro may
freely overwrite them.
2017-05-04 01:42:09 +02:00
436d661775 dynamic_macro.h: Fix an off-by-two error
We need to check whether we just passed the after-the-end point of the
other macro. Instead we were checking whether we are going to reach it
now.
2017-05-04 01:26:35 +02:00
5e2a999278 dynamic_macro.h: Always toggle the backlight twice as a notification
Apparently sometimes the backlight was toggled only once and it was left on.
2017-05-04 00:58:01 +02:00
40fe30e4d6 dynamic_macro.h: Ignore all the initial key releases
Right after the user initiates the macro recording, they usually need
to release some keys used to access the DYN_REC_START layers. It makes
sense to ignore them.

Note: The keys used to access the DYN_REC_STOP key are *not* ignored.
2017-05-04 00:14:38 +02:00
7f3b1232c4 Use KC_KEYMAP for default-keymap
and remove obsolete explicit line-separator "\"
2017-05-03 22:13:46 +02:00
38b076d22d Add KEYMAP without KC_##-prefix
and rename old variant to KEYMAP_KC
2017-05-03 22:01:02 +02:00
c8ac556e63 Update vifon keymap to use DYN_REC_STOP 2017-04-30 19:48:07 +10:00
1201d4910f Add cinaeco hhkb keymap 2017-04-30 19:30:39 +10:00
4ff40a551a Add DYN_REC_STOP to dynamic macros
Dynamic macro functionality is modified to check for `DYN_REC_STOP`, so
that macro recording can be stopped with a designated key combination
(e.g. `qs` or anything) instead of mandating the use of a `_DYN` layer.

`_DYN` layer stopping can still be done by passing `DYN_REC_STOP` within
`process_record_user()`:

    bool process_record_user(uint16_t keycode, keyrecord_t *record) {
      uint16_t macro_kc = (keycode == MO(_DYN) ? DYN_REC_STOP : keycode);
      if (!process_record_dynamic_macro(macro_kc, record)) {
        return false;
      }
      return true;
    }
2017-04-30 19:21:44 +10:00
cdef372f57 Document the MAGIC keys 2017-04-28 11:56:03 -07:00
425e7348d8 Modified ht_156 keymap 2017-04-27 23:12:43 -07:00
cd30a60d0e Change to per-key eager debouncing for ErgoDox EZ.
Empirically, waiting for N consecutive identical scans as a debouncing
strategy doesn't work very well for the ErgoDox EZ where scans are very
slow compared to most keyboards.  Instead, debounce the signals by
eagerly reporting a change as soon as one scan observes it, but then
ignoring further changes from that key for the next N scans.

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

With this approach to debouncing, much higher debounce constants are
tolerable, because latency does not increase with the constant, and
debounce countdowns on one key do not interfere with events on other
keys.  The only negative effect of increasing the constant is that the
minimum duration of a keypress increases.  Perhaps I'm just extremely
unlucky w.r.t. key switch quality, but I saw occasional bounces even
with DEBOUNCE=10; with 15, I've seen none so far.  That's around 47ms,
which seems like an absolutely insane amount of time for a key to be
bouncy, but at least it works.
2017-04-26 15:29:39 -07:00
a793e094bc Created Porting Your Keyboard to QMK (ARM and other ChibiOS CPUs) (markdown) 2017-04-21 22:24:02 -07:00
4634e3802c Added simple macros to test. 2017-04-16 17:39:04 -07:00
c4f93e237e Added media layer for ht_156 2017-04-16 16:08:31 -07:00
f9aa75fe95 Added ht_156 keymap files 2017-04-16 15:31:05 -07:00
9d4050586d Merge branch 'master' into layouts/adam-lee 2017-04-16 15:20:31 -07:00
857600aa4b Merge branch 'master' into dev 2017-04-16 15:19:20 -07:00
7e930626eb Add a personal layout for adam
Collectively we should keep on working on the "default" layout.
I am adding my own layout to freely explore adjustments
and new features.
2017-04-16 15:06:08 -07:00
22afddb8e8 Replace RALT with RSFT 2017-04-16 14:50:25 -07:00
3bfe4cdb4f Added END and other keymap file formatting. 2017-04-16 14:19:51 -07:00
1bab72383c Added DEL and F1 to F12 keys 2017-04-16 14:10:29 -07:00
ccabf70aeb Added keymap commets to default layout. 2017-04-16 13:40:03 -07:00
6c30fd04d3 Updated Keycodes (markdown) 2017-04-15 13:17:41 -07:00
a9f4596062 Add TAB, N, LSFT on Layer 2 2017-04-14 00:02:25 -07:00
f076f16e13 Add KC_T on Layer 2 2017-04-13 23:50:57 -07:00
4810a4a812 Add LCTL + L on Layer 2 2017-04-13 23:47:50 -07:00
f90321bdcb Update keymap - hopefully more usable 2017-04-13 09:25:05 -07:00
dddbcc2af3 Replace double quote with comma 2017-04-12 22:11:08 -07:00
592ff53e41 Enable RGB Animation 2017-04-12 21:19:00 -07:00
73625a603a Merge branch 'master' into miuni32-OA 2017-04-12 20:58:36 -07:00
835adb7848 colemak layout maybe 2017-04-12 23:11:51 +02:00
91b11bb4dd Update default layout
This is a 2U Spacebar layout. Spacebar is between V and B.

Issue:

	- RGB MOD does not seem to do anything
2017-04-12 01:12:16 -07:00
f9c62aa363 Link to ChibiOS 2017-04-11 06:56:12 -07:00
1b0f5e4803 Updated Compatible Microcontrollers (markdown) 2017-04-11 06:55:39 -07:00
c876bb8748 Adding notes about ARM processors 2017-04-11 06:55:24 -07:00
3899bec4b6 Merge pull request #1 from qmk/master
Catchup
2017-04-08 00:30:54 -04:00
1054d5554a Updated Custom Quantum Functions (markdown) 2017-04-04 23:14:40 -07:00
e77a5e1751 Updated Custom Quantum Functions (markdown) 2017-04-04 23:14:27 -07:00
1ca879687c Updated Custom Quantum Functions (markdown) 2017-04-04 22:35:21 -07:00
32e55f9182 Updated Custom Quantum Functions (markdown) 2017-04-04 22:33:36 -07:00
34836a16ed Updated Custom Quantum Functions (markdown) 2017-04-04 22:33:12 -07:00
b65282f69f Updated Custom Quantum Functions (markdown) 2017-04-04 22:23:01 -07:00
36757de1a7 Updated Custom Quantum Functions (markdown) 2017-04-04 22:16:16 -07:00
891d17f028 Updated Custom Quantum Functions (markdown) 2017-04-04 22:15:41 -07:00
4f48dd7c83 Created Custom Quantum Functions (markdown) 2017-04-04 22:15:17 -07:00
0e7a2a77de Updated Becoming a QMK Collaborator (markdown) 2017-04-04 21:42:08 -04:00
b096b57b0b Created Becoming a QMK Collaborator (markdown) 2017-04-04 21:21:27 -04:00
54f69d02d5 Updated _Sidebar (markdown) 2017-04-04 20:00:34 -04:00
78cf15384e Created Adding features to QMK (markdown) 2017-04-04 20:00:06 -04:00
8b218857ed Revert 923d32a0eff175fac8d67574456ad9e1bd2941eb...f39bad2a7dd5d57e4a80dd15dec21826ef7a2a67 on Key Functions 2017-04-04 19:42:58 -04:00
20d69e2ad4 clean-up keycode stuff 2017-04-04 19:42:10 -04:00
46179fbb7b split off tmk differences into own page 2017-04-04 19:32:33 -04:00
c0a8953405 Created Differences from TMK (markdown) 2017-04-04 19:30:13 -04:00
a07b83fe8e Updated Home (markdown) 2017-04-04 19:25:24 -04:00
816ef19f41 Fixed my wording 2017-04-04 15:28:57 -04:00
2e78c19054 Added note about homebrew related installation times 2017-04-04 15:26:31 -04:00
0f7a51cef5 Add information about trackpoint 2017-04-02 22:13:05 +07:00
049f906b5e Fix keymap “coderkun_neo” to use LALT instead of RALT 2017-04-01 12:17:41 +02:00
021edb6ec6 Add several Unicode symbols to keymap “coderkun_neo2” 2017-04-01 12:06:27 +02:00
c74f47555c Add keymap diagrams to readme of keymap “coderkun_neo2” 2017-04-01 11:15:20 +02:00
605c4129cc Merge branch 'master' into coderkun_neo2 2017-04-01 10:56:29 +02:00
d029e23260 Updated Home (markdown) 2017-03-31 00:39:20 +09:00
f39bad2a7d Updated Key Functions (markdown) 2017-03-31 00:35:50 +09:00
46977da417 Updated Home (markdown) 2017-03-31 00:31:28 +09:00
1a675efc4f Updated Keycodes (markdown) 2017-03-31 00:25:12 +09:00
3627a50e63 Updated Home (markdown) 2017-03-31 00:04:21 +09:00
97d6184ed0 Updated Keymap (markdown) 2017-03-30 23:57:59 +09:00
5fb058eb34 Updated Home (markdown) 2017-03-30 23:49:07 +09:00
32c511c918 Rename back to right name 2017-03-30 21:51:37 +09:00
923d32a0ef Updated Key Functions (markdown) 2017-03-30 09:14:22 +03:00
258e2afbbf Typo fixes 2017-03-29 23:41:27 +09:00
c3f7df992d Reminding TMK/QMK difference here should be good idea. 2017-03-29 23:38:06 +09:00
3c3388d7f6 Updated Mouse keys (markdown) 2017-03-27 09:54:49 +03:00
0605107f13 Updated Mouse keys (markdown) 2017-03-27 09:54:33 +03:00
18bc47ebab Created Mouse keys (markdown) 2017-03-27 09:53:27 +03:00
004a92d9a6 Updated _Sidebar (markdown) 2017-03-27 09:51:57 +03:00
2407b27243 fix link for VAGRANT_GUIDE file 2017-03-25 16:22:08 +09:00
76b9a2662a MT does work with right-hand side modifiers. See #1166. 2017-03-19 14:00:50 +01:00
3c11a8d241 Added missing codes: KC_MEDIA_FAST_FORWARD and KC_MEDIA_REWIND 2017-03-17 12:44:29 +02:00
b20106d238 Replace enter with quote and few reorgs 2017-03-08 01:12:12 -08:00
82d9abf9f3 Updated License Clarification (markdown) 2017-02-28 21:44:10 -08:00
71855087cf Removing eltang as he doesn't show up in the current git blame. 2017-02-27 10:34:21 -08:00
99fc4a330e Updated License Clarification (markdown) 2017-02-25 07:03:10 -07:00
873fee8038 Updated _Sidebar (markdown) 2017-02-22 22:07:12 -05:00
74518260b8 Updated _Sidebar (markdown) 2017-02-22 22:06:56 -05:00
4d13a8063d Updated _Sidebar (markdown) 2017-02-22 22:06:37 -05:00
0e54e9d528 Documents TT 2017-02-22 21:33:36 -05:00
3cefa5cc82 Updated _Sidebar (markdown) 2017-02-22 21:32:06 -05:00
24be0efd4b Updated _Sidebar (markdown) 2017-02-22 20:03:51 -05:00
39b51573e6 Moves Modding Your Keyboard to its own page 2017-02-22 19:59:27 -05:00
603e3fd2f6 Created Modding your keyboard (markdown) 2017-02-22 19:59:01 -05:00
729fe5d8d4 Moves porting info to its own page 2017-02-22 19:58:21 -05:00
c008ac79bf Created Porting your keyboard to QMK (markdown) 2017-02-22 19:58:11 -05:00
203d90d9fe Moves Unicode and foreign-language info into its own page. 2017-02-22 19:56:46 -05:00
6fb9c094ec Created Unicode and additional language support (markdown) 2017-02-22 19:56:31 -05:00
6e88c5014b Moves unit testing into its own page. 2017-02-22 19:53:08 -05:00
2c89a77e67 Created Unit testing (markdown) 2017-02-22 19:52:59 -05:00
89529a9f17 Updated _Sidebar (markdown) 2017-02-17 14:29:35 -08:00
ab7ffc877a Updated _Sidebar (markdown) 2017-02-17 14:29:24 -08:00
93cd47d491 Updated _Sidebar (markdown) 2017-02-17 14:28:59 -08:00
7990cd2c92 Updated _Sidebar (markdown) 2017-02-17 14:28:35 -08:00
bcc86a09d5 Updated _Sidebar (markdown) 2017-02-17 14:27:58 -08:00
7d29d5f091 Updated _Sidebar (markdown) 2017-02-17 14:27:34 -08:00
e546b7655c Updated Keymap (markdown) 2017-02-17 14:22:55 -08:00
5f9532ea66 Updated Keymap (markdown) 2017-02-17 14:20:25 -08:00
6868497557 Updated Keymap (markdown) 2017-02-17 14:14:10 -08:00
4c9dae0e3b Updated Keymap (markdown) 2017-02-17 14:11:32 -08:00
44cd6aa41a Updated Keymap (markdown) 2017-02-17 14:10:10 -08:00
0bffb86721 Updated Keymap (markdown) 2017-02-17 14:09:50 -08:00
36f8936b03 Created Keymap (markdown) 2017-02-17 14:09:35 -08:00
359245bcc6 Updated FAQ Keymap (markdown) 2017-02-17 13:18:04 -08:00
7da82a6833 Updated FAQ Keymap (markdown) 2017-02-17 13:17:23 -08:00
b51d9d5d3f Updated Home (markdown) 2017-02-16 17:15:38 -08:00
921884de5d Updated Home (markdown) 2017-02-16 17:14:16 -08:00
30bf618864 Updated Home (markdown) 2017-02-16 17:09:39 -08:00
d9527a2f74 Updated Keymap examples (markdown) 2017-02-16 17:09:12 -08:00
56e9a286b5 Updated QMK Overview (markdown) 2017-02-16 17:07:39 -08:00
cdef9bd02f Updated QMK Overview (markdown) 2017-02-16 17:06:00 -08:00
8d88997ffd Updated QMK Overview (markdown) 2017-02-16 17:05:21 -08:00
a3b575b740 Updated QMK Overview (markdown) 2017-02-16 17:04:10 -08:00
f9a7dd6cca Created Make Instructions (markdown) 2017-02-16 17:03:17 -08:00
35d9010c63 Updated QMK Overview (markdown) 2017-02-16 17:00:57 -08:00
42f167eb57 Created QMK Overview (markdown) 2017-02-16 17:00:19 -08:00
e86e6431fc Updated Home (markdown) 2017-02-16 16:39:43 -08:00
b5d35e43c7 Created Macros (markdown) 2017-02-16 16:37:25 -08:00
b5af4e6dda Updated Home (markdown) 2017-02-16 16:34:35 -08:00
c23a2fc928 Updated Home (markdown) 2017-02-16 16:31:17 -08:00
8bc52c0e86 Created Tap Dance (markdown) 2017-02-16 16:30:12 -08:00
ac3753937a Created Leader Key (markdown) 2017-02-16 16:24:28 -08:00
53fde9a1ff Updated Home (markdown) 2017-02-16 16:23:02 -08:00
5730599d18 Created Space Cadet Shift (markdown) 2017-02-16 16:22:17 -08:00
2cbd99b663 Updated _Sidebar (markdown) 2017-02-16 19:11:58 -05:00
b7501868a0 Updated Home (markdown) 2017-02-16 15:51:26 -08:00
d817d8743e Created Key Functions (markdown) 2017-02-16 15:51:14 -08:00
d791dd7c91 Updated Keycodes (markdown) 2017-02-16 15:42:13 -08:00
ce8d46d74f Updated Keycodes (markdown) 2017-02-16 15:40:49 -08:00
cad54d5313 Updated Keycodes (markdown) 2017-02-16 15:39:55 -08:00
3c766d29e2 Updated Keycodes (markdown) 2017-02-16 15:34:53 -08:00
7053347efd Updated Keycodes (markdown) 2017-02-16 15:01:36 -08:00
67c4186a9e Updated Keycodes (markdown) 2017-02-16 14:58:44 -08:00
a2a216d316 Updated Keycodes (markdown) 2017-02-16 14:50:55 -08:00
26fda6bfa3 Updated Keycodes (markdown) 2017-02-16 14:50:36 -08:00
18c09dd154 Updated Keycodes (markdown) 2017-02-16 14:48:49 -08:00
2793758db7 Updated Keycodes (markdown) 2017-02-16 14:48:27 -08:00
218bd63294 Updated Keycodes (markdown) 2017-02-16 14:47:56 -08:00
ede95297d3 Updated Keycodes (markdown) 2017-02-16 14:47:31 -08:00
b663cb63c0 Updated Keycodes (markdown) 2017-02-16 14:46:43 -08:00
0b809313d0 Updated Keycodes (markdown) 2017-02-16 14:45:49 -08:00
459f206ec7 Updated Keycodes (markdown) 2017-02-16 14:45:21 -08:00
e1dd99ea74 Updated Keycodes (markdown) 2017-02-16 14:44:32 -08:00
b0efdf8795 Updated Keycodes (markdown) 2017-02-16 14:44:23 -08:00
e6a45c5092 Updated Keycodes (markdown) 2017-02-16 14:44:12 -08:00
896a48bac0 Updated Keycodes (markdown) 2017-02-16 14:08:58 -08:00
e1dc3377a4 Updated Keycodes (markdown) 2017-02-16 14:08:45 -08:00
d2e7b8b469 Updated Keycodes (markdown) 2017-02-16 14:08:33 -08:00
fcbcff8020 Updated Keycodes (markdown) 2017-02-16 14:08:22 -08:00
615dc93fba Created Keycodes (markdown) 2017-02-16 14:07:56 -08:00
118287420f tiny spelling change "frimware" to "firmware" 2017-02-16 17:24:51 +01:00
2210a55e98 Adding Stephan Bosebeck's signoff 2017-02-15 08:31:30 -08:00
7741f2a498 Updated License Clarification (markdown) 2017-02-15 10:51:54 +11:00
c94efed1e6 Created _Sidebar (markdown) 2017-02-14 18:04:20 -05:00
eb5b52c6c6 change jackhumbert to qmk 2017-02-14 18:03:27 -05:00
5df4372c81 Updated Compatible Microcontrollers (markdown) 2017-02-14 18:01:20 -05:00
ba27a11288 Updated Home (markdown) 2017-02-14 17:57:16 -05:00
f43e6f224b Created Build Environment Setup (markdown) 2017-02-14 17:56:06 -05:00
6862ab1609 Updated Home (markdown) 2017-02-14 15:38:05 +01:00
cf97749fb7 Updated Home (markdown) 2017-02-14 02:57:15 +07:00
eddc161d5d Updated License Clarification (markdown) 2017-02-09 18:04:58 +01:00
4d905b17f4 Signing off for GPL licensing 2017-02-09 18:00:54 +01:00
c3ebd9e61b Fix indent to show code formatting, <keymap_colemak.h> was missing 2017-02-05 16:08:31 -08:00
f936a3d5c2 stuff 2017-02-03 14:10:19 +01:00
cdece6811d Signing off for GPL licensing 2017-02-03 13:16:19 +01:00
453cd25ab8 Merge branch 'master' of https://github.com/Johannes-Larsson/qmk_firmware 2017-02-03 10:49:46 +01:00
8a7daf34a2 initial keymap 2017-02-03 10:47:37 +01:00
bd43954a70 Fix username typo 2017-02-02 21:23:53 -06:00
eadb1afbd0 fixes typo 2017-02-02 18:32:21 -05:00
4344273c95 Updated License Clarification (markdown) 2017-02-02 13:55:18 -08:00
7b798789f9 Updated Home (markdown) 2017-02-02 08:51:36 -05:00
5f79da2d5f Updated Home (markdown) 2017-01-31 20:19:05 -05:00
e97a2215c7 Updated License Clarification (markdown) 2017-01-30 20:23:22 +01:00
aa491523ab Signing off my contributions 2017-01-31 02:02:59 +07:00
24a61213aa Adding signify for @IBNobody 2017-01-30 10:57:07 -08:00
3a1e9890dc Adding signify for @lindhe 2017-01-30 10:45:19 -08:00
6cf5c7e7f4 Adding signify for @yangliu 2017-01-30 10:44:38 -08:00
50dd22d1bf Updated License Clarification (markdown) 2017-01-30 17:29:40 +01:00
Seb
cb5a8feeb2 Updated License Clarification (markdown) 2017-01-30 09:11:07 +01:00
dbeda99de1 Sign off on rgblight.c 2017-01-29 20:08:12 -06:00
89799309d7 Updated License Clarification (markdown) 2017-01-29 18:31:57 -05:00
761b4e04bf Added my sign off 2017-01-29 21:25:10 +01:00
29ea5f92ca Updated License Clarification (markdown) 2017-01-29 12:02:10 -08:00
07b0a4144e Updated License Clarification (markdown) 2017-01-29 10:54:37 -08:00
66ec000886 Updated License Clarification (markdown) 2017-01-29 10:19:15 -08:00
9413e3958a Updated License Clarification (markdown) 2017-01-29 11:38:43 +02:00
8b66d71521 Updated License Clarification (markdown) 2017-01-29 10:35:44 +01:00
01c7475d12 add my consent. 2017-01-29 09:29:44 +01:00
420074d37f Updated License Clarification (markdown) 2017-01-29 02:37:49 -05:00
db7de0d47c Updated License Clarification (markdown) 2017-01-28 22:12:54 -08:00
8cad52d8f3 Updated License Clarification (markdown) 2017-01-28 22:12:43 -08:00
b1a2c4cd59 Created License Clarification Details (markdown) 2017-01-28 22:08:51 -08:00
6b7e4a9bc9 Updated License Clarification (markdown) 2017-01-28 22:08:15 -08:00
8567544174 Updated License Clarification (markdown) 2017-01-28 22:07:07 -08:00
d5de7e20fd Updated License Clarification (markdown) 2017-01-28 22:04:05 -08:00
8347993d6b Updated License Clarification (markdown) 2017-01-28 22:02:36 -08:00
e364b2267a Updated License Clarification (markdown) 2017-01-27 18:35:59 -08:00
128640a7df Updated License Clarification (markdown) 2017-01-27 18:34:58 -08:00
646d1f83a5 Updated License Clarification (markdown) 2017-01-27 18:31:23 -08:00
143a4ff78f Updated License Clarification (markdown) 2017-01-27 18:19:12 -08:00
00010b47bc Updated License Clarification (markdown) 2017-01-27 17:54:48 -08:00
757a79636b Updated License Clarification (markdown) 2017-01-27 17:54:14 -08:00
35737ee07f Updated License Clarification (markdown) 2017-01-27 17:51:29 -08:00
d51ad5db0f Updated License Clarification (markdown) 2017-01-27 17:47:43 -08:00
223494e691 Updated License Clarification (markdown) 2017-01-27 17:44:58 -08:00
3df44ecfc8 Updated License Clarification (markdown) 2017-01-27 17:08:57 -08:00
858efff8e5 Updated License Clarification (markdown) 2017-01-27 16:27:36 -08:00
6a54982324 Updated License Clarification (markdown) 2017-01-27 16:21:25 -08:00
5942b0f103 Updated License Clarification (markdown) 2017-01-27 14:54:42 -08:00
0eebccb283 Updated License Clarification (markdown) 2017-01-27 14:51:58 -08:00
d524b3f5e5 Updated License Clarification (markdown) 2017-01-27 14:26:21 -08:00
c0a04929f2 Updated License Clarification (markdown) 2017-01-27 14:21:31 -08:00
9adb6f777b Updated License Clarification (markdown) 2017-01-27 14:14:19 -08:00
5c277651a3 Updated License Clarification (markdown) 2017-01-27 11:30:25 -08:00
69581f47d5 Updated License Clarification (markdown) 2017-01-27 10:39:31 -08:00
bc68d4ef2c Updated License Clarification (markdown) 2017-01-27 10:38:03 -08:00
4bba3be825 Updated License Clarification (markdown) 2017-01-27 10:35:54 -08:00
228e4add0b Created License Clarification (markdown) 2017-01-27 10:02:33 -08:00
b420185f5b Added KC_QUES, updated file path. 2017-01-19 20:38:13 -05:00
032712866f Link correctly to keycode.txt 2017-01-13 10:21:47 -05:00
942b78e8c2 Updated Home (markdown) 2017-01-11 18:36:44 -05:00
1cefc94082 Destroyed Build Options (org) 2017-01-11 18:36:08 -05:00
e7fb34a910 Updated Build Options (org) 2017-01-11 18:25:02 -05:00
67868d39f8 Created Build Options (org) 2017-01-11 18:21:41 -05:00
8d61e884f2 Fix dfu-programmer link 2017-01-10 14:58:56 -05:00
166f428a2b Updated Home (markdown) 2017-01-09 16:29:04 +01:00
4587248cda add warning to install_dep 2016-12-30 11:09:58 -05:00
b0ade6dc98 Fix return value of hex_to_keycode() function in keymap “coderkun_neo2” 2016-12-28 20:08:45 +01:00
bdca5c22fe Language edits 2016-12-21 21:54:04 -05:00
7571474874 Updated Memory write error, use debug for more info (markdown) 2016-12-20 11:11:45 -05:00
dbf13e9c98 Created Memory write error, use debug for more info (markdown) 2016-12-20 09:51:13 -05:00
b251f2582e Updated Home (markdown) 2016-12-06 09:48:37 -05:00
b22b1fd5fb copy over readme for final time 2016-12-06 09:44:22 -05:00
b7533e0abf Documents TO. 2016-10-12 22:19:35 -04:00
c66b090d4c Copy the main readme.md here 2016-09-19 15:27:06 -04:00
d352a8bc29 Importing and building the project 2016-09-18 21:24:56 +02:00
ae7c3a0692 Instruct to use the Eclipse installer instead of extracting the package, describe first launch and plugin installation. 2016-09-18 15:03:27 +02:00
22e234f9b5 Initial version 2016-09-18 13:27:27 +02:00
cab29b61e4 Updated Home (markdown) 2016-07-03 21:34:20 -04:00
abfc9265c4 Updated Home (markdown) 2016-07-03 21:33:56 -04:00
6b67129c51 Destroyed Build Guide (markdown) 2016-07-03 21:33:40 -04:00
c6d0da9a37 Updated FAQ Build (markdown) 2016-06-04 16:13:04 -04:00
e04aff10fa Updated FAQ Build (markdown) 2016-06-04 16:12:41 -04:00
049e5916a4 Updated Home (markdown) 2016-03-28 02:22:04 -03:00
71614e5b98 Updated Home (markdown) 2016-03-28 02:20:27 -03:00
b803589e29 Build guide in the wiki section 2016-03-28 02:14:52 -03:00
2b0b5d804a Add Atreus 2016-02-08 18:23:15 +07:00
tmk
29664234e2 Updated TMK Based Projects (markdown) 2016-02-05 13:33:43 +09:00
tmk
e5e7dbebf6 Updated TMK Based Projects (markdown) 2016-02-05 09:22:16 +09:00
tmk
6778c175f5 Updated TMK Based Projects (markdown) 2016-02-05 09:22:01 +09:00
tmk
a38fc1beae Created Report Descriptor (markdown) 2016-02-02 14:41:14 +09:00
tmk
79f28ac3bd Created USB HID (markdown) 2016-01-29 01:11:35 +09:00
5a7d3dce95 Updated TMK Based Projects (markdown) 2016-01-27 14:30:52 +01:00
aee41b1293 Updated TMK Based Projects (markdown) 2016-01-27 13:45:50 +01:00
6b368a8edc Added link to embedding page 2016-01-27 13:44:43 +01:00
e13934c60a Updated Embedding (markdown) 2016-01-27 13:42:44 +01:00
611ca00918 Added a warning 2016-01-27 13:42:05 +01:00
5eef65f9b4 Created Embedding (markdown) 2016-01-27 13:40:02 +01:00
9b9a1a946e Typo 2016-01-27 12:58:13 +01:00
tmk
78783e23d8 Created Kiibohd (asciidoc) 2016-01-27 08:48:49 +09:00
943d1cc673 Updated TMK Based Projects (markdown) 2016-01-17 15:53:36 +01:00
f4b5b8486f Updated TMK Based Projects (markdown) 2016-01-16 17:18:58 +01:00
006a1f806a Added link to project 2016-01-16 16:53:55 +01:00
0e5b64f092 Rename title 2016-01-16 16:52:46 +01:00
c4f5db9351 Update links to documentation 2016-01-16 16:12:40 +01:00
266aae0ebc Adding the S60-X to the list of supported keyboards. 2016-01-16 00:16:12 -02:00
tmk
85d56eea38 Updated TMK Based Projects (markdown) 2016-01-16 11:08:36 +09:00
tmk
97fe4201aa Updated Keymap examples (markdown) 2016-01-16 10:56:01 +09:00
tmk
32df47053b Updated TMK Based Projects (markdown) 2016-01-16 10:24:45 +09:00
tmk
8bccc5d217 Updated TMK Own Projects (markdown) 2016-01-16 10:24:16 +09:00
tmk
b3f45e2efd Updated TMK Own Projects (markdown) 2016-01-16 10:22:35 +09:00
tmk
f743e65ab7 Updated Home (markdown) 2016-01-16 10:21:46 +09:00
tmk
5133bb146e Updated TMK based Projects (markdown) 2016-01-16 10:21:23 +09:00
tmk
f95480e3ca Updated TMK own projects (markdown) 2016-01-16 10:21:06 +09:00
tmk
053b3b9847 Created TMK own projects (markdown) 2016-01-16 10:20:33 +09:00
tmk
53278bc658 Updated TMK based Projects (markdown) 2016-01-16 10:18:37 +09:00
tmk
4a34a192b5 Updated Home (markdown) 2016-01-16 10:18:17 +09:00
tmk
a5bf8cc4e1 Updated TMK Projects (markdown) 2016-01-16 10:17:09 +09:00
9335aa3965 Fix broken link to keymap 2016-01-04 09:57:49 -07:00
tmk
f791834c68 Updated FAQ (markdown) 2016-01-04 19:38:20 +09:00
tmk
b681171774 Updated FAQ (markdown) 2016-01-04 11:41:19 +09:00
e6423f50a4 Updated FAQ (markdown) 2015-12-29 17:05:50 -05:00
tmk
dd5bfb6f3e Created Test for ASCIIDOC (asciidoc) 2015-12-17 13:48:33 +09:00
tmk
de235b3e07 Updated Home (markdown) 2015-12-17 12:32:38 +09:00
tmk
23c6af02c2 Updated FAQ (markdown) 2015-12-17 12:28:56 +09:00
tmk
1b495b94a9 Updated FAQ Keymap (markdown) 2015-12-14 15:58:09 +09:00
tmk
33b55c11a8 Updated FAQ Keymap (markdown) 2015-12-14 15:55:43 +09:00
tmk
59adb168b4 Updated FAQ Build (markdown) 2015-12-10 06:11:33 +09:00
tmk
f3b7863b56 Updated FAQ Build (markdown) 2015-12-09 14:45:22 +09:00
tmk
bf88dfa5db Updated FAQ Keymap (markdown) 2015-12-09 12:04:14 +09:00
tmk
4e9170156e Updated FAQ Keymap (markdown) 2015-12-09 12:03:07 +09:00
tmk
fbbf8b501f Updated Keymap examples (markdown) 2015-12-09 10:16:04 +09:00
tmk
304be86c80 Updated Keymap examples (markdown) 2015-12-09 10:13:29 +09:00
tmk
45ce7048d5 Updated Keymap examples (markdown) 2015-12-07 09:48:35 +09:00
tmk
79a23399e8 Created Keymap examples (markdown) 2015-12-07 09:47:52 +09:00
tmk
77a877f5d3 Updated Home (markdown) 2015-12-07 09:47:32 +09:00
tmk
7139a0704b Updated Other Protjects (markdown) 2015-12-05 13:50:39 +09:00
tmk
869e6316d0 Updated Other Protjects (markdown) 2015-12-05 13:47:59 +09:00
tmk
70cf332498 Created Other Protjects (markdown) 2015-12-05 13:45:42 +09:00
tmk
b2d1c4950c Updated Home (markdown) 2015-12-05 13:44:05 +09:00
tmk
0e8f5b0d91 Updated Home (markdown) 2015-12-05 13:43:32 +09:00
tmk
d03be6dbcb Updated Projects (markdown) 2015-12-05 13:43:04 +09:00
tmk
1ef3dee821 Updated FAQ Build (markdown) 2015-11-27 10:59:33 +09:00
tmk
79aa1f3484 Updated FAQ Build (markdown) 2015-11-27 10:59:07 +09:00
tmk
a5fc9c9165 Updated FAQ Build (markdown) 2015-11-27 10:56:20 +09:00
03c1f72594 Updated file path for tmk_core 2015-11-11 12:06:40 +00:00
tmk
8002d8dc29 Updated FAQ Keymap (markdown) 2015-10-29 06:21:33 +09:00
tmk
c38bac480b Updated FAQ Keymap (markdown) 2015-10-29 06:03:25 +09:00
tmk
483de13114 Updated FAQ Keymap (markdown) 2015-10-29 05:50:25 +09:00
tmk
06e9019a06 Updated FAQ Keymap (markdown) 2015-10-21 07:03:53 +09:00
tmk
caf197b905 Updated FAQ Keymap (markdown) 2015-10-21 07:03:11 +09:00
tmk
ee732d7753 Updated FAQ Keymap (markdown) 2015-10-21 07:03:01 +09:00
tmk
2196a5facf Updated FAQ (markdown) 2015-10-07 16:31:02 +09:00
tmk
d28ecc1e4a Updated FAQ (markdown) 2015-10-07 16:29:38 +09:00
tmk
eeaef60ffa Updated FAQ Keymap (markdown) 2015-10-07 04:09:04 +09:00
tmk
6e1a6d1981 Updated FAQ Keymap (markdown) 2015-10-06 15:57:00 +09:00
tmk
50e0b35560 Updated FAQ Keymap (markdown) 2015-10-06 15:56:44 +09:00
tmk
f7ae70962c Updated FAQ Keymap (markdown) 2015-10-06 15:49:17 +09:00
tmk
1b0fec884f Updated FAQ Keymap (markdown) 2015-10-06 15:43:51 +09:00
tmk
7328ba0f3b Updated FAQ Keymap (markdown) 2015-10-05 04:05:56 +09:00
tmk
9d25855bb0 Updated FAQ Keymap (markdown) 2015-10-05 04:02:42 +09:00
tmk
08f1bde358 Updated FAQ Keymap (markdown) 2015-10-05 03:51:26 +09:00
tmk
db193b8cf9 Updated FAQ (markdown) 2015-10-03 07:04:27 +09:00
tmk
8d47fe7bc7 Updated FAQ (markdown) 2015-10-03 07:03:58 +09:00
tmk
6163f0ea51 Updated FAQ Keymap (markdown) 2015-09-27 05:48:41 +09:00
tmk
8008a8a9dc Updated FAQ (markdown) 2015-09-19 18:31:10 +09:00
tmk
c8f3e845e7 Updated FAQ Build (markdown) 2015-08-31 10:40:59 +09:00
tmk
14466e820d Updated Previously Asked Questions (markdown => asciidoc) 2015-08-10 10:20:55 +09:00
tmk
86fa48e1ee Updated Previously Asked Questions (mediawiki => markdown) 2015-08-10 10:20:26 +09:00
tmk
7c8a062cd7 Updated Previously Asked Questions (asciidoc => mediawiki) 2015-08-10 10:20:05 +09:00
tmk
bd9d75701c Updated Previously Asked Questions (asciidoc) 2015-08-10 10:17:13 +09:00
tmk
d5bbecc134 Updated Previously Asked Questions (asciidoc) 2015-08-10 10:17:01 +09:00
tmk
3290a75dd0 Updated Previously Asked Questions (asciidoc) 2015-08-10 10:16:36 +09:00
tmk
b216768cef Updated Previously Asked Questions (asciidoc) 2015-08-10 10:16:16 +09:00
tmk
c797334f51 Updated Previously Asked Questions (asciidoc) 2015-08-10 10:15:47 +09:00
tmk
f98e803e5c Updated Previously Asked Questions (asciidoc) 2015-08-10 10:04:23 +09:00
tmk
c84d220b07 Updated Previously Asked Questions (asciidoc) 2015-08-10 10:03:41 +09:00
tmk
3ea6555f88 Updated Previously Asked Questions (asciidoc) 2015-08-10 10:02:46 +09:00
tmk
13b8908951 Updated Previously Asked Questions (asciidoc) 2015-08-10 09:43:38 +09:00
tmk
4a37910295 Updated Previously Asked Questions (mediawiki => asciidoc) 2015-08-10 09:43:16 +09:00
tmk
2945841985 Updated Previously Asked Questions (mediawiki) 2015-08-10 09:35:55 +09:00
tmk
08e31e7995 Updated Previously Asked Questions (markdown => mediawiki) 2015-08-10 09:34:59 +09:00
tmk
7d3dda21a5 Updated Previously Asked Questions (markdown) 2015-08-09 16:18:55 +09:00
tmk
e451b38848 Updated Previously Asked Questions (markdown) 2015-08-09 16:17:29 +09:00
tmk
dcc1abcdd5 Updated Previously Asked Questions (markdown) 2015-08-09 16:17:05 +09:00
tmk
94ccc65542 Updated Previously Asked Questions (markdown) 2015-08-09 16:13:34 +09:00
tmk
c25b5b0093 Created Previously Asked Questions (markdown) 2015-08-09 16:12:01 +09:00
tmk
2c22bbda5a Updated FAQ Keymap (markdown) 2015-07-04 06:10:28 +09:00
410bc48e5a Updated FAQ (markdown) 2015-06-09 16:32:24 +06:00
tmk
cd71aeb63e Updated FAQ Keymap (markdown) 2015-05-16 23:58:50 +09:00
tmk
81545bbe10 Updated FAQ Build (markdown) 2015-05-09 13:33:56 +09:00
tmk
b4f1638643 Updated FAQ (markdown) 2015-05-06 10:12:46 +09:00
tmk
c9b11560bf Updated FAQ (markdown) 2015-05-06 10:07:23 +09:00
tmk
ff1130f76d Updated FAQ (markdown) 2015-05-06 08:27:22 +09:00
tmk
3e0c1937f4 Updated Git subtree (markdown) 2015-04-28 10:27:11 +09:00
tmk
398c4feed4 Created Git subtree (markdown) 2015-04-28 10:26:11 +09:00
tmk
5d7a4e3059 Updated FAQ (markdown) 2015-04-13 10:53:40 +09:00
tmk
ac01b69edf Updated FAQ (markdown) 2015-04-13 10:51:28 +09:00
tmk
5031ae08bf Updated FAQ (markdown) 2015-04-13 10:50:34 +09:00
tmk
2c11165fb6 Updated FAQ Keymap (markdown) 2015-03-24 16:39:28 +09:00
tmk
9761907332 Updated FAQ Keymap (markdown) 2015-03-24 16:39:04 +09:00
tmk
2931b8c18c Updated FAQ Keymap (markdown) 2015-03-24 16:31:11 +09:00
tmk
0eff2b199d Updated FAQ Keymap (markdown) 2015-03-24 16:30:35 +09:00
tmk
5e5aee44e5 Updated FAQ Keymap (markdown) 2015-03-09 20:34:06 +09:00
tmk
506c776300 Updated FAQ Keymap (markdown) 2015-03-09 20:30:35 +09:00
tmk
d6141c0bce Updated FAQ Keymap (markdown) 2015-03-09 20:28:55 +09:00
tmk
b64631d02c Updated FAQ Keymap (markdown) 2015-03-09 20:23:18 +09:00
tmk
b321f44ff6 Updated FAQ Keymap (markdown) 2015-03-09 20:22:02 +09:00
tmk
1650d4692c Updated FAQ Keymap (markdown) 2015-03-07 14:19:44 +09:00
tmk
64e64e5153 Updated FAQ Build (markdown) 2015-01-22 13:13:53 +09:00
tmk
12e5912c9a Updated FAQ Build (markdown) 2015-01-14 09:35:19 +09:00
tmk
756706a704 Updated FAQ Keymap (markdown) 2015-01-14 09:25:28 +09:00
tmk
126ba262ef Updated FAQ Build (markdown) 2015-01-14 09:25:15 +09:00
tmk
8bb74c6062 Updated FAQ (markdown) 2015-01-14 09:24:15 +09:00
tmk
c716bc0234 Updated FAQ Build (markdown) 2015-01-14 09:23:20 +09:00
tmk
7c80d1d777 Updated FAQ (markdown) 2015-01-14 09:20:55 +09:00
tmk
416f946463 Updated FAQ (markdown) 2015-01-14 09:20:06 +09:00
tmk
9f02c070ca Updated FAQ (markdown) 2015-01-14 09:16:02 +09:00
tmk
00ec258e31 Created FAQ Build (markdown) 2015-01-14 09:15:50 +09:00
tmk
3c27d7b048 Updated FAQ (markdown) 2015-01-14 09:15:29 +09:00
tmk
28c9339859 Updated Home (markdown) 2015-01-14 09:13:36 +09:00
tmk
07baa1b65d Updated FAQ Keymap (markdown) 2015-01-14 09:11:36 +09:00
tmk
b33cd7d7ec Updated mbed cortex porting (markdown) 2015-01-14 07:03:23 +09:00
tmk
111593b6d8 Updated mbed cortex porting (markdown) 2015-01-14 07:03:11 +09:00
tmk
4785e6d228 Updated mbed cortex porting (markdown) 2015-01-14 07:02:26 +09:00
tmk
a94c683ab9 Updated FAQ Keymap (markdown) 2015-01-14 05:19:43 +09:00
tmk
f27207e807 Updated FAQ Keymap (markdown) 2015-01-14 05:16:09 +09:00
tmk
2f44de6240 Updated FAQ Keymap (markdown) 2015-01-14 05:15:42 +09:00
tmk
59c8a733e6 Updated FAQ Keymap (markdown) 2015-01-14 05:03:47 +09:00
tmk
2acb2f0937 Updated mbed cortex porting (markdown) 2014-12-29 20:30:46 -08:00
tmk
4b46263952 Updated mbed cortex porting (markdown) 2014-12-29 20:30:31 -08:00
tmk
48a3cbf9b3 Updated mbed cortex porting (markdown) 2014-12-29 20:19:32 -08:00
tmk
edfb9363dd Updated mbed cortex porting (markdown) 2014-12-29 20:18:04 -08:00
tmk
75cb446d36 Created mbed cortex porting (markdown) 2014-12-29 20:17:06 -08:00
tmk
464b9a80d4 Updated Home (markdown) 2014-12-29 20:15:33 -08:00
tmk
b105d83bce Updated FAQ (markdown) 2014-12-15 19:07:42 -08:00
tmk
69fe8cf232 Updated FAQ (markdown) 2014-11-26 21:06:32 -08:00
tmk
bf5638e511 Updated FAQ (markdown) 2014-11-26 20:17:46 -08:00
tmk
f7172ff5a6 Updated FAQ Keymap (markdown) 2014-11-26 18:13:26 -08:00
tmk
cca7b10727 Updated FAQ Keymap (markdown) 2014-11-26 18:12:44 -08:00
tmk
d4437d6694 Updated FAQ Keymap (markdown) 2014-11-26 18:12:07 -08:00
tmk
4178b00533 Updated FAQ Keymap (markdown) 2014-11-26 18:11:41 -08:00
tmk
686476fa93 Updated FAQ (markdown) 2014-11-26 17:42:52 -08:00
tmk
2a7bd276a4 Updated FAQ (markdown) 2014-11-26 17:41:59 -08:00
tmk
e40086b2fe Updated FAQ (markdown) 2014-11-26 17:41:40 -08:00
tmk
bdafdf1ef8 Updated FAQ (markdown) 2014-11-26 17:40:28 -08:00
tmk
083c77390a Created FAQ Keymap (markdown) 2014-11-26 17:40:02 -08:00
tmk
1793bfd096 Updated Home (markdown) 2014-11-26 17:38:54 -08:00
tmk
b129491366 Updated Home (markdown) 2014-11-26 17:38:39 -08:00
tmk
ae8ddde1cf Updated Home (markdown) 2014-11-26 17:35:24 -08:00
tmk
43f121497f Created HHKB Alt controller (markdown) 2014-11-23 19:07:09 -08:00
tmk
3d9d4bfe3e Updated Home (markdown) 2014-11-23 19:03:45 -08:00
tmk
67416629e3 Updated FAQ (markdown) 2014-11-16 22:24:54 -08:00
tmk
00a8847daf Updated FAQ (markdown) 2014-11-16 22:00:14 -08:00
tmk
c5dfee04af Updated FAQ (markdown) 2014-11-16 21:50:43 -08:00
tmk
e6d58d5ac2 Updated FAQ (markdown) 2014-11-16 21:49:31 -08:00
tmk
e52a7cf448 Updated FAQ (markdown) 2014-11-08 21:32:43 -08:00
tmk
9e51e54240 Updated FAQ (markdown) 2014-11-08 21:32:20 -08:00
tmk
fb3c7c0572 Updated FAQ (markdown) 2014-11-02 18:02:12 -08:00
tmk
b4eea94baa Updated FAQ (markdown) 2014-11-02 17:58:42 -08:00
tmk
f91c584a44 Updated FAQ (markdown) 2014-10-16 23:42:21 -07:00
tmk
7219c4a4b6 Updated FAQ (markdown) 2014-09-28 00:53:13 -07:00
tmk
6ec6c8017f Updated FAQ (markdown) 2014-09-28 00:44:31 -07:00
tmk
8daad815e8 Updated FAQ (markdown) 2014-09-28 00:41:36 -07:00
tmk
30bbfe92b3 Updated FAQ (markdown) 2014-06-19 21:14:25 -07:00
tmk
3c446334e9 Updated FAQ (markdown) 2014-06-19 21:12:04 -07:00
tmk
520ddc19a1 Updated FAQ (markdown) 2014-05-19 18:39:29 -07:00
tmk
f1ed69fa7b Updated FAQ (markdown) 2014-05-19 18:38:09 -07:00
tmk
b828fff788 Updated FAQ (markdown) 2014-05-16 16:26:25 -07:00
tmk
7fad7ddb0b Updated FAQ (markdown) 2014-05-14 12:38:02 -07:00
tmk
ea13eaf1c0 Updated FAQ (markdown) 2014-05-12 17:56:34 -07:00
tmk
50a763a460 Updated FAQ (markdown) 2014-05-12 17:56:12 -07:00
tmk
fa9ce5771f Updated FAQ (markdown) 2014-04-30 20:45:43 -07:00
tmk
b1a827aaa6 Updated FAQ (markdown) 2014-04-26 12:53:55 -07:00
tmk
62d5ca9b81 Updated Projects (markdown) 2014-04-25 21:13:36 -07:00
tmk
2dbd047aa5 Updated Home (markdown) 2014-04-25 20:38:27 -07:00
tmk
9893fac5c5 Created Projects (markdown) 2014-04-25 20:37:46 -07:00
tmk
22d1aeb409 Updated FAQ (markdown) 2014-04-21 18:11:45 -07:00
tmk
6fc76b224b Updated FAQ (markdown) 2014-04-21 18:10:48 -07:00
tmk
7963233140 Updated FAQ (markdown) 2014-04-14 16:16:06 -07:00
tmk
0f34b9fd44 Updated FAQ (markdown) 2014-04-14 15:31:02 -07:00
tmk
d3388d3468 Updated FAQ (markdown) 2014-04-11 19:32:25 -07:00
tmk
cecb912e53 Updated Compatible Microcontrollers (markdown) 2014-04-10 19:14:41 -07:00
tmk
2f0837bd6e Updated FAQ (markdown) 2014-03-25 08:01:56 -07:00
tmk
0e03275c40 Updated FAQ (markdown) 2014-03-25 08:01:30 -07:00
tmk
ae74a81356 Updated FAQ (markdown) 2014-03-25 08:00:41 -07:00
tmk
43669fb270 Updated FAQ (markdown) 2014-03-24 17:01:43 -07:00
tmk
01a218f36b Updated FAQ (markdown) 2014-03-16 13:39:50 -07:00
tmk
5383d37925 Updated FAQ (markdown) 2014-03-06 17:07:50 -08:00
tmk
10932b8f90 Updated FAQ (markdown) 2014-03-06 17:07:06 -08:00
tmk
a25df9432b Updated FAQ (markdown) 2014-03-06 17:04:09 -08:00
tmk
bf6d2b5ebd Updated FAQ (markdown) 2014-03-03 17:20:54 -08:00
tmk
700a77a0f3 Updated FAQ (markdown) 2014-03-03 17:17:50 -08:00
tmk
4464a288a1 Updated FAQ (markdown) 2014-03-03 17:16:27 -08:00
tmk
f893628865 Updated FAQ (markdown) 2014-03-03 15:17:00 -08:00
tmk
ab4f24a16a Updated FAQ (markdown) 2014-03-03 15:08:02 -08:00
tmk
fb94b97e48 Updated FAQ (markdown) 2014-03-02 22:16:28 -08:00
tmk
e7069410ff Updated FAQ (markdown) 2014-03-01 12:53:20 -08:00
tmk
cd7cba54fe Updated FAQ (markdown) 2014-03-01 12:34:51 -08:00
tmk
ef9902f5ed Updated FAQ (markdown) 2014-03-01 12:13:29 -08:00
tmk
51e37dc5cd Updated FAQ (markdown) 2014-03-01 12:12:59 -08:00
tmk
81055457fa Updated FAQ (markdown) 2014-02-28 18:09:22 -08:00
tmk
5e2f882230 Updated FAQ (markdown) 2014-02-28 18:07:46 -08:00
tmk
50fc1a5a5b Updated FAQ (markdown) 2014-02-28 17:44:30 -08:00
tmk
7a8e9cc136 Created FAQ (markdown) 2014-02-28 17:42:00 -08:00
tmk
1a0be5e750 Updated Home (markdown) 2014-02-28 17:23:32 -08:00
767690aa59 Adding link to the Compatible Microcontrollers list. 2014-01-25 18:11:37 -08:00
1f419424c4 Updated to confirm ATmega32U2 on a custom board. 2014-01-25 18:10:11 -08:00
tmk
444e7cc53b Updated Compatible Microcontrollers (markdown) 2013-11-17 16:39:10 -08:00
f427a6c6d8 Created page. Initial list is the ATmega32U4 from the Teensy. 2013-11-17 11:47:36 -08:00
tmk
b0365c7ac3 Initial Commit 2012-05-13 18:36:16 -07:00
293 changed files with 13444 additions and 425 deletions

1
.gitignore vendored
View File

@ -22,6 +22,7 @@ quantum/version.h
.idea/
CMakeLists.txt
.DS_STORE
/util/wsl_downloaded
# Eclipse/PyCharm/Other IDE Settings
.cproject

View File

@ -15,6 +15,8 @@ RUN apt-get update && apt-get install --no-install-recommends -y build-essential
binutils-arm-none-eabi \
libnewlib-arm-none-eabi \
git \
software-properties-common \
avrdude \
&& rm -rf /var/lib/apt/lists/*
ENV keyboard=ergodox
@ -23,4 +25,4 @@ ENV keymap=default
VOLUME /qmk
WORKDIR /qmk
CMD make clean ; make keyboard=${keyboard} subproject=${subproject} keymap=${keymap}
CMD make clean; make;

23
book.json Normal file
View File

@ -0,0 +1,23 @@
{
"structure": {
"readme": "Home.md"
},
"plugins" : ["toolbar", "edit-link", "anchors"],
"pluginsConfig": {
"edit-link": {
"base": "https://github.com/qmk/qmk_firmware/edit/master/docs",
"label": "Suggest an edit"
},
"toolbar": {
"buttons":
[
{
"label": "QMK Firmware",
"icon": "fa fa-github",
"url": "https://github.com/qmk/qmk_firmware"
}
]
}
},
"root": "./docs/"
}

View File

@ -0,0 +1,7 @@
If you have an idea for a custom feature or extra hardware connection, we'd love to accept it into QMK! These are generally done via [pull request](https://github.com/qmk/qmk_firmware/pulls) after forking, and here are some things to keep in mind when creating one:
* **Disable by default** - memory is a pretty limited on most chips QMK supports, and it's important that current keymaps aren't broken, so please allow your feature to be turned **on**, rather than being turned off. If you think it should be on by default, or reduces the size of the code, [open an issue](https://github.com/qmk/qmk_firmware/issues) for everyone to discuss it!
* **Compile locally before submitting** - hopefully this one is obvious, but things need to compile! Our Travis system will catch any issues, but it's generally faster for you to compile a few keyboards locally instead of waiting for the results to come back.
* **Consider subprojects and different chip-bases** - there are several keyboards that have subprojects that have allow for slightly different configurations, and even different chip-bases. Try to make a feature supported in ARM and AVR, or automatically disabled in one that doesn't work.
* **Explain your feature** - submitting a markdown write-up of what your feature does with your PR may be needed, and it will allow a collaborator to easily copy it into the wiki for documentation (after proofing and editing).
* **Don't refactor code** - to maintain a clear vision of how things are laid out in QMK, we try to plan out refactors in-depth, and have a collaborator make the changes. If you have an idea for refactoring, or suggestions, [open an issue](https://github.com/qmk/qmk_firmware/issues).

View File

@ -0,0 +1,7 @@
A QMK collaborator is a keyboard maker/designer that is interested in helping QMK grow and fully support their keyboard(s), and encouraging their users/customers to submit features, ideas, and keymaps. We're always looking to add more keyboards and collaborators, but we ask that they fulfill these requirements:
* **Have a PCB available for sale** - unfortunately there's just too much variation and complications with handwired keyboards.
* **Maintain the your keyboard's directory** - this may just require an initial setup to get your keyboard working, but it could also include accommodating changes made to QMK's core.
* **Approve and merge your keyboard's keymap pull requests** - we like to encourage users to contribute their keymaps for others to see and work from when creating their own.
If you feel you meet these requirements, shoot us an email at hello@qmk.fm with an introduction and some links to your keyboard!

View File

@ -0,0 +1,119 @@
### Windows 10
#### Creators Update
If you have Windows 10 with Creators Update or later, you can build and flash the firmware directly. Before the Creators Update, only building was possible. If you don't have it yet or if are unsure, follow [these instructions](https://support.microsoft.com/en-us/instantanswers/d4efb316-79f0-1aa1-9ef3-dcada78f3fa0/get-the-windows-10-creators-update).
#### Windows Subsystem for Linux
In addition to the Creators Update, you need Windows 10 Subystem for Linux, so install it following [these instructions](http://www.howtogeek.com/249966/how-to-install-and-use-the-linux-bash-shell-on-windows-10/). If you already have the Windows 10 Subsystem for Linux from the Anniversary update it's recommended that you [upgrade](https://betanews.com/2017/04/14/upgrade-windows-subsystem-for-linux/) it to 16.04LTS, because some keyboards don't compile with the toolchains included in 14.04LTS. Note that you need to know what your are doing if you chose the `sudo do-release-upgrade` method.
#### Git
If you already have cloned the repository on your Windows file system you can ignore this section.
You will need to clone the repository to your Windows file system using the normal Git for Windows and **not** the WSL Git. So if you haven't installed Git before, [download](https://git-scm.com/download/win) and install it. Then [set it up](https://git-scm.com/book/en/v2/Getting-Started-First-Time-Git-Setup), it's important that you setup the e-mail and user name, especially if you are planning to contribute.
Once Git is installed, open the Git bash command and change the directory to where you want to clone QMK, note that you have to use forward slashes, and that your c drive is accessed like this `/c/path/to/where/you/want/to/go`. Then run `git clone --recurse-submodules https://github.com/qmk/qmk_firmware`, this will create a new folder `qmk_firmware` as a subfolder of the current one.
#### Toolchain setup
The Toolchain setup is done through the Windows Subsystem for Linux, and the process is fully automated. If you want to do everything manually, there are no other instructions than the scripts themselves, but you can always open issues and ask for more information.
1. Open "Bash On Ubuntu On Windows" from the start menu.
2. Go to the directory where you cloned `qmk_firmware`. Note that the paths start with `/mnt/` in the WSL, so you have to write for example `cd /mnt/c/path/to/qmk_firmware`.
3. Run `util/wsl_install.sh` and follow the on-screen instructions.
4. Close the Bash command window, and re-open it.
5. You are ready to compile and flash the firmware!
#### Some important things to keep in mind
* You can run `util/wsl_install.sh` again to get all the newest updates.
* Your QMK repository need to be on a Windows file system path, since WSL can't run executables outside it.
* The WSL Git is **not** compatible with the Windows Git, so use the Windows Git Bash or a windows Git GUI for all Git operations
* You can edit files either inside WSL or normally using Windows, but note that if you edit makefiles or shell scripts, make sure you are using an editor that saves the files with Unix line endings. Otherwise the compilation might not work.
### Windows (Vista and later)
1. If you have ever installed WinAVR, uninstall it.
2. Install [MHV AVR Tools](https://infernoembedded.com/sites/default/files/project/MHV_AVR_Tools_20131101.exe). Disable smatch, but **be sure to leave the option to add the tools to the PATH checked**.
3. If you are going to flash Infinity based keyboards you will need to install dfu-util, refer to the instructions by [Input Club](https://github.com/kiibohd/controller/wiki/Loading-DFU-Firmware).
4. Install [MinGW](https://sourceforge.net/projects/mingw/files/Installer/mingw-get-setup.exe/download). During installation, uncheck the option to install a graphical user interface. **DO NOT change the default installation folder.** The scripts depend on the default location.
5. Clone this repository. [This link will download it as a zip file, which you'll need to extract.](https://github.com/qmk/qmk_firmware/archive/master.zip) Open the extracted folder in Windows Explorer.
6. Open the `\util` folder.
7. Double-click on the `1-setup-path-win` batch script to run it. You'll need to accept a User Account Control prompt. Press the spacebar to dismiss the success message in the command prompt that pops up.
8. Right-click on the `2-setup-environment-win` batch script, select "Run as administrator", and accept the User Account Control prompt. This part may take a couple of minutes, and you'll need to approve a driver installation, but once it finishes, your environment is complete!
If you have trouble and want to ask for help, it is useful to generate a *Win_Check_Output.txt* file by running `Win_Check.bat` in the `\util` folder.
### Mac
If you're using [homebrew,](http://brew.sh/) you can use the following commands:
brew tap osx-cross/avr
brew install avr-libc
brew install dfu-programmer
This is the recommended method. If you don't have homebrew, [install it!](http://brew.sh/) It's very much worth it for anyone who works in the command line. Note that the `make` and `make install` portion during the homebrew installation of avr-libc can take over 20 minutes and exhibit high CPU usage.
You can also try these instructions:
1. Install Xcode from the App Store.
2. Install the Command Line Tools from `Xcode->Preferences->Downloads`.
3. Install [DFU-Programmer](https://dfu-programmer.github.io/).
If you are going to flash Infinity based keyboards you will also need dfu-util
brew install dfu-util
### Linux
To ensure you are always up to date, you can just run `sudo util/install_dependencies.sh`. That should always install all the dependencies needed. **This will run `apt-get upgrade`.**
You can also install things manually, but this documentation might not be always up to date with all requirements.
The current requirements are the following, but not all might be needed depending on what you do. Also note that some systems might not have all the dependencies available as packages, or they might be named differently.
```
build-essential
gcc
unzip
wget
zip
gcc-avr
binutils-avr
avr-libc
dfu-programmer
dfu-util
gcc-arm-none-eabi
binutils-arm-none-eabi
libnewlib-arm-none-eabi
git
```
Install the dependencies with your favorite package manager.
Debian/Ubuntu example:
sudo apt-get update
sudo apt-get install gcc unzip wget zip gcc-avr binutils-avr avr-libc dfu-programmer dfu-util gcc-arm-none-eabi binutils-arm-none-eabi libnewlib-arm-none-eabi
### Docker
If this is a bit complex for you, Docker might be the turn-key solution you need. After installing [Docker](https://www.docker.com/products/docker), run the following command at the root of the QMK folder to build a keyboard/keymap:
```bash
# You'll run this every time you want to build a keymap
# modify the keymap and keyboard assigment to compile what you want
# defaults are ergodox/default
docker run -e keymap=gwen -e subproject=ez -e keyboard=ergodox --rm -v $('pwd'):/qmk:rw edasque/qmk_firmware
# On windows docker seems to have issue with VOLUME tag in Dockerfile, and $('pwd') won't print a windows compliant path, use full path instead like this
docker run -e keymap=default -e subproject=ez -e keyboard=ergobox --rm -v D:/Users/Sacapuces/Documents/Repositories/qmk:/qmk:rw edasque/qmk_firmware
```
This will compile the targeted keyboard/keymap and leave it in your QMK directory for you to flash.
### Vagrant
If you have any problems building the firmware, you can try using a tool called Vagrant. It will set up a virtual computer with a known configuration that's ready-to-go for firmware building. OLKB does NOT host the files for this virtual computer. Details on how to set up Vagrant are in the [VAGRANT_GUIDE file](https://github.com/qmk/qmk_firmware/blob/master/doc/VAGRANT_GUIDE.md).
## Verify Your Installation
1. If you haven't already, obtain this repository ([https://github.com/qmk/qmk_firmware](https://github.com/qmk/qmk_firmware)). You can either download it as a zip file and extract it, or clone it using the command line tool git or the Github Desktop application.
2. Open up a terminal or command prompt and navigate to the `qmk_firmware` folder using the `cd` command. The command prompt will typically open to your home directory. If, for example, you cloned the repository to your Documents folder, then you would type `cd Documents/qmk_firmware`. If you extracted the file from a zip, then it may be named `qmk_firmware-master` instead.
3. To confirm that you're in the correct location, you can display the contents of your current folder using the `dir` command on Windows, or the `ls` command on Linux or Mac. You should see several files, including `readme.md` and a `quantum` folder. From here, you need to navigate to the appropriate folder under `keyboards/`. For example, if you're building for a Planck, run `cd keyboards/planck`.
4. Once you're in the correct keyboard-specific folder, run the `make` command. This should output a lot of information about the build process. More information about the `make` command can be found below.

0
doc/CYGWIN_GUIDE.md → docs/CYGWIN_GUIDE.md Executable file → Normal file
View File

View File

@ -0,0 +1,25 @@
# Atmel AVR
QMK should run on any Atmel AVR processor with enough Flash. It has been tested on the following:
* ATmega32U4 ([PJRC Teensy 2.0](http://www.pjrc.com/teensy/))
* AT90USB1286 ([PJRC Teensy++ 2.0](http://www.pjrc.com/teensy/))
* AT90USB1287 ([Atmel USBKEY](http://www.atmel.com/tools/AT90USBKEY.aspx))
* ATmega168P with using [V-USB](http://www.obdev.at/products/vusb/index.html)
* ATmega328P with using [V-USB](http://www.obdev.at/products/vusb/index.html)
* ATmega32U2
* AT90USB1286, 646, 647 should work
* AT90USB162 testing...
NOTE: To enable full features of firmware you'll need 32KB flash size.
Please add any tested microcontrollers to this list.
# ARM
You can also use any ARM processor that [ChibiOS](http://www.chibios.org) supports. The following processors have been tested:
* [Kinetis MKL26Z64](http://www.nxp.com/products/microcontrollers-and-processors/arm-processors/kinetis-cortex-m-mcus/l-series-ultra-low-power-m0-plus/kinetis-kl2x-48-mhz-usb-ultra-low-power-microcontrollers-mcus-based-on-arm-cortex-m0-plus-core:KL2x)
* [Kinetis MK20DX128](http://www.nxp.com/assets/documents/data/en/data-sheets/K20P64M50SF0.pdf)
* [Kinetis MK20DX128](http://www.nxp.com/assets/documents/data/en/data-sheets/K20P64M50SF0.pdf)
* [Kinetis MK20DX256](http://www.nxp.com/products/microcontrollers-and-processors/arm-processors/kinetis-cortex-m-mcus/k-series-performance-m4/k2x-usb/kinetis-k20-72-mhz-full-speed-usb-mixed-signal-integration-microcontrollers-mcus-based-on-arm-cortex-m4-core:K20_72)

View File

@ -0,0 +1,123 @@
A custom keyboard is about more than sending button presses to your computer. QMK has designed hooks to allow you to inject code, override functionality, and otherwise customize how your keyboard responds in different situations.
## A Word on Keyboards vs Keymap
We have structured QMK as a hierarchy:
* Core
* Keyboard/Revision (`_kb`)
* Keymap (`_user`)
Each of the functions described below can be defined with a `_kb()` suffix or an `_user()` suffix. We intend for you to use the `_kb()` suffix at the Keyboard/Revision level, while the `_user()` suffix should be used at the Keymap level.
When defining functions at the Keyboard/Revision level it is important that your `_kb()` implementation call `_user()` before executing anything else- otherwise the keymap level function will never be called.
## Matrix Initialization Code
* Keyboard/Revision: `void matrix_init_kb(void)`
* Keymap: `void matrix_init_user(void)`
This function gets called when the matrix is initiated. You should use this function to initialize any custom hardware you may have, such as speakers, LED drivers, or other features which need to be setup after the keyboard powers on.
### Example
```
void matrix_init_kb(void) {
// put your keyboard start-up code here
// runs once when the firmware starts up
matrix_init_user();
// JTAG disable for PORT F. write JTD bit twice within four cycles.
MCUCR |= (1<<JTD);
MCUCR |= (1<<JTD);
// * Set our LED pins as output
DDRB |= (1<<0);
DDRB |= (1<<1);
DDRB |= (1<<2);
DDRB |= (1<<3);
DDRB |= (1<<4);
}
```
## Matrix Scanning Code
* Keyboard/Revision: `void matrix_scan_kb(void)`
* Keymap: `void matrix_scan_user(void)`
This function gets called at every matrix scan, which is basically as often as the MCU can handle. Be careful what you put here, as it will get run a lot.
You should use this function if you need custom matrix scanning code. It can also be used for custom status output (such as LED's or a display) or other functionality that you want to trigger regularly even when the user isn't typing.
## Hook Into Key Presses
* Keyboard/Revision: `bool process_record_kb(uint16_t keycode, keyrecord_t *record)`
* Keymap: `bool process_record_user(uint16_t keycode, keyrecord_t *record)`
This function gets called every time a key is pressed or released. This is particularly useful when defining custom keys or overriding the behavior of existing keys.
The return value is whether or not QMK should continue processing the keycode - returning `false` stops the execution.
The `keycode` variable is whatever is defined in your keymap, eg `MO(1)`, `KC_L`, etc. and can be switch-cased to execute code whenever a particular code is pressed.
The `record` variable contains infomation about the actual press:
```
keyrecord_t record {
keyevent_t event {
keypos_t key {
uint8_t col
uint8_t row
}
bool pressed
uint16_t time
}
}
```
The conditional `if (record->event.pressed)` can tell if the key is being pressed or released, and you can execute code based on that.
## LED Control
* Keyboard/Revision: `void led_set_kb(uint8_t usb_led)`
* Keymap: `void led_set_user(uint8_t usb_led)`
This allows you to control the 5 LED's defined as part of the USB Keyboard spec. It will be called when the state of one of those 5 LEDs changes.
* `USB_LED_NUM_LOCK`
* `USB_LED_CAPS_LOCK`
* `USB_LED_SCROLL_LOCK`
* `USB_LED_COMPOSE`
* `USB_LED_KANA`
### Example:
```
void led_set_kb(uint8_t usb_led) {
if (usb_led & (1<<USB_LED_NUM_LOCK)) {
PORTB |= (1<<0);
} else {
PORTB &= ~(1<<0);
}
if (usb_led & (1<<USB_LED_CAPS_LOCK)) {
PORTB |= (1<<1);
} else {
PORTB &= ~(1<<1);
}
if (usb_led & (1<<USB_LED_SCROLL_LOCK)) {
PORTB |= (1<<2);
} else {
PORTB &= ~(1<<2);
}
if (usb_led & (1<<USB_LED_COMPOSE_LOCK)) {
PORTB |= (1<<3);
} else {
PORTB &= ~(1<<3);
}
if (usb_led & (1<<USB_LED_KANA_LOCK)) {
PORTB |= (1<<4);
} else {
PORTB &= ~(1<<4);
}
}
```

View File

@ -0,0 +1,7 @@
Understanding the essential changes made on the [tmk_keyboard firmware](http://github.com/tmk/tmk_keyboard) should help you understand the QMK Firmware.
| Firmware |TMK |QMK |
|------------------------------|-----------------------|-------------------------|
| Maintainer |hasu (@tmk) |Jack Humbert et al. |
| Build path customization | `TMK_DIR = ...` | `include .../Makefile` |
| `keymaps` array data | 3D array of `uint8_t` holding **keycode** | 3D array of `uint16_t` holding **keycode** |

84
docs/Eclipse.md Normal file
View File

@ -0,0 +1,84 @@
[Eclipse](https://en.wikipedia.org/wiki/Eclipse_(software)) is an open-source [Integrated Development Environment](https://en.wikipedia.org/wiki/Integrated_development_environment) (IDE) widely used for Java development, but with an extensible plugin system that allows to customize it for other languages and usages.
Using an IDE such as Eclipse provides many advantages over a plain text editor, such as:
* intelligent code completion
* convenient navigation in the code
* refactoring tools
* build automation (no need for the command-line)
* a GUI for GIT
* static code analysis
* many other tools such as debugging, code formatting, showing call hierarchies etc.
The purpose of the is page is to document how to set-up Eclipse for developing AVR software, and working on the QMK code base.
Note that this set-up has been tested on Ubuntu 16.04 only for the moment.
# Prerequisites
## Build environment
Before starting, you must have followed the [Getting Started](/Home.md#getting-started) section corresponding to your system. In particular, you must have been able to build the firmware with [the `make` command](../#the-make-command).
## Java
Eclipse is a Java application, so you will need to install Java 8 or more recent to be able to run it. You may choose between the JRE or the JDK, the latter being useful if you intend to do Java development.
# Install Eclipse and its plugins
Eclipse comes in [several flavours](http://www.eclipse.org/downloads/eclipse-packages/) depending on the target usage that you will have. There is no package comprising the AVR stack, so we will need to start from Eclipse CDT (C/C++ Development Tooling) and install the necessary plugins.
## Download and install Eclipse CDT
If you already have Eclipse CDT on your system, you can skip this step. However it is advised to keep it up-to-date for better support.
If you have another Eclipse package installed, it is normally possible to [install the CDT plugin over it](https://eclipse.org/cdt/downloads.php). However it is probably better to reinstall it from scratch to keep it light and avoid the clutter of tools that you don't need for the projects you will be working on.
Installation is very simple: follow the [5 Steps to Install Eclipse](https://eclipse.org/downloads/eclipse-packages/?show_instructions=TRUE), and choose **Eclipse IDE for C/C++ Developers** at Step 3.
Alternatively, you can also directly [download Eclipse IDE for C/C++ Developers](http://www.eclipse.org/downloads/eclipse-packages/) ([direct link to current version](http://www.eclipse.org/downloads/packages/eclipse-ide-cc-developers/neonr)) and extract the package to the location of your choice (this creates an `eclipse` folder).
## First Launch
When installation is complete, click the <kbd>Launch</kbd> button. (If you extracted the package manually, open the Eclipse installation folder and double-click the `eclipse` executable)
When you are prompted with the Workspace Selector, select a directory that will hold Eclipse metadata and usually your projects. **Do not select the `qmk_firmware` directory**, this will be the project directory. Select the parent folder instead, or another (preferably empty) folder of your choice (the default is fine if you do not use it yet).
Once started, click the <kbd>Workbench</kbd> button at the top right to switch to the workbench view (there is a also checkbox at the bottom to skip the welcome screen at startup).
## Install the necessary plugins
Note: you do not need to restart Eclipse after installing each plugin. Simply restart once all plugins are installed.
### [The AVR plugin](http://avr-eclipse.sourceforge.net/)
This is the most important plugin as it will allow Eclipse to _understand_ AVR C code. Follow [the instructions for using the update site](http://avr-eclipse.sourceforge.net/wiki/index.php/Plugin_Download#Update_Site), and agree with the security warning for unsigned content.
### [ANSI Escape in Console](https://marketplace.eclipse.org/content/ansi-escape-console)
This plugin is necessary to properly display the colored build output generated by the QMK makefile.
1. Open <kbd><kbd>Help</kbd> > <kbd>Eclipse Marketplace…</kbd></kbd>
2. Search for _ANSI Escape in Console_
3. Click the <samp>Install</samp> button of the plugin
4. Follow the instructions and agree again with the security warning for unsigned content.
Once both plugins are installed, restart Eclipse as prompted.
# Configure Eclipse for QMK
## Importing the project
1. Click <kbd><kbd>File</kbd> > <kbd>New</kbd> > <kbd>Makefile Project with Existing Code</kbd></kbd>
2. On the next screen:
* Select the directory where you cloned the repository as _Existing Code Location_;
* (Optional) Give a different name to the project¹, e.g. _QMK_ or _Quantum_;
* Select the _AVR-GCC Toolchain_;
* Keep the rest as-is and click <kbd>Finish</kbd>
![Importing QMK in Eclipse](http://i.imgur.com/oHYR1yW.png)
3. The project will now be loaded and indexed. Its files can be browsed easily through the _Project Explorer_ on the left.
¹ There might be issues for importing the project with a custom name. If it does not work properly, try leaving the default project name (i.e. the name of the directory, probably `qmk_firmware`).
## Build your keyboard
We will now configure a make target that cleans the project and builds the keymap of your choice.
1. On the right side of the screen, select the <kbd>Make Target</kbd> tab
2. Expand the folder structure to the keyboard of your choice, e.g. `qmk_firmware/keyboards/ergodox`
3. Right-click on the keyboard folder and select <kbd>New…</kbd> (or select the folder and click the <kbd>New Make Target</kbd> icon above the tree)
4. Choose a name for your build target, e.g. _clean \<your keymap\>_
5. Make Target: this is the arguments that you give to `make` when building from the command line. If your target name does not match these arguments, uncheck <kbd>Same as target name</kbd> and input the correct arguments, e.g. `clean <your keymap>`
6. Leave the other options checked and click <kbd>OK</kbd>. Your make target will now appear under the selected keyboard.
7. (Optional) Toggle the <kbd>Hide Empty Folders</kbd> icon button above the targets tree to only show your build target.
8. Double-click the build target you created to trigger a build.
9. Select the <kbd>Console</kbd> view at the bottom to view the running build.

64
docs/Embedding.md Normal file
View File

@ -0,0 +1,64 @@
# WARNING: Until issue [#173](https://github.com/tmk/tmk_keyboard/issues/173) goes through, the [core][1] repository will not be up-to-date with the latest changes and fixes, but can still be used.
If you want to use TMK for your own keyboard project, you've got three options for embedding the [core][1].
The recommended option is [subtrees](#1-git-subtree).
After adding the embed you'll need to [modify the Makefile](#modifications-to-the-makefile) of your project to point to the core correctly.
## 1. git subtree
In order to set up the subtree in your project, first add the core repository as a remote:
```
git remote add -f core https://github.com/tmk/tmk_core
```
Then add the core as a subtree (directory) in your local repository:
```
git subtree add -P tmk_core core master --squash
```
And that's it!
When you want to update the subtree in your repository to match the master on [tmk_core][1], do this:
```
git subtree pull -P tmk_core core master --squash
```
## 2. git submodule
In order to set up the submodule in your project, first add a new submodule:
```
git submodule add https://github.com/tmk/tmk_core tmk_core
```
Then pull, sync and update the submodule:
```
git pull
git submodule sync --recursive
git submodule update --init --recursive
```
And that's it!
When you want to update the subtree in your repository to match the master on [tmk_core][1], follow the same steps as above.
If you want to clone a repository from GitHub that has submodule(s) in it, pass <kbd>--recursive</kbd> when cloning, like so:
`git clone --recursive https://github.com/<username>/<repository>`
## 3. Manually (without git)
*Note: This is not recommended in any way, but it's still possible.*
Download a zipped version of the [tmk_core][1] repository using this link:
<https://github.com/tmk/tmk_core/archive/master.zip>
Extract the zip in your project's directory, then rename the folder to <kbd>tmk_core</kbd>.
## Modifications to the *Makefile*
The one thing you have to make sure to change in the *Makefile* (compared to [tmk_keyboard](https://github.com/tmk/tmk_keyboard) drivers' *[Makefile](https://github.com/tmk/tmk_keyboard/blob/master/keyboard/gh60/Makefile#L45)*) is the "TMK_DIR" variable, which needs to point to the embed directory:
```Makefile
TMK_DIR = ./tmk_core
```
[1]: https://github.com/tmk/tmk_core

151
docs/FAQ-Build.md Normal file
View File

@ -0,0 +1,151 @@
## READ FIRST
- https://github.com/jackhumbert/qmk_firmware/blob/master/doc/BUILD_GUIDE.md
In short,
$ make [-f Makefile.<variant>] [KEYMAP=...] clean
$ make [-f Makefile.<variant>] [KEYMAP=...]
$ make [-f Makefile.<variant>] [KEYMAP=...] dfu
## Can't program on Linux and Mac
You will need proper permission to operate a device. For Linux users see udev rules below.
Easy way is to use `sudo` command, if you are not familiar with this command check its manual with `man sudo` or this page on line.
https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man8/sudo.8.html
In short when your controller is ATMega32u4,
$ sudo dfu-programmer atmega32u4 erase --force
$ sudo dfu-programmer atmega32u4 flash your.hex
$ sudo dfu-programmer atmega32u4 reset
or just
$ sudo make dfu
But to run `make` with root privilege is not good idea. Use former method as possible.
## Do 'make clean' before 'make'
You'll need `make clean` after you edit **config.h** or change options like `KEYMAP`.
Frist remove all files made in previous build,
$ make clean
then build new firmware.
$ make [KEYMAP=...]
Also you can always try `make clean` when you get other strange result during build.
## WINAVR is obsolete
It is no longer recommended and may cause some problem.
See [Issue #99](https://github.com/tmk/tmk_keyboard/issues/99).
## USB stack: LUFA or PJRC?
Use **LUFA**.
**PJRC** stack won't be supported actively anymore. There is no reason to hesitate to use LUFA except for binary size(about 1KB lager?). But **PJRC** is still very useful for debug and development purpose.
See also [Issue #50](https://github.com/tmk/tmk_keyboard/issues/50) and [Issue #58](https://github.com/tmk/tmk_keyboard/issues/58).
## Edit configuration but not change
You will need followings after editing `CONSOLE_ENABLE`, `NKRO_ENABLE`, `EXTRAKEY_ENABLE` or `MOUSEKEY_ENABLE` option in **Makefile**.
### 1. make clean
This will be needed when you edit **config.h**.
### 2. Remove Drivers from Device Manager(Windows)
**Windows only.** Linux, OSX and other OS's doesn't require this. It looks like Windows keeps using driver installed when device was connected first time even after the device changes its configuration. To load proper drivers for new configuration you need to remove existent drivers from **Drvice Manager**.
### 3. Build with different VID:PID
**Windows only.** If method 2. does't work fou you try this. Change Vendor ID or Product ID in **config.h** and build firmware. Windows should recognize it as whole new device and start drivers install process.
### 4. Just try other ports
This will be useful and the easiest workaround for **Windows**.
## USB VID and PID
You can use any ID you want with editing `config.h`. Using any presumably unused ID will be no problem in fact except for very least chance of collision with other product.
For example TMK uses following numbers by default.
```
keyboard:
hhkb: FEED:CAFE
gh60: FEED:6060
converter:
x68k: FEED:6800
ps2: FEED:6512
adb: FEED:0ADB
ibm4704: FEED:4704
pc98: FEED:9898
```
Also see this.
https://github.com/tmk/tmk_keyboard/issues/150
You can buy a really unique VID:PID here. I don't think you need this for personal use.
- http://www.obdev.at/products/vusb/license.html
- http://www.mcselec.com/index.php?page=shop.product_details&flypage=shop.flypage&product_id=92&option=com_phpshop&Itemid=1
## Linux udev rules
On Linux you need proper privilege to access device file of MCU, you'll have to use `sudo` when flashing firmware. You can circumvent this with placing these files in `/etc/udev/rules.d/`.
**/etc/udev/rules.d/50-atmel-dfu.rules:**
```
# Atmel ATMega32U4
SUBSYSTEMS=="usb", ATTRS{idVendor}=="03eb", ATTRS{idProduct}=="2ff4", MODE:="0666"
# Atmel USBKEY AT90USB1287
SUBSYSTEMS=="usb", ATTRS{idVendor}=="03eb", ATTRS{idProduct}=="2ffb", MODE:="0666"
# Atmel ATMega32U2
SUBSYSTEMS=="usb", ATTRS{idVendor}=="03eb", ATTRS{idProduct}=="2ff0", MODE:="0666"
```
**/etc/udev/rules.d/52-tmk-keyboard.rules:**
```
# tmk keyboard products https://github.com/tmk/tmk_keyboard
SUBSYSTEMS=="usb", ATTRS{idVendor}=="feed", MODE:="0666"
```
## Cortex: cstddef: No such file or directory
GCC 4.8 of Ubuntu 14.04 had this problem and had to update to 4.9 with this PPA.
https://launchpad.net/~terry.guo/+archive/ubuntu/gcc-arm-embedded
https://github.com/tmk/tmk_keyboard/issues/212
https://github.com/tmk/tmk_keyboard/wiki/mbed-cortex-porting#compile-error-cstddef
https://developer.mbed.org/forum/mbed/topic/5205/
## 'clock_prescale_set' and 'clock_div_1' not available
Your toolchain is too old to support the MCU. For example WinAVR 20100110 doesn't support ATMega32u2.
```
Compiling C: ../../tmk_core/protocol/lufa/lufa.c
avr-gcc -c -mmcu=atmega32u2 -gdwarf-2 -DF_CPU=16000000UL -DINTERRUPT_CONTROL_ENDPOINT -DBOOTLOADER_SIZE=4096 -DF_USB=16000000UL -DARCH=ARCH_AVR8 -DUSB_DEVICE_ONLY -DUSE_FLASH_DESCRIPTORS -DUSE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)" -DFIXED_CONTROL_ENDPOINT_SIZE=8 -DFIXED_NUM_CONFIGURATIONS=1 -DPROTOCOL_LUFA -DEXTRAKEY_ENABLE -DCONSOLE_ENABLE -DCOMMAND_ENABLE -DVERSION=unknown -Os -funsigned-char -funsigned-bitfields -ffunction-sections -fdata-sections -fno-inline-small-functions -fpack-struct -fshort-enums -fno-strict-aliasing -Wall -Wstrict-prototypes -Wa,-adhlns=obj_alps64/protocol/lufa/lufa.lst -I. -I../../tmk_core -I../../tmk_core/protocol/lufa -I../../tmk_core/protocol/lufa/LUFA-git -I../../tmk_core/common -std=gnu99 -include config.h -MMD -MP -MF .dep/obj_alps64_protocol_lufa_lufa.o.d ../../tmk_core/protocol/lufa/lufa.c -o obj_alps64/protocol/lufa/lufa.o
../../tmk_core/protocol/lufa/lufa.c: In function 'setup_mcu':
../../tmk_core/protocol/lufa/lufa.c:575: warning: implicit declaration of function 'clock_prescale_set'
../../tmk_core/protocol/lufa/lufa.c:575: error: 'clock_div_1' undeclared (first use in this function)
../../tmk_core/protocol/lufa/lufa.c:575: error: (Each undeclared identifier is reported only once
../../tmk_core/protocol/lufa/lufa.c:575: error: for each function it appears in.)
make: *** [obj_alps64/protocol/lufa/lufa.o] Error 1
```
## BOOTLOADER_SIZE for AVR
Note that Teensy2.0++ bootloader size is 2048byte. Some Makefiles may have wrong comment.
```
# Boot Section Size in *bytes*
# Teensy halfKay 512
# Teensy++ halfKay 2048
# Atmel DFU loader 4096 (TMK Alt Controller)
# LUFA bootloader 4096
# USBaspLoader 2048
OPT_DEFS += -DBOOTLOADER_SIZE=2048
```

248
docs/FAQ-Keymap.md Normal file
View File

@ -0,0 +1,248 @@
## READ FIRST
https://github.com/tmk/tmk_core/blob/master/doc/keymap.md
## How to get keycode
See [Keycodes](Keycodes). Keycodes are actually defined in [common/keycode.h](https://github.com/qmk/qmk_firmware/blob/master/tmk_core/common/keycode.h).
## Sysrq key
Use keycode for Print Screen(`KC_PSCREEN` or `KC_PSCR`) instead of `KC_SYSREQ`. Key combination of 'Alt + Print Screen' is recognized as 'System request'.
See [issue #168](https://github.com/tmk/tmk_keyboard/issues/168) and
- http://en.wikipedia.org/wiki/Magic_SysRq_key
- http://en.wikipedia.org/wiki/System_request
## Power key doesn't work
Use `KC_PWR` instead of `KC_POWER` or vice versa.
- `KC_PWR` works with Windows and Linux, not with OSX.
- `KC_POWER` works with OSX and Linux, not with Windows.
http://geekhack.org/index.php?topic=14290.msg1327264#msg1327264
## Oneshot modifier
Solves my personal 'the' problem. I often got 'the' or 'THe' wrongly instead of 'The'. Oneshot Shift mitgates this for me.
https://github.com/tmk/tmk_keyboard/issues/67
## Modifier/Layer stuck
Modifier keys or layers can be stuck unless layer switching is configured properly.
For Modifier keys and layer actions you have to place `KC_TRANS` on same position of destination layer to unregister the modifier key or return to previous layer on release event.
- https://github.com/tmk/tmk_core/blob/master/doc/keymap.md#31-momentary-switching
- http://geekhack.org/index.php?topic=57008.msg1492604#msg1492604
- https://github.com/tmk/tmk_keyboard/issues/248
## Mechanical Lock Switch Support
https://github.com/tmk/tmk_keyboard#mechanical-locking-support
This feature is for *mechanical lock switch* like this Alps one.
http://deskthority.net/wiki/Alps_SKCL_Lock
Using enabling this feature and using keycodes `LCAP`, `LNUM` or `LSCR` in keymap you can use physical locking CapsLock, NumLock or ScrollLock keys as you expected.
Old vintage mechanical keyboards occasionally have lock switches but modern ones don't have. ***You don't need this feature in most case and just use keycodes `CAPS`, `NLCK` and `SLCK`.***
## Input special charactors other than ASCII like Cédille 'Ç'
NO UNIVERSAL METHOD TO INPUT THOSE WORKS OVER ALL SYSTEMS. You have to define **MACRO** in way specific to your OS or layout.
See this post for example **MACRO** code.
http://deskthority.net/workshop-f7/tmk-keyboard-firmware-collection-t4478-120.html#p195620
On **Windows** you can use `AltGr` key or **Alt code**.
- http://en.wikipedia.org/wiki/AltGr_key
- http://en.wikipedia.org/wiki/Alt_code
On **Mac** OS defines `Option` key combinations.
- http://en.wikipedia.org/wiki/Option_key#Alternative_keyboard_input
On **Xorg** you can use `compose` key, instead.
- http://en.wikipedia.org/wiki/Compose_key
And see this for **Unicode** input.
- http://en.wikipedia.org/wiki/Unicode_input
## Apple/Mac keyboard Fn
Not supported.
Apple/Mac keyboard sends keycode for Fn unlike most of other keyboards.
I think you can send Apple Fn key using Apple venter specific Page 0xff01 and usage 0x0003. But you have to change HID Report Descriptor for this, of course.
https://opensource.apple.com/source/IOHIDFamily/IOHIDFamily-606.1.7/IOHIDFamily/AppleHIDUsageTables.h
## Media control keys in Mac OSX
#### KC_MNXT and KC_MPRV does not work on Mac
Use `KC_MFFD`(`KC_MEDIA_FAST_FORWARD`) and `KC_MRWD`(`KC_MEDIA_REWIND`) instead of `KC_MNXT` and `KC_MPRV`.
See https://github.com/tmk/tmk_keyboard/issues/195
## Keys supported in Mac OSX?
You can know which keycodes are supported in OSX from this source code.
`usb_2_adb_keymap` array maps Keyboard/Keypad Page usages to ADB scancodes(OSX internal keycodes).
https://opensource.apple.com/source/IOHIDFamily/IOHIDFamily-606.1.7/IOHIDFamily/Cosmo_USB2ADB.c
And `IOHIDConsumer::dispatchConsumerEvent` handles Consumer page usages.
https://opensource.apple.com/source/IOHIDFamily/IOHIDFamily-606.1.7/IOHIDFamily/IOHIDConsumer.cpp
## JIS keys in Mac OSX
Japanese JIS keyboard specific keys like `無変換(Muhenkan)`, `変換(Henkan)`, `ひらがな(hiragana)` are not recognized on OSX. You can use **Seil** to enable those keys, try following options.
* Enable NFER Key on PC keyboard
* Enable XFER Key on PC keyboard
* Enable KATAKANA Key on PC keyboard
https://pqrs.org/osx/karabiner/seil.html
## RN-42 Bluetooth doesn't work with Karabiner
Karabiner - Keymapping tool on Mac OSX - ignores inputs from RN-42 module by default. You have to enable this option to make Karabiner working with your keyboard.
https://github.com/tekezo/Karabiner/issues/403#issuecomment-102559237
See these for the deail of this problem.
https://github.com/tmk/tmk_keyboard/issues/213
https://github.com/tekezo/Karabiner/issues/403
## Esc and `~ on a key
You can define FC660 and Poker style ESC with `ACTION_LAYER_MODS`.
https://github.com/tmk/tmk_core/blob/master/doc/keymap.md#35-momentary-switching-with-modifiers
```
#include "keymap_common.h"
/* Leopold FC660
* https://elitekeyboards.com/products.php?sub=leopold,compact&pid=fc660c
* Shift + Esc = ~
* Fn + Esc = `
*
* Votex Poker II
* https://adprice.fedorapeople.org/poker2_manual.pdf
* Fn + Esc = `
* Fn + Shift + Esc = ~
*/
const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* 0: qwerty */
[0] = KEYMAP( \
ESC, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, NUHS,BSPC, \
TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC,BSLS, \
LCTL,A, S, D, F, G, H, J, K, L, SCLN,QUOT,ENT, \
FN0, NUBS,Z, X, C, V, B, N, M, COMM,DOT, SLSH,RSFT,ESC, \
LCTL,LGUI,LALT, SPC, RALT,FN1, RGUI,RCTL),
[1] = KEYMAP( \
GRV, TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, \
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,\
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, \
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, \
TRNS,TRNS,TRNS, TRNS, TRNS,TRNS,TRNS,TRNS),
[2] = KEYMAP( \
GRV, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, TRNS,TRNS, \
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,\
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, \
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, \
TRNS,TRNS,TRNS, TRNS, TRNS,TRNS,TRNS,TRNS),
};
const uint16_t PROGMEM fn_actions[] = {
// https://github.com/tmk/tmk_core/blob/master/doc/keymap.md#35-momentary-switching-with-modifiers
[0] = ACTION_LAYER_MODS(1, MOD_LSFT),
[1] = ACTION_LAYER_MOMENTARY(2),
};
```
Otherwise, you can write code, see this.
https://github.com/p3lim/keyboard_firmware/commit/fd799c12b69a5ab5addd1d4c03380a1b8ef8e9dc
## 32 Fn keys are not enough?
### actionmap
It uses 16 bit codes and has no limitation of 32 Fn at the expense of memory space. TMK keymap is actually is 8 bit codes as subset of the actionmap.
https://github.com/tmk/tmk_keyboard/issues?utf8=%E2%9C%93&q=is%3Aissue+actionmap
### extension for modified keys
https://geekhack.org/index.php?topic=41989.msg1885526#msg1885526
## Arrow on Right Modifier keys with Dual-Role
This turns right modifer keys into arrow keys when the keys are tapped while still modifiers when the keys are hold. In TMK the dual-role function is dubbed **TAP**.
```
#include "keymap_common.h"
/* Arrow keys on right modifier keys with TMK dual role feature
*
* https://github.com/tmk/tmk_core/blob/master/doc/keymap.md#213-modifier-with-tap-keydual-role
* https://en.wikipedia.org/wiki/Modifier_key#Dual-role_keys
*/
const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* 0: qwerty */
[0] = KEYMAP( \
ESC, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, NUHS,BSPC, \
TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC,BSLS, \
LCTL,A, S, D, F, G, H, J, K, L, SCLN,QUOT,ENT, \
LSFT,NUBS,Z, X, C, V, B, N, M, COMM,DOT, SLSH,FN0, ESC, \
FN4, LGUI,LALT, SPC, APP, FN2, FN1, FN3),
[1] = KEYMAP( \
GRV, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, TRNS,TRNS, \
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,\
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, \
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,FN5, TRNS, \
TRNS,TRNS,TRNS, TRNS, TRNS,FN7, FN6, FN8),
};
const uint16_t PROGMEM fn_actions[] = {
[0] = ACTION_MODS_TAP_KEY(MOD_RSFT, KC_UP),
[1] = ACTION_MODS_TAP_KEY(MOD_RGUI, KC_DOWN),
[2] = ACTION_MODS_TAP_KEY(MOD_RALT, KC_LEFT),
[3] = ACTION_MODS_TAP_KEY(MOD_RCTL, KC_RIGHT),
[4] = ACTION_LAYER_MOMENTARY(1),
[5] = ACTION_MODS_TAP_KEY(MOD_RSFT, KC_PGUP),
[6] = ACTION_MODS_TAP_KEY(MOD_RGUI, KC_PGDN),
[7] = ACTION_MODS_TAP_KEY(MOD_RALT, KC_HOME),
[8] = ACTION_MODS_TAP_KEY(MOD_RCTL, KC_END),
};
```
Dual-role key: https://en.wikipedia.org/wiki/Modifier_key#Dual-role_keys
## Eject on Mac OSX
`EJCT` keycode works on OSX. https://github.com/tmk/tmk_keyboard/issues/250
It seems Windows 10 ignores the code and Linux/Xorg recognizes but has no mapping by default.
Not sure what keycode Eject is on genuine Apple keyboard actually. HHKB uses `F20` for Eject key(`Fn+f`) on Mac mode but this is not same as Apple Eject keycode probably.
## What's weak_mods and real_mods in action_util.c
___TO BE IMPROVED___
real_mods is intended to retains state of real/physical modifier key state, while
weak_mods retains state of virtual or temprary modifiers which should not affect state real modifier key.
Let's say you hold down physical left shift key and type ACTION_MODS_KEY(LSHIFT, KC_A),
with weak_mods,
* (1) hold down left shift: real_mods |= MOD_BIT(LSHIFT)
* (2) press ACTION_MODS_KEY(LSHIFT, KC_A): weak_mods |= MOD_BIT(LSHIFT)
* (3) release ACTION_MODS_KEY(LSHIFT, KC_A): waek_mods &= ~MOD_BIT(LSHIFT)
real_mods still keeps modifier state.
without weak mods,
* (1) hold down left shift: real_mods |= MOD_BIT(LSHIFT)
* (2) press ACTION_MODS_KEY(LSHIFT, KC_A): real_mods |= MOD_BIT(LSHIFT)
* (3) release ACTION_MODS_KEY(LSHIFT, KC_A): real_mods &= ~MOD_BIT(LSHIFT)
here real_mods lost state for 'physical left shift'.
weak_mods is ORed with real_mods when keyboard report is sent.
https://github.com/tmk/tmk_core/blob/master/common/action_util.c#L57

238
docs/FAQ.md Normal file
View File

@ -0,0 +1,238 @@
## READ FIRST
- **README** of top directory : https://github.com/tmk/tmk_keyboard/blob/master/README.md
- **README** of target project(keyboard/converter) directory.
Note that you'll need to read **both**.
# Build
- [[FAQ/Build]]
# Keymap
- [[FAQ/Keymap]]
# Debug Console
## hid_listen can't recognize device
When debug console of your device is not ready you will see like this:
Waiting for device:.........
once the device is pluged in then *hid_listen* finds it you will get this message:
Waiting for new device:.........................
Listening:
Check if you can't get this 'Listening:' message:
- build with `CONSOLE_ENABLE=yes` in **Makefile**.
You may need privilege to access the device on OS like Linux.
- try `sudo hid_listen`
## Can't get message on console
Check:
- *hid_listen* finds your device. See above.
- Enable debug with pressing **Magic**+d. See [Magic Commands](https://github.com/tmk/tmk_keyboard#magic-commands).
- set `debug_enable=true` usually in `matrix_init()` in **matrix.c**.
- try using 'print' function instead of debug print. See **common/print.h**.
- disconnect other devices with console function. See [Issue #97](https://github.com/tmk/tmk_keyboard/issues/97).
## Linux or UNIX like system requires Super User privilege
Just use 'sudo' to execute *hid_listen* with privilege.
```
$ sudo hid_listen
```
Or add an *udev rule* for TMK devices with placing a file in rules directory. The directory may vary on each system.
File: /etc/udev/rules.d/52-tmk-keyboard.rules(in case of Ubuntu)
```
# tmk keyboard products https://github.com/tmk/tmk_keyboard
SUBSYSTEMS=="usb", ATTRS{idVendor}=="feed", MODE:="0666"
```
***
# Miscellaneous
## NKRO Doesn't work
First you have to compile frimware with this build option `NKRO_ENABLE` in **Makefile**.
Try `Magic` **N** command(`LShift+RShift+N` by default) when **NKRO** still doesn't work. You can use this command to toggle between **NKRO** and **6KRO** mode temporarily. In some situations **NKRO** doesn't work you need to switch to **6KRO** mode, in particular when you are in BIOS.
If your firmeare built with `BOOTMAGIC_ENABLE` you need to turn its switch on by `BootMagic` **N** command(`Space+N` by default). This setting is stored in EEPROM and keeped over power cycles.
https://github.com/tmk/tmk_keyboard#boot-magic-configuration---virtual-dip-switch
## TrackPoint needs reset circuit(PS/2 mouse support)
Without reset circuit you will have inconsistent reuslt due to improper initialize of the hardware. See circuit schematic of TPM754.
- http://geekhack.org/index.php?topic=50176.msg1127447#msg1127447
- http://www.mikrocontroller.net/attachment/52583/tpm754.pdf
## Can't read column of matrix beyond 16
Use `1UL<<16` instead of `1<<16` in `read_cols()` in **matrix.h** when your columns goes beyond 16.
In C `1` means one of **int** type which is **16bit** in case of AVR so you can't shift left more than 15. You will get unexpected zero when you say `1<<16`. You have to use **unsigned long** type with `1UL`.
http://deskthority.net/workshop-f7/rebuilding-and-redesigning-a-classic-thinkpad-keyboard-t6181-60.html#p146279
## Pull-up Resistor
In some case converters needed to have pull-up resistors to work correctly. Place the resistor between VCC and signal line in parallel.
For example:
```
Keyboard Conveter
,------.
5V------+------|VCC |
| | |
R | |
| | |
Signal--+------|PD0 |
| |
GND------------|GND |
`------'
R: 1K Ohm resistor
```
https://github.com/tmk/tmk_keyboard/issues/71
## Arduino Micro's pin naming is confusing
Note that Arduino Micro PCB marking is different from real AVR port name. D0 of Arduino Micro is not PD0, PD0 is D3. Check schematic yourself.
http://arduino.cc/en/uploads/Main/arduino-micro-schematic.pdf
## Bootloader jump doesn't work
Properly configure bootloader size in **Makefile**. With wrong section size bootloader won't probably start with **Magic command** and **Boot Magic**.
```
# Size of Bootloaders in bytes:
# Atmel DFU loader(ATmega32U4) 4096
# Atmel DFU loader(AT90USB128) 8192
# LUFA bootloader(ATmega32U4) 4096
# Arduino Caterina(ATmega32U4) 4096
# USBaspLoader(ATmega***) 2048
# Teensy halfKay(ATmega32U4) 512
# Teensy++ halfKay(AT90USB128) 2048
OPT_DEFS += -DBOOTLOADER_SIZE=4096
```
AVR Boot section size are defined by setting **BOOTSZ** fuse in fact. Consult with your MCU datasheet.
Note that **Word**(2 bytes) size and address are used in datasheet while TMK uses **Byte**.
AVR Boot section is located at end of Flash memory like the followings.
```
byte Atmel/LUFA(ATMega32u4) byte Atmel(AT90SUB1286)
0x0000 +---------------+ 0x00000 +---------------+
| | | |
| | | |
| Application | | Application |
| | | |
= = = =
| | 32KB-4KB | | 128KB-8KB
0x6000 +---------------+ 0x1E000 +---------------+
| Bootloader | 4KB | Bootloader | 8KB
0x7FFF +---------------+ 0x1FFFF +---------------+
byte Teensy(ATMega32u4) byte Teensy++(AT90SUB1286)
0x0000 +---------------+ 0x00000 +---------------+
| | | |
| | | |
| Application | | Application |
| | | |
= = = =
| | 32KB-512B | | 128KB-2KB
0x7E00 +---------------+ 0x1FC00 +---------------+
| Bootloader | 512B | Bootloader | 2KB
0x7FFF +---------------+ 0x1FFFF +---------------+
```
And see this discussion for further reference.
https://github.com/tmk/tmk_keyboard/issues/179
## Special Extra key doesn't work(System, Audio control keys)
You need to define `EXTRAKEY_ENABLE` in **makefile** to use them in TMK.
```
EXTRAKEY_ENABLE = yes # Audio control and System control
```
http://deskthority.net/workshop-f7/tmk-keyboard-firmware-collection-t4478-60.html#p157919
## Wakeup from sleep doesn't work
In Windows check `Allow this device to wake the computer` setting in Power **Management property** tab of **Device Manager**. Also check BIOS setting.
Pressing any key during sleep should wake host.
## Using Arduino?
**Note that Arduino pin naming is different from actual chip.** For example, Arduino pin `D0` is not `PD0`. Check circuit with its schematics yourself.
- http://arduino.cc/en/uploads/Main/arduino-leonardo-schematic_3b.pdf
- http://arduino.cc/en/uploads/Main/arduino-micro-schematic.pdf
Arduino leonardo and micro have **ATMega32U4** and can be used for TMK, though Arduino bootloader may be a problem.
## Using PF4-7 pins of USB AVR?
You need to set JTD bit of MCUCR yourself to use PF4-7 as GPIO. Those pins are configured to serve JTAG function by default. MCUs like ATMega*U* or AT90USB* are affeteced with this.
If you are using Teensy this isn't needed. Teensy is shipped with JTAGEN fuse bit unprogrammed to disable the function.
See this code.
```
// JTAG disable for PORT F. write JTD bit twice within four cycles.
MCUCR |= (1<<JTD);
MCUCR |= (1<<JTD);
```
https://github.com/tmk/tmk_keyboard/blob/master/keyboard/hbkb/matrix.c#L67
And read **26.5.1 MCU Control Register MCUCR** of ATMega32U4 datasheet.
## Adding LED indicators of Lock keys
You need your own LED indicators for CapsLock, ScrollLock and NumLock? See this post.
http://deskthority.net/workshop-f7/tmk-keyboard-firmware-collection-t4478-120.html#p191560
## Program Arduino Micro/Leonardo
Push reset button and then run command like this within 8 seconds.
```
avrdude -patmega32u4 -cavr109 -b57600 -Uflash:w:adb_usb.hex -P/dev/ttyACM0
```
Device name will vary depending on your system.
http://arduino.cc/en/Main/ArduinoBoardMicro
https://geekhack.org/index.php?topic=14290.msg1563867#msg1563867
## USB 3 compatibility
I heard some people have a problem with USB 3 port, try USB 2 port.
## Mac compatibility
### OS X 10.11 and Hub
https://geekhack.org/index.php?topic=14290.msg1884034#msg1884034
## Problem on BIOS(UEFI)/Resume(Sleep&Wake)/Power cycles
Some people reported their keyboard stops working on BIOS and/or after resume(power cycles).
As of now root of its cause is not clear but some build options seem to be related. In Makefile try to disable those options like `CONSOLE_ENABLE`, `NKRO_ENABLE`, `SLEEP_LED_ENABLE` and/or others.
https://github.com/tmk/tmk_keyboard/issues/266
https://geekhack.org/index.php?topic=41989.msg1967778#msg1967778
## FLIP doesn't work
### AtLibUsbDfu.dll not found
Remove current driver and reinstall one FLIP provides from DeviceManager.
http://imgur.com/a/bnwzy

7
docs/Git-subtree.md Normal file
View File

@ -0,0 +1,7 @@
## Update core branch procedure
git co master
git subtree split -P tmk_core -b <tmp_branch>
git co core
git merge <tmp_branch>
git co master
git subtree merge -P tmk_core --squash

View File

@ -0,0 +1,5 @@
# Alternative Controller for HHKB
* [Geekhack.org thread](https://geekhack.org/index.php?topic=12047.0)
* [Connector unmate](https://geekhack.org/index.php?topic=12047.msg1543860#msg1543860)

183
docs/Home.md Normal file
View File

@ -0,0 +1,183 @@
# Quantum Mechanical Keyboard Firmware
You have found the QMK Firmware documentation site. This is a keyboard firmware based on the [tmk\_keyboard firmware](http://github.com/tmk/tmk_keyboard) \([view differences](/Differences-from-TMK.md)\) with some useful features for Atmel AVR controllers, and more specifically, the [OLKB product line](http://olkb.com), the [ErgoDox EZ](http://www.ergodox-ez.com) keyboard, and the [Clueboard product line](http://clueboard.co/). It has also been ported to ARM chips using ChibiOS. You can use it to power your own hand-wired or custom keyboard PCB.
# Getting started
Before you are able to compile, you'll need to install an environment for AVR or ARM development. You'll find the instructions for any OS below. If you find another/better way to set things up from scratch, please consider [making a pull request](https://github.com/qmk/qmk_firmware/pulls) with your changes!
* [Build Environment Setup](/Build-Environment-Setup.md)
* [QMK Overview](/QMK-Overview.md)
# Configuring QMK Firmware
The QMK Firmware can be configured via the `keymaps` array data. For simply generating a [basic keycode](/Keycodes.md), you add it as an element of your `keymaps` array data. For more complicated actions, there are more advanced keycodes that are organized carefully to represent common operations, some of which can be found on the [Key Functions](/Key-Functions.md) page.
For more details of the `keymaps` array, see [Keymap Overview](/Keymap.md) page.
## Space Cadet Shift: The future, built in
Steve Losh [described](http://stevelosh.com/blog/2012/10/a-modern-space-cadet/) the Space Cadet Shift quite well. Essentially, you hit the left Shift on its own, and you get an opening parenthesis; hit the right Shift on its own, and you get the closing one. When hit with other keys, the Shift key keeps working as it always does. Yes, it's as cool as it sounds. Head on over to the [Space Cadet Shift](/Space-Cadet-Shift.md) page to read about it.
## The Leader key: A new kind of modifier
Most modifiers have to be held or toggled. But what if you had a key that indicated the start of a sequence? You could press that key and then rapidly press 1-3 more keys to trigger a macro, or enter a special layer, or anything else you might want to do. To learn more about it check out the [Leader Key](/Leader-Key.md) page.
## Tap Dance: A single key can do 3, 5, or 100 different things
Hit the semicolon key once, send a semicolon. Hit it twice, rapidly -- send a colon. Hit it three times, and your keyboard's LEDs do a wild dance. That's just one example of what Tap Dance can do. Read more about it on the [Tap Dance](/Tap-Dance.md) page.
## Temporarily setting the default layer
`DF(layer)` - sets default layer to _layer_. The default layer is the one at the "bottom" of the layer stack - the ultimate fallback layer. This currently does not persist over power loss. When you plug the keyboard back in, layer 0 will always be the default. It is theoretically possible to work around that, but that's not what `DF` does.
## Macro shortcuts: Send a whole string when pressing just one key
How would you like a single keypress to send a whole word, sentence, paragraph, or even document? Head on over to the [Macros](/Macros.md) page to read up on all aspects of Simple and Dynamic Macros.
## Additional keycode aliases for software-implemented layouts \(Colemak, Dvorak, etc\)
Everything is assuming you're in Qwerty \(in software\) by default, but there is built-in support for using a Colemak or Dvorak layout by including this at the top of your keymap:
```
#include <keymap_colemak.h>
```
If you use Dvorak, use `keymap_dvorak.h` instead of `keymap_colemak.h` for this line. After including this line, you will get access to:
* `CM_*` for all of the Colemak-equivalent characters
* `DV_*` for all of the Dvorak-equivalent characters
These implementations assume you're using Colemak or Dvorak on your OS, not on your keyboard - this is referred to as a software-implemented layout. If your computer is in Qwerty and your keymap is in Colemak or Dvorak, this is referred to as a firmware-implemented layout, and you won't need these features.
To give an example, if you're using software-implemented Colemak, and want to get an `F`, you would use `CM_F`. Using `KC_F` under these same circumstances would result in `T`.
## Backlight Breathing
In order to enable backlight breathing, the following line must be added to your config.h file.
```
#define BACKLIGHT_BREATHING
```
The following function calls are used to control the breathing effect.
* `breathing_enable()` - Enable the free-running breathing effect.
* `breathing_disable()` - Disable the free-running breathing effect immediately.
* `breathing_self_disable()` - Disable the free-running breathing effect after the current effect ends.
* `breathing_toggle()` - Toggle the free-running breathing effect.
* `breathing_defaults()` - Reset the speed and brightness settings of the breathing effect.
The following function calls are used to control the maximum brightness of the breathing effect.
* `breathing_intensity_set(value)` - Set the brightness of the breathing effect when it is at its max value.
* `breathing_intensity_default()` - Reset the brightness of the breathing effect to the default value based on the current backlight intensity.
The following function calls are used to control the cycling speed of the breathing effect.
* `breathing_speed_set(value)` - Set the speed of the breathing effect - how fast it cycles.
* `breathing_speed_inc(value)` - Increase the speed of the breathing effect by a fixed value.
* `breathing_speed_dec(value)` - Decrease the speed of the breathing effect by a fixed value.
* `breathing_speed_default()` - Reset the speed of the breathing effect to the default value.
The following example shows how to enable the backlight breathing effect when the FUNCTION layer macro button is pressed:
```
case MACRO_FUNCTION:
if (record->event.pressed)
{
breathing_speed_set(3);
breathing_enable();
layer_on(LAYER_FUNCTION);
}
else
{
breathing_speed_set(1);
breathing_self_disable();
layer_off(LAYER_FUNCTION);
}
break;
```
The following example shows how to pulse the backlight on-off-on when the RAISED layer macro button is pressed:
```
case MACRO_RAISED:
if (record->event.pressed)
{
layer_on(LAYER_RAISED);
breathing_speed_set(2);
breathing_pulse();
update_tri_layer(LAYER_LOWER, LAYER_RAISED, LAYER_ADJUST);
}
else
{
layer_off(LAYER_RAISED);
update_tri_layer(LAYER_LOWER, LAYER_RAISED, LAYER_ADJUST);
}
break;
```
## Other firmware shortcut keycodes
* `RESET` - puts the MCU in DFU mode for flashing new firmware \(with `make dfu`\)
* `DEBUG` - the firmware into debug mode - you'll need hid\_listen to see things
* `BL_ON` - turns the backlight on
* `BL_OFF` - turns the backlight off
* `BL_<n>` - sets the backlight to level _n_
* `BL_INC` - increments the backlight level by one
* `BL_DEC` - decrements the backlight level by one
* `BL_TOGG` - toggles the backlight
* `BL_STEP` - steps through the backlight levels
Enable the backlight from the Makefile.
# Custom Quantum functions
All of these functions are available in the `*_kb()` or `*_user()` variety. `kb` ones should only be used in the `<keyboard>/<keyboard>.c` file, and `user` ones should only be used in the `keymap.c`. The keyboard ones call the user ones - it's necessary to keep these calls to allow the keymap functions to work correctly.
## `void matrix_init_*(void)`
This function gets called when the matrix is initiated, and can contain start-up code for your keyboard/keymap.
## `void matrix_scan_*(void)`
This function gets called at every matrix scan, which is basically as often as the MCU can handle. Be careful what you put here, as it will get run a lot.
## `bool process_record_*(uint16_t keycode, keyrecord_t *record)`
This function gets called on every keypress/release, and is where you can define custom functionality. The return value is whether or not QMK should continue processing the keycode - returning `false` stops the execution.
The `keycode` variable is whatever is defined in your keymap, eg `MO(1)`, `KC_L`, etc. and can be switch-cased to execute code whenever a particular code is pressed.
The `record` variable contains infomation about the actual press:
```
keyrecord_t record {
keyevent_t event {
keypos_t key {
uint8_t col
uint8_t row
}
bool pressed
uint16_t time
}
}
```
The conditional `if (record->event.pressed)` can tell if the key is being pressed or released, and you can execute code based on that.
## `void led_set_*(uint8_t usb_led)`
This gets called whenever there is a state change on your host LEDs \(eg caps lock, scroll lock, etc\). The LEDs are defined as:
```
#define USB_LED_NUM_LOCK 0
#define USB_LED_CAPS_LOCK 1
#define USB_LED_SCROLL_LOCK 2
#define USB_LED_COMPOSE 3
#define USB_LED_KANA 4
```
and can be tested against the `usb_led` with a conditional like `if (usb_led & (1<<USB_LED_CAPS_LOCK))` - if this is true, you can turn your LED on, otherwise turn it off.

94
docs/Key-Functions.md Normal file
View File

@ -0,0 +1,94 @@
# Quick Aliases To Common Actions
Your keymap can include shortcuts to common operations (called "function actions" in tmk).
These functions work the same way that their `ACTION_*` functions do - they're just quick aliases. To dig into all of the tmk `ACTION_*` functions, please see the [TMK documentation](https://github.com/qmk/qmk_firmware/blob/master/doc/keymap.md#2-action).
Instead of using `FNx` when defining `ACTION_*` functions, you can use `F(x)` - the benefit here is being able to use more than 32 function actions (up to 4096), if you happen to need them.
### Switching and toggling layers
`MO(layer)` - momentary switch to *layer*. As soon as you let go of the key, the layer is deactivated and you pop back out to the previous layer. When you apply this to a key, that same key must be set as `KC_TRNS` on the destination layer. Otherwise, you won't make it back to the original layer when you release the key (and you'll get a keycode sent). You can only switch to layers *above* your current layer. If you're on layer 0 and you use `MO(1)`, that will switch to layer 1 just fine. But if you include `MO(3)` on layer 5, that won't do anything for you -- because layer 3 is lower than layer 5 on the stack.
`OSL(layer)` - momentary switch to *layer*, as a one-shot operation. So if you have a key that's defined as `OSL(1)`, and you tap that key, then only the very next keystroke would come from layer 1. You would drop back to layer zero immediately after that one keystroke. That's handy if you have a layer full of custom shortcuts -- for example, a dedicated key for closing a window. So you tap your one-shot layer mod, then tap that magic 'close window' key, and keep typing like a boss. Layer 1 would remain active as long as you hold that key down, too (so you can use it like a momentary toggle-layer key with extra powers).
`LT(layer, kc)` - momentary switch to *layer* when held, and *kc* when tapped. Like `MO()`, this only works upwards in the layer stack (`layer` must be higher than the current layer).
`TG(layer)` - toggles a layer on or off. As with `MO()`, you should set this key as `KC_TRNS` in the destination layer so that tapping it again actually toggles back to the original layer. Only works upwards in the layer stack.
`TO(layer)` - Goes to a layer. This code is special, because it lets you go either up or down the stack -- just goes directly to the layer you want. So while other codes only let you go _up_ the stack (from layer 0 to layer 3, for example), `TO(2)` is going to get you to layer 2, no matter where you activate it from -- even if you're currently on layer 5. This gets activated on keydown (as soon as the key is pressed).
`TT(layer)` - Layer Tap-Toggle. If you hold the key down, the layer becomes active, and then deactivates when you let go. And if you tap it, the layer simply becomes active (toggles on). It needs 5 taps by default, but you can set it by defining `TAPPING_TOGGLE`, for example, `#define TAPPING_TOGGLE 1` for just one tap.
### Fun with modifier keys
* `LSFT(kc)` - applies left Shift to *kc* (keycode) - `S(kc)` is an alias
* `RSFT(kc)` - applies right Shift to *kc*
* `LCTL(kc)` - applies left Control to *kc*
* `RCTL(kc)` - applies right Control to *kc*
* `LALT(kc)` - applies left Alt to *kc*
* `RALT(kc)` - applies right Alt to *kc*
* `LGUI(kc)` - applies left GUI (command/win) to *kc*
* `RGUI(kc)` - applies right GUI (command/win) to *kc*
* `HYPR(kc)` - applies Hyper (all modifiers) to *kc*
* `MEH(kc)` - applies Meh (all modifiers except Win/Cmd) to *kc*
* `LCAG(kc)` - applies CtrlAltGui to *kc*
You can also chain these, like this:
LALT(LCTL(KC_DEL)) -- this makes a key that sends Alt, Control, and Delete in a single keypress.
The following shortcuts automatically add `LSFT()` to keycodes to get commonly used symbols. Their long names are also available and documented in `quantum/quantum_keycodes.h`.
KC_TILD ~
KC_EXLM !
KC_QUES ?
KC_AT @
KC_HASH #
KC_DLR $
KC_PERC %
KC_CIRC ^
KC_AMPR &
KC_ASTR *
KC_LPRN (
KC_RPRN )
KC_UNDS _
KC_PLUS +
KC_DQUO "
KC_LCBR {
KC_RCBR }
KC_LABK <
KC_RABK >
KC_PIPE |
KC_COLN :
`OSM(mod)` - this is a "one shot" modifier. So let's say you have your left Shift key defined as `OSM(MOD_LSFT)`. Tap it, let go, and Shift is "on" -- but only for the next character you'll type. So to write "The", you don't need to hold down Shift -- you tap it, tap t, and move on with life. And if you hold down the left Shift key, it just works as a left Shift key, as you would expect (so you could type THE). There's also a magical, secret way to "lock" a modifier by tapping it multiple times. If you want to learn more about that, open an issue. :)
`MT(mod, kc)` - is *mod* (modifier key - MOD_LCTL, MOD_LSFT) when held, and *kc* when tapped. In other words, you can have a key that sends Esc (or the letter O or whatever) when you tap it, but works as a Control key or a Shift key when you hold it down.
These are the values you can use for the `mod` in `MT()` and `OSM()`:
* MOD_LCTL
* MOD_LSFT
* MOD_LALT
* MOD_LGUI
* MOD_RCTL
* MOD_RSFT
* MOD_RALT
* MOD_RGUI
* MOD_HYPR
* MOD_MEH
These can also be combined like `MOD_LCTL | MOD_LSFT` e.g. `MT(MOD_LCTL | MOD_LSFT, KC_ESC)` which would activate Control and Shift when held, and send Escape when tapped. Note however, that you cannot mix right and left side modifiers.
We've added shortcuts to make common modifier/tap (mod-tap) mappings more compact:
* `CTL_T(kc)` - is LCTL when held and *kc* when tapped
* `SFT_T(kc)` - is LSFT when held and *kc* when tapped
* `ALT_T(kc)` - is LALT when held and *kc* when tapped
* `ALGR_T(kc)` - is AltGr when held and *kc* when tapped
* `GUI_T(kc)` - is LGUI when held and *kc* when tapped
* `ALL_T(kc)` - is Hyper (all mods) when held and *kc* when tapped. To read more about what you can do with a Hyper key, see [this blog post by Brett Terpstra](http://brettterpstra.com/2012/12/08/a-useful-caps-lock-key/)
* `LCAG_T(kc)` - is CtrlAltGui when held and *kc* when tapped
* `MEH_T(kc)` - is like Hyper, but not as cool -- does not include the Cmd/Win key, so just sends Alt+Ctrl+Shift.

228
docs/Keycodes.md Normal file
View File

@ -0,0 +1,228 @@
# Overview
When defining a [keymap](Keymap.md) each key needs a valid key definition.
This page documents the symbols that correspond to keycodes that are available to you in QMK.
To customize your board, they can be used by themselves or as **action codes** in combination with one of the [many C macros](https://github.com/qmk/qmk_firmware/wiki#c-macros-for-action-code).
The source of truth for these codes is [tmk_core/common/keycode.h](https://github.com/qmk/qmk_firmware/blob/master/tmk_core/common/keycode.h) file in the qmk source code.
# The Keycodes
Keycodes in QMK are based on [HID Usage Keyboard/Keypad Page(0x07)](http://www.usb.org/developers/hidpage/Hut1_12v2.pdf) with following exceptions:
* `KC_NO` = 0 for no action
* `KC_TRNS` = 1 for layer transparency
* internal special keycodes in the `0xA5-DF` range (tmk heritage).
## Letters and Numbers
|KC_1|KC_2|KC_3|KC_4|KC_5|KC_6|KC_7|KC_8|
|----|----|----|----|----|----|----|----|
|KC_9|KC_0|KC_F1|KC_F2|KC_F3|KC_F4|KC_F5|KC_F6|
|KC_F7|KC_F8|KC_F9|KC_F10|KC_F11|KC_F12|KC_F13|KC_F14|
|KC_F15|KC_F16|KC_F17|KC_F18|KC_F19|KC_F20|KC_F21|KC_F22|
|KC_F23|KC_F24|KC_A|KC_B|KC_C|KC_D|KC_E|KC_F|
|KC_G|KC_H|KC_I|KC_J|KC_K|KC_L|KC_M|KC_N|
|KC_O|KC_P|KC_Q|KC_R|KC_S|KC_T|KC_U|KC_V|
|KC_W|KC_X|KC_Y|KC_Z|||||
## Punctuation
|Long Name|Short Name|Description|
|---------|----------|-----------|
|KC_ENTER|KC_ENT|`Return (ENTER)`|
|KC_ESCAPE|KC_ESC|`ESCAPE`|
|KC_BSPACE|KC_BSPC|`DELETE (Backspace)`|
|KC_TAB||`Tab`|
|KC_SPACE|KC_SPC|Spacebar|
|KC_MINUS|KC_MINS|`-` and `_`|
|KC_EQUAL|KC_EQL|`=` and `+`|
|KC_LBRACKET|KC_LBRC|`[` and `{`|
|KC_RBRACKET|KC_RBRC|`]` and `}`|
|KC_BSLASH|KC_BSLS|`\` and <code>&#124;</code> |
|KC_NONUS_HASH|KC_NUHS|Non-US `#` and `~`|
|KC_NONUS_BSLASH|KC_NUBS|Non-US `\` and <code>&#124;</code> |
|KC_INT1|KC_RO|JIS `\` and <code>&#124;</code> |
|KC_INT2|KC_KANA|International216|
|KC_INT3|KC_JYEN|Yen Symbol (`¥`)|
|KC_SCOLON|KC_SCLN|`;` and `:`|
|KC_QUOTE|KC_QUOT|`` and `“`|
|KC_GRAVE|KC_GRV|Grave Accent and Tilde|
|KC_COMMA|KC_COMM|`,` and `<`|
|KC_DOT||`.` and `>`|
|KC_SLASH|KC_SLSH|`/` and `?`|
|KC_CAPSLOCK|KC_CAPS|Caps Lock|
## Modifiers
|Long Name|Short Name|Description|
|---------|----------|-----------|
|KC_LCTRL|KC_LCTL|LeftControl|
|KC_LSHIFT|KC_LSFT|LeftShift|
|KC_LALT||LeftAlt|
|KC_LGUI||Left GUI(Windows/Apple/Meta key)|
|KC_RCTRL|KC_RCTL|RightControl|
|KC_RSHIFT|KC_RSFT|RightShift|
|KC_RALT||RightAlt|
|KC_RGUI||Right GUI(Windows/Apple/Meta key)|
|KC_LOCKING_CAPS||Locking Caps Lock12|
|KC_LOCKING_NUM||Locking Num Lock12|
|KC_LOCKING_SCROLL||Locking Scroll Lock12|
|KC_INT4|KC_HENK|JIS Henken|
|KC_INT5|KC_MHEN|JIS Muhenken|
## Commands
|Long Name|Short Name|Description|
|---------|----------|-----------|
|KC_PSCREEN|KC_PSCR|PrintScreen1|
|KC_SCKLOCK|KC_SLCK|Scroll Lock11|
|KC_PAUSE|KC_PAUS|Pause1|
|KC_INSERT|KC_INS|Insert1|
|KC_HOME||Home1|
|KC_PGUP||PageUp1|
|KC_DELETE|KC_DEL|Delete Forward|
|KC_END||End1|
|KC_PGDOWN|KC_PGDN|PageDown1|
|KC_RIGHT|KC_RGHT|RightArrow1|
|KC_LEFT||LeftArrow1|
|KC_DOWN||DownArrow1|
|KC_UP||UpArrow1|
|KC_APPLICATION|KC_APP|Application10|
|KC_POWER||Power9|
|KC_EXECUTE||Execute|
|KC_HELP||Help|
|KC_MENU||Menu|
|KC_SELECT||Select|
|KC_AGAIN||Again|
|KC_UNDO||Undo|
|KC_CUT||Cut|
|KC_COPY||Copy|
|KC_PASTE||Paste|
|KC_FIND||Find|
|KC_ALT_ERASE||Alternate Erase7|
|KC_SYSREQ||SysReq/Attention1|
|KC_CANCEL||Cancel|
|KC_CLEAR||Clear|
|KC_PRIOR||Prior|
|KC_RETURN||Return|
|KC_SEPARATOR||Separator|
|KC_OUT||Out|
|KC_OPER||Oper|
|KC_CLEAR_AGAIN||Clear/Again|
|KC_CRSEL||CrSel/Props|
|KC_EXSEL||ExSel|
|KC_SYSTEM_POWER|KC_PWR|System Power Down|
|KC_SYSTEM_SLEEP|KC_SLEP|System Sleep|
|KC_SYSTEM_WAKE|KC_WAKE|System Wake|
|KC_MAIL|KC_MAIL||
|KC_CALCULATOR|KC_CALC||
|KC_MY_COMPUTER|KC_MYCM||
|KC_WWW_SEARCH|KC_WSCH||
|KC_WWW_HOME|KC_WHOM||
|KC_WWW_BACK|KC_WBAK||
|KC_WWW_FORWARD|KC_WFWD||
|KC_WWW_STOP|KC_WSTP||
|KC_WWW_REFRESH|KC_WREF||
|KC_WWW_FAVORITES|KC_WFAV||
## Media Keys
Windows and Mac use different key codes for next track and previous track. Make sure you choose the keycode that corresponds to your OS.
|Long Name|Short Name|Description|
|---------|----------|-----------|
|KC_STOP||Stop|
|KC__MUTE||Mute|
|KC__VOLUP||Volume Up|
|KC__VOLDOWN||Volume Down|
|KC_AUDIO_MUTE|KC_MUTE||
|KC_AUDIO_VOL_UP|KC_VOLU||
|KC_AUDIO_VOL_DOWN|KC_VOLD||
|KC_MEDIA_NEXT_TRACK|KC_MNXT|Next Track (Windows)|
|KC_MEDIA_PREV_TRACK|KC_MPRV|Previous Track (Windows)|
|KC_MEDIA_FAST_FORWARD|KC_MFFD|Next Track (macOS)|
|KC_MEDIA_REWIND|KC_MRWD|Previous Track (macOS)|
|KC_MEDIA_STOP|KC_MSTP||
|KC_MEDIA_PLAY_PAUSE|KC_MPLY||
|KC_MEDIA_SELECT|KC_MSEL||
## Numpad
|Long Name|Short Name|Description|
|---------|----------|-----------|
|KC_NUMLOCK|KC_NLCK|Keypad Num Lock and Clear11|
|KC_KP_SLASH|KC_PSLS|Keypad /|
|KC_KP_ASTERISK|KC_PAST|Keypad *|
|KC_KP_MINUS|KC_PMNS|Keypad -|
|KC_KP_PLUS|KC_PPLS|Keypad +|
|KC_KP_ENTER|KC_PENT|Keypad ENTER5|
|KC_KP_1|KC_P1|Keypad 1 and End|
|KC_KP_2|KC_P2|Keypad 2 and Down Arrow|
|KC_KP_3|KC_P3|Keypad 3 and PageDn|
|KC_KP_4|KC_P4|Keypad 4 and Left Arrow|
|KC_KP_5|KC_P5|Keypad 5|
|KC_KP_6|KC_P6|Keypad 6 and Right Arrow|
|KC_KP_7|KC_P7|Keypad 7 and Home|
|KC_KP_8|KC_P8|Keypad 8 and Up Arrow|
|KC_KP_9|KC_P9|Keypad 9 and PageUp|
|KC_KP_0|KC_P0|Keypad 0 and Insert|
|KC_KP_DOT|KC_PDOT|Keypad . and Delete|
|KC_KP_EQUAL|KC_PEQL|Keypad =|
|KC_KP_COMMA|KC_PCMM|Keypad Comma27|
|KC_KP_EQUAL_AS400||Keypad Equal Sign29|
## Special Keys
|Long Name|Short Name|Description|
|---------|----------|-----------|
|KC_NO||Ignore this key. (NOOP) |
## Mousekey
|Long Name|Short Name|Description|
|---------|----------|-----------|
|KC_MS_UP|KC_MS_U|Mouse Cursor Up|
|KC_MS_DOWN|KC_MS_D|Mouse Cursor Down|
|KC_MS_LEFT|KC_MS_L|Mouse Cursor Left|
|KC_MS_RIGHT|KC_MS_R|Mouse Cursor Right|
|KC_MS_BTN1|KC_BTN1|Mouse Button 1|
|KC_MS_BTN2|KC_BTN2|Mouse Button 2|
|KC_MS_BTN3|KC_BTN3|Mouse Button 3|
|KC_MS_BTN4|KC_BTN4|Mouse Button 4|
|KC_MS_BTN5|KC_BTN5|Mouse Button 5|
|KC_MS_WH_UP|KC_WH_U|Mouse Wheel Up|
|KC_MS_WH_DOWN|KC_WH_D|Mouse Wheel Down|
|KC_MS_WH_LEFT|KC_WH_L|Mouse Wheel Left|
|KC_MS_WH_RIGHT|KC_WH_R|Mouse Wheel Right|
|KC_MS_ACCEL0|KC_ACL0|Mouse Acceleration 0|
|KC_MS_ACCEL1|KC_ACL1|Mouse Acceleration 1|
|KC_MS_ACCEL2|KC_ACL2|Mouse Acceleration 2|
## Magic Keys
The following keys can be used to turn on and off various "Magic" features. These include Boot Magic (holding certain keys down while plugging the keyboard in) and the Magic Key.
|Long Name|Short Name|Description|
|---------|----------|-----------|
|MAGIC_SWAP_CONTROL_CAPSLOCK||Swap Capslock and Control|
|MAGIC_CAPSLOCK_TO_CONTROL||Change Capslock to Control|
|MAGIC_SWAP_ALT_GUI||Swap ALT and GUI|
|MAGIC_SWAP_LALT_LGUI||Swap LALT and LGUI|
|MAGIC_SWAP_RALT_RGUI||Swap RALT and RGUI|
|MAGIC_NO_GUI||Disable off the GUI key|
|MAGIC_SWAP_GRAVE_ESC||Swap the GRAVE (~ `) and Esc keys|
|MAGIC_SWAP_BACKSLASH_BACKSPACE||Swap Backslash and Backspace|
|MAGIC_UNSWAP_CONTROL_CAPSLOCK||Disable the Control/Caps Swap|
|MAGIC_UNCAPSLOCK_TO_CONTROL||Turn Capslock back into Capslock|
|MAGIC_UNSWAP_ALT_GUI||Turn the ALT/GUI swap off|
|MAGIC_UNSWAP_LALT_LGUI||Turn the LALT/LGUI swap off|
|MAGIC_UNSWAP_RALT_RGUI||Turn the RALT/RGUI swap off|
|MAGIC_UNNO_GUI||Enable the GUI key|
|MAGIC_UNSWAP_GRAVE_ESC||Turn the GRAVE/ESC swap off|
|MAGIC_UNSWAP_BACKSLASH_BACKSPACE||Turn the Backslash/Backspace swap off|
|MAGIC_HOST_NKRO||Turn NKRO on|
|MAGIC_UNHOST_NKRO||Turn NKRO off|
|MAGIC_TOGGLE_NKRO||Toggle NKRO on or off|

37
docs/Keymap-examples.md Normal file
View File

@ -0,0 +1,37 @@
# Share your keymap idea here!
https://github.com/tmk/tmk_keyboard/issues/265
---
## Reverse-shifted for numbers
With pressing Shift and '1' key you get **1** while with just '1' key you get **!**.
- https://geekhack.org/index.php?topic=41989.msg1959718#msg1959718
## KBT Pure layout
Keymap code on Alps64
https://github.com/thisisshi/tmk_keyboard/blob/15fe63e8d181a8a95988dcc71929f0024df55caa/keyboard/alps64/keymap_pure.c
and guide.
https://github.com/thisisshi/tmk_keyboard/blob/77ac0805ade565fb23657e3644c920ada71edccf/keyboard/alps64/Guide.md
## Prevent stuck modifiers
Consider the following scenario:
1. Layer 0 has a key defined as Shift.
2. The same key is defined on layer 1 as the letter A.
3. User presses Shift.
4. User switches to layer 1 for whatever reason.
5. User releases Shift, or rather the letter A.
6. User switches back to layer 0.
Shift was actually never released and is still considered pressed.
If such situation bothers you add this to your `config.h`:
#define PREVENT_STUCK_MODIFIERS
This option uses 5 bytes of memory per every 8 keys on the keyboard
rounded up (5 bits per key). For example on Planck (48 keys) it uses
(48/8)\*5 = 30 bytes.

222
docs/Keymap.md Normal file
View File

@ -0,0 +1,222 @@
# Keymap Overview
QMK keymaps are defined inside a C source file. The data structure is an array of arrays. The outer array is a list of layer arrays while the inner layer array is a list of keys. Most keyboards define a `KEYMAP()` macro to help you create this array of arrays.
## Keymap and layers
In QMK, **`const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS]`** holds multiple **layers** of keymap information in **16 bit** data holding the **action code**. You can define **32 layers** at most.
For trivial key definitions, the higher 8 bits of the **action code** are all 0 and the lower 8 bits holds the USB HID usage code generated by the key as **keycode**.
Respective layers can be validated simultaneously. Layers are indexed with 0 to 31 and higher layer has precedence.
Keymap: 32 Layers Layer: action code matrix
----------------- ---------------------
stack of layers array_of_action_code[row][column]
____________ precedence _______________________
/ / | high / ESC / F1 / F2 / F3 ....
31 /___________// | /-----/-----/-----/-----
30 /___________// | / TAB / Q / W / E ....
29 /___________/ | /-----/-----/-----/-----
: _:_:_:_:_:__ | : /LCtrl/ A / S / D ....
: / : : : : : / | : / : : : :
2 /___________// | 2 `--------------------------
1 /___________// | 1 `--------------------------
0 /___________/ V low 0 `--------------------------
Sometimes, the action code stored in keymap may be referred as keycode in some documents due to the TMK history.
### Keymap layer status
Keymap layer has its state in two 32 bit parameters:
* **`default_layer_state`** indicates a base keymap layer(0-31) which is always valid and to be referred.
* **`layer_state`** () has current on/off status of the layer on its each bit.
Keymap has its state in two parameter **`default_layer`** indicates a base keymap layer(0-31) which is always valid and to be referred, **`keymap_stat`** is 16bit variable which has current on/off status of layers on its each bit.
Keymap layer '0' is usually `default_layer` and which is the only valid layer and other layers is initially off after boot up firmware, though, you can configured them in `config.h`.
To change `default_layer` will be useful when you switch key layout completely, say you want Colmak instead of Qwerty.
Initial state of Keymap Change base layout
----------------------- ------------------
31 31
30 30
29 29
: :
: : ____________
2 ____________ 2 / /
1 / / ,->1 /___________/
,->0 /___________/ | 0
| |
`--- default_layer = 0 `--- default_layer = 1
layer_state = 0x00000001 layer_state = 0x00000002
On the other hand, you shall change `layer_state` to overlay base layer with some layers for feature such as navigation keys, function key(F1-F12), media keys or special actions.
Overlay feature layer
--------------------- bit|status
____________ ---+------
31 / / 31 | 0
30 /___________// -----> 30 | 1
29 /___________/ -----> 29 | 1
: : | :
: ____________ : | :
2 / / 2 | 0
,->1 /___________/ -----> 1 | 1
| 0 0 | 0
| +
`--- default_layer = 1 |
layer_state = 0x60000002 <-'
### Layer Precedence and Transparency
Note that ***higher layer has higher priority on stack of layers***, namely firmware falls down from top layer to bottom to look up keycode. Once it spots keycode other than **`KC_TRNS`**(transparent) on a layer it stops searching and lower layers aren't referred.
You can place `KC_TRANS` on overlay layer changes just part of layout to fall back on lower or base layer.
Key with `KC_TRANS` (`KC_TRNS` and `_______` are the alias) doesn't has its own keycode and refers to lower valid layers for keycode, instead.
## Anatomy Of A `keymap.c`
For this example we will walk through the [default Clueboard keymap](https://github.com/qmk/qmk_firmware/blob/master/keyboards/clueboard/keymaps/default/keymap.c). You'll find it helpful to open that file in another browser window so you can look at everything in context.
There are 3 main sections of a `keymap.c` file you'll want to concern yourself with:
* [The Definitions](#definitions)
* [The Layer/Keymap Datastructure](#layers-and-keymaps)
* [Custom Functions](#custom-functions), if any
### Definitions
At the top of the file you'll find this:
#include "clueboard.h"
// Helpful defines
#define GRAVE_MODS (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT)|MOD_BIT(KC_LGUI)|MOD_BIT(KC_RGUI)|MOD_BIT(KC_LALT)|MOD_BIT(KC_RALT))
#define _______ KC_TRNS
// Each layer gets a name for readability.
// The underscores don't mean anything - you can
// have a layer called STUFF or any other name.
// Layer names don't all need to be of the same
// length, and you can also skip them entirely
// and just use numbers.
#define _BL 0
#define _FL 1
#define _CL 2
These are some handy definitions we can use when building our keymap and our custom function. The `GRAVE_MODS` definition will be used later in our custom function. The `_______` define makes it easier to see what keys a layer is overriding, while the `_BL`, `_FL`, and `_CL` defines make it easier to refer to each of our layers.
### Layers and Keymaps
The main part of this file is the `keymaps[]` definition. This is where you list your layers and the contents of those layers. This part of the file begins with this definition:
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
After this you'll find a list of KEYMAP() macros. A KEYMAP() is simply a list of keys to define a single layer. Typically you'll have one or more "base layers" (such as QWERTY, Dvorak, or Colemak) and then you'll layer on top of that one or more "function" layers. Due to the way layers are processed you can't overlay a "lower" layer on top of a "higher" layer.
`keymaps[][MATRIX_ROWS][MATRIX_COLS]` in QMK holds the 16 bit action code (sometimes referred as the quantum keycode) in it. For the keycode representing typical keys, its high byte is 0 and its low byte is the USB HID usage ID for keyboard.
> TMK from which QMK was forked uses `const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS]` instead and holds the 8 bit keycode. Some keycode values are reserved to induce execution of certain action codes via the `fn_actions[]` array.
#### Base Layer
Here is an example of the Clueboard's base layer:
/* Keymap _BL: Base Layer (Default Layer)
*/
[_BL] = KEYMAP(
F(0), KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_GRV, KC_BSPC, KC_PGUP, \
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGDN, \
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, \
KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RO, KC_RSFT, KC_UP, \
KC_LCTL, KC_LGUI, KC_LALT, KC_MHEN, KC_SPC,KC_SPC, KC_HENK, KC_RALT, KC_RCTL, MO(_FL), KC_LEFT, KC_DOWN, KC_RGHT),
Some interesting things to note about this:
* From a C source point of view it's only a single array, but we have embedded whitespace to more easily visualize where each key is on the physical device.
* Plain keyboard scancodes are prefixed with KC_, while "special" keys are not.
* The upper left key activates custom function 0 (`F(0)`)
* The "Fn" key is defined with `MO(_FL)`, which moves to the `_FL` layer while that key is being held down.
#### Function Overlay Layer
Our function layer is, from a code point of view, no different from the base layer. Conceptually, however, you will build that layer as an overlay, not a replacement. For many people this distinction does not matter, but as you build more complicated layering setups it matters more and more.
[_FL] = KEYMAP(
KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, KC_DEL, BL_STEP, \
_______, _______, _______,_______,_______,_______,_______,_______,KC_PSCR,KC_SLCK, KC_PAUS, _______, _______, _______, _______, \
_______, _______, MO(_CL),_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, \
_______, _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, KC_PGUP, \
_______, _______, _______, _______, _______,_______, _______, _______, _______, MO(_FL), KC_HOME, KC_PGDN, KC_END),
Some interesting things to note:
* We have used our `_______` definition to turn `KC_TRNS` into `_______`. This makes it easier to spot the keys that have changed on this layer.
* While in this layer if you press one of the `_______` keys it will activate the key in the next lowest active layer.
### Custom Functions
At the bottom of the file we've defined a single custom function. This function defines a key that sends `KC_ESC` when pressed without modifiers and `KC_GRAVE` when modifiers are held. There are a couple pieces that need to be in place for this to work, and we will go over both of them.
#### `fn_actions[]`
We define the `fn_actions[]` array to point to custom functions. `F(N)` in a keymap will call element N of that array. For the Clueboard's that looks like this:
const uint16_t PROGMEM fn_actions[] = {
[0] = ACTION_FUNCTION(0), // Calls action_function()
};
In this case we've instructed QMK to call the `ACTION_FUNCTION` callback, which we will define in the next section.
> This `fn_actions[]` interface is mostly for backward compatibility. In QMK, you don't need to use `fn_actions[]`. You can directly use `ACTION_FUNCTION(N)` or any other action code value itself normally generated by the macro in `keymaps[][MATRIX_ROWS][MATRIX_COLS]`. N in `F(N)` can only be 0 to 31. Use of the action code directly in `keymaps` unlocks this limitation.
#### `action_function()`
To actually handle the keypress event we define an `action_function()`. This function will be called when the key is pressed, and then again when the key is released. We have to handle both situations within our code, as well as determining whether to send/release `KC_ESC` or `KC_GRAVE`.
void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) {
static uint8_t mods_pressed;
switch (id) {
case 0:
/* Handle the combined Grave/Esc key
*/
mods_pressed = get_mods()&GRAVE_MODS; // Check to see what mods are pressed
if (record->event.pressed) {
/* The key is being pressed.
*/
if (mods_pressed) {
add_key(KC_GRV);
send_keyboard_report();
} else {
add_key(KC_ESC);
send_keyboard_report();
}
} else {
/* The key is being released.
*/
if (mods_pressed) {
del_key(KC_GRV);
send_keyboard_report();
} else {
del_key(KC_ESC);
send_keyboard_report();
}
}
break;
}
}
# Nitty Gritty Details
This should have given you a basic overview for creating your own keymap. For more details see the following resources:
* https://github.com/qmk/qmk_firmware/wiki/Keycodes
* https://github.com/qmk/qmk_firmware/wiki/FAQ-Keymap
* https://github.com/qmk/qmk_firmware/wiki/Keymap-examples
We are actively working to improve these docs. If you have suggestions for how they could be made better please [file an issue](https://github.com/qmk/qmk_firmware/issues/new)!

29
docs/Kiibohd.asciidoc Normal file
View File

@ -0,0 +1,29 @@
== KLL vs TMK
1. **Shift** = Memontary
1. Latch = One shot
1. Lock = Toggle
## KLL terminology
### Fall-through
When a key is undefined on a particular layer, the key
definition on the previously stacked layer will be used. Eventually
the key definition will be set to using the default layer. If the None
keyword is used, then the fall-through will stop and no action will
take place.
###Latch
When referring to keyboards, a key function that is only enabled
until the release of the next keypress.
###Lock
When referring to keyboards, a key function that is enabled until
that key is pressed again (e.g. Caps Lock).
### NKRO
N-Key Rollover is the capability to press N number of keys at the
same time on a keyboard and have them all register on the OS simultaneously.
### Scan Code
Row x Column code or native protocol code used by the keyboard.
### Shift
When referring to keyboards, a key function that is enabled while
that key is held.
### USB Code
Keyboard Press/Release codes as defined by the USB HID
Spec.

37
docs/Leader-Key.md Normal file
View File

@ -0,0 +1,37 @@
# The Leader key: A new kind of modifier
If you've ever used Vim, you know what a Leader key is. If not, you're about to discover a wonderful concept. :) Instead of hitting Alt+Shift+W for example (holding down three keys at the same time), what if you could hit a _sequence_ of keys instead? So you'd hit our special modifier (the Leader key), followed by W and then C (just a rapid succession of keys), and something would happen.
That's what `KC_LEAD` does. Here's an example:
1. Pick a key on your keyboard you want to use as the Leader key. Assign it the keycode `KC_LEAD`. This key would be dedicated just for this -- it's a single action key, can't be used for anything else.
2. Include the line `#define LEADER_TIMEOUT 300` somewhere in your keymap.c file, probably near the top. The 300 there is 300ms -- that's how long you have for the sequence of keys following the leader. You can tweak this value for comfort, of course.
3. Within your `matrix_scan_user` function, do something like this:
```
LEADER_EXTERNS();
void matrix_scan_user(void) {
LEADER_DICTIONARY() {
leading = false;
leader_end();
SEQ_ONE_KEY(KC_F) {
register_code(KC_S);
unregister_code(KC_S);
}
SEQ_TWO_KEYS(KC_A, KC_S) {
register_code(KC_H);
unregister_code(KC_H);
}
SEQ_THREE_KEYS(KC_A, KC_S, KC_D) {
register_code(KC_LGUI);
register_code(KC_S);
unregister_code(KC_S);
unregister_code(KC_LGUI);
}
}
}
```
As you can see, you have three function. you can use - `SEQ_ONE_KEY` for single-key sequences (Leader followed by just one key), and `SEQ_TWO_KEYS` and `SEQ_THREE_KEYS` for longer sequences. Each of these accepts one or more keycodes as arguments. This is an important point: You can use keycodes from **any layer on your keyboard**. That layer would need to be active for the leader macro to fire, obviously.

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,38 @@
# Overview
As raised in #1038 and other issues, the licensing status of QMK is not clear. In an effort to remove ambiguity and to clarify the licensing status of the quantum code we are identifying the providence of our source code files and clarifying what license applies to each one.
# Signoff
This section documents the people who need to sign off on applying the GPL to one or more of their contributions. If your name appears below and you consent to applying the GPL to your contributions, please put today's date in the last field of your row. Please stick to the following date format: 2017 Jan 28
Username | Files | Sign Off Date |
---------|-------|---------------|
@0xdec | quantum/rgblight.c | 2017 Jan 29 |
@algernon | quantum/quantum.c<br>quantum/quantum.h<br>quantum/process_keycode/process_tap_dance.c<br>quantum/process_keycode/process_tap_dance.h<br>quantum/process_keycode/process_unicode.c<br>quantum/process_keycode/process_unicode.h | 2017 Jan 29 |
@cdlm | quantum/template/template.c<br>quantum/template/template.h | 2017 Feb 03 |
@DidierLoiseau | quantum/keymap_extras/keymap_canadian_multilingual.h<br>quantum/keymap_extras/keymap_bepo.h |2017 Jan 29 |
@eltang | quantum/config_common.h<br>quantum/matrix.c<br>quantum/quantum.c<br>quantum/quantum.h<br>quantum/rgblight.c<br>quantum/rgblight.h<br>quantum/template/config.h | 2017 Feb 28 |
@ezuk | quantum/matrix.c<br>quantum/quantum.c<br>quantum/quantum.h<br>quantum/quantum_keycodes.h<br>quantum/rgblight.c<br>quantum/rgblight.h<br>quantum/keymap_extras/keymap_colemak.h<br>quantum/keymap_extras/keymap_nordic.h | 2017 Jan 31 |
@fredizzimo | quantum/config_common.h<br>quantum/keycode_config.h<br>quantum/keymap.h<br>quantum/keymap_common.c<br>quantum/keymap_common.c<br>quantum/matrix.c<br>quantum/quantum.h<br>quantum/rgblight.c<br>quantum/rgblight.h<br>quantum/api/api_sysex.c | 2017 Jan 29 |
@h-youhei | quantum/keymap_extras/keymap_jp.h | 2017 Jan 28 |
@heartsekai | quantum/keymap_extras/keymap_german_ch.h | 2017 Jan 29 |
@IBnobody | quantum/keycode_config.h<br>quantum/matrix.c<br>quantum/quantum.c<br>quantum/audio/audio.c<br>quantum/audio/audio.h<br>quantum/audio/audio_pwm.c<br>quantum/audio/audio_pwm.c<br>quantum/audio/voices.c<br>quantum/audio/voices.h<br>quantum/template/config.h<br>quantum/template/template.c | 2017 Jan 30 |
@jackhumbert | quantum/config_common.h<br>quantum/keycode_config.h<br>quantum/keymap.h<br>quantum/keymap_common.c<br>quantum/light_ws2812.c<br>quantum/light_ws2812.h<br>quantum/matrix.c<br>quantum/quantum.c<br>quantum/quantum.h<br>quantum/quantum_keycodes.h<br>quantum/rgblight.c<br>quantum/rgblight.h<br>quantum/api/api_sysex.c<br>quantum/audio/audio.c<br>quantum/audio/audio.h<br>quantum/audio/audio_pwm.c<br>quantum/audio/audio_pwm.c<br>quantum/audio/voices.c<br>quantum/audio/voices.h<br>quantum/keymap_extras/keymap_colemak.h<br>quantum/keymap_extras/keymap_dvorak.h<br>quantum/keymap_extras/keymap_fr_ch.h<br>quantum/keymap_extras/keymap_french.h<br>quantum/keymap_extras/keymap_french_osx.h<br>quantum/keymap_extras/keymap_german.h<br>quantum/keymap_extras/keymap_german_ch.h<br>quantum/keymap_extras/keymap_german_osx.h<br>quantum/keymap_extras/keymap_neo2.h<br>quantum/keymap_extras/keymap_nordic.h<br>quantum/keymap_extras/keymap_plover.h<br>quantum/keymap_extras/keymap_spanish.h<br>quantum/keymap_extras/keymap_uk.h<br>quantum/process_keycode/process_midi.c<br>quantum/process_keycode/process_music.c<br>quantum/process_keycode/process_tap_dance.c<br>quantum/process_keycode/process_tap_dance.h<br>quantum/process_keycode/process_unicode.c<br>quantum/process_keycode/process_unicode.h<br>quantum/template/config.h<br>quantum/template/template.c<br>quantum/template/template.h | 2017-01-29 |
@jakllsch | quantum/keymap_extras/keymap_dvorak.h<br>quantum/keymap_extras/keymap_fr_ch.h<br>quantum/keymap_extras/keymap_french.h<br>quantum/keymap_extras/keymap_german.h<br>quantum/keymap_extras/keymap_german_ch.h<br>quantum/keymap_extras/keymap_nordic.h<br>quantum/keymap_extras/keymap_spanish.h<br>quantum/keymap_extras/keymap_uk.h | 2017 Jan 29 |
kuel | quantum/keymap_extras/keymap_unicode_cyrillic.h<br>quantum/keymap_extras/keymap_russian.h | |
@lindhe | quantum/keymap_extras/keymap_nordic.h<br>quantum/keymap_extras/keymap_norwegian.h | 2017 Jan 30 |
@matzebond | quantum/keymap_extras/keymap_german.h<br>quantum/keymap_extras/keymap_neo2.h | 2017 Jan 30 |
@plgruener | quantum/keymap_extras/keymap_german.h<br>quantum/keymap_extras/keymap_neo2.h | 2017 Jan 30 |
@priyadi | quantum/quantum.c<br>quantum/process_keycode/process_unicode.c<br>quantum/process_keycode/process_unicode.h | 2017 Jan 31 |
@pvinis | quantum/quantum.c<br>quantum/quantum.h<br>quantum/process_keycode/process_tap_dance.c<br>quantum/process_keycode/process_tap_dance.h | 2017 Jan 29 |
@Smilliam | quantum/quantum.c | 2017 Feb 25 |
@sperochon | quantum/keymap_extras/keymap_french_osx.h | 2017 Jan 30 |
stephan . bosebeck at holidayinsider.com | quantum/keymap_extras/keymap_german_osx.h | 2017 Feb 15 |
@TerryMathews | quantum/quantum.c | 2017 Jan 29 |
@Twey | quantum/keymap_extras/keymap_plover.h | |
@Vifon | quantum/dynamic_macro.h<br>quantum/quantum.c | 2017 Feb 09 |
@vincent-pochet | quantum/keymap_extras/keymap_fr_ch.h | 2017 Feb 09 |
@wez | quantum/dynamic_macro.h | 2017 Jan 29 |
@Wilba6582 | quantum/keymap.h<br>quantum/keymap_common.c<br>quantum/quantum_keycodes.h | 2017 Feb 15 |
@yangliu | quantum/light_ws2812.c<br>quantum/light_ws2812.h<br>quantum/rgblight.c<br>quantum/rgblight.h | 2017 Jan 30 |

215
docs/Macros.md Normal file
View File

@ -0,0 +1,215 @@
# Macro shortcuts: Send a whole string when pressing just one key
Instead of using the `ACTION_MACRO` function, you can simply use `M(n)` to access macro *n* - *n* will get passed into the `action_get_macro` as the `id`, and you can use a switch statement to trigger it. This gets called on the keydown and keyup, so you'll need to use an if statement testing `record->event.pressed` (see keymap_default.c).
```c
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) // this is the function signature -- just copy/paste it into your keymap file as it is.
{
switch(id) {
case 0: // this would trigger when you hit a key mapped as M(0)
if (record->event.pressed) {
return MACRO( I(255), T(H), T(E), T(L), T(L), W(255), T(O), END ); // this sends the string 'hello' when the macro executes
}
break;
}
return MACRO_NONE;
};
```
A macro can include the following commands:
* I() change interval of stroke in milliseconds.
* D() press key.
* U() release key.
* T() type key(press and release).
* W() wait (milliseconds).
* END end mark.
So above you can see the stroke interval changed to 255ms between each keystroke, then a bunch of keys being typed, waits a while, then the macro ends.
Note: Using macros to have your keyboard send passwords for you is possible, but a bad idea.
## Advanced macro functions
To get more control over the keys/actions your keyboard takes, the following functions are available to you in the `action_get_macro` function block:
* `record->event.pressed`
This is a boolean value that can be tested to see if the switch is being pressed or released. An example of this is
```c
if (record->event.pressed) {
// on keydown
} else {
// on keyup
}
```
* `register_code(<kc>);`
This sends the `<kc>` keydown event to the computer. Some examples would be `KC_ESC`, `KC_C`, `KC_4`, and even modifiers such as `KC_LSFT` and `KC_LGUI`.
* `unregister_code(<kc>);`
Parallel to `register_code` function, this sends the `<kc>` keyup event to the computer. If you don't use this, the key will be held down until it's sent.
* `layer_on(<n>);`
This will turn on the layer `<n>` - the higher layer number will always take priority. Make sure you have `KC_TRNS` for the key you're pressing on the layer you're switching to, or you'll get stick there unless you have another plan.
* `layer_off(<n>);`
This will turn off the layer `<n>`.
* `clear_keyboard();`
This will clear all mods and keys currently pressed.
* `clear_mods();`
This will clear all mods currently pressed.
* `clear_keyboard_but_mods();`
This will clear all keys besides the mods currently pressed.
* `update_tri_layer(layer_1, layer_2, layer_3);`
If the user attempts to activate layer 1 AND layer 2 at the same time (for example, by hitting their respective layer keys), layer 3 will be activated. Layers 1 and 2 will _also_ be activated, for the purposes of fallbacks (so a given key will fall back from 3 to 2, to 1 -- and only then to 0).
### Naming your macros
If you have a bunch of macros you want to refer to from your keymap, while keeping the keymap easily readable, you can just name them like so:
```
#define AUD_OFF M(6)
#define AUD_ON M(7)
#define MUS_OFF M(8)
#define MUS_ON M(9)
#define VC_IN M(10)
#define VC_DE M(11)
#define PLOVER M(12)
#define EXT_PLV M(13)
```
As was done on the [Planck default keymap](https://github.com/qmk/qmk_firmware/blob/master/keyboards/planck/keymaps/default/keymap.c#L33-L40)
#### Timer functionality
It's possible to start timers and read values for time-specific events - here's an example:
```c
static uint16_t key_timer;
key_timer = timer_read();
if (timer_elapsed(key_timer) < 100) {
// do something if less than 100ms have passed
} else {
// do something if 100ms or more have passed
}
```
It's best to declare the `static uint16_t key_timer;` outside of the macro block (top of file, etc).
### Example: Single-key copy/paste (hold to copy, tap to paste)
With QMK, it's easy to make one key do two things, as long as one of those things is being a modifier. :) So if you want a key to act as Ctrl when held and send the letter R when tapped, that's easy: `CTL_T(KC_R)`. But what do you do when you want that key to send Ctrl-V (paste) when tapped, and Ctrl-C (copy) when held?
Here's what you do:
```
static uint16_t key_timer;
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
{
switch(id) {
case 0: {
if (record->event.pressed) {
key_timer = timer_read(); // if the key is being pressed, we start the timer.
}
else { // this means the key was just released, so we can figure out how long it was pressed for (tap or "held down").
if (timer_elapsed(key_timer) > 150) { // 150 being 150ms, the threshhold we pick for counting something as a tap.
return MACRO( D(LCTL), T(C), U(LCTL), END );
}
else {
return MACRO( D(LCTL), T(V), U(LCTL), END );
}
}
break;
}
}
return MACRO_NONE;
};
```
And then, to assign this macro to a key on your keyboard layout, you just use `M(0)` on the key you want to press for copy/paste.
# Dynamic macros: record and replay macros in runtime
In addition to the static macros described above, you may enable the dynamic macros which you may record while writing. They are forgotten as soon as the keyboard is unplugged. Only two such macros may be stored at the same time, with the total length of 64 keypresses (by default).
To enable them, first add a new element to the `planck_keycodes` enum — `DYNAMIC_MACRO_RANGE`:
enum planck_keycodes {
QWERTY = SAFE_RANGE,
COLEMAK,
DVORAK,
PLOVER,
LOWER,
RAISE,
BACKLIT,
EXT_PLV,
DYNAMIC_MACRO_RANGE,
};
It must be the last element because `dynamic_macros.h` will add some more keycodes after it.
Below it include the `dynamic_macro.h` header:
#include "dynamic_macro.h"`
Add the following keys to your keymap:
- `DYN_REC_START1` — start recording the macro 1,
- `DYN_REC_START2` — start recording the macro 2,
- `DYN_MACRO_PLAY1` — replay the macro 1,
- `DYN_MACRO_PLAY2` — replay the macro 2,
- `DYN_REC_STOP` — finish the macro that is currently being recorded.
Add the following code to the very beginning of your `process_record_user()` function:
if (!process_record_dynamic_macro(keycode, record)) {
return false;
}
That should be everything necessary. To start recording the macro, press either `DYN_REC_START1` or `DYN_REC_START2`. To finish the recording, press the `DYN_REC_STOP` layer button. To replay the macro, press either `DYN_MACRO_PLAY1` or `DYN_MACRO_PLAY2`.
Note that it's possible to replay a macro as part of a macro. It's ok to replay macro 2 while recording macro 1 and vice versa but never create recursive macros i.e. macro 1 that replays macro 1. If you do so and the keyboard will get unresponsive, unplug the keyboard and plug it again.
For users of the earlier versions of dynamic macros: It is still possible to finish the macro recording using just the layer modifier used to access the dynamic macro keys, without a dedicated `DYN_REC_STOP` key. If you want this behavior back, use the following snippet instead of the one above:
uint16_t macro_kc = (keycode == MO(_DYN) ? DYN_REC_STOP : keycode);
if (!process_record_dynamic_macro(macro_kc, record)) {
return false;
}
If the LED-s start blinking during the recording with each keypress, it means there is no more space for the macro in the macro buffer. To fit the macro in, either make the other macro shorter (they share the same buffer) or increase the buffer size by setting the `DYNAMIC_MACRO_SIZE` preprocessor macro (default value: 128; please read the comments for it in the header).
For the details about the internals of the dynamic macros, please read the comments in the `dynamic_macro.h` header.
# Sending strings
Some people want to have a password or some text on a key. This is possible without having to do every key individually using `SEND_STRING("<text>");`. Note the caps, because `send_string("<text>");` does something else. For example:
```c
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) // this is the function signature -- just copy/paste it into your keymap file as it is.
{
switch(id) {
case 0: // this would trigger when you hit a key mapped as M(0)
if (record->event.pressed) {
SEND_STRING("QMK is the best thing ever!"); // This would type "QMK is the best thing ever!" (without quotation marks).
return false; // This is false because it has to return something.
}
break;
}
return MACRO_NONE;
};
```
If you'd want it to press enter as well, just replace `return false;` with `return MACRO( T(ENT), END );`.

Some files were not shown because too many files have changed in this diff Show More