Compare commits

...

260 Commits

Author SHA1 Message Date
933701c212 Updated .gitignore to properly have the master changes 2017-08-07 09:06:53 -04:00
5f58a8f842 Line endings issue for uk78? 2017-08-07 09:06:53 -04:00
4fd5ee410c Modified gitignore file to allow the left and right hand eeprom files for the MiniDox to be added. They need to be there for proper flashing of the board. They do not change between builds, so no need to re-build them. 2017-08-07 09:06:53 -04:00
93b850048a Changed my personal keymap and config. 2017-08-07 09:06:53 -04:00
7f3921bcb3 Update nic keymap 2017-08-06 22:46:44 -04:00
b529d5923f Update readme 2017-08-06 22:46:44 -04:00
fb0d4e96e8 Add nic keymap 2017-08-06 22:46:44 -04:00
c93975ac94 Add "hhkb with arrows" macro 2017-08-06 22:46:44 -04:00
ba59b2d97e Port hhkbanana 2017-08-06 22:46:44 -04:00
4a5c948561 Port true_banana as default 2017-08-06 22:46:44 -04:00
087fbe0628 Port main keyboard parts 2017-08-06 22:46:44 -04:00
9e79bb1491 Merge pull request #1554 from qmk/docs
Updates some remaining doc stuff
2017-08-06 22:29:59 -04:00
1fc9eabd08 Fixed a layout comment to match layout array 2017-08-06 20:08:37 -04:00
7b5f02aa6a Port updated debouncing algorithm from Let's Split to Nyquist 2017-08-06 20:08:00 -04:00
b20a87e3cc Add .eep files for setting hands 2017-08-06 20:08:00 -04:00
396f97068b Add RGB commands to default Nyquist keymap 2017-08-06 20:08:00 -04:00
5fbd25db62 Update readme.md 2017-08-06 20:06:24 -04:00
05351ce8b3 Add files via upload 2017-08-06 20:06:24 -04:00
525b3deadf add short name for locking mods to docs. 2017-08-03 23:10:31 -04:00
76ea366abd Merge pull request #1538 from That-Canadian/eco-keyboard
Eco keyboard
2017-08-03 20:58:23 -04:00
5c44d40a0c Merge pull request #1540 from fabiant7t/master
amj40 added; my layouts for Let's Split, amj40 and XD75
2017-08-03 20:57:44 -04:00
479139f9d4 Fix location of where the make command should be run 2017-08-03 20:56:21 -04:00
e0caf94323 Move avrdude flashing script from individual keyboard rules.mk to common location and improve script.
Port detection script is now more informative and better handles first time flashing of a Pro Micro
2017-08-03 20:56:21 -04:00
088dfb7db5 added a clone of my lets split grid layout on a re75 2017-08-03 21:05:09 +02:00
3c2343664c Merge https://github.com/qmk/qmk_firmware 2017-08-03 19:44:58 +02:00
83b35bf6f6 Update readme.md 2017-08-03 11:57:18 -04:00
8765751f70 Added V2 files for the ECO board, also changed default from rev1 to rev2. 2017-08-03 11:02:52 -04:00
c33434c0d6 Merge branch 'master' into eco-keyboard 2017-08-03 10:52:30 -04:00
07ba06d0b6 fix section in porting guide that refered to Makefile instead of rules.mk 2017-08-02 22:00:49 -04:00
b6280f979c Picture and details update
I fixed the picture of the layout and added a bit of an explanation. It now matches the readme file from the uppercase BASE folder
2017-08-02 21:52:31 -04:00
7371209ffb Adds Eagleheardt's XD60 keymap (#1528)
* Add files via upload

* Update readme.md

* Update readme.md

* Add files via upload
2017-08-02 21:23:36 -04:00
d28b2c395b tap-dance: key + layer helper
This adds the `ACTION_TAP_DANCE_DUAL_ROLE` helper, which makes it easy to have
keys that act as a key on the first tap, and as a layer toggle on the second.

Fixes #1532, reported by @Ptomerty.

