Compare commits

...

508 Commits

Author SHA1 Message Date
Jack Humbert 4f71243453 line endings 2017-08-02 23:57:02 -04:00
Jack Humbert 4e7ee5b0d5 start planning eeprom stuff 2017-08-01 16:45:33 -04:00
Jack Humbert bd0a888133 line-endings 2017-07-30 12:59:18 -04:00
Benjamin Kesselring d272111d46 added xd75 to list in /keyboards 2017-07-30 00:46:08 -04:00
Benjamin Kesselring 0b528d2e36 updated readme and tweaked keymap 2017-07-30 00:46:08 -04:00
Benjamin Kesselring cc6043ca29 add backlight support (probably) 2017-07-30 00:46:08 -04:00
Benjamin Kesselring fffc5237a7 fix RGB 2017-07-30 00:46:08 -04:00
Benjamin Kesselring 992a63c0f2 add xd75, preliminary RGB' 2017-07-30 00:46:08 -04:00
Kototama 25659acb1c Add an Ergodox Colemak Mod-DH keymap for french layouts
[Colemak Mod-DH](https://colemakmods.github.io/mod-dh/) layout for
users keeping an `azerty` layout configuration on their OS.

The symbols layers was done after analysing various programming
languages sources codes and should be close to optimal for typing
confort.
2017-07-29 11:38:36 -04:00
ahtn 07cb997b6d Changes lets_split to use timer based debouncing
The let's split code used delays in its debouncing algorithm which
increases input latency. This commit copies and adapts the code from
`quantum/matrix.c` to lets_split's `matrix.c`.
2017-07-29 11:38:00 -04:00
unknown ac634aa455 Fixed error in readme 2017-07-28 23:41:53 -04:00
unknown 6b2a3492b7 Removed un-needed protosplit directory and updated readme 2017-07-28 10:45:34 -04:00
unknown dcd64062d2 Reverted changes 2017-07-28 10:45:34 -04:00
unknown 4148aeee19 Figured out that I didn't need to include both keymaps in both files 2017-07-28 10:45:34 -04:00
unknown 1f78b62cd6 Hopefully compile issues are gone, and updated files 2017-07-28 10:45:34 -04:00
unknown 9f82d14eb9 Fixed all things jack suggested. 2017-07-28 10:45:34 -04:00
unknown b710e21efb Added to blank spaces at end of protosplit to make it compile under make v2 2017-07-28 10:45:34 -04:00
unknown 9334986bd9 Updated readme to show compile rules that won't throw an error 2017-07-28 10:45:34 -04:00
unknown f2824bca02 Fixed typo in my layout and updated 2017-07-28 10:45:34 -04:00
unknown 5023f55856 Fixed some capitalization issues 2017-07-28 10:45:34 -04:00
unknown 6d15f5a5b7 Another typo fix 2017-07-28 10:45:34 -04:00
unknown ea1fd96c84 Fixed typo in my layout 2017-07-28 10:45:34 -04:00
unknown 1eea91f5f8 Updated my makefile..again 2017-07-28 10:45:34 -04:00
unknown 9546b180b9 Updated my makefile 2017-07-28 10:45:34 -04:00
unknown 2265e4ce41 Removed old keymaps 2017-07-28 10:45:34 -04:00
unknown cbc5a08c40 Removed old protosplit folder 2017-07-28 10:45:34 -04:00
unknown 78f79ca6cc Removed old folder 2017-07-28 10:45:34 -04:00
Donald f1dbf72e09 Changed case of protosplit
Also updated readme to have correct capitalization.
2017-07-28 10:45:34 -04:00
Donald c71b60c82a Changed case of deltasplit75 to be lowercase.
To follow convention.
2017-07-28 10:45:34 -04:00
unknown 47c6d201aa Add my layout 2017-07-28 10:45:34 -04:00
xyxjj f6438e42af Add files via upload 2017-07-28 10:45:34 -04:00
xyxjj 242c1da2c2 Delete deltasplit build guide.pdf 2017-07-28 10:45:34 -04:00
xyxjj be1876aa76 Add files via upload 2017-07-28 10:45:34 -04:00
xyxjj 1ef6777723 Add files via upload 2017-07-28 10:45:34 -04:00
xyxjj d3b6552fb7 Delete MX RIGHT B.dxf 2017-07-28 10:45:34 -04:00
xyxjj ce3ea49743 Delete ALPS+MX RIGHT B.dxf 2017-07-28 10:45:34 -04:00
xyxjj 811c583636 Delete ALPS RIGHT B.dxf 2017-07-28 10:45:34 -04:00
xyxjj 173d1b7571 Delete middle layers - RIGHT B.dxf 2017-07-28 10:45:34 -04:00
xyxjj 98f977e95c Delete bottom layers - RIGHT B.dxf 2017-07-28 10:45:34 -04:00
xyxjj 1832b59266 Delete MX LEFT B.dxf 2017-07-28 10:45:34 -04:00
xyxjj 1bfe5b5723 Delete ALPS+MX LEFT B.dxf 2017-07-28 10:45:34 -04:00
xyxjj 038c12d59a Delete ALPS LEFT B.dxf 2017-07-28 10:45:34 -04:00
xyxjj 3d23a80c83 Delete Middle layers - LEFT B.dxf 2017-07-28 10:45:34 -04:00
xyxjj f56884b253 Delete Bottom Layer - LEFT B.dxf 2017-07-28 10:45:34 -04:00
xyxjj d4e695a136 Delete top bezel - blocked corner.dxf 2017-07-28 10:45:34 -04:00
xyxjj 2013f4fb83 Delete top bezel - Winkeyless.dxf 2017-07-28 10:45:34 -04:00
xyxjj 508cc7e56b Delete top bezel - Standard.dxf 2017-07-28 10:45:34 -04:00
xyxjj 8958a4f78b Delete PCB Dimesnsion.dxf 2017-07-28 10:45:34 -04:00
xyxjj 429971997c Delete MX RIGHT B.dwg 2017-07-28 10:45:34 -04:00
xyxjj e898a8ecc8 Delete ALPS+MX RIGHT B.dwg 2017-07-28 10:45:34 -04:00
xyxjj b6e8516d6d Delete ALPS RIGHT B.dwg 2017-07-28 10:45:34 -04:00
xyxjj 2077226fc2 Delete middle layers - RIGHT B.dwg 2017-07-28 10:45:34 -04:00
xyxjj cfafa97227 Delete bottom layers - RIGHT B.dwg 2017-07-28 10:45:34 -04:00
xyxjj 3d73110795 Delete readme.md 2017-07-28 10:45:34 -04:00
xyxjj 727707ef0b Delete PCB Dimesnsion.dwg 2017-07-28 10:45:34 -04:00
xyxjj 2a3af90d9f Delete MX LEFT B.dwg 2017-07-28 10:45:34 -04:00
xyxjj 73e5a7fafe Delete ALPS+MX LEFT B.dwg 2017-07-28 10:45:34 -04:00
xyxjj eceb2a4810 Delete ALPS LEFT B.dwg 2017-07-28 10:45:34 -04:00
xyxjj b34dfeecdf Delete Middle layers - LEFT B.dwg 2017-07-28 10:45:34 -04:00
xyxjj 01458037de Delete Bottom Layer - LEFT B.dwg 2017-07-28 10:45:34 -04:00
xyxjj 461f95ce0b Update readme.md 2017-07-28 10:45:34 -04:00
xyxjj f4bc404aa2 Delete top bezel - blocked corner.dwg 2017-07-28 10:45:34 -04:00
xyxjj b70e68ac5b Delete top bezel - Winkeyless.dwg 2017-07-28 10:45:34 -04:00
xyxjj e4d849ed95 Delete top bezel - Standard.dwg 2017-07-28 10:45:34 -04:00
xyxjj 4f193d6dc2 Add files via upload 2017-07-28 10:45:34 -04:00
xyxjj 934d35ea3f Add files via upload 2017-07-28 10:45:34 -04:00
xyxjj a76a607a2b Add files via upload 2017-07-28 10:45:34 -04:00
xyxjj 9aec284f42 Update 2017-07-28 10:45:34 -04:00
xyxjj 3a0f7865da Update readme.md 2017-07-28 10:45:34 -04:00
xyxjj b11d770bea Update Makefile 2017-07-28 10:45:34 -04:00
xyxjj 5a63aa29a9 Update readme.md 2017-07-28 10:45:34 -04:00
xyxjj ab63ff8d2e Update readme.md 2017-07-28 10:45:34 -04:00
xyxjj 00e4079d5a Delete top bezel - blocked corner.bak 2017-07-28 10:45:34 -04:00
xyxjj 4d88634f07 Delete top bezel - Standard.bak 2017-07-28 10:45:34 -04:00
xyxjj 5ea3b1ea4d Delete PCB Dimesnsion.dwl2 2017-07-28 10:45:34 -04:00
xyxjj c497a19e7b Delete PCB Dimesnsion.dwl 2017-07-28 10:45:34 -04:00
xyxjj 7e07bdbde3 Add files via upload 2017-07-28 10:45:34 -04:00
xyxjj 60e5277a8f Delete PCB Dimesnsion.dwg 2017-07-28 10:45:34 -04:00
xyxjj 96ec98b1ad Create readme.md 2017-07-28 10:45:34 -04:00
xyxjj 7a31ef8284 Add files via upload 2017-07-28 10:45:34 -04:00
xyxjj 0c2b0c7cc1 Update readme.md 2017-07-28 10:45:34 -04:00
xyxjj 42ea9460fe Update readme.md 2017-07-28 10:45:34 -04:00
xyxjj e9daf0606f Update readme.md 2017-07-28 10:45:34 -04:00
xyxjj be2c7aac31 Add files via upload 2017-07-28 10:45:34 -04:00
Joe Wasson c5780647d8 Fix typo in docs. 2017-07-27 16:10:36 -04:00
Joe Wasson 26fb063be3 Link to steno docs from summary page. 2017-07-27 16:10:36 -04:00
Joe Wasson e81e75c147 Move steno keycodes due to conflict with another PR. 2017-07-27 16:10:36 -04:00
Joe Wasson 3e96e8a6a1 Add copyright to steno files. 2017-07-27 16:10:36 -04:00
Joe Wasson c0f63ca9dc Add documentation for Steno. 2017-07-27 16:10:36 -04:00
Joe Wasson f30f12ec81 Add support for GeminiPR steno protocol.
This protocol breaks out "duplicate" keys into their own entry in the packet so that more complicated logic can be done on the software side, including support for additional languages and alternative theories.
2017-07-27 16:10:36 -04:00
Joe Wasson 5987f67989 Add TX Bolt protocol support for Stenography
Requires virtser; Allows QMK to speak the TX BOlt protocol used by stenography machines and software (such as Plover). The upside is that Plover can be configured to listen only to TX Bolt allow the keyboard to switch layers without need to enable/disable the Plover software, or to have a second non-Steno keyboard work concurrently.
2017-07-27 16:10:36 -04:00
Jack Humbert cefc09ae7d adds option for alt pitch standards 2017-07-24 12:45:34 -04:00
Joe Wasson a543ad4c1d Fix minor formatting issue. 2017-07-23 15:10:27 -04:00
Jack Humbert 6bdf7482b1 update audio/music documentation 2017-07-23 14:59:29 -04:00
Jack Humbert 415d38ba9e adds music mode, music mode songs, music mask 2017-07-23 14:59:29 -04:00
Jack Humbert 9abbbe7089 update audio documentation 2017-07-23 14:59:29 -04:00
Jack Humbert f407f3e8de remove unneccesary headers 2017-07-23 14:59:29 -04:00
Jack Humbert 92ccc9a7b8 use automatic rests with songs (no more rest styles) 2017-07-23 14:59:29 -04:00
Jack Humbert f40ded7894 relocate keymap's useful tools 2017-07-23 14:59:29 -04:00
Jack Humbert fd664fe85b escape song playing in music 2017-07-23 14:59:29 -04:00
Jack Humbert fe113ebad5 start updating audio docs 2017-07-23 14:59:29 -04:00
Jack Humbert 6a3c66776c clean-up planck and preonic keymaps, move audio stuff around 2017-07-23 14:59:29 -04:00
Jack Humbert 8edb67b082 fix line-endings 2017-07-21 19:05:13 -04:00
rootuseralpha e26283e9e5 Update keymap.c 2017-07-20 21:52:13 -04:00
rootuseralpha 8deb405292 Add files via upload 2017-07-20 21:52:13 -04:00
rootuseralpha 4d665a99ae Add files via upload 2017-07-20 21:52:13 -04:00
rootuseralpha 4627cab49d Delete test 2017-07-20 21:52:13 -04:00
rootuseralpha e5f606558e Add files via upload 2017-07-20 21:52:13 -04:00
rootuseralpha f379f05c1e Create test 2017-07-20 21:52:13 -04:00
Maarten Dekkers 1524d29cfb Added some user customization 2017-07-20 10:18:00 -04:00
Maarten Dekkers 30efce5584 Changes to own keymap 2017-07-20 10:18:00 -04:00
Fred Sundvik a5b0f4de35 Add SRC and OPT_DEFS when building tests 2017-07-20 10:17:31 -04:00
Fred Sundvik 20696a9efe Fix building of multiple test directories 2017-07-20 10:17:31 -04:00
Jack Humbert 14c5160b1a Update _summary.md 2017-07-17 15:01:33 -04:00
Jack Humbert 000e749853 Rename docs/features/README.md to docs/features.md 2017-07-17 15:01:11 -04:00
Jack Humbert 7c0610b411 Merge pull request #1498 from That-Canadian/minidox
Minidox
2017-07-14 22:04:18 -04:00
That-Canadian b6d74b9bb9 Fixed typo in readme 2017-07-14 21:58:59 -04:00
That-Canadian 5e8594db82 Updated MiniDox readme 2017-07-14 21:57:41 -04:00
That-Canadian 6c9b69a4b6 Merge branch 'master' into minidox 2017-07-14 21:35:50 -04:00
That-Canadian 5412229603 Merge remote-tracking branch 'upstream/master' 2017-07-14 21:34:37 -04:00
That-Canadian e2e0f5d6d1 Merge branch 'minidox' of https://github.com/That-Canadian/qmk_firmware into minidox 2017-07-14 21:33:19 -04:00
That-Canadian 21b63d9243 Updated i2c and serial files to most recent from the lets split firmware. Also updated that_canadian keymap 2017-07-14 21:24:58 -04:00
Jack Humbert 6ed8ce4f59 Merge pull request #1491 from fredizzimo/msys2
Add support for msys2 build environment
2017-07-13 14:24:26 -04:00
ishtob 087af43dee fix implementation issues from SSD1306 clean up, added rotation (#1494)
* moved OLED update task to keymap

* fix splitting render display to keymap

* Added rotation option for OLED, fixed splitting display render update to keymap

* issues with attribute
2017-07-12 12:10:28 -04:00
Fred Sundvik b7d8dec7dc Fix printf error in make output on msys2 2017-07-12 13:04:50 +03:00
Fred Sundvik 7f67abd7d7 Fix bitfield problem when compiling in native mingw 2017-07-11 22:05:01 +03:00
Jack Humbert cc468523df clean up ssd1306 implementation 2017-07-11 14:23:26 -04:00
Jack Humbert 387b07404a update drivers to exclude lets_split include 2017-07-11 13:57:58 -04:00
ishtob cc6db9c540 Adds Hadron Keyboard (#1492)
* adding hadron keymaps

* fix embedded comment

* fixed TWI driver path

* Delete glcdfont.c

* Delete ssd1306.c

* Delete ssd1306.h

* Update readme.md
2017-07-11 13:53:50 -04:00
Maarten Dekkers 886af32507 Updates maartenwut's keymap (#1489)
* Updated keymap

* Added backlight breathing to fix compile error
2017-07-11 12:53:41 -04:00
Fred Sundvik 78545b9509 Fix unreferenced errors with mingw compiler and unit tests 2017-07-11 19:41:04 +03:00
Fred Sundvik 5a25d50168 Add more dependencies, everything can be compiled now 2017-07-11 18:51:52 +03:00
Fred Sundvik 5c3fd67198 Add tools to the path 2017-07-11 17:55:03 +03:00
Fred Sundvik 0d9e7f635e Extract flip 2017-07-11 17:32:58 +03:00
Fred Sundvik 76bd0d3e18 Install arm toolchain 2017-07-11 17:18:24 +03:00
Fred Sundvik b8c363099b Download and extract avr tools 2017-07-11 16:44:46 +03:00
Fred Sundvik b85ce4ce22 Fix overlong lines, and a few spelling errors 2017-07-11 16:26:29 +03:00
Fred Sundvik d47db637ed Use home directory for download on msys2 2017-07-11 16:11:37 +03:00
That-Canadian d73d30aa84 Merge remote-tracking branch 'upstream/master' 2017-07-10 21:24:20 -04:00
That-Canadian 55fcac4639 Adds Minidox Keyboard (#1487)
* merge

* line ending stuff

* Added MiniDox keyboard folder / configs / and some keymaps

* Updated minidox rev1 config, and readme. Also updated that_canadian keymap to include RGB

* cleaned up that_canadian keymap comments

* Fixed RGB being enabled by default, now it must be turned on at the keymap level
2017-07-10 20:15:08 -04:00
That-Canadian a4958a532d Fixed RGB being enabled by default, now it must be turned on at the keymap level 2017-07-10 17:12:18 -04:00
That-Canadian df50260300 cleaned up that_canadian keymap comments 2017-07-10 16:59:20 -04:00
That-Canadian 55ed97af1e Merge branch 'master' into minidox 2017-07-10 16:53:49 -04:00
That-Canadian 07bf8522ca Merge remote-tracking branch 'upstream/master' 2017-07-10 16:52:56 -04:00
That-Canadian 1fdf3c84fe Updated minidox rev1 config, and readme. Also updated that_canadian keymap to include RGB 2017-07-10 16:51:37 -04:00
Jack Humbert 65c10790d4 Update README.md 2017-07-10 11:53:18 -04:00
Jack Humbert 42d5a324eb Start mvoing hardware drivers to /drivers/ (#1433)
* start driver isolation

* update nyquist and orthodox boards

* update atreus62

* move drivers to avr

* update avr conditional
2017-07-10 11:18:47 -04:00
Fred Sundvik 32fc4da4a7 Install unzip 2017-07-10 18:16:35 +03:00
Fred Sundvik 861087096b Add symlinks only on WSL 2017-07-10 18:05:32 +03:00
Fred Sundvik 7bedf8f4f2 Fix launch of qmk_driver_installer on msys2 2017-07-10 17:51:59 +03:00
Jack Humbert 8d190d5e25 Merge branch 'master' of https://github.com/qmk/qmk_firmware 2017-07-10 10:35:45 -04:00
Fred Sundvik a2d3fc98b8 Initial structure for shared msys2 and wsl installation 2017-07-10 17:31:58 +03:00
Fred Sundvik 10546665f4 Fix uninitialized backlight_level in the Visualizer 2017-07-10 09:02:36 -04:00
Fred Sundvik 551924f8a0 Add template board files 2017-07-10 09:01:59 -04:00
Fred Sundvik 190b90892b Rename board files to lowercase 2017-07-10 09:01:59 -04:00
Fred Sundvik 9d8279960d Make it easier to use drivers 2017-07-10 09:01:59 -04:00
Fred Sundvik 4da3b19603 Shared default animations 2017-07-10 09:01:59 -04:00
Fred Sundvik 2251560256 Clarify naming between LCD_BACKLIGHT and LED_BACKLIGHT 2017-07-10 09:01:59 -04:00
Fred Sundvik f3c113fb5a Shared gfxconf 2017-07-10 09:01:59 -04:00
Fred Sundvik 8a962f7b27 Define visualizer thread priority by default 2017-07-10 09:01:59 -04:00
Fred Sundvik 011ee29441 Fixup mixed tabs/spaces 2017-07-10 09:01:59 -04:00
Fred Sundvik 630f065376 Remove ergodox from gdisp driver names 2017-07-10 09:01:59 -04:00
Fred Sundvik aca0f4dcae Move GDISP drivers to /drivers/ugfx 2017-07-10 09:01:59 -04:00
Fred Sundvik 1ff5fb000f Fix Makefile error_occured output for unit tests 2017-07-10 09:00:58 -04:00
Fred Sundvik ba405cfbb4 Don't search for TEENSY_LOADER_CLI if it's already defined 2017-07-10 09:00:18 -04:00
Fred Sundvik 7ea8753b72 Don't run dfu-programmer unless specified as a target
This introduces a grep dependency, which I believe we didn't have
before, but it should be available and installed by default on all the
supported systems.
2017-07-10 09:00:18 -04:00
That-Canadian 9312b9db6c Added MiniDox keyboard folder / configs / and some keymaps 2017-07-10 00:46:19 -04:00
That-Canadian 707f4efd99 line ending stuff 2017-07-10 00:30:40 -04:00
That-Canadian e7a5fee1f3 merge 2017-07-10 00:21:38 -04:00
Jack Humbert 6221498601 Merge commit '8858438a770c1c982f33b296447ca77176c751f7' 2017-07-09 21:26:54 -04:00
Jack Humbert 8858438a77 Squashed 'lib/lufa/' changes from f2bd51f4e..bbdc9ac40
bbdc9ac40 Merge pull request #1 from fredizzimo/fix_line_endings
75ba27b8d Fix xml file line endings
7a8237259 Merge commit '5a3397d17ec917c7be5d5109e01a3a84a355cb1b'
713c65b5b Merge commit 'cedfbfcb1a9ad9cf93816f1952fc4bf7c55fbb61'
00e20c453 delete old lufa

git-subtree-dir: lib/lufa
git-subtree-split: bbdc9ac40c2ff543bbaf3870d407d0a96c945c1a
2017-07-09 21:26:51 -04:00
skullY fcd08b8c7d more crlf issues 2017-07-08 20:03:33 -07:00
Fred Sundvik 9158673166 Reference issue #1478 from the unit tests 2017-07-08 21:59:51 -04:00
Fred Sundvik b3af79eaff Reference issue #1477 from the unit tests 2017-07-08 21:59:51 -04:00
Fred Sundvik 41efcd6d73 Reference issue #524 from the unit tests 2017-07-08 21:59:51 -04:00
Fred Sundvik 60b1880a62 Reference issue #1476 from the unit tests 2017-07-08 21:59:51 -04:00
Fred Sundvik 67f722c9c8 Configure vscode file associations, use hpp instead of h 2017-07-08 21:59:51 -04:00
Fred Sundvik 631c09e976 Fix keymap formatting 2017-07-08 21:59:51 -04:00
Fred Sundvik e5780a6dc6 Add tests for macros 2017-07-08 21:59:51 -04:00
Fred Sundvik 4087d6da0d Add wait support for tests 2017-07-08 21:59:51 -04:00
Fred Sundvik fc4bfbe580 Rename tests to start with test_ 2017-07-08 21:59:51 -04:00
Fred Sundvik 4e69a8bda6 Add basic timing support, and SFT_T tests
Also expose some bugs...
2017-07-08 21:59:51 -04:00
Fred Sundvik a62f449659 Add test for a combo key 2017-07-08 21:59:51 -04:00
Fred Sundvik cae7a9c3ec Add simple modifier test 2017-07-08 21:59:51 -04:00
Fred Sundvik 1985f43bad Improve the tests a bit 2017-07-08 21:59:51 -04:00
Fred Sundvik 72c8df1f19 A bigger test matrix, and test for unmapped keys 2017-07-08 21:59:51 -04:00
Fred Sundvik 1e4cc36e14 Rename test.cpp to keypress.cpp 2017-07-08 21:59:51 -04:00
Fred Sundvik 0256cd8cca Build all cpp files in test directories 2017-07-08 21:59:51 -04:00
Fred Sundvik 7d79962785 Move test keymap to keymap.c 2017-07-08 21:59:51 -04:00
Fred Sundvik 448b91689f Exclude .build and .hex from Visual Studio code 2017-07-08 21:59:51 -04:00
skullY 6e2cae4cda commit files with wrong line endings 2017-07-08 12:34:36 -07:00
Jack Humbert 03706de946 Merge commit '5a3397d17ec917c7be5d5109e01a3a84a355cb1b' 2017-07-07 21:46:08 -04:00
Jack Humbert 5a3397d17e Squashed 'lib/lufa/' changes from a44056fb9..f2bd51f4e
f2bd51f4e fixing line endings

git-subtree-dir: lib/lufa
git-subtree-split: f2bd51f4edba87a259808c92c0424dc36475282b
2017-07-07 21:46:04 -04:00
Jack Humbert ea3df7466a Merge commit 'cedfbfcb1a9ad9cf93816f1952fc4bf7c55fbb61' 2017-07-07 16:40:03 -04:00
Jack Humbert cedfbfcb1a Squashed 'lib/lufa/' changes from 385d40300..a44056fb9
a44056fb9 add .gitattributes

git-subtree-dir: lib/lufa
git-subtree-split: a44056fb9d4784e3a248f460688b35977592cb05
2017-07-07 16:40:01 -04:00
skullY 03eb6a3e86 comment out unformatted audio/midi sections 2017-07-07 13:28:31 -07:00
Jack Humbert 0787d70e55 Updates Documentation from #1444 2017-07-07 15:57:18 -04:00
Jack Humbert 9de443cbf1 Merge pull request #1471 from qmk/lufa_lib
Update LUFA and move it to /lib/lufa
2017-07-07 15:33:29 -04:00
Maarten Dekkers 88b3d051b2 Corrected it again. 2017-07-07 15:33:09 -04:00
Maarten Dekkers 53acc7b074 Cleaned and corrected keymap code 2017-07-07 15:33:09 -04:00
Maarten Dekkers 68cf0d454c Own keymap layout 2017-07-07 15:33:09 -04:00
Ethan Spitz 53174036e9 Add new keymap to try to get pretty close to the default layout for an ergodox keyboard. Coming from that I really like being able to use the backspace from my left thumb. 2017-07-07 15:13:18 -04:00
Jack Humbert 1c26468ad5 update include 2017-07-07 14:53:47 -04:00
Jack Humbert 7bddacf25f update lets_split lufa include 2017-07-07 13:32:29 -04:00
Jack Humbert 4b37030ad0 update lufa implementation 2017-07-07 12:06:59 -04:00
Jack Humbert 39ece81979 delete old lufa 2017-07-07 11:56:51 -04:00
Jack Humbert 60b30c0363 Squashed 'lib/lufa/' content from commit 385d40300
git-subtree-dir: lib/lufa
git-subtree-split: 385d403003
2017-07-07 11:55:23 -04:00
Jack Humbert 8655d4f494 Merge commit '60b30c036397cb5627fa374bb930794b225daa29' as 'lib/lufa' 2017-07-07 11:55:23 -04:00
skullydazed ecd3dbf085 Merge branch 'master' into docs 2017-07-06 18:43:22 -07:00
cato976 1896c76a29 Update mouse_keys.md
fix typo
2017-07-06 10:01:12 -04:00
Maarten Dekkers 58139f87e4 Fixed arrow up and rgb config 2017-07-05 11:48:19 -04:00
Maarten Dekkers 684c381aee Moved RGB features to new layout 2017-07-05 11:48:19 -04:00
Maarten Dekkers c6d544bbb0 Fixed image description 2017-07-05 11:48:19 -04:00
Maarten Dekkers 7f82275a4d Added support for RGB on the Tada68 2017-07-05 11:48:19 -04:00
Andreas Lindhé b228cf7ba4 Update readme 2017-07-05 10:56:53 -04:00
Andreas Lindhé 41b23af60e Create custom layout based on swedish
This is a setup that is very useful for me. It may or may not be for
you. I will use it in conjunction with the A5 overlayed sv_SE layout.

The layout is subject to change (in particular I'm thinking about adding
a macro recording feature), but it have not changed much the past year
or two so you can expect it to be stable enough to learn it.

A5: http://aoeu.info/s/dvorak/svorak
My xkb map: https://github.com/lindhe/dotfiles/blob/master/usr/share/X11/xkb/symbols/se-A5

The most major points:
======================

L0:
---

* Easily accessible F11 key for fullscreening
* Print screen
* Middle mouse button for X-paste
* Improved reachability of meta buttons (LCtrl, LALt, AltGr, LGui etc.)
* Cluster Page Up/Down + Home/End by the right thumb
* Vim-like arrow layout in right bottom row

* Set media layer toggle to right thumb (Enter)
* Set apostrophe on LCtl (putting it next to some other small
  characters)

L1:
---

* Full function key layout
* Teensy button

L2:
---

* Improved media buttons layout (close by the jkl; Vim binding)
* Improved layout of emulated mouse buttons

LED behaviour to binary+CAPS
============================

The ErgoDox LEDs on this layout is using the two rightmost LEDs as the
two LSB in a two digit binary number, representing layer 0, 1, 2 and 3.
The leftmost byte/LED indicates CAPS status.
2017-07-05 10:56:53 -04:00
Shayne Holmes 48ff93582b Pull out sendstring variations to their own files.
Instead of having all sendstring keycode mappings in the main quantum.c
file, give each one its own file in keymap_extras that can be #included
in a user's keymap. If one is included, it will define the appropriate
lookup tables and overwrite the weak definitions in quantum.c.
(Including more than one sendstring definition will fail at compile
time.)

Update @rai-suta's test keymap to match, as well as the documentation.
2017-07-05 10:55:47 -04:00
Shayne Holmes fdc2e8058b Allow broader send_string layout customizability via compile flag
Refactor new-ish JIS_KEYCODE send_string implementation with existing
send_string

Reshuffle JIS in line with other alternative keycodes for sendstring,
and make them all accessible via compile-time options

Add a separate function to allow sending a string with a delay.
2017-07-05 10:55:47 -04:00
dbroqua c41d40c422 - Fixed wording in readme 2017-07-05 09:59:37 -04:00
dbroqua d638547cd0 - Updated dk60 readme with new QMK rules 2017-07-05 09:59:37 -04:00
dbroqua 4587bb8786 - Fixed DK60 version in config.h 2017-07-05 09:59:37 -04:00
skullydazed 60eb2e140d Update the clueboard readmes (#1459) 2017-07-05 00:15:09 -07:00
That-Canadian b3d2f05032 Changed - to _ for keymap that-canadian for compatability reasons. 2017-07-04 16:43:19 -04:00
That-Canadian 2cf97c6d90 Updated ECO files to follow proper formatting. Also updated that-canadian keymap to take out extraneous characters. 2017-07-04 16:43:19 -04:00
That-Canadian f7b8148c12 Updated ECO readme file, includes picture of ECO now. 2017-07-04 16:43:19 -04:00
That-Canadian dbcf0ba6ca Added ECO keyboard folder and configuration files. Also added my (That-Canadian) keymap folder and files. 2017-07-04 16:43:19 -04:00
skullY 9cadba7b89 Add missing files to _summary.md 2017-07-03 12:39:15 -07:00
skullY f1c581fdd4 Remove obsolete documentation 2017-07-03 12:31:37 -07:00
skullY c12f19107f update the summary 2017-07-03 12:30:26 -07:00
skullY 2abff258b1 Adjust headings on unicode 2017-07-03 12:29:04 -07:00
skullY 0ded95b888 Update the vagrant guide 2017-07-03 12:28:48 -07:00
skullY ff47ca7a46 update hand_wire 2017-07-03 12:11:13 -07:00
skullY dff5708b07 update basic_how_keyboards_work 2017-07-03 11:59:19 -07:00
Martin Gondermann 34c8bf47a7 Move Space Caded Parentheses to own layer (#1452)
* Move Space Caded Parentheses to own layer

The space cadet parentheses where too much distracting. Therefore they are now on the function layer. I also added two more layers for also having angle brackets and curly braces on the shift keys forr better access.

Also updated the README

* Fixed SHIFT+Function key conflict

* Removed Angle Bracket and Curly Bracket layers, as they don't work corrrectly
2017-07-03 11:48:48 -07:00
Kyle Terry 062b3547ed Keyboards/handwired magicforce61 (#1454)
* adding the magicforce61 under handwired

* I meant 14 cols
2017-07-03 11:47:48 -07:00
Martin Gondermann 827dc6c715 Add octave lights for midi layer (#1457) 2017-07-03 11:43:32 -07:00
skullY 435f99916c Work around quoting hell 2017-07-03 11:35:29 -07:00
skullY b22220532f Rewrite mouse_keys to resolve #937 2017-07-03 10:58:57 -07:00
skullY 6b0503b20d update the faq 2017-07-03 01:37:05 -07:00
skullY 80cc23e912 fix the info boxes 2017-07-03 01:33:13 -07:00
skullY d8e29b53fe Update a bunch of docs 2017-07-03 01:30:36 -07:00
Jack Humbert fe47b36065 fix tag increment 2017-07-03 00:23:37 -04:00
Jack Humbert ea134be36a fix up travis script 2017-07-02 23:38:20 -04:00
Jack Humbert b7afa59c97 remove warning 2017-06-30 16:33:49 -04:00
Jack Humbert 753809eed7 adds debouncing to sixkeyboard 2017-06-30 16:33:49 -04:00
Jack Humbert b476d65b9c Update keyboards' rules.mk/Makefiles (#1442)
this may change some of the keyboards' default settings - if you experience anything odd, please check back to this commit
2017-06-30 16:09:52 -04:00
skullY ea8df568f2 reduce the TOC scope 2017-06-30 10:13:25 -07:00
skullY 486abde026 tweak page-toc settings 2017-06-30 10:06:40 -07:00
skullY d6d14b6794 try page-toc in place of navigator 2017-06-30 09:50:12 -07:00
skullY 10b389f79c Adjust headings to make navigator happier 2017-06-30 09:42:38 -07:00
skullY 77ab0f16a0 use navigator instead of neo-navigator 2017-06-30 09:38:54 -07:00
skullY dcd715ed4d Try neo-navigator in place of etoc 2017-06-30 09:33:03 -07:00
Jack Humbert 3e3c3e2b24 start glossary 2017-06-29 22:12:24 -04:00
Jack Humbert 9f643ba8bf clean-up github page 2017-06-29 21:23:20 -04:00
Jack Humbert 4c7e66c31c add file to summary 2017-06-29 19:37:49 -04:00
Jack Humbert b139633f89 adds how to github 2017-06-29 19:35:33 -04:00
skullY 7da94ac51b Fixup the gitbook config 2017-06-29 17:14:01 -04:00
skullY 2e9e1eb03c remove extraneous config 2017-06-29 17:13:59 -04:00
skullY a5bb83cbf3 remove the rest of the new plugins 2017-06-29 17:13:56 -04:00
skullY 780786596d remove most of the new plugins 2017-06-29 17:13:54 -04:00
Jack Humbert ad91386497 remove dangling commas 2017-06-29 17:13:42 -04:00
skullY ada64b8ec9 add missing comma 2017-06-29 11:49:47 -07:00
skullY bf3007ec58 Add some gitboot plugins 2017-06-29 11:46:58 -07:00
skullY 409cb1af52 Polish up custom_quantum_functions 2017-06-29 10:46:23 -07:00
Jack Humbert b75ad215c8 use default base names 2017-06-29 12:25:29 -04:00
Jack Humbert 391eae97e4 testing out new home 2017-06-29 12:13:44 -04:00
Jack Humbert d59734d3b7 restructure summary 2017-06-29 10:35:09 -04:00
skullY 910d32c07e Flesh out the quantum_keycodes documentation 2017-06-28 23:52:08 -07:00
Jack Humbert d5244c6cf4 restructure keycode docs 2017-06-29 00:15:07 -04:00
Jack Humbert 40d82906cb adds config options md 2017-06-28 21:20:23 -04:00
skullY 617923cd56 Rough draft for a document on understanding QMK 2017-06-28 20:22:37 -04:00
Jack Humbert 61ef949576 update some copyright headers 2017-06-28 12:58:58 -04:00
Jack Humbert 56634ca065 cleanup nyquist 2017-06-28 10:42:23 -04:00
Jack Humbert 663d3906ec cleanup orthodox 2017-06-28 10:42:23 -04:00
Jack Humbert f5f7dfa064 cleanup lets_split 2017-06-28 10:42:23 -04:00
Jack Humbert 4ea247e673 create initial code of conduct 2017-06-27 21:36:44 -04:00
Jack Humbert a52836e669 Merge pull request #1445 from qmk/dual_audio
Allow for duophony (C6 and B5) and B5 audio
2017-06-27 16:57:19 -04:00
Jack Humbert 7d28a417c0 don't let timer1 exist without b5 being enabled 2017-06-27 15:28:13 -04:00
Jack Humbert ea7590c894 add new arguements, docs 2017-06-27 14:35:08 -04:00
Jack Humbert 9f5b4e1d7a Merge branch 'master' of https://github.com/qmk/qmk_firmware into dual_audio 2017-06-27 14:21:42 -04:00
Jack Humbert b82604dada no glide 2017-06-27 14:20:53 -04:00
Jack Humbert bfc73e90cf working duopholy 2017-06-27 14:20:44 -04:00
Jack Humbert eabf530a0e b5 audio 2017-06-27 14:20:14 -04:00
Jack Humbert 4ba9438c3f Add eclipse to the _summary 2017-06-27 13:07:50 -04:00
Jack Humbert b2979eba23 Adds parenthesis where they might be needed
Addresses #764
2017-06-27 12:55:18 -04:00
Erez Zukerman 98391605ca Merge pull request #1441 from lindhe/swedish
Create sv_SE Qwerty layout for ErgoDox EZ
2017-06-27 11:33:29 -04:00
Andreas Lindhé a25dbaad32 Create sv_SE Qwerty layout for ErgoDox
*NOTE:* it might still be desirable to set the software layout to sv_SE in your
OS.

Swedish (sv_SE) Qwerty layout for ErgoDox, based on the Default configuration

I have tried making this as close of a match I could between the [default
ErgoDox EZ configuration](https://ergodox-ez.com/pages/our-firmware) and a
standard Swedish Qwerty layout.

Notable differences from default:
=================================

* There are three special character buttons (acute accent, circumflex/tilde and
  apostrophe/asterisk) that don't have any buttons to map to naturally. I've put
  these at other places:

    * Acute accent (´) can be found in the lower left corner, conveniently
      placed to reach for making an é.

    * Apostrophe (') was put in the lower left corner, close to acute accent.

    * Circumflex (^) and asterisk (*) was placed in the lower right corner.

    * Tilde (~) and diaeresis (¨) I couldn't find a good place for, so I left
      those out. I could only get the buttons to produce a single one of the
      characters. How can I get it to work properly?

* The Alt button on right thumb was exchanged for AltGr (RAlt).

* I changed the backslash in the numpad (layer 1) for a minus. Thought it was
  more sensible.

* I didn't find a good place for the "<>|" button, so that one was left out.
  That is a problem that really needs to be resolved. Pipe can be found on layer
  one, however.
2017-06-27 15:17:21 +02:00
Jack Humbert 61cdc9aaa4 Allow mod swapping for mod tap (MT) (#1202)
* allow mod swapping for mod tap

* quick include

* fix the mod swapping

* make changes consistent with action code

* fix bug

* re-enable no gui, etc

* fix binary comps

* solid logic
2017-06-26 18:54:01 -04:00
Jack Humbert d1fb8d2296 Merge pull request #1431 from rai-suta/master
Bugg fix and add keymap for testing JIS_KEYCODE switch.
2017-06-25 21:31:10 -04:00
Ethan Madden 42e6ecc36b Whitefox LED control (#1432)
* use new grave_esc functionality

* Port LED control from Ergodox Infinity to Whitefox
2017-06-25 21:30:40 -04:00
Art Ortenburger 43579a80a7 add support for Orthodox keyboard (#1436)
* Added orthodox

* Modified readme

* Modified readme

* Modified readme

* Updated makefile

* Fixed keymap issues

* Modified serial communications to allow for over 8 columns

* Fixed sizeof command

* Fixed some typing issues

* Testing issue #1191 (n-column split i2c slave)

Based on initial OrthoDox (serial) config by @reddragond and others,
this attempts to add TWI (I2C) support.
Relevant: <https://github.com/qmk/qmk_firmware/issues/1191>

- per @ahtn recommendation, using memcpy for moving slave matrix
  into slave sending buffer
- slave buffer has been enlarged using sizeof(matrix_row_t)
- note: i2c.h now includes matrix.h
- note: matrix.c includes <string.h>

* Added i2c keymap - right col still not working

* orthodox: re-added i2c keymap, based on serial

* orthodox / issue #1191: trying 9-bit serial

- orthodox serial protocol now sends 9 bits per row, instead of 16.
  Technically it's using MATRIX_COLS, so it might work generically.
- ROW_MASK is #defined in serial.c to truncate the checksums to prevent
  overflows causing false errors. This macro should be renamed if it's
  kept.

* Revert "Fixed sizeof command"

This reverts commit f62a5b9939.

Changes had been made to the lets_split serial driver for testing which
mirrored the multi-byte-row changes made to support the orthodox. As the
lets_split does not require these changes, and new improvements had
been added to the orthodox port only, this commit reverts them.

Because the new code could potentially reduce latency over the serial
transport, it may be desirable to re-add in the future, by backporting
the current working orthodox code.

* orthodox: default serial keymap improvements

- formatting has been improved
- a few keys have been shifted, mainly in Raise and Lower layers,
  to be more like the default Planck layout
- Now available: F12, Home, End, PgUp, PgDn, Media-Next, Media-Play

Still To Do:
- duplicate for TWI
- Alt modifier
- GUI modifier

* orthodox: failed attempt at 16b/row TWI

- duplicated updated serial keymap for "i2c"
- removed string.h/memcpy, instead
- hardcoded copying of six bytes per update
- still doesn't work; master reports interconnect errors on txled

* orthodox: adjusted default keymap

- this is applied to both 'serial' and 'i2c' keymaps
- Alt and GUI have been added, as they were missing
- comma and period persist across more layers; Home/PgUp and End/PgDn
  have been moved slightly to accommodate

* orthodox: revert TWI support to minimum to debug

- disabled ssd1306 and hardware locking in build configuration
- increased TWI buffer from 0x10 to 0x20 bytes
- decreased TWI clock from 400000 to 100000
- removed hardcoded TWI multi-byte sending/receiving

An 'i2c' build of this was found to work on a rev1 Orthodox, although
slave-side col9 was understandably not working. When testing-time
permits, features will be gradually re-enabled towards getting the full
matrix supported over TWI.

* orthodox: TWI (i2c) is working, kludge for col9

The TWI interconnect ("i2c" in directories and build config) is now
working for the Orthodox, including the slave half's column #9.
This is intended as an interim solution, as it's a kludge, not a fix.

Rather than a working multi-byte implementation, the two col9 keys'
bits are packed-into and unpacked-from the two unused bits in row1.
Furthermore, the TWI clock constant has been reduced to 100000 from
400000, as testing revealed the higher value just didn't work.
Testing also found that (with this kludge) increasing the TWI buffer
was not necessary.

This commit leaves many commented-out lines in matrix.c from previous
testing, which will be removed in a future commit once the
interconnects' multi-byte problems have been debugged more thoroughly.

* orthodox: updated readme.md

The readme for the Orthodox now includes a description of the keyboard,
allusions to its author and availability, a linked photo, and links to
the evolving build guide and the current keymap on KLE.
This update has been prepared with /u/Deductivemonkee's assistance.
2017-06-25 21:30:07 -04:00
Jack Humbert 1a4a66fd01 updates olkb readmes #1362 2017-06-25 12:40:25 -04:00
rai-suta 3a2ae6a213 Add a keymap for testing JIS_KEYCODE. 2017-06-26 00:37:46 +09:00
rai-suta e740520b3f Fix bug. 2017-06-26 00:24:32 +09:00
Jack Humbert 169ede0715 Merge pull request #1427 from blakedietz/master
Add keymaps for ergodox ez, hhkb and jd45 under user blakedietz
2017-06-25 10:29:24 -04:00
Jack Humbert de833659ae Merge pull request #1429 from fredizzimo/fixes_for_emulator
Minor fixes to support the emulator
2017-06-25 10:29:00 -04:00
Fred Sundvik 1e6a3f9e17 Change M_2_PI to 2 * PI as it should be 2017-06-25 12:55:18 +03:00
Blake Dietz daf16535f1 Add keymaps for ergodox ez, hhkb and jd45 under user blakedietz 2017-06-24 22:46:07 -06:00
skullY 62c77e7dbf Remove the DIODE_DIRECTION defines from lets_split so we can close #1067 2017-06-24 17:08:43 -07:00
skullY 582a6ac75c Fix #1135 by changing the default to at90usb1286 2017-06-24 15:28:13 -07:00
Jack Humbert 901a92a2fd Update _summary.md 2017-06-24 13:11:25 -04:00
Jack Humbert f175f5df95 Merge pull request #1425 from kynikos/patch-1
Fix typo
2017-06-24 11:39:15 -04:00
Jack Humbert 6c81656e8e Merge pull request #1426 from rai-suta/master
Add JIS_KEYCODE layout for send_string()
2017-06-24 11:38:38 -04:00
rai-suta 5dae013ff8 Add JIS_KEYCODE layout for send_string() 2017-06-24 18:29:37 +09:00
Dario Giovannetti 30ab4dd14f Fix typo 2017-06-24 16:32:10 +08:00
Jack Humbert c208a6d4e5 update docs for isp 2017-06-23 23:09:14 -04:00
Jack Humbert b9987d65f9 Merge branch 'master' of https://github.com/qmk/qmk_firmware 2017-06-23 23:07:01 -04:00
Jack Humbert 2c65a17752 add other mcu bootloaders 2017-06-23 23:05:42 -04:00
Jack Humbert dfa6417ae3 Merge pull request #1422 from nstickney/master
update ErgoDox "Familiar" layout
2017-06-23 21:48:17 -04:00
Jack Humbert 918aea5b47 Update _summary.md 2017-06-23 21:29:35 -04:00
Jack Humbert b4f2f44a6f Create isp_flashing_guide.md 2017-06-23 21:29:04 -04:00
Jack Humbert 1524c2cb16 Merge pull request #1418 from npoirey/master
Frenchdev v1
2017-06-23 18:05:33 -04:00
npoirey 8ad12b1eb7 Updated frenchdev readme 2017-06-23 23:59:30 +02:00
Fred Sundvik dcf9fa1aaa Update the ugfx submodule 2017-06-24 00:37:27 +03:00
Fred Sundvik f912c74fe7 Change inline to static inline 2017-06-24 00:34:16 +03:00
Fred Sundvik 574ca7f59c Delete emulator drivers 2017-06-24 00:34:16 +03:00
Fred Sundvik da19852964 Add function for getting the LCD backlight brightness 2017-06-24 00:34:16 +03:00
Fred Sundvik ff49259a1a Include config.h from visualizer.h 2017-06-24 00:34:16 +03:00
Fred Sundvik b0094e631e Change remote url of uGFX to relative path 2017-06-24 00:34:16 +03:00
Fred Sundvik 6c9b4743f7 Include config.h before visualizer.h 2017-06-24 00:33:23 +03:00
Stick e43e58aad1 updated README.md 2017-06-23 16:28:06 -05:00
Stick f4e4d6f8d0 Merge remote-tracking branch 'upstream/master' 2017-06-23 16:02:44 -05:00
Stick 37987837b1 added media keys; many bug fixes 2017-06-23 16:02:01 -05:00
npoirey a3f151b8e9 Refactoring frenchdev 2017-06-23 21:35:33 +02:00
npoirey de80e2c756 Moved frenchdev to handwired 2017-06-23 21:25:46 +02:00
Jack Humbert a1ce43781a Merge pull request #1421 from 333fred/update-layout
Update my layout
2017-06-23 14:43:51 -04:00
Jack Humbert 91f3a73a28 Merge pull request #1419 from Wraul/phantom-improvements
Phantom improvements
2017-06-23 14:43:32 -04:00
Fredric Silberberg 6794495336 Doc updates 2017-06-23 11:36:14 -07:00
Fredric Silberberg 2b26abf9a9 Copy/paste additions. 2017-06-23 11:24:55 -07:00
Fredric Silberberg 946f4854c5 Added backlight control keys 2017-06-23 11:07:28 -07:00
Fredric Silberberg a2fbd671ad Added a few more VS macros and another ctrl 2017-06-23 11:07:28 -07:00
Fredric Silberberg 7389beb18c Small keymap layout updates 2017-06-23 11:07:28 -07:00
Mathias Andersson dd9b00543b Update Phantom readme
Added basic description of the keyboard and some build and configuration
instructions.

Also moved the RGB underlight modification instructions to the readme.
2017-06-23 12:07:18 +02:00
Mathias Andersson 7ca335cf5b Adjust Phantom for standard PCB
The previous default configuration and keymap was made for a Phantom
modified with RGB underlight.

This commit makes the default more in line with the "official"
configurations provided by the PCB.

The previous default have been moved to a separate keymap named
`rgbmod`. It has also been updated to better match the template keymap.
2017-06-23 12:07:18 +02:00
Mathias Andersson 3522496f24 Update Phantom config to better match template 2017-06-23 12:07:18 +02:00
Mathias Andersson 67b8bf8f70 Move Phantom LED handling to phantom.c
This is more in line with the structure provided by the keyboard
template.
2017-06-23 12:07:18 +02:00
Stick 98373f2fc1 added tapdance locking 2017-06-22 22:22:43 -05:00
npoirey a012c24225 Removed image from git and added references to imgur album for Frenchdev keyboard. 2017-06-22 22:19:50 +02:00
Stick fa96d64f37 Merge remote-tracking branch 'upstream/master' 2017-06-22 13:06:30 -05:00
Jack Humbert 2b98ec67f3 Update _summary.md 2017-06-22 13:23:08 -04:00
Jack Humbert 7b3c9cc8de Create adding_a_keyboard_to_qmk.md 2017-06-22 13:22:21 -04:00
Jack Humbert f32c68ee65 Update porting_your_keyboard_to_qmk.md 2017-06-22 13:21:43 -04:00
Jack Humbert c21c2cc92b Merge pull request #1416 from geofflane/feature/s65_x_std_grv_esc
Use the new Quantum KC_GESC instead of custom code
2017-06-22 12:38:45 -04:00
Erez Zukerman fe9556104b Merge pull request #1331 from ariasuni/master
Fix undefined reference errors with avr-gcc 7.1
2017-06-22 08:40:59 -04:00
npoirey 0fb835c54c Fix warning in frenchdev 2017-06-22 10:47:44 +02:00
npoirey 23b0fc20e3 Frenchdev v1 2017-06-22 10:34:23 +02:00
Jack Humbert 9d22a1a6d8 add group edge via travis updates 2017-06-21 11:23:33 -04:00
Geoff Lane 8705ac408d Use the new Quantum KC_GESC instead of custom code 2017-06-21 09:37:20 -04:00
Jack Humbert 23df3016e8 Merge pull request #1405 from cquiroz/oneshot-mods-timeout
Oneshot mods timeout
2017-06-20 11:40:10 -04:00
Jack Humbert 9019d65b3c Merge pull request #1414 from dvdizon/kbd75
KBD75 - Initial KBD75 port from qmkeyboard.cn source files
2017-06-20 09:19:48 -04:00
Jack Humbert 2c171b3e5f Merge pull request #1413 from lasko/master
This is a complete redo of my keymap. It includes several
2017-06-20 09:18:02 -04:00
Jack Humbert 33a271b8e3 Merge pull request #1412 from nall/master
Fixed offset for knight rgb mode
2017-06-20 09:17:36 -04:00
David Dizon e71b3c6572 KBD75 - Initial KBD75 port from qmkeyboard.cn source files 2017-06-19 22:59:17 -07:00
Jon Nall f169c715eb Added custom keymap and enabled Space Cadet 2017-06-19 22:44:42 -07:00
Brandon Height 2ffcf47793 This is a complete redo of my keymap. It includes several
layers including qwerty, colemak, navigation, and gui layers.

I also was playing around with dancing tap keys.
2017-06-19 20:12:30 -07:00
Jon Nall 7ce056cad7 Fixed offset for knight rgb mode 2017-06-19 19:51:37 -07:00
Jack Humbert 3e7bb19612 Merge pull request #1410 from belak/tv44-core
tv44: Add core layout based on the Core 47
2017-06-19 14:05:02 -04:00
Jack Humbert e951317acb Merge pull request #1409 from fredizzimo/full_unit_test
Take first baby steps towards testing the whole QMK
2017-06-19 14:04:19 -04:00
Kaleb Elwert f71c990215 tv44: Add core layout based on the Core 47 2017-06-18 22:44:52 -07:00
Fred Sundvik 1aa0be4cf1 Fix serial_link vpath problem 2017-06-19 00:46:53 +03:00
Fred Sundvik 0f163c0028 Add todo to timer.c 2017-06-19 00:24:32 +03:00
Fred Sundvik fb9b8dadb9 Add a couple of todos to keyboard_report_util.cpp
Also print the modifier state
2017-06-19 00:22:12 +03:00
Fred Sundvik 43d8fa5bf1 More natural interface for setting keyboard leds 2017-06-19 00:19:09 +03:00
Fred Sundvik 36f820be7e Add a test fixture
It only initializes QMK once, and clears the matrix after each test.
2017-06-18 23:49:38 +03:00
Fred Sundvik e85b185796 Test two keys pressed at once 2017-06-18 21:22:22 +03:00
Fred Sundvik 6a76192fa4 Fix problems with undefined inlines in debug mode 2017-06-18 21:22:22 +03:00
Fred Sundvik bd1729d5be Actually test for correct key presses 2017-06-18 21:22:22 +03:00
Fred Sundvik fb95d86b39 Move functions for adding keys from to reports to report.h 2017-06-18 21:22:22 +03:00
Fred Sundvik 017458a07b Move functionality from action_util to report
The functions also takes report_kebyoard_t parameters, so that they can
be used elsewhere.
2017-06-18 21:22:22 +03:00
Fred Sundvik c38589d861 Fix the order of init and driver creation 2017-06-18 21:22:22 +03:00
Fred Sundvik 3bb0586acc Add a couple of basic tests and implement driver mock 2017-06-18 21:22:22 +03:00
Fred Sundvik 617578399c Add keymap 2017-06-18 21:22:22 +03:00
Fred Sundvik c588fca06c Empty bootloader_jump 2017-06-18 21:22:22 +03:00
Fred Sundvik a72e8f0865 Dummy test matrix implementation 2017-06-18 21:22:22 +03:00
Fred Sundvik 1c0fe956ac Split common.mk into common.mk and common_features.mk
To support including keyboard/keymap specific rules before it
2017-06-18 21:22:22 +03:00
Fred Sundvik d29906cb64 Emulate eeprom 2017-06-18 21:10:42 +03:00
Fred Sundvik f646f00b93 Rename native to test 2017-06-18 21:10:42 +03:00
Fred Sundvik 83509adc3a Add empty timer functions 2017-06-18 21:10:42 +03:00
Fred Sundvik 26eb97a4a8 Empty implementation of bootloader, suspend and timer 2017-06-18 21:10:42 +03:00
Fred Sundvik fdfd48e8c8 Fix program mem functionality 2017-06-18 21:10:42 +03:00
Fred Sundvik efaf0e830b Empty implementation of wait 2017-06-18 21:10:42 +03:00
Fred Sundvik 585d646128 Define MATRIX_COLS and MATRIX_ROWS 2017-06-18 21:10:42 +03:00
Fred Sundvik 8674f9c466 Make sure config.h is included 2017-06-18 21:10:42 +03:00
Fred Sundvik 7424261dae Try to build tmk_common 2017-06-18 21:10:42 +03:00
Fred Sundvik 30f22d450d Add basic infrastrucure for building full tests 2017-06-18 21:08:23 +03:00
Jack Humbert 621ae42a6c revert edit 2017-06-18 13:28:34 -04:00
Jack Humbert 4217cb5bbc Update key_functions.md 2017-06-18 13:26:20 -04:00
Jack Humbert 517f75d893 Merge pull request #1349 from jpetermans/infinity60
Infinity60 backlight support
2017-06-18 12:38:38 -04:00
Jack Humbert dd73e14c9b Merge pull request #1407 from take-a-CHANCE/master
Adding a planck keymap
2017-06-18 12:35:08 -04:00
Jack Humbert 66e2d6a063 Merge pull request #1406 from jprMesh/atreus52
Atreus52
2017-06-18 12:34:33 -04:00
Jack Humbert f2e1609801 remove hardware files, move arrow pad 2017-06-18 12:33:14 -04:00
Carlos Quiroz 74d752b531 Remove noisy debug line 2017-06-18 12:17:51 -04:00
Carlos Quiroz 3ab0f4d9e5 Deactivate oneshot mods once timedout 2017-06-18 12:17:51 -04:00
Jack Humbert 5682254f71 Merge pull request #1408 from fredizzimo/fix_build_improve_travis
Fix the two failing keymaps and improve the travis build script
2017-06-18 12:13:56 -04:00
Fred Sundvik 45d437ca04 Make only modified keymaps 2017-06-18 18:30:59 +03:00
Jack Humbert 51a86b85f3 Merge pull request #1361 from fredizzimo/ergodox_infinity_backlight
Add Ergodox Infinity backlight support
2017-06-18 10:15:02 -04:00
Fred Sundvik 2fd670bec0 Add missing include to Ergodox Belak keymap 2017-06-18 17:07:20 +03:00
Fred Sundvik 6ba22b5f5e Don't define RGBLED_NUM in let-split khord keymap
It's already defined correctly by the parent keyboard project, and was
causing problems for rev1, where the pin is different.
2017-06-18 17:03:07 +03:00
Fred Sundvik a15510b57b Always build everything on master 2017-06-18 17:03:05 +03:00
Fred Sundvik 5acc0e54aa Make all subprojects when a keymap is modified 2017-06-18 16:44:51 +03:00
root 1a8042ae91 Added personal keymap with underglow, right shift, numpad, and bright hidden behind raise/lower 2017-06-17 23:11:37 -04:00
Jonas Rogers a284245f77 Atreus52- moved parens and braces to left hand. 2017-06-17 22:51:50 -04:00
Jonas Rogers 85d688e92c Atreus52- made dvorak layer default. 2017-06-17 21:21:46 -04:00
Jonas Rogers 4c2f04986a Atreus52- added software reset key. 2017-06-17 21:21:38 -04:00
Jonas 3007d01718 Atreus52- Modified BDO map. 2017-06-17 21:21:30 -04:00
Jonas 3b9fabb9aa Atreus52- BDO keymap. 2017-06-17 21:21:21 -04:00
jprmesh a8992a2cfe Atreus52- Added Nav layer keymap. 2017-06-17 21:20:16 -04:00
Jonas 7837d96b6e Atreus52- Reworked keymap to be more 40% like. 2017-06-17 21:20:09 -04:00
jprmesh 56026dd4df Atreus52- Swapped thumb keys. 2017-06-17 21:19:59 -04:00
jprmesh 1552fd6ae1 Atreus52- Last changes to config to get it workin. 2017-06-17 21:19:48 -04:00
jprmesh 133908da74 Atreus52- Some keymap changes. 2017-06-17 21:19:45 -04:00
jprMesh 3c2c489768 Atreus52- Fixed spacing and changed to KC_KEYMAP macro. 2017-06-17 21:19:36 -04:00
jprmesh b236e51b69 Atreus52- finished initial keymap layout. 2017-06-17 21:19:29 -04:00
jprmesh 17e81baab3 Atreus52- Fixed config. 2017-06-17 21:19:18 -04:00
jprmesh f9eb11a674 Atreus52- Fixed Qwerty Dvorak switch 2017-06-17 21:18:58 -04:00
jprmesh bb99d7117c Atreus52- Changed to KEYMAP macro format. 2017-06-17 21:18:40 -04:00
jprMesh a5ba30338f Atreus52- Initial Atreus52 file creation. 2017-06-17 21:18:04 -04:00
Jack Humbert 7feadbd66d Merge pull request #1401 from geofflane/s65_x_fixes3
S65-X Fixes Part 3
2017-06-17 20:14:49 -04:00
Jack Humbert 206233d98c Merge pull request #1402 from belak/tv44-belak-tap-magic
tv44: Rearrange belak keymap and add some tap dance magic
2017-06-17 20:14:23 -04:00
Jack Humbert 82372d36af Merge pull request #1403 from Wraul/kmac-fixes
KMAC fixes
2017-06-17 20:14:05 -04:00
Mathias Andersson df26ede131 Unify KMAC code indentation
It's a little unclear what the style guidelines are for the QMK project.
But I figured that I should at least keep the indentation consistent
within the KMAC part.
2017-06-17 20:06:28 +02:00
Mathias Andersson 67e150a08a Enable backlight support by default for KMAC 2017-06-17 20:06:28 +02:00
Mathias Andersson ba945c5e77 Correct layer switching in KMAC keymap readmes 2017-06-17 20:06:28 +02:00
Mathias Andersson be002137f9 Fix some KMAC code formating 2017-06-17 20:06:28 +02:00
Mathias Andersson a621c7f88b Don't include the console by default on the KMAC 2017-06-17 20:06:28 +02:00
Kaleb Elwert 722adce095 tv44: Rearrange belak keymap and add some tap dance magic 2017-06-16 17:08:00 -07:00
jamesofarrell 98316ef017 Added Grave Escape (#1391)
* added QK_GRAVE_ESC and KC_GESC

* fixed name

* Fixed keycode emnu

* Removed layer check, added left and right GUI mod detection for OSX GUI+~
2017-06-16 14:56:50 -07:00
Jack Humbert ff2b01da49 Merge pull request #1400 from belak/belak-ergodox-theme
ergodox: initial addition of belak theme
2017-06-16 17:01:54 -04:00
Jack Humbert 6549e169f8 Merge pull request #1398 from belak/tv44-keymap-changes
TV44 keymap changes
2017-06-16 17:00:36 -04:00
Kaleb Elwert e9a4a5e961 tv44: add belak keymap 2017-06-16 13:11:40 -07:00
Kaleb Elwert ef4abfeb31 ergodox: initial addition of belak theme
Imported from external repo https://github.com/belak/ergodox-layout at commit
233008ad8c46a85cb118fca0be093c3e751075b0
2017-06-16 10:57:58 -07:00
Geoff Lane b4802d7567 Fix home and end to be on <> 2017-06-16 11:57:43 -04:00
Geoff Lane d2a11b523b LED control on the BL layer 2017-06-15 21:57:50 -04:00
Fred Sundvik 086aad0d7e Make sure backlight is in the range 0-100 2017-06-16 02:06:30 +03:00
Fred Sundvik ec88a0b3cc Make sure that the backlight level is within the right range 2017-06-16 02:05:38 +03:00
Fred Sundvik 7d5606085f Correctly calculate backlight level 2017-06-16 02:05:15 +03:00
Fred Sundvik 19f0285a76 Fix typo in BACKLIGHT_ENABLE 2017-06-15 23:21:01 +03:00
Kaleb Elwert 29108d1477 tv44: update tong92 keymap to use KEYMAP macro 2017-06-15 12:48:59 -07:00
Kaleb Elwert 4cefb45a2d tv44: update xyverz keymap to use KEYMAP macro 2017-06-15 12:48:44 -07:00
Kaleb Elwert f894103997 tv44: update default keymap to use KEYMAP macro 2017-06-15 12:47:57 -07:00
Kaleb Elwert b56a9a9899 tv44: update jeebak keymap to use new macros and remove custom ones 2017-06-15 12:46:25 -07:00
Kaleb Elwert e32e7dc0f5 tv44: update smt keymap to use new macros and remove custom ones 2017-06-15 12:45:53 -07:00
Kaleb Elwert 44ce179192 tv44: Fix up the KEYMAP macro
Previously KEYMAP referred to the KEYMAP_ARROW layout and had 45 keys. It makes
more sense for the default keymap to be the 44 key layout, as is implied by the
name.

Additionally keymaps for all other known layouts have been added:

KEYMAP - base layout
KEYMAP_ARROW - additional key in bottom right
KEYMAP_COMMAND - additional key in bottom left
KEYMAP_ARROW_COMMAND - combination of KEYMAP_ARROW and KEYMAP_COMMAND
2017-06-15 12:42:23 -07:00
Jack Humbert d9ffd77ee7 Merge pull request #1397 from geofflane/s65x_fixes
S65x fixes
2017-06-15 15:16:52 -04:00
Geoff Lane e553bb3af4 LED init works with just pin declared 2017-06-15 13:42:14 -04:00
Geoff Lane b107d64d69 Use standard QMK key codes for RGB control 2017-06-15 13:12:36 -04:00
Geoff Lane c81be932d2 Fix left shift in ansi layout 2017-06-15 13:12:36 -04:00
Geoff Lane 899584187f Fix esc key 2017-06-15 13:12:36 -04:00
Jack Humbert 6a75a7d672 Merge pull request #1394 from Khord/master
Adding custom keymap for Let's Split and updates to custom Planck keymap
2017-06-15 12:34:18 -04:00
Jack Humbert be9fd4b4fa Merge pull request #1396 from shieldsd/master
Minor updates to planck/keymaps/dshields
2017-06-15 12:33:44 -04:00
Daniel Shields cc158d90ae Minor updates to planck/keymaps/dshields
* tweaks to tap dance keys
* tidy up code
* save a few bytes
2017-06-15 09:41:59 +01:00
Dylan Khor 5c11ba74d8 tap dance and hold changes to make planck match lets split 2017-06-15 03:34:08 -04:00
Dylan Khor a44ba492ea minor fixes 2017-06-15 03:26:04 -04:00
Dylan Khor 22f985eba7 Add custom let's split keymap 2017-06-15 07:15:27 +00:00
Martin Gondermann 49cfdb544d Added HyperTab and Ctrl/Fn as well as Space cadet parens (#1390)
* Added HyperTab and Ctrl/Escape as well as Space cadet parens to magicmonty keymap

* Replaced CTL_ESC With FN_ESC
2017-06-14 07:20:43 -07:00
Stick 4b50ab029d Revert "ugly workaround for ErgoDoxEZ LED bugs: turn 'em all off"
This reverts commit f397402e10.
2017-06-08 08:59:33 -05:00
Stick 5a70cb30ee trying to fix LEDs 2017-06-08 08:59:30 -05:00
Stick 3af2bca1fc Merge remote-tracking branch 'upstream/master' 2017-06-08 08:52:32 -05:00
Stick 035f7bb1bf Merge remote-tracking branch 'upstream/master' 2017-06-07 15:55:52 -05:00
Fred Sundvik b51a0db6ed Add backlight support to the default Ergodox Infinity animations 2017-06-03 22:04:10 +03:00
Fred Sundvik 2a7f9a7e46 Add backlight control to the IS31FL3731 driver 2017-06-03 21:30:52 +03:00
Fred Sundvik effffa33a5 Backlight level handling for the visualizer 2017-06-03 21:14:26 +03:00
Fred Sundvik 0f9bfafb9e Turn off LED matrix by default 2017-06-03 15:31:02 +03:00
Fred Sundvik a916f4e8b8 Let BACKLIGHT_ENABLE control the Infinity LEDs 2017-06-03 14:34:50 +03:00
Stick f397402e10 ugly workaround for ErgoDoxEZ LED bugs: turn 'em all off 2017-06-02 20:02:02 -05:00
Stick 4cf17210b6 moved alt out from under space 2017-06-02 19:51:29 -05:00
Stick 4ba9917f82 Merge remote-tracking branch 'upstream/master' 2017-06-02 19:50:54 -05:00
jpetermans 9af272e4bb Update lock led processing and remove debug msgs 2017-05-30 21:52:44 -07:00
ariasuni e87691fa5d Fix undefined reference errors with avr-gcc 7.1 2017-05-27 00:25:35 +02:00
jpetermans ac97870801 reduce recurring writes to lock leds 2017-05-25 13:00:21 -07:00
jpetermans 083267680d Restore deleted MEMO.txt from master 2017-05-24 12:26:56 -07:00
jpetermans e6c9b07e1c Merge branch 'user_led_configuration' into infinity60
Conflicts:
	keyboards/infinity60/keymaps/jpetermans/keymap.c
2017-05-24 12:07:18 -07:00
jpetermans 2dcd6c38fa Merge remote-tracking branch 'upstream/master' into infinity60 2017-05-24 11:51:20 -07:00
jpetermans f54b4771eb keymap example update and tweak to set_led_bit function 2017-05-24 11:20:50 -07:00
jpetermans 164a6c994b reorder mailbox msg data; formatting 2017-05-10 15:53:59 -07:00
jpetermans a144968807 remove breath functions from keymap 2017-05-08 16:38:44 -07:00
jpetermans 16774333ad last readme fix 2017-05-08 16:28:04 -07:00
jpetermans 5fc5661147 third readme fix attempt 2017-05-08 16:19:11 -07:00
jpetermans d1ff2bb9db readme fix 2017-05-08 16:17:40 -07:00
jpetermans 821f72eae9 documentation cleanup 2017-05-08 16:15:20 -07:00
jpetermans b5675e2025 Merge branch 'user_led_configuration' of https://github.com/jpetermans/qmk_firmware into user_led_configuration
Conflicts:
	keyboards/infinity60/led_controller.c
	keyboards/infinity60/led_controller.h
2017-05-08 15:42:27 -07:00
jpetermans 967cf0f6d4 Merge remote-tracking branch 'upstream/master' into user_led_configuration 2017-05-08 15:24:50 -07:00
jpetermans 5df74f3ba7 updated keymap for new led functions 2017-05-08 15:13:02 -07:00
jpetermans f1d81d2cc6 minor change on lock leds 2017-05-08 14:55:57 -07:00
jpetermans 2c5b551970 CLeaned out debug code 2017-05-08 14:35:08 -07:00
jpetermans 52f671c23e small code cleanup 2017-05-08 11:57:40 -07:00
jpetermans b27fb216ef Testing initial blink support 2017-04-30 16:27:46 -07:00
jpetermans ff6beeb7a3 simplified lock led function 2017-04-29 09:22:40 -07:00
jpetermans b3945c103c Simplified processing in led_controller; more control at user level. 2017-04-26 23:12:25 -07:00
Stick 8665ed3efc small changes 2017-04-18 09:46:07 -05:00
jpetermans 046f1baf30 more stable lock led process, added debugging code 2017-04-15 14:37:55 -07:00
jpetermans c0ec1756af Added backlight step functionality 2017-04-14 18:20:12 -07:00
jpetermans ec1e936dfb fixed bit shift in led_set_bit 2017-04-13 17:51:37 -07:00
jpetermans 1b1adf35bb more flexible led processing functions, all and on/off/toggle
functioning
2017-04-13 17:15:24 -07:00
jpetermans 15635817b5 Updated lock led init 2017-04-12 23:32:38 -07:00
jpetermans 0881f2dbfa fixed write_led_page col shift, added option for lock led display 2017-04-11 23:33:48 -07:00
jpetermans d8e9c183be led init code missing pwm writes for Frame 1 2017-04-10 22:23:45 -07:00
jpetermans dda858c437 revised led controller code to allow for more options
unable to switch picture displays
2017-04-10 17:36:47 -07:00
jpetermans a2ac883779 add ability to toggle individual led by address 2017-04-07 15:58:17 -07:00
jpetermans af13e9a12d Moved led page arrays to keymap.c and added keymap header to define
individual led addresses
2017-04-06 16:27:51 -07:00
jpetermans d89114400c Small keymap tweak and clean up. 2017-04-06 15:22:13 -07:00
jpetermans 56be300757 Add Kinetis_i2c settings consistent with whitefox mcuconf 2017-04-06 14:23:14 -07:00
jpetermans 91f2e9fb5e match hal settings to whitefox, fix make rules 2017-04-06 13:53:18 -07:00
jpetermans 02ef122cbb Add led_controller.h to user keymap.c 2017-04-06 13:51:33 -07:00
jpetermans f66361d678 add led init function to header for use in keymap.c 2017-04-06 13:48:31 -07:00
jpetermans da4c2d2e3e Adjust led_controller.c matrix sttings and init function 2017-04-06 13:46:54 -07:00
jpetermans b73c935d36 Added tmk whitefox led files 2017-04-06 13:45:15 -07:00
jpetermans dfb0a512a0 Added personal configs and keymap to infinity60/keymaps 2017-04-06 13:43:22 -07:00
2102 changed files with 323490 additions and 34491 deletions
+4 -1
View File
@@ -23,6 +23,7 @@ quantum/version.h
CMakeLists.txt
.DS_STORE
/util/wsl_downloaded
/util/win_downloaded
# Eclipse/PyCharm/Other IDE Settings
.cproject
@@ -32,7 +33,9 @@ CMakeLists.txt
.browse.VC.db*
*.stackdump
util/Win_Check_Output.txt
.vscode
# Let these ones be user specific, since we have so many different configurations
.vscode/launch.json
.vscode/tasks.json
.stfolder
# ignore image files
+3 -2
View File
@@ -1,6 +1,7 @@
os: linux
dist: trusty
sudo: required
group: edge
language: c
branches:
except:
@@ -33,7 +34,7 @@ after_success:
notifications:
webhooks:
urls:
- https://webhooks.gitter.im/e/cca31de3d44b9adb617b
on_success: change # options: [always|never|change] default: always
- https://webhooks.gitter.im/e/afce403d65f143dfac09
on_success: always # options: [always|never|change] default: always
on_failure: always # options: [always|never|change] default: always
on_start: never # options: [always|never|change] default: always
+14
View File
@@ -0,0 +1,14 @@
// Place your settings in this file to overwrite default and user settings.
{
// Configure glob patterns for excluding files and folders.
"files.exclude": {
"**/.build": true,
"**/*.hex": true
},
"files.associations": {
"*.h": "c",
"*.c": "c",
"*.cpp": "cpp",
"*.hpp": "cpp"
}
}
+15
View File
@@ -0,0 +1,15 @@
# Code Of Conduct
QMK strives to be an inclusive and tolerant community. We welcome participation from anyone regardless of age, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, political belief, race, religion, or sexual identity and orientation.
> “A gentle word turns away wrath, but a harsh word stirs up anger.”
Our users, contributors, and collaborators are expected to treat each other with respect, to assume good intentions, and to gently correct, where possible, rather than react with escalation. Some examples of behavior we will not tolerate include, but is not limited to:
* The use of sexualized language or imagery
* Unwelcome advances, sexual or otherwise
* Insults or derogatory comments, or personal or political attacks
* Publishing others private information without explicit permission
* Other conduct which could reasonably be considered inappropriate in a professional setting
If someone is violating this Code of Conduct you may email hello@qmk.fm to bring your concern to the Members. All complaints will be reviewed and investigated and will result in a response that is deemed necessary and appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident.
+3 -1
View File
@@ -419,7 +419,7 @@ define BUILD_TEST
MAKE_TARGET := $2
COMMAND := $1
MAKE_CMD := $$(MAKE) -r -R -C $(ROOT_DIR) -f build_test.mk $$(MAKE_TARGET)
MAKE_VARS := TEST=$$(TEST_NAME)
MAKE_VARS := TEST=$$(TEST_NAME) FULL_TESTS="$$(FULL_TESTS)"
MAKE_MSG := $$(MSG_MAKE_TEST)
$$(eval $$(call BUILD))
ifneq ($$(MAKE_TARGET),clean)
@@ -483,6 +483,8 @@ define RUN_TEST
+error_occurred=0;\
$($(TEST)_COMMAND)\
if [ $$error_occurred -gt 0 ]; then $(HANDLE_ERROR); fi;
endef
# Allow specifying just the subproject, in the keyboard directory, which will compile all keymaps
+31 -16
View File
@@ -1,24 +1,39 @@
{
"structure": {
"readme": "home.md",
"summary": "_summary.md"
},
"plugins" : ["toolbar", "edit-link", "anchors"],
"plugins" : [
"anchors",
"edit-link",
"forkmegithub",
"git-author",
"hints",
"numbered-headings",
"page-toc",
"terminal",
"toolbar"
],
"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"
}
]
}
"edit-link": {
"base": "https://github.com/qmk/qmk_firmware/edit/master/docs",
"label": "Suggest an edit"
},
"forkmegithub": {
"color": "red",
"url": "https://github.com/qmk/qmk_firmware"
},
"page-toc": {
"selector": ".markdown-section h1, .markdown-section h2"
},
"toolbar": {
"buttons": [
{
"label": "QMK Firmware",
"icon": "fa fa-github",
"url": "https://github.com/qmk/qmk_firmware"
}
]
}
},
"root": "./docs/"
}
+33
View File
@@ -0,0 +1,33 @@
# Copyright 2017 Fred Sundvik
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#include $(TMK_PATH)/protocol.mk
TEST_PATH=tests/$(TEST)
$(TEST)_SRC= \
$(TEST_PATH)/keymap.c \
$(TMK_COMMON_SRC) \
$(QUANTUM_SRC) \
$(SRC) \
tests/test_common/matrix.c \
tests/test_common/test_driver.cpp \
tests/test_common/keyboard_report_util.cpp \
tests/test_common/test_fixture.cpp
$(TEST)_SRC += $(patsubst $(ROOTDIR)/%,%,$(wildcard $(TEST_PATH)/*.cpp))
$(TEST)_DEFS=$(TMK_COMMON_DEFS) $(OPT_DEFS)
$(TEST)_CONFIG=$(TEST_PATH)/config.h
VPATH+=$(TOP_DIR)/tests/test_common
+3 -132
View File
@@ -31,8 +31,6 @@ $(error MASTER does not have a valid value(left/right))
endif
endif
KEYBOARD_PATH := keyboards/$(KEYBOARD)
KEYBOARD_C := $(KEYBOARD_PATH)/$(KEYBOARD).c
@@ -42,7 +40,6 @@ else
$(error "$(KEYBOARD_C)" does not exist)
endif
ifneq ($(SUBPROJECT),)
SUBPROJECT_PATH := keyboards/$(KEYBOARD)/$(SUBPROJECT)
SUBPROJECT_C := $(SUBPROJECT_PATH)/$(SUBPROJECT).c
@@ -118,139 +115,12 @@ endif
# # project specific files
SRC += $(KEYBOARD_C) \
$(KEYMAP_C) \
$(QUANTUM_DIR)/quantum.c \
$(QUANTUM_DIR)/keymap_common.c \
$(QUANTUM_DIR)/keycode_config.c \
$(QUANTUM_DIR)/process_keycode/process_leader.c
$(QUANTUM_SRC)
ifneq ($(SUBPROJECT),)
SRC += $(SUBPROJECT_C)
endif
ifndef CUSTOM_MATRIX
SRC += $(QUANTUM_DIR)/matrix.c
endif
ifeq ($(strip $(API_SYSEX_ENABLE)), yes)
OPT_DEFS += -DAPI_SYSEX_ENABLE
SRC += $(QUANTUM_DIR)/api/api_sysex.c
OPT_DEFS += -DAPI_ENABLE
SRC += $(QUANTUM_DIR)/api.c
MIDI_ENABLE=yes
endif
MUSIC_ENABLE := 0
ifeq ($(strip $(AUDIO_ENABLE)), yes)
OPT_DEFS += -DAUDIO_ENABLE
MUSIC_ENABLE := 1
SRC += $(QUANTUM_DIR)/process_keycode/process_audio.c
SRC += $(QUANTUM_DIR)/audio/audio.c
SRC += $(QUANTUM_DIR)/audio/voices.c
SRC += $(QUANTUM_DIR)/audio/luts.c
endif
ifeq ($(strip $(MIDI_ENABLE)), yes)
OPT_DEFS += -DMIDI_ENABLE
MUSIC_ENABLE := 1
SRC += $(QUANTUM_DIR)/process_keycode/process_midi.c
endif
ifeq ($(MUSIC_ENABLE), 1)
SRC += $(QUANTUM_DIR)/process_keycode/process_music.c
endif
ifeq ($(strip $(COMBO_ENABLE)), yes)
OPT_DEFS += -DCOMBO_ENABLE
SRC += $(QUANTUM_DIR)/process_keycode/process_combo.c
endif
ifeq ($(strip $(VIRTSER_ENABLE)), yes)
OPT_DEFS += -DVIRTSER_ENABLE
endif
ifeq ($(strip $(FAUXCLICKY_ENABLE)), yes)
OPT_DEFS += -DFAUXCLICKY_ENABLE
SRC += $(QUANTUM_DIR)/fauxclicky.c
endif
ifeq ($(strip $(UCIS_ENABLE)), yes)
OPT_DEFS += -DUCIS_ENABLE
UNICODE_COMMON = yes
SRC += $(QUANTUM_DIR)/process_keycode/process_ucis.c
endif
ifeq ($(strip $(UNICODEMAP_ENABLE)), yes)
OPT_DEFS += -DUNICODEMAP_ENABLE
UNICODE_COMMON = yes
SRC += $(QUANTUM_DIR)/process_keycode/process_unicodemap.c
endif
ifeq ($(strip $(UNICODE_ENABLE)), yes)
OPT_DEFS += -DUNICODE_ENABLE
UNICODE_COMMON = yes
SRC += $(QUANTUM_DIR)/process_keycode/process_unicode.c
endif
ifeq ($(strip $(UNICODE_COMMON)), yes)
SRC += $(QUANTUM_DIR)/process_keycode/process_unicode_common.c
endif
ifeq ($(strip $(RGBLIGHT_ENABLE)), yes)
OPT_DEFS += -DRGBLIGHT_ENABLE
SRC += $(QUANTUM_DIR)/light_ws2812.c
SRC += $(QUANTUM_DIR)/rgblight.c
CIE1931_CURVE = yes
LED_BREATHING_TABLE = yes
endif
ifeq ($(strip $(TAP_DANCE_ENABLE)), yes)
OPT_DEFS += -DTAP_DANCE_ENABLE
SRC += $(QUANTUM_DIR)/process_keycode/process_tap_dance.c
endif
ifeq ($(strip $(PRINTING_ENABLE)), yes)
OPT_DEFS += -DPRINTING_ENABLE
SRC += $(QUANTUM_DIR)/process_keycode/process_printer.c
SRC += $(TMK_DIR)/protocol/serial_uart.c
endif
ifeq ($(strip $(SERIAL_LINK_ENABLE)), yes)
SRC += $(patsubst $(QUANTUM_PATH)/%,%,$(SERIAL_SRC))
OPT_DEFS += $(SERIAL_DEFS)
VAPTH += $(SERIAL_PATH)
endif
ifneq ($(strip $(VARIABLE_TRACE)),)
SRC += $(QUANTUM_DIR)/variable_trace.c
OPT_DEFS += -DNUM_TRACED_VARIABLES=$(strip $(VARIABLE_TRACE))
ifneq ($(strip $(MAX_VARIABLE_TRACE_SIZE)),)
OPT_DEFS += -DMAX_VARIABLE_TRACE_SIZE=$(strip $(MAX_VARIABLE_TRACE_SIZE))
endif
endif
ifeq ($(strip $(LCD_ENABLE)), yes)
CIE1931_CURVE = yes
endif
ifeq ($(strip $(LED_ENABLE)), yes)
CIE1931_CURVE = yes
endif
ifeq ($(strip $(CIE1931_CURVE)), yes)
OPT_DEFS += -DUSE_CIE1931_CURVE
LED_TABLES = yes
endif
ifeq ($(strip $(LED_BREATHING_TABLE)), yes)
OPT_DEFS += -DUSE_LED_BREATHING_TABLE
LED_TABLES = yes
endif
ifeq ($(strip $(LED_TABLES)), yes)
SRC += $(QUANTUM_DIR)/led_tables.c
endif
# Optimize size but this may cause error "relocation truncated to fit"
#EXTRALDFLAGS = -Wl,--relax
@@ -262,9 +132,10 @@ endif
VPATH += $(KEYBOARD_PATH)
VPATH += $(COMMON_VPATH)
include common_features.mk
include $(TMK_PATH)/protocol.mk
include $(TMK_PATH)/common.mk
SRC += $(TMK_COMMON_SRC)
OPT_DEFS += $(TMK_COMMON_DEFS)
EXTRALDFLAGS += $(TMK_COMMON_LDFLAGS)
+10
View File
@@ -40,13 +40,23 @@ VPATH +=\
all: elf
VPATH += $(COMMON_VPATH)
PLATFORM:=TEST
ifneq ($(filter $(FULL_TESTS),$(TEST)),)
include tests/$(TEST)/rules.mk
endif
include common_features.mk
include $(TMK_PATH)/common.mk
include $(QUANTUM_PATH)/serial_link/tests/rules.mk
ifneq ($(filter $(FULL_TESTS),$(TEST)),)
include build_full_test.mk
endif
$(TEST_OBJ)/$(TEST)_SRC := $($(TEST)_SRC)
$(TEST_OBJ)/$(TEST)_INC := $($(TEST)_INC) $(VPATH) $(GTEST_INC)
$(TEST_OBJ)/$(TEST)_DEFS := $($(TEST)_DEFS)
$(TEST_OBJ)/$(TEST)_CONFIG := $($(TEST)_CONFIG)
include $(TMK_PATH)/native.mk
include $(TMK_PATH)/rules.mk
+4 -7
View File
@@ -9,13 +9,10 @@ LIB_PATH = $(TOP_DIR)/lib
QUANTUM_DIR = quantum
QUANTUM_PATH = $(TOP_DIR)/$(QUANTUM_DIR)
BUILD_DIR := $(TOP_DIR)/.build
DRIVER_DIR = drivers
DRIVER_PATH = $(TOP_DIR)/$(DRIVER_DIR)
SERIAL_DIR := $(QUANTUM_DIR)/serial_link
SERIAL_PATH := $(QUANTUM_PATH)/serial_link
SERIAL_SRC := $(wildcard $(SERIAL_PATH)/protocol/*.c)
SERIAL_SRC += $(wildcard $(SERIAL_PATH)/system/*.c)
SERIAL_DEFS += -DSERIAL_LINK_ENABLE
BUILD_DIR := $(TOP_DIR)/.build
COMMON_VPATH := $(TOP_DIR)
COMMON_VPATH += $(TMK_PATH)
@@ -24,4 +21,4 @@ COMMON_VPATH += $(QUANTUM_PATH)/keymap_extras
COMMON_VPATH += $(QUANTUM_PATH)/audio
COMMON_VPATH += $(QUANTUM_PATH)/process_keycode
COMMON_VPATH += $(QUANTUM_PATH)/api
COMMON_VPATH += $(SERIAL_PATH)
COMMON_VPATH += $(DRIVER_PATH)
+159
View File
@@ -0,0 +1,159 @@
# Copyright 2017 Fred Sundvik
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
SERIAL_DIR := $(QUANTUM_DIR)/serial_link
SERIAL_PATH := $(QUANTUM_PATH)/serial_link
SERIAL_SRC := $(wildcard $(SERIAL_PATH)/protocol/*.c)
SERIAL_SRC += $(wildcard $(SERIAL_PATH)/system/*.c)
SERIAL_DEFS += -DSERIAL_LINK_ENABLE
COMMON_VPATH += $(SERIAL_PATH)
ifeq ($(strip $(API_SYSEX_ENABLE)), yes)
OPT_DEFS += -DAPI_SYSEX_ENABLE
SRC += $(QUANTUM_DIR)/api/api_sysex.c
OPT_DEFS += -DAPI_ENABLE
SRC += $(QUANTUM_DIR)/api.c
MIDI_ENABLE=yes
endif
MUSIC_ENABLE := 0
ifeq ($(strip $(AUDIO_ENABLE)), yes)
OPT_DEFS += -DAUDIO_ENABLE
MUSIC_ENABLE := 1
SRC += $(QUANTUM_DIR)/process_keycode/process_audio.c
SRC += $(QUANTUM_DIR)/audio/audio.c
SRC += $(QUANTUM_DIR)/audio/voices.c
SRC += $(QUANTUM_DIR)/audio/luts.c
endif
ifeq ($(strip $(MIDI_ENABLE)), yes)
OPT_DEFS += -DMIDI_ENABLE
MUSIC_ENABLE := 1
SRC += $(QUANTUM_DIR)/process_keycode/process_midi.c
endif
ifeq ($(MUSIC_ENABLE), 1)
SRC += $(QUANTUM_DIR)/process_keycode/process_music.c
endif
ifeq ($(strip $(COMBO_ENABLE)), yes)
OPT_DEFS += -DCOMBO_ENABLE
SRC += $(QUANTUM_DIR)/process_keycode/process_combo.c
endif
ifeq ($(strip $(STENO_ENABLE)), yes)
OPT_DEFS += -DSTENO_ENABLE
VIRTSER_ENABLE := yes
SRC += $(QUANTUM_DIR)/process_keycode/process_steno.c
endif
ifeq ($(strip $(VIRTSER_ENABLE)), yes)
OPT_DEFS += -DVIRTSER_ENABLE
endif
ifeq ($(strip $(FAUXCLICKY_ENABLE)), yes)
OPT_DEFS += -DFAUXCLICKY_ENABLE
SRC += $(QUANTUM_DIR)/fauxclicky.c
endif
ifeq ($(strip $(UCIS_ENABLE)), yes)
OPT_DEFS += -DUCIS_ENABLE
UNICODE_COMMON = yes
SRC += $(QUANTUM_DIR)/process_keycode/process_ucis.c
endif
ifeq ($(strip $(UNICODEMAP_ENABLE)), yes)
OPT_DEFS += -DUNICODEMAP_ENABLE
UNICODE_COMMON = yes
SRC += $(QUANTUM_DIR)/process_keycode/process_unicodemap.c
endif
ifeq ($(strip $(UNICODE_ENABLE)), yes)
OPT_DEFS += -DUNICODE_ENABLE
UNICODE_COMMON = yes
SRC += $(QUANTUM_DIR)/process_keycode/process_unicode.c
endif
ifeq ($(strip $(UNICODE_COMMON)), yes)
SRC += $(QUANTUM_DIR)/process_keycode/process_unicode_common.c
endif
ifeq ($(strip $(RGBLIGHT_ENABLE)), yes)
OPT_DEFS += -DRGBLIGHT_ENABLE
SRC += ws2812.c
SRC += $(QUANTUM_DIR)/rgblight.c
CIE1931_CURVE = yes
LED_BREATHING_TABLE = yes
endif
ifeq ($(strip $(TAP_DANCE_ENABLE)), yes)
OPT_DEFS += -DTAP_DANCE_ENABLE
SRC += $(QUANTUM_DIR)/process_keycode/process_tap_dance.c
endif
ifeq ($(strip $(PRINTING_ENABLE)), yes)
OPT_DEFS += -DPRINTING_ENABLE
SRC += $(QUANTUM_DIR)/process_keycode/process_printer.c
SRC += $(TMK_DIR)/protocol/serial_uart.c
endif
ifeq ($(strip $(SERIAL_LINK_ENABLE)), yes)
SRC += $(patsubst $(QUANTUM_PATH)/%,%,$(SERIAL_SRC))
OPT_DEFS += $(SERIAL_DEFS)
VAPTH += $(SERIAL_PATH)
endif
ifneq ($(strip $(VARIABLE_TRACE)),)
SRC += $(QUANTUM_DIR)/variable_trace.c
OPT_DEFS += -DNUM_TRACED_VARIABLES=$(strip $(VARIABLE_TRACE))
ifneq ($(strip $(MAX_VARIABLE_TRACE_SIZE)),)
OPT_DEFS += -DMAX_VARIABLE_TRACE_SIZE=$(strip $(MAX_VARIABLE_TRACE_SIZE))
endif
endif
ifeq ($(strip $(LCD_ENABLE)), yes)
CIE1931_CURVE = yes
endif
ifeq ($(strip $(BACKLIGHT_ENABLE)), yes)
ifeq ($(strip $(VISUALIZER_ENABLE)), yes)
CIE1931_CURVE = yes
endif
endif
ifeq ($(strip $(CIE1931_CURVE)), yes)
OPT_DEFS += -DUSE_CIE1931_CURVE
LED_TABLES = yes
endif
ifeq ($(strip $(LED_BREATHING_TABLE)), yes)
OPT_DEFS += -DUSE_LED_BREATHING_TABLE
LED_TABLES = yes
endif
ifeq ($(strip $(LED_TABLES)), yes)
SRC += $(QUANTUM_DIR)/led_tables.c
endif
QUANTUM_SRC:= \
$(QUANTUM_DIR)/quantum.c \
$(QUANTUM_DIR)/keymap_common.c \
$(QUANTUM_DIR)/keycode_config.c \
$(QUANTUM_DIR)/process_keycode/process_leader.c
ifndef CUSTOM_MATRIX
QUANTUM_SRC += $(QUANTUM_DIR)/matrix.c
endif
+25
View File
@@ -0,0 +1,25 @@
# Quantum Mechanical Keyboard Firmware
## What is QMK Firmware? {#what-is-qmk-firmware}
QMK (*Quantum Mechanical Keyboard*) is an open source community that maintains QMK Firmware, QMK Flasher, qmk.fm, and these docs. QMK Firmware is a keyboard firmware based on the [tmk\_keyboard](http://github.com/tmk/tmk_keyboard) 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.
## How to get it {#how-to-get-it}
If you plan on contributing a keymap, keyboard, or features to QMK, the easiest thing to do is [fork the repo through Github](https://github.com/qmk/qmk_firmware#fork-destination-box), and clone your repo locally to make your changes, push them, then open a [Pull Request](https://github.com/qmk/qmk_firmware/pulls) from your fork.
Otherwise, you can either download it directly ([zip](https://github.com/qmk/qmk_firmware/zipball/master), [tar](https://github.com/qmk/qmk_firmware/tarball/master)), or clone it via git (`git@github.com:qmk/qmk_firmware.git`), or https (`https://github.com/qmk/qmk_firmware.git`).
## How to compile {#how-to-compile}
Before you are able to compile, you'll need to [install an environment](build_environment_setup.md) for AVR or/and ARM development. Once that is complete, you'll use the `make` command to build a keyboard and keymap with the following notation:
make planck-rev4-default
This would build the `rev4` revision of the `planck` with the `default` keymap. Not all keyboards have revisions (also called subprojects), in which case, it can be omitted:
make preonic-default
## How to customize {#how-to-customize}
QMK has lots of [features](features/README.md) to explore, and a good deal of [reference documentation](reference/README.md) to dig through. Most features are taken advantage of by modifying your [keymap](keymap.md), and changing the [keycodes](keycodes.md).
+44 -26
View File
@@ -1,28 +1,46 @@
* [Getting started](README.md)
* [QMK Overview](qmk_overview.md)
* [Build Environment Setup](build_environment_setup.md)
* [Vagrant Guide](vagrant_guide.md)
* [Make instructions](make_instructions.md)
* [FAQ: Creating a Keymap](faq_keymap.md)
* [FAQ: Compiling QMK](faq_build.md)
* [How to Github](how_to_github.md)
### Getting started
* [Introduction](home.md)
* [QMK Overview](qmk_overview.md)
* [Build Environment Setup](build_environment_setup.md)
* [Features](features.md)
* [Layer switching](key_functions.md)
* [Leader Key](leader_key.md)
* [Macros](macros.md)
* [Dynamic Macros](dynamic_macros.md)
* [Space Cadet](space_cadet_shift.md)
* [Tap Dance](tap_dance.md)
* [Mouse keys](mouse_keys.md)
* [Unicode](unicode.md)
* [Stenography](stenography.md)
### Making a keymap
* [Keymap overview](keymap.md)
* [Custom Quantum Functions](custom_quantum_functions.md)
* [Keycodes](keycodes.md)
* [Layer switching](key_functions.md)
* [Leader Key](leader_key.md)
* [Macros](macros.md)
* [Dynamic Macros](dynamic_macros.md)
* [Space Cadet](space_cadet_shift.md)
* [Tap Dance](tap_dance.md)
* [Mouse keys](mouse_keys.md)
* [FAQ: Creating a Keymap](faq_keymap.md)
* [FAQ: Compiling QMK](faq_build.md)
### For hardware makers and modders
* [Modding your keyboard](modding_your_keyboard.md)
* [Porting your keyboard to QMK](porting_your_keyboard_to_qmk.md)
* [Adding features to QMK](adding_features_to_qmk.md)
### Other topics
* [General FAQ](faq.md)
* [Differences from TMK](differences_from_tmk.md)
* Reference
* [Glossary](glossary.md)
* [Keymap overview](keymap.md)
* [Keycodes](keycodes.md)
* [Basic Keycodes](basic_keycodes.md)
* [Quantum Keycodes](quantum_keycodes.md)
* [The `config.h` File](config_options.md)
* [Customizing Functionality](custom_quantum_functions.md)
* [Documentation Best Practices](documentation_best_practices.md)
* [Unit Testing](unit_testing.md)
* For Makers and Modders
* [Adding a keyboard to QMK](adding_a_keyboard_to_qmk.md)
* [Adding features to QMK](adding_features_to_qmk.md)
* [Hand Wiring Guide](hand_wiring.md)
* [ISP flashing guide](isp_flashing_guide.md)
* [Modding your keyboard](modding_your_keyboard.md)
* [Porting your keyboard to QMK](porting_your_keyboard_to_qmk.md)
* For a Deeper Understanding
* [How Keyboards Work](basic_how_keyboards_work.md)
* [Understanding QMK](understanding_qmk.md)
* Other Topics
* [General FAQ](faq.md)
* [Using Eclipse with QMK](eclipse.md)
+35
View File
@@ -0,0 +1,35 @@
# Adding your keyboard to QMK
We welcome all keyboard projects into QMK, but ask that you try to stick to a couple guidelines that help us keep things organised and consistent.
## Naming your directory/project
All names should be lowercase alphanumeric, and separated by an underscore (`_`), but not begin with one. Dashes (`-`) aren't allow by our build system, and will confuse it with keymaps/subprojects. Your directory and your `.h` and `.c` files should have exactly the same name. Subprojects/revision should follow the same format.
## `readme.md`
All projects need to have a `readme.md` file that explains what the keyboard is, who made it, where it is available, and links to move information (template coming).
## Image/Hardware files
In an effort to keep the repo size down, we're no longer accepting images of any format in the repo, with few exceptions. Hosting them elsewhere (imgur) and linking them in the readme.md is the preferred method.
Any sort of hardware file (plate, case, pcb) can't be stored in qmk_firmware, but we have the [qmk.fm repo](https://github.com/qmk/qmk.fm) where such files (as well as in-depth info) can be store, and viewed on [qmk.fm](http://qmk.fm). Downloadable files are stored in `/<keyboard>/` (name follows the same format as above) which are served at `http://qmk.fm/<keyboard>/`, and pages are generated from `/_pages/<keyboard>/` which are served at the same location (.md files are generated into .html files through Jekyll). Check out the `lets_split` directory for an example.
## Non-production/handwired projects
We're happy to accept any project that uses QMK, including prototypes and handwired ones, but we have a separate `/keyboards/handwired/` folder for them, so the main `/keyboards/` folder doesn't get overcrowded. If a prototype project becomes a production project at some point in the future, we'd be happy to move it to the main `/keyboards/` folder!
## Warnings as errors
When developing your keyboard, keep in mind that all warnings will be treated as errors - these small warnings can build-up and cause larger errors down the road (and keeping them is generally a bad practice).
## Licenses
If you're adapting your keyboard's setup from another project, but not using the same code, but sure to update the copyright header at the top of the files to show your name, it this format:
Copyright 2017 Your Name <your@email.com>
## Technical details
If you're looking for more information on making your keyboard work with QMK, [check out this guide](porting_your_keyboard_to_qmk.md)!
+13 -4
View File
@@ -1,7 +1,16 @@
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:
# How To Add Features To QMK
* **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!
If you have an idea for a custom feature or extra hardware connection, we'd love to accept it into QMK!
Before you put a lot of work into building your new feature you should make sure you are implementing it in the best way. You can get a basic understanding of QMK by reading [Understaning QMK](understanding_qmk.html), which will take you on a tour of the QMK program flow. From here you should talk to us to get a sense of the best way to implement your idea. There are two main ways to do this:
* [Chat on Gitter](https://gitter.im/qmk/qmk_firmware)
* [Open an Issue](https://github.com/qmk/qmk_firmware/issues/new)
Once you have implemented your new feature you will generally submit a [pull request](https://github.com/qmk/qmk_firmware/pulls). Here are some things to keep in mind when creating one:
* **Disabled 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, please talk with us about 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).
* **Explain your feature** - Document it in `docs/`, either as a new file or as part of an existing file. If you don't document it other people won't be able to benefit from your hard work.
* **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).
+17 -41
View File
@@ -23,20 +23,14 @@ in the next sections.
Whenever you press a key, the firmware of your keyboard can register this event.
It can register when the key is pressed, held and released.
This usually happens with a [periodic scan of key presses with a frequency around 100 hz](https://github.com/benblazak/ergodox-firmware/blob/master/references.md#typical-keyboard-information).
This speed often is limited by the mechanical key response time, the protocol
to transfer those key presses (here USB HID), and by the software it is used in.
This usually happens with a periodic scan of key presses. This speed often is limited by the mechanical key response time, the protocol to transfer those key presses (here USB HID), and by the software it is used in.
## 2. What the Firmware Sends
The [HID specification](http://www.usb.org/developers/hidpage/Hut1_12v2.pdf)
tells what a keyboard can actually send through USB to have a chance to be
properly recognised. This includes a pre-defined list of keycodes which are
simple numbers from `0x00` to `0xE7`. The firmware assigns a keycode to each
key of the keyboard.
The [HID specification](http://www.usb.org/developers/hidpage/Hut1_12v2.pdf) tells what a keyboard can actually send through USB to have a chance to be properly recognised. This includes a pre-defined list of scancodes which are simple numbers from `0x00` to `0xE7`. The firmware assigns a scancode to each key of the keyboard.
The firmware does not send actually letters or characters, but only keycodes.
Thus, by modifying the firmware, you only can modify what keycode is sent over
The firmware does not send actually letters or characters, but only scancodes.
Thus, by modifying the firmware, you only can modify what scancode is sent over
USB for a given key.
## 3. What the Operating System Does
@@ -45,49 +39,31 @@ Once the keycode reaches the operating system, a piece of software has to have
it match an actual character thanks to a keyboard layout. For example, if your
layout is set to QWERTY, a sample of the matching table is as follow:
``` text
| keycode | character |
|---------+-----------|
| 0x04 | a/A |
| 0x05 | b/B |
| 0x06 | c/C |
| ... | ... |
| 0x1C | y/Y |
| 0x1D | z/Z |
| ... | ... |
|---------+-----------|
```
|---------|-----------|
| 0x04 | a/A |
| 0x05 | b/B |
| 0x06 | c/C |
| ... | ... |
| 0x1C | y/Y |
| 0x1D | z/Z |
| ... | ... |
## Back to the firmware
As the layout is generally fixed (unless you create your own), the firmware can
actually call a keycode by its layout name directly to ease things for you.
This is exactly what is done here with `KC_A` actually representing `0x04` in
QWERTY. The full list can be found in `keycode.txt`.
As the layout is generally fixed (unless you create your own), the firmware can actually call a keycode by its layout name directly to ease things for you. This is exactly what is done here with `KC_A` actually representing `0x04` in QWERTY. The full list can be found in `keycode.txt`.
## List of Characters You Can Send
Putting aside shortcuts, having a limited set of keycodes mapped to a limited
layout means that **the list of characters you can assign to a given key only
is the ones present in the layout**.
Putting aside shortcuts, having a limited set of keycodes mapped to a limited layout means that **the list of characters you can assign to a given key only is the ones present in the layout**.
For example, this means that if you have a QWERTY US layout, and you want to
assign 1 key to produce `€` (euro currency symbol), you are unable to do so,
because the QWERTY US layout does not have such mapping. You could fix that by
using a QWERTY UK layout, or a QWERTY US International.
For example, this means that if you have a QWERTY US layout, and you want to assign 1 key to produce `€` (euro currency symbol), you are unable to do so, because the QWERTY US layout does not have such mapping. You could fix that by using a QWERTY UK layout, or a QWERTY US International.
You may wonder why a keyboard layout containing all of Unicode is not devised
then? The limited number of keycode available through USB simply disallow such
a thing.
You may wonder why a keyboard layout containing all of Unicode is not devised then? The limited number of keycode available through USB simply disallow such a thing.
## How to (Maybe) Enter Unicode Characters
You can have the firmware send *sequences of keys* to use the [software Unicode
Input
Method](https://en.wikipedia.org/wiki/Unicode_input#Hexadecimal_code_input) of
the target operating system, thus effectively entering characters independently
of the layout defined in the OS.
You can have the firmware send *sequences of keys* to use the [software Unicode Input Method](https://en.wikipedia.org/wiki/Unicode_input#Hexadecimal_code_input) of the target operating system, thus effectively entering characters independently of the layout defined in the OS.
Yet, it does come with multiple disadvantages:
+186
View File
@@ -0,0 +1,186 @@
# Basic keycodes
## 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 Lock|
|KC_LOCKING_NUM||Locking Num Lock|
|KC_LOCKING_SCROLL||Locking Scroll Lock|
|KC_INT4|KC_HENK|JIS Henken|
|KC_INT5|KC_MHEN|JIS Muhenken|
## Commands
|Long Name|Short Name|Description|
|---------|----------|-----------|
|KC_PSCREEN|KC_PSCR|PrintScreen|
|KC_SCROLLLOCK|KC_SLCK|Scroll Lock|
|KC_PAUSE|KC_PAUS|Pause|
|KC_INSERT|KC_INS|Insert|
|KC_HOME||Home|
|KC_PGUP||PageUp|
|KC_DELETE|KC_DEL|Delete Forward|
|KC_END||End|
|KC_PGDOWN|KC_PGDN|PageDown|
|KC_RIGHT|KC_RGHT|RightArrow|
|KC_LEFT||LeftArrow|
|KC_DOWN||DownArrow|
|KC_UP||UpArrow|
|KC_APPLICATION|KC_APP|Application|
|KC_POWER||Power|
|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 Erase|
|KC_SYSREQ||SysReq/Attention|
|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 Clear|
|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 ENTER|
|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 Comma|
|KC_KP_EQUAL_AS400||Keypad Equal Sign|
## 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|
+18 -12
View File
@@ -1,19 +1,25 @@
### Windows 10
# Build Environment Setup
#### Creators Update
This page describes setting up the build environment for QMK. These instructions cover AVR processors (such as the atmega32u4.)
<!-- FIXME: We should have ARM instructions somewhere. -->
# 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
## 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
## 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
## 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.
@@ -22,13 +28,13 @@ The Toolchain setup is done through the Windows Subsystem for Linux, and the pro
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
## 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)
# 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).
@@ -40,7 +46,7 @@ The Toolchain setup is done through the Windows Subsystem for Linux, and the pro
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
# Mac
If you're using [homebrew,](http://brew.sh/) you can use the following commands:
brew tap osx-cross/avr
@@ -59,7 +65,7 @@ If you are going to flash Infinity based keyboards you will also need dfu-util
brew install dfu-util
### Linux
# 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`.**
@@ -91,7 +97,7 @@ 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
# 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:
@@ -109,10 +115,10 @@ docker run -e keymap=default -e subproject=ez -e keyboard=ergobox --rm -v D:/Use
This will compile the targeted keyboard/keymap and leave it in your QMK directory for you to flash.
### Vagrant
# 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](vagrant_guide.md).
## Verify Your Installation
# 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`.
-103
View File
@@ -1,103 +0,0 @@
# This guide has now been included in the main readme - please reference that one instead.
## Build Environment Setup
### 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. 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.
4. 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.
5. 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.
6. 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!
7. Future build commands should be run from the standard Windows command prompt, which you can find by searching for "command prompt" from the start menu or start screen. Ignore the "MHV AVR Shell".
### 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.
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][dfu-prog].
### Linux
Install AVR GCC, AVR libc, and dfu-progammer with your favorite package manager.
Debian/Ubuntu example:
sudo apt-get update
sudo apt-get install gcc-avr avr-libc dfu-programmer
### 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](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.
## Customizing, Building, and Deploying Your Firmware
### The Make command
The `make` command is how you compile the firmware into a .hex file, which can be loaded by a dfu programmer (like dfu-progammer via `make dfu`) or the [Teensy loader](https://www.pjrc.com/teensy/loader.html) (only used with Teensys). You can run `make` from the root (`/`), your keyboard folder (`/keyboards/<keyboard>/`), or your keymap folder (`/keyboards/<keyboard>/keymaps/<keymap>/`) if you have a `Makefile` there (see the example [here](/doc/keymap_makefile_example.mk)).
By default, this will generate a `<keyboard>_<keymap>.hex` file in whichever folder you run `make` from. These files are ignored by git, so don't worry about deleting them when committing/creating pull requests.
* The "root" (`/`) folder is the qmk_firmware folder, in which are `doc`, `keyboard`, `quantum`, etc.
* The "keyboard" folder is any keyboard project's folder, like `/keyboards/planck`.
* The "keymap" folder is any keymap's folder, like `/keyboards/planck/keymaps/default`.
Below is a list of the useful `make` commands in QMK:
* `make` - cleans automatically and builds your keyboard and keymap depending on which folder you're in. This defaults to the "default" layout (unless in a keymap folder), and Planck keyboard in the root folder
* `make keyboard=<keyboard>` - specifies the keyboard (only to be used in root)
* `make keymap=<keymap>` - specifies the keymap (only to be used in root and keyboard folder - not needed when in keymap folder)
* `make quick` - skips the clean step (cannot be used immediately after modifying config.h or Makefiles)
* `make dfu` - (requires dfu-programmer) builds and flashes the keymap to your keyboard once placed in reset/dfu mode (button or press `KC_RESET`). This does not work for Teensy-based keyboards like the ErgoDox EZ.
* `keyboard=` and `keymap=` are compatible with this
* `make all-keyboards` - builds all keymaps for all keyboards and outputs status of each (use in root)
* `make all-keyboards-default` - builds all default keymaps for all keyboards and outputs status of each (use in root)
* `make all-keymaps [keyboard=<keyboard>]` - builds all of the keymaps for whatever keyboard folder you're in, or specified by `<keyboard>`
* `make all-keyboards-quick`, `make all-keyboards-default-quick` and `make all-keymaps-quick [keyboard=<keyboard>]` - like the normal "make-all-*" commands, but they skip the clean steps
Other, less useful functionality:
* `make COLOR=false` - turns off color output
* `make SILENT=true` - turns off output besides errors/warnings
* `make VERBOSE=true` - outputs all of the avr-gcc stuff (not interesting)
### The Makefile
There are 3 different `make` and `Makefile` locations:
* root (`/`)
* keyboard (`/keyboards/<keyboard>/`)
* keymap (`/keyboards/<keyboard>/keymaps/<keymap>/`)
The root contains the code used to automatically figure out which keymap or keymaps to compile based on your current directory and commandline arguments. It's considered stable, and shouldn't be modified. The keyboard one will contain the MCU set-up and default settings for your keyboard, and shouldn't be modified unless you are the producer of that keyboard. The keymap Makefile can be modified by users, and is optional. It is included automatically if it exists. You can see an example [here](/doc/keymap_makefile_example.mk) - the last few lines are the most important. The settings you set here will override any defaults set in the keyboard Makefile. **It is required if you want to run `make` in the keymap folder.**
### The `config.h` file
There are 2 `config.h` locations:
* keyboard (`/keyboards/<keyboard>/`)
* keymap (`/keyboards/<keyboard>/keymaps/<keymap>/`)
The keyboard `config.h` is included only if the keymap one doesn't exist. The format to use for your custom one [is here](/doc/keymap_config_h_example.h). If you want to override a setting from the parent `config.h` file, you need to do this:
```
#undef MY_SETTING
#define MY_SETTING 4
```
For a value of `4` for this imaginary setting. So we `undef` it first, then `define` it.
You can then override any settings, rather than having to copy and paste the whole thing.
-187
View File
@@ -1,187 +0,0 @@
Build Firmware and Program Controller
=====================================
## This guide may be out-dated - use [build_guide.md](build_guide.md) instead
Download and Install
--------------------
### 1. Install Tools
1. **Toolchain** On Windows install [MHV AVR Tools][mhv] for AVR GCC compiler and [Cygwin][cygwin](or [MinGW][mingw]) for shell terminal. On Mac you can use [CrossPack][crosspack]. On Linux you can install AVR GCC (and avr-libc) with your favorite package manager or run the avr_setup.sh script in the root of this repository.
2. **Programmer** On Windows install [Atmel FLIP][flip]. On Mac and Linux install [dfu-programmer][dfu-prog].
3. **Driver** On Windows you start DFU bootloader on the chip first time you will see 'Found New Hardware Wizard' to install driver. If you install device driver properly you can find chip name like 'ATmega32U4' under 'LibUSB-Win32 Devices' tree on 'Device Manager'. If not you shall need to update its driver on 'Device Manager'. You will find the driver in `FLIP` install directory like: C:\Program Files (x86)\Atmel\Flip 3.4.5\usb\. In case of `dfu-programmer` use its driver.
If you use PJRC Teensy you don't need step 2 and 3 above, just get [Teensy loader][teensy-loader].
### 2. Download source
You can find firmware source at github:
- <https://github.com/tmk/tmk_keyboard>
If you are familiar with `Git` tools you are recommended to use it but you can also download zip archive from:
- <https://github.com/tmk/tmk_keyboard/archive/master.zip>
Build firmware
--------------
### 1. Open terminal
Open terminal window to get access to commands. Use Cygwin(or MingGW) `shell terminal` in Windows or `Terminal.app` on Mac OSX. In Windows press `Windows` key and `R` then enter `cmd` in 'Run command' dialog showing up.
### 2. Change directory
Move to project directory in the firmware source.
cd tmk_keyboard/{'keyboard' or 'converter'}/<project>
### 3. Make
Build firmware using GNU `make` command. You'll see `<project>_<variant>.hex` file in that directory unless something unexpected occurs in build process.
make -f Makefile.<variant> clean
make -f Makefile.<variant>
Program Controller
------------------
Now you have **hex** file to program on current directory. This **hex** is only needed to program your controller, other files are used for development and you may leave and forget them.
### 1. Start bootloader
How to program controller depends on controller chip and its board design. To program AVR USB chips you'll need to start it up in bootloader mode. Most of boards with the chip have a push button to let bootloader come up. Consult with your controller board manual.
### 2. Program with DFU bootloader
Stock AVR USB chip including ATmega32U4 has DFU bootloader by factory default. `FLIP` is a DFU programmer on Windows offered by Atmel. Open source command line tool `dfu-programmer` also supports AVR chips, it runs on Linux, Mac OSX and even Windows.
To program AVR chip with DFU bootloader use `FLIP` or `dfu-programmer`.
If you have a proper program command in `Makefile` just type this.
`FLIP` has two version of tool, GUI app and command line program. If you want GUI see tutorial below.
To use command line tool run this command. Note that you need to set PATH variable properly.
$ make -f Makefile.<variant> flip
Or to program with `dfu-programmer` run:
$ make -f Makefile.<variant> dfu
#### FLIP GUI tutorial
1. On menu bar click Device -> Select, then. `ATmega32u4`.
2. On menu bar click Settings -> Communication -> USB, then click 'Open' button on 'USB Port Connection' dialog.
At this point you'll see grey-outed widgets on the app get colored and ready.
3. On menu bar click File -> Load HEX File, then select your firmware hex file on File Selector dialog.
4. On 'Operations Flow' panel click 'Run' button to load the firmware binary to the chip. Note that you should keep 'Erase', 'Blank Check', 'Program' and 'Verify' check boxes selected.
5. Re-plug USB cord or click 'Start Application' button to restart your controller.
Done.
See also these instructions if you need.
- <http://code.google.com/p/micropendous/wiki/LoadingFirmwareWithFLIP>
- <http://www.atmel.com/Images/doc7769.pdf>
### 3. Program with Teensy Loader
If you have PJRC Teensy see instruction of `Teensy Loader`.
- <http://www.pjrc.com/teensy/loader.html>
Or use this command if you have command line version of Teensy Loader installed.
$ make -f Makefile.<variant> teensy
### 4. Program with Other programmer
You may want to use other programmer like `avrdude` with AVRISPmkII, Arduino or USBasp. In that case you can still use make target `program` for build with configuring `PROGRAM_CMD` in Makefile.
$ make -f Makefile.<variant> program
[cygwin]: https://www.cygwin.com/
[mingw]: http://www.mingw.org/
[mhv]: https://infernoembedded.com/products/avr-tools
[winavr]: http://winavr.sourceforge.net/
[crosspack]: http://www.obdev.at/products/crosspack/index.html
[flip]: http://www.atmel.com/tools/FLIP.aspx
[dfu-prog]: http://dfu-programmer.sourceforge.net/
[teensy-loader]:http://www.pjrc.com/teensy/loader.html
Makefile Options
----------------
### 1. MCU and Frequency.
MCU = atmega32u4 # Teensy 2.0
#MCU = at90usb1286 # Teensy++ 2.0
F_CPU = 16000000
Set your MCU and its clock in Hz.
# Boot Section Size in *bytes*
# Teensy halfKay 512
# Atmel DFU loader 4096
# LUFA bootloader 4096
OPT_DEFS += -DBOOTLOADER_SIZE=4096
If you are using PJRC Teensy use `512` for `BOOTLOADER_SIZE`, otherwise use `4096` unless you are sure.
### 2. Features
Optional. Note that ***comment out*** with `#` to disable them.
BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000)
MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
CONSOLE_ENABLE = yes # Console for debug(+400)
COMMAND_ENABLE = yes # Commands for debug and configuration
SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend
#NKRO_ENABLE = yes # USB Nkey Rollover - not yet supported in LUFA
#BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
### 3. Programmer
Optional. Set proper command for your controller, bootloader and programmer. This command can be used with `make program`. Not needed if you use `FLIP`, `dfu-programmer` or `Teensy Loader`.
# avrdude with AVRISPmkII
PROGRAM_CMD = avrdude -p $(MCU) -c avrispmkII -P USB -U flash:w:$(TARGET).hex
# avrdude with USBaspLoader
PROGRAM_CMD = avrdude -p $(MCU) -c usbasp -U flash:w:$(TARGET).hex
# avrdude with arduino
PROGRAM_CMD = avrdude -p $(MCU) -c arduino -P COM1 -b 57600 -U flash:w:$(TARGET).hex
Config.h Options
----------------
### 1. Magic command key combination
#define IS_COMMAND() (keyboard_report->mods == (MOD_BIT(KB_LSHIFT) | MOD_BIT(KB_RSHIFT)))
### 2. Mechanical Locking Support for CapsLock
/* Mechanical locking CapsLock support. Use KC_LCAP instead of KC_CAPS in keymap */
#define CAPSLOCK_LOCKING_ENABLE
/* Locking CapsLock re-synchronize hack */
#define CAPSLOCK_LOCKING_RESYNC_ENABLE
### 3. Disable Debug and Print
/* disable debug print */
#define NO_DEBUG
/* disable print */
#define NO_PRINT
### 4. Disable Action Features
#define NO_ACTION_LAYER
#define NO_ACTION_TAPPING
#define NO_ACTION_ONESHOT
#define NO_ACTION_MACRO
#define NO_ACTION_FUNCTION
***TBD***
+133
View File
@@ -0,0 +1,133 @@
# The `config.h` file
This is a c header file that is one of the first things included, and will persist over the whole project (if included). Lots of variables can be set here and accessed elsewhere (namely keymaps). This file can exist at a couple different levels:
## Keyboard
```c
#ifndef CONFIG_H
#define CONFIG_H
#include "config_common.h"
// config options
#ifdef SUBPROJECT_<subproject>
#include "<subproject>/config.h"
#endif
#endif
```
This file contains config options that should apply to the whole keyboard, and won't change in subprojects, or most keymaps. The suproject block here only applies to keyboards with subprojects.
## Subproject
```c
#ifndef <subproject>_CONFIG_H
#define <subproject>_CONFIG_H
#include "../config.h"
// config options
#endif
```
For keyboards that have subprojects, this file contains config options that should apply to only that subproject, and won't change in most keymaps.
## Keymap
```c
#ifndef CONFIG_USER_H
#define CONFIG_USER_H
#include "../../config.h"
// config options
#endif
```
This file contains all of the options for that particular keymap. If you wish to override a previous declaration, you can use `#undef <variable>` to undefine it, where you can then redefine it without an error.
# Config Options
```c
#define VENDOR_ID 0x1234 // defines your VID, and for most DIY projects, can be whatever you want
#define PRODUCT_ID 0x5678 // defines your PID, and for most DIY projects, can be whatever you want
#define DEVICE_VER 0 // defines the device version (often used for revisions)
#define MANUFACTURER Me // generally who/whatever brand produced the board
#define PRODUCT Board // the name of the keyboard
#define DESCRIPTION a keyboard // a short description of what the keyboard is
#define MATRIX_ROWS 5 // the number of rows in your keyboard's matrix
#define MATRIX_COLS 15 // the number of columns in your keyboard's matrix
#define MATRIX_ROW_PINS { D0, D5, B5, B6 } // pins of the rows, from top to bottom
#define MATRIX_COL_PINS { F1, F0, B0, C7, F4, F5, F6, F7, D4, D6, B4, D7 } // pins of the columns, from left to right
#define UNUSED_PINS { D1, D2, D3, B1, B2, B3 } // pins unused by the keyboard for reference
#define MATRIX_HAS_GHOST // define is matrix has ghost (unlikely)
#define DIODE_DIRECTION COL2ROW // COL2ROW or ROW2COL - how your matrix is configured
// COL2ROW means the black mark on your diode is facing to the rows, and between the switch and the rows
#define AUDIO_VOICES // turns on the alternate audio voices (to cycle through)
#define C6_AUDIO // enables audio on pin C6
#define B5_AUDIO // enables audio on pin B5 (duophony is enable if both are enabled)
#define BACKLIGHT_PIN B7 // pin of the backlight - B5, B6, B7 use PWM, others use softPWM
#define BACKLIGHT_LEVELS 3 // number of levels your backlight will have (not including off)
#define DEBOUNCING_DELAY 5 // the delay when reading the value of the pin (5 is default)
#define LOCKING_SUPPORT_ENABLE // mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap
#define LOCKING_RESYNC_ENABLE // tries to keep switch state consistent with keyboard LED state
#define IS_COMMAND() ( \ // key combination that allows the use of magic commands (useful for debugging)
keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
)
// the following options can save on file size at the expense of that feature
#define NO_DEBUG // disable debuging (saves on file size)
#define NO_PRINT // disable printing (saves of file size)
#define NO_ACTION_LAYER // no layers
#define NO_ACTION_TAPPING // no tapping for layers/mods
#define NO_ACTION_ONESHOT // no oneshot for layers/mods
#define NO_ACTION_MACRO // no macros
#define NO_ACTION_FUNCTION // no functions
#define FORCE_NKRO // NKRO by default requires to be turned on, this forces it to be on always
#define PREVENT_STUCK_MODIFIERS // when switching layers, this will release all mods
#define TAPPING_TERM 200 // how long before a tap becomes a hold
#define TAPPING_TOGGLE 2 // how many taps before triggering the toggle
#define PERMISSIVE_HOLD // makes tap and hold keys work better for fast typers who don't want tapping term set above 500
#define LEADER_TIMEOUT 300 // how long before the leader key times out
#define ONESHOT_TIMEOUT 300 // how long before oneshot times out
#define ONESHOT_TAP_TOGGLE 2 // how many taps before oneshot toggle is triggered
#define IGNORE_MOD_TAP_INTERRUPT // makes it possible to do rolling combos (zx) with keys that convert to other keys on hold
// ws2812 options
#define RGB_DI_PIN D7 // pin the DI on the ws2812 is hooked-up to
#define RGBLIGHT_ANIMATIONS // run RGB animations
#define RGBLED_NUM 15 // number of LEDs
#define RGBLIGHT_HUE_STEP 12 // units to step when in/decreasing hue
#define RGBLIGHT_SAT_STEP 25 // units to step when in/decresing saturation
#define RGBLIGHT_VAL_STEP 12 // units to step when in/decreasing value (brightness)
#define RGBW_BB_TWI // bit-bangs twi to EZ RGBW LEDs (only required for Ergodox EZ)
// mousekey options (self-describing)
#define MOUSEKEY_INTERVAL 20
#define MOUSEKEY_DELAY 0
#define MOUSEKEY_TIME_TO_MAX 60
#define MOUSEKEY_MAX_SPEED 7
#define MOUSEKEY_WHEEL_DELAY 0
```
+97 -44
View File
@@ -1,6 +1,10 @@
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.
# How To Customize Your Keyboard's Behavior
## A Word on Keyboards vs Keymap
For a lot of people a custom keyboard is about more than sending button presses to your computer. You want to be able to do things that are more complex than simple button presses and macros. QMK has hooks that allow you to inject code, override functionality, and otherwise customize how your keyboard behaves in different situations.
This page does not assume any special knowledge about QMK, but reading [Understanding QMK](understanding_qmk.html) will help you understand what is going on at a more fundamental level.
## A Word on Core vs Keyboards vs Keymap
We have structured QMK as a hierarchy:
@@ -8,59 +12,66 @@ We have structured QMK as a hierarchy:
* 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.
Each of the functions described below can be defined with a `_kb()` suffix or a `_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
# Custom Keycodes
* Keyboard/Revision: `void matrix_init_kb(void)`
* Keymap: `void matrix_init_user(void)`
By far the most common task is to change the behavior of an existing keycode or to create a new keycode. From a code standpoint the mechanism for each is very similar.
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.
## Defining a New Keycode
### Example
The first step to creating your own custom keycode(s) is to enumerate them. This means both naming them and assigning a unique number to that keycode. Rather than limit custom keycodes to a fixed range of numbers QMK provides the `SAFE_RANGE` macro. You can use `SAFE_RANGE` when enumerating your custom keycodes to guarantee that you get a unique number.
Here is an example of enumerating 2 keycodes. After adding this block to your `keymap.c` you will be able to use `FOO` and `BAR` inside your keymap.
```
void matrix_init_kb(void) {
// put your keyboard start-up code here
// runs once when the firmware starts up
matrix_init_user();
enum my_keycodes {
FOO = SAFE_RANGE,
BAR
};
```
// JTAG disable for PORT F. write JTD bit twice within four cycles.
MCUCR |= (1<<JTD);
MCUCR |= (1<<JTD);
## Programming The Behavior Of Any Keycode
// * Set our LED pins as output
DDRB |= (1<<0);
DDRB |= (1<<1);
DDRB |= (1<<2);
DDRB |= (1<<3);
DDRB |= (1<<4);
When you want to override the behavior of an existing key, or define the behavior for a new key, you should use the `process_record_kb()` and `process_record_user()` functions. These are called by QMK during key processing before the actual key event is handled. If these functions return `true` QMK will process the keycodes as usual. That can be handy for extending the functionality of a key rather than replacing it. If these functions return `false` QMK will skip the normal key handling, and it will be up you to send any key up or down events that are required.
These function are called every time a key is pressed or released.
### Example `process_record_user()` implementation
This example does two things. It defines the behavior for a custom keycode called `FOO`, and it supplements our Enter key by playing a tone whenever it is pressed.
```
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
switch (keycode) {
case FOO:
if (record->event.pressed) {
// Do something when pressed
} else {
// Do something else when release
}
return false; // Skip all further processing of this key
case KC_ENTER:
// Play a tone when enter is pressed
if (record->event.pressed) {
PLAY_NOTE_ARRAY(tone_qwerty);
}
return true; // Let QMK send the enter press/release events
}
}
```
## 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
### `process_record_*` Function documentation
* 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 `keycode` argument is whatever is defined in your keymap, eg `MO(1)`, `KC_L`, etc. You should use a `switch...case` block to handle these events.
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:
The `record` argument contains infomation about the actual press:
```
keyrecord_t record {
@@ -75,12 +86,7 @@ keyrecord_t record {
}
```
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)`
# LED Control
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.
@@ -90,7 +96,7 @@ This allows you to control the 5 LED's defined as part of the USB Keyboard spec.
* `USB_LED_COMPOSE`
* `USB_LED_KANA`
### Example:
### Example `led_set_kb()` implementation
```
void led_set_kb(uint8_t usb_led) {
@@ -121,3 +127,50 @@ void led_set_kb(uint8_t usb_led) {
}
}
```
### `led_set_*` Function documentation
* Keyboard/Revision: `void led_set_kb(uint8_t usb_led)`
* Keymap: `void led_set_user(uint8_t usb_led)`
# Matrix Initialization Code
Before a keyboard can be used the hardware must be initialized. QMK handles initialization of the keyboard matrix itself, but if you have other hardware like LED's or i&#xb2;c controllers you will need to set up that hardware before it can be used.
### Example `matrix_init_kb()` implementation
This example, at the keyboard level, sets up B1, B2, and B3 as LED pins.
```
void matrix_init_kb(void) {
// Call the keymap level matrix init.
matrix_init_user();
// Set our LED pins as output
DDRB |= (1<<1);
DDRB |= (1<<2);
DDRB |= (1<<3);
}
```
### `matrix_init_*` Function documentation
* Keyboard/Revision: `void matrix_init_kb(void)`
* Keymap: `void matrix_init_user(void)`
# Matrix Scanning Code
Whenever possible you should customize your keyboard by using `process_record_*()` and hooking into events that way, to ensure that your code does not have a negative performance impact on your keyboard. However, in rare cases it is necessary to hook into the matrix scanning. Be extremely careful with the performance of code in these functions, as it will be called at least 10 times per second.
### Example `matrix_scan_*` implementation
This example has been deliberately omitted. You should understand enough about QMK internals to write this without an example before hooking into such a performance sensitive area. If you need help please [open an issue](https://github.com/qmk/qmk_firmware/issues/new) or [chat with us on gitter](https://gitter.im/qmk/qmk_firmware).
### `matrix_scan_*` Function documentation
* 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.
File diff suppressed because it is too large Load Diff
-7
View File
@@ -1,7 +0,0 @@
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** |
+39
View File
@@ -0,0 +1,39 @@
# Documentation Best Practices
This page exists to document best practices when writing documentation for QMK. Following these guidelines will help to keep a consistent tone and style, which will in turn help other people more easily understand QMK.
# Page Opening
Your documentation page should generally start with an H1 heading, followed by a 1 paragrah description of what the user will find on this page. Keep in mind that this heading and paragraph will sit next to the Table of Contents, so keep the heading short and avoid long strings with no whitespace.
Example:
```
# My Page Title
This page covers my super cool feature. You can use this feature to make coffee, squeeze fresh oj, and have an egg mcmuffin and hashbrowns delivered from your local macca's by drone.
```
# Headings
Your page should generally have multiple "H1" headings. Only H1 and H2 headings will included in the Table of Contents, so plan them out appropriately. Excess width should be avoided in H1 and H2 headings to prevent the Table of Contents from getting too wide.
# Styled Hint Blocks
You can have styled hint blocks drawn around text to draw attention to it.
{% hint style='info' %}
This uses `hint style='info'`
{% endhint %}
{% hint style='tip' %}
This uses `hint style='tip'`
{% endhint %}
{% hint style='danger' %}
This uses `hint style='danger'`
{% endhint %}
{% hint style='working' %}
This uses `hint style='working'`
{% endhint %}
+3 -1
View File
@@ -1,3 +1,5 @@
# Setting Up Eclipse for QMK Development
[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:
@@ -81,4 +83,4 @@ We will now configure a make target that cleans the project and builds the keyma
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.
9. Select the <kbd>Console</kbd> view at the bottom to view the running build.
-64
View File
@@ -1,64 +0,0 @@
# 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
+24 -48
View File
@@ -1,31 +1,35 @@
## READ FIRST
- **README** of top directory : https://github.com/tmk/tmk_keyboard/blob/master/README.md
- **README** of target project(keyboard/converter) directory.
# Frequently Asked Questions
Note that you'll need to read **both**.
## What is QMK?
[QMK](https://github.com/qmk), short for Quantum Mechanical Keyboard, is a group of people building tools for custom keyboards. We started with the [QMK firmware](https://github.com/qmk/qmk_firmware), a heavily modified fork of [TMK](https://github.com/tmk/tmk_keyboard).
# Build
- [[FAQ/Build]]
## What Differences Are There Between QMK and TMK?
TMK was originally designed and implemented by [Jun Wako](https://github.com/tmk). QMK started as [Jack Humbert's](https://github.com/jackhumbert) fork of TMK for the Planck. After a while Jack's fork had diverged quite a bit from TMK, and in 2015 Jack decided to rename his fork to QMK.
# Keymap
- [[FAQ/Keymap]]
From a technical standpoint QMK builds upon TMK by adding several new features. Most notably QMK has expanded the number of available keycodes and uses these to implement advanced features like `S()`, `LCTL()`, and `MO()`. You can see a complete list of these keycodes in [Quantum Keycodes](quantum_keycodes.html).
From a project and community management standpoint TMK maintains all the officially supported keyboards by himself, with a bit of community support. Separate community maintained forks exist or can be created for other keyboards. Only a few keymaps are provided by default, so users typically don't share keymaps with each other. QMK encourages sharing of both keyboards and keymaps through a centrally managed repository, accepting all pull requests that follows the quality standards. These are mostly community maintained, but the QMK team also helps when necessary.
Both approaches have their merits and their drawbacks, and code flows freely between TMK and QMK when it makes sense.
# 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:.........
```
Waiting for device:.........
```
once the device is pluged in then *hid_listen* finds it you will get this message:
Waiting for new device:.........................
Listening:
```
Waiting for new device:.........................
Listening:
```
Check if you can't get this 'Listening:' message:
- build with `CONSOLE_ENABLE=yes` in **Makefile**.
If you can't get this 'Listening:' message try building with `CONSOLE_ENABLE=yes` in [Makefile]
You may need privilege to access the device on OS like Linux.
- try `sudo hid_listen`
@@ -73,41 +77,13 @@ Without reset circuit you will have inconsistent reuslt due to improper initiali
## 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.
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`.
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**.
```
@@ -157,20 +133,20 @@ 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.
You need to define `EXTRAKEY_ENABLE` in `rules.mk` to use them in QMK.
```
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
@@ -235,4 +211,4 @@ 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
http://imgur.com/a/bnwzy
+6 -57
View File
@@ -1,5 +1,6 @@
## READ FIRST
- https://github.com/qmk/qmk_firmware/blob/master/docs/build_guide.md
# Frequently Asked Build Questions
This page covers questions about building QMK. If you have not yet you should read the [Build Guide](https://github.com/qmk/qmk_firmware/blob/master/docs/build_guide.md).
In short,
@@ -8,12 +9,10 @@ In short,
$ make [-f Makefile.<variant>] [KEYMAP=...] dfu
## Can't program on Linux and Mac
## Can't program on Linux
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
@@ -26,63 +25,14 @@ or just
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
```
Most boards in QMK use `0xFEED` as the vendor ID. You should look through other keyboards to make sure you pick a unique Product ID.
Also see this.
https://github.com/tmk/tmk_keyboard/issues/150
@@ -112,7 +62,6 @@ 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
@@ -148,4 +97,4 @@ Note that Teensy2.0++ bootloader size is 2048byte. Some Makefiles may have wrong
# LUFA bootloader 4096
# USBaspLoader 2048
OPT_DEFS += -DBOOTLOADER_SIZE=2048
```
```
+20 -74
View File
@@ -1,10 +1,13 @@
## READ FIRST
https://github.com/tmk/tmk_core/blob/master/doc/keymap.md
# Frequently Asked Keymap Questions
## 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).
This page covers questions people often have about keymaps. If you haven't you should read [Keymap Overview](keymap.html) first.
## Sysrq key
## What Keycodes Can I Use?
See [Basic Keycodes](keycodes.html) and [Quantum Keycodes](quantum_keycodes.html) for most of the keys you can define.
Keycodes are actually defined in [common/keycode.h](https://github.com/qmk/qmk_firmware/blob/master/tmk_core/common/keycode.h).
## `KC_SYSREQ` isn't working
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
@@ -16,7 +19,7 @@ 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
More info: 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.
@@ -32,15 +35,17 @@ For Modifier keys and layer actions you have to place `KC_TRANS` on same positio
## 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
This feature is for *mechanical lock switch* like [this Alps one](http://deskthority.net/wiki/Alps_SKCL_Lock). You can enable it by adding this to your `config.h`:
```
#define LOCKING_SUPPORT_ENABLE
#define LOCKING_RESYNC_ENABLE
```
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`.***
After enabling this feature use keycodes `KC_LCAP`, `KC_LNUM` and `KC_LSCR` in your keymap instead.
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 `KC_CAPS`, `KC_NLCK` and `KC_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.
@@ -111,68 +116,12 @@ 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
Use `GRAVE_ESC` or `KC_GESC` in your keymap.
## 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"
@@ -211,18 +160,16 @@ const uint16_t PROGMEM fn_actions[] = {
```
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
`KC_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___
@@ -262,4 +209,3 @@ if (timer_elapsed(key_timer) < 100) {
```
It's best to declare the `static uint16_t key_timer;` at the top of the file, outside of any code blocks you're using it in.

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