Signed-off-by: Gergely Nagy <algernon@madhouse-project.org>
2017-08-02 16:06:16 -04:00
bb30ff5f71 Fix HHKBish layout arrows 2017-08-02 16:05:46 -04:00
bc5c67b3b2 Change TG to TO 2017-08-02 16:05:46 -04:00
ea02a3ea23 Update keymap to have HHKB-ish support and readme along with it 2017-08-02 16:05:46 -04:00
29fcb64bb4 add KC_Grave and fix typo on readme 2017-08-02 16:05:46 -04:00
70cc193d14 Add a readme.md file for the keymap 2017-08-02 16:05:46 -04:00
aab5f349a2 New keymap for mechmerlin 2017-08-02 16:05:46 -04:00
a7b6292010 added missing media controls and mod-tap rshift/enter 2017-08-02 16:05:22 -04:00
8e66f65c77 add my keymap 2017-08-02 16:05:22 -04:00
xk
23549791eb Add keymap xk 2017-08-02 16:04:49 -04:00
dd3803f334 Normalize all line endings 2017-08-01 16:44:29 -04:00
015bf30d9b changed adjust layer to emulate mouse on rignt hand 2017-07-31 22:01:35 +02:00
9609a47c3e Merge https://github.com/qmk/qmk_firmware 2017-07-31 21:17:16 +02:00
661106bac4 layout updates and cleanups 2017-07-31 21:16:55 +02:00
bd0a888133 line-endings 2017-07-30 12:59:18 -04:00
d272111d46 added xd75 to list in /keyboards 2017-07-30 00:46:08 -04:00
0b528d2e36 updated readme and tweaked keymap 2017-07-30 00:46:08 -04:00
cc6043ca29 add backlight support (probably) 2017-07-30 00:46:08 -04:00
fffc5237a7 fix RGB 2017-07-30 00:46:08 -04:00
992a63c0f2 add xd75, preliminary RGB' 2017-07-30 00:46:08 -04:00
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
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
ac634aa455 Fixed error in readme 2017-07-28 23:41:53 -04:00
6b2a3492b7 Removed un-needed protosplit directory and updated readme 2017-07-28 10:45:34 -04:00
dcd64062d2 Reverted changes 2017-07-28 10:45:34 -04:00
4148aeee19 Figured out that I didn't need to include both keymaps in both files 2017-07-28 10:45:34 -04:00
1f78b62cd6 Hopefully compile issues are gone, and updated files 2017-07-28 10:45:34 -04:00
9f82d14eb9 Fixed all things jack suggested. 2017-07-28 10:45:34 -04:00
b710e21efb Added to blank spaces at end of protosplit to make it compile under make v2 2017-07-28 10:45:34 -04:00
9334986bd9 Updated readme to show compile rules that won't throw an error 2017-07-28 10:45:34 -04:00
f2824bca02 Fixed typo in my layout and updated 2017-07-28 10:45:34 -04:00
5023f55856 Fixed some capitalization issues 2017-07-28 10:45:34 -04:00
6d15f5a5b7 Another typo fix 2017-07-28 10:45:34 -04:00
ea1fd96c84 Fixed typo in my layout 2017-07-28 10:45:34 -04:00
1eea91f5f8 Updated my makefile..again 2017-07-28 10:45:34 -04:00
9546b180b9 Updated my makefile 2017-07-28 10:45:34 -04:00
2265e4ce41 Removed old keymaps 2017-07-28 10:45:34 -04:00
cbc5a08c40 Removed old protosplit folder 2017-07-28 10:45:34 -04:00
78f79ca6cc Removed old folder 2017-07-28 10:45:34 -04:00
f1dbf72e09 Changed case of protosplit
Also updated readme to have correct capitalization.
2017-07-28 10:45:34 -04:00
c71b60c82a Changed case of deltasplit75 to be lowercase.
To follow convention.
2017-07-28 10:45:34 -04:00
47c6d201aa Add my layout 2017-07-28 10:45:34 -04:00
f6438e42af Add files via upload 2017-07-28 10:45:34 -04:00
242c1da2c2 Delete deltasplit build guide.pdf 2017-07-28 10:45:34 -04:00
be1876aa76 Add files via upload 2017-07-28 10:45:34 -04:00
1ef6777723 Add files via upload 2017-07-28 10:45:34 -04:00
d3b6552fb7 Delete MX RIGHT B.dxf 2017-07-28 10:45:34 -04:00
ce3ea49743 Delete ALPS+MX RIGHT B.dxf 2017-07-28 10:45:34 -04:00
811c583636 Delete ALPS RIGHT B.dxf 2017-07-28 10:45:34 -04:00
173d1b7571 Delete middle layers - RIGHT B.dxf 2017-07-28 10:45:34 -04:00
98f977e95c Delete bottom layers - RIGHT B.dxf 2017-07-28 10:45:34 -04:00
1832b59266 Delete MX LEFT B.dxf 2017-07-28 10:45:34 -04:00
1bfe5b5723 Delete ALPS+MX LEFT B.dxf 2017-07-28 10:45:34 -04:00
038c12d59a Delete ALPS LEFT B.dxf 2017-07-28 10:45:34 -04:00
3d23a80c83 Delete Middle layers - LEFT B.dxf 2017-07-28 10:45:34 -04:00
f56884b253 Delete Bottom Layer - LEFT B.dxf 2017-07-28 10:45:34 -04:00
d4e695a136 Delete top bezel - blocked corner.dxf 2017-07-28 10:45:34 -04:00
2013f4fb83 Delete top bezel - Winkeyless.dxf 2017-07-28 10:45:34 -04:00
508cc7e56b Delete top bezel - Standard.dxf 2017-07-28 10:45:34 -04:00
8958a4f78b Delete PCB Dimesnsion.dxf 2017-07-28 10:45:34 -04:00
429971997c Delete MX RIGHT B.dwg 2017-07-28 10:45:34 -04:00
e898a8ecc8 Delete ALPS+MX RIGHT B.dwg 2017-07-28 10:45:34 -04:00
b6e8516d6d Delete ALPS RIGHT B.dwg 2017-07-28 10:45:34 -04:00
2077226fc2 Delete middle layers - RIGHT B.dwg 2017-07-28 10:45:34 -04:00
cfafa97227 Delete bottom layers - RIGHT B.dwg 2017-07-28 10:45:34 -04:00
3d73110795 Delete readme.md 2017-07-28 10:45:34 -04:00
727707ef0b Delete PCB Dimesnsion.dwg 2017-07-28 10:45:34 -04:00
2a3af90d9f Delete MX LEFT B.dwg 2017-07-28 10:45:34 -04:00
73e5a7fafe Delete ALPS+MX LEFT B.dwg 2017-07-28 10:45:34 -04:00
eceb2a4810 Delete ALPS LEFT B.dwg 2017-07-28 10:45:34 -04:00
b34dfeecdf Delete Middle layers - LEFT B.dwg 2017-07-28 10:45:34 -04:00
01458037de Delete Bottom Layer - LEFT B.dwg 2017-07-28 10:45:34 -04:00
461f95ce0b Update readme.md 2017-07-28 10:45:34 -04:00
f4bc404aa2 Delete top bezel - blocked corner.dwg 2017-07-28 10:45:34 -04:00
b70e68ac5b Delete top bezel - Winkeyless.dwg 2017-07-28 10:45:34 -04:00
e4d849ed95 Delete top bezel - Standard.dwg 2017-07-28 10:45:34 -04:00
4f193d6dc2 Add files via upload 2017-07-28 10:45:34 -04:00
934d35ea3f Add files via upload 2017-07-28 10:45:34 -04:00
a76a607a2b Add files via upload 2017-07-28 10:45:34 -04:00
9aec284f42 Update 2017-07-28 10:45:34 -04:00
3a0f7865da Update readme.md 2017-07-28 10:45:34 -04:00
b11d770bea Update Makefile 2017-07-28 10:45:34 -04:00
5a63aa29a9 Update readme.md 2017-07-28 10:45:34 -04:00
ab63ff8d2e Update readme.md 2017-07-28 10:45:34 -04:00
00e4079d5a Delete top bezel - blocked corner.bak 2017-07-28 10:45:34 -04:00
4d88634f07 Delete top bezel - Standard.bak 2017-07-28 10:45:34 -04:00
5ea3b1ea4d Delete PCB Dimesnsion.dwl2 2017-07-28 10:45:34 -04:00
c497a19e7b Delete PCB Dimesnsion.dwl 2017-07-28 10:45:34 -04:00
7e07bdbde3 Add files via upload 2017-07-28 10:45:34 -04:00
60e5277a8f Delete PCB Dimesnsion.dwg 2017-07-28 10:45:34 -04:00
96ec98b1ad Create readme.md 2017-07-28 10:45:34 -04:00
7a31ef8284 Add files via upload 2017-07-28 10:45:34 -04:00
0c2b0c7cc1 Update readme.md 2017-07-28 10:45:34 -04:00
42ea9460fe Update readme.md 2017-07-28 10:45:34 -04:00
e9daf0606f Update readme.md 2017-07-28 10:45:34 -04:00
be2c7aac31 Add files via upload 2017-07-28 10:45:34 -04:00
c5780647d8 Fix typo in docs. 2017-07-27 16:10:36 -04:00
26fb063be3 Link to steno docs from summary page. 2017-07-27 16:10:36 -04:00
e81e75c147 Move steno keycodes due to conflict with another PR. 2017-07-27 16:10:36 -04:00
3e96e8a6a1 Add copyright to steno files. 2017-07-27 16:10:36 -04:00
c0f63ca9dc Add documentation for Steno. 2017-07-27 16:10:36 -04:00
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
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
20b3ac49b7 deleted file 2017-07-26 12:48:13 +02:00
619081559b added my amj40 custom layout 2017-07-26 12:47:40 +02:00
4a1f701d9f included amj40 implementation of nhou7 from https://github.com/nhou7/qmk_firmware_amj40 2017-07-26 12:46:04 +02:00
de9331c50c custom makefile 2017-07-26 12:19:13 +02:00
3b05183deb symmetric modifiers in bottom row 2017-07-26 12:18:40 +02:00
75677655ad left shift is backspace on tap 2017-07-26 11:11:13 +02:00
c7ea65c6d3 default based customizations 2017-07-26 11:09:29 +02:00
4ee571b257 Merge https://github.com/qmk/qmk_firmware 2017-07-25 09:48:58 +02:00
cefc09ae7d adds option for alt pitch standards 2017-07-24 12:45:34 -04:00
a543ad4c1d Fix minor formatting issue. 2017-07-23 15:10:27 -04:00
6bdf7482b1 update audio/music documentation 2017-07-23 14:59:29 -04:00
415d38ba9e adds music mode, music mode songs, music mask 2017-07-23 14:59:29 -04:00
9abbbe7089 update audio documentation 2017-07-23 14:59:29 -04:00
f407f3e8de remove unneccesary headers 2017-07-23 14:59:29 -04:00
92ccc9a7b8 use automatic rests with songs (no more rest styles) 2017-07-23 14:59:29 -04:00
f40ded7894 relocate keymap's useful tools 2017-07-23 14:59:29 -04:00
fd664fe85b escape song playing in music 2017-07-23 14:59:29 -04:00
fe113ebad5 start updating audio docs 2017-07-23 14:59:29 -04:00
6a3c66776c clean-up planck and preonic keymaps, move audio stuff around 2017-07-23 14:59:29 -04:00
8edb67b082 fix line-endings 2017-07-21 19:05:13 -04:00
e26283e9e5 Update keymap.c 2017-07-20 21:52:13 -04:00
8deb405292 Add files via upload 2017-07-20 21:52:13 -04:00
4d665a99ae Add files via upload 2017-07-20 21:52:13 -04:00
4627cab49d Delete test 2017-07-20 21:52:13 -04:00
e5f606558e Add files via upload 2017-07-20 21:52:13 -04:00
f379f05c1e Create test 2017-07-20 21:52:13 -04:00
1524d29cfb Added some user customization 2017-07-20 10:18:00 -04:00
30efce5584 Changes to own keymap 2017-07-20 10:18:00 -04:00
a5b0f4de35 Add SRC and OPT_DEFS when building tests 2017-07-20 10:17:31 -04:00
20696a9efe Fix building of multiple test directories 2017-07-20 10:17:31 -04:00
ee43856ff7 Merge https://github.com/qmk/qmk_firmware 2017-07-20 08:22:44 +02:00
14c5160b1a Update _summary.md 2017-07-17 15:01:33 -04:00
000e749853 Rename docs/features/README.md to docs/features.md 2017-07-17 15:01:11 -04:00
7c0610b411 Merge pull request #1498 from That-Canadian/minidox
Minidox
2017-07-14 22:04:18 -04:00
b6d74b9bb9 Fixed typo in readme 2017-07-14 21:58:59 -04:00
5e8594db82 Updated MiniDox readme 2017-07-14 21:57:41 -04:00
6c9b69a4b6 Merge branch 'master' into minidox 2017-07-14 21:35:50 -04:00
5412229603 Merge remote-tracking branch 'upstream/master' 2017-07-14 21:34:37 -04:00
e2e0f5d6d1 Merge branch 'minidox' of https://github.com/That-Canadian/qmk_firmware into minidox 2017-07-14 21:33:19 -04:00
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
6ed8ce4f59 Merge pull request #1491 from fredizzimo/msys2
Add support for msys2 build environment
2017-07-13 14:24:26 -04:00
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
b7d8dec7dc Fix printf error in make output on msys2 2017-07-12 13:04:50 +03:00
7f67abd7d7 Fix bitfield problem when compiling in native mingw 2017-07-11 22:05:01 +03:00
cc468523df clean up ssd1306 implementation 2017-07-11 14:23:26 -04:00
387b07404a update drivers to exclude lets_split include 2017-07-11 13:57:58 -04:00
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
886af32507 Updates maartenwut's keymap (#1489)
* Updated keymap

* Added backlight breathing to fix compile error
2017-07-11 12:53:41 -04:00
78545b9509 Fix unreferenced errors with mingw compiler and unit tests 2017-07-11 19:41:04 +03:00
5a25d50168 Add more dependencies, everything can be compiled now 2017-07-11 18:51:52 +03:00
5c3fd67198 Add tools to the path 2017-07-11 17:55:03 +03:00
0d9e7f635e Extract flip 2017-07-11 17:32:58 +03:00
76bd0d3e18 Install arm toolchain 2017-07-11 17:18:24 +03:00
b8c363099b Download and extract avr tools 2017-07-11 16:44:46 +03:00
b85ce4ce22 Fix overlong lines, and a few spelling errors 2017-07-11 16:26:29 +03:00
d47db637ed Use home directory for download on msys2 2017-07-11 16:11:37 +03:00
d73d30aa84 Merge remote-tracking branch 'upstream/master' 2017-07-10 21:24:20 -04:00
585f140052 Invites contributions 2017-07-10 20:51:46 -04:00
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
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
df50260300 cleaned up that_canadian keymap comments 2017-07-10 16:59:20 -04:00
55ed97af1e Merge branch 'master' into minidox 2017-07-10 16:53:49 -04:00
07bf8522ca Merge remote-tracking branch 'upstream/master' 2017-07-10 16:52:56 -04:00
1fdf3c84fe Updated minidox rev1 config, and readme. Also updated that_canadian keymap to include RGB 2017-07-10 16:51:37 -04:00
65c10790d4 Update README.md 2017-07-10 11:53:18 -04:00
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
32fc4da4a7 Install unzip 2017-07-10 18:16:35 +03:00
861087096b Add symlinks only on WSL 2017-07-10 18:05:32 +03:00
7bedf8f4f2 Fix launch of qmk_driver_installer on msys2 2017-07-10 17:51:59 +03:00
8d190d5e25 Merge branch 'master' of https://github.com/qmk/qmk_firmware 2017-07-10 10:35:45 -04:00
a2d3fc98b8 Initial structure for shared msys2 and wsl installation 2017-07-10 17:31:58 +03:00
10546665f4 Fix uninitialized backlight_level in the Visualizer 2017-07-10 09:02:36 -04:00
551924f8a0 Add template board files 2017-07-10 09:01:59 -04:00
190b90892b Rename board files to lowercase 2017-07-10 09:01:59 -04:00
9d8279960d Make it easier to use drivers 2017-07-10 09:01:59 -04:00
4da3b19603 Shared default animations 2017-07-10 09:01:59 -04:00
2251560256 Clarify naming between LCD_BACKLIGHT and LED_BACKLIGHT 2017-07-10 09:01:59 -04:00
f3c113fb5a Shared gfxconf 2017-07-10 09:01:59 -04:00
8a962f7b27 Define visualizer thread priority by default 2017-07-10 09:01:59 -04:00
011ee29441 Fixup mixed tabs/spaces 2017-07-10 09:01:59 -04:00
630f065376 Remove ergodox from gdisp driver names 2017-07-10 09:01:59 -04:00
aca0f4dcae Move GDISP drivers to /drivers/ugfx 2017-07-10 09:01:59 -04:00
1ff5fb000f Fix Makefile error_occured output for unit tests 2017-07-10 09:00:58 -04:00
ba405cfbb4 Don't search for TEENSY_LOADER_CLI if it's already defined 2017-07-10 09:00:18 -04:00
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
9312b9db6c Added MiniDox keyboard folder / configs / and some keymaps 2017-07-10 00:46:19 -04:00
707f4efd99 line ending stuff 2017-07-10 00:30:40 -04:00
e7a5fee1f3 merge 2017-07-10 00:21:38 -04:00
6221498601 Merge commit '8858438a770c1c982f33b296447ca77176c751f7' 2017-07-09 21:26:54 -04:00
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
ddc3d3b64b remove numbered headings 2017-07-08 22:53:43 -07:00
d90dc05ddb try swapping toc and numbered headings 2017-07-08 22:51:16 -07:00
7583136d73 try removing the anchor plugin 2017-07-08 22:44:18 -07:00
2dea401a8e play around with plugin settings 2017-07-08 22:39:32 -07:00
4c7c7747a3 Add terminal examples to doc best practices 2017-07-08 22:39:17 -07:00
fcd08b8c7d more crlf issues 2017-07-08 20:03:33 -07:00
5810bb67e4 Rearrange the faq a bit 2017-07-08 20:01:35 -07:00
cb9e59152e Flesh out the glossary 2017-07-08 20:01:30 -07:00
9158673166 Reference issue #1478 from the unit tests 2017-07-08 21:59:51 -04:00
b3af79eaff Reference issue #1477 from the unit tests 2017-07-08 21:59:51 -04:00
41efcd6d73 Reference issue #524 from the unit tests 2017-07-08 21:59:51 -04:00
60b1880a62 Reference issue #1476 from the unit tests 2017-07-08 21:59:51 -04:00
67f722c9c8 Configure vscode file associations, use hpp instead of h 2017-07-08 21:59:51 -04:00
631c09e976 Fix keymap formatting 2017-07-08 21:59:51 -04:00
e5780a6dc6 Add tests for macros 2017-07-08 21:59:51 -04:00
4087d6da0d Add wait support for tests 2017-07-08 21:59:51 -04:00
fc4bfbe580 Rename tests to start with test_ 2017-07-08 21:59:51 -04:00
4e69a8bda6 Add basic timing support, and SFT_T tests
Also expose some bugs...
2017-07-08 21:59:51 -04:00
a62f449659 Add test for a combo key 2017-07-08 21:59:51 -04:00
cae7a9c3ec Add simple modifier test 2017-07-08 21:59:51 -04:00
1985f43bad Improve the tests a bit 2017-07-08 21:59:51 -04:00
72c8df1f19 A bigger test matrix, and test for unmapped keys 2017-07-08 21:59:51 -04:00
1e4cc36e14 Rename test.cpp to keypress.cpp 2017-07-08 21:59:51 -04:00
0256cd8cca Build all cpp files in test directories 2017-07-08 21:59:51 -04:00
7d79962785 Move test keymap to keymap.c 2017-07-08 21:59:51 -04:00
448b91689f Exclude .build and .hex from Visual Studio code 2017-07-08 21:59:51 -04:00
db5bb7dbbf Changed - to _ for keymap that-canadian for compatability reasons. 2017-07-04 15:41:14 -04:00
c534c3e734 Updated ECO files to follow proper formatting. Also updated that-canadian keymap to take out extraneous characters. 2017-07-04 15:26:25 -04:00
f9e8d25e2e Updated ECO readme file, includes picture of ECO now. 2017-07-04 14:19:49 -04:00
e256468e48 Added ECO keyboard folder and configuration files. Also added my (That-Canadian) keymap folder and files. 2017-07-04 14:14:26 -04:00
99b6e918ea fixed brackets 2017-06-27 16:20:17 +02:00
9aa748df2a my layout 2017-06-27 10:36:00 +02:00
fe3d75922b Merge https://github.com/qmk/qmk_firmware 2017-06-27 09:22:05 +02:00
7d0a471051 removed wrong readme 2017-06-27 09:18:05 +02:00
786eb4e73d my layout 2017-06-27 09:14:04 +02:00
4c71b329a2 clone smt layout 2017-06-26 22:33:14 +02:00
379 changed files with 17709 additions and 8380 deletions

10
.gitignore vendored
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,10 +33,15 @@ 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
*.png
*.jpg
*.gif
*.gif
# Do not ignore MiniDox left/right hand eeprom files
!keyboards/minidox/*.eep

14
.vscode/settings.json vendored Normal file
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"
}
}

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) FULL_TESTS=$$(FULL_TESTS)
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

View File

@ -3,12 +3,9 @@
"summary": "_summary.md"
},
"plugins" : [
"anchors",
"edit-link",
"forkmegithub",
"git-author",
"hints",
"numbered-headings",
"page-toc",
"terminal",
"toolbar"
@ -25,6 +22,11 @@
"page-toc": {
"selector": ".markdown-section h1, .markdown-section h2"
},
"terminal": {
"copyButtons": true,
"fade": false,
"style": "flat"
},
"toolbar": {
"buttons": [
{

View File

@ -18,13 +18,16 @@
TEST_PATH=tests/$(TEST)
$(TEST)_SRC= \
$(TEST_PATH)/test.cpp \
$(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)_DEFS=$(TMK_COMMON_DEFS)
$(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
VPATH+=$(TOP_DIR)/tests/test_common

View File

@ -9,6 +9,9 @@ LIB_PATH = $(TOP_DIR)/lib
QUANTUM_DIR = quantum
QUANTUM_PATH = $(TOP_DIR)/$(QUANTUM_DIR)
DRIVER_DIR = drivers
DRIVER_PATH = $(TOP_DIR)/$(DRIVER_DIR)
BUILD_DIR := $(TOP_DIR)/.build
COMMON_VPATH := $(TOP_DIR)
@ -17,4 +20,5 @@ COMMON_VPATH += $(QUANTUM_PATH)
COMMON_VPATH += $(QUANTUM_PATH)/keymap_extras
COMMON_VPATH += $(QUANTUM_PATH)/audio
COMMON_VPATH += $(QUANTUM_PATH)/process_keycode
COMMON_VPATH += $(QUANTUM_PATH)/api
COMMON_VPATH += $(QUANTUM_PATH)/api
COMMON_VPATH += $(DRIVER_PATH)

View File

@ -54,6 +54,12 @@ ifeq ($(strip $(COMBO_ENABLE)), yes)
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
@ -87,7 +93,7 @@ endif
ifeq ($(strip $(RGBLIGHT_ENABLE)), yes)
OPT_DEFS += -DRGBLIGHT_ENABLE
SRC += $(QUANTUM_DIR)/light_ws2812.c
SRC += ws2812.c
SRC += $(QUANTUM_DIR)/rgblight.c
CIE1931_CURVE = yes
LED_BREATHING_TABLE = yes

View File

@ -1,4 +1,4 @@
* [Getting started](README.md)
* [Getting started](README.md)
* [QMK Overview](qmk_overview.md)
* [Build Environment Setup](build_environment_setup.md)
* [Vagrant Guide](vagrant_guide.md)
@ -7,7 +7,7 @@
* [FAQ: Compiling QMK](faq_build.md)
* [How to Github](how_to_github.md)
* [Features](features/README.md)
* [Features](features.md)
* [Layer switching](key_functions.md)
* [Leader Key](leader_key.md)
* [Macros](macros.md)
@ -16,6 +16,7 @@
* [Tap Dance](tap_dance.md)
* [Mouse keys](mouse_keys.md)
* [Unicode](unicode.md)
* [Stenography](stenography.md)
* Reference
* [Glossary](glossary.md)
@ -27,7 +28,7 @@
* [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)
@ -39,7 +40,7 @@
* 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)

View File

@ -51,9 +51,9 @@
|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_LOCKING_CAPS|KC_LCAP|Locking Caps Lock|
|KC_LOCKING_NUM|KC_LNUM|Locking Num Lock|
|KC_LOCKING_SCROLL|KC_LSCR|Locking Scroll Lock|
|KC_INT4|KC_HENK|JIS Henken|
|KC_INT5|KC_MHEN|JIS Muhenken|
@ -183,4 +183,4 @@ Windows and Mac use different key codes for next track and previous track. Make
|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|
|KC_MS_ACCEL2|KC_ACL2|Mouse Acceleration 2|

View File

@ -36,7 +36,7 @@ enum my_keycodes {
## Programming The Behavior Of Any Keycode
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.
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.

View File

@ -22,6 +22,14 @@ Your page should generally have multiple "H1" headings. Only H1 and H2 headings
You can have styled hint blocks drawn around text to draw attention to it.
```
{% hint style='info' %}
This uses `hint style='info'`
{% endhint %}
```
### Examples:
{% hint style='info' %}
This uses `hint style='info'`
{% endhint %}
@ -37,3 +45,33 @@ This uses `hint style='danger'`
{% hint style='working' %}
This uses `hint style='working'`
{% endhint %}
# Styled Terminal Blocks
You can present styled terminal blocks by including special tokens inside your text block.
```
\`\`\`
**[terminal]
**[prompt foo@joe]**[path ~]**[delimiter $ ]**[command ./myscript]
Normal output line. Nothing special here...
But...
You can add some colors. What about a warning message?
**[warning [WARNING] The color depends on the theme. Could look normal too]
What about an error message?
**[error [ERROR] This is not the error you are looking for]
\`\`\`
```
### Example
```
**[terminal]
**[prompt foo@joe]**[path ~]**[delimiter $ ]**[command ./myscript]
Normal output line. Nothing special here...
But...
You can add some colors. What about a warning message?
**[warning [WARNING] The color depends on the theme. Could look normal too]
What about an error message?
**[error [ERROR] This is not the error you are looking for]
```

View File

@ -1,10 +1,16 @@
# Frequently Asked Questions
## What is QMK?
## General
### 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).
## What Differences Are There Between QMK and TMK?
### Why the name Quantum?
<!-- FIXME -->
### 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.
@ -14,8 +20,22 @@ From a project and community management standpoint TMK maintains all the officia
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
# Building
## Windows
### I'm on Windows Vista, 7, or 8, how do I setup my build environment?
Follow the build instructions to [install MHV AVR Tools](https://docs.qmk.fm/build_environment_setup.html#windows-vista-and-later).
### I'm on Windows 10 without the Creators Update. Do I have to install it?
No, but if you don't install the creators update you will not be able to build and flash with a single command. You will be able to build but to flash you will have to use a separate program, such as [QMK Flasher](https://github.com/qmk/qmk_flasher).
# Troubleshooting
## Debug Console
### hid_listen can't recognize device
When debug console of your device is not ready you will see like this:
```
@ -34,7 +54,7 @@ If you can't get this 'Listening:' message try building with `CONSOLE_ENABLE=yes
You may need privilege to access the device on OS like Linux.
- try `sudo hid_listen`
## Can't get message on console
### Can't get message on console
Check:
- *hid_listen* finds your device. See above.
- Enable debug with pressing **Magic**+d. See [Magic Commands](https://github.com/tmk/tmk_keyboard#magic-commands).
@ -42,7 +62,7 @@ Check:
- try using 'print' function instead of debug print. See **common/print.h**.
- disconnect other devices with console function. See [Issue #97](https://github.com/tmk/tmk_keyboard/issues/97).
## Linux or UNIX like system requires Super User privilege
### Linux or UNIX like system requires Super User privilege
Just use 'sudo' to execute *hid_listen* with privilege.
```
$ sudo hid_listen
@ -56,10 +76,9 @@ File: /etc/udev/rules.d/52-tmk-keyboard.rules(in case of Ubuntu)
SUBSYSTEMS=="usb", ATTRS{idVendor}=="feed", MODE:="0666"
```
***
## Software Issues
# Miscellaneous
## NKRO Doesn't work
### NKRO Doesn't work
First you have to compile frimware with this build option `NKRO_ENABLE` in **Makefile**.
Try `Magic` **N** command(`LShift+RShift+N` by default) when **NKRO** still doesn't work. You can use this command to toggle between **NKRO** and **6KRO** mode temporarily. In some situations **NKRO** doesn't work you need to switch to **6KRO** mode, in particular when you are in BIOS.
@ -68,15 +87,7 @@ If your firmeare built with `BOOTMAGIC_ENABLE` you need to turn its switch on by
https://github.com/tmk/tmk_keyboard#boot-magic-configuration---virtual-dip-switch
## TrackPoint needs reset circuit(PS/2 mouse support)
Without reset circuit you will have inconsistent reuslt due to improper initialize of the hardware. See circuit schematic of TPM754.
- http://geekhack.org/index.php?topic=50176.msg1127447#msg1127447
- http://www.mikrocontroller.net/attachment/52583/tpm754.pdf
## Can't read column of matrix beyond 16
### Can't read column of matrix beyond 16
Use `1UL<<16` instead of `1<<16` in `read_cols()` in [matrix.h] when your columns goes beyond 16.
In C `1` means one of [int] type which is [16bit] in case of AVR so you can't shift left more than 15. You will get unexpected zero when you say `1<<16`. You have to use [unsigned long] type with `1UL`.
@ -84,16 +95,16 @@ In C `1` means one of [int] type which is [16bit] in case of AVR so you can't sh
http://deskthority.net/workshop-f7/rebuilding-and-redesigning-a-classic-thinkpad-keyboard-t6181-60.html#p146279
## Bootloader jump doesn't work
### Bootloader jump doesn't work
Properly configure bootloader size in **Makefile**. With wrong section size bootloader won't probably start with **Magic command** and **Boot Magic**.
```
# Size of Bootloaders in bytes:
# Atmel DFU loader(ATmega32U4) 4096
# Atmel DFU loader(AT90USB128) 8192
# LUFA bootloader(ATmega32U4) 4096
# Arduino Caterina(ATmega32U4) 4096
# USBaspLoader(ATmega***) 2048
# Teensy halfKay(ATmega32U4) 512
# Atmel DFU loader(ATmega32U4) 4096
# Atmel DFU loader(AT90USB128) 8192
# LUFA bootloader(ATmega32U4) 4096
# Arduino Caterina(ATmega32U4) 4096
# USBaspLoader(ATmega***) 2048
# Teensy halfKay(ATmega32U4) 512
# Teensy++ halfKay(AT90USB128) 2048
OPT_DEFS += -DBOOTLOADER_SIZE=4096
```
@ -107,14 +118,14 @@ byte Atmel/LUFA(ATMega32u4) byte Atmel(AT90SUB1286)
| | | |
| | | |
| Application | | Application |
| | | |
| | | |
= = = =
| | 32KB-4KB | | 128KB-8KB
0x6000 +---------------+ 0x1E000 +---------------+
| Bootloader | 4KB | Bootloader | 8KB
0x7FFF +---------------+ 0x1FFFF +---------------+
byte Teensy(ATMega32u4) byte Teensy++(AT90SUB1286)
0x0000 +---------------+ 0x00000 +---------------+
| | | |
@ -132,20 +143,28 @@ And see this discussion for further reference.
https://github.com/tmk/tmk_keyboard/issues/179
## Special Extra key doesn't work(System, Audio control keys)
### Special Extra key doesn't work(System, Audio control keys)
You need to define `EXTRAKEY_ENABLE` in `rules.mk` to use them in QMK.
```
EXTRAKEY_ENABLE = yes # Audio control and System control
```
## Wakeup from sleep doesn't work
### 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?
## Hardware Issues
### TrackPoint needs reset circuit(PS/2 mouse support)
Without reset circuit you will have inconsistent reuslt due to improper initialize of the hardware. See circuit schematic of TPM754.
- http://geekhack.org/index.php?topic=50176.msg1127447#msg1127447
- http://www.mikrocontroller.net/attachment/52583/tpm754.pdf
### 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.
@ -154,8 +173,7 @@ Pressing any key during sleep should wake host.
Arduino leonardo and micro have **ATMega32U4** and can be used for TMK, though Arduino bootloader may be a problem.
## Using PF4-7 pins of USB AVR?
### Using PF4-7 pins of USB AVR?
You need to set JTD bit of MCUCR yourself to use PF4-7 as GPIO. Those pins are configured to serve JTAG function by default. MCUs like ATMega*U* or AT90USB* are affeteced with this.
If you are using Teensy this isn't needed. Teensy is shipped with JTAGEN fuse bit unprogrammed to disable the function.
@ -171,12 +189,7 @@ https://github.com/tmk/tmk_keyboard/blob/master/keyboard/hbkb/matrix.c#L67
And read **26.5.1 MCU Control Register MCUCR** of ATMega32U4 datasheet.
## Adding LED indicators of Lock keys
You need your own LED indicators for CapsLock, ScrollLock and NumLock? See this post.
http://deskthority.net/workshop-f7/tmk-keyboard-firmware-collection-t4478-120.html#p191560
## Program Arduino Micro/Leonardo
### Program Arduino Micro/Leonardo
Push reset button and then run command like this within 8 seconds.
```
@ -188,27 +201,16 @@ Device name will vary depending on your system.
http://arduino.cc/en/Main/ArduinoBoardMicro
https://geekhack.org/index.php?topic=14290.msg1563867#msg1563867
## USB 3 compatibility
I heard some people have a problem with USB 3 port, try USB 2 port.
## Mac compatibility
### OS X 10.11 and Hub
https://geekhack.org/index.php?topic=14290.msg1884034#msg1884034
## Problem on BIOS(UEFI)/Resume(Sleep&Wake)/Power cycles
### Problem on BIOS(UEFI)/Resume(Sleep&Wake)/Power cycles
Some people reported their keyboard stops working on BIOS and/or after resume(power cycles).
As of now root of its cause is not clear but some build options seem to be related. In Makefile try to disable those options like `CONSOLE_ENABLE`, `NKRO_ENABLE`, `SLEEP_LED_ENABLE` and/or others.
As of now root of its cause is not clear but some build options seem to be related. In Makefile try to disable those options like `CONSOLE_ENABLE`, `NKRO_ENABLE`, `SLEEP_LED_ENABLE` and/or others.
https://github.com/tmk/tmk_keyboard/issues/266
https://geekhack.org/index.php?topic=41989.msg1967778#msg1967778
## Flashing Problems
### Can't use dfu-programmer or QMK Flasher to flash on Windows
## FLIP doesn't work
### AtLibUsbDfu.dll not found
Remove current driver and reinstall one FLIP provides from DeviceManager.
http://imgur.com/a/bnwzy
Windows requires a driver to support the keyboard in DFU mode. You can use [QMK Driver Installer](https://github.com/qmk/qmk_driver_installer/releases) to install the necessary drivers.

View File

@ -102,4 +102,4 @@ case MACRO_RAISED:
update_tri_layer(LAYER_LOWER, LAYER_RAISED, LAYER_ADJUST);
}
break;
```
```

View File

@ -1,29 +1,170 @@
# Glossary of QMK terms
## ARM
A line of 32-bit MCU's produced by a number of companies, such as Atmel, Cypress, Kinetis, NXP, ST, and TI.
## AVR
A line of 8-bit MCU's produced by [Atmel](http://atmel.com). AVR was the original platform that TMK supported.
## AZERTY
The standard Français (French) keyboard layout. Named for the first 6 keys on the keyboard.
## Backlight
A generic term for lighting on a keyboard. The backlight is typically, but not always, an array of LED's that shine through keycaps and/or switches.
## Bluetooth
A short range peer to peer wireless protocol. Most common wireless protocol for a keyboard.
## Bootloader
A special program that is written to a protected area of your MCU that allows the MCU to upgrade its own firmware, typically over USB.
## Bootmagic
A feature that allows for various keyboard behavior changes to happen on the fly, such as swapping or disabling common keys.
## C
A low-level programming language suitable for system code. Most QMK code is written in C.
## Colemak
An alternative keyboard layout that is gaining in popularity.
## Compile
The process of turning human readable code into machine code your MCU can run.
## Dvorak
An alternative keyboard layout developed by Dr. August Dvorak in the 1930's. A shortened form of the Dvorak Simplified Keyboard.
## Dynamic Macro
A macro which has been recorded on the keyboard and which will be lost when the keyboard is unplugged or the computer rebooted.
* [Dynamic Macro Documentation](dynamic_macros.html)
## Eclipse
An IDE that is popular with many C developers.
* [Eclipse Setup Instructions](eclipse.html)
## Firmware
The software that controls your MCU.
## FLIP
Software provided by Atmel for flashing AVR devices. We generally recommend [QMK Flasher](https://github.com/qmk/qmk_flasher) instead, but for some advanced use cases FLIP is required.
## git
Versioning software used at the commandline
## GitHub
The website that hosts most of the QMK project. It provides integration with git, issue tracking, and other features that help us run QMK.
## ISP
In-system programming, a method of programming an AVR chip using external hardware and the JTAG pins.
## hid_listen
An interface for receiving debugging messages from your keyboard. You can view these messages using [QMK Flasher](https://github.com/qmk/qmk_flasher) or [PJRC's hid_listen](https://www.pjrc.com/teensy/hid_listen.html)
## Keycode
A 2-byte number that represents a particular key. `0x00`-`0xFF` are used for [Basic Keycodes](keycodes.html) while `0x100`-`0xFFFF` are used for [Quantum Keycodes](quantum_keycodes.html).
## Key Down
An event that happens when a key is pressed down, but is completed before a key is released.
## Key Up
An event that happens when a key is released.
## Keymap
An array of keycodes mapped to a physical keyboard layout, which are processed on key presses and releases
## Layer
An abstraction used to allow a key to serve multiple purposes. The highest active layer takes precedence.
## Leader Key
A feature that allows you to tap the leader key followed by a sequence of 1, 2, or 3 keys to activate key presses or other quantum features.
* [Leader Key Documentation](leader_key.html)
## LED
Light Emitting Diode, the most common device used for indicators on a keyboard.
## Make
Software package that is used to compile all the source files. You run `make` with various options to compile your keyboard firmware.
## Matrix
A wiring pattern of columns and rows (and usually diodes) that enables the MCU to detect keypresses with a fewer number of pins
A wiring pattern of columns and rows that enables the MCU to detect keypresses with a fewer number of pins. The matrix often incorporates diodes to allow for NKRO.
## Macro
A feature that lets you send muiltple keypress events (hid reports) after having pressed only a single key.
* [Macro Documentation](macros.html)
## MCU
Microcontrol Unit, the processor that powers your keyboard.
## Modifier
A key that is held down while typing another key to modify the action of that key. Examples include Ctrl, Alt, and Shift.
## Mousekeys
A feature that lets you control your mouse cursor and click from your keyboard.
* [Mousekeys Documentation](mouse_keys.html)
## N-Key Rollover (NKRO)
A term that applies to keyboards that are capable of reporting any number of key-presses at once.
## Oneshot Modifier
A modifier that acts as if it is held down until another key is released, so you can press the mod and then press the key, rather than holding the mod while pressing the key.
## ProMicro
A low cost AVR development board. Clones of this device are often found on ebay very inexpensively (under $5) but people often struggle with flashing their pro micros.
## Pull Request
A request to submit code to QMK. We encourage all users to submit Pull Requests for their personal keymaps.
## QWERTY
The standard English keyboard layout, and often a shortcut for other language's standard layouts. Named for the first 6 letters on the keyboard.
## QWERTZ
The standard Deutsche (German) keyboard layout. Named for the first 6 letters on the keyboard.
## Rollover
The term for pressing a key while a key is already held down. Variants include 2KRO, 6KRO, and NKRO.
## Scancode
A 1 byte number that is sent as part of a HID report over USB that represents a single key. These numbers are documented in the [HID Usage Tables](http://www.usb.org/developers/hidpage/Hut1_12v2.pdf) published by the [USB-IF](http://www.usb.org/).
## Space Cadet Shift
A special set of shift keys which allow you to type various types of braces by tapping the left or right shift one or more times.
* [Space Cadet Shift Documentation](space_cadet_shift.html)
## Tap
Pressing and releasing a key. In some situations you will need to distinguish between a key down and a key up event, and Tap always refers to both at once.
## Tap Dance
A feature that lets you assign muiltple keycodes to the same key based on how many times you press it.
* [Tap Dance Documentation](tap_dance.html)
## Teensy
A low-cost AVR development board that is commonly used for hand-wired builds. A teensy is often chosen despite costing a few dollors more due to its halfkay bootloader, which makes flashing very simple.
## Underlight
A generic term for LEDs that light the underside of the board. These LED's typically shine away from the bottom of the PCB and towards the surface the keyboard rests on.
## Unicode
In the larger computer world Unicode is a set of encoding schemes for representing characters in any language. As it relates to QMK it means using various OS schemes to send unicode codepoints instead of scancodes.
* [Unicode Documentation](unicode.html)
## Unit Testing
A framework for running automated tests against QMK. Unit testing helps us be confident that our changes do not break anything.
* [Unit Testing Documentation](unit_testing.html)
## USB
Universal Serial Bus, the most common wired interface for a keyboard.
## USB Host (or simply Host)
The USB Host is your computer, or whatever device your keyboard is plugged into.
# Couldn't find the term you're looking for?
[Open an issue](https://github.com/qmk/qmk_firmware/issues) with your question and the term in question could be added here. Better still, open a pull request with the definition. :)

View File

@ -1,52 +1,52 @@
## Audio output from a speaker
Your keyboard can make sounds! If you've got a Planck, Preonic, or basically any keyboard that allows access to the C6 or B5 port (`#define C6_AUDIO` and `#define B5_AUDIO`), you can hook up a simple speaker and make it beep. You can use those beeps to indicate layer transitions, modifiers, special keys, or just to play some funky 8bit tunes.
Your keyboard can make sounds! If you've got a Planck, Preonic, or basically any AVR keyboard that allows access to the C6 or B5 port (`#define C6_AUDIO` and/or `#define B5_AUDIO`), you can hook up a simple speaker and make it beep. You can use those beeps to indicate layer transitions, modifiers, special keys, or just to play some funky 8bit tunes.
The audio code lives in [quantum/audio/audio.h](https://github.com/qmk/qmk_firmware/blob/master/quantum/audio/audio.h) and in the other files in the audio directory. It's enabled by default on the Planck [stock keymap](https://github.com/qmk/qmk_firmware/blob/master/keyboards/planck/keymaps/default/keymap.c). Here are the important bits:
If you add `AUDIO_ENABLE = yes` to your `rules.mk`, there's a couple different sounds that will automatically be enabled without any other configuration:
```
#include "audio.h"
STARTUP_SONG // plays when the keyboard starts up (audio.c)
GOODBYE_SONG // plays when you press the RESET key (quantum.c)
AG_NORM_SONG // plays when you press AG_NORM (quantum.c)
AG_SWAP_SONG // plays when you press AG_SWAP (quantum.c)
MUSIC_ON_SONG // plays when music mode is activated (process_music.c)
MUSIC_OFF_SONG // plays when music mode is deactivated (process_music.c)
CHROMATIC_SONG // plays when the chromatic music mode is selected (process_music.c)
GUITAR_SONG // plays when the guitar music mode is selected (process_music.c)
VIOLIN_SONG // plays when the violin music mode is selected (process_music.c)
MAJOR_SONG // plays when the major music mode is selected (process_music.c)
```
Then, lower down the file:
You can override the default songs by doing something like this in your `config.h`:
```
float tone_startup[][2] = {
ED_NOTE(_E7 ),
E__NOTE(_CS7),
E__NOTE(_E6 ),
E__NOTE(_A6 ),
M__NOTE(_CS7, 20)
};
```c
#ifdef AUDIO_ENABLE
#define STARTUP_SONG SONG(STARTUP_SOUND)
#endif
```
This is how you write a song. Each of these lines is a note, so we have a little ditty composed of five notes here.
A full list of sounds can be found in [quantum/audio/song_list.h](https://github.com/qmk/qmk_firmware/blob/master/quantum/audio/song_list.h) - feel free to add your own to this list! All available notes can be seen in [quantum/audio/musical_notes.h](https://github.com/qmk/qmk_firmware/blob/master/quantum/audio/musical_notes.h).
Then, we have this chunk:
To play a custom sound at a particular time, you can define a song like this (near the top of the file):
```
float tone_qwerty[][2] = SONG(QWERTY_SOUND);
float tone_dvorak[][2] = SONG(DVORAK_SOUND);
float tone_colemak[][2] = SONG(COLEMAK_SOUND);
float tone_plover[][2] = SONG(PLOVER_SOUND);
float tone_plover_gb[][2] = SONG(PLOVER_GOODBYE_SOUND);
float music_scale[][2] = SONG(MUSIC_SCALE_SOUND);
float goodbye[][2] = SONG(GOODBYE_SOUND);
```c
float my_song[][2] = SONG(QWERTY_SOUND);
```
Wherein we bind predefined songs (from [quantum/audio/song_list.h](https://github.com/qmk/qmk_firmware/blob/master/quantum/audio/song_list.h)) into named variables. This is one optimization that helps save on memory: These songs only take up memory when you reference them in your keymap, because they're essentially all preprocessor directives.
And then play your song like this:
So now you have something called `tone_plover` for example. How do you make it play the Plover tune, then? If you look further down the keymap, you'll see this:
```
PLAY_NOTE_ARRAY(tone_plover, false, 0); // Signature is: Song name, repeat, rest style
```c
PLAY_SONG(my_song);
```
This is inside one of the macros. So when that macro executes, your keyboard plays that particular chime.
Alternatively, you can play it in a loop like this:
"Rest style" in the method signature above (the last parameter) specifies if there's a rest (a moment of silence) between the notes.
```c
PLAY_LOOP(my_song);
```
It's advised that you wrap all audio features in `#ifdef AUDIO_ENABLE` / `#endif` to avoid causing problems when audio isn't built into the keyboard.
## Music mode
@ -59,6 +59,11 @@ Keycodes available:
* `MU_ON` - Turn music mode on
* `MU_OFF` - Turn music mode off
* `MU_TOG` - Toggle music mode
* `MU_MOD` - Cycle through the music modes:
* `CHROMATIC_MODE` - Chromatic scale, row changes the octave
* `GUITAR_MODE` - Chromatic scale, but the row changes the string (+5 st)
* `VIOLIN_MODE` - Chromatic scale, but the row changes the string (+7 st)
* `MAJOR_MODE` - Major scale
In music mode, the following keycodes work differently, and don't pass through:
@ -68,6 +73,16 @@ In music mode, the following keycodes work differently, and don't pass through:
* `KC_UP` - speed-up playback
* `KC_DOWN` - slow-down playback
By default, `MUSIC_MASK` is set to `keycode < 0xFF` which means keycodes less than `0xFF` are turned into notes, and don't output anything. You can change this by defining this in your `config.h` like this:
#define MUSIC_MASK keycode != KC_NO
Which will capture all keycodes - be careful, this will get you stuck in music mode until you restart your keyboard!
The pitch standard (`PITCH_STANDARD_A`) is 440.0f by default - to change this, add something like this to your `config.h`:
#define PITCH_STANDARD_A 432.0f
## MIDI functionalty
This is still a WIP, but check out `quantum/keymap_midi.c` to see what's happening. Enable from the Makefile.

View File

@ -20,7 +20,7 @@ For the `DIODE_DIRECTION`, most hand-wiring guides will instruct you to wire the
`BACKLIGHT_LEVELS` is how many levels exist for your backlight - max is 15, and they are computed automatically from this number.
## `/keyboards/<keyboard>/Makefile`
## `/keyboards/<keyboard>/rules.mk`
The values at the top likely won't need to be changed, since most boards use the `atmega32u4` chip. The `BOOTLOADER_SIZE` will need to be adjusted based on your MCU type. It's defaulted to the Teensy, since that's the most common controller. Below is quoted from the `Makefile`.

108
docs/stenography.md Normal file
View File

@ -0,0 +1,108 @@
# Stenography in QMK
[Stenography](https://en.wikipedia.org/wiki/Stenotype) is a method of writing most often used by court reports, closed-captioning, and real-time transcription for the deaf. In stenography words are chorded syllable by syllable with a mixture of spelling, phonetic, and shortcut (briefs) strokes. Professional stenographers can reach 200-300 WPM without any of the strain usually found in standard typing and with far fewer errors (>99.9% accuracy).
The [Open Steno Project](http://www.openstenoproject.org/) has built an open-source program called Plover that provides real-time translation of steno strokes into words and commands. It has an established dictionary and supports
## Plover with QWERTY Keyboard
Plover can work with any standard QWERTY keyboard, although it is more efficient if the keyboard supports NKRO (n-key rollover) to allow Plover to see all the pressed keys at once. An example keymap for Plover can be found in `planck/keymaps/default`. Switching to the `PLOVER` layer adjusts the position of the keyboard to support the number bar.
To use Plover with QMK just enable NKRO and optionally adjust your layout if you have anything other than a standard layout. You may also want to purchase some steno-friendly keycaps to make it easier to hit multiple keys.
## Plover with Steno Protocol
Plover also understands the language of several steno machines. QMK can speak a couple of these languages, TX Bolt and GeminiRP. An example layout can be found in `planck/keymaps/steno`.
When QMK speaks to Plover over a steno protocol Plover will not use the keyboard as input. This means that you can switch back and forth between a standard keyboard and your steno keyboard, or even switch layers from Plover to standard and back without needing to activate/deactive Plover.
In this mode Plover expects to speak with a steno machine over a serial port so QMK will present itself to the operating system as a virtual serial port in addition to a keyboard. By default QMK will speak the TX Bolt protocol but can be switched to GeminiRP; the last protocol used is stored in non-volatile memory so QMK will use the same protocol on restart.
> Note: Due to hardware limitations you may not be able to run both a virtual serial port and mouse emulation at the same time.
### TX Bolt
TX Bolt communicates the status of 24 keys over a very simple protocol in variable-sized (1-5 byte) packets.
### GeminiRP
GeminiRP encodes 42 keys into a 6-byte packet. While TX Bolt contains everything that is necessary for standard stenography, GeminiRP opens up many more options, including supporting non-English theories.
## Configuring QMK for Steno
Firstly, enable steno in your keymap's Makefile. You should also diable mousekeys to prevent conflicts.
```Makefile
STENO_ENABLE = yes
MOUSEKEY_ENABLE = no
```
In your keymap create a new layer for Plover. You will need to include `keymap_steno.h`. See `planck/keymaps/steno/keymap.c` for an example. Remember to create a key to switch to the layer as well as a key for exiting the layer. If you would like to switch modes on the fly you can use the keycodes `QK_STENO_BOLT` and `QK_STENO_GEMINI`. If you only want to use one of the protocols you may set it up in your initialization function:
```C
void matrix_init_user() {
steno_set_mode(STENO_MODE_GEMINI); // or STENO_MODE_BOLT
}
```
Once you have your keyboard flashed launch Plover. Click the 'Configure...' button. In the 'Machine' tab select the Stenotype Machine that corresponds to your desired protocol. Click the 'Configure...' button on this tab and enter the serial port or click 'Scan'. Baud rate is fine at 9600 (although you should be able to set as high as 115200 with no issues). Use the default settings for everything else (Data Bits: 8, Stop Bits: 1, Parity: N, no flow control).
On the display tab click 'Open stroke display'. With Plover disabled you should be able to hit keys on your keyboard and see them show up in the stroke display window. Use this to make sure you have set up your keymap correctly. You are now ready to steno!
## Learning Stenography
* [Learn Plover!](https://sites.google.com/site/ploverdoc/)
* [QWERTY Steno](http://qwertysteno.com/Home/)
* [Steno Jig](https://joshuagrams.github.io/steno-jig/)
* More resources at the Plover [Learning Stenography](https://github.com/openstenoproject/plover/wiki/Learning-Stenography) wiki
## Keycode Reference
As defined in `keymap_steno.h`.
> Note: TX Bolt does not support the full set of keys. The TX Bolt implementation in QMK will map the GeminiRP keys to the nearest TX Bolt key so that one key map will work for both.
|GeminiRP|TX Bolt|Steno Key|
|--------|-------|-----------|
|`STN_N1`|`STN_NUM`|Number bar #1|
|`STN_N2`|`STN_NUM`|Number bar #2|
|`STN_N3`|`STN_NUM`|Number bar #3|
|`STN_N4`|`STN_NUM`|Number bar #4|
|`STN_N5`|`STN_NUM`|Number bar #5|
|`STN_N6`|`STN_NUM`|Number bar #6|
|`STN_N7`|`STN_NUM`|Number bar #7|
|`STN_N8`|`STN_NUM`|Number bar #8|
|`STN_N9`|`STN_NUM`|Number bar #9|
|`STN_NA`|`STN_NUM`|Number bar #A|
|`STN_NB`|`STN_NUM`|Number bar #B|
|`STN_NC`|`STN_NUM`|Number bar #C|
|`STN_S1`|`STN_SL`| `S-` upper|
|`STN_S2`|`STN_SL`| `S-` lower|
|`STN_TL`|`STN_TL`| `T-`|
|`STN_KL`|`STN_KL`| `K-`|
|`STN_PL`|`STN_PL`| `P-`|
|`STN_WL`|`STN_WL`| `W-`|
|`STN_HL`|`STN_HL`| `H-`|
|`STN_RL`|`STN_RL`| `R-`|
|`STN_A`|`STN_A`| `A` vowel|
|`STN_O`|`STN_O`| `O` vowel|
|`STN_ST1`|`STN_STR`| `*` upper-left |
|`STN_ST2`|`STN_STR`| `*` lower-left|
|`STN_ST3`|`STN_STR`| `*` upper-right|
|`STN_ST4`|`STN_STR`| `*` lower-right|
|`STN_E`|`STN_E`| `E` vowel|
|`STN_U`|`STN_U`| `U` vowel|
|`STN_FR`|`STN_FR`| `-F`|
|`STN_PR`|`STN_PR`| `-P`|
|`STN_RR`|`STN_RR`| `-R`|
|`STN_BR`|`STN_BR`| `-B`|
|`STN_LR`|`STN_LR`| `-L`|
|`STN_GR`|`STN_GR`| `-G`|
|`STN_TR`|`STN_TR`| `-T`|
|`STN_SR`|`STN_SR`| `-S`|
|`STN_DR`|`STN_DR`| `-D`|
|`STN_ZR`|`STN_ZR`| `-Z`|
|`STN_FN`|| (GeminiRP only)|
|`STN_RES1`||(GeminiRP only)|
|`STN_RES2`||(GeminiRP only)|
|`STN_PWR`||(GeminiRP only)|

View File

@ -1,12 +1,10 @@
#ifdef SSD1306OLED
#include "ssd1306.h"
#include "config.h"
#include "i2c.h"
#include <string.h>
#include "print.h"
#include "lets_split.h"
#include "common/glcdfont.c"
#include "glcdfont.c"
#ifdef ADAFRUIT_BLE_ENABLE
#include "adafruit_ble.h"
#endif
@ -14,18 +12,7 @@
#include "lufa.h"
#endif
#include "sendchar.h"
#include "pincontrol.h"
//assign the right code to your layers
#define _BASE 0
#define _LOWER 8
#define _RAISE 16
#define _FNLAYER 64
#define _NUMLAY 128
#define _NLOWER 136
#define _NFNLAYER 192
#define _MOUSECURSOR 256
#define _ADJUST 65560
#include "timer.h"
// Set this to 1 to help diagnose early startup problems
// when testing power-on with ble. Turn it off otherwise,
@ -33,26 +20,6 @@
// with the matrix scan, causing keys to drop.
#define DEBUG_TO_SCREEN 0
// Controls the SSD1306 128x32 OLED display via i2c
#define i2cAddress 0x3C
#define DisplayHeight 32
#define DisplayWidth 128
#define FontHeight 8
#define FontWidth 6
#define MatrixRows (DisplayHeight / FontHeight)
#define MatrixCols (DisplayWidth / FontWidth)
struct CharacterMatrix {
uint8_t display[MatrixRows][MatrixCols];
uint8_t *cursor;
bool dirty;
};
static struct CharacterMatrix display;
//static uint16_t last_battery_update;
//static uint32_t vbat;
//#define BatteryUpdateInterval 10000 /* milliseconds */
@ -62,54 +29,13 @@ static uint8_t displaying;
#endif
static uint16_t last_flush;
enum ssd1306_cmds {
DisplayOff = 0xAE,
DisplayOn = 0xAF,
SetContrast = 0x81,
DisplayAllOnResume = 0xA4,
DisplayAllOn = 0xA5,
NormalDisplay = 0xA6,
InvertDisplay = 0xA7,
SetDisplayOffset = 0xD3,
SetComPins = 0xda,
SetVComDetect = 0xdb,
SetDisplayClockDiv = 0xD5,
SetPreCharge = 0xd9,
SetMultiPlex = 0xa8,
SetLowColumn = 0x00,
SetHighColumn = 0x10,
SetStartLine = 0x40,
SetMemoryMode = 0x20,
ColumnAddr = 0x21,
PageAddr = 0x22,
ComScanInc = 0xc0,
ComScanDec = 0xc8,
SegRemap = 0xa0,
SetChargePump = 0x8d,
ExternalVcc = 0x01,
SwitchCapVcc = 0x02,
ActivateScroll = 0x2f,
DeActivateScroll = 0x2e,
SetVerticalScrollArea = 0xa3,
RightHorizontalScroll = 0x26,
LeftHorizontalScroll = 0x27,
VerticalAndRightHorizontalScroll = 0x29,
VerticalAndLeftHorizontalScroll = 0x2a,
};
// Write command sequence.
// Returns true on success.
static inline bool _send_cmd1(uint8_t cmd) {
bool res = false;
if (i2c_start_write(i2cAddress)) {
xprintf("failed to start write to %d\n", i2cAddress);
if (i2c_start_write(SSD1306_ADDRESS)) {
xprintf("failed to start write to %d\n", SSD1306_ADDRESS);
goto done;
}
@ -154,8 +80,6 @@ static inline bool _send_cmd3(uint8_t cmd, uint8_t opr1, uint8_t opr2) {
#define send_cmd2(c,o) if (!_send_cmd2(c,o)) {goto done;}
#define send_cmd3(c,o1,o2) if (!_send_cmd3(c,o1,o2)) {goto done;}
static void matrix_clear(struct CharacterMatrix *matrix);
static void clear_display(void) {
matrix_clear(&display);
@ -164,7 +88,7 @@ static void clear_display(void) {
send_cmd3(PageAddr, 0, (DisplayHeight / 8) - 1);
send_cmd3(ColumnAddr, 0, DisplayWidth - 1);
if (i2c_start_write(i2cAddress)) {
if (i2c_start_write(SSD1306_ADDRESS)) {
goto done;
}
if (i2c_master_write(0x40)) {
@ -210,14 +134,17 @@ bool iota_gfx_init(void) {
send_cmd2(SetChargePump, 0x14 /* Enable */);
send_cmd2(SetMemoryMode, 0 /* horizontal addressing */);
/// Flips the display orientation 0 degrees
send_cmd1(SegRemap | 0x1);
send_cmd1(ComScanDec);
/*
#ifdef OLED_ROTATE180
// the following Flip the display orientation 180 degrees
send_cmd1(SegRemap);
send_cmd1(ComScanInc);
// end flip */
#endif
#ifndef OLED_ROTATE180
// Flips the display orientation 0 degrees
send_cmd1(SegRemap | 0x1);
send_cmd1(ComScanDec);
#endif
send_cmd2(SetComPins, 0x2);
send_cmd2(SetContrast, 0x8f);
send_cmd2(SetPreCharge, 0xf1);
@ -263,7 +190,7 @@ done:
return success;
}
static void matrix_write_char_inner(struct CharacterMatrix *matrix, uint8_t c) {
void matrix_write_char_inner(struct CharacterMatrix *matrix, uint8_t c) {
*matrix->cursor = c;
++matrix->cursor;
@ -276,7 +203,7 @@ static void matrix_write_char_inner(struct CharacterMatrix *matrix, uint8_t c) {
}
}
static void matrix_write_char(struct CharacterMatrix *matrix, uint8_t c) {
void matrix_write_char(struct CharacterMatrix *matrix, uint8_t c) {
matrix->dirty = true;
if (c == '\n') {
@ -297,7 +224,7 @@ void iota_gfx_write_char(uint8_t c) {
matrix_write_char(&display, c);
}
static void matrix_write(struct CharacterMatrix *matrix, const char *data) {
void matrix_write(struct CharacterMatrix *matrix, const char *data) {
const char *end = data + strlen(data);
while (data < end) {
matrix_write_char(matrix, *data);
@ -309,7 +236,7 @@ void iota_gfx_write(const char *data) {
matrix_write(&display, data);
}
static void matrix_write_P(struct CharacterMatrix *matrix, const char *data) {
void matrix_write_P(struct CharacterMatrix *matrix, const char *data) {
while (true) {
uint8_t c = pgm_read_byte(data);
if (c == 0) {
@ -324,7 +251,7 @@ void iota_gfx_write_P(const char *data) {
matrix_write_P(&display, data);
}
static void matrix_clear(struct CharacterMatrix *matrix) {
void matrix_clear(struct CharacterMatrix *matrix) {
memset(matrix->display, ' ', sizeof(matrix->display));
matrix->cursor = &matrix->display[0][0];
matrix->dirty = true;
@ -334,7 +261,7 @@ void iota_gfx_clear_screen(void) {
matrix_clear(&display);
}
static void matrix_render(struct CharacterMatrix *matrix) {
void matrix_render(struct CharacterMatrix *matrix) {
last_flush = timer_read();
iota_gfx_on();
#if DEBUG_TO_SCREEN
@ -345,7 +272,7 @@ static void matrix_render(struct CharacterMatrix *matrix) {
send_cmd3(PageAddr, 0, MatrixRows - 1);
send_cmd3(ColumnAddr, 0, (MatrixCols * FontWidth) - 1);
if (i2c_start_write(i2cAddress)) {
if (i2c_start_write(SSD1306_ADDRESS)) {
goto done;
}
if (i2c_master_write(0x40)) {
@ -380,84 +307,12 @@ void iota_gfx_flush(void) {
matrix_render(&display);
}
static void matrix_update(struct CharacterMatrix *dest,
const struct CharacterMatrix *source) {
if (memcmp(dest->display, source->display, sizeof(dest->display))) {
memcpy(dest->display, source->display, sizeof(dest->display));
dest->dirty = true;
}
}
static void render_status_info(void) {
#if DEBUG_TO_SCREEN
if (debug_enable) {
return;
}
#endif
struct CharacterMatrix matrix;
matrix_clear(&matrix);
matrix_write_P(&matrix, PSTR("USB: "));
#ifdef PROTOCOL_LUFA
switch (USB_DeviceState) {
case DEVICE_STATE_Unattached:
matrix_write_P(&matrix, PSTR("Unattached"));
break;
case DEVICE_STATE_Suspended:
matrix_write_P(&matrix, PSTR("Suspended"));
break;
case DEVICE_STATE_Configured:
matrix_write_P(&matrix, PSTR("Connected"));
break;
case DEVICE_STATE_Powered:
matrix_write_P(&matrix, PSTR("Powered"));
break;
case DEVICE_STATE_Default:
matrix_write_P(&matrix, PSTR("Default"));
break;
case DEVICE_STATE_Addressed:
matrix_write_P(&matrix, PSTR("Addressed"));
break;
default:
matrix_write_P(&matrix, PSTR("Invalid"));
}
#endif
// Define layers here, Have not worked out how to have text displayed for each layer. Copy down the number you see and add a case for it below
char buf[40];
snprintf(buf,sizeof(buf), "Undef-%ld", layer_state);
matrix_write_P(&matrix, PSTR("\n\nLayer: "));
switch (layer_state) {
case _BASE:
matrix_write_P(&matrix, PSTR("Default"));
break;
case _RAISE:
matrix_write_P(&matrix, PSTR("Raise"));
break;
case _LOWER:
matrix_write_P(&matrix, PSTR("Lower"));
break;
case _ADJUST:
matrix_write_P(&matrix, PSTR("ADJUST"));
break;
default:
matrix_write(&matrix, buf);
}
// Host Keyboard LED Status
char led[40];
snprintf(led, sizeof(led), "\n%s %s %s",
(host_keyboard_leds() & (1<<USB_LED_NUM_LOCK)) ? "NUMLOCK" : " ",
(host_keyboard_leds() & (1<<USB_LED_CAPS_LOCK)) ? "CAPS" : " ",
(host_keyboard_leds() & (1<<USB_LED_SCROLL_LOCK)) ? "SCLK" : " ");
matrix_write(&matrix, led);
matrix_update(&display, &matrix);
__attribute__ ((weak))
void iota_gfx_task_user(void) {
}
void iota_gfx_task(void) {
render_status_info();
iota_gfx_task_user();
if (display.dirty) {
iota_gfx_flush();

93
drivers/avr/ssd1306.h Normal file
View File

@ -0,0 +1,93 @@
#ifndef SSD1306_H
#define SSD1306_H
#include <stdbool.h>
#include <stdio.h>
#include "pincontrol.h"
#include "config.h"
enum ssd1306_cmds {
DisplayOff = 0xAE,
DisplayOn = 0xAF,
SetContrast = 0x81,
DisplayAllOnResume = 0xA4,
DisplayAllOn = 0xA5,
NormalDisplay = 0xA6,
InvertDisplay = 0xA7,
SetDisplayOffset = 0xD3,
SetComPins = 0xda,
SetVComDetect = 0xdb,
SetDisplayClockDiv = 0xD5,
SetPreCharge = 0xd9,
SetMultiPlex = 0xa8,
SetLowColumn = 0x00,
SetHighColumn = 0x10,
SetStartLine = 0x40,
SetMemoryMode = 0x20,
ColumnAddr = 0x21,
PageAddr = 0x22,
ComScanInc = 0xc0,
ComScanDec = 0xc8,
SegRemap = 0xa0,
SetChargePump = 0x8d,
ExternalVcc = 0x01,
SwitchCapVcc = 0x02,
ActivateScroll = 0x2f,
DeActivateScroll = 0x2e,
SetVerticalScrollArea = 0xa3,
RightHorizontalScroll = 0x26,
LeftHorizontalScroll = 0x27,
VerticalAndRightHorizontalScroll = 0x29,
VerticalAndLeftHorizontalScroll = 0x2a,
};
// Controls the SSD1306 128x32 OLED display via i2c
#ifndef SSD1306_ADDRESS
#define SSD1306_ADDRESS 0x3C
#endif
#define DisplayHeight 32
#define DisplayWidth 128
#define FontHeight 8
#define FontWidth 6
#define MatrixRows (DisplayHeight / FontHeight)
#define MatrixCols (DisplayWidth / FontWidth)
struct CharacterMatrix {
uint8_t display[MatrixRows][MatrixCols];
uint8_t *cursor;
bool dirty;
};
struct CharacterMatrix display;
bool iota_gfx_init(void);
void iota_gfx_task(void);
bool iota_gfx_off(void);
bool iota_gfx_on(void);
void iota_gfx_flush(void);
void iota_gfx_write_char(uint8_t c);
void iota_gfx_write(const char *data);
void iota_gfx_write_P(const char *data);
void iota_gfx_clear_screen(void);
void iota_gfx_task_user(void);
void matrix_clear(struct CharacterMatrix *matrix);
void matrix_write_char_inner(struct CharacterMatrix *matrix, uint8_t c);
void matrix_write_char(struct CharacterMatrix *matrix, uint8_t c);
void matrix_write(struct CharacterMatrix *matrix, const char *data);
void matrix_write_P(struct CharacterMatrix *matrix, const char *data);
void matrix_render(struct CharacterMatrix *matrix);
#endif

2
quantum/light_ws2812.c → drivers/avr/ws2812.c Executable file → Normal file
View File

@ -21,7 +21,7 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "light_ws2812.h"
#include "ws2812.h"
#include <avr/interrupt.h>
#include <avr/io.h>
#include <util/delay.h>

0
quantum/light_ws2812.h → drivers/avr/ws2812.h Executable file → Normal file
View File

View File

@ -22,9 +22,6 @@ static const I2CConfig i2ccfg = {
400000 // clock speed (Hz); 400kHz max for IS31
};
#define GDISP_SCREEN_WIDTH 7
#define GDISP_SCREEN_HEIGHT 7
static const uint8_t led_mask[] = {
0xFF, 0x00, /* C1-1 -> C1-16 */
0xFF, 0x00, /* C2-1 -> C2-16 */

View File

@ -0,0 +1,3 @@
GFXINC += drivers/ugfx/gdisp/is31fl3731c
GFXSRC += drivers/ugfx/gdisp/is31fl3731c/gdisp_is31fl3731c.c
GDISP_DRIVER_LIST += GDISPVMT_IS31FL3731C_QMK

View File

@ -24,13 +24,13 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
/* Driver hardware support. */
/*===========================================================================*/
#define GDISP_HARDWARE_FLUSH TRUE // This controller requires flushing
#define GDISP_HARDWARE_DRAWPIXEL TRUE
#define GDISP_HARDWARE_PIXELREAD TRUE
#define GDISP_HARDWARE_CONTROL TRUE
#define GDISP_HARDWARE_FLUSH TRUE // This controller requires flushing
#define GDISP_HARDWARE_DRAWPIXEL TRUE
#define GDISP_HARDWARE_PIXELREAD TRUE
#define GDISP_HARDWARE_CONTROL TRUE
#define GDISP_LLD_PIXELFORMAT GDISP_PIXELFORMAT_GRAY256
#define GDISP_LLD_PIXELFORMAT GDISP_PIXELFORMAT_GRAY256
#endif /* GFX_USE_GDISP */
#endif /* GFX_USE_GDISP */
#endif /* _GDISP_LLD_CONFIG_H */
#endif /* _GDISP_LLD_CONFIG_H */

View File

@ -83,7 +83,7 @@ static GFXINLINE void init_board(GDisplay *g) {
}
static GFXINLINE void post_init_board(GDisplay *g) {
(void) g;
(void) g;
}
static GFXINLINE void setpin_reset(GDisplay *g, bool_t state) {
@ -106,8 +106,8 @@ static GFXINLINE void enter_cmd_mode(GDisplay *g) {
static GFXINLINE void write_data(GDisplay *g, uint8_t* data, uint16_t length) {
(void) g;
spiSend(&SPID1, length, data);
(void) g;
spiSend(&SPID1, length, data);
}
#endif /* _GDISP_LLD_BOARD_H */

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