Compare commits

..
171 Commits
Author SHA1 Message Date
Joshua Diamond 9c1097e768 Fix for One Shot Layer not being cleaned up after some actions (#8832) 2020-06-18 08:07:48 +01:00
Jason LaquaandKonstantin Đorđević f7eb030e91 Standardize how unicode is processed (fixes #8768) (#8770)
Co-authored-by: Konstantin Đorđević <[email protected]>
2020-06-18 08:07:34 +01:00
Yasha Mostofi aae1814319 [Keyboard] Add Via support for Let's Split v2 (#9448)
* initial let's split with rgb

* Revert default

* Add Via keymap

* Remove my keymap

* Remove trailing slashes
2020-06-18 00:06:11 -07:00
78fdd40622 [Keymap] Dcompact for iris (#9406)
Co-authored-by: Dan Herrera <[email protected]>
Co-authored-by: Ryan <[email protected]>
2020-06-17 22:20:45 -07:00
Pierre Chevalier 43b6f031b1 [Keymap] Add pierrec83's Kyria keymap (#9401) 2020-06-17 22:18:16 -07:00
3e27ceee42 [Keyboard] Nebula12 keyboard (#9397)
Co-authored-by: Ryan <[email protected]>
Co-authored-by: Drashna Jaelre <[email protected]>
2020-06-17 22:16:26 -07:00
unicorn855andDrashna Jaelre 67f374029d [Keyboard] added VIA support for HotDox (#9377)
* added VIA support for HotDox

* Update keyboards/hotdox/keymaps/via/keymap.c

Thank you drashna :)

Co-authored-by: Drashna Jaelre <[email protected]>

Co-authored-by: Drashna Jaelre <[email protected]>
2020-06-17 21:52:33 -07:00
GregorioandRyan 30fd69886d [Keyboard] Add Mixi (#9364)
* [Keyboard] Add Mixi

Co-authored-by: Ryan <[email protected]>

Co-authored-by: Ryan <[email protected]>
2020-06-17 21:39:16 -07:00
Maarten DekkersandMaarten Dekkers ed528403fd [Keyboard] Add Eon87 (#9337)
Co-authored-by: Maarten Dekkers <[email protected]>
2020-06-17 21:30:34 -07:00
Ryan faae375ccd Fix error_log complaint about Preonic layouts (#9443) 2020-06-17 21:23:09 -07:00
James Young b0fd064491 Fix Kudox Columner Configurator key ordering (#9427) 2020-06-17 20:47:52 -07:00
James Young abf466e57d Add Configurator layout support for westfoxtrot/prophet (#9428) 2020-06-17 20:47:25 -07:00
157319fbd0 [Keyboard] Jian keyboard (#8914)
Co-authored-by: Joel Challis <[email protected]>
Co-authored-by: Drashna Jaelre <[email protected]>
Co-authored-by: Ryan <[email protected]>
Co-authored-by: Nick Brassel <[email protected]>
2020-06-17 19:17:30 -07:00
Dan 39ff121d73 Implement game mode layer for dcompact on planck (#9402) 2020-06-17 18:53:36 -07:00
Hybridandgrousselle 8018f4db2d [Keymap] new keymap for XD75 (#8675)
Co-authored-by: grousselle <[email protected]>
2020-06-17 18:32:02 -07:00
Ryan 1a159a38ed Clean up Tap Dance docs (#9372)
* Clean up Tap Dance docs

* Add heading IDs for translation
2020-06-17 17:10:35 -07:00
Erovia a0bf235644 CLI: Add ATmega328 and ATtiny85 to supported CPUs (#9371)
* CLI: Add ATmega328 to supported CPUs

Support for ATmega328 was added in #9043.

* Update lib/python/qmk/constants.py
2020-06-17 15:45:53 -07:00
Ryan f420741f9b Fix error_log complaint about clueboard/66_hotswap/gen1 layout macro (#9400)
* Fix error_log complaint about clueboard/66_hotswap/gen1 layout macro

* Remove gen1 info.json in favour of higher level file

* Split into revision-specific info.json
2020-06-17 00:30:54 -07:00
0b7b74f56a Nebula65 (#9368)
* Initial nebula65 commit

* Use PWM driver

* Polishing

* Remove random rgblight settings

* Spelling fix

* Update keyboards/nebula65/keymaps/default/readme.md

Co-authored-by: Ryan <[email protected]>

* Update keyboards/nebula65/keymaps/via/readme.md

Co-authored-by: Ryan <[email protected]>

* Update keyboards/nebula65/readme.md

Co-authored-by: Ryan <[email protected]>

* Update keyboards/nebula65/readme.md

Co-authored-by: Ryan <[email protected]>

* Clean includes in .h file

* Update keyboards/nebula65/readme.md

Co-authored-by: Drashna Jaelre <[email protected]>

* Further cleanup

Co-authored-by: Ryan <[email protected]>
Co-authored-by: Drashna Jaelre <[email protected]>
2020-06-16 14:02:01 -07:00
80b2b710da added 4x12 (#9411)
Co-authored-by: Ryan <[email protected]>
Co-authored-by: Drashna Jaelre <[email protected]>
2020-06-16 20:08:30 +01:00
MURAMATSU Atshshi 3814dacf27 [Keymap] Add froggy keymap with 106/109 (JP) settings for helix keyboard (#8967)
* initial commit for froggy 106 key mode

* add mode indicator on OLED

* use #pragma once instead of include guard

* remove unusable codes

* remove audio codes, because helix rev.2 has no audio feature

* use set_single_persistent_default_layer

* remove eeprom update check
2020-06-15 21:46:12 -07:00
csc027 7576f6162e [Keymap] csc027/keymap-updates (#9420) 2020-06-15 03:48:21 -07:00
Thomas Lim e8a02afc8c Add VIA support to keebio/nyquist (#9399) 2020-06-15 20:45:56 +10:00
Drashna Jaelre 357a888d80 [Keymap] Drashna's Keymap Update - Display Edition (#9282)
OLED Display fixes
Add support for RGBLIGHT Layers
Add gaming layer to corn and kyria
RGBLight Startup Animation fixes and improvements (uses matrix_scan now!)
Pimoroni Trackball support added (IT'S RGB!!!)
Fix issues due to code changes
2020-06-15 03:41:28 -07:00
William LindvallandRyan 7f5656996c [Keymap] Add "shwilliam" Preonic keymap (#9409)
Co-authored-by: Ryan <[email protected]>
2020-06-15 03:26:58 -07:00
James Young b008a9afe6 HID Liberation Device Refactor and Configurator layout support (#9394) 2020-06-15 03:11:19 -07:00
James Young d8e3294aea [Keyboard] Fix Configurator layout data for handwired/1800fl (#9393) 2020-06-15 03:10:15 -07:00
James Young a8d073368f [Keyboard] Fix Configurator layout data for acheron/elongate (#9392) 2020-06-15 03:09:48 -07:00
Ryan 44d93285d1 Change ?= to = in keyboard rules.mk (#9390) 2020-06-15 03:06:10 -07:00
Reed 8e0af2f5ba [Docs] Fix link to mod_tap.md in the one_shot_keys.md file (#9380) 2020-06-15 02:55:00 -07:00
Josh Johnson da76734fe0 [Keyboard] Hub16 keymap bugfix (#9345) 2020-06-15 02:17:30 -07:00
c029c5b187 [Keyboard] Add Eon75 (#9333)
Co-authored-by: Drashna Jaelre <[email protected]>
Co-authored-by: Maarten Dekkers <[email protected]>
2020-06-15 02:09:24 -07:00
jems-lee 294cfd8d33 Delete trailing period in documentation (#9416) 2020-06-15 02:49:36 +10:00
George Mao 622e94c6cd [Keyboard] Add S7 Elephant Rev2 Support (#9398)
* Add S7 Elephant Rev2 Support

* Apply suggestions from code review

I tested the changes on my board as well, thanks for the suggestions!

* Added a default folder in the makefile so that this would no longer be a breaking change
2020-06-13 23:45:47 -07:00
cole smith ba7f52aaeb Boardsource 3x4 info json fix (#9266)
* added bordsource 3x4 macro pad

* added bordsource 3x4 macro pad

* Update keyboards/boardsource/3x4/3x4.h

* Update keyboards/boardsource/3x4/3x4.c

* Update keyboards/boardsource/3x4/config.h

* Update keyboards/boardsource/3x4/config.h

* Update keyboards/boardsource/3x4/config.h

* Update keyboards/boardsource/3x4/config.h

* added link to readme

* Update keyboards/boardsource/3x4/keymaps/default/keymap.c

* Apply suggestions from code review

* changed the layout to refelect the keyboard

* Update keyboards/boardsource/3x4/info.json

Oh your right my bad. In the future is there an easier way for me to test the info.json and the confiscator before doing my pr?

* Apply suggestions from code review

* got 3x4 building again

* Apply suggestions from code review

* applied requested change on readme

* Update keyboards/boardsource/3x4/readme.md

* Apply suggestions from code review
2020-06-13 12:08:54 -07:00
Sid Carter 307013a2f8 [Keymap] Personal keymaps for Prime_E, Corne, Space65 and updates (#9234)
* initial draft maps

* updates to the keymap to enable LED

* does one still have to do these shenanigans?

* update keymap with lights

* update OLED stuff

* update corne config

* update singav3 pcb config

* update ilpse config and map

* update prime keymap as well

* update the keymap for prime_e

* update tapping term and keymap

* switch numbers to the raise layer

* move nav to lower

* add mousekeys as well

* some fixes

* update keymap

* add my layout for space65

* update map

* update keymap

* add grave key

* update  config for my keymap

* update keymap

* switch to newer mechanisms

* grave on capslock

* cleanup

* udpate config

* update keymap

* Update keyboards/gray_studio/space65/keymaps/madhatter/rules.mk

* Update keyboards/gray_studio/space65/keymaps/madhatter/keymap.c

* Update keyboards/crkbd/keymaps/madhatter/rules.mk

* Update keyboards/crkbd/keymaps/madhatter/rules.mk

* Update keyboards/gray_studio/space65/keymaps/madhatter/keymap.c

* Update keyboards/crkbd/keymaps/madhatter/keymap.c

* Update keyboards/primekb/prime_e/keymaps/madhatter/config.h

* Update keyboards/gray_studio/space65/keymaps/madhatter/config.h

* Update keyboards/crkbd/keymaps/madhatter/keymap.c

* Update keyboards/wilba_tech/wt75_b/keymaps/madhatter/config.h

* Update keyboards/crkbd/keymaps/madhatter/keymap.c

* Update keyboards/crkbd/keymaps/madhatter/keymap.c

* Update keyboards/gray_studio/space65/keymaps/madhatter/config.h

* Update keyboards/primekb/prime_e/keymaps/madhatter/config.h

* Update keyboards/wilba_tech/wt75_b/keymaps/madhatter/config.h

* Update keyboards/crkbd/keymaps/madhatter/keymap.c

* Update keyboards/crkbd/keymaps/madhatter/keymap.c

* Update keyboards/primekb/prime_e/keymaps/madhatter/keymap.c

* Update keyboards/crkbd/keymaps/madhatter/readme.md

* remove file I don't use
2020-06-13 12:03:11 -07:00
QMK Bot f68abbf6c8 format code according to conventions [skip ci] 2020-06-13 18:51:08 +00:00
qunguyentk 897c4cd175 [Keyboard] Add Batpad 2x4 PCB (#9295)
* Add files via upload

* Update config.h

* Update config.h

* Update keyboards/Yncognito/batpad/batpad.c

* Update batpad.c

* Update keyboards/Yncognito/batpad/keymaps/default/keymap.c

* Update keyboards/Yncognito/batpad/batpad.h

* Update keyboards/Yncognito/batpad/keymaps/default/keymap.c

* Update keyboards/Yncognito/batpad/keymaps/default/keymap.c

* Update keyboards/Yncognito/batpad/keymaps/via/keymap.c

* Update keyboards/Yncognito/batpad/keymaps/via/keymap.c

* Update keyboards/Yncognito/batpad/keymaps/via/keymap.c

* Update keyboards/Yncognito/batpad/batpad.c

* Rename keyboards/Yncognito/batpad/rules.mk to keyboards/yncognito/batpad/rules.mk

* Rename keyboards/Yncognito/batpad/readme.md to keyboards/yncognito/batpad/readme.md

* Rename keyboards/Yncognito/batpad/info.json to keyboards/yncognito/batpad/info.json

* Rename keyboards/Yncognito/batpad/config.h to keyboards/yncognito/batpad/config.h

* Rename keyboards/Yncognito/batpad/batpad.h to keyboards/yncognito/batpad/batpad.h

* Rename keyboards/Yncognito/batpad/batpad.c to keyboards/yncognito/batpad/batpad.c

* Rename keyboards/Yncognito/batpad/keymaps/default/readme.md to keyboards/yncognito/batpad/keymaps/default/readme.md

* Rename keyboards/Yncognito/batpad/keymaps/default/keymap.c to keyboards/yncognito/batpad/keymaps/default/keymap.c

* Rename keyboards/Yncognito/batpad/keymaps/default/config.h to keyboards/yncognito/batpad/keymaps/default/config.h

* Rename keyboards/Yncognito/batpad/keymaps/via/rules.mk to keyboards/yncognito/batpad/keymaps/via/rules.mk

* Rename keyboards/Yncognito/batpad/keymaps/via/keymap.c to keyboards/yncognito/batpad/keymaps/via/keymap.c

* Rename keyboards/Yncognito/batpad/keymaps/via/config.h to keyboards/yncognito/batpad/keymaps/via/config.h

* Update keyboards/yncognito/batpad/readme.md

* Update keyboards/yncognito/batpad/readme.md

* Update keyboards/yncognito/batpad/rules.mk

* Delete config.h

* Delete config.h

* Update readme.md

* Update keyboards/yncognito/batpad/batpad.c

* Update keyboards/yncognito/batpad/readme.md

* Update keyboards/yncognito/batpad/keymaps/via/keymap.c

* Update keyboards/yncognito/batpad/info.json

* Update keyboards/yncognito/batpad/batpad.h
2020-06-13 11:48:48 -07:00
elmo-space 1f2807c2de Add ANSI and ISO layout for KBD67mkII soldered PCB (#9340)
* add ansi and iso layouts

* fix iso map mistake

* fix mistake again...

* Update keyboards/kbdfans/kbd67/mkii_soldered/keymaps/iso/keymap.c

* rename layout macros to the blocker variants and add ansi_split_bs

* Apply suggestions from code review
2020-06-13 11:45:03 -07:00
mechlovin b160913309 [Keyboard] Add new PCB Infinity87 (#9287)
* Add new PCB Infinity87

* Update keymap.c

* Update readme.md

* Update rules.mk

* update

* Update info.json
2020-06-13 11:43:04 -07:00
Maarten Dekkers 867fded980 [Keyboard] Add OmronTKL (#9346)
* Add OmronTKL

* Fix column pins
2020-06-13 11:41:53 -07:00
Callum Oakley d1730ec760 [keymap] upstreaming a minor keymap update (#9366) 2020-06-13 21:11:28 +10:00
Gautham Yerroju 4057d44989 [Keymap] Add Kyria keymap (#9224)
* Add Kyria keymap

* clean split hand detection code

* rename "joystick" to "thumbstick"

* thumbstick overhaul

* removed angle correction, seems buggy

* save some memory

* Remove deprecated config option

* Use the correct types for getting host led states

* Fix include path

* Made .h files for encoder and oled code

* Increase speed cap on thumbstick
2020-06-13 01:24:13 -07:00
Gautham Yerroju 2bfcb6bfc5 [Keymap] Add custom corne keymap (#9283)
* Add custom corne keymap

* Clean up rules.mk

* Clean up base layer on keymap.c

* Clean up lower layer on keymap.c

* Clean up raise layer on keymap.c

* Clean up adjust layer in keymap.c
2020-06-13 01:18:33 -07:00
mcarni 1f42071238 dz60 iso split - cleaned up the readme and replaced normal key with numpad key on numpad layer (#9339)
* README cleanup

* replaced "normal" numbers with "keypad" numbers:
KC_P4 replaced by KC_KP_P4

* replaced "normal" keys on Numpad Layer with the "KeyPad" keys
KC_1 replaced by KC_P1 etc.
2020-06-13 00:29:22 -07:00
MechMerlin 400423d10b VIA Support: Noxary 260 (#9349)
* add VIA support to noxary 260

* change the layout macro to be 60_ansi as thats going to be the base VIA layout

* update readme
2020-06-13 00:16:07 -07:00
Andrew Kannan 54ef02dead Fix project alice indicators (#9342) 2020-06-13 00:06:38 -07:00
umi 044b4aaf01 [Docs] Japanese translation of docs/feature_split_keyboard.md (#9031)
* add feature_split_keyboard.md translation

* add header for git

* update based on comment

* update based on comment
2020-06-12 23:50:19 -07:00
Catriel MüllerandRyan ccb4b81b3f Fix my personal keymap // Custom keymap for Kbdfans/kbd67/rev2 with improvements on Accessibility (#9207)
Co-authored-by: Ryan <[email protected]>
2020-06-11 22:39:56 +10:00
Adrian e269977387 Murcielago: improve default keymap (#9363)
* Squashed new default keymap for murcielago
2020-06-11 04:45:53 -07:00
Sergey Vlasov 0cb4da2c74 Really fix Ubuntu/Debian setup when $PATH contains spaces (#9370)
PR #9307 fixed the immediately visible problem (the command that was
added to $HOME/.bashrc was incorrect because of missing quotes around
paths with spaces).  However, the modified command is still wrong - it
captures the value of $PATH at the setup time, and the resulting command
written out to $HOME/.bashrc will overwrite $PATH with that captured
value, ignoring any changes in the environment.  This may be especially
important for WSL, where the initial value of $PATH in Linux includes
everything which has been added to %PATH% on the Windows side; after
adding that command to $HOME/.bashrc the WSL environment will no longer
pick up any changes made by newly installed Windows software.

Instead of that, use single quotes around the command, so that the
environment variables are not expanded at the setup time, and the
command that is added to $HOME/.bashrc becomes exactly this:

    PATH="$HOME/.local/bin:$PATH"

This command will use the $HOME and $PATH environment variable values at
the time the command is executed, not at the time the QMK setup is
performed, so any further updates to $PATH are taken into account.
Double quotes also ensure that the command is safe even if the values of
those environment variables contain spaces.
2020-06-11 12:26:10 +01:00
James Young 9b0c734733 Fix Configurator layout data for clueboard/2x1800/2019 (#9373) 2020-06-11 12:07:15 +01:00
George Mao fffee6ade1 Fixing Iron165 VIA Keymap (#9298)
* Fixing via issues

* Fixing whitespace issues on the keymap

* Fixed the default via layer 1 keymap, was a little weird before

* Removing redundant declarations in via/rules.mk
2020-06-11 00:12:53 +01:00
neon4272andRyan 97ddc7ea18 Fix Ubuntu/Debian setup when $PATH contains spaces (#9307)
* Change `echo` to `export`

* Add `export` as a note under the `echo` command

* Remove note from last commit

Co-authored-by: Ryan <[email protected]>

* Update docs/newbs_getting_started.md

Co-authored-by: Ryan <[email protected]>

* Update docs/newbs_getting_started.md

Add 1 line of whitespace under note

Co-authored-by: Ryan <[email protected]>

Co-authored-by: Ryan <[email protected]>
2020-06-10 23:46:13 +01:00
3afd2d81b8 Add documentation for selecting an Arm MCU (#9046)
* Initial doco write-up.

* Update docs/platformdev_selecting_arm_mcu.md

Co-authored-by: James Young <[email protected]>

* Apply suggestions from code review

Co-authored-by: Ryan <[email protected]>

Co-authored-by: James Young <[email protected]>
Co-authored-by: Ryan <[email protected]>
2020-06-10 23:32:58 +01:00
precondition 2543bad250 [Docs] Fixed the hyperlink to /users/_example/. (#9326) 2020-06-10 15:27:25 -07:00
a056d94561 [keyboard] Project Keyboard Signature 87 (#9062)
* preliminary check in, basically a copy from 159's github with a few additions to get it to compile

* update readme

* fixup the LAYOUT macro labels to be more reasonable

* add tkl_ansi LAYOUT macro for community layout support

* clean up rules.mk, add community layout suport, and add in bootloader

* add a tsangan layout macro

* spruce up readme

* add VIA keymap

* add qmk configurator support

* Update keyboards/projectkb/signature87/rules.mk

Co-authored-by: Joel Challis <[email protected]>

* Update keyboards/projectkb/signature87/rules.mk

Co-authored-by: Joel Challis <[email protected]>

* Update keyboards/projectkb/signature87/rules.mk

Co-authored-by: Joel Challis <[email protected]>

* remove unneeded file

* Update keyboards/projectkb/signature87/config.h

Co-authored-by: Joel Challis <[email protected]>

* Update keyboards/projectkb/signature87/rules.mk

Co-authored-by: Ryan <[email protected]>

* Update keyboards/projectkb/signature87/config.h

Co-authored-by: Joel Challis <[email protected]>
Co-authored-by: Ryan <[email protected]>
2020-06-10 23:26:21 +01:00
Drashna Jaelre 573d1fbb92 Include pointing_device_send in docs (#9185) 2020-06-10 23:18:53 +01:00
Tsan-Kuang LeeandTsan-Kuang Lee 437446ba8f Fix one shot swaphands compiler error when NO_ACTION_ONESHOT is defined (#9296)
* init

* add RETRO_TAP; tap anyway after TAP_TERM, if no interruption

* RETRO_TAP works for other types of taps

* revert to upstream/master

* explain this fork in readme

* use one readme.md file instaed

* fix the error if NO_ACTION_ONESHOT is defined

* restore readme.md to upstream master

Co-authored-by: Tsan-Kuang Lee <[email protected]>
2020-06-10 22:40:17 +01:00
8640b43214 [Keymap] WPM-responsive OLED animation in personal keymap (#9264)
Using the wpm feature, I create a responsive OLED animation that changes based on how fast the user types. As written there are three phases (It's bongo cat!) but can easily be reconfigured and replaced with other images.

Multiple byte arrays consume considerable space so choose your usage wisely. When customized, the smaller the byte array used, the better, due to space limitations on most microcontrollers.

I made this with no prior knowledge of C, so I'm looking forward to any and all suggested improvements.

Credit is owed to obosob for laying the foundation for this little script as well to /u/pixelbenny for graciously providing the bongocat artwork I adapted for the animation.

The config.h includes a tweak to the Kyria's LED mapping, so that the order now reflects their physical positions, making animations smoother.

Co-authored-by: Ryan <[email protected]>
Co-authored-by: Drashna Jaelre <[email protected]>
Co-authored-by: Simon Schuster <[email protected]>
Co-authored-by: James Incandenza <[email protected]>
2020-06-10 14:39:07 -07:00
yfukuandRyan 09fc6cab34 Add bat43 rev2 (#9319)
* add rev2

* Update keyboards/bat43/rev1/rules.mk

Co-authored-by: Ryan <[email protected]>

* Update keyboards/bat43/rev2/rules.mk

Co-authored-by: Ryan <[email protected]>

Co-authored-by: Ryan <[email protected]>
2020-06-10 22:38:11 +01:00
7e8dc2e570 [Keymap] Add dual layer keymap for xd002 macropad (#9222)
Co-authored-by: Joel Challis <[email protected]>
Co-authored-by: Drashna Jaelre <[email protected]>
2020-06-10 14:33:26 -07:00
263536586d [Keyboard] Wazowski 23-19 PCB Support (#9198)
Co-authored-by: Joel Challis <[email protected]>
Co-authored-by: Ryan <[email protected]>
Co-authored-by: Chris Figueroa <[email protected]>
2020-06-10 14:32:03 -07:00
itsnoteasyandRyan 7aa4cc9603 adds support for the atmega328 (#9043)
Co-authored-by: Ryan <[email protected]>
2020-06-10 22:23:11 +01:00
Chandler e26bc21d14 fix rgb mode selection and lighting increments for the 1894 (#9336) 2020-06-10 21:32:19 +01:00
Danny 5c2b46dc47 Add Sinc keyboard (#8986)
* Add Sinc (WIP)

* Rename layouts, add keymaps

* Set EEPROM VIA layout value

* Update QMK Configurator json

* Update VIA layout value

* Add default folder

* Add PR suggestions

* Fix keyboard name
2020-06-10 20:12:02 +01:00
fluffactually 713d34cda4 Add new iris keymap 'fluffactually' (#9325)
* Add new iris keymap 'fluffactually'

* Keymap suggested changes - layer_state_t
2020-06-10 18:45:22 +01:00
Sergey Vlasov cce301ae83 kbdfans/kbd67/rev2: Fix ISO layout macro (#9329)
A user in Discord reported that the right bracket and ISO hash keys on
KBD67 rev2 using LAYOUT_65_iso were swapped.  When comparing
LAYOUT_65_iso with LAYOUT_65_ansi, the problem with a wrong assignment
of the right bracket key is obvious — that key is K1D in the ANSI layout
macro, but the ISO layout macro had K1E there, and K1D at the position
of the ISO hash key.

Fix the LAYOUT_65_iso macro by swapping those arguments (and also align
the K1D argument for the right bracket key properly).
2020-06-10 18:43:09 +01:00
James Young 08e08b660c Add VIA support to KC60 (#9351)
* Add VIA support to KC60

* enable Bootmagic Lite
2020-06-10 17:34:18 +01:00
AdrianandJoel Challis cff3c3bf28 Fixed slave-side keyboard half unresponsiveness (#9360)
* Fixed slave-side keyboard half unresponsiveness
due to how LUFA handles USB_Disable()

* changes to formatting

Co-authored-by: Joel Challis <[email protected]>

Co-authored-by: Joel Challis <[email protected]>
2020-06-10 17:25:45 +01:00
umi b7cb4111ea [Docs] Japanese translation of docs/feature_wpm.md (#9254)
* add feature_wpm.md translation

* update based on comment

* update based on comment

* update based on comment
2020-06-10 21:04:39 +09:00
Danny 184c362324 Add BDN9 rev2 (#9017) 2020-06-09 22:32:46 -04:00
James Young 1d1c0503b6 Gami Studio Lex60: Configurator Layout support (#7726)
* Gami Studio Lex60: Configurator Layout support

* correct key sizes on bottom row per lukelex

* add LAYOUT_60_ansi

To test, run `make gami_studio/lex60:default_60_ansi` and flash.

* add 60_ansi keymap

To test, run `make gami_studio/lex60:60_ansi` and flash.

* remove data for 60_ansi layout
2020-06-09 19:22:33 -07:00
01e74b0ac6 Sidekick/qmk firmware (#9229)
* 5/28/20

* Create readme 2.md

* Revert inadvertently changed files

* Update keyboards/clawsome/sidekick/config.h

Co-authored-by: Nick Brassel <[email protected]>

* Update keyboards/clawsome/sidekick/rules.mk

Co-authored-by: Nick Brassel <[email protected]>

* Update keyboards/clawsome/sidekick/config.h

Co-authored-by: Ryan <[email protected]>

* Update keyboards/clawsome/sidekick/info.json

Co-authored-by: Ryan <[email protected]>

* Update keyboards/clawsome/sidekick/info.json

Co-authored-by: Ryan <[email protected]>

* Update keyboards/clawsome/sidekick/rules.mk

Co-authored-by: Ryan <[email protected]>

* Update keyboards/clawsome/sidekick/rules.mk

Co-authored-by: Ryan <[email protected]>

* Update keyboards/clawsome/sidekick/rules.mk

Co-authored-by: Nick Brassel <[email protected]>

Co-authored-by: Nick Brassel <[email protected]>
Co-authored-by: Ryan <[email protected]>
2020-06-10 11:04:02 +10:00
Rolf Don c0cb2ab1c1 Adding extra supported Boardwalk layout (#9341)
* Added ortho layout with 2x2u spacebars
2020-06-09 17:22:28 -07:00
clanghansandRyan 7281e86e98 XD75 clanghans layout (#9313)
Co-authored-by: Ryan <[email protected]>
2020-06-10 05:11:01 +10:00
Maarten Dekkers 86812f22e4 [Keyboard] Add nt660 PCB (#9042)
* Upload nt660 files

* Apply suggestions from code review

* Apply suggestions from code review
2020-06-09 12:10:00 -07:00
Cable Car Designs b83fb9eb71 [Keyboard] add prophet support (#9275)
* add prophet support

* Update keyboards/westfoxtrot/prophet/config.h

* Update keyboards/westfoxtrot/prophet/rules.mk

* Update keyboards/westfoxtrot/prophet/config.h

* Update keyboards/westfoxtrot/prophet/prophet.c

* Update keyboards/westfoxtrot/prophet/readme.md

* Update keyboards/westfoxtrot/prophet/readme.md

* Update keyboards/westfoxtrot/prophet/keymaps/default/keymap.c

* Update keyboards/westfoxtrot/prophet/keymaps/default/keymap.c

* Update keyboards/westfoxtrot/prophet/keymaps/via/keymap.c

* Update keyboards/westfoxtrot/prophet/keymaps/via/keymap.c

* Update keyboards/westfoxtrot/prophet/keymaps/via/keymap.c

* Update keyboards/westfoxtrot/prophet/keymaps/via/keymap.c

* remove bootloader_defs
fixed via keymap

* Update keyboards/westfoxtrot/prophet/prophet.h

* Update keyboards/westfoxtrot/prophet/keymaps/default/keymap.c

* Update keyboards/westfoxtrot/prophet/keymaps/default/keymap.c

* Update keyboards/westfoxtrot/prophet/keymaps/via/keymap.c

* Update keyboards/westfoxtrot/prophet/keymaps/via/keymap.c

* Update keyboards/westfoxtrot/prophet/keymaps/via/keymap.c

* changed vendor id

* changed prophet.c
2020-06-09 11:37:41 -07:00
Ryan 3736db6081 Add OS compatibility matrix for basic keycodes (#8557) 2020-06-09 12:28:36 +01:00
Takeshi ISHII b19187c62c [Update] Japanese translation of newbs_learn_more_resources.md (#9288)
* Updated the Japanese translation of newbs_learn_more_resources.md

Updated the Japanese translation of newbs_learn_more_resources.md to 0.9.0.

* update docs/ja/newbs_learn_more_resources.md

* update ja/newbs_learn_more_resources.md
2020-06-09 00:04:14 +09:00
4a7725b3ee [Update] Japanese translation of docs/newbs_testing_debugging.md. (#9286)
* Updated the Japanese translation of newbs_testing_debugging.md.

Updated the Japanese translation of newbs_testing_debugging.md to 0.9.0.

* Update docs/ja/newbs_testing_debugging.md

Co-authored-by: s-show <[email protected]>

* Update docs/ja/newbs_testing_debugging.md

Co-authored-by: shela <[email protected]>

* Update docs/ja/newbs_testing_debugging.md

Co-authored-by: shela <[email protected]>

Co-authored-by: s-show <[email protected]>
Co-authored-by: shela <[email protected]>
2020-06-09 00:02:32 +09:00
Maarten DekkersandMaarten Dekkers 93a1c5ca16 [Keyboard] Add VIA support for Eon40 (#9330)
Co-authored-by: Maarten Dekkers <[email protected]>
2020-06-07 23:57:49 -07:00
Ryan 407d6a2b67 [Keyboard] Fix error_log complaint about handwired/onekey layout macro (#9263) 2020-06-07 22:49:18 -07:00
umi d7523c1260 [Docs] Japanese translation of docs/feature_ps2_mouse.md (#9030)
* add feature_ps2_mouse.md translation

* update based on comment

* update based on comment

* update based on comment

* update based on comment
2020-06-08 02:26:30 +09:00
umi a7f093b40c [Docs] Japanese translation of docs/feature_terminal.md (#9033)
* add feature_terminal.md translation

* add header for git

* update based on comment
2020-06-08 02:24:35 +09:00
Pete Johanson b9a38487f3 [Docs] Update udev rules to use TAG+="uaccess". (#8750) 2020-06-07 09:06:55 +01:00
umi 9f400794c0 [Docs] Japanese translation of docs/feature_swap_hands.md (#9032)
* add feature_swap_hands.md translation

* update based on comment

* back to original translation
2020-06-07 03:08:24 +09:00
FrothyandRyan 12efb28e13 [Keyboard] Add Via config for Clueboard 66 (#9010)
* Added Via config for Clueboard 66

* Update keyboards/clueboard/66/keymaps/via/rules.mk

Co-authored-by: Ryan <[email protected]>

* Enabled MouseKeys

This required enabling LINK_TIME_OPTIMIZATION_ENABLE

* Added 4th layer as per tzarc's recommendation on another PR

Co-authored-by: Ryan <[email protected]>
2020-06-06 08:56:59 -07:00
Takeshi ISHII 3972978c8d The TAGs of the original document has been updated to facilitate future verification. (#9285) 2020-06-05 21:49:34 +09:00
b327d20402 [Keyboard] add Juliet (#9240)
Co-authored-by: Ryan <[email protected]>
Co-authored-by: Derek <[email protected]>
2020-06-05 02:13:31 -07:00
Chandler ca451c5aa0 [Keyboard] add 1894 support to qmk (#9238) 2020-06-05 02:12:07 -07:00
Jeremy Bernhardt 7a75af8342 [Keyboard] Gboards common - TOGG()/inject.h (#9236) 2020-06-05 02:06:58 -07:00
Joshua Diamond d03bc3a9c1 Major enhancements to spidey3 keymaps and userspace (#9261)
* Add Chrome OS specific keys to 75_ansi/spidey3

* Clean up duplicative settings in rules.mk

* Refactor spidey3 userspace to use rgb layer blink

* Blink green on wakeup

* Improve _FN layer indicator

* Glyph transformation modes: wide, script, fraktur, and enclosed characters

* Add spider unicode glyph

* Fix compile error when NO_ACTION_ONESHOT

* Add a few more emoji

* Further refinement of lighting layer usage

* Fix reversed yes/no ack

* Lighting layers override RGB off

* Fix missing wide and incorrect script numbers

* Add LOL and surprise emoji

* Add missing break in switch statement

* Trim firmware size

* Use usage ID definitions in report.h

* Some minor whitespace cleanup

* Disable some unused features to reduce firmware size

* Print version on startup

* Seed rand() on first keystroke

* Add a key to immediately sleep CrOS

* Switch to Bootmagic Lite

* Trim down firmware size a little bit more

* Make RGBLIGHT_MODE_TWINKLE+4 my default

* Scan rate debug / fix version printing

Delay printing version on startup (console may not be ready)
Better scan rate reporting

* Disable locking caps, etc. to save more space

* Enable LTO

* Better seed for rand()

* Set MAX_LAYER for some performance improvement

* Another scan rate improvement

* Set manufacturer

* New startup animation

* Add GUI lock for F-keys (for CrOS)

* Add visual indication for glyph replacement and F-keys GUI lock

* Some cleanup; run cformat on spidey3 userspace

* Cycle between debug verbosity options

* Fix disable RGB Lighting after wakeup on Mac
2020-06-05 02:01:47 -07:00
MakotoKurauchi c12e429da2 [Keymap] add keymap for meishi2 (#9270)
* add keymap "led_status"

* modified readme

* Update keyboards/meishi2/keymaps/led_status/keymap.c

* I modified the code to be simple.

* Update keyboards/meishi2/keymaps/led_status/keymap.c
2020-06-05 01:49:16 -07:00
Abi Shalom 9219f9e724 Changes to abishalom Tada68 keymap (#9278)
* Changes to abishalom Tada68 keymap

* Update keyboards/tada68/keymaps/abishalom/rules.mk
2020-06-05 01:46:28 -07:00
f4ff225c00 [Keyboard] keyboards/anavi: Add ANAVI Macro Pad 8 (#9164)
ANAVI Macro Pad 8 is an open source mini mechanical keyboard with
8 keys, backlit, addressable RGB WS2812B LED strip on the back and
mini OLED display. Powered by ATmega 32U4 microcontroller and with
microUSB connector.

Co-authored-by: Drashna Jaelre <[email protected]>
Co-authored-by: Ryan <[email protected]>
Co-authored-by: James Young <[email protected]>
Co-authored-by: Joel Challis <[email protected]>
Signed-off-by: Leon Anavi <[email protected]>
2020-06-05 00:48:58 -07:00
itsnoteasy a68b0ed9a2 [Keyboard] Add ortho5by12 keyboard (#9141)
* Add files via upload

* Update keyboards/ortho5by12/rules.mk

* Add files via upload

* Add files via upload

* Update keyboards/ortho5by12/ortho5by12.h

* Update keyboards/ortho5by12/ortho5by12.h

* Add files via upload

* Add files via upload

* Update keyboards/ortho5by12/readme.md

* Update keyboards/ortho5by12/readme.md

* Update keyboards/ortho5by12/readme.md

* Update keyboards/ortho5by12/readme.md

* Update keyboards/ortho5by12/readme.md

* Update keyboards/ortho5by12/readme.md

* Update keyboards/ortho5by12/info.json

* Update keyboards/ortho5by12/ortho5by12.h

* Apply suggestions from code review

* Update rules.mk

* Update config.h

* Update config.h

* Update config.h

* Delete rules.mk

* Delete config.h

* Delete info.json

* Delete ortho5by12.c

* Delete ortho5by12.h

* Delete readme.md

* Delete keymap.c
2020-06-04 23:55:39 -07:00
Joel Challis a2dee4494d Fix mechlovin/pisces Configurator config (#9290)
* Fix mechlovin/pisces Configurator config

* Update keyboards/mechlovin/pisces/info.json
2020-06-04 17:33:35 -07:00
Josh Hinnebusch 6cfc3cd940 [Keyboard] add hineybush/h10 pcb (#9036)
* initial h10 commit

* update h10

* update files, add via keymap

* edit h10 readme

* update per PR requests

* add copyright (i think this is what fauxpark wants)

* fix comment

* remove config.h files

* update per PR requests

* Update keyboards/hineybush/h10/info.json

* Update keyboards/hineybush/h10/info.json
2020-06-04 16:56:04 -07:00
Frothy e84e9a2004 Add Via support for Percent Canoe (#9276)
* Add Via support for Percent Canoe

* Removed unnecessary flags from rules.mk

* Changes as per PR

 * Added 2 additional empty layers (for a total of 4)
 * Set a unique vendor id for all percent studio boards
 * Set a unique product id for the canoe

* Fixed formatting, removed trailing comma

* Fixed PS/PT typo for vendor id

* Removed unnecessary variables

* Removed unnecessary slashes

* Fixed missing layer name
2020-06-04 09:22:29 -07:00
Joel Challis 232b9dabbe Fix 'does not have a readme.md' warnings (#9294) 2020-06-04 02:07:37 -07:00
Joel Challis 7b2c09de59 Fix handwired/novem Configurator config (#9291) 2020-06-04 01:57:37 -07:00
Joel Challis e571f53ae9 Fix wt60_d and rama_works_u80_a Configurator config (#9292) 2020-06-04 01:45:35 -07:00
6fc4f1eddd [keyboard] Add two new The Mad Noodle Keypads (#8934)
* Adding support for two new The Mad Noodle Keypads (Revised..Again)

* Adding support for two new The Mad Noodle Keypads (Revised..Again)

* Update keyboards/themadnoodle/ncc1701kbv2/ncc1701kbv2.h

Co-Authored-By: Drashna Jaelre <[email protected]>

* Update keyboards/themadnoodle/noodlepad/noodlepad.h

Co-Authored-By: Drashna Jaelre <[email protected]>

* Update keyboards/themadnoodle/ncc1701kbv2/rules.mk

Co-Authored-By: Drashna Jaelre <[email protected]>

* Update keyboards/themadnoodle/noodlepad/rules.mk

Co-Authored-By: Drashna Jaelre <[email protected]>

* Update keyboards/themadnoodle/noodlepad/keymaps/default/keymap.c

Co-Authored-By: Drashna Jaelre <[email protected]>

* Update keyboards/themadnoodle/noodlepad/keymaps/default/keymap.c

Co-Authored-By: Drashna Jaelre <[email protected]>

* Update keyboards/themadnoodle/noodlepad/keymaps/default/keymap.c

Co-Authored-By: Drashna Jaelre <[email protected]>

* Update keyboards/themadnoodle/noodlepad/keymaps/default/keymap.c

Co-Authored-By: Drashna Jaelre <[email protected]>

* Requested Changes to all files

* Revert "Requested Changes to all files"

This reverts commit 7f6c708da8edf779664ccc80b8932cad3ad37bf3.

* Update keyboards/themadnoodle/ncc1701kbv2/info.json

Co-Authored-By: Drashna Jaelre <[email protected]>

* Update keyboards/themadnoodle/ncc1701kbv2/keymaps/default/keymap.c

Co-Authored-By: Drashna Jaelre <[email protected]>

* Update keyboards/themadnoodle/ncc1701kbv2/keymaps/default/keymap.c

Co-Authored-By: Drashna Jaelre <[email protected]>

* Update keyboards/themadnoodle/ncc1701kbv2/keymaps/default/keymap.c

Co-Authored-By: Drashna Jaelre <[email protected]>

* Update keyboards/themadnoodle/noodlepad/rules.mk

Co-authored-by: Ryan <[email protected]>

* Update keyboards/themadnoodle/ncc1701kbv2/rules.mk

Co-authored-by: Ryan <[email protected]>

* Update keyboards/themadnoodle/ncc1701kb/rules.mk

Co-authored-by: Ryan <[email protected]>

* Update keyboards/themadnoodle/ncc1701kbv2/keymaps/default/keymap.c

Co-authored-by: Drashna Jaelre <[email protected]>

* rework ncc1701kb v1 to vendor/keyboard/revision structure

* rework ncc1701kb v2 to vendor/keyboard/revision structure

* Update keyboards/themadnoodle/ncc1701kb/v2/rules.mk

Co-authored-by: James Young <[email protected]>

* Update keyboards/themadnoodle/noodlepad/config.h

Co-authored-by: James Young <[email protected]>

* Update keyboards/themadnoodle/noodlepad/info.json

Co-authored-by: James Young <[email protected]>

* Update keyboards/themadnoodle/noodlepad/noodlepad.h

Co-authored-by: James Young <[email protected]>

* Update keyboards/themadnoodle/noodlepad/rules.mk

Co-authored-by: James Young <[email protected]>

* checkedout folder and removed v1 as requested

* Update keyboards/themadnoodle/noodlepad/config.h

Co-authored-by: Joel Challis <[email protected]>

* Update keyboards/themadnoodle/ncc1701kb/v2/config.h

Co-authored-by: Joel Challis <[email protected]>

* Updated Noodle Pad Readme

Co-authored-by: Drashna Jaelre <[email protected]>
Co-authored-by: Ryan <[email protected]>
Co-authored-by: James Young <[email protected]>
Co-authored-by: Joel Challis <[email protected]>
2020-06-04 00:25:59 +01:00
be73820f7b [Keyboard] New Keyboard: Duck TC-V3 (#8265)
Co-Authored-By: Ryan <[email protected]>
Co-Authored-By: James Young <[email protected]>
Co-Authored-By: Drashna Jaelre <[email protected]>
Co-authored-by: Drashna Jaelre <[email protected]>
Co-authored-by: Joel Challis <[email protected]>
Co-authored-by: Ryan <[email protected]>
Co-authored-by: James Young <[email protected]>
2020-06-02 21:59:13 -07:00
81a2113cbd VIA Support: Waldo 60 (#9151)
* pick a sane VID

* add the VIA Keymap

* update copyright notice

* Update keyboards/waldo/keymaps/via/keymap.c

Co-authored-by: Ryan <[email protected]>

* Update keyboards/waldo/keymaps/via/keymap.c

Co-authored-by: Ryan <[email protected]>

* Update keyboards/waldo/keymaps/via/keymap.c

Co-authored-by: Ryan <[email protected]>

* Update keyboards/waldo/keymaps/via/keymap.c

Co-authored-by: Ryan <[email protected]>

* Update keyboards/waldo/keymaps/via/readme.md

Co-authored-by: James Young <[email protected]>

Co-authored-by: Ryan <[email protected]>
Co-authored-by: James Young <[email protected]>
2020-06-03 01:07:18 +01:00
Joel Challis d17572b125 Move encoder_read to common location (#9003) 2020-06-03 00:54:53 +01:00
Joel Challis 517d607fa4 [Keyboard] Add zvecr/zv48 (#9227)
* Add zv48 keyboard

* tidy up rules

* correct product name
2020-06-03 00:49:52 +01:00
Drashna Jaelre 1110fe6c6f Move dip switch init to back of the init process (#9233) 2020-06-03 00:32:02 +01:00
Dan Hertz eefc05e078 Update canoe:dhertz to use new post-init functions (#9257)
* Update to use new post-init functions

* Update readme so I don't forget reset key again
2020-06-03 06:38:56 +10:00
Eduardo Lourenço Pinto Neto f1e09dd388 Update keymap.c (#9265)
Add Insert on Fn+Del and fix TG to TO for layer switching
2020-06-03 06:33:27 +10:00
jotixandRyan 0def9ed528 jotix ortho_4x12 layout (#9209)
Co-authored-by: Ryan <[email protected]>
2020-06-02 21:51:24 +10:00
Ryan c73125eea7 Void Linux: Switch to cross-arm-none-eabi toolchain (#9228) 2020-06-02 18:53:38 +10:00
mechlovin 306d02aa93 Adelais: Fix indicator LED pinout (#9241)
* Fix indicator LED pinout

Fix indicator LED pinout, active some function
2020-06-01 17:31:14 -07:00
umi b8ddfd34ec [Docs] Japanese translation of docs/feature_mouse_keys.md (#8992)
* add feature_mouse_keys.md translation

* update based on comment

* update based on comment

* update based on comment

* update based on comment

* update based on comment
2020-06-01 17:28:41 -07:00
goranzarkovic 14eccef7bf Fixing the PRODUCT_ID to match the liminal.json on VIA repo (#9232) 2020-06-01 17:23:25 -07:00
mechlovin aab5c44c7d Infinity CE PCB: Update rules.mk (#9235)
* Update rules.mk 

Actice NKRO function
2020-06-01 17:19:56 -07:00
Joshua Diamond 563d5919b3 Fix layer mask size for RGBLIGHT_LAYER_BLINK (#9260) 2020-06-01 17:12:08 -07:00
Fredrik Salomonsson 0fee906e09 [Keymap] plattfot - Kyria layout (#9110)
* [Keymap] plattfot - Kyria layout

Keymap for programming, writing in both English and Swedish and
easy navigate a tiling window manager.

See README.md for more info

* Fix letter case on the headline for the readme

As suggested by fauxpark

* Update keyboards/kyria/keymaps/plattfot/keymap.c

Clean up double tap

As suggested by fauxpark

* Update led check for render_status

As suggested by fauxpark

* Update to use get_highest_layer for encoder_update_user

As suggested by fauxpark

* Missing an apostrophe in the header of the README.md

Last minute change.

* Removed explicit initialization for _DEFAULT

As suggested by drashna

* Use smaller image for the README.md

As suggested by noroadsleft
2020-06-01 16:35:44 -07:00
Ryan c2fd7f1b5b Fix error_log complaint about Elongate info.json (#9262) 2020-06-01 16:29:58 -07:00
Joel Challis faa3e62e70 Prime_E - Increase number of via layers (#9065)
* Prime_E - Increase number of via layers

* Fix keymap alignment
2020-06-01 14:01:45 -07:00
KOBAYASHI Daisuke 5f5a6fff8b Remove the extra comma in the macro in the community keymap (#9175) 2020-06-02 06:29:28 +10:00
f1c33423b0 Added new keyboard boardsource/3x4 (#9247)
* added bordsource 3x4 macro pad

* added bordsource 3x4 macro pad

* Update keyboards/boardsource/3x4/3x4.h

Co-authored-by: Nick Brassel <[email protected]>

* Update keyboards/boardsource/3x4/3x4.c

Co-authored-by: Nick Brassel <[email protected]>

* Update keyboards/boardsource/3x4/config.h

Co-authored-by: Nick Brassel <[email protected]>

* Update keyboards/boardsource/3x4/config.h

Co-authored-by: Nick Brassel <[email protected]>

* Update keyboards/boardsource/3x4/config.h

Co-authored-by: Nick Brassel <[email protected]>

* Update keyboards/boardsource/3x4/config.h

Co-authored-by: Nick Brassel <[email protected]>

* added link to readme

* Update keyboards/boardsource/3x4/keymaps/default/keymap.c

Co-authored-by: Nick Brassel <[email protected]>

* Apply suggestions from code review

Co-authored-by: Ryan <[email protected]>

Co-authored-by: Nick Brassel <[email protected]>
Co-authored-by: Ryan <[email protected]>
2020-06-02 06:07:49 +10:00
siano 5f8e8540fb Mac layout for XD87 (#9251)
* Mac layout for XD87

* Rename to mac_underglow

* Removed unused file

* Fixed missing KC_RGUI

* Cleanup

* Updated readme.
2020-06-01 23:24:18 +10:00
Kimat Boven 4f6f7b59cf French (Belgium) was missing (#9245) 2020-06-01 23:14:14 +10:00
Joshua Diamond e2e287ec5f Option to allow lighting layers when RGB Lighting is off (#9051) 2020-06-01 11:02:28 +02:00
Kimat Boven dfcd4f0d25 BE_J should map to KC_J (#9243) 2020-06-01 14:04:44 +10:00
Joel Challis b2271d984d Move plaid via keymap to correct location (#9255) 2020-06-01 11:53:43 +10:00
Nick Brassel 8d3fca57a3 Fix build when using IGNORE_MOD_TAP_INTERRUPT_PER_KEY. (#9258) 2020-06-01 11:53:01 +10:00
James Young fced377ac0 2020 May 30 Breaking Changes Update (#9215)
* Branch point for 2020 May 30 Breaking Change

* Migrate `ACTION_LAYER_TOGGLE` to `TG()` (#8954)

* Migrate `ACTION_MODS_ONESHOT` to `OSM()` (#8957)

* Migrate `ACTION_DEFAULT_LAYER_SET` to `DF()` (#8958)

* Migrate `ACTION_LAYER_MODS` to `LM()` (#8959)

* Migrate `ACTION_MODS_TAP_KEY` to `MT()` (#8968)

* Convert V-USB usbdrv to a submodule (#8321)

* Unify Tap Hold functions and documentation (#8348)

* Changing board names to prevent confusion (#8412)

* Move the Keyboardio Model01 to a keyboardio/ subdir (#8499)

* Move spaceman keyboards (#8830)

* Migrate miscellaneous `fn_actions` entries (#8977)

* Migrate `ACTION_MODS_KEY` to chained mod keycodes (#8979)

* Organizing my keyboards (plaid, tartan, ergoinu) (#8537)

* Refactor Lily58 to use split_common (#6260)

* Refactor zinc to use split_common (#7114)

* Add a message if bin/qmk doesn't work (#9000)

* Fix conflicting types for 'tfp_printf' (#8269)

* Fixed RGB_DISABLE_AFTER_TIMEOUT to be seconds based & small internals cleanup (#6480)

* Refactor and updates to TKC1800 code (#8472)

* Switch to qmk forks for everything (#9019)

* audio refactor: replace deprecated PLAY_NOTE_ARRAY (#8484)

* Audio enable corrections (2/3) (#8903)

* Split HHKB to ANSI and JP layouts and Add VIA support for each (#8582)

* Audio enable corrections (Part 4) (#8974)

* Fix typo from PR7114 (#9171)

* Augment future branch Changelogs (#8978)

* Revert "Branch point for 2020 May 30 Breaking Change"
2020-05-30 13:14:59 -07:00
Manna HarbourandRyan 7b8a013826 Fix crkbd slave matrix print to require debug_matrix (#9217)
* Fix crkbd slave matrix print to require debug_matrix

* Remove redundant include

Co-authored-by: Ryan <[email protected]>

Co-authored-by: Ryan <[email protected]>
2020-05-28 18:02:12 +01:00
Drashna Jaelre 5263dfd465 Keyboards/zsa updates (#9214) 2020-05-28 10:26:53 +02:00
Ryan 13206b2f87 Community layout support for KBDpad Mk.I (#9220)
* Community layout support for KBDpad Mk.I

* Matching spacing
2020-05-28 02:27:14 +01:00
onefiftynine cb9be8a9dc Fix projectkb/alice LED indicator (#9226)
Keyboard pre initialization code for LED pins.
2020-05-28 02:03:02 +01:00
a1af8542c7 RSTHD keymap for Minidox (#9178)
* Re-add liles after hard reset

* repopulate with keymap

* Update keyboards/minidox/keymaps/rsthd_combos/keymap.c

Updated how the layers are defined to reduce firmware bloat

Co-authored-by: Joel Challis <[email protected]>

* Update keyboards/minidox/keymaps/rsthd_combos/keymap.c

Removed unnecessary key codes

Co-authored-by: Joel Challis <[email protected]>

* Update keyboards/minidox/keymaps/rsthd_combos/keymap.c

Removed backslash from each line of the layers in accordance with current convention.

Co-authored-by: Ryan <[email protected]>

* Edit of readme

Co-authored-by: Joel Challis <[email protected]>
Co-authored-by: Ryan <[email protected]>
2020-05-27 13:23:57 +01:00
Zach White 1a5dc278bc Fix running qmk info without any arguments (#9218) 2020-05-27 09:43:22 +02:00
yttyxandNick Willis 10c1e1b3ab [Keymap] Update yttyx Planck keymap (#9191)
* Normalise layout and README from yttyx niu keymap.

* Correct case of README.

* Changes following review.

Co-authored-by: Nick Willis <[email protected]>
2020-05-27 02:17:16 +01:00
Ryan 00c1401d3c Documentation for keymap_extras (#9194) 2020-05-27 01:52:48 +01:00
a9b3c0a807 Adding TGR Tris/Tris CE Numpad (#9139)
* Add TGR Tris

* Update readme.md

* Update rules.mk

* Update keyboards/tgr/tris/keymaps/default/keymap.c

Co-authored-by: Joel Challis <[email protected]>

* Update keyboards/tgr/tris/keymaps/via/keymap.c

Co-authored-by: Joel Challis <[email protected]>

* Update keyboards/tgr/tris/keymaps/default/keymap.c

Co-authored-by: Drashna Jaelre <[email protected]>

* Update keyboards/tgr/tris/keymaps/via/keymap.c

Co-authored-by: Drashna Jaelre <[email protected]>

* Update keyboards/tgr/tris/tris.h

Co-authored-by: Drashna Jaelre <[email protected]>

* Update keyboards/tgr/tris/info.json

Co-authored-by: Joel Challis <[email protected]>

* update formatting

* Revert "update formatting"

This reverts commit ae2d6832673985a874f7f43d42bdb56679d851d6.

Co-authored-by: Joel Challis <[email protected]>
Co-authored-by: Drashna Jaelre <[email protected]>
2020-05-27 01:20:32 +01:00
Wilba ac447d8acb ISSI driver compile error fix (#9169) 2020-05-27 01:18:13 +01:00
Zach White a5e749d8cd Fix the path for generated keymaps (#9213) 2020-05-26 15:18:49 -07:00
Zach White 4ee623fdd5 Fix compiling json files (#9210) 2020-05-26 14:29:48 -07:00
Zach WhiteandErovia 751316c344 [CLI] Add a subcommand for getting information about a keyboard (#8666)
You can now use `qmk info` to get information about keyboards and keymaps.

Co-authored-by: Erovia <[email protected]>
2020-05-26 13:05:41 -07:00
nathanvercaemert 5d3bf8a050 [Keymap] Contributing Home-Row-Centric-Mousekey Layout (#9195)
* adding personal keymap to repository

* starting to customize documentation to keymap

* updated readme

* updated readme
2020-05-26 11:46:02 -07:00
EroviaandZach White 6501377070 CLI: fix json2c subcommand and add/fix tests (#9206)
Co-authored-by: Zach White <[email protected]>
2020-05-26 17:43:33 +02:00
Leivince John Marte af2ca13604 [Keymap] Ported ok60 to via (#9179)
* Initialize ok60/via

* Update vendorId for ok60 to K6 0x4b36

* Update keyboards/ok60/config.h
2020-05-26 03:35:06 -07:00
umi 451c472d1d [Docs] Japanese translation of docs/feature_pointing_device.md (#8993)
* add feature_pointing_device.md translation

* update based on comment

* update based on comment

* update based on comment

* update based on comment
2020-05-26 17:14:58 +09:00
yttyx bfe76053ba [Keymap] Niu keymap and README update (#9190)
* - Balance 12 layers now in their final form
- Added Plover layer
- Updated README to use layout images

* Add headings to layer images.

* - Remove redundent TO(_BA) from FC layer
- Link to new FC layer image from README

* Highlight home keys.

* Changes following review.
2020-05-25 21:24:16 -07:00
Jumail Mundekkat 9d41281a1d [Keyboard] Add Key 65 by Fox Lab (#9116)
* Add Key65 Universal PCB

* Add ISO layout to universal

* Correct universal info.json

* Add Key 65 Hotswap

* Correct typo in Key 65 Universal

* Update readmes

* Correct name

* Update keyboards/foxlab/key65/hotswap/config.h

* Apply suggestions from code review

* Invert capslock LED state

* Avoid initial capslock LED flash

* Apply suggestions from code review

* Update rules.mk

* Apply suggestions from code review
2020-05-25 21:10:48 -07:00
Yasuhiro SHIMIZU ba5e1f1bae [Keymap] update helix/rev2:yshrsmz keymap (#9047)
* update helix keymap

* use set_single_persistent_default_layer
2020-05-25 20:16:03 -07:00
Ryan e4823aadec Fix capitalisation of "GitHub" (#9184) 2020-05-25 19:43:14 -07:00
KOBAYASHI Daisuke 5c9906eb4f Add VIA support for kbd67rev1 (#9173) 2020-05-25 19:26:27 -07:00
Wilba f56d333db1 [Keyboard] Added wilba.tech WT60-XT (#9168)
* Added wilba.tech WT60-XT

* fix indent

* Update keyboards/wilba_tech/wt60_xt/readme.md

* Update keyboards/wilba_tech/wt60_xt/rules.mk

* Update keyboards/wilba_tech/wt60_xt/wt60_xt.c
2020-05-25 19:22:14 -07:00
yulei d8f76f9e6d Added missing shutdown_user() hook (#9180)
* add missing shutdown_user()

* use reset_keyboard() from quantum
2020-05-25 22:16:33 +10:00
gmadrid 6ca00c2152 [Keyboard] PDBDOWN should be PCBDOWN. (#9192) 2020-05-24 21:12:31 -07:00
Joel Challis dc6fe85b87 [Keyboard] Add zvecr/split_blackpill (#9166)
* Add split_blackpill keyboard

* Add RGB config

* tidy up rules

* fix usage of layer_state_t

* Apply suggestions from code review

* Apply suggestions from code review

* Apply suggestions from code review

* Add configurator support
2020-05-24 19:15:27 -07:00
Drashna Jaelre 883dd2df80 Fix i2c EEPROM compile issue when Console is enabled (#9186)
* Fix i2c EEPROM compile issue when Console is enabled

* Only use if both console and debugging is enabled
2020-05-24 23:02:13 +01:00
Drashna Jaelre 2ac3a51d71 Fix SPI EEPROM compile issue when Console is enabled (#9193) 2020-05-24 23:02:00 +01:00
Takeshi ISHIIandJoel Challis f66680d233 Fixed the indentation of the sample code in feature_pointing_device docs (#9177)
* Fixed the indentation of the sample code in docs/feature_pointing_device.md sample.

* Update docs/feature_pointing_device.md

Co-authored-by: Joel Challis <[email protected]>

Co-authored-by: Joel Challis <[email protected]>
2020-05-23 23:57:59 +01:00
503cf18aed ymdk/bface - RGB config and minila layout (#9127)
* Fix info about RGB LEDs on the bottom.

* Added RGB LEDs support

* Added RGB LEDs config options

* Added minila layout with RGB keys

* Create readme.md

* Update keyboards/ymdk/bface/keymaps/minila/keymap.c

Co-authored-by: Joel Challis <[email protected]>

* Update keyboards/ymdk/bface/keymaps/minila/keymap.c

Co-authored-by: Joel Challis <[email protected]>

* Update keyboards/ymdk/bface/keymaps/minila/keymap.c

Co-authored-by: Joel Challis <[email protected]>

* Update keyboards/ymdk/bface/keymaps/minila/readme.md

Co-authored-by: James Young <[email protected]>

* Update keyboards/ymdk/bface/keymaps/minila/readme.md

Co-authored-by: James Young <[email protected]>

Co-authored-by: Joel Challis <[email protected]>
Co-authored-by: James Young <[email protected]>
2020-05-23 17:49:05 +01:00
Joe Doh 38d2c8cedf [Keymap] dohmain 60_tsangan_hhkb layout (#9157)
* initial commit for tsangan_hhkb community layout

* keymap.c done

* wrote readme

* move media keys; add shortcuts

* edit to reflect changes in keymap

* update readme with imgur link
2020-05-21 19:51:36 -07:00
Ckat 53224e03d6 [Keyboard] handwired/k8split (#9133)
* New Keyboard: k8split

* Apply suggestions from code review

* move NKRO rule to keymap scope
2020-05-21 16:37:09 -07:00
Ryan 7ef2ea3d49 Improve the Makefile message a bit more (#9161) 2020-05-22 00:28:55 +01:00
MechMerlin 9e4037465a [Keyboard] Wolfmark Club WM1 (#9121)
* do the basic port for the WM1

* with much help from tzarc, get the addresses correct

* make the keymap more closely mirror what the board has

* Add QMK Configurator support

* update the readme

* get indicator leds working

* enable RGB underglow

* fix up rgb underglow

* add notes regarding existence of backlight

* Update keyboards/wolfmarkclub/wm1/readme.md

* Update keyboards/wolfmarkclub/wm1/rules.mk

* Update keyboards/wolfmarkclub/wm1/rules.mk

* Update keyboards/wolfmarkclub/wm1/rules.mk

* Update keyboards/wolfmarkclub/wm1/rules.mk

* Update keyboards/wolfmarkclub/wm1/config.h

* Update keyboards/wolfmarkclub/wm1/ld/wm1_f103.ld

* Update keyboards/wolfmarkclub/wm1/bootloader_defs.h

* Update keyboards/wolfmarkclub/wm1/config.h

* Update keyboards/wolfmarkclub/wm1/rules.mk

* Update keyboards/wolfmarkclub/wm1/wm1.c

* Update keyboards/wolfmarkclub/wm1/wm1.c

* Update keyboards/wolfmarkclub/wm1/rules.mk

* Update keyboards/wolfmarkclub/wm1/rules.mk

* Update keyboards/wolfmarkclub/wm1/readme.md

* Update keyboards/wolfmarkclub/wm1/rules.mk

* Update keyboards/wolfmarkclub/wm1/rules.mk

* Update keyboards/wolfmarkclub/wm1/rules.mk

* Update keyboards/wolfmarkclub/wm1/rules.mk

* update readme
2020-05-21 13:34:28 -07:00
Nick Brassel fd4f102977 Fix build. (#9163) 2020-05-22 06:25:03 +10:00
Joel ChallisandNick Brassel 6d84795bc1 Update ARM split keyboard docs (#9160)
* Update ARM split keyboard docs

* Update docs/serial_driver.md

Co-authored-by: Nick Brassel <[email protected]>

Co-authored-by: Nick Brassel <[email protected]>
2020-05-22 06:20:46 +10:00
Erovia 179e5c018f CLI: Rework submodule checking (#9162) 2020-05-21 21:56:43 +02:00
Rys Sommefeldt 5246acb2e4 [Keyboard] Add support for Ace of Spades TKL keyboard (#9128)
* Add support for Ace of Spades

* Fix the F-row mappings

* Add the tkl_iso layout

* Put KC_PAUS back in place of top layer reset

* aholland909 personal keymap for Ace of Spades

* Address PR feedback and rename to aos/tkl

* Rename keyboard implementation filenames

* Remove unnecessary layers

* info.json for the configurator
2020-05-21 12:49:35 -07:00
Thomas Baart 02a8c874f8 [Keymap] Kyria: Updated personal keymap, added asapjockey's keymap (#8019)
* Updated personal keymap, added asapjockey's keymap

* Update keyboards/kyria/keymaps/asapjockey/keymap.c

* Update keyboards/kyria/keymaps/asapjockey/keymap.c

* Update keyboards/kyria/keymaps/asapjockey/keymap.c

* Update keyboards/kyria/keymaps/asapjockey/keymap.c

* Update keyboards/kyria/keymaps/asapjockey/keymap.c

* Update keyboards/kyria/keymaps/asapjockey/keymap.c

* Fixed layers, brackets

* Update keyboards/kyria/keymaps/asapjockey/keymap.c

* Update keyboards/kyria/keymaps/asapjockey/keymap.c

* Update keyboards/kyria/keymaps/asapjockey/keymap.c

* Update keyboards/kyria/keymaps/asapjockey/keymap.c

* Update keyboards/kyria/keymaps/asapjockey/keymap.c

* Update keyboards/kyria/keymaps/asapjockey/keymap.c
2020-05-21 12:43:39 -07:00
ridingqwerty dae6f6b39b Remove broken example from Makefile (#9159)
* Remove broken example from Makefile

* Correct example in Vagrantfile
2020-05-21 20:33:20 +01:00
zvecr 406dc2fb2d Move encoder_read to common location 2020-05-02 22:44:36 +01:00
1328 changed files with 52892 additions and 16499 deletions

No files matched your search

+7 -1
View File
@@ -12,7 +12,13 @@
branch = master branch = master
[submodule "lib/googletest"] [submodule "lib/googletest"]
path = lib/googletest path = lib/googletest
url = https://github.com/google/googletest url = https://github.com/qmk/googletest
[submodule "lib/lufa"] [submodule "lib/lufa"]
path = lib/lufa path = lib/lufa
url = https://github.com/qmk/lufa url = https://github.com/qmk/lufa
[submodule "lib/vusb"]
path = lib/vusb
url = https://github.com/qmk/v-usb
[submodule "lib/printf"]
path = lib/printf
url = https://github.com/qmk/printf
+6 -4
View File
@@ -294,8 +294,8 @@ define PARSE_RULE
$$(info | QMK's make format recently changed to use folder locations and colons:) $$(info | QMK's make format recently changed to use folder locations and colons:)
$$(info | make project_folder:keymap[:target]) $$(info | make project_folder:keymap[:target])
$$(info | Examples:) $$(info | Examples:)
$$(info | make planck/rev4:default:dfu) $$(info | make dz60:default)
$$(info | make planck:default) $$(info | make planck/rev6:default:flash)
$$(info |) $$(info |)
endif endif
endef endef
@@ -562,14 +562,16 @@ endef
%: %:
# Check if we have the CMP tool installed # Check if we have the CMP tool installed
cmp $(ROOT_DIR)/Makefile $(ROOT_DIR)/Makefile >/dev/null 2>&1; if [ $$? -gt 0 ]; then printf "$(MSG_NO_CMP)"; exit 1; fi; cmp $(ROOT_DIR)/Makefile $(ROOT_DIR)/Makefile >/dev/null 2>&1; if [ $$? -gt 0 ]; then printf "$(MSG_NO_CMP)"; exit 1; fi;
# Ensure that python3 is installed. This check can be removed after python is used in more places. # Ensure that bin/qmk works. This will be a failing check after the next develop merge on 2020 Aug 29.
if ! python3 --version 1> /dev/null 2>&1; then printf "$(MSG_PYTHON_MISSING)"; fi if ! bin/qmk hello 1> /dev/null 2>&1; then printf "$(MSG_PYTHON_MISSING)"; fi
# Check if the submodules are dirty, and display a warning if they are # Check if the submodules are dirty, and display a warning if they are
ifndef SKIP_GIT ifndef SKIP_GIT
if [ ! -e lib/chibios ]; then git submodule sync lib/chibios && git submodule update --depth 50 --init lib/chibios; fi if [ ! -e lib/chibios ]; then git submodule sync lib/chibios && git submodule update --depth 50 --init lib/chibios; fi
if [ ! -e lib/chibios-contrib ]; then git submodule sync lib/chibios-contrib && git submodule update --depth 50 --init lib/chibios-contrib; fi if [ ! -e lib/chibios-contrib ]; then git submodule sync lib/chibios-contrib && git submodule update --depth 50 --init lib/chibios-contrib; fi
if [ ! -e lib/ugfx ]; then git submodule sync lib/ugfx && git submodule update --depth 50 --init lib/ugfx; fi if [ ! -e lib/ugfx ]; then git submodule sync lib/ugfx && git submodule update --depth 50 --init lib/ugfx; fi
if [ ! -e lib/lufa ]; then git submodule sync lib/lufa && git submodule update --depth 50 --init lib/lufa; fi if [ ! -e lib/lufa ]; then git submodule sync lib/lufa && git submodule update --depth 50 --init lib/lufa; fi
if [ ! -e lib/vusb ]; then git submodule sync lib/vusb && git submodule update --depth 50 --init lib/vusb; fi
if [ ! -e lib/printf ]; then git submodule sync lib/printf && git submodule update --depth 50 --init lib/printf; fi
git submodule status --recursive 2>/dev/null | \ git submodule status --recursive 2>/dev/null | \
while IFS= read -r x; do \ while IFS= read -r x; do \
case "$$x" in \ case "$$x" in \
Vendored
+1 -1
View File
@@ -89,7 +89,7 @@ Vagrant.configure(2) do |config|
Examples: Examples:
make planck/rev4:default:dfu make planck/rev4:default:dfu
make planck:default make planck/rev4:default
EOT EOT
end end
+239
View File
@@ -0,0 +1,239 @@
# QMK Breaking Change - 2020 May 30 Changelog
Four times a year QMK runs a process for merging Breaking Changes. A Breaking Change is any change which modifies how QMK behaves in a way that is incompatible or potentially dangerous. We limit these changes to 4 times per year so that users can have confidence that updating their QMK tree will not break their keymaps.
The list of changes follows.
## Core Changes
### Converting V-USB usbdrv to a submodule
[#8321](https://github.com/qmk/qmk_firmware/pull/8321) and [qmk_compiler#62](https://github.com/qmk/qmk_compiler/pull/62).
These PRs move the V-USB driver code out of the qmk_firmware repository and into a submodule pointed at https://github.com/obdev/v-usb. This will make it easier to update the codebase if needed, while applying any potential QMK-specific modifications by forking it to the QMK GitHub organization.
### Unify Tap Hold functions and documentation
[#8348](https://github.com/qmk/qmk_firmware/pull/8348)
Updates all of the per key tap-hold functions to pass the `keyrecord_t` structure, and include documentation changes.
Any remaining versions or code outside of the main repo will need to be converted:
| Old function | New Function |
|------------------------------------------------------|---------------------------------------------------------------------------|
|`uint16_t get_tapping_term(uint16_t keycode)` |`uint16_t get_tapping_term(uint16_t keycode, keyrecord_t *record)` |
|`bool get_ignore_mod_tap_interrupt(uint16_t keycode)` |`bool get_ignore_mod_tap_interrupt(uint16_t keycode, keyrecord_t *record)` |
### Python Required In The Build Process
[#9000](https://github.com/qmk/qmk_firmware/pull/9000)
This is the last release of QMK that will work without having Python 3.6 (or later) installed. If your environment is not fully setup you will get a warning instructing you to set it up.
After the next breaking change you will not be able to build if `bin/qmk hello` does not work.
### Upgrade from tinyprintf to mpaland/printf
[#8269](https://github.com/qmk/qmk_firmware/pull/8269)
- Provides debug functionality on ChibiOS/ARM that is more compliant than previous integrations.
- Less maintenence, fewer QMK customisations, and allows QMK to sidestep previous compile and runtime issues.
- A `make git-submodule` may be required after pulling the latest QMK Firmware code to update to the new dependency.
### Fixed RGB_DISABLE_AFTER_TIMEOUT to be seconds based & small internals cleanup
[#6480](https://github.com/qmk/qmk_firmware/pull/6480)
- Changes `RGB_DISABLE_AFTER_TIMEOUT` to be based on milliseconds instead of ticks.
- Includes a code cleanup, resulting in a savings of 100 bytes, depending on features used.
- Fixed issues with timeouts / suspending at the wrong time not turning off all LEDs in some cases.
The `RGB_DISABLE_AFTER_TIMEOUT` definition is now deprecated, and has been superseded by `RGB_DISABLE_TIMEOUT`. To use the new definition, rename `RGB_DISABLE_AFTER_TIMEOUT` to `RGB_DISABLE_TIMEOUT` in your `config.h` file, and multiply the value set by 1200.
Before: `#define RGB_DISABLE_AFTER_TIMEOUT 100`
After: `#define RGB_DISABLE_TIMEOUT 120000`
### Switch to qmk forks for everything
[#9019](https://github.com/qmk/qmk_firmware/pull/9019)
Fork all QMK submodules to protect against upstream repositories disappearing.
### code cleanup regarding deprecated macro PLAY_NOTE_ARRAY by replacing it with PLAY_SONG
[#8484](https://github.com/qmk/qmk_firmware/pull/8484)
Removes the deprecated `PLAY_NOTE_ARRAY` macro. References to it are replaced with `PLAY_SONG`, which references the same function.
### fixing wrong configuration of AUDIO feature
[#8903](https://github.com/qmk/qmk_firmware/pull/8903) and [#8974](https://github.com/qmk/qmk_firmware/pull/8974)
`audio_avr.c` does not default to any pin; there has to be a #define XX_AUDIO in config.h at some level for Audio to actually work. Otherwise, the Audio code ends up cluttering the firmware, possibly breaking builds because the maximum allowed firmware size is exceeded.
These changes fix this by disabling Audio on keyboards that have the feature misconfigured, and therefore non-functional.
Also, add a compile-time error to alert the user to a missing pin-configuration (on AVR boards) when `AUDIO_ENABLE = yes` is set.
## Keyboard Refactors
### Migrating Lily58 to use split_common
[#6260](https://github.com/qmk/qmk_firmware/pull/6260)
Modifies the default firmware for Lily58 to use the `split_common` library, instead of including and depending on its own set of libraries for the following functionality:
- SSD1306 display
- i2c for OLED
- Serial Communication
This allows current lily58 firmware to advance with updates to the `split_common` library, which is shared with many other split keyboards.
#### To migrate existing Lily58 firmware:
[Changes to `config.h`](https://github.com/qmk/qmk_firmware/pull/6260/files#diff-445ac369c8717dcd6fc6fc3630836fc1):
- Remove `#define SSD1306OLED` from config.h
[Changes to `keymap.c`](https://github.com/qmk/qmk_firmware/pull/6260/files#diff-20943ea59856e9bdf3d99ecb2eee40b7):
- Find/Replace each instance of `#ifdef SSD1306OLED` with `#ifdef OLED_DRIVER_ENABLE`
- The following changes are for compatibility with the OLED driver. If you don't use the OLED driver you may safely delete [this section](https://github.com/qmk/qmk_firmware/blob/e6b9980bd45c186f7360df68c24b6e05a80c10dc/keyboards/lily58/keymaps/default/keymap.c#L144-L190)
- Alternatively, if you did not change the OLED code from that in `default`, you may find it easier to simply copy the [relevant section](https://github.com/qmk/qmk_firmware/blob/4ac310668501ae6786c711ecc8f01f62ddaa1c0b/keyboards/lily58/keymaps/default/keymap.c#L138-L172). Otherwise, the changes you need to make are as follows (sample change [here](https://github.com/qmk/qmk_firmware/pull/6260/files#diff-20943ea59856e9bdf3d99ecb2eee40b7R138-R173))
- [Remove](https://github.com/qmk/qmk_firmware/pull/6260/files#diff-20943ea59856e9bdf3d99ecb2eee40b7L138-L141) the block
```c
#ifdef SSD1306OLED
iota_gfx_init(!has_usb()); // turns on the display
#endif
```
- Within the block bounded by `#ifdef OLED_DRIVER_ENABLE` and `#endif // OLED_DRIVER_ENABLE`, add the following block to ensure that your two OLEDs are rotated correctly across the left and right sides:
```c
oled_rotation_t oled_init_user(oled_rotation_t rotation) {
if (!is_keyboard_master())
return OLED_ROTATION_180; // flips the display 180 degrees if offhand
return rotation;
}
```
- Remove the functions `matrix_scan_user`, `matrix_update` and `iota_gfx_task_user`
- Find/Replace `matrix_render_user(struct CharacterMatrix *matrix)` with `iota_gfx_task_user(void)`
- Find/Replace `is_master` with `is_keyboard_master()`
- For each instance of `matrix_write_ln(matrix, display_fn())`, rewrite it as `oled_write_ln(read_layer_state(), false);`
- For each instance of `matrix_write(matrix, read_logo());`, replace with `oled_write(read_logo(), false);`
### Refactor zinc to use split_common
[#7114](https://github.com/qmk/qmk_firmware/pull/7114) and [#9171](https://github.com/qmk/qmk_firmware/pull/9171)
* Refactor to use split_common and remove split codes under the zinc/revx/
* Add - backlight RGB LED and/or underglow RGB LED option
* Add - continuous RGB animations feature (between L and R halves)
* Fix - keymap files to adapt to changes
* all authors of keymaps confirmed this PR
* Update - documents and rules.mk
### Refactor of TKC1800 to use common OLED code
[#8472](https://github.com/qmk/qmk_firmware/pull/8472)
Modifies the default firmware for TKC1800 to use the in-built I2C and OLED drivers, instead of including and depending on its own set of libraries for the following functionality:
- SSD1306 display
- i2c for OLED
This allows current TKC1800 firmware to advance with updates to those drivers, which are shared with other keyboards.
#### To migrate existing TKC1800 firmware:
[Changes to `config.h`](https://github.com/qmk/qmk_firmware/pull/8472/files#diff-d10b26e676b4a55cbb00d71955116526):
- Remove `#define SSD1306OLED` from config.h
[Changes to `tkc1800.c`](https://github.com/qmk/qmk_firmware/pull/8472/files#diff-3b35bd30abe89c8110717c6972cd2cc5):
- Add the following to avoid debug errors on HID_listen if the screen is not present
```c
void keyboard_pre_init_kb(void) {
setPinInputHigh(D0);
setPinInputHigh(D1);
keyboard_pre_init_user();
}
```
[Changes to `keymap.c`](https://github.com/qmk/qmk_firmware/pull/8472/files#diff-05a2a344ce27e4d045fe68520ccd4771):
- Find/Replace each instance of `#ifdef SSD1306OLED` with `#ifdef OLED_DRIVER_ENABLE`
- The following changes are for compatibility with the OLED driver. If you don't use the OLED driver you may safely delete [this section](https://github.com/qmk/qmk_firmware/blob/e6b9980bd45c186f7360df68c24b6e05a80c10dc/keyboards/lily58/keymaps/default/keymap.c#L144-L190)
- [Remove](https://github.com/qmk/qmk_firmware/pull/6260/files#diff-20943ea59856e9bdf3d99ecb2eee40b7L91-L158) the block
```c
#ifdef SSD1306OLED
iota_gfx_init(!has_usb()); // turns on the display
#endif
```
- Within the block bounded by `#ifdef OLED_DRIVER_ENABLE` and `#endif // OLED_DRIVER_ENABLE`, add the following block to ensure that your two OLEDs are rotated correctly across the left and right sides:
```c
oled_rotation_t oled_init_user(oled_rotation_t rotation) {
if (!is_keyboard_master())
return OLED_ROTATION_180; // flips the display 180 degrees if offhand
return rotation;
}
```
- Remove the function `iota_gfx_task_user`
### Split HHKB to ANSI and JP layouts and Add VIA support for each
[#8582](https://github.com/qmk/qmk_firmware/pull/8582)
- Splits the HHKB codebase into two separate folders `keyboards/hhkb/ansi` and `keyboards/hhkb/jp`.
- Adds VIA Configurator support for both versions.
#### Migrating existing HHKB keymaps
- Remove any checks for the `HHKB_JP` definition
- All checks for this definition have been removed, and each version uses the source that is appropriate to that version.
- Move the directory for your keymap into the appropriate `keymaps` directory
- `keyboards/hhkb/ansi/keymaps/` for ANSI HHKBs
- `keyboards/hhkb/jp/keymaps/` for HHKB JPs
- Compile with the new keyboard names
- This PR changes the compilation instructions for the HHKB Alternate Controller. To compile firmware for this controller moving forward, use:
- `make hhkb/ansi` for ANSI-layout HHKBs
- `make hhkb/jp` for HHKB JP keyboards
## Keyboard Moves
- [#8412](https://github.com/qmk/qmk_firmware/pull/8412 "Changing board names to prevent confusion") by blindassassin111
- [#8499](https://github.com/qmk/qmk_firmware/pull/8499 "Move the Keyboardio Model01 to a keyboardio/ subdir") by algernon
- [#8830](https://github.com/qmk/qmk_firmware/pull/8830 "Move spaceman keyboards") by Spaceman (formerly known as Rionlion100)
- [#8537](https://github.com/qmk/qmk_firmware/pull/8537 "Organizing my keyboards (plaid, tartan, ergoinu)") by hsgw
Keyboards by Keyboardio, Spaceman, and hsgw move to vendor folders, while PCBs designed by blindassassin111 are renamed.
Old Name | New Name
:----------------- | :-----------------
2_milk | spaceman/2_milk
at101_blackheart | at101_bh
ergoinu | dm9records/ergoinu
model01 | keyboardio/model01
omnikey_blackheart | omnikey_bh
pancake | spaceman/pancake
plaid | dm9records/plaid
tartan | dm9records/tartan
z150_blackheart | z150_bh
If you own one of these PCBs, please use the new names to compile your firmware moving forward.
## Keycode Migration PRs
[#8954](https://github.com/qmk/qmk_firmware/pull/8954 "Migrate `ACTION_LAYER_TOGGLE` to `TG()`"), [#8957](https://github.com/qmk/qmk_firmware/pull/8957 "Migrate `ACTION_MODS_ONESHOT` to `OSM()`"), [#8958](https://github.com/qmk/qmk_firmware/pull/8958 "Migrate `ACTION_DEFAULT_LAYER_SET` to `DF()`"), [#8959](https://github.com/qmk/qmk_firmware/pull/8959 "Migrate `ACTION_LAYER_MODS` to `LM()`"), [#8968](https://github.com/qmk/qmk_firmware/pull/8968 "Migrate `ACTION_MODS_TAP_KEY` to `MT()`"), [#8977](https://github.com/qmk/qmk_firmware/pull/8977 "Migrate miscellaneous `fn_actions` entries"), and [#8979](https://github.com/qmk/qmk_firmware/pull/8979 "Migrate `ACTION_MODS_KEY` to chained mod keycodes")
Authored by fauxpark, these pull requests remove references to deprecated TMK macros that have been superseded by native QMK keycodes.
Old `fn_actions` action | New QMK keycode
:---------------------- | :--------------
`ACTION_DEFAULT_LAYER_SET(layer)` | `DF(layer)`
`ACTION_LAYER_MODS(layer, mod)` | `LM(layer, mod)`
`ACTION_LAYER_ONESHOT(mod)` | `OSL(mod)`
`ACTION_LAYER_TOGGLE(layer)` | `TG(layer)`
`ACTION_MODS_ONESHOT(mod)` | `OSM(mod)`
`ACTION_MODS_TAP_KEY(mod, kc)` | `MT(mod, kc)`
`ACTION_MODS_KEY(mod, kc)`<br>e.g. `ACTION_MODS_KEY(MOD_LCTL, KC_0)` | `MOD(kc)`<br>e.g. `LCTL(KC_0)`
+3
View File
@@ -55,6 +55,7 @@
* Simple Keycodes * Simple Keycodes
* [Full List](keycodes.md) * [Full List](keycodes.md)
* [Basic Keycodes](keycodes_basic.md) * [Basic Keycodes](keycodes_basic.md)
* [Language-Specific Keycodes](reference_keymap_extras.md)
* [Modifier Keys](feature_advanced_keycodes.md) * [Modifier Keys](feature_advanced_keycodes.md)
* [Quantum Keycodes](quantum_keycodes.md) * [Quantum Keycodes](quantum_keycodes.md)
@@ -114,6 +115,7 @@
* [Overview](breaking_changes.md) * [Overview](breaking_changes.md)
* [My Pull Request Was Flagged](breaking_changes_instructions.md) * [My Pull Request Was Flagged](breaking_changes_instructions.md)
* History * History
* [2020 May 30](ChangeLog/20200530.md)
* [2020 Feb 29](ChangeLog/20200229.md) * [2020 Feb 29](ChangeLog/20200229.md)
* [2019 Aug 30](ChangeLog/20190830.md) * [2019 Aug 30](ChangeLog/20190830.md)
@@ -143,6 +145,7 @@
* Hardware Platform Development * Hardware Platform Development
* Arm/ChibiOS * Arm/ChibiOS
* [Selecting an MCU](platformdev_selecting_arm_mcu.md)
* [Early initialization](platformdev_chibios_earlyinit.md) * [Early initialization](platformdev_chibios_earlyinit.md)
* QMK Reference * QMK Reference
+2 -2
View File
@@ -22,7 +22,7 @@ Then place this include at the top of your code:
### AVR ### AVR
|Channel|AT90USB64/128|ATmega16/32U4|ATmega32A|ATmega328P| |Channel|AT90USB64/128|ATmega16/32U4|ATmega32A|ATmega328/P|
|-------|-------------|-------------|---------|----------| |-------|-------------|-------------|---------|----------|
|0 |`F0` |`F0` |`A0` |`C0` | |0 |`F0` |`F0` |`A0` |`C0` |
|1 |`F1` |`F1` |`A1` |`C1` | |1 |`F1` |`F1` |`A1` |`C1` |
@@ -39,7 +39,7 @@ Then place this include at the top of your code:
|12 | |`B5` | | | |12 | |`B5` | | |
|13 | |`B6` | | | |13 | |`B6` | | |
<sup>\* The ATmega328P possesses two extra ADC channels; however, they are not present on the DIP pinout, and are not shared with GPIO pins. You can use `adc_read()` directly to gain access to these.</sup> <sup>\* The ATmega328/P possesses two extra ADC channels; however, they are not present on the DIP pinout, and are not shared with GPIO pins. You can use `adc_read()` directly to gain access to these.</sup>
### ARM ### ARM
+24 -23
View File
@@ -6,27 +6,28 @@ The breaking change period is when we will merge PR's that change QMK in dangero
## What has been included in past Breaking Changes? ## What has been included in past Breaking Changes?
* [2020 May 30](ChangeLog/20200530.md)
* [2020 Feb 29](ChangeLog/20200229.md) * [2020 Feb 29](ChangeLog/20200229.md)
* [2019 Aug 30](ChangeLog/20190830.md) * [2019 Aug 30](ChangeLog/20190830.md)
## When is the next Breaking Change? ## When is the next Breaking Change?
The next Breaking Change is scheduled for May 30, 2020. The next Breaking Change is scheduled for Aug 29, 2020.
### Important Dates ### Important Dates
* [x] 2020 Feb 29 - `future` is created. It will be rebased weekly. * [x] 2020 May 30 - `develop` is created. It will be rebased weekly.
* [ ] 2020 May 2 - `future` closed to new PR's. * [ ] 2020 Aug 1 - `develop` closed to new PR's.
* [ ] 2020 May 2 - Call for testers. * [ ] 2020 Aug 1 - Call for testers.
* [ ] 2020 May 28 - `master` is locked, no PR's merged. * [ ] 2020 Aug 27 - `master` is locked, no PR's merged.
* [ ] 2020 May 30 - Merge `future` to `master`. * [ ] 2020 Aug 29 - Merge `develop` to `master`.
* [ ] 2020 May 30 - `master` is unlocked. PR's can be merged again. * [ ] 2020 Aug 29 - `master` is unlocked. PR's can be merged again.
## What changes will be included? ## What changes will be included?
To see a list of breaking change candidates you can look at the [`breaking_change` label](https://github.com/qmk/qmk_firmware/pulls?q=is%3Aopen+label%3Abreaking_change+is%3Apr). New changes might be added between now and when `future` is closed, and a PR with that label applied is not guaranteed to be merged. To see a list of breaking change candidates you can look at the [`breaking_change` label](https://github.com/qmk/qmk_firmware/pulls?q=is%3Aopen+label%3Abreaking_change+is%3Apr). New changes might be added between now and when `develop` is closed, and a PR with that label applied is not guaranteed to be merged.
If you want your breaking change to be included in this round you need to create a PR with the `breaking_change` label and have it accepted before `future` closes. After `future` closes no new breaking changes will be accepted. If you want your breaking change to be included in this round you need to create a PR with the `breaking_change` label and have it accepted before `develop` closes. After `develop` closes no new breaking changes will be accepted.
Criteria for acceptance: Criteria for acceptance:
@@ -37,9 +38,9 @@ Criteria for acceptance:
This section documents various processes we use when running the Breaking Changes process. This section documents various processes we use when running the Breaking Changes process.
## Rebase `future` from `master` ## Rebase `develop` from `master`
This is run every Friday while `future` is open. This is run every Friday while `develop` is open.
Process: Process:
@@ -47,31 +48,31 @@ Process:
cd qmk_firmware cd qmk_firmware
git checkout master git checkout master
git pull --ff-only git pull --ff-only
git checkout future git checkout develop
git rebase master git rebase master
git push --force git push --force
``` ```
## Creating the `future` branch ## Creating the `develop` branch
This happens immediately after the previous `future` branch is merged. This happens immediately after the previous `develop` branch is merged.
* `qmk_firmware` git commands * `qmk_firmware` git commands
* [ ] `git checkout master` * [ ] `git checkout master`
* [ ] `git pull --ff-only` * [ ] `git pull --ff-only`
* [ ] `git checkout -b future` * [ ] `git checkout -b develop`
* [ ] Edit `readme.md` * [ ] Edit `readme.md`
* [ ] Add a big notice at the top that this is a testing branch. * [ ] Add a big notice at the top that this is a testing branch.
* [ ] Include a link to this document * [ ] Include a link to this document
* [ ] `git commit -m 'Branch point for <DATE> Breaking Change'` * [ ] `git commit -m 'Branch point for <DATE> Breaking Change'`
* [ ] `git tag breakpoint_<YYYY>_<MM>_<DD>` * [ ] `git tag breakpoint_<YYYY>_<MM>_<DD>`
* [ ] `git tag <next_version>` # Prevent the breakpoint tag from confusing version incrementing * [ ] `git tag <next_version>` # Prevent the breakpoint tag from confusing version incrementing
* [ ] `git push origin future` * [ ] `git push origin develop`
* [ ] `git push --tags` * [ ] `git push --tags`
## 4 Weeks Before Merge ## 4 Weeks Before Merge
* `future` is now closed to new PR's, only fixes for current PR's may be merged * `develop` is now closed to new PR's, only fixes for current PR's may be merged
* Post call for testers * Post call for testers
* [ ] Discord * [ ] Discord
* [ ] GitHub PR * [ ] GitHub PR
@@ -94,15 +95,15 @@ This happens immediately after the previous `future` branch is merged.
## Day Of Merge ## Day Of Merge
* `qmk_firmware` git commands * `qmk_firmware` git commands
* [ ] `git checkout future` * [ ] `git checkout develop`
* [ ] `git pull --ff-only` * [ ] `git pull --ff-only`
* [ ] `git rebase origin/master` * [ ] `git rebase origin/master`
* [ ] Edit `readme.md` * [ ] Edit `readme.md`
* [ ] Remove the notes about `future` * [ ] Remove the notes about `develop`
* [ ] Roll up the ChangeLog into one file. * [ ] Roll up the ChangeLog into one file.
* [ ] `git commit -m 'Merge point for <DATE> Breaking Change'` * [ ] `git commit -m 'Merge point for <DATE> Breaking Change'`
* [ ] `git push origin future` * [ ] `git push origin develop`
* Github Actions * GitHub Actions
* [ ] Create a PR for `future` * [ ] Create a PR for `develop`
* [ ] Make sure travis comes back clean * [ ] Make sure travis comes back clean
* [ ] Merge `future` PR * [ ] Merge `develop` PR
+1 -1
View File
@@ -27,7 +27,7 @@ If you are contributing core code, and the only reason it needs to go through br
We require submissions that go through the Breaking Change process to include a changelog entry. The entry should be a short summary of the changes your pull request makes &ndash; [each section here started as a changelog](ChangeLog/20190830.md "n.b. This should link to the 2019 Aug 30 Breaking Changes doc - @noroadsleft"). We require submissions that go through the Breaking Change process to include a changelog entry. The entry should be a short summary of the changes your pull request makes &ndash; [each section here started as a changelog](ChangeLog/20190830.md "n.b. This should link to the 2019 Aug 30 Breaking Changes doc - @noroadsleft").
Your changelog should be located at `docs/ChangeLog/YYYYMMDD/PR####.md`, where `YYYYMMDD` is the date on which QMK's breaking change branch &ndash; usually named `future` &ndash; will be merged into the `master` branch, and `####` is the number of your pull request. Your changelog should be located at `docs/ChangeLog/YYYYMMDD/PR####.md`, where `YYYYMMDD` is the date on which QMK's breaking change branch &ndash; usually named `develop` &ndash; will be merged into the `master` branch, and `####` is the number of your pull request.
If your submission requires action on the part of users, your changelog should instruct users what action(s) must be taken, or link to a location that does so. If your submission requires action on the part of users, your changelog should instruct users what action(s) must be taken, or link to a location that does so.
+35 -2
View File
@@ -6,6 +6,8 @@
This command allows you to compile firmware from any directory. You can compile JSON exports from <https://config.qmk.fm>, compile keymaps in the repo, or compile the keyboard in the current working directory. This command allows you to compile firmware from any directory. You can compile JSON exports from <https://config.qmk.fm>, compile keymaps in the repo, or compile the keyboard in the current working directory.
This command is directory aware. It will automatically fill in KEYBOARD and/or KEYMAP if you are in a keyboard or keymap directory.
**Usage for Configurator Exports**: **Usage for Configurator Exports**:
``` ```
@@ -73,8 +75,9 @@ $ qmk compile -kb dz60
## `qmk flash` ## `qmk flash`
This command is similar to `qmk compile`, but can also target a bootloader. The bootloader is optional, and is set to `:flash` by default. This command is similar to `qmk compile`, but can also target a bootloader. The bootloader is optional, and is set to `:flash` by default. To specify a different bootloader, use `-bl <bootloader>`. Visit the [Flashing Firmware](flashing.md) guide for more details of the available bootloaders.
To specify a different bootloader, use `-bl <bootloader>`. Visit the [Flashing Firmware](flashing.md) guide for more details of the available bootloaders.
This command is directory aware. It will automatically fill in KEYBOARD and/or KEYMAP if you are in a keyboard or keymap directory.
**Usage for Configurator Exports**: **Usage for Configurator Exports**:
@@ -128,6 +131,32 @@ Check your environment and report problems only:
qmk doctor -n qmk doctor -n
## `qmk info`
Displays information about keyboards and keymaps in QMK. You can use this to get information about a keyboard, show the layouts, display the underlying key matrix, or to pretty-print JSON keymaps.
**Usage**:
```
qmk info [-f FORMAT] [-m] [-l] [-km KEYMAP] [-kb KEYBOARD]
```
This command is directory aware. It will automatically fill in KEYBOARD and/or KEYMAP if you are in a keyboard or keymap directory.
**Examples**:
Show basic information for a keyboard:
qmk info -kb planck/rev5
Show the matrix for a keyboard:
qmk info -kb ergodox_ez -m
Show a JSON keymap for a keyboard:
qmk info -kb clueboard/california -km default
## `qmk json2c` ## `qmk json2c`
Creates a keymap.c from a QMK Configurator export. Creates a keymap.c from a QMK Configurator export.
@@ -152,6 +181,8 @@ qmk list-keyboards
This command lists all the keymaps for a specified keyboard (and revision). This command lists all the keymaps for a specified keyboard (and revision).
This command is directory aware. It will automatically fill in KEYBOARD if you are in a keyboard directory.
**Usage**: **Usage**:
``` ```
@@ -162,6 +193,8 @@ qmk list-keymaps -kb planck/ez
This command creates a new keymap based on a keyboard's existing default keymap. This command creates a new keymap based on a keyboard's existing default keymap.
This command is directory aware. It will automatically fill in KEYBOARD and/or KEYMAP if you are in a keyboard or keymap directory.
**Usage**: **Usage**:
``` ```
+1 -1
View File
@@ -108,7 +108,7 @@ compile.keymap: skully -> None
|-----|---------------|-------------| |-----|---------------|-------------|
| user.keyboard | None | The keyboard path (Example: `clueboard/66/rev4`) | | user.keyboard | None | The keyboard path (Example: `clueboard/66/rev4`) |
| user.keymap | None | The keymap name (Example: `default`) | | user.keymap | None | The keymap name (Example: `default`) |
| user.name | None | The user's github username. | | user.name | None | The user's GitHub username. |
# All Configuration Options # All Configuration Options
+1 -1
View File
@@ -210,7 +210,7 @@ Our tests can be found in `lib/python/qmk/tests/`. You will find both unit and i
If your PR does not include a comprehensive set of tests please add comments like this to your code so that other people know where they can help: If your PR does not include a comprehensive set of tests please add comments like this to your code so that other people know where they can help:
# TODO(unassigned/<yourGithubUsername>): Write <unit|integration> tests # TODO(unassigned/<your_github_username>): Write <unit|integration> tests
We use [nose2](https://nose2.readthedocs.io/en/latest/getting_started.html) to run our tests. You can refer to the nose2 documentation for more details on what you can do in your test functions. We use [nose2](https://nose2.readthedocs.io/en/latest/getting_started.html) to run our tests. You can refer to the nose2 documentation for more details on what you can do in your test functions.
+1
View File
@@ -14,6 +14,7 @@ Certain MCUs which do not have native USB will use [V-USB](https://www.obdev.at/
* [ATmega32A](https://www.microchip.com/wwwproducts/en/ATmega32A) * [ATmega32A](https://www.microchip.com/wwwproducts/en/ATmega32A)
* [ATmega328P](https://www.microchip.com/wwwproducts/en/ATmega328P) * [ATmega328P](https://www.microchip.com/wwwproducts/en/ATmega328P)
* [ATmega328](https://www.microchip.com/wwwproducts/en/ATmega328)
## ARM ## ARM
+2
View File
@@ -197,6 +197,8 @@ If you define these options you will enable the associated feature, which may in
* Note: Increasing the maximum will increase the firmware size and slow sync on split keyboards. * Note: Increasing the maximum will increase the firmware size and slow sync on split keyboards.
* `#define RGBLIGHT_LAYER_BLINK` * `#define RGBLIGHT_LAYER_BLINK`
* Adds ability to [blink](feature_rgblight.md?id=lighting-layer-blink) a lighting layer for a specified number of milliseconds (e.g. to acknowledge an action). * Adds ability to [blink](feature_rgblight.md?id=lighting-layer-blink) a lighting layer for a specified number of milliseconds (e.g. to acknowledge an action).
* `#define RGBLIGHT_LAYERS_OVERRIDE_RGB_OFF`
* If defined, then [lighting layers](feature_rgblight?id=overriding-rgb-lighting-onoff-status) will be shown even if RGB Light is off.
* `#define RGBLED_NUM 12` * `#define RGBLED_NUM 12`
* number of LEDs * number of LEDs
* `#define RGBLIGHT_SPLIT` * `#define RGBLIGHT_SPLIT`
+1 -1
View File
@@ -12,7 +12,7 @@ I'll say that again because it's important:
!> **MAKE SURE YOU SELECT THE RIGHT VERSION!** !> **MAKE SURE YOU SELECT THE RIGHT VERSION!**
If your keyboard has been advertised to be powered by QMK but is not in the list, chances are a developer hasn't gotten to it yet or we haven't had a chance to merge it in yet. File an issue at [qmk_firmware](https://github.com/qmk/qmk_firmware/issues) requesting to support that particular keyboard, if there is no active [Pull Request](https://github.com/qmk/qmk_firmware/pulls?q=is%3Aopen+is%3Apr+label%3Akeyboard) for it. There are also QMK powered keyboards that are in their manufacturer's own github accounts. Double check for that as well. <!-- FIXME(skullydazed): This feels too wordy and I'm not sure we want to encourage these kinds of issues. Also, should we prompt them to bug the manufacutrer? --> If your keyboard has been advertised to be powered by QMK but is not in the list, chances are a developer hasn't gotten to it yet or we haven't had a chance to merge it in yet. File an issue at [qmk_firmware](https://github.com/qmk/qmk_firmware/issues) requesting to support that particular keyboard, if there is no active [Pull Request](https://github.com/qmk/qmk_firmware/pulls?q=is%3Aopen+is%3Apr+label%3Akeyboard) for it. There are also QMK powered keyboards that are in their manufacturer's own GitHub accounts. Double check for that as well. <!-- FIXME(skullydazed): This feels too wordy and I'm not sure we want to encourage these kinds of issues. Also, should we prompt them to bug the manufacutrer? -->
## Step 2: Select Your Keyboard Layout ## Step 2: Select Your Keyboard Layout
+2 -55
View File
@@ -57,7 +57,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
case KC_ENTER: case KC_ENTER:
// Play a tone when enter is pressed // Play a tone when enter is pressed
if (record->event.pressed) { if (record->event.pressed) {
PLAY_NOTE_ARRAY(tone_qwerty); PLAY_SONG(tone_qwerty);
} }
return true; // Let QMK send the enter press/release events return true; // Let QMK send the enter press/release events
default: default:
@@ -438,7 +438,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
case KC_ENTER: case KC_ENTER:
// Play a tone when enter is pressed // Play a tone when enter is pressed
if (record->event.pressed) { if (record->event.pressed) {
PLAY_NOTE_ARRAY(tone_qwerty); PLAY_SONG(tone_qwerty);
} }
return true; // Let QMK send the enter press/release events return true; // Let QMK send the enter press/release events
case RGB_LYR: // This allows me to use underglow as layer indication, or as normal case RGB_LYR: // This allows me to use underglow as layer indication, or as normal
@@ -486,56 +486,3 @@ And you're done. The RGB layer indication will only work if you want it to. And
* Keymap: `void eeconfig_init_user(void)`, `uint32_t eeconfig_read_user(void)` and `void eeconfig_update_user(uint32_t val)` * Keymap: `void eeconfig_init_user(void)`, `uint32_t eeconfig_read_user(void)` and `void eeconfig_update_user(uint32_t val)`
The `val` is the value of the data that you want to write to EEPROM. And the `eeconfig_read_*` function return a 32 bit (DWORD) value from the EEPROM. The `val` is the value of the data that you want to write to EEPROM. And the `eeconfig_read_*` function return a 32 bit (DWORD) value from the EEPROM.
# Custom Tapping Term
By default, the tapping term and related options (such as `IGNORE_MOD_TAP_INTERRUPT`) are defined globally, and are not configurable by key. For most users, this is perfectly fine. But in some cases, dual function keys would be greatly improved by different timeout behaviors than `LT` keys, or because some keys may be easier to hold than others. Instead of using custom key codes for each, this allows for per key configurable timeout behaviors.
There are two configurable options to control per-key timeout behaviors:
- `TAPPING_TERM_PER_KEY`
- `IGNORE_MOD_TAP_INTERRUPT_PER_KEY`
You need to add `#define` lines to your `config.h` for each feature you want.
```
#define TAPPING_TERM_PER_KEY
#define IGNORE_MOD_TAP_INTERRUPT_PER_KEY
```
## Example `get_tapping_term` Implementation
To change the `TAPPING_TERM` based on the keycode, you'd want to add something like the following to your `keymap.c` file:
```c
uint16_t get_tapping_term(uint16_t keycode) {
switch (keycode) {
case SFT_T(KC_SPC):
return TAPPING_TERM + 1250;
case LT(1, KC_GRV):
return 130;
default:
return TAPPING_TERM;
}
}
```
## Example `get_ignore_mod_tap_interrupt` Implementation
To change the `IGNORE_MOD_TAP_INTERRUPT` value based on the keycode, you'd want to add something like the following to your `keymap.c` file:
```c
bool get_ignore_mod_tap_interrupt(uint16_t keycode) {
switch (keycode) {
case SFT_T(KC_SPC):
return true;
default:
return false;
}
}
```
## `get_tapping_term` / `get_ignore_mod_tap_interrupt` Function Documentation
Unlike many of the other functions here, there isn't a need (or even reason) to have a quantum or keyboard level function. Only user level functions are useful here, so no need to mark them as such.
+1 -1
View File
@@ -13,7 +13,7 @@ QMK (*Quantum Mechanical Keyboard*) ist eine Open-Source-Community, welche die Q
## Bezugsquelle für QMK ## Bezugsquelle für QMK
Wenn Du vorhast, deine Tastatur, Tastaturbelegung oder Features zu QMK beizusteuern, geht das am einfachsten, indem Du das [Repository auf Github](https://github.com/qmk/qmk_firmware#fork-destination-box) forkst, die Änderungen in deinem lokalen Repo vornimmst und anschließend einen [Pull Request](https://github.com/qmk/qmk_firmware/pulls) einreichst. Wenn Du vorhast, deine Tastatur, Tastaturbelegung oder Features zu QMK beizusteuern, geht das am einfachsten, indem Du das [Repository auf GitHub](https://github.com/qmk/qmk_firmware#fork-destination-box) forkst, die Änderungen in deinem lokalen Repo vornimmst und anschließend einen [Pull Request](https://github.com/qmk/qmk_firmware/pulls) einreichst.
Ansonsten kannst Du es als [zip](https://github.com/qmk/qmk_firmware/zipball/master) oder [tar](https://github.com/qmk/qmk_firmware/tarball/master) herunterladen, oder es direkt via git klonen (`git clone [email protected]:qmk/qmk_firmware.git` bzw. `git clone https://github.com/qmk/qmk_firmware.git`). Ansonsten kannst Du es als [zip](https://github.com/qmk/qmk_firmware/zipball/master) oder [tar](https://github.com/qmk/qmk_firmware/tarball/master) herunterladen, oder es direkt via git klonen (`git clone [email protected]:qmk/qmk_firmware.git` bzw. `git clone https://github.com/qmk/qmk_firmware.git`).
+1 -1
View File
@@ -11,7 +11,7 @@
* [QMK CLI](de/cli.md) * [QMK CLI](de/cli.md)
* [QMK CLI Konfiguration](de/cli_configuration.md) * [QMK CLI Konfiguration](de/cli_configuration.md)
* [Zu QMK beitragen](de/contributing.md) * [Zu QMK beitragen](de/contributing.md)
* [Anleitung für Github](de/getting_started_github.md) * [Anleitung für GitHub](de/getting_started_github.md)
* [Nach Hilfe fragen](de/getting_started_getting_help.md) * [Nach Hilfe fragen](de/getting_started_getting_help.md)
* [Breaking Changes](de/breaking_changes.md) * [Breaking Changes](de/breaking_changes.md)
+1 -1
View File
@@ -6,7 +6,7 @@ Git Ressourcen:
* [Gutes allgemeines Tutorial](https://www.codecademy.com/learn/learn-git) (auf Englisch) * [Gutes allgemeines Tutorial](https://www.codecademy.com/learn/learn-git) (auf Englisch)
* [Git spielerisch anhand von Beispielen lernen](https://learngitbranching.js.org/) (auf Englisch) * [Git spielerisch anhand von Beispielen lernen](https://learngitbranching.js.org/) (auf Englisch)
* [Mehr über den allgemeinen Umgang mit Github](getting_started_github.md) * [Mehr über den allgemeinen Umgang mit GitHub](getting_started_github.md)
* [Mehr über Git im Bezug zu QMK](contributing.md) * [Mehr über Git im Bezug zu QMK](contributing.md)
Mehr über die Arbeit mit der Befehlszeile: Mehr über die Arbeit mit der Befehlszeile:
+1 -1
View File
@@ -13,7 +13,7 @@ QMK (*Quantum Mechanical Keyboard*) es una comunidad open source que mantiene el
## Cómo conseguirlo ## Cómo conseguirlo
Si estás pensando en contribuir con un keymap, teclado, or característica a QMK, la manera más sencilla es hacer un [fork del repositorio en Github](https://github.com/qmk/qmk_firmware#fork-destination-box), y clonar tu repositorio localmente para hacer los cambios, subirlos, y abir un [Pull Request](https://github.com/qmk/qmk_firmware/pulls) desde tu fork. Si estás pensando en contribuir con un keymap, teclado, or característica a QMK, la manera más sencilla es hacer un [fork del repositorio en GitHub](https://github.com/qmk/qmk_firmware#fork-destination-box), y clonar tu repositorio localmente para hacer los cambios, subirlos, y abir un [Pull Request](https://github.com/qmk/qmk_firmware/pulls) desde tu fork.
De cualquier manera, también puedes descargarlo directamente en formatos ([zip](https://github.com/qmk/qmk_firmware/zipball/master), [tar](https://github.com/qmk/qmk_firmware/tarball/master)), o clonarlo via git (`[email protected]:qmk/qmk_firmware.git`), o https (`https://github.com/qmk/qmk_firmware.git`). De cualquier manera, también puedes descargarlo directamente en formatos ([zip](https://github.com/qmk/qmk_firmware/zipball/master), [tar](https://github.com/qmk/qmk_firmware/tarball/master)), o clonarlo via git (`[email protected]:qmk/qmk_firmware.git`), o https (`https://github.com/qmk/qmk_firmware.git`).
+1 -1
View File
@@ -11,7 +11,7 @@
* [QMK CLI](es/cli.md) * [QMK CLI](es/cli.md)
* [Configuración de QMK CLI](es/cli_configuration.md) * [Configuración de QMK CLI](es/cli_configuration.md)
* [Contribuyendo a QMK](es/contributing.md) * [Contribuyendo a QMK](es/contributing.md)
* [Cómo usar Github](es/getting_started_github.md) * [Cómo usar GitHub](es/getting_started_github.md)
* [Obtener ayuda](es/getting_started_getting_help.md) * [Obtener ayuda](es/getting_started_getting_help.md)
* [Cambios incompatibles](es/breaking_changes.md) * [Cambios incompatibles](es/breaking_changes.md)
+1 -1
View File
@@ -6,7 +6,7 @@ Este documento procura instruir a los novatos en las mejores prácticas para ten
En este documento suponemos un par de cosas: En este documento suponemos un par de cosas:
1. Tienes una cuenta de Github, y has hecho un [fork del repo qmk_firmware](getting_started_github.md) en tu cuenta. 1. Tienes una cuenta de GitHub, y has hecho un [fork del repo qmk_firmware](getting_started_github.md) en tu cuenta.
2. Has [configurado tu entorno de desarrollo](newbs_getting_started.md?id=environment-setup). 2. Has [configurado tu entorno de desarrollo](newbs_getting_started.md?id=environment-setup).
@@ -21,7 +21,7 @@ Lo diré otra vez porque es importante
!> **ASEGÚRATE DE QUE SELECCIONAS LA VERSIÓN CORRECTA!** !> **ASEGÚRATE DE QUE SELECCIONAS LA VERSIÓN CORRECTA!**
Si se ha anunciado que tu teclado funciona con QMK pero no está en la lista, es probable que un desarrollador no se haya encargado de él aún o que todavía no hemos tenido la oportunidad de incluirlo. Abre un issue en [qmk_firmware](https://github.com/qmk/qmk_firmware/issues) solicitando soportar ese teclado un particular, si no hay un [Pull Request](https://github.com/qmk/qmk_firmware/pulls?q=is%3Aopen+is%3Apr+label%3Akeyboard) activo para ello. Hay también teclados que funcionan con QMK que están en las cuentas de github de sus manufacturantes. Acuérdate de comprobar esto también. Si se ha anunciado que tu teclado funciona con QMK pero no está en la lista, es probable que un desarrollador no se haya encargado de él aún o que todavía no hemos tenido la oportunidad de incluirlo. Abre un issue en [qmk_firmware](https://github.com/qmk/qmk_firmware/issues) solicitando soportar ese teclado un particular, si no hay un [Pull Request](https://github.com/qmk/qmk_firmware/pulls?q=is%3Aopen+is%3Apr+label%3Akeyboard) activo para ello. Hay también teclados que funcionan con QMK que están en las cuentas de GitHub de sus manufacturantes. Acuérdate de comprobar esto también.
## Eligiendo el layout de tu teclado ## Eligiendo el layout de tu teclado
+1 -1
View File
@@ -6,7 +6,7 @@ Recursos de Git:
* [Excelente tutorial general](https://www.codecademy.com/learn/learn-git) * [Excelente tutorial general](https://www.codecademy.com/learn/learn-git)
* [Juego de Git para aprender usando ejemplos](https://learngitbranching.js.org/) * [Juego de Git para aprender usando ejemplos](https://learngitbranching.js.org/)
* [Recursos de Git para aprender más sobre Github](getting_started_github.md) * [Recursos de Git para aprender más sobre GitHub](getting_started_github.md)
* [Recursos de Git dirigidos específicamente a QMK](contributing.md) * [Recursos de Git dirigidos específicamente a QMK](contributing.md)
+12 -15
View File
@@ -28,33 +28,30 @@ sudo udevadm trigger
**/etc/udev/rules.d/50-atmel-dfu.rules:** **/etc/udev/rules.d/50-atmel-dfu.rules:**
``` ```
# Atmel ATMega32U4 # Atmel ATMega32U4
SUBSYSTEMS=="usb", ATTRS{idVendor}=="03eb", ATTRS{idProduct}=="2ff4", MODE:="0666" SUBSYSTEMS=="usb", ATTRS{idVendor}=="03eb", ATTRS{idProduct}=="2ff4", TAG+="uaccess", RUN{builtin}+="uaccess"
# Atmel USBKEY AT90USB1287 # Atmel USBKEY AT90USB1287
SUBSYSTEMS=="usb", ATTRS{idVendor}=="03eb", ATTRS{idProduct}=="2ffb", MODE:="0666" SUBSYSTEMS=="usb", ATTRS{idVendor}=="03eb", ATTRS{idProduct}=="2ffb", TAG+="uaccess", RUN{builtin}+="uaccess"
# Atmel ATMega32U2 # Atmel ATMega32U2
SUBSYSTEMS=="usb", ATTRS{idVendor}=="03eb", ATTRS{idProduct}=="2ff0", MODE:="0666" SUBSYSTEMS=="usb", ATTRS{idVendor}=="03eb", ATTRS{idProduct}=="2ff0", TAG+="uaccess", RUN{builtin}+="uaccess"
``` ```
**/etc/udev/rules.d/52-tmk-keyboard.rules:**
```
# tmk keyboard products https://github.com/tmk/tmk_keyboard
SUBSYSTEMS=="usb", ATTRS{idVendor}=="feed", MODE:="0666"
```
**/etc/udev/rules.d/54-input-club-keyboard.rules:** **/etc/udev/rules.d/54-input-club-keyboard.rules:**
``` ```
# Input Club keyboard bootloader # Input Club keyboard bootloader
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1c11", MODE:="0666" SUBSYSTEMS=="usb", ATTRS{idVendor}=="1c11", ATTRS{idProduct}=="b007", TAG+="uaccess", RUN{builtin}+="uaccess"
``` ```
**/etc/udev/rules.d/55-caterina.rules:** **/etc/udev/rules.d/55-caterina.rules:**
``` ```
# ModemManager should ignore the following devices # ModemManager should ignore the following devices
ATTRS{idVendor}=="2a03", ENV{ID_MM_DEVICE_IGNORE}="1" SUBSYSTEMS=="usb", ATTRS{idVendor}=="2a03", ATTRS{idProduct}=="0036", TAG+="uaccess", RUN{builtin}+="uaccess", ENV{ID_MM_DEVICE_IGNORE}="1"
ATTRS{idVendor}=="2341", ENV{ID_MM_DEVICE_IGNORE}="1" SUBSYSTEMS=="usb", ATTRS{idVendor}=="2341", ATTRS{idProduct}=="0036", TAG+="uaccess", RUN{builtin}+="uaccess", ENV{ID_MM_DEVICE_IGNORE}="1"
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1b4f", ATTRS{idProduct}=="9205", TAG+="uaccess", RUN{builtin}+="uaccess", ENV{ID_MM_DEVICE_IGNORE}="1"
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1b4f", ATTRS{idProduct}=="9203", TAG+="uaccess", RUN{builtin}+="uaccess", ENV{ID_MM_DEVICE_IGNORE}="1"
``` ```
**Note:** ModemManager filtering only works when not in strict mode, the following commands can update that settings: **Note:** With older (before 1.12) ModemManager, filtering only works when not in strict mode, the following commands can update that settings:
```console ```console
sudo sed -i 's/--filter-policy=strict/--filter-policy=default/' /lib/systemd/system/ModemManager.service sudo sed -i 's/--filter-policy=strict/--filter-policy=default/' /lib/systemd/system/ModemManager.service
sudo systemctl daemon-reload sudo systemctl daemon-reload
@@ -64,15 +61,15 @@ sudo systemctl restart ModemManager
**/etc/udev/rules.d/56-dfu-util.rules:** **/etc/udev/rules.d/56-dfu-util.rules:**
``` ```
# stm32duino # stm32duino
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1eaf", ATTRS{idProduct}=="0003", MODE:="0666" SUBSYSTEMS=="usb", ATTRS{idVendor}=="1eaf", ATTRS{idProduct}=="0003", TAG+="uaccess", RUN{builtin}+="uaccess"
# Generic stm32 # Generic stm32
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="df11", MODE:="0666" SUBSYSTEMS=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="df11", TAG+="uaccess", RUN{builtin}+="uaccess"
``` ```
**/etc/udev/rules.d/57-bootloadhid.rules:** **/etc/udev/rules.d/57-bootloadhid.rules:**
``` ```
# bootloadHID # bootloadHID
SUBSYSTEMS=="usb", ATTRS{idVendor}=="16c0", ATTRS{idProduct}=="05df", MODE:="0666" SUBSYSTEMS=="usb", ATTRS{idVendor}=="16c0", ATTRS{idProduct}=="05df", TAG+="uaccess", RUN{builtin}+="uaccess"
``` ```
### Serial device is not detected in bootloader mode on Linux ### Serial device is not detected in bootloader mode on Linux
+1 -1
View File
@@ -89,7 +89,7 @@ BACKLIGHT_DRIVER = pwm
Hardware PWM is supported according to the following table: Hardware PWM is supported according to the following table:
|Backlight Pin|AT90USB64/128|ATmega16/32U4|ATmega16/32U2|ATmega32A|ATmega328P| |Backlight Pin|AT90USB64/128|ATmega16/32U4|ATmega16/32U2|ATmega32A|ATmega328/P|
|-------------|-------------|-------------|-------------|---------|----------| |-------------|-------------|-------------|-------------|---------|----------|
|`B1` | | | | |Timer 1 | |`B1` | | | | |Timer 1 |
|`B2` | | | | |Timer 1 | |`B2` | | | | |Timer 1 |
+1 -1
View File
@@ -5,7 +5,7 @@ If you've ever used Vim, you know what a Leader key is. If not, you're about to
That's what `KC_LEAD` does. Here's an example: That's what `KC_LEAD` does. Here's an example:
1. Pick a key on your keyboard you want to use as the Leader key. Assign it the keycode `KC_LEAD`. This key would be dedicated just for this -- it's a single action key, can't be used for anything else. 1. Pick a key on your keyboard you want to use as the Leader key. Assign it the keycode `KC_LEAD`. This key would be dedicated just for this -- it's a single action key, can't be used for anything else.
2. Include the line `#define LEADER_TIMEOUT 300` in your `config.h`. This sets the timeout for the `KC_LEAD` key. Specifically, when you press the `KC_LEAD` key, you only have a certain amount of time to complete the Leader Key sequence. The `300` here sets that to 300ms, and you can increase this value to give you more time to hit the sequence. But any keys pressed during this timeout are intercepted and not sent, so you may want to keep this value low. . 2. Include the line `#define LEADER_TIMEOUT 300` in your `config.h`. This sets the timeout for the `KC_LEAD` key. Specifically, when you press the `KC_LEAD` key, you only have a certain amount of time to complete the Leader Key sequence. The `300` here sets that to 300ms, and you can increase this value to give you more time to hit the sequence. But any keys pressed during this timeout are intercepted and not sent, so you may want to keep this value low.
* By default, this timeout is how long after pressing `KC_LEAD` to complete your entire sequence. This may be very low for some people. So you may want to increase this timeout. Optionally, you may want to enable the `LEADER_PER_KEY_TIMING` option, which resets the timeout after each key is tapped. This allows you to maintain a low value here, but still be able to use the longer sequences. To enable this option, add `#define LEADER_PER_KEY_TIMING` to your `config.h`. * By default, this timeout is how long after pressing `KC_LEAD` to complete your entire sequence. This may be very low for some people. So you may want to increase this timeout. Optionally, you may want to enable the `LEADER_PER_KEY_TIMING` option, which resets the timeout after each key is tapped. This allows you to maintain a low value here, but still be able to use the longer sequences. To enable this option, add `#define LEADER_PER_KEY_TIMING` to your `config.h`.
3. Within your `matrix_scan_user` function, add something like this: 3. Within your `matrix_scan_user` function, add something like this:
+12 -10
View File
@@ -21,26 +21,28 @@ Keep in mind that a report_mouse_t (here "mouseReport") has the following proper
* `mouseReport.h` - this is a signed int from -127 to 127 (not 128, this is defined in USB HID spec) representing horizontal scrolling (+ right, - left). * `mouseReport.h` - this is a signed int from -127 to 127 (not 128, this is defined in USB HID spec) representing horizontal scrolling (+ right, - left).
* `mouseReport.buttons` - this is a uint8_t in which the last 5 bits are used. These bits represent the mouse button state - bit 3 is mouse button 5, and bit 7 is mouse button 1. * `mouseReport.buttons` - this is a uint8_t in which the last 5 bits are used. These bits represent the mouse button state - bit 3 is mouse button 5, and bit 7 is mouse button 1.
When the mouse report is sent, the x, y, v, and h values are set to 0 (this is done in "pointing_device_send()", which can be overridden to avoid this behavior). This way, button states persist, but movement will only occur once. For further customization, both `pointing_device_init` and `pointing_device_task` can be overridden. Once you have made the necessary changes to the mouse report, you need to send it:
* `pointing_device_send()` - Sends the mouse report to the host and zeroes out the report.
When the mouse report is sent, the x, y, v, and h values are set to 0 (this is done in `pointing_device_send()`, which can be overridden to avoid this behavior). This way, button states persist, but movement will only occur once. For further customization, both `pointing_device_init` and `pointing_device_task` can be overridden.
In the following example, a custom key is used to click the mouse and scroll 127 units vertically and horizontally, then undo all of that when released - because that's a totally useful function. Listen, this is an example: In the following example, a custom key is used to click the mouse and scroll 127 units vertically and horizontally, then undo all of that when released - because that's a totally useful function. Listen, this is an example:
```c ```c
case MS_SPECIAL: case MS_SPECIAL:
report_mouse_t currentReport = pointing_device_get_report(); report_mouse_t currentReport = pointing_device_get_report();
if (record->event.pressed) if (record->event.pressed) {
{
currentReport.v = 127; currentReport.v = 127;
currentReport.h = 127; currentReport.h = 127;
currentReport.buttons |= MOUSE_BTN1; //this is defined in report.h currentReport.buttons |= MOUSE_BTN1; // this is defined in report.h
} } else {
else
{
currentReport.v = -127; currentReport.v = -127;
currentReport.h = -127; currentReport.h = -127;
currentReport.buttons &= ~MOUSE_BTN1; currentReport.buttons &= ~MOUSE_BTN1;
} }
pointing_device_set_report(currentReport); pointing_device_set_report(currentReport);
pointing_device_send();
break; break;
``` ```
+2 -1
View File
@@ -374,7 +374,8 @@ These are defined in [`rgblight_list.h`](https://github.com/qmk/qmk_firmware/blo
```c ```c
#define RGB_MATRIX_KEYPRESSES // reacts to keypresses #define RGB_MATRIX_KEYPRESSES // reacts to keypresses
#define RGB_MATRIX_KEYRELEASES // reacts to keyreleases (instead of keypresses) #define RGB_MATRIX_KEYRELEASES // reacts to keyreleases (instead of keypresses)
#define RGB_DISABLE_AFTER_TIMEOUT 0 // number of ticks to wait until disabling effects #define RGB_DISABLE_TIMEOUT 0 // number of milliseconds to wait until rgb automatically turns off
#define RGB_DISABLE_AFTER_TIMEOUT 0 // OBSOLETE: number of ticks to wait until disabling effects
#define RGB_DISABLE_WHEN_USB_SUSPENDED false // turn off effects when suspended #define RGB_DISABLE_WHEN_USB_SUSPENDED false // turn off effects when suspended
#define RGB_MATRIX_LED_PROCESS_LIMIT (DRIVER_LED_TOTAL + 4) / 5 // limits the number of LEDs to process in an animation per task run (increases keyboard responsiveness) #define RGB_MATRIX_LED_PROCESS_LIMIT (DRIVER_LED_TOTAL + 4) / 5 // limits the number of LEDs to process in an animation per task run (increases keyboard responsiveness)
#define RGB_MATRIX_LED_FLUSH_LIMIT 16 // limits in milliseconds how frequently an animation will update the LEDs. 16 (16ms) is equivalent to limiting to 60fps (increases keyboard responsiveness) #define RGB_MATRIX_LED_FLUSH_LIMIT 16 // limits in milliseconds how frequently an animation will update the LEDs. 16 (16ms) is equivalent to limiting to 60fps (increases keyboard responsiveness)
+4
View File
@@ -278,6 +278,10 @@ void post_process_record_user(uint16_t keycode, keyrecord_t *record) {
} }
``` ```
### Overriding RGB Lighting on/off status
Normally lighting layers are not shown when RGB Lighting is disabled (e.g. with `RGB_TOG` keycode). If you would like lighting layers to work even when the RGB Lighting is otherwise off, add `#define RGBLIGHT_LAYERS_OVERRIDE_RGB_OFF` to your `config.h`.
## Functions ## Functions
If you need to change your RGB lighting in code, for example in a macro to change the color whenever you switch layers, QMK provides a set of functions to assist you. See [`rgblight.h`](https://github.com/qmk/qmk_firmware/blob/master/quantum/rgblight.h) for the full list, but the most commonly used functions include: If you need to change your RGB lighting in code, for example in a macro to change the color whenever you switch layers, QMK provides a set of functions to assist you. See [`rgblight.h`](https://github.com/qmk/qmk_firmware/blob/master/quantum/rgblight.h) for the full list, but the most commonly used functions include:
+12 -1
View File
@@ -8,9 +8,20 @@ QMK Firmware has a generic implementation that is usable by any board, as well a
For this, we will mostly be talking about the generic implementation used by the Let's Split and other keyboards. For this, we will mostly be talking about the generic implementation used by the Let's Split and other keyboards.
!> ARM is not yet supported for Split Keyboards. Progress is being made, but we are not quite there, yet. !> ARM is not yet fully supported for Split Keyboards and has many limitations. Progress is being made, but we have not yet reached 100% feature parity.
## Compatibility Overview
| Transport | AVR | ARM |
|------------------------------|--------------------|--------------------|
| ['serial'](serial_driver.md) | :heavy_check_mark: | :white_check_mark: <sup>1</sup> |
| I2C | :heavy_check_mark: | |
Notes:
1. Both hardware and software limitations are detailed within the [driver documentation](serial_driver.md).
## Hardware Configuration ## Hardware Configuration
This assumes that you're using two Pro Micro-compatible controllers, and are using TRRS jacks to connect to two halves. This assumes that you're using two Pro Micro-compatible controllers, and are using TRRS jacks to connect to two halves.
+261 -273
View File
@@ -1,31 +1,24 @@
# Tap Dance: A Single Key Can Do 3, 5, or 100 Different Things # Tap Dance: A Single Key Can Do 3, 5, or 100 Different Things
## Introduction ## Introduction :id=introduction
Hit the semicolon key once, send a semicolon. Hit it twice, rapidly -- send a colon. Hit it three times, and your keyboard's LEDs do a wild dance. That's just one example of what Tap Dance can do. It's one of the nicest community-contributed features in the firmware, conceived and created by [algernon](https://github.com/algernon) in [#451](https://github.com/qmk/qmk_firmware/pull/451). Here's how algernon describes the feature: Hit the semicolon key once, send a semicolon. Hit it twice, rapidly -- send a colon. Hit it three times, and your keyboard's LEDs do a wild dance. That's just one example of what Tap Dance can do. It's one of the nicest community-contributed features in the firmware, conceived and created by [algernon](https://github.com/algernon) in [#451](https://github.com/qmk/qmk_firmware/pull/451). Here's how algernon describes the feature:
With this feature one can specify keys that behave differently, based on the amount of times they have been tapped, and when interrupted, they get handled before the interrupter. With this feature one can specify keys that behave differently, based on the amount of times they have been tapped, and when interrupted, they get handled before the interrupter.
## Explanatory Comparison with `ACTION_FUNCTION_TAP` ## How to Use Tap Dance :id=how-to-use
`ACTION_FUNCTION_TAP` can offer similar functionality to Tap Dance, but it's worth noting some important differences. To do this, let's explore a certain setup! We want one key to send `Space` on single-tap, but `Enter` on double-tap.
With `ACTION_FUNCTION_TAP`, it is quite a rain-dance to set this up, and has the problem that when the sequence is interrupted, the interrupting key will be sent first. Thus, `SPC a` will result in `a SPC` being sent, if `SPC` and `a` are both typed within `TAPPING_TERM`. With the Tap Dance feature, that'll come out correctly as `SPC a` (even if both `SPC` and `a` are typed within the `TAPPING_TERM`. First, you will need `TAP_DANCE_ENABLE = yes` in your `rules.mk`, because the feature is disabled by default. This adds a little less than 1k to the firmware size.
To achieve this correct handling of interrupts, the implementation of Tap Dance hooks into two parts of the system: `process_record_quantum()`, and the matrix scan. These two parts are explained below, but for now the point to note is that we need the latter to be able to time out a tap sequence even when a key is not being pressed. That way, `SPC` alone will time out and register after `TAPPING_TERM` time.
## How to Use Tap Dance
But enough of the generalities; lets look at how to actually use Tap Dance!
First, you will need `TAP_DANCE_ENABLE=yes` in your `rules.mk`, because the feature is disabled by default. This adds a little less than 1k to the firmware size.
Optionally, you might want to set a custom `TAPPING_TERM` time by adding something like this in you `config.h`: Optionally, you might want to set a custom `TAPPING_TERM` time by adding something like this in you `config.h`:
``` ```c
#define TAPPING_TERM 175 #define TAPPING_TERM 175
``` ```
The `TAPPING_TERM` time is the maximum time allowed between taps of your Tap Dance key, and is measured in milliseconds. For example, if you used the above `#define` statement and set up a Tap Dance key that sends `Space` on single-tap and `Enter` on double-tap, then this key will send `ENT` only if you tap this key twice in less than 175ms. If you tap the key, wait more than 175ms, and tap the key again you'll end up sending `SPC SPC` instead. The `TAPPING_TERM` time is the maximum time allowed between taps of your Tap Dance key, and is measured in milliseconds. For example, if you used the above `#define` statement and set up a Tap Dance key that sends `Space` on single-tap and `Enter` on double-tap, then this key will send `ENT` only if you tap this key twice in less than 175ms. If you tap the key, wait more than 175ms, and tap the key again you'll end up sending `SPC SPC` instead.
Next, you will want to define some tap-dance keys, which is easiest to do with the `TD()` macro, that - similar to `F()` - takes a number, which will later be used as an index into the `tap_dance_actions` array. Next, you will want to define some tap-dance keys, which is easiest to do with the `TD()` macro, that takes a number which will later be used as an index into the `tap_dance_actions` array.
After this, you'll want to use the `tap_dance_actions` array to specify what actions shall be taken when a tap-dance key is in action. Currently, there are five possible options: After this, you'll want to use the `tap_dance_actions` array to specify what actions shall be taken when a tap-dance key is in action. Currently, there are five possible options:
@@ -43,11 +36,12 @@ The first option is enough for a lot of cases, that just want dual roles. For ex
Similar to the first option, the second option is good for simple layer-switching cases. Similar to the first option, the second option is good for simple layer-switching cases.
For more complicated cases, use the third or fourth options (examples of each are listed below). For more complicated cases, use the third or fourth options (examples of each are listed below).
Finally, the fifth option is particularly useful if your non-Tap-Dance keys start behaving weirdly after adding the code for your Tap Dance keys. The likely problem is that you changed the `TAPPING_TERM` time to make your Tap Dance keys easier for you to use, and that this has changed the way your other keys handle interrupts. Finally, the fifth option is particularly useful if your non-Tap-Dance keys start behaving weirdly after adding the code for your Tap Dance keys. The likely problem is that you changed the `TAPPING_TERM` time to make your Tap Dance keys easier for you to use, and that this has changed the way your other keys handle interrupts.
## Implementation Details ## Implementation Details :id=implementation
Well, that's the bulk of it! You should now be able to work through the examples below, and to develop your own Tap Dance functionality. But if you want a deeper understanding of what's going on behind the scenes, then read on for the explanation of how it all works! Well, that's the bulk of it! You should now be able to work through the examples below, and to develop your own Tap Dance functionality. But if you want a deeper understanding of what's going on behind the scenes, then read on for the explanation of how it all works!
The main entry point is `process_tap_dance()`, called from `process_record_quantum()`, which is run for every keypress, and our handler gets to run early. This function checks whether the key pressed is a tap-dance key. If it is not, and a tap-dance was in action, we handle that first, and enqueue the newly pressed key. If it is a tap-dance key, then we check if it is the same as the already active one (if there's one active, that is). If it is not, we fire off the old one first, then register the new one. If it was the same, we increment the counter and reset the timer. The main entry point is `process_tap_dance()`, called from `process_record_quantum()`, which is run for every keypress, and our handler gets to run early. This function checks whether the key pressed is a tap-dance key. If it is not, and a tap-dance was in action, we handle that first, and enqueue the newly pressed key. If it is a tap-dance key, then we check if it is the same as the already active one (if there's one active, that is). If it is not, we fire off the old one first, then register the new one. If it was the same, we increment the counter and reset the timer.
@@ -58,9 +52,9 @@ Our next stop is `matrix_scan_tap_dance()`. This handles the timeout of tap-danc
For the sake of flexibility, tap-dance actions can be either a pair of keycodes, or a user function. The latter allows one to handle higher tap counts, or do extra things, like blink the LEDs, fiddle with the backlighting, and so on. This is accomplished by using an union, and some clever macros. For the sake of flexibility, tap-dance actions can be either a pair of keycodes, or a user function. The latter allows one to handle higher tap counts, or do extra things, like blink the LEDs, fiddle with the backlighting, and so on. This is accomplished by using an union, and some clever macros.
# Examples ## Examples :id=examples
## Simple Example ### Simple Example :id=simple-example
Here's a simple example for a single definition: Here's a simple example for a single definition:
@@ -69,23 +63,26 @@ Here's a simple example for a single definition:
3. In your `keymap.c` file, define the variables and definitions, then add to your keymap: 3. In your `keymap.c` file, define the variables and definitions, then add to your keymap:
```c ```c
//Tap Dance Declarations // Tap Dance declarations
enum { enum {
TD_ESC_CAPS = 0 TD_ESC_CAPS,
}; };
//Tap Dance Definitions // Tap Dance definitions
qk_tap_dance_action_t tap_dance_actions[] = { qk_tap_dance_action_t tap_dance_actions[] = {
//Tap once for Esc, twice for Caps Lock // Tap once for Escape, twice for Caps Lock
[TD_ESC_CAPS] = ACTION_TAP_DANCE_DOUBLE(KC_ESC, KC_CAPS) [TD_ESC_CAPS] = ACTION_TAP_DANCE_DOUBLE(KC_ESC, KC_CAPS),
// Other declarations would go here, separated by commas, if you have them
}; };
//In Layer declaration, add tap dance item in place of a key code // Add tap dance item in place of a key code
TD(TD_ESC_CAPS) const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
// ...
TD(TD_ESC_CAPS)
// ...
};
``` ```
## Complex Examples ### Complex Examples :id=complex-examples
This section details several complex tap dance examples. This section details several complex tap dance examples.
All the enums used in the examples are declared like this: All the enums used in the examples are declared like this:
@@ -93,104 +90,105 @@ All the enums used in the examples are declared like this:
```c ```c
// Enums defined for all examples: // Enums defined for all examples:
enum { enum {
CT_SE = 0, CT_SE,
CT_CLN, CT_CLN,
CT_EGG, CT_EGG,
CT_FLSH, CT_FLSH,
X_TAP_DANCE X_TAP_DANCE
}; };
``` ```
### Example 1: Send `:` on Single Tap, `;` on Double Tap
#### Example 1: Send `:` on Single Tap, `;` on Double Tap :id=example-1
```c ```c
void dance_cln_finished (qk_tap_dance_state_t *state, void *user_data) { void dance_cln_finished(qk_tap_dance_state_t *state, void *user_data) {
if (state->count == 1) { if (state->count == 1) {
register_code (KC_RSFT); register_code16(KC_COLN);
register_code (KC_SCLN); } else {
} else { register_code(KC_SCLN);
register_code (KC_SCLN); }
}
} }
void dance_cln_reset (qk_tap_dance_state_t *state, void *user_data) { void dance_cln_reset(qk_tap_dance_state_t *state, void *user_data) {
if (state->count == 1) { if (state->count == 1) {
unregister_code (KC_RSFT); unregister_code16(KC_COLN);
unregister_code (KC_SCLN); } else {
} else { unregister_code(KC_SCLN);
unregister_code (KC_SCLN); }
}
} }
//All tap dance functions would go here. Only showing this one. // All tap dance functions would go here. Only showing this one.
qk_tap_dance_action_t tap_dance_actions[] = { qk_tap_dance_action_t tap_dance_actions[] = {
[CT_CLN] = ACTION_TAP_DANCE_FN_ADVANCED (NULL, dance_cln_finished, dance_cln_reset) [CT_CLN] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, dance_cln_finished, dance_cln_reset),
}; };
``` ```
### Example 2: Send "Safety Dance!" After 100 Taps
#### Example 2: Send "Safety Dance!" After 100 Taps :id=example-2
```c ```c
void dance_egg (qk_tap_dance_state_t *state, void *user_data) { void dance_egg(qk_tap_dance_state_t *state, void *user_data) {
if (state->count >= 100) { if (state->count >= 100) {
SEND_STRING ("Safety dance!"); SEND_STRING("Safety dance!");
reset_tap_dance (state); reset_tap_dance(state);
} }
} }
qk_tap_dance_action_t tap_dance_actions[] = { qk_tap_dance_action_t tap_dance_actions[] = {
[CT_EGG] = ACTION_TAP_DANCE_FN (dance_egg) [CT_EGG] = ACTION_TAP_DANCE_FN(dance_egg),
}; };
``` ```
### Example 3: Turn LED Lights On Then Off, One at a Time #### Example 3: Turn LED Lights On Then Off, One at a Time :id=example-3
```c ```c
// on each tap, light up one led, from right to left // On each tap, light up one LED, from right to left
// on the forth tap, turn them off from right to left // On the fourth tap, turn them off from right to left
void dance_flsh_each(qk_tap_dance_state_t *state, void *user_data) { void dance_flsh_each(qk_tap_dance_state_t *state, void *user_data) {
switch (state->count) { switch (state->count) {
case 1: case 1:
ergodox_right_led_3_on(); ergodox_right_led_3_on();
break; break;
case 2: case 2:
ergodox_right_led_2_on(); ergodox_right_led_2_on();
break; break;
case 3: case 3:
ergodox_right_led_1_on(); ergodox_right_led_1_on();
break; break;
case 4: case 4:
ergodox_right_led_3_off(); ergodox_right_led_3_off();
_delay_ms(50); wait_ms(50);
ergodox_right_led_2_off(); ergodox_right_led_2_off();
_delay_ms(50); wait_ms(50);
ergodox_right_led_1_off(); ergodox_right_led_1_off();
} }
} }
// on the fourth tap, set the keyboard on flash state // On the fourth tap, set the keyboard on flash state
void dance_flsh_finished(qk_tap_dance_state_t *state, void *user_data) { void dance_flsh_finished(qk_tap_dance_state_t *state, void *user_data) {
if (state->count >= 4) { if (state->count >= 4) {
reset_keyboard(); reset_keyboard();
reset_tap_dance(state); }
}
} }
// if the flash state didn't happen, then turn off LEDs, left to right // If the flash state didn't happen, then turn off LEDs, left to right
void dance_flsh_reset(qk_tap_dance_state_t *state, void *user_data) { void dance_flsh_reset(qk_tap_dance_state_t *state, void *user_data) {
ergodox_right_led_1_off(); ergodox_right_led_1_off();
_delay_ms(50); wait_ms(50);
ergodox_right_led_2_off(); ergodox_right_led_2_off();
_delay_ms(50); wait_ms(50);
ergodox_right_led_3_off(); ergodox_right_led_3_off();
} }
//All tap dances now put together. Example 3 is "CT_FLASH" // All tap dances now put together. Example 3 is "CT_FLASH"
qk_tap_dance_action_t tap_dance_actions[] = { qk_tap_dance_action_t tap_dance_actions[] = {
[CT_SE] = ACTION_TAP_DANCE_DOUBLE (KC_SPC, KC_ENT) [CT_SE] = ACTION_TAP_DANCE_DOUBLE(KC_SPC, KC_ENT),
,[CT_CLN] = ACTION_TAP_DANCE_FN_ADVANCED (NULL, dance_cln_finished, dance_cln_reset) [CT_CLN] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, dance_cln_finished, dance_cln_reset),
,[CT_EGG] = ACTION_TAP_DANCE_FN (dance_egg) [CT_EGG] = ACTION_TAP_DANCE_FN(dance_egg),
,[CT_FLSH] = ACTION_TAP_DANCE_FN_ADVANCED (dance_flsh_each, dance_flsh_finished, dance_flsh_reset) [CT_FLSH] = ACTION_TAP_DANCE_FN_ADVANCED(dance_flsh_each, dance_flsh_finished, dance_flsh_reset)
}; };
``` ```
### Example 4: 'Quad Function Tap-Dance' #### Example 4: 'Quad Function Tap-Dance' :id=example-4
By [DanielGGordon](https://github.com/danielggordon) By [DanielGGordon](https://github.com/danielggordon)
@@ -201,40 +199,37 @@ Below is a specific example:
* Double Tap = Send `Escape` * Double Tap = Send `Escape`
* Double Tap and Hold = Send `Alt` * Double Tap and Hold = Send `Alt`
## Setup
You will need a few things that can be used for 'Quad Function Tap-Dance'. You will need a few things that can be used for 'Quad Function Tap-Dance'.
You'll need to add these to the top of your `keymap.c` file, before your keymap. You'll need to add these to the top of your `keymap.c` file, before your keymap.
```c ```c
typedef struct { typedef struct {
bool is_press_action; bool is_press_action;
int state; uint8_t state;
} tap; } tap;
enum { enum {
SINGLE_TAP = 1, SINGLE_TAP = 1,
SINGLE_HOLD = 2, SINGLE_HOLD,
DOUBLE_TAP = 3, DOUBLE_TAP,
DOUBLE_HOLD = 4, DOUBLE_HOLD,
DOUBLE_SINGLE_TAP = 5, //send two single taps DOUBLE_SINGLE_TAP, // Send two single taps
TRIPLE_TAP = 6, TRIPLE_TAP,
TRIPLE_HOLD = 7 TRIPLE_HOLD
}; };
//Tap dance enums // Tap dance enums
enum { enum {
X_CTL = 0, X_CTL,
SOME_OTHER_DANCE SOME_OTHER_DANCE
}; };
int cur_dance (qk_tap_dance_state_t *state); uint8_t cur_dance(qk_tap_dance_state_t *state);
//for the x tap dance. Put it here so it can be used in any keymap
void x_finished (qk_tap_dance_state_t *state, void *user_data);
void x_reset (qk_tap_dance_state_t *state, void *user_data);
// For the x tap dance. Put it here so it can be used in any keymap
void x_finished(qk_tap_dance_state_t *state, void *user_data);
void x_reset(qk_tap_dance_state_t *state, void *user_data);
``` ```
Now, at the bottom of your `keymap.c` file, you'll need to add the following: Now, at the bottom of your `keymap.c` file, you'll need to add the following:
@@ -267,65 +262,62 @@ Now, at the bottom of your `keymap.c` file, you'll need to add the following:
* For the third point, there does exist the 'DOUBLE_SINGLE_TAP', however this is not fully tested * For the third point, there does exist the 'DOUBLE_SINGLE_TAP', however this is not fully tested
* *
*/ */
int cur_dance (qk_tap_dance_state_t *state) { uint8_t cur_dance(qk_tap_dance_state_t *state) {
if (state->count == 1) { if (state->count == 1) {
if (state->interrupted || !state->pressed) return SINGLE_TAP; if (state->interrupted || !state->pressed) return SINGLE_TAP;
//key has not been interrupted, but they key is still held. Means you want to send a 'HOLD'. // Key has not been interrupted, but the key is still held. Means you want to send a 'HOLD'.
else return SINGLE_HOLD; else return SINGLE_HOLD;
} } else if (state->count == 2) {
else if (state->count == 2) { // DOUBLE_SINGLE_TAP is to distinguish between typing "pepper", and actually wanting a double tap
/* // action when hitting 'pp'. Suggested use case for this return value is when you want to send two
* DOUBLE_SINGLE_TAP is to distinguish between typing "pepper", and actually wanting a double tap // keystrokes of the key, and not the 'double tap' action/macro.
* action when hitting 'pp'. Suggested use case for this return value is when you want to send two if (state->interrupted) return DOUBLE_SINGLE_TAP;
* keystrokes of the key, and not the 'double tap' action/macro. else if (state->pressed) return DOUBLE_HOLD;
*/ else return DOUBLE_TAP;
if (state->interrupted) return DOUBLE_SINGLE_TAP; }
else if (state->pressed) return DOUBLE_HOLD;
else return DOUBLE_TAP; // Assumes no one is trying to type the same letter three times (at least not quickly).
} // If your tap dance key is 'KC_W', and you want to type "www." quickly - then you will need to add
//Assumes no one is trying to type the same letter three times (at least not quickly). // an exception here to return a 'TRIPLE_SINGLE_TAP', and define that enum just like 'DOUBLE_SINGLE_TAP'
//If your tap dance key is 'KC_W', and you want to type "www." quickly - then you will need to add if (state->count == 3) {
//an exception here to return a 'TRIPLE_SINGLE_TAP', and define that enum just like 'DOUBLE_SINGLE_TAP' if (state->interrupted || !state->pressed) return TRIPLE_TAP;
if (state->count == 3) { else return TRIPLE_HOLD;
if (state->interrupted || !state->pressed) return TRIPLE_TAP; } else return 8; // Magic number. At some point this method will expand to work for more presses
else return TRIPLE_HOLD;
}
else return 8; //magic number. At some point this method will expand to work for more presses
} }
//instanalize an instance of 'tap' for the 'x' tap dance. // Create an instance of 'tap' for the 'x' tap dance.
static tap xtap_state = { static tap xtap_state = {
.is_press_action = true, .is_press_action = true,
.state = 0 .state = 0
}; };
void x_finished (qk_tap_dance_state_t *state, void *user_data) { void x_finished(qk_tap_dance_state_t *state, void *user_data) {
xtap_state.state = cur_dance(state); xtap_state.state = cur_dance(state);
switch (xtap_state.state) { switch (xtap_state.state) {
case SINGLE_TAP: register_code(KC_X); break; case SINGLE_TAP: register_code(KC_X); break;
case SINGLE_HOLD: register_code(KC_LCTRL); break; case SINGLE_HOLD: register_code(KC_LCTRL); break;
case DOUBLE_TAP: register_code(KC_ESC); break; case DOUBLE_TAP: register_code(KC_ESC); break;
case DOUBLE_HOLD: register_code(KC_LALT); break; case DOUBLE_HOLD: register_code(KC_LALT); break;
case DOUBLE_SINGLE_TAP: register_code(KC_X); unregister_code(KC_X); register_code(KC_X); // Last case is for fast typing. Assuming your key is `f`:
//Last case is for fast typing. Assuming your key is `f`: // For example, when typing the word `buffer`, and you want to make sure that you send `ff` and not `Esc`.
//For example, when typing the word `buffer`, and you want to make sure that you send `ff` and not `Esc`. // In order to type `ff` when typing fast, the next character will have to be hit within the `TAPPING_TERM`, which by default is 200ms.
//In order to type `ff` when typing fast, the next character will have to be hit within the `TAPPING_TERM`, which by default is 200ms. case DOUBLE_SINGLE_TAP: tap_code(KC_X); register_code(KC_X);
} }
} }
void x_reset (qk_tap_dance_state_t *state, void *user_data) { void x_reset(qk_tap_dance_state_t *state, void *user_data) {
switch (xtap_state.state) { switch (xtap_state.state) {
case SINGLE_TAP: unregister_code(KC_X); break; case SINGLE_TAP: unregister_code(KC_X); break;
case SINGLE_HOLD: unregister_code(KC_LCTRL); break; case SINGLE_HOLD: unregister_code(KC_LCTRL); break;
case DOUBLE_TAP: unregister_code(KC_ESC); break; case DOUBLE_TAP: unregister_code(KC_ESC); break;
case DOUBLE_HOLD: unregister_code(KC_LALT); case DOUBLE_HOLD: unregister_code(KC_LALT);
case DOUBLE_SINGLE_TAP: unregister_code(KC_X); case DOUBLE_SINGLE_TAP: unregister_code(KC_X);
} }
xtap_state.state = 0; xtap_state.state = 0;
} }
qk_tap_dance_action_t tap_dance_actions[] = { qk_tap_dance_action_t tap_dance_actions[] = {
[X_CTL] = ACTION_TAP_DANCE_FN_ADVANCED(NULL,x_finished, x_reset) [X_CTL] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, x_finished, x_reset)
}; };
``` ```
@@ -335,90 +327,91 @@ If you want to implement this in your userspace, then you may want to check out
> In this configuration "hold" takes place **after** tap dance timeout (see `ACTION_TAP_DANCE_FN_ADVANCED_TIME`). To achieve instant hold, remove `state->interrupted` checks in conditions. As a result you may use comfortable longer tapping periods to have more time for taps and not to wait too long for holds (try starting with doubled `TAPPING_TERM`). > In this configuration "hold" takes place **after** tap dance timeout (see `ACTION_TAP_DANCE_FN_ADVANCED_TIME`). To achieve instant hold, remove `state->interrupted` checks in conditions. As a result you may use comfortable longer tapping periods to have more time for taps and not to wait too long for holds (try starting with doubled `TAPPING_TERM`).
### Example 5: Using tap dance for advanced mod-tap and layer-tap keys :id=example-5-using-tap-dance-for-advanced-mod-tap-and-layer-tap-keys #### Example 5: Using tap dance for advanced mod-tap and layer-tap keys :id=example-5
Tap dance can be used to emulate `MT()` and `LT()` behavior when the tapped code is not a basic keycode. This is useful to send tapped keycodes that normally require `Shift`, such as parentheses or curly braces—or other modified keycodes, such as `Control + X`. Tap dance can be used to emulate `MT()` and `LT()` behavior when the tapped code is not a basic keycode. This is useful to send tapped keycodes that normally require `Shift`, such as parentheses or curly braces—or other modified keycodes, such as `Control + X`.
Below your layers and custom keycodes, add the following: Below your layers and custom keycodes, add the following:
```c ```c
// tapdance keycodes // Tap Dance keycodes
enum td_keycodes { enum td_keycodes {
ALT_LP // Our example key: `LALT` when held, `(` when tapped. Add additional keycodes for each tapdance. ALT_LP // Our example key: `LALT` when held, `(` when tapped. Add additional keycodes for each tapdance.
}; };
// define a type containing as many tapdance states as you need // Define a type containing as many tapdance states as you need
typedef enum { typedef enum {
SINGLE_TAP, SINGLE_TAP,
SINGLE_HOLD, SINGLE_HOLD,
DOUBLE_SINGLE_TAP DOUBLE_SINGLE_TAP
} td_state_t; } td_state_t;
// create a global instance of the tapdance state type // Create a global instance of the tapdance state type
static td_state_t td_state; static td_state_t td_state;
// declare your tapdance functions: // Declare your tapdance functions:
// function to determine the current tapdance state // Function to determine the current tapdance state
int cur_dance (qk_tap_dance_state_t *state); uint8_t cur_dance(qk_tap_dance_state_t *state);
// `finished` and `reset` functions for each tapdance keycode // `finished` and `reset` functions for each tapdance keycode
void altlp_finished (qk_tap_dance_state_t *state, void *user_data); void altlp_finished(qk_tap_dance_state_t *state, void *user_data);
void altlp_reset (qk_tap_dance_state_t *state, void *user_data); void altlp_reset(qk_tap_dance_state_t *state, void *user_data);
``` ```
Below your `LAYOUT`, define each of the tapdance functions: Below your `LAYOUT`, define each of the tapdance functions:
```c ```c
// determine the tapdance state to return // Determine the tapdance state to return
int cur_dance (qk_tap_dance_state_t *state) { uint8_t cur_dance(qk_tap_dance_state_t *state) {
if (state->count == 1) { if (state->count == 1) {
if (state->interrupted || !state->pressed) { return SINGLE_TAP; } if (state->interrupted || !state->pressed) return SINGLE_TAP;
else { return SINGLE_HOLD; } else return SINGLE_HOLD;
} }
if (state->count == 2) { return DOUBLE_SINGLE_TAP; }
else { return 3; } // any number higher than the maximum state value you return above
}
// handle the possible states for each tapdance keycode you define:
void altlp_finished (qk_tap_dance_state_t *state, void *user_data) { if (state->count == 2) return DOUBLE_SINGLE_TAP;
td_state = cur_dance(state); else return 3; // Any number higher than the maximum state value you return above
switch (td_state) {
case SINGLE_TAP:
register_code16(KC_LPRN);
break;
case SINGLE_HOLD:
register_mods(MOD_BIT(KC_LALT)); // for a layer-tap key, use `layer_on(_MY_LAYER)` here
break;
case DOUBLE_SINGLE_TAP: // allow nesting of 2 parens `((` within tapping term
tap_code16(KC_LPRN);
register_code16(KC_LPRN);
}
} }
void altlp_reset (qk_tap_dance_state_t *state, void *user_data) { // Handle the possible states for each tapdance keycode you define:
switch (td_state) {
case SINGLE_TAP: void altlp_finished(qk_tap_dance_state_t *state, void *user_data) {
unregister_code16(KC_LPRN); td_state = cur_dance(state);
break; switch (td_state) {
case SINGLE_HOLD: case SINGLE_TAP:
unregister_mods(MOD_BIT(KC_LALT)); // for a layer-tap key, use `layer_off(_MY_LAYER)` here register_code16(KC_LPRN);
break; break;
case DOUBLE_SINGLE_TAP: case SINGLE_HOLD:
unregister_code16(KC_LPRN); register_mods(MOD_BIT(KC_LALT)); // For a layer-tap key, use `layer_on(_MY_LAYER)` here
} break;
case DOUBLE_SINGLE_TAP: // Allow nesting of 2 parens `((` within tapping term
tap_code16(KC_LPRN);
register_code16(KC_LPRN);
}
} }
// define `ACTION_TAP_DANCE_FN_ADVANCED()` for each tapdance keycode, passing in `finished` and `reset` functions void altlp_reset(qk_tap_dance_state_t *state, void *user_data) {
switch (td_state) {
case SINGLE_TAP:
unregister_code16(KC_LPRN);
break;
case SINGLE_HOLD:
unregister_mods(MOD_BIT(KC_LALT)); // For a layer-tap key, use `layer_off(_MY_LAYER)` here
break;
case DOUBLE_SINGLE_TAP:
unregister_code16(KC_LPRN);
}
}
// Define `ACTION_TAP_DANCE_FN_ADVANCED()` for each tapdance keycode, passing in `finished` and `reset` functions
qk_tap_dance_action_t tap_dance_actions[] = { qk_tap_dance_action_t tap_dance_actions[] = {
[ALT_LP] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, altlp_finished, altlp_reset) [ALT_LP] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, altlp_finished, altlp_reset)
}; };
``` ```
Wrap each tapdance keycode in `TD()` when including it in your keymap, e.g. `TD(ALT_LP)`. Wrap each tapdance keycode in `TD()` when including it in your keymap, e.g. `TD(ALT_LP)`.
### Example 6: Using tap dance for momentary-layer-switch and layer-toggle keys #### Example 6: Using tap dance for momentary-layer-switch and layer-toggle keys :id=example-6
Tap Dance can be used to mimic MO(layer) and TG(layer) functionality. For this example, we will set up a key to function as `KC_QUOT` on single-tap, as `MO(_MY_LAYER)` on single-hold, and `TG(_MY_LAYER)` on double-tap. Tap Dance can be used to mimic MO(layer) and TG(layer) functionality. For this example, we will set up a key to function as `KC_QUOT` on single-tap, as `MO(_MY_LAYER)` on single-hold, and `TG(_MY_LAYER)` on double-tap.
@@ -426,97 +419,92 @@ The first step is to include the following code towards the beginning of your `k
```c ```c
typedef struct { typedef struct {
bool is_press_action; bool is_press_action;
int state; uint8_t state;
} tap; } tap;
//Define a type for as many tap dance states as you need // Define a type for as many tap dance states as you need
enum { enum {
SINGLE_TAP = 1, SINGLE_TAP = 1,
SINGLE_HOLD = 2, SINGLE_HOLD,
DOUBLE_TAP = 3 DOUBLE_TAP
}; };
enum { enum {
QUOT_LAYR = 0 //Our custom tap dance key; add any other tap dance keys to this enum QUOT_LAYR, // Our custom tap dance key; add any other tap dance keys to this enum
}; };
//Declare the functions to be used with your tap dance key(s) // Declare the functions to be used with your tap dance key(s)
//Function associated with all tap dances // Function associated with all tap dances
int cur_dance (qk_tap_dance_state_t *state); uint8_t cur_dance(qk_tap_dance_state_t *state);
//Functions associated with individual tap dances // Functions associated with individual tap dances
void ql_finished (qk_tap_dance_state_t *state, void *user_data); void ql_finished(qk_tap_dance_state_t *state, void *user_data);
void ql_reset (qk_tap_dance_state_t *state, void *user_data); void ql_reset(qk_tap_dance_state_t *state, void *user_data);
``` ```
Towards the bottom of your `keymap.c`, include the following code: Towards the bottom of your `keymap.c`, include the following code:
```c ```c
//Determine the current tap dance state // Determine the current tap dance state
int cur_dance (qk_tap_dance_state_t *state) { uint8_t cur_dance(qk_tap_dance_state_t *state) {
if (state->count == 1) { if (state->count == 1) {
if (!state->pressed) { if (!state->pressed) return SINGLE_TAP;
return SINGLE_TAP; else return SINGLE_HOLD;
} else { } else if (state->count == 2) return DOUBLE_TAP;
return SINGLE_HOLD; else return 8;
}
} else if (state->count == 2) {
return DOUBLE_TAP;
}
else return 8;
} }
//Initialize tap structure associated with example tap dance key // Initialize tap structure associated with example tap dance key
static tap ql_tap_state = { static tap ql_tap_state = {
.is_press_action = true, .is_press_action = true,
.state = 0 .state = 0
}; };
//Functions that control what our tap dance key does // Functions that control what our tap dance key does
void ql_finished (qk_tap_dance_state_t *state, void *user_data) { void ql_finished(qk_tap_dance_state_t *state, void *user_data) {
ql_tap_state.state = cur_dance(state); ql_tap_state.state = cur_dance(state);
switch (ql_tap_state.state) { switch (ql_tap_state.state) {
case SINGLE_TAP: case SINGLE_TAP:
tap_code(KC_QUOT); tap_code(KC_QUOT);
break; break;
case SINGLE_HOLD: case SINGLE_HOLD:
layer_on(_MY_LAYER); layer_on(_MY_LAYER);
break; break;
case DOUBLE_TAP: case DOUBLE_TAP:
//check to see if the layer is already set // Check to see if the layer is already set
if (layer_state_is(_MY_LAYER)) { if (layer_state_is(_MY_LAYER)) {
//if already set, then switch it off // If already set, then switch it off
layer_off(_MY_LAYER);
} else {
// If not already set, then switch the layer on
layer_on(_MY_LAYER);
}
break;
}
}
void ql_reset(qk_tap_dance_state_t *state, void *user_data) {
// If the key was held down and now is released then switch off the layer
if (ql_tap_state.state == SINGLE_HOLD) {
layer_off(_MY_LAYER); layer_off(_MY_LAYER);
} else { }
//if not already set, then switch the layer on ql_tap_state.state = 0;
layer_on(_MY_LAYER);
}
break;
}
} }
void ql_reset (qk_tap_dance_state_t *state, void *user_data) { // Associate our tap dance key with its functionality
//if the key was held down and now is released then switch off the layer
if (ql_tap_state.state==SINGLE_HOLD) {
layer_off(_MY_LAYER);
}
ql_tap_state.state = 0;
}
//Associate our tap dance key with its functionality
qk_tap_dance_action_t tap_dance_actions[] = { qk_tap_dance_action_t tap_dance_actions[] = {
[QUOT_LAYR] = ACTION_TAP_DANCE_FN_ADVANCED_TIME(NULL, ql_finished, ql_reset, 275) [QUOT_LAYR] = ACTION_TAP_DANCE_FN_ADVANCED_TIME(NULL, ql_finished, ql_reset, 275)
}; };
``` ```
The above code is similar to that used in previous examples. The one point to note is that we need to be able to check which layers are active at any time so we can toggle them if needed. To do this we use the `layer_state_is( layer )` function which returns `true` if the given `layer` is active. The above code is similar to that used in previous examples. The one point to note is that we need to be able to check which layers are active at any time so we can toggle them if needed. To do this we use the `layer_state_is(layer)` function which returns `true` if the given `layer` is active.
The use of `cur_dance()` and `ql_tap_state` mirrors the above examples. The use of `cur_dance()` and `ql_tap_state` mirrors the above examples.
The `case:SINGLE_TAP` in `ql_finished` is similar to the above examples. The `case:SINGLE_HOLD` works in conjunction with `ql_reset()` to switch to `_MY_LAYER` while the tap dance key is held, and to switch away from `_MY_LAYER` when the key is released. This mirrors the use of `MO(_MY_LAYER)`. The `case:DOUBLE_TAP` works by checking whether `_MY_LAYER` is the active layer, and toggling it on or off accordingly. This mirrors the use of `TG(_MY_LAYER)`. The `case:SINGLE_TAP` in `ql_finished` is similar to the above examples. The `SINGLE_HOLD` case works in conjunction with `ql_reset()` to switch to `_MY_LAYER` while the tap dance key is held, and to switch away from `_MY_LAYER` when the key is released. This mirrors the use of `MO(_MY_LAYER)`. The `DOUBLE_TAP` case works by checking whether `_MY_LAYER` is the active layer, and toggling it on or off accordingly. This mirrors the use of `TG(_MY_LAYER)`.
`tap_dance_actions[]` works similar to the above examples. Note that I used `ACTION_TAP_DANCE_FN_ADVANCED_TIME()` instead of `ACTION_TAP_DANCE_FN_ADVANCED()`. This is because I like my `TAPPING_TERM` to be short (~175ms) for my non-tap-dance keys but find that this is too quick for me to reliably complete tap dance actions - thus the increased time of 275ms here. `tap_dance_actions[]` works similar to the above examples. Note that I used `ACTION_TAP_DANCE_FN_ADVANCED_TIME()` instead of `ACTION_TAP_DANCE_FN_ADVANCED()`. This is because I like my `TAPPING_TERM` to be short (\~175ms) for my non-tap-dance keys but find that this is too quick for me to reliably complete tap dance actions - thus the increased time of 275ms here.
Finally, to get this tap dance key working, be sure to include `TD(QUOT_LAYR)` in your `keymaps[]`. Finally, to get this tap dance key working, be sure to include `TD(QUOT_LAYR)` in your `keymaps[]`.
+8 -5
View File
@@ -66,13 +66,16 @@ Then define a table like this in your keymap file:
```c ```c
const qk_ucis_symbol_t ucis_symbol_table[] = UCIS_TABLE( const qk_ucis_symbol_t ucis_symbol_table[] = UCIS_TABLE(
UCIS_SYM("poop", 0x1F4A9), // 💩 UCIS_SYM("poop", 0x1F4A9), // 💩
UCIS_SYM("rofl", 0x1F923), // 🤣 UCIS_SYM("rofl", 0x1F923), // 🤣
UCIS_SYM("kiss", 0x1F619) // 😙 UCIS_SYM("cuba", 0x1F1E8, 0x1F1FA), // 🇨🇺
UCIS_SYM("look", 0x0CA0, 0x005F, 0x0CA0), // ಠ_ಠ
); );
``` ```
To use it, call `qk_ucis_start()`. Then, type the mnemonic for the character (such as "rofl"), and hit Space or Enter. QMK should erase the "rofl" text and insert the laughing emoji. By default, each table entry may be up to 3 code points long. This number can be changed by adding `#define UCIS_MAX_CODE_POINTS n` to your `config.h` file.
To use UCIS input, call `qk_ucis_start()`. Then, type the mnemonic for the character (such as "rofl") and hit Space, Enter or Esc. QMK should erase the "rofl" text and insert the laughing emoji.
### Customization ### Customization
@@ -90,7 +93,7 @@ Unicode input in QMK works by inputting a sequence of characters to the OS, sort
The following input modes are available: The following input modes are available:
* **`UC_MAC`**: macOS built-in Unicode hex input. Supports code points up to `0xFFFF` (`0x10FFFF` with Unicode Map). * **`UC_MAC`**: macOS built-in Unicode hex input. Supports code points up to `0x10FFFF` (all possible code points).
To enable, go to _System Preferences > Keyboard > Input Sources_, add _Unicode Hex Input_ to the list (it's under _Other_), then activate it from the input dropdown in the Menu Bar. To enable, go to _System Preferences > Keyboard > Input Sources_, add _Unicode Hex Input_ to the list (it's under _Other_), then activate it from the input dropdown in the Menu Bar.
By default, this mode uses the left Option key (`KC_LALT`) for Unicode input, but this can be changed by defining [`UNICODE_KEY_MAC`](#input-key-configuration) with another keycode. By default, this mode uses the left Option key (`KC_LALT`) for Unicode input, but this can be changed by defining [`UNICODE_KEY_MAC`](#input-key-configuration) with another keycode.
+4 -4
View File
@@ -1,6 +1,6 @@
# Userspace: Sharing Code Between Keymaps # Userspace: Sharing Code Between Keymaps
If you use more than one keyboard with a similar keymap, you might see the benefit in being able to share code between them. Create your own folder in `users/` named the same as your keymap (ideally your github username, `<name>`) with the following structure: If you use more than one keyboard with a similar keymap, you might see the benefit in being able to share code between them. Create your own folder in `users/` named the same as your keymap (ideally your GitHub username, `<name>`) with the following structure:
* `/users/<name>/` (added to the path automatically) * `/users/<name>/` (added to the path automatically)
* `readme.md` (optional, recommended) * `readme.md` (optional, recommended)
@@ -73,7 +73,7 @@ The reason for this, is that `<name>.h` won't be added in time to add settings (
## Readme (`readme.md`) ## Readme (`readme.md`)
Please include authorship (your name, github username, email), and optionally [a license that's GPL compatible](https://www.gnu.org/licenses/license-list.html#GPLCompatibleLicenses). Please include authorship (your name, GitHub username, email), and optionally [a license that's GPL compatible](https://www.gnu.org/licenses/license-list.html#GPLCompatibleLicenses).
You can use this as a template: You can use this as a template:
``` ```
@@ -93,7 +93,7 @@ You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>. along with this program. If not, see <http://www.gnu.org/licenses/>.
``` ```
You'd want to replace the year, name, email and github username with your info. You'd want to replace the year, name, email and GitHub username with your info.
Additionally, this is a good place to document your code, if you wish to share it with others. Additionally, this is a good place to document your code, if you wish to share it with others.
@@ -111,7 +111,7 @@ This is ideal for when you want ensure everything compiles successfully when pre
## Examples ## Examples
For a brief example, checkout [`/users/_example/`](https://github.com/qmk/qmk_firmware/tree/master/users/drashna). For a brief example, checkout [`/users/_example/`](https://github.com/qmk/qmk_firmware/tree/master/users/_example).
For a more complicated example, checkout [`/users/drashna/`](https://github.com/qmk/qmk_firmware/tree/master/users/drashna)'s userspace. For a more complicated example, checkout [`/users/drashna/`](https://github.com/qmk/qmk_firmware/tree/master/users/drashna)'s userspace.
+3 -3
View File
@@ -4,8 +4,8 @@
[![Statut du build](https://travis-ci.org/qmk/qmk_firmware.svg?branch=master)](https://travis-ci.org/qmk/qmk_firmware) [![Statut du build](https://travis-ci.org/qmk/qmk_firmware.svg?branch=master)](https://travis-ci.org/qmk/qmk_firmware)
[![Discord](https://img.shields.io/discord/440868230475677696.svg)](https://discord.gg/Uq7gcHh) [![Discord](https://img.shields.io/discord/440868230475677696.svg)](https://discord.gg/Uq7gcHh)
[![Statut de la doc](https://img.shields.io/badge/docs-ready-orange.svg)](https://docs.qmk.fm) [![Statut de la doc](https://img.shields.io/badge/docs-ready-orange.svg)](https://docs.qmk.fm)
[![Contributeurs Github](https://img.shields.io/github/contributors/qmk/qmk_firmware.svg)](https://github.com/qmk/qmk_firmware/pulse/monthly) [![Contributeurs GitHub](https://img.shields.io/github/contributors/qmk/qmk_firmware.svg)](https://github.com/qmk/qmk_firmware/pulse/monthly)
[![Forks Github](https://img.shields.io/github/forks/qmk/qmk_firmware.svg?style=social&label=Fork)](https://github.com/qmk/qmk_firmware/) [![Forks GitHub](https://img.shields.io/github/forks/qmk/qmk_firmware.svg?style=social&label=Fork)](https://github.com/qmk/qmk_firmware/)
## Qu'est-ce que QMK Firmware ? ## Qu'est-ce que QMK Firmware ?
@@ -13,7 +13,7 @@ QMK (*Quantum Mechanical Keyboard*) est une communauté open source qui maintien
## Comment l'obtenir ## Comment l'obtenir
Si vous souhaitez contribuer à une disposition de clavier (keymap), ou à des fonctionnalités de QMK alors le plus simple est de [forker le dépôt avec Github](https://github.com/qmk/qmk_firmware#fork-destination-box) puis cloner le dépôt localement pour y faire des changements. Vous pourrez pousser vos changements sur github puis ouvrir un [Pull Request](https://github.com/qmk/qmk_firmware/pulls) depuis votre fork Github. Si vous souhaitez contribuer à une disposition de clavier (keymap), ou à des fonctionnalités de QMK alors le plus simple est de [forker le dépôt avec GitHub](https://github.com/qmk/qmk_firmware#fork-destination-box) puis cloner le dépôt localement pour y faire des changements. Vous pourrez pousser vos changements sur GitHub puis ouvrir un [Pull Request](https://github.com/qmk/qmk_firmware/pulls) depuis votre fork GitHub.
Sinon, vous pouvez aussi le télécharger directement en ([zip](https://github.com/qmk/qmk_firmware/zipball/master), [tar](https://github.com/qmk/qmk_firmware/tarball/master)), ou le cloner avec git en ssh (`[email protected]:qmk/qmk_firmware.git`), ou https (`https://github.com/qmk/qmk_firmware.git`). Sinon, vous pouvez aussi le télécharger directement en ([zip](https://github.com/qmk/qmk_firmware/zipball/master), [tar](https://github.com/qmk/qmk_firmware/tarball/master)), ou le cloner avec git en ssh (`[email protected]:qmk/qmk_firmware.git`), ou https (`https://github.com/qmk/qmk_firmware.git`).
+1 -1
View File
@@ -101,7 +101,7 @@ Ceci est fait immédiatement après la fusion de la branche `future` précédent
* [ ] Regroupe ChangeLog dans un fichier. * [ ] Regroupe ChangeLog dans un fichier.
* [ ] `git commit -m 'Merge point for <DATE> Breaking Change'` * [ ] `git commit -m 'Merge point for <DATE> Breaking Change'`
* [ ] `git push origin future` * [ ] `git push origin future`
* Actions sur Github * Actions sur GitHub
* [ ] Crée un PR pour `future` * [ ] Crée un PR pour `future`
* [ ] S'assurer que Travis ne relève aucun problème * [ ] S'assurer que Travis ne relève aucun problème
* [ ] Fusion le PR `future` * [ ] Fusion le PR `future`
+2 -2
View File
@@ -6,11 +6,11 @@ GitHub peut être un peu compliqué pour ceux qui n'y sont pas familier. Ce guid
Commencez par la [page GitHub de QMK](https://github.com/qmk/qmk_firmware), et vous verrez un bouton dans le coin en haut à droite qui indique "Fork": Commencez par la [page GitHub de QMK](https://github.com/qmk/qmk_firmware), et vous verrez un bouton dans le coin en haut à droite qui indique "Fork":
![Fork on Github](http://i.imgur.com/8Toomz4.jpg) ![Fork on GitHub](http://i.imgur.com/8Toomz4.jpg)
Si vous faites partie d'une organisation, vous aurez besoin de savoir quel compte utiliser pour le fork. Dans la plupart des cas, vous voudrez créer le fork dans votre compte personnel. Une fois le fork complet (cela peut quelques fois prendre un peu de temps), appuyez sur le bouton "Clone or download": Si vous faites partie d'une organisation, vous aurez besoin de savoir quel compte utiliser pour le fork. Dans la plupart des cas, vous voudrez créer le fork dans votre compte personnel. Une fois le fork complet (cela peut quelques fois prendre un peu de temps), appuyez sur le bouton "Clone or download":
![Download from Github](http://i.imgur.com/N1NYcSz.jpg) ![Download from GitHub](http://i.imgur.com/N1NYcSz.jpg)
Faites attention à sélectionner "HTTPS", et sélectionnez le lien et copiez-le: Faites attention à sélectionner "HTTPS", et sélectionnez le lien et copiez-le:
+1 -1
View File
@@ -44,7 +44,7 @@ git pull upstream master
git push origin master git push origin master
``` ```
Cela vous change la branche courante en master, synchronise les données de références du dépôt QMK vers votre ordinateur. La commande pull tire les données de références vers votre branche courante puis les y téleverse. La commande push permet de pousser la branche courante (master) vers votre fork github. Cela vous change la branche courante en master, synchronise les données de références du dépôt QMK vers votre ordinateur. La commande pull tire les données de références vers votre branche courante puis les y téleverse. La commande push permet de pousser la branche courante (master) vers votre fork GitHub.
### Faire des changements ### Faire des changements
+6 -6
View File
@@ -1,16 +1,16 @@
# How to Use Github with QMK # How to Use GitHub with QMK
Github can be a little tricky to those that aren't familiar with it - this guide will walk through each step of forking, cloning, and submitting a pull request with QMK. GitHub can be a little tricky to those that aren't familiar with it - this guide will walk through each step of forking, cloning, and submitting a pull request with QMK.
?> This guide assumes you're somewhat comfortable with running things at the command line, and have git installed on your system. ?> This guide assumes you're somewhat comfortable with running things at the command line, and have git installed on your system.
Start on the [QMK Github page](https://github.com/qmk/qmk_firmware), and you'll see a button in the upper right that says "Fork": Start on the [QMK GitHub page](https://github.com/qmk/qmk_firmware), and you'll see a button in the upper right that says "Fork":
![Fork on Github](http://i.imgur.com/8Toomz4.jpg) ![Fork on GitHub](http://i.imgur.com/8Toomz4.jpg)
If you're a part of an organization, you'll need to choose which account to fork it to. In most circumstances, you'll want to fork it to your personal account. Once your fork is completed (sometimes this takes a little while), click the "Clone or Download" button: If you're a part of an organization, you'll need to choose which account to fork it to. In most circumstances, you'll want to fork it to your personal account. Once your fork is completed (sometimes this takes a little while), click the "Clone or Download" button:
![Download from Github](http://i.imgur.com/N1NYcSz.jpg) ![Download from GitHub](http://i.imgur.com/N1NYcSz.jpg)
And be sure to select "HTTPS", and select the link and copy it: And be sure to select "HTTPS", and select the link and copy it:
@@ -54,7 +54,7 @@ To https://github.com/whoeveryouare/qmk_firmware.git
+ 20043e64...7da94ac5 master -> master + 20043e64...7da94ac5 master -> master
``` ```
Your changes now exist on your fork on Github - if you go back there (`https://github.com/<whoeveryouare>/qmk_firmware`), you can create a "New Pull Request" by clicking this button: Your changes now exist on your fork on GitHub - if you go back there (`https://github.com/<whoeveryouare>/qmk_firmware`), you can create a "New Pull Request" by clicking this button:
![New Pull Request](http://i.imgur.com/DxMHpJ8.jpg) ![New Pull Request](http://i.imgur.com/DxMHpJ8.jpg)
+1 -1
View File
@@ -14,7 +14,7 @@ QMK (*Quantum Mechanical Keyboard*) היא קהילת קוד פתוח (open sour
## איך להשיג אותה ## איך להשיג אותה
אם אתם מתכננים לתרום מיפוי מקשים, מקלדת או יכולת ל QMK, הדבר הקל ביותר הוא [לעשות פורק לריפו בGithub](https://github.com/qmk/qmk_firmware#fork-destination-box), ולעשות קלון לריפו בסביבה המקומית ושם לבצע את השינויים שלכם, לדחוף אותם ולפתוח [Pull Request](https://github.com/qmk/qmk_firmware/pulls) מהפורק שלך. אם אתם מתכננים לתרום מיפוי מקשים, מקלדת או יכולת ל QMK, הדבר הקל ביותר הוא [לעשות פורק לריפו בGitHub](https://github.com/qmk/qmk_firmware#fork-destination-box), ולעשות קלון לריפו בסביבה המקומית ושם לבצע את השינויים שלכם, לדחוף אותם ולפתוח [Pull Request](https://github.com/qmk/qmk_firmware/pulls) מהפורק שלך.
אחרת, אפשר להוריד את הקושחה באופן ישיר ([zip](https://github.com/qmk/qmk_firmware/zipball/master), [tar](https://github.com/qmk/qmk_firmware/tarball/master)), או לשכפל אותה באמצעות git (`[email protected]:qmk/qmk_firmware.git`), או https (`https://github.com/qmk/qmk_firmware.git`). אחרת, אפשר להוריד את הקושחה באופן ישיר ([zip](https://github.com/qmk/qmk_firmware/zipball/master), [tar](https://github.com/qmk/qmk_firmware/tarball/master)), או לשכפל אותה באמצעות git (`[email protected]:qmk/qmk_firmware.git`), או https (`https://github.com/qmk/qmk_firmware.git`).
+2 -2
View File
@@ -5,7 +5,7 @@
* [מקורות ללמידה](he-il/newbs_learn_more_resources.md) * [מקורות ללמידה](he-il/newbs_learn_more_resources.md)
* [בסיס QMK](he-il/README.md) * [בסיס QMK](he-il/README.md)
* [מבוא לQMK](he-il/getting_started_introduction.md) * [מבוא לQMK](he-il/getting_started_introduction.md)
* [איך להשתמש בGithub](he-il/getting_started_github.md) * [איך להשתמש בGitHub](he-il/getting_started_github.md)
* [קבלת עזרה](he-il/getting_started_getting_help.md) * [קבלת עזרה](he-il/getting_started_getting_help.md)
* [שאלות נפוצות](he-il/faq.md) * [שאלות נפוצות](he-il/faq.md)
* [שאלות נפוצות כלליות](he-il/faq_general.md) * [שאלות נפוצות כלליות](he-il/faq_general.md)
@@ -27,7 +27,7 @@
* [QMK CLI](he-il/cli.md) * [QMK CLI](he-il/cli.md)
* [QMK CLI Config](he-il/cli_configuration.md) * [QMK CLI Config](he-il/cli_configuration.md)
* [תרומה ל QMK](he-il/contributing.md) * [תרומה ל QMK](he-il/contributing.md)
* [איך להשתמש בGithub](he-il/getting_started_github.md) * [איך להשתמש בGitHub](he-il/getting_started_github.md)
* [קבלת עזרה](he-il/getting_started_getting_help.md) * [קבלת עזרה](he-il/getting_started_getting_help.md)
* [שינויים משמעותיים](he-il/breaking_changes.md) * [שינויים משמעותיים](he-il/breaking_changes.md)
+1 -1
View File
@@ -11,7 +11,7 @@
הפורום הרשמי של QMK נמצא ב - [/r/olkb](https://reddit.com/r/olkb) באתר [reddit.com](https://reddit.com). הפורום הרשמי של QMK נמצא ב - [/r/olkb](https://reddit.com/r/olkb) באתר [reddit.com](https://reddit.com).
## סוגיות Github ## סוגיות GitHub
ניתן לפתוח [סוגייה ב-GitHub](https://github.com/qmk/qmk_firmware/issues). הדבר שימושי במיוחד כאשר הסוגיה דורשת דיון עמוק וארוך או דיבאגינג. ניתן לפתוח [סוגייה ב-GitHub](https://github.com/qmk/qmk_firmware/issues). הדבר שימושי במיוחד כאשר הסוגיה דורשת דיון עמוק וארוך או דיבאגינג.
</div> </div>
+5 -5
View File
@@ -1,17 +1,17 @@
<div dir="rtl" markdown="1"> <div dir="rtl" markdown="1">
# איך להשתמש ב-Github עם QMK # איך להשתמש ב-GitHub עם QMK
Github עלול להיות קצת טריקי למי שלא מכיר את העבודה איתו - מדריך זה ילווה אתכם שלב אחר שלב דרך ביצוע פעולות fork, clone ו-pull request עם QMK. GitHub עלול להיות קצת טריקי למי שלא מכיר את העבודה איתו - מדריך זה ילווה אתכם שלב אחר שלב דרך ביצוע פעולות fork, clone ו-pull request עם QMK.
?> מדריך זה מניח שאתם מרגישים בנוח עם הרצה של פקודות בסביבת command line (שורת הפקודה) ו-git מותקן במערכת שלכם. ?> מדריך זה מניח שאתם מרגישים בנוח עם הרצה של פקודות בסביבת command line (שורת הפקודה) ו-git מותקן במערכת שלכם.
התחילו ב- [עמוד של QMK ב-Github](https://github.com/qmk/qmk_firmware), ותצמאו כפתור בחלק העליון מימין עם התיכוב "Fork": התחילו ב- [עמוד של QMK ב-GitHub](https://github.com/qmk/qmk_firmware), ותצמאו כפתור בחלק העליון מימין עם התיכוב "Fork":
![Fork ב-Github](http://i.imgur.com/8Toomz4.jpg) ![Fork ב-GitHub](http://i.imgur.com/8Toomz4.jpg)
אם אתם חלק מארגון, תצטרכו לבחור לאיזה חשבון לבצע פעולת fork. ברוב המבקרים, תרצו לבצע fork לתוך החשבון הפרטי שלכם. ברגע שה-fork הסתיים (לפעמים זה יכול לקחת קצת זמן) הקליקו על כפתור ה-"Clone or Download": אם אתם חלק מארגון, תצטרכו לבחור לאיזה חשבון לבצע פעולת fork. ברוב המבקרים, תרצו לבצע fork לתוך החשבון הפרטי שלכם. ברגע שה-fork הסתיים (לפעמים זה יכול לקחת קצת זמן) הקליקו על כפתור ה-"Clone or Download":
![הורדה מ-Github](http://i.imgur.com/N1NYcSz.jpg) ![הורדה מ-GitHub](http://i.imgur.com/N1NYcSz.jpg)
תוודאו שאתם בוחרים באופצייה של "HTTPS", בחרו את הקישור והעתיקו אותו: תוודאו שאתם בוחרים באופצייה של "HTTPS", בחרו את הקישור והעתיקו אותו:
+1 -1
View File
@@ -113,7 +113,7 @@ compile.keymap: skully -> None
|-----|---------------|-------------| |-----|---------------|-------------|
| user.keyboard | None | キーボードのパス (例: `clueboard/66/rev4`) | | user.keyboard | None | キーボードのパス (例: `clueboard/66/rev4`) |
| user.keymap | None | キーマップ名 (例: `default`) | | user.keymap | None | キーマップ名 (例: `default`) |
| user.name | None | ユーザの github のユーザ名。 | | user.name | None | ユーザの GitHub のユーザ名。 |
# 全ての設定オプション # 全ての設定オプション
+4 -4
View File
@@ -62,7 +62,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
case KC_ENTER: case KC_ENTER:
// enter が押された時に音を再生します // enter が押された時に音を再生します
if (record->event.pressed) { if (record->event.pressed) {
PLAY_NOTE_ARRAY(tone_qwerty); PLAY_SONG(tone_qwerty);
} }
return true; // QMK に enter のプレスまたはリリースイベントを送信させます return true; // QMK に enter のプレスまたはリリースイベントを送信させます
default: default:
@@ -440,7 +440,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
case KC_ENTER: case KC_ENTER:
// enter が押された時に音を再生します // enter が押された時に音を再生します
if (record->event.pressed) { if (record->event.pressed) {
PLAY_NOTE_ARRAY(tone_qwerty); PLAY_SONG(tone_qwerty);
} }
return true; // QMK に enter のプレスまたはリリースイベントを送信させます return true; // QMK に enter のプレスまたはリリースイベントを送信させます
case RGB_LYR: // これにより、アンダーグローをレイヤー表示として、あるいは通常通りに使うことができます。 case RGB_LYR: // これにより、アンダーグローをレイヤー表示として、あるいは通常通りに使うことができます。
@@ -511,7 +511,7 @@ void eeconfig_init_user(void) { // EEPROM がリセットされます!
キーコードに基づいて `TAPPING_TERM` を変更するには、次のようなものを `keymap.c` ファイルに追加します: キーコードに基づいて `TAPPING_TERM` を変更するには、次のようなものを `keymap.c` ファイルに追加します:
```c ```c
uint16_t get_tapping_term(uint16_t keycode) { uint16_t get_tapping_term(uint16_t keycode, keyrecord_t *record) {
switch (keycode) { switch (keycode) {
case SFT_T(KC_SPC): case SFT_T(KC_SPC):
return TAPPING_TERM + 1250; return TAPPING_TERM + 1250;
@@ -528,7 +528,7 @@ uint16_t get_tapping_term(uint16_t keycode) {
キーコードに基づいて `IGNORE_MOD_TAP_INTERRUPT` の値を変更するには、次のようなものを `keymap.c` ファイルに追加します: キーコードに基づいて `IGNORE_MOD_TAP_INTERRUPT` の値を変更するには、次のようなものを `keymap.c` ファイルに追加します:
```c ```c
bool get_ignore_mod_tap_interrupt(uint16_t keycode) { bool get_ignore_mod_tap_interrupt(uint16_t keycode, keyrecord_t *record) {
switch (keycode) { switch (keycode) {
case SFT_T(KC_SPC): case SFT_T(KC_SPC):
return true; return true;
+127
View File
@@ -0,0 +1,127 @@
# マウスキー
<!---
original document: 0.8.141:docs/feature_mouse_keys.md
git diff 0.8.141 HEAD -- docs/feature_mouse_keys.md | cat
-->
マウスキーは、キーボードを使ってマウスをエミュレートできる機能です。様々な速度でポインタを移動し、5つのボタンを押し、8方向にスクロールすることができます。
## キーボードにマウスキーを追加
マウスキーを使うためには、少なくともマウスキーサポートを有効にし、マウスアクションをキーボードのキーにマップする必要があります。
### マウスキーを有効にする
マウスキーを有効にするには、キーマップの `rules.mk` に以下の行を追加します:
```c
MOUSEKEY_ENABLE = yes
```
### マウスアクションのマッピング
キーマップでキー押下をマウスアクションにマップするために、以下のキーコードを使うことができます:
| キー | エイリアス | 説明 |
|----------------|---------|-----------------|
| `KC_MS_UP` | `KC_MS_U` | カーソルを上に移動 |
| `KC_MS_DOWN` | `KC_MS_D` | カーソルを下に移動 |
| `KC_MS_LEFT` | `KC_MS_L` | カーソルを左に移動 |
| `KC_MS_RIGHT` | `KC_MS_R` | カーソルを右に移動 |
| `KC_MS_BTN1` | `KC_BTN1` | ボタン1を押す |
| `KC_MS_BTN2` | `KC_BTN2` | ボタン2を押す |
| `KC_MS_BTN3` | `KC_BTN3` | ボタン3を押す |
| `KC_MS_BTN4` | `KC_BTN4` | ボタン4を押す |
| `KC_MS_BTN5` | `KC_BTN5` | ボタン5を押す |
| `KC_MS_WH_UP` | `KC_WH_U` | ホイールを向こう側に回転 |
| `KC_MS_WH_DOWN` | `KC_WH_D` | ホイールを手前側に回転 |
| `KC_MS_WH_LEFT` | `KC_WH_L` | ホイールを左に倒す |
| `KC_MS_WH_RIGHT` | `KC_WH_R` | ホイールを右に倒す |
| `KC_MS_ACCEL0` | `KC_ACL0` | 速度を0に設定 |
| `KC_MS_ACCEL1` | `KC_ACL1` | 速度を1に設定 |
| `KC_MS_ACCEL2` | `KC_ACL2` | 速度を2に設定 |
## マウスキーの設定
マウスキーはカーソルを移動するための2つの異なるモードをサポートします:
* **加速 (デフォルト):** 移動キーを押したままにすると、カーソルが最大速度に達するまでカーソルを加速します。
* **定速:** 移動キーを押したままにすると、カーソルを一定の速度で移動します。
同じ原則がスクロールにも適用されます。
時間、間隔、遅延の設定オプションは、ミリ秒で指定されます。スクロール速度はデフォルトスクロールステップの倍数として渡されます。例えば、スクロール速度8は、各スクロールアクションがオペレーティングシステムまたはアプリケーションで定義されるデフォルトのスクロールステップの8倍の距離進むことを意味します。
### 加速モード
これはデフォルトのモードです。キーマップの `config.h` ファイルの以下の設定を使ってカーソルとスクロールの加速を調整することができます:
| 定義 | デフォルト | 説明 |
|----------------------------|-------|---------------------------------------------------------|
| `MOUSEKEY_DELAY` | 300 | 移動キーを押してからカーソルが移動するまでの遅延 |
| `MOUSEKEY_INTERVAL` | 50 | カーソル移動間の時間 |
| `MOUSEKEY_MAX_SPEED` | 10 | 加速が停止する最大のカーソル速度 |
| `MOUSEKEY_TIME_TO_MAX` | 20 | 最大カーソル速度に達するまでの時間 |
| `MOUSEKEY_WHEEL_DELAY` | 300 | ホイールキーを押してからホイールが動くまでの遅延 |
| `MOUSEKEY_WHEEL_INTERVAL` | 100 | ホイールの動きの間の時間 |
| `MOUSEKEY_WHEEL_MAX_SPEED` | 8 | スクロールアクションごとのスクロールステップの最大数 |
| `MOUSEKEY_WHEEL_TIME_TO_MAX` | 40 | 最大スクロール速度に達するまでの時間 |
ヒント:
* `MOUSEKEY_DELAY` の設定が低すぎるとカーソルが応答しなくなります。設定が高すぎると小さな動きが難しくなります。
* カーソルの動きをスムーズにするには、`MOUSEKEY_INTERVAL` の値を低くします。ディスプレイのリフレッシュレートが60Hzの場合、`16` (1/60) に設定することができます。これによりカーソルの速度が大幅に向上するため、`MOUSEKEY_MAX_SPEED` を下げた方が良いかもしれません。
* `MOUSEKEY_TIME_TO_MAX` または `MOUSEKEY_WHEEL_TIME_TO_MAX` を `0` に設定すると、それぞれカーソルの速度またはスクロールの加速が無効になります。この方法では、一方を加速しながら他方を一定にすることができますが、これは定速モードでは不可能です。
* `MOUSEKEY_WHEEL_INTERVAL` の設定が低すぎるとスクロールがとても速くなります。設定が高すぎるとホイールキーを押したままにした時にスクロールがとても遅くなります
カーソルの加速は、X Window System MouseKeysAccel 機能と同じアルゴリズムを使います。詳細については [Wikipedia](https://en.wikipedia.org/wiki/Mouse_keys) をご覧ください。
### 定速モード
このモードでは、カーソルおよびマウスホイールの両方について複数の異なる速度を定義することができます。加速はありません。`KC_ACL0`、`KC_ACL1` および `KC_ACL2` は、カーソルとスクロールの速度をそれぞれの設定に変更します。
速度の選択は、一時的とタップ選択のどちらかを選べます:
* **一時的:** 選択された速度は、それぞれのキーを押している間のみアクティブになります。キーを放すと、マウスキーは変更される前の速度に戻ります。
* **タップ選択:** それぞれのキーを押すと選択された速度がアクティブになり、キーを放した後もアクティブのままになります。デフォルトの速度は `KC_ACL1` です。未変更の速度はありません。
最も遅い速度から最も速い速度までのデフォルトの速度は以下の通りです:
* **一時的:** `KC_ACL0` < `KC_ACL1` < *変更無し* < `KC_ACL2`
* **タップ選択:** `KC_ACL0` < `KC_ACL1` < `KC_ACL2`
定速モードを使うには、少なくともキーマップの keymaps ディレクトリの `config.h` ファイルに `MK_3_SPEED` を定義する必要があります。
```c
#define MK_3_SPEED
```
一時的モードを有効にするには、`MK_MOMENTARY_ACCEL` も定義します:
```c
#define MK_MOMENTARY_ACCEL
```
カーソル移動あるいはスクロールを調整する場合は、以下の設定を使います:
| 定義 | デフォルト | 説明 |
|---------------------|-------------|-------------------------------------------|
| `MK_3_SPEED` | *定義なし* | 定速カーソルを有効にする |
| `MK_MOMENTARY_ACCEL` | *定義なし* | 一時的モードを有効にする |
| `MK_C_OFFSET_UNMOD` | 16 | 移動ごとのカーソルオフセット (変更無し) |
| `MK_C_INTERVAL_UNMOD` | 16 | カーソルの移動間の時間 (変更無し) |
| `MK_C_OFFSET_0` | 1 | 移動ごとのカーソルオフセット (`KC_ACL0`) |
| `MK_C_INTERVAL_0` | 32 | カーソル移動間の時間 (`KC_ACL0`) |
| `MK_C_OFFSET_1` | 4 | 移動ごとのカーソルオフセット (`KC_ACL1`) |
| `MK_C_INTERVAL_1` | 16 | カーソル移動間の時間 (`KC_ACL1`) |
| `MK_C_OFFSET_2` | 32 | 移動ごとのカーソルオフセット (`KC_ACL2`) |
| `MK_C_INTERVAL_2` | 16 | カーソル移動間の時間 (`KC_ACL2`) |
| `MK_W_OFFSET_UNMOD` | 1 | スクロールアクションごとのスクロールステップ (変更無し) |
| `MK_W_INTERVAL_UNMOD` | 40 | スクロールステップ間の時間 (変更無し) |
| `MK_W_OFFSET_0` | 1 | スクロールアクションごとのスクロールステップ (`KC_ACL0`) |
| `MK_W_INTERVAL_0` | 360 | スクロールステップ間の時間 (`KC_ACL0`) |
| `MK_W_OFFSET_1` | 1 | スクロールアクションごとのスクロールステップ (`KC_ACL1`) |
| `MK_W_INTERVAL_1` | 120 | スクロールステップ間の時間 (`KC_ACL1`) |
| `MK_W_OFFSET_2` | 1 | スクロールアクションごとのスクロールステップ (`KC_ACL2`) |
| `MK_W_INTERVAL_2` | 20 | スクロールステップ間の時間 (`KC_ACL2`) |
+49
View File
@@ -0,0 +1,49 @@
# ポインティングデバイス :id=pointing-device
<!---
original document: 0.8.182:docs/feature_pointing_device.md
git diff 0.8.182 HEAD -- docs/feature_pointing_device.md | cat
-->
ポインティングデバイスは汎用的な機能の総称です: システムポインタを移動します。マウスキーのような他のオプションも確かにありますが、これは簡単に変更可能で軽量であることを目指しています。機能を制御するためにカスタムキーを実装したり、他の周辺機器から情報を収集してここに直接挿入したりできます - QMK に処理を任せてください。
ポインティングデバイスを有効にするには、rules.mk の以下の行のコメントを解除します:
```makefile
POINTING_DEVICE_ENABLE = yes
```
マウスレポートを操作するために、以下の関数を使うことができます:
* `pointing_device_get_report()` - ホストコンピュータに送信された情報を表す現在の report_mouse_t を返します。
* `pointing_device_set_report(report_mouse_t newMouseReport)` - ホストコンピュータに送信される report_mouse_t を上書き保存します。
report_mouse_t (ここでは "mouseReport") が以下のプロパティを持つことを覚えておいてください:
* `mouseReport.x` - これは、x軸の動き(+ 右へ、- 左へ)を表す -127 から 127 (128ではなく、USB HID 仕様で定義されています)の符号付き整数です。
* `mouseReport.y` - これは、y軸の動き(+ 上へ、- 下へ)を表す -127 から 127 (128ではなく、USB HID 仕様で定義されています)の符号付き整数です。
* `mouseReport.v` - これは、垂直スクロール(+ 上へ、- 下へ)を表す -127 から 127 (128ではなく、USB HID 仕様で定義されています)の符号付き整数です。
* `mouseReport.h` - これは、水平スクロール(+ 右へ、- 左へ)を表す -127 から 127 (128ではなく、USB HID 仕様で定義されています)の符号付き整数です。
* `mouseReport.buttons` - これは uint8_t で、上位の5ビットを使っています。これらのビットはマウスボタンの状態を表します - ビット 3 はマウスボタン 5、ビット 7 はマウスボタン 1 です。
マウスレポートが送信されると、x、y、v、h のいずれの値も 0 に設定されます (これは "pointing_device_send()" で行われます。この挙動を回避するためにオーバーライドすることができます)。このように、ボタンの状態は持続しますが、動きは1度だけ起こります。さらにカスタマイズするために、`pointing_device_init` と `pointing_device_task` のどちらもオーバーライドすることができます。
以下の例では、カスタムキーを使ってマウスをクリックし垂直および水平方向に127単位スクロールし、リリースされた時にそれを全て元に戻します - なぜならこれは完全に便利な機能だからです。いいですか、以下はひとつの例です:
```c
case MS_SPECIAL:
report_mouse_t currentReport = pointing_device_get_report();
if (record->event.pressed) {
currentReport.v = 127;
currentReport.h = 127;
currentReport.buttons |= MOUSE_BTN1; // this is defined in report.h
} else {
currentReport.v = -127;
currentReport.h = -127;
currentReport.buttons &= ~MOUSE_BTN1;
}
pointing_device_set_report(currentReport);
break;
```
マウスレポートは送信されるたびに 0 (ボタンを除く)に設定されることを思い出してください。そのため、スクロールはそれぞれの場合に1度だけ発生します。
+293
View File
@@ -0,0 +1,293 @@
# PS/2 マウスサポート :id=ps2-mouse-support
<!---
original document: 0.8.147:docs/feature_ps2_mouse.md
git diff 0.8.147 HEAD -- docs/feature_ps2_mouse.md | cat
-->
PS/2 マウス (例えばタッチパッドあるいはトラックポイント)を複合デバイスとしてキーボードに接続することができます。
トラックポイントを接続するには、トラックポイントモジュールを入手し (つまり、Thinkpad キーボードから部品を取って)、モジュールの各ピンの機能を特定し、コントローラとトラックポイントモジュールの間に必要な回路を作成する必要があります。詳細については、Deskthority Wiki の[トラックポイントハードウェア](https://deskthority.net/wiki/TrackPoint_Hardware)ページを参照してください。
PS/2 デバイスの接続は、USART(最善)、割り込み(次善)、 または busywait(非推奨)の3つのやり方が有ります。
## トラックポイントとコントローラ間の回路 :id=the-circuitry-between-trackpoint-and-controller
動作させるには、DATA と CLK のふたつのラインを 4.7k の抵抗で 5V にプルアップしてやる必要があります。
```
DATA ----------+--------- PIN
|
4.7K
|
MODULE 5+ --------+--+--------- PWR CONTROLLER
|
4.7K
|
CLK ------+------------ PIN
```
## Busywait バージョン :id=busywait-version
注意: これは非推奨です。ギクシャクした動きや、未送信の入力が発生するかもしれません。可能であれば、割り込みまたは USART バージョンを使ってください。
rules.mk で:
```makefile
PS2_MOUSE_ENABLE = yes
PS2_USE_BUSYWAIT = yes
```
キーボードの config.h で:
```c
#ifdef PS2_USE_BUSYWAIT
# define PS2_CLOCK_PORT PORTD
# define PS2_CLOCK_PIN PIND
# define PS2_CLOCK_DDR DDRD
# define PS2_CLOCK_BIT 1
# define PS2_DATA_PORT PORTD
# define PS2_DATA_PIN PIND
# define PS2_DATA_DDR DDRD
# define PS2_DATA_BIT 2
#endif
```
## 割り込みバージョン :id=interrupt-version
以下の例はクロックのために D2 を、データのために D5 を使います。クロックには任意の INT あるいは PCINT ピンを、データには任意のピンを使うことができます。
rules.mk で:
```makefile
PS2_MOUSE_ENABLE = yes
PS2_USE_INT = yes
```
キーボードの config.h で:
```c
#ifdef PS2_USE_INT
#define PS2_CLOCK_PORT PORTD
#define PS2_CLOCK_PIN PIND
#define PS2_CLOCK_DDR DDRD
#define PS2_CLOCK_BIT 2
#define PS2_DATA_PORT PORTD
#define PS2_DATA_PIN PIND
#define PS2_DATA_DDR DDRD
#define PS2_DATA_BIT 5
#define PS2_INT_INIT() do { \
EICRA |= ((1<<ISC21) | \
(0<<ISC20)); \
} while (0)
#define PS2_INT_ON() do { \
EIMSK |= (1<<INT2); \
} while (0)
#define PS2_INT_OFF() do { \
EIMSK &= ~(1<<INT2); \
} while (0)
#define PS2_INT_VECT INT2_vect
#endif
```
## USART バージョン :id=usart-version
ATMega32u4 で USART を使うには、クロックのために PD5 を、データのために PD2 を使う必要があります。それらのいずれかが利用できない場合は、割り込みバージョンを使う必要があります。
rules.mk で:
```makefile
PS2_MOUSE_ENABLE = yes
PS2_USE_USART = yes
```
キーボードの config.h で:
```c
#ifdef PS2_USE_USART
#define PS2_CLOCK_PORT PORTD
#define PS2_CLOCK_PIN PIND
#define PS2_CLOCK_DDR DDRD
#define PS2_CLOCK_BIT 5
#define PS2_DATA_PORT PORTD
#define PS2_DATA_PIN PIND
#define PS2_DATA_DDR DDRD
#define PS2_DATA_BIT 2
/* 同期、奇数パリティ、1-bit ストップ、8-bit データ、立ち下がりエッジでサンプル */
/* CLOCK の DDR を入力としてスレーブに設定 */
#define PS2_USART_INIT() do { \
PS2_CLOCK_DDR &= ~(1<<PS2_CLOCK_BIT); \
PS2_DATA_DDR &= ~(1<<PS2_DATA_BIT); \
UCSR1C = ((1 << UMSEL10) | \
(3 << UPM10) | \
(0 << USBS1) | \
(3 << UCSZ10) | \
(0 << UCPOL1)); \
UCSR1A = 0; \
UBRR1H = 0; \
UBRR1L = 0; \
} while (0)
#define PS2_USART_RX_INT_ON() do { \
UCSR1B = ((1 << RXCIE1) | \
(1 << RXEN1)); \
} while (0)
#define PS2_USART_RX_POLL_ON() do { \
UCSR1B = (1 << RXEN1); \
} while (0)
#define PS2_USART_OFF() do { \
UCSR1C = 0; \
UCSR1B &= ~((1 << RXEN1) | \
(1 << TXEN1)); \
} while (0)
#define PS2_USART_RX_READY (UCSR1A & (1<<RXC1))
#define PS2_USART_RX_DATA UDR1
#define PS2_USART_ERROR (UCSR1A & ((1<<FE1) | (1<<DOR1) | (1<<UPE1)))
#define PS2_USART_RX_VECT USART1_RX_vect
#endif
```
## 追加の設定 :id=additional-settings
### PS/2 マウス機能 :id=ps2-mouse-features
以下の PS/2 マウスプロトコルによってサポートされる設定を有効にします。
```c
/* デフォルトのストリームモードの代わりにリモートモードを使います (リンクを見てください) */
#define PS2_MOUSE_USE_REMOTE_MODE
/* マウスあるいはタッチパッドでスクロールホイールあるいはスクロールジェスチャーを有効にします */
#define PS2_MOUSE_ENABLE_SCROLLING
/* 一部のマウスでは、スクロールマスクを設定する必要があります。デフォルトは 0xFF です。*/
#define PS2_MOUSE_SCROLL_MASK 0x0F
/* ホストに送信する前に、動きに変換を適用します (リンクを見てください) */
#define PS2_MOUSE_USE_2_1_SCALING
/* ps2ホストを初期化した後の待機時間 */
#define PS2_MOUSE_INIT_DELAY 1000 /* Default */
```
ps2_mouse.h をインクルードして、以下の関数を呼び出すこともできます。
```c
void ps2_mouse_disable_data_reporting(void);
void ps2_mouse_enable_data_reporting(void);
void ps2_mouse_set_remote_mode(void);
void ps2_mouse_set_stream_mode(void);
void ps2_mouse_set_scaling_2_1(void);
void ps2_mouse_set_scaling_1_1(void);
void ps2_mouse_set_resolution(ps2_mouse_resolution_t resolution);
void ps2_mouse_set_sample_rate(ps2_mouse_sample_rate_t sample_rate);
```
### 細かい調整 :id=fine-control
マウスの感度と速度を変更するには以下の定義を使います。
注意: 同じ効果のために `ps2_mouse_set_resolution` も使うことができます (ほとんどのタッチパッドではサポートされません)。
```c
#define PS2_MOUSE_X_MULTIPLIER 3
#define PS2_MOUSE_Y_MULTIPLIER 3
#define PS2_MOUSE_V_MULTIPLIER 1
```
### スクロールボタン :id=scroll-button
トラックポイントを使っている場合は、スクロールのためにそれを使えるようにしたいでしょう。
押された時にマウスを移動させる代わりにスクロールさせる「スクロールボタン」を有効にすることができます。
この機能を有効にするには、以下のようにスクロールボタンマスクを設定する必要があります:
```c
#define PS2_MOUSE_SCROLL_BTN_MASK (1<<PS2_MOUSE_BUTTON_MIDDLE) /* Default */
```
スクロールボタン機能を無効にするには:
```c
#define PS2_MOUSE_SCROLL_BTN_MASK 0
```
利用可能なボタンは:
```c
#define PS2_MOUSE_BTN_LEFT 0
#define PS2_MOUSE_BTN_RIGHT 1
#define PS2_MOUSE_BTN_MIDDLE 2
```
ボタン定数を `|` で結合したマスクでボタンを組み合わせることができます。
スクロールボタンマスクを設定したら、スクロールボタンの送信間隔を設定する必要があります。
これは、スクロールボタンが離された場合に、スクロールボタンがホストに送信されるまでの間隔です。
この時間が経過すると、マウスはスクロールして送信されなくなります。
```c
#define PS2_MOUSE_SCROLL_BTN_SEND 300 /* Default */
```
スクロールボタンの送信を無効にするには:
```c
#define PS2_MOUSE_SCROLL_BTN_SEND 0
```
以下の定義でスクロールの細かい制御がサポートされます:
```c
#define PS2_MOUSE_SCROLL_DIVISOR_H 2
#define PS2_MOUSE_SCROLL_DIVISOR_V 2
```
### マウスとスクロールの軸の反転 :id=invert-mouse-and-scroll-axes
X 軸と Y 軸を反転するには、以下を config.h に配置します:
```c
#define PS2_MOUSE_INVERT_X
#define PS2_MOUSE_INVERT_Y
```
スクロールの軸を逆にするには、以下を config.h に配置します:
```c
#define PS2_MOUSE_INVERT_H
#define PS2_MOUSE_INVERT_V
```
### マウスの軸の回転 :id=rotate-mouse-axes
デバイスの出力を時計回りに 90 か 180 か 270 度変換します。
デバイスの向きを補正する場合は、出力を逆の方向に同じ量だけ回転します。例えば、通常のデバイスの向きが北向きの場合、以下のように補正します:
```c
#define PS2_MOUSE_ROTATE 270 /* 東向きのデバイスの向きの補正*/
```
```c
#define PS2_MOUSE_ROTATE 180 /* 南向きのデバイスの向きの補正*/
```
```c
#define PS2_MOUSE_ROTATE 90 /* 西向きのデバイスの向きの補正*/
```
### デバッグ設定 :id=debug-settings
マウスをデバッグするには、`debug_mouse = true` を追加するか、ブートマジックを使って有効にします。
```c
/* マウスレポートをデバッグするには */
#define PS2_MOUSE_DEBUG_HID
#define PS2_MOUSE_DEBUG_RAW
```
+232
View File
@@ -0,0 +1,232 @@
# 分割キーボード
<!---
original document:0.9.5:docs/feature_split_keyboard.md
git diff 0.9.5 HEAD -- docs/feature_split_keyboard.md | cat
-->
QMK ファームウェアリポジトリの多くのキーボードは、"分割"キーボードです。それらは2つのコントローラを使います — 1つは USB に接続し、もう1つは TRRS または同様のケーブルを介してシリアルまたは I<sup>2</sup>C 接続で接続します。
分割キーボードには多くの利点がありますが、有効にするには追加の作業が必要です。
QMK ファームウェアには、任意のキーボードで使用可能な一般的な実装と、多くのキーボード固有の実装があります。
このため、主に Let's Split とその他のキーボードで使われる一般的な実装について説明します。
!> ARM はまだ完全には分割キーボードをサポートしておらず、様々な制限があります。進捗はしていますが、機能の100%にはまだ達していません。
## 互換性の概要
| Transport | AVR | ARM |
|------------------------------|--------------------|--------------------|
| ['serial'](serial_driver.md) | :heavy_check_mark: | :white_check_mark: <sup>1</sup> |
| I2C | :heavy_check_mark: | |
注意:
1. ハードウェアとソフトウェアの両方の制限は、[ドライバーのドキュメント](serial_driver.md)の中で説明されます。
## ハードウェア設定
2つの Pro Micro 互換のコントローラを使っており、キーボードの左右を接続するために TRRS ジャックを使っていることを前提とします。
### ハードウェア要件
左右それぞれのキーボードマトリックスのためのダイオードとスイッチとは別に、2個の TRRS ソケットと 1本の TRRS ケーブルが必要です。
あるいは、少なくとも3本のワイヤがあるケーブルとソケットを使うことができます。
キーボードの左右間で通信するために I<sup>2</sup>C を使いたい場合は、少なくとも4本のワイヤを備えたケーブルと 2個の 4.7kΩ プルアップ抵抗が必要です。
#### 考慮事項
最も一般的に使われる接続は、TRRS ケーブルとジャックです。これらは4本のワイヤを提供し、分割キーボードに非常に有用で、簡単に見つけることができます。
ただし、ワイヤのうちの1本が Vcc を供給するため、キーボードはホットプラグ不可能です。TRRS ケーブルを抜き差しする前に、必ずキーボードのUSB接続をはずす必要があります。そうしなければ、コントローラを短絡させたり、もっと悪いことが起こるかもしれません。
別のオプションは電話ケーブルを使うことです (例えば、旧式の RJ-11/RJ-14 ケーブル)。実際に4本のワイヤ/レーンをサポートするものを使うようにしてください。
ただし、USB ケーブル、SATA ケーブル、そして単に4本の電線でもコントローラ間の通信に使用できることがわかっています。
!> コントローラ間の通信に USB ケーブルを使っても問題ありませんが、コネクタは通常の USB 接続と間違えられるかもしれず、配線方法によってはキーボードが短絡する可能性があります。このため、分割キーボードの接続のためにはお勧めできません。
### シリアル配線
2つの Pro Micro 間で GND、Vcc、D0 (別名 PDO あるいは pin 3) を TRS/TRRS ケーブルの3本のワイヤで接続します。
?> ここで使われるピンは実際には以下の `SOFT_SERIAL_PIN` によって設定されることに注意してください。
![シリアル配線](https://i.imgur.com/C3D1GAQ.png)
### I<sup>2</sup>C 配線
2つの Pro Micro 間で GND、Vcc、さらに SCL と SDA (それぞれ 別名 PD0/ピン3 および PD1/ピン2) を TRRS ケーブルの4本のワイヤで接続します。
プルアップ抵抗はキーボードの左右どちら側にも配置することができます。もし各側を単独で使いたい場合は、4つの抵抗を使い、両側にプルアップ抵抗を配置することもできます。
![I2C 配線](https://i.imgur.com/Hbzhc6E.png)
## ファームウェア設定
分割キーボード機能を有効にするには、以下を `rules.mk` に追加してください:
```make
SPLIT_KEYBOARD = yes
```
カスタムトランスポート (通信メソッド)を使っている場合は、以下を追加する必要もあります:
```make
SPLIT_TRANSPORT = custom
```
### 左右の設定
デフォルトでは、ファームウェアはどちら側がどちらであるかを認識しません; 決定するには幾つかの助けが必要です。これを行うには幾つかの方法があり、以下に優先順に列挙します。
#### ピンによる左右の設定
左右を決定するためにコントローラ上のピンを読むようにファームウェアを設定することができます。これを行うには、以下を `config.h` ファイルに追加します:
```c
#define SPLIT_HAND_PIN B7
```
これは指定されたピンを読み込みます。high の場合、コントローラはそれを左側だと仮定し、low の場合、それは右側であると仮定します。
#### EEPROM による左右の設定
このメソッドは永続ストレージ(`EEPROM`)のフラグを設定することで、キーボードの左右を設定します。これはコントローラが最初に起動する時にチェックされ、キーボードのどちら側であるかとキーボードのレイアウトの向きを決定します。
このメソッドを有効にするには、以下を `config.h` ファイルに追加します:
```c
#define EE_HANDS
```
ただし、各コントローラに正しい側の EEPROM ファイルを書き込む必要があります。これを手動で行うこともできますが、ファームウェアを書き込む時にこれを行う avrdude および dfu のターゲットが存在します。
* `:avrdude-split-left`
* `:avrdude-split-right`
* `:dfu-split-left`
* `:dfu-split-right`
* `:dfu-util-split-left`
* `:dfu-util-split-right`
この設定は、`EEP_RST` キーや `eeconfig_init()` 関数を使って EEPROM を再初期化する時には変更されません。ただし、ファームウェアの組み込みオプション以外で EEPROM をリセット([QMK Toolbox]() の "Reset EEPROM" ボタンの動作のように、`EEPROM` を上書きするファイルを書きこむなど)した場合、`EEPROM` ファイルを再書き込みする必要があります。
`EEPROM` ファイルは、QMK ファームウェアのリポジトリ内の[ここ](https://github.com/qmk/qmk_firmware/tree/master/quantum/split_common)にあります。
#### `#define` による左右の設定
コンパイル時に左右を設定することができます。これは以下を `config.h` ファイルに追加することで行うことができます:
```c
#define MASTER_RIGHT
```
あるいは
```c
#define MASTER_LEFT
```
どちらも定義されていない場合、左右のデフォルトは `MASTER_LEFT` になります。
### 通信オプション
全ての分割キーボードが同一であるとは限らないため、`config.h` ファイル内で設定することができる多くの追加のオプションがあります。
```c
#define USE_I2C
```
これは分割キーボードの I<sup>2</sup>C サポートを有効にします。これは厳密には通信用ではありませんが、OLED あるいは I<sup>2</sup>C ベースのデバイスに使うことができます。
```c
#define SOFT_SERIAL_PIN D0
```
これはシリアル通信用に使われるピンを設定します。シリアルを使っていない場合は、これを定義する必要はありません。
ただし、キーボード上でシリアルおよび I<sup>2</sup>C を使っている場合は、これを設定し、D0 および D1 以外の値に設定する必要があります (これらは I<sup>2</sup>C 通信のために使われます)。
```c
#define SELECT_SOFT_SERIAL_SPEED {#}`
```
シリアル通信に問題がある場合は、この値を変更して、シリアル用の通信速度を制御することができます。デフォルトは1で、可能な値は以下の通りです:
* **`0`**: 約189kbps (実験用途専用)
* **`1`**: 約137kbps (デフォルト)
* **`2`**: 約75kbps
* **`3`**: 約39kbps
* **`4`**: 約26kbps
* **`5`**: 約20kbps
### ハードウェア設定オプション
ハードウェアのセットアップ方法に基づいて、設定する必要のある設定が幾つかあります。
```c
#define MATRIX_ROW_PINS_RIGHT { <row pins> }
#define MATRIX_COL_PINS_RIGHT { <col pins> }
```
これにより、右側のマトリックスに異なるピンのセットを指定することができます。これは、左右の形が違うキーボード (Keebio の Quefrency など)で、左右で別の構成が必要な場合に便利です。
```c
#define DIRECT_PINS_RIGHT { { F1, F0, B0, C7 }, { F4, F5, F6, F7 } }
```
これにより右側のための異なる直接ピンのセットを指定することができます。
```c
#define ENCODERS_PAD_A_RIGHT { encoder1a, encoder2a }
#define ENCODERS_PAD_B_RIGHT { encoder1b, encoder2b }
```
これにより右側のための異なるエンコーダピンのセットを指定することができます。
```c
#define RGBLIGHT_SPLIT
```
このオプションは、分割キーボードのコントローラ間で RGB ライトモードの同期を有効にします。これはコントローラに直接配線されている RGB LED を持つキーボード用です (つまり、それらは TRRS ケーブルで "追加データ"オプションを使っていません)。
```c
#define RGBLED_SPLIT { 6, 6 }
```
これは各コントローラに直接接続されている LED の数を設定します。最初の数は左側、2番目の数は右側です。
?> この設定は `RGBLIGHT_SPLIT` が有効になっていることを意味し、有効になっていない場合は強制的に有効にします。
```c
#define SPLIT_USB_DETECT
```
このオプションは、スタートアップの挙動を変更して、マスタ/スレーブの決定時にアクティブな USB 接続を検出します。このオプションがタイムアウトになった場合、その片側はスレーブと見なされます。これは ARM のデフォルトの挙動で、AVR Teensy ボードに必要です (ハードウェアの制限のため)。
?> この設定はバッテリパックを使ったデモの機能を停止します。
```c
#define SPLIT_USB_TIMEOUT 2000
```
これは、`SPLIT_USB_DETECT` を使う時のマスタ/スレーブを検出する場合の最大タイムアウトを設定します。
```c
#define SPLIT_USB_TIMEOUT_POLL 10
```
これは `SPLIT_USB_DETECT` を使う時のマスタ/スレーブを検出する場合のポーリング頻度を設定します
## 追加のリソース(英語)
Nicinabox には Let's Split キーボードのための[非常に優れた詳細なガイド](https://github.com/nicinabox/lets-split-guide)があり、トラブルシューティング情報を含む知っておくべきほとんど全てをカバーします。
ただし、RGB ライトセクションは、RGB Split コードが QMK ファームウェアに追加されるずっと前に書かれたため、古くなっています。ガイドに従う代わりに、各 LED テーブ(訳注: LED strip とも呼びます)を直接コントローラに配線します。
<!-- I may port this information later, but for now ... it's very nice, and covers everything -->
+36
View File
@@ -0,0 +1,36 @@
# スワップハンドアクション
<!---
original document: 0.8.177:docs/feature_swap_hands.md
git diff 0.8.177 HEAD -- docs/feature_swap_hands.md | cat
-->
スワップハンドアクションにより、別のレイヤーを必要とせずに片手入力をサポートします。Makefile に `SWAP_HANDS_ENABLE` を設定し、キーマップに `hand_swap_config` エントリを定義します。これで `ACTION_SWAP_HANDS` コマンドキーが押されるたびにキーボードがミラーされます。例えば、QWERTY で "Hello, World" を入力するには、`^Ge^s^s^w^c W^wr^sd` を入力します。
## 設定
設定テーブルは列/行から新しい列/行にマップするための単純な2次元配列です。Planck の `hand_swap_config` の例:
```C
const keypos_t hand_swap_config[MATRIX_ROWS][MATRIX_COLS] = {
{{11, 0}, {10, 0}, {9, 0}, {8, 0}, {7, 0}, {6, 0}, {5, 0}, {4, 0}, {3, 0}, {2, 0}, {1, 0}, {0, 0}},
{{11, 1}, {10, 1}, {9, 1}, {8, 1}, {7, 1}, {6, 1}, {5, 1}, {4, 1}, {3, 1}, {2, 1}, {1, 1}, {0, 1}},
{{11, 2}, {10, 2}, {9, 2}, {8, 2}, {7, 2}, {6, 2}, {5, 2}, {4, 2}, {3, 2}, {2, 2}, {1, 2}, {0, 2}},
{{11, 3}, {10, 3}, {9, 3}, {8, 3}, {7, 3}, {6, 3}, {5, 3}, {4, 3}, {3, 3}, {2, 3}, {1, 3}, {0, 3}},
};
```
配列のインデックスはマトリックスと同様に逆になり、値の型は `{col, row}` である `keypos_t` で、全ての値はゼロベースであることに注意してください。上の例では、`hand_swap_config[2][4]` (第3行, 第5列)は `{7, 2}` (第3行, 第8列) を返します。はい。紛らわしいです。
## キーコードの入れ替え
| キー | 説明 |
|-----------|-------------------------------------------------------------------------|
| `SH_T(key)` | タップで `key` を送信する。押している時の一時的な入れ替え。 |
| `SH_ON` | 入れ替えをオンにして、そのままにする。 |
| `SH_OFF` | 入れ替えをオフにして、そのままにする。既知の状態に戻るのに適しています。 |
| `SH_MON` | 押すとスワップハンドし、放すと通常に戻る (一時的)。 |
| `SH_MOFF` | 一時的に入れ替えをオフする。 |
| `SH_TG` | キーを押すたびに入れ替えのオンとオフを切り替える。 |
| `SH_TT` | タップで切り替える。押されている時の一時的なもの。 |
| `SH_OS` | ワンショットスワップハンド: 押されている時あるいは次のキーを押すまで切り替える。 |
+112
View File
@@ -0,0 +1,112 @@
# ターミナル
<!---
original document: 0.8.147:docs/feature_terminal.md
git diff 0.8.147 HEAD -- docs/feature_terminal.md | cat
-->
> この機能は現在のところ*巨大*であり、おそらく大量のメモリを搭載したキーボード、または楽しみのためにのみ配置する必要があります。
ターミナル機能はテキストエディタを介してキーストロークで通信するように設計されたコマンドラインのようなインタフェースです。エディタで自動インデント機能をオフにすることは有益です。
有効にするには、以下を `rules.mk` または `Makefile` に貼り付けます:
TERMINAL_ENABLE = yes
そして、オンまたはオフにするために、`TERM_ON` および `TERM_OFF` キーコードを使います。
有効な場合、`> ` プロンプトが現れ、ここでコマンドやバックスペース(オーディオが有効な場合は、先頭に到達するとベルが鳴ります)を入力することができ、エンターを入力するとコマンドを送信します。矢印キーは現在のところ無効なため、混乱することはありません。マウスでカーソルを移動することはお勧めしません。
`#define TERMINAL_HELP` は、このページでは実際には必要のない他の出力ヘルパーを有効にします。
"上矢印" および "下矢印" により、過去に入力した5つのコマンドを順に切り替えることができます。
## 今後のアイデア
* キーボード/ユーザ拡張可能なコマンド
* より小さなフットプリント
* 矢印キーのサポート
* コマンド履歴 - 完了
* SD カードのサポート
* バッファディスプレイのための LCD サポート
* キーコード -> 名称の対応表
* レイヤー状態
* *アナログ/デジタル ポートの読み込み/書き込み*
* RGB モード関連機能
* マクロ定義
* EEPROM の読み込み/書き込み
* オーディオ制御
## 現在のコマンド
### `about`
現在の QMK のバージョンとビルドした日の出力:
```
> about
QMK Firmware
v0.5.115-7-g80ed73-dirty
Built: 2017-08-29-20:24:44
```
### `print-buffer`
最後に入力した5つのコマンドの出力
```
> print-buffer
0. print-buffer
1. help
2. about
3. keymap 0
4. help
5. flush-buffer
```
### `flush-buffer`
コマンドバッファをクリア
```
> flush-buffer
Buffer cleared!
```
### `help`
利用可能なコマンドの出力:
```
> help
commands available:
about help keycode keymap exit print-buffer flush-buffer
```
### `keycode <layer> <row> <col>`
特定のレイヤー、行および列のキーコード値の出力:
```
> keycode 0 1 0
0x29 (41)
```
### `keymap <layer>`
特定のレイヤーの全てのキーマップの出力
```
> keymap 0
0x002b, 0x0014, 0x001a, 0x0008, 0x0015, 0x0017, 0x001c, 0x0018, 0x000c, 0x0012, 0x0013, 0x002a,
0x0029, 0x0004, 0x0016, 0x0007, 0x0009, 0x000a, 0x000b, 0x000d, 0x000e, 0x000f, 0x0033, 0x0034,
0x00e1, 0x001d, 0x001b, 0x0006, 0x0019, 0x0005, 0x0011, 0x0010, 0x0036, 0x0037, 0x0038, 0x0028,
0x5cd6, 0x00e0, 0x00e2, 0x00e3, 0x5cd4, 0x002c, 0x002c, 0x5cd5, 0x0050, 0x0051, 0x0052, 0x004f,
>
```
### `exit`
ターミナルの終了 - `TERM_OFF` と同じ。
+24
View File
@@ -0,0 +1,24 @@
# Word Per Minute (WPM) の計算
<!---
original document: 0.9.0:docs/feature_wpm.md
git diff 0.9.0 HEAD -- docs/feature_wpm.md | cat
-->
WPM 機能は、キーストローク間の時間から1分あたりの平均(移動平均)単語数を計算し、様々な用途で利用できるようにします。
`rules.mk` に以下を追加することで WPM システムを有効にします:
WPM_ENABLE = yes
ソフトシリアルを使っている分割キーボードについては、計算された WPM スコアがマスター側とスレーブ側で利用可能です。
## 公開関数
`uint8_t get_current_wpm(void);`
この関数は符号なし整数で現在の WPM を返します。
## WPM 計算のためのカスタマイズ化されたキー
デフォルトでは、WPM スコアは文字、空白、およびいくつかの句読点のみを含みます。WPM の計算に含むとみなす文字セットを変更したい場合は、`wpm_keycode_user(uint16_t keycode)` を実装し、計算に含めたい文字について true を返し、計算しない特定のキーコードに false を返すようにします。
+4 -4
View File
@@ -1,15 +1,15 @@
# QMK で Github を使う方法 # QMK で GitHub を使う方法
<!--- <!---
original document: 0.8.82:docs/getting_started_github.md original document: 0.8.82:docs/getting_started_github.md
git diff 0.8.82 HEAD -- docs/getting_started_github.md | cat git diff 0.8.82 HEAD -- docs/getting_started_github.md | cat
--> -->
Github は慣れていない人には少し注意が必要です - このガイドは、QMK におけるフォーク、クローン、プルリクエストのサブミットの各ステップについて説明します。 GitHub は慣れていない人には少し注意が必要です - このガイドは、QMK におけるフォーク、クローン、プルリクエストのサブミットの各ステップについて説明します。
?> このガイドでは、あなたがコマンドラインでの実行にある程度慣れており、システムに git がインストールされていることを前提にしています。 ?> このガイドでは、あなたがコマンドラインでの実行にある程度慣れており、システムに git がインストールされていることを前提にしています。
[QMK Github ページ](https://github.com/qmk/qmk_firmware)を開くと、右上に "Fork" というボタンが見えます: [QMK GitHub ページ](https://github.com/qmk/qmk_firmware)を開くと、右上に "Fork" というボタンが見えます:
![Git でのフォーク](http://i.imgur.com/8Toomz4.jpg) ![Git でのフォーク](http://i.imgur.com/8Toomz4.jpg)
@@ -59,7 +59,7 @@ To https://github.com/whoeveryouare/qmk_firmware.git
+ 20043e64...7da94ac5 master -> master + 20043e64...7da94ac5 master -> master
``` ```
あなたの変更は今では Github 上のフォークにあります - フォーク (`https://github.com/<whoeveryouare>/qmk_firmware`)に戻ると、"New Pull Request" ボタンをクリックすることで新しいプルリクエストを作成することができます: あなたの変更は今では GitHub 上のフォークにあります - フォーク (`https://github.com/<whoeveryouare>/qmk_firmware`)に戻ると、"New Pull Request" ボタンをクリックすることで新しいプルリクエストを作成することができます:
![New Pull Request](http://i.imgur.com/DxMHpJ8.jpg) ![New Pull Request](http://i.imgur.com/DxMHpJ8.jpg)
@@ -28,7 +28,7 @@ QMK Configurator は Chrome/Firefox で最適に動作します。
キーボードが QMK を搭載していると宣伝されていてもリストにない場合は、開発者がまだ作業中か、私たちがまだマージするきっかけがなかった可能性があります。 キーボードが QMK を搭載していると宣伝されていてもリストにない場合は、開発者がまだ作業中か、私たちがまだマージするきっかけがなかった可能性があります。
アクティブな [Pull Request](https://github.com/qmk/qmk_firmware/pulls?q=is%3Aopen+is%3Apr+label%3Akeyboard) がない場合、[qmk_firmware](https://github.com/qmk/qmk_firmware/issues)で報告して、その特定のキーボードのサポートをリクエストします。 アクティブな [Pull Request](https://github.com/qmk/qmk_firmware/pulls?q=is%3Aopen+is%3Apr+label%3Akeyboard) がない場合、[qmk_firmware](https://github.com/qmk/qmk_firmware/issues)で報告して、その特定のキーボードのサポートをリクエストします。
製作者自身の github アカウントにある QMK 搭載キーボードもあります。 製作者自身の GitHub アカウントにある QMK 搭載キーボードもあります。
それも再確認してください。 それも再確認してください。
## キーボードのレイアウトを選択する ## キーボードのレイアウトを選択する
+2 -2
View File
@@ -2,8 +2,8 @@
<!--- <!---
grep --no-filename "^[ ]*git diff" docs/ja/*.md | sh grep --no-filename "^[ ]*git diff" docs/ja/*.md | sh
original document: adf4acf59:docs/newbs_git_best_practices.md original document: 0.9.0:docs/newbs_git_best_practices.md
git diff adf4acf59 HEAD -- docs/newbs_git_best_practices.md | cat git diff 0.9.0 HEAD -- docs/newbs_git_best_practices.md | cat
--> -->
## または、"如何にして私は心配することをやめて Git を愛することを学んだか。" ## または、"如何にして私は心配することをやめて Git を愛することを学んだか。"
@@ -2,8 +2,8 @@
<!--- <!---
grep --no-filename "^[ ]*git diff" docs/ja/*.md | sh grep --no-filename "^[ ]*git diff" docs/ja/*.md | sh
original document: adf4acf59:docs/newbs_git_resolving_merge_conflicts.md original document: 0.9.0:docs/newbs_git_resolving_merge_conflicts.md
git diff adf4acf59 HEAD -- docs/newbs_git_resolving_merge_conflicts.md | cat git diff 0.9.0 HEAD -- docs/newbs_git_resolving_merge_conflicts.md | cat
--> -->
ブランチでの作業の完了に時間がかかる場合、他の人が行った変更が、プルリクエストを開いたときにブランチに加えた変更と競合することがあります。 ブランチでの作業の完了に時間がかかる場合、他の人が行った変更が、プルリクエストを開いたときにブランチに加えた変更と競合することがあります。
+2 -2
View File
@@ -2,8 +2,8 @@
<!--- <!---
grep --no-filename "^[ ]*git diff" docs/ja/*.md | sh grep --no-filename "^[ ]*git diff" docs/ja/*.md | sh
original document: adf4acf59:docs/newbs_git_resynchronize_a_branch.md original document: 0.9.0:docs/newbs_git_resynchronize_a_branch.md
git diff adf4acf59 HEAD -- docs/newbs_git_resynchronize_a_branch.md | cat git diff 0.9.0 HEAD -- docs/newbs_git_resynchronize_a_branch.md | cat
--> -->
仮にあなたの `master` ブランチにあなたのコミットを行い、そしてあなたの QMK リポジトリの更新が必要になったとします。 仮にあなたの `master` ブランチにあなたのコミットを行い、そしてあなたの QMK リポジトリの更新が必要になったとします。
@@ -2,8 +2,8 @@
<!--- <!---
grep --no-filename "^[ ]*git diff" docs/ja/*.md | sh grep --no-filename "^[ ]*git diff" docs/ja/*.md | sh
original document: adf4acf59:docs/newbs_git_using_your_master_branch.md original document: 0.9.0:docs/newbs_git_using_your_master_branch.md
git diff adf4acf59 HEAD -- docs/newbs_git_using_your_master_branch.md | cat git diff 0.9.0 HEAD -- docs/newbs_git_using_your_master_branch.md | cat
--> -->
QMK の開発では、何がどこで行われているかにかかわらず、`master` ブランチを最新の状態に保つことを強くお勧めします、しかし `master` ブランチには***絶対に直接コミットしないでください***。 QMK の開発では、何がどこで行われているかにかかわらず、`master` ブランチを最新の状態に保つことを強くお勧めします、しかし `master` ブランチには***絶対に直接コミットしないでください***。
+24 -15
View File
@@ -2,35 +2,44 @@
<!--- <!---
grep --no-filename "^[ ]*git diff" docs/ja/*.md | sh grep --no-filename "^[ ]*git diff" docs/ja/*.md | sh
original document: ed0575fc8:docs/newbs_learn_more_resources.md original document: 0.9.0:docs/newbs_learn_more_resources.md
git diff ed0575fc8 HEAD -- docs/newbs_learn_more_resources.md | cat git diff 0.9.0 HEAD -- docs/newbs_learn_more_resources.md | cat
--> -->
これらのリソースは、QMK コミュニティの新しいメンバーに、初心者向けドキュメントで提供されている情報に対する理解を深めることを目的としています。 これらのリソースは、QMK コミュニティの新しいメンバーに、初心者向けドキュメントで提供されている情報に対する理解を深めることを目的としています。
## Git に関するリース: ## QMK に関するリソース:
### 英語 ### 英語 :id=english-resources-qmk
* [Great General Tutorial](https://www.codecademy.com/learn/learn-git) * [Thomas Baart's QMK Basics Blog](https://thomasbaart.nl/category/mechanical-keyboards/firmware/qmk/qmk-basics/) – 新規ユーザーの視点から見た QMK ファームウェアの使い方の基本を網羅した、ユーザー作成のブログ。
* [Git Game To Learn From Examples](https://learngitbranching.js.org/)
* [Git Resources to Learn More About Github](getting_started_github.md)
* [Git Resources Aimed Specifically toward QMK](contributing.md)
### 日本語 ### 日本語 :id=japanese-resources-qmk
_日本語のリソース情報を募集中です。_ _日本語のリソース情報を募集中です。_
* [Git Game To Learn From Examples(日本語対応有り)](https://learngitbranching.js.org/)
* [QMK で Github を使う方法](ja/getting_started_github.md)
* [貢献方法](ja/contributing.md)
## コマンドラインに関するリソース: ## コマンドラインに関するリソース:
### 英語 ### 英語 :id=english-resources-cli
* [Good General Tutorial on Command Line](https://www.codecademy.com/learn/learn-the-command-line) * [Good General Tutorial on Command Line](https://www.codecademy.com/learn/learn-the-command-line)
### 日本語 ### 日本語 :id=japanese-resources-cli
_日本語のリソース情報を募集中です。_ _日本語のリソース情報を募集中です。_
## Git に関するリソース:
### 英語 :id=english-resources-git
* [Great General Tutorial](https://www.codecademy.com/learn/learn-git)
* [Flight Rules For Git](https://github.com/k88hudson/git-flight-rules)
* [Git Game To Learn From Examples](https://learngitbranching.js.org/)
### 日本語 :id=japanese-resources-git
_日本語のリソース情報を募集中です。_
* [Git Game To Learn From Examples(日本語対応有り)](https://learngitbranching.js.org/)
git のブランチの作り方、マージの仕方などがビジュアルに学べます。
* [QMK で GitHub を使う方法](ja/getting_started_github.md)
+11 -14
View File
@@ -2,27 +2,21 @@
<!--- <!---
grep --no-filename "^[ ]*git diff" docs/ja/*.md | sh grep --no-filename "^[ ]*git diff" docs/ja/*.md | sh
original document: ed0575fc8:docs/newbs_testing_debugging.md original document: 0.9.0:docs/newbs_testing_debugging.md
git diff ed0575fc8 HEAD -- docs/newbs_testing_debugging.md | cat git diff 0.9.0 HEAD -- docs/newbs_testing_debugging.md | cat
--> -->
カスタムファームウェアをキーボードへ書き込んだら、テストする準備が整います。運が良ければ全て問題なく動作しているはずですが、もしそうでなければこのドキュメントがどこが悪いのか調べるのに役立ちます。 カスタムファームウェアをキーボードへ書き込んだら、テストする準備が整います。運が良ければ全て問題なく動作しているはずですが、もしそうでなければこのドキュメントがどこが悪いのか調べるのに役立ちます。
## テスト ## テスト
通常、キーボードをテストするのは非常に簡単です。全てのキーをひとつずつ押して、期待されるキーが送信されていることを確認します。キーを押したことを見逃さないためのプログラムもあります。 通常、キーボードをテストするのは非常に簡単です。
全てのキーをひとつずつ押して、期待されるキーが送信されていることを確認します。
QMK を実行していなくても、[QMK Configurator](https://config.qmk.fm/#/test/) のテストモードを使ってキーボードを確認することができます。
メモ: これらのプログラムは QMK によって提供・承認されたものではありません。 ## デバッグ :id=debugging
* [QMK Configurator](https://config.qmk.fm/#/test/) (Web Based) `rules.mk`へ`CONSOLE_ENABLE = yes`の設定をするとキーボードはデバッグ情報を出力します。デフォルトの出力は非常に限られたものですが、デバッグモードをオンにすることでデバッグ情報の量を増やすことが出来ます。キーマップの`DEBUG`キーコードを使用するか、デバッグモードを有効にする [コマンド](ja/feature_command.md) 機能を使用するか、以下のコードをキーマップに追加します。
* [Switch Hitter](https://web.archive.org/web/20190413233743/https://elitekeyboards.com/switchhitter.php) (Windows Only)
* [Keyboard Viewer](https://www.imore.com/how-use-keyboard-viewer-your-mac) (Mac Only)
* [Keyboard Tester](http://www.keyboardtester.com) (Web Based)
* [Keyboard Checker](http://keyboardchecker.com) (Web Based)
## デバッグ
`rules.mk`へ`CONSOLE_ENABLE = yes`の設定をするとキーボードはデバッグ情報を出力します。デフォルトの出力は非常に限られたものですが、デバッグモードをオンにすることでデバッグ情報の量を増やすことが出来ます。キーマップの`DEBUG`キーコードを使用するか、デバッグモードを有効にする [Command](ja/feature_command.md) 機能を使用するか、以下のコードをキーマップに追加します。
```c ```c
void keyboard_post_init_user(void) { void keyboard_post_init_user(void) {
@@ -34,6 +28,10 @@ void keyboard_post_init_user(void) {
} }
``` ```
## デバッグツール :id=debugging-tools
キーボードのデバッグに使えるツールは2つあります。
### QMK Toolboxを使ったデバッグ ### QMK Toolboxを使ったデバッグ
互換性のある環境では、[QMK Toolbox](https://github.com/qmk/qmk_toolbox)を使うことでキーボードからのデバッグメッセージを表示できます。 互換性のある環境では、[QMK Toolbox](https://github.com/qmk/qmk_toolbox)を使うことでキーボードからのデバッグメッセージを表示できます。
@@ -42,7 +40,6 @@ void keyboard_post_init_user(void) {
ターミナルベースの方法がお好みですか?PJRC が提供する[hid_listen](https://www.pjrc.com/teensy/hid_listen.html)もデバッグメッセージの表示に使用できます。ビルド済みの実行ファイルは Windows, Linux, MacOS 用が用意されています。 ターミナルベースの方法がお好みですか?PJRC が提供する[hid_listen](https://www.pjrc.com/teensy/hid_listen.html)もデバッグメッセージの表示に使用できます。ビルド済みの実行ファイルは Windows, Linux, MacOS 用が用意されています。
<!-- FIXME: Describe the debugging messages here. -->
## 独自のデバッグメッセージを送信する ## 独自のデバッグメッセージを送信する
+206 -199
View File
@@ -8,205 +8,212 @@ This is a reference only. Each group of keys links to the page documenting their
See also: [Basic Keycodes](keycodes_basic.md) See also: [Basic Keycodes](keycodes_basic.md)
|Key |Aliases |Description | |Key |Aliases |Description |Windows |macOS |Linux<sup>1</sup>|
|-----------------------|------------------------------|-----------------------------------------------| |-----------------------|------------------------------|-----------------------------------------------|-------------|-------------|-----------------|
|`KC_NO` |`XXXXXXX` |Ignore this key (NOOP) | |`KC_NO` |`XXXXXXX` |Ignore this key (NOOP) |*N/A* |*N/A* |*N/A* |
|`KC_TRANSPARENT` |`KC_TRNS`, `_______` |Use the next lowest non-transparent key | |`KC_TRANSPARENT` |`KC_TRNS`, `_______` |Use the next lowest non-transparent key |*N/A* |*N/A* |*N/A* |
|`KC_A` | |`a` and `A` | |`KC_A` | |`a` and `A` |✔ |✔ |✔ |
|`KC_B` | |`b` and `B` | |`KC_B` | |`b` and `B` |✔ |✔ |✔ |
|`KC_C` | |`c` and `C` | |`KC_C` | |`c` and `C` |✔ |✔ |✔ |
|`KC_D` | |`d` and `D` | |`KC_D` | |`d` and `D` |✔ |✔ |✔ |
|`KC_E` | |`e` and `E` | |`KC_E` | |`e` and `E` |✔ |✔ |✔ |
|`KC_F` | |`f` and `F` | |`KC_F` | |`f` and `F` |✔ |✔ |✔ |
|`KC_G` | |`g` and `G` | |`KC_G` | |`g` and `G` |✔ |✔ |✔ |
|`KC_H` | |`h` and `H` | |`KC_H` | |`h` and `H` |✔ |✔ |✔ |
|`KC_I` | |`i` and `I` | |`KC_I` | |`i` and `I` |✔ |✔ |✔ |
|`KC_J` | |`j` and `J` | |`KC_J` | |`j` and `J` |✔ |✔ |✔ |
|`KC_K` | |`k` and `K` | |`KC_K` | |`k` and `K` |✔ |✔ |✔ |
|`KC_L` | |`l` and `L` | |`KC_L` | |`l` and `L` |✔ |✔ |✔ |
|`KC_M` | |`m` and `M` | |`KC_M` | |`m` and `M` |✔ |✔ |✔ |
|`KC_N` | |`n` and `N` | |`KC_N` | |`n` and `N` |✔ |✔ |✔ |
|`KC_O` | |`o` and `O` | |`KC_O` | |`o` and `O` |✔ |✔ |✔ |
|`KC_P` | |`p` and `P` | |`KC_P` | |`p` and `P` |✔ |✔ |✔ |
|`KC_Q` | |`q` and `Q` | |`KC_Q` | |`q` and `Q` |✔ |✔ |✔ |
|`KC_R` | |`r` and `R` | |`KC_R` | |`r` and `R` |✔ |✔ |✔ |
|`KC_S` | |`s` and `S` | |`KC_S` | |`s` and `S` |✔ |✔ |✔ |
|`KC_T` | |`t` and `T` | |`KC_T` | |`t` and `T` |✔ |✔ |✔ |
|`KC_U` | |`u` and `U` | |`KC_U` | |`u` and `U` |✔ |✔ |✔ |
|`KC_V` | |`v` and `V` | |`KC_V` | |`v` and `V` |✔ |✔ |✔ |
|`KC_W` | |`w` and `W` | |`KC_W` | |`w` and `W` |✔ |✔ |✔ |
|`KC_X` | |`x` and `X` | |`KC_X` | |`x` and `X` |✔ |✔ |✔ |
|`KC_Y` | |`y` and `Y` | |`KC_Y` | |`y` and `Y` |✔ |✔ |✔ |
|`KC_Z` | |`z` and `Z` | |`KC_Z` | |`z` and `Z` |✔ |✔ |✔ |
|`KC_1` | |`1` and `!` | |`KC_1` | |`1` and `!` |✔ |✔ |✔ |
|`KC_2` | |`2` and `@` | |`KC_2` | |`2` and `@` |✔ |✔ |✔ |
|`KC_3` | |`3` and `#` | |`KC_3` | |`3` and `#` |✔ |✔ |✔ |
|`KC_4` | |`4` and `$` | |`KC_4` | |`4` and `$` |✔ |✔ |✔ |
|`KC_5` | |`5` and `%` | |`KC_5` | |`5` and `%` |✔ |✔ |✔ |
|`KC_6` | |`6` and `^` | |`KC_6` | |`6` and `^` |✔ |✔ |✔ |
|`KC_7` | |`7` and `&` | |`KC_7` | |`7` and `&` |✔ |✔ |✔ |
|`KC_8` | |`8` and `*` | |`KC_8` | |`8` and `*` |✔ |✔ |✔ |
|`KC_9` | |`9` and `(` | |`KC_9` | |`9` and `(` |✔ |✔ |✔ |
|`KC_0` | |`0` and `)` | |`KC_0` | |`0` and `)` |✔ |✔ |✔ |
|`KC_ENTER` |`KC_ENT` |Return (Enter) | |`KC_ENTER` |`KC_ENT` |Return (Enter) |✔ |✔ |✔ |
|`KC_ESCAPE` |`KC_ESC` |Escape | |`KC_ESCAPE` |`KC_ESC` |Escape |✔ |✔ |✔ |
|`KC_BSPACE` |`KC_BSPC` |Delete (Backspace) | |`KC_BSPACE` |`KC_BSPC` |Delete (Backspace) |✔ |✔ |✔ |
|`KC_TAB` | |Tab | |`KC_TAB` | |Tab |✔ |✔ |✔ |
|`KC_SPACE` |`KC_SPC` |Spacebar | |`KC_SPACE` |`KC_SPC` |Spacebar |✔ |✔ |✔ |
|`KC_MINUS` |`KC_MINS` |`-` and `_` | |`KC_MINUS` |`KC_MINS` |`-` and `_` |✔ |✔ |✔ |
|`KC_EQUAL` |`KC_EQL` |`=` and `+` | |`KC_EQUAL` |`KC_EQL` |`=` and `+` |✔ |✔ |✔ |
|`KC_LBRACKET` |`KC_LBRC` |`[` and `{` | |`KC_LBRACKET` |`KC_LBRC` |`[` and `{` |✔ |✔ |✔ |
|`KC_RBRACKET` |`KC_RBRC` |`]` and `}` | |`KC_RBRACKET` |`KC_RBRC` |`]` and `}` |✔ |✔ |✔ |
|`KC_BSLASH` |`KC_BSLS` |`\` and `\|` | |`KC_BSLASH` |`KC_BSLS` |`\` and `\|` |✔ |✔ |✔ |
|`KC_NONUS_HASH` |`KC_NUHS` |Non-US `#` and `~` | |`KC_NONUS_HASH` |`KC_NUHS` |Non-US `#` and `~` |✔ |✔ |✔ |
|`KC_SCOLON` |`KC_SCLN` |`;` and `:` | |`KC_SCOLON` |`KC_SCLN` |`;` and `:` |✔ |✔ |✔ |
|`KC_QUOTE` |`KC_QUOT` |`'` and `"` | |`KC_QUOTE` |`KC_QUOT` |`'` and `"` |✔ |✔ |✔ |
|`KC_GRAVE` |`KC_GRV`, `KC_ZKHK` |<code>&#96;</code> and `~`, JIS Zenkaku/Hankaku| |`KC_GRAVE` |`KC_GRV`, `KC_ZKHK` |<code>&#96;</code> and `~`, JIS Zenkaku/Hankaku|✔ |✔ |✔ |
|`KC_COMMA` |`KC_COMM` |`,` and `<` | |`KC_COMMA` |`KC_COMM` |`,` and `<` |✔ |✔ |✔ |
|`KC_DOT` | |`.` and `>` | |`KC_DOT` | |`.` and `>` |✔ |✔ |✔ |
|`KC_SLASH` |`KC_SLSH` |`/` and `?` | |`KC_SLASH` |`KC_SLSH` |`/` and `?` |✔ |✔ |✔ |
|`KC_CAPSLOCK` |`KC_CLCK`, `KC_CAPS` |Caps Lock | |`KC_CAPSLOCK` |`KC_CLCK`, `KC_CAPS` |Caps Lock |✔ |✔ |✔ |
|`KC_F1` | |F1 | |`KC_F1` | |F1 |✔ |✔ |✔ |
|`KC_F2` | |F2 | |`KC_F2` | |F2 |✔ |✔ |✔ |
|`KC_F3` | |F3 | |`KC_F3` | |F3 |✔ |✔ |✔ |
|`KC_F4` | |F4 | |`KC_F4` | |F4 |✔ |✔ |✔ |
|`KC_F5` | |F5 | |`KC_F5` | |F5 |✔ |✔ |✔ |
|`KC_F6` | |F6 | |`KC_F6` | |F6 |✔ |✔ |✔ |
|`KC_F7` | |F7 | |`KC_F7` | |F7 |✔ |✔ |✔ |
|`KC_F8` | |F8 | |`KC_F8` | |F8 |✔ |✔ |✔ |
|`KC_F9` | |F9 | |`KC_F9` | |F9 |✔ |✔ |✔ |
|`KC_F10` | |F10 | |`KC_F10` | |F10 |✔ |✔ |✔ |
|`KC_F11` | |F11 | |`KC_F11` | |F11 |✔ |✔ |✔ |
|`KC_F12` | |F12 | |`KC_F12` | |F12 |✔ |✔ |✔ |
|`KC_PSCREEN` |`KC_PSCR` |Print Screen | |`KC_PSCREEN` |`KC_PSCR` |Print Screen |✔ |✔<sup>2</sup>|✔ |
|`KC_SCROLLLOCK` |`KC_SLCK`, `KC_BRMD` |Scroll Lock, Brightness Down (macOS) | |`KC_SCROLLLOCK` |`KC_SLCK`, `KC_BRMD` |Scroll Lock, Brightness Down (macOS) |✔ |✔<sup>2</sup>|✔ |
|`KC_PAUSE` |`KC_PAUS`, `KC_BRK`, `KC_BRMU`|Pause, Brightness Up (macOS) | |`KC_PAUSE` |`KC_PAUS`, `KC_BRK`, `KC_BRMU`|Pause, Brightness Up (macOS) |✔ |✔<sup>2</sup>|✔ |
|`KC_INSERT` |`KC_INS` |Insert | |`KC_INSERT` |`KC_INS` |Insert |✔ | |✔ |
|`KC_HOME` | |Home | |`KC_HOME` | |Home |✔ |✔ |✔ |
|`KC_PGUP` | |Page Up | |`KC_PGUP` | |Page Up |✔ |✔ |✔ |
|`KC_DELETE` |`KC_DEL` |Forward Delete | |`KC_DELETE` |`KC_DEL` |Forward Delete |✔ |✔ |✔ |
|`KC_END` | |End | |`KC_END` | |End |✔ |✔ |✔ |
|`KC_PGDOWN` |`KC_PGDN` |Page Down | |`KC_PGDOWN` |`KC_PGDN` |Page Down |✔ |✔ |✔ |
|`KC_RIGHT` |`KC_RGHT` |Right Arrow | |`KC_RIGHT` |`KC_RGHT` |Right Arrow |✔ |✔ |✔ |
|`KC_LEFT` | |Left Arrow | |`KC_LEFT` | |Left Arrow |✔ |✔ |✔ |
|`KC_DOWN` | |Down Arrow | |`KC_DOWN` | |Down Arrow |✔ |✔ |✔ |
|`KC_UP` | |Up Arrow | |`KC_UP` | |Up Arrow |✔ |✔ |✔ |
|`KC_NUMLOCK` |`KC_NLCK` |Keypad Num Lock and Clear | |`KC_NUMLOCK` |`KC_NLCK` |Keypad Num Lock and Clear |✔ |✔ |✔ |
|`KC_KP_SLASH` |`KC_PSLS` |Keypad `/` | |`KC_KP_SLASH` |`KC_PSLS` |Keypad `/` |✔ |✔ |✔ |
|`KC_KP_ASTERISK` |`KC_PAST` |Keypad `*` | |`KC_KP_ASTERISK` |`KC_PAST` |Keypad `*` |✔ |✔ |✔ |
|`KC_KP_MINUS` |`KC_PMNS` |Keypad `-` | |`KC_KP_MINUS` |`KC_PMNS` |Keypad `-` |✔ |✔ |✔ |
|`KC_KP_PLUS` |`KC_PPLS` |Keypad `+` | |`KC_KP_PLUS` |`KC_PPLS` |Keypad `+` |✔ |✔ |✔ |
|`KC_KP_ENTER` |`KC_PENT` |Keypad Enter | |`KC_KP_ENTER` |`KC_PENT` |Keypad Enter |✔ |✔ |✔ |
|`KC_KP_1` |`KC_P1` |Keypad `1` and End | |`KC_KP_1` |`KC_P1` |Keypad `1` and End |✔ |✔ |✔ |
|`KC_KP_2` |`KC_P2` |Keypad `2` and Down Arrow | |`KC_KP_2` |`KC_P2` |Keypad `2` and Down Arrow |✔ |✔ |✔ |
|`KC_KP_3` |`KC_P3` |Keypad `3` and Page Down | |`KC_KP_3` |`KC_P3` |Keypad `3` and Page Down |✔ |✔ |✔ |
|`KC_KP_4` |`KC_P4` |Keypad `4` and Left Arrow | |`KC_KP_4` |`KC_P4` |Keypad `4` and Left Arrow |✔ |✔ |✔ |
|`KC_KP_5` |`KC_P5` |Keypad `5` | |`KC_KP_5` |`KC_P5` |Keypad `5` |✔ |✔ |✔ |
|`KC_KP_6` |`KC_P6` |Keypad `6` and Right Arrow | |`KC_KP_6` |`KC_P6` |Keypad `6` and Right Arrow |✔ |✔ |✔ |
|`KC_KP_7` |`KC_P7` |Keypad `7` and Home | |`KC_KP_7` |`KC_P7` |Keypad `7` and Home |✔ |✔ |✔ |
|`KC_KP_8` |`KC_P8` |Keypad `8` and Up Arrow | |`KC_KP_8` |`KC_P8` |Keypad `8` and Up Arrow |✔ |✔ |✔ |
|`KC_KP_9` |`KC_P9` |Keypad `9` and Page Up | |`KC_KP_9` |`KC_P9` |Keypad `9` and Page Up |✔ |✔ |✔ |
|`KC_KP_0` |`KC_P0` |Keypad `0` and Insert | |`KC_KP_0` |`KC_P0` |Keypad `0` and Insert |✔ |✔ |✔ |
|`KC_KP_DOT` |`KC_PDOT` |Keypad `.` and Delete | |`KC_KP_DOT` |`KC_PDOT` |Keypad `.` and Delete |✔ |✔ |✔ |
|`KC_NONUS_BSLASH` |`KC_NUBS` |Non-US `\` and `\|` | |`KC_NONUS_BSLASH` |`KC_NUBS` |Non-US `\` and `\|` |✔ |✔ |✔ |
|`KC_APPLICATION` |`KC_APP` |Application (Windows Menu Key) | |`KC_APPLICATION` |`KC_APP` |Application (Windows Context Menu Key) |✔ | |✔ |
|`KC_POWER` | |System Power (macOS) | |`KC_POWER` | |System Power | |✔<sup>3</sup>|✔ |
|`KC_KP_EQUAL` |`KC_PEQL` |Keypad `=` | |`KC_KP_EQUAL` |`KC_PEQL` |Keypad `=` |✔ |✔ |✔ |
|`KC_F13` | |F13 | |`KC_F13` | |F13 |✔ |✔ |✔ |
|`KC_F14` | |F14 | |`KC_F14` | |F14 |✔ |✔ |✔ |
|`KC_F15` | |F15 | |`KC_F15` | |F15 |✔ |✔ |✔ |
|`KC_F16` | |F16 | |`KC_F16` | |F16 |✔ |✔ |✔ |
|`KC_F17` | |F17 | |`KC_F17` | |F17 |✔ |✔ |✔ |
|`KC_F18` | |F18 | |`KC_F18` | |F18 |✔ |✔ |✔ |
|`KC_F19` | |F19 | |`KC_F19` | |F19 |✔ |✔ |✔ |
|`KC_F20` | |F20 | |`KC_F20` | |F20 |✔ | |✔ |
|`KC_F21` | |F21 | |`KC_F21` | |F21 |✔ | |✔ |
|`KC_F22` | |F22 | |`KC_F22` | |F22 |✔ | |✔ |
|`KC_F23` | |F23 | |`KC_F23` | |F23 |✔ | |✔ |
|`KC_F24` | |F24 | |`KC_F24` | |F24 |✔ | |✔ |
|`KC_EXECUTE` |`KC_EXEC` |Execute | |`KC_EXECUTE` |`KC_EXEC` |Execute | | |✔ |
|`KC_HELP` | |Help | |`KC_HELP` | |Help | | |✔ |
|`KC_MENU` | |Menu | |`KC_MENU` | |Menu | | |✔ |
|`KC_SELECT` |`KC_SLCT` |Select | |`KC_SELECT` |`KC_SLCT` |Select | | |✔ |
|`KC_STOP` | |Stop | |`KC_STOP` | |Stop | | |✔ |
|`KC_AGAIN` |`KC_AGIN` |Again | |`KC_AGAIN` |`KC_AGIN` |Again | | |✔ |
|`KC_UNDO` | |Undo | |`KC_UNDO` | |Undo | | |✔ |
|`KC_CUT` | |Cut | |`KC_CUT` | |Cut | | |✔ |
|`KC_COPY` | |Copy | |`KC_COPY` | |Copy | | |✔ |
|`KC_PASTE` |`KC_PSTE` |Paste | |`KC_PASTE` |`KC_PSTE` |Paste | | |✔ |
|`KC_FIND` | |Find | |`KC_FIND` | |Find | | |✔ |
|`KC__MUTE` | |Mute (macOS) | |`KC__MUTE` | |Mute | |✔ |✔ |
|`KC__VOLUP` | |Volume Up (macOS) | |`KC__VOLUP` | |Volume Up | |✔ |✔ |
|`KC__VOLDOWN` | |Volume Down (macOS) | |`KC__VOLDOWN` | |Volume Down | |✔ |✔ |
|`KC_LOCKING_CAPS` |`KC_LCAP` |Locking Caps Lock | |`KC_LOCKING_CAPS` |`KC_LCAP` |Locking Caps Lock |✔ |✔ | |
|`KC_LOCKING_NUM` |`KC_LNUM` |Locking Num Lock | |`KC_LOCKING_NUM` |`KC_LNUM` |Locking Num Lock |✔ |✔ | |
|`KC_LOCKING_SCROLL` |`KC_LSCR` |Locking Scroll Lock | |`KC_LOCKING_SCROLL` |`KC_LSCR` |Locking Scroll Lock |✔ |✔ | |
|`KC_KP_COMMA` |`KC_PCMM` |Keypad `,` | |`KC_KP_COMMA` |`KC_PCMM` |Keypad `,` | | |✔ |
|`KC_KP_EQUAL_AS400` | |Keypad `=` on AS/400 keyboards | |`KC_KP_EQUAL_AS400` | |Keypad `=` on AS/400 keyboards | | | |
|`KC_INT1` |`KC_RO` |JIS `\` and `_` | |`KC_INT1` |`KC_RO` |JIS `\` and `_` |✔ | |✔ |
|`KC_INT2` |`KC_KANA` |JIS Katakana/Hiragana | |`KC_INT2` |`KC_KANA` |JIS Katakana/Hiragana |✔ | |✔ |
|`KC_INT3` |`KC_JYEN` |JIS `¥` and `\|` | |`KC_INT3` |`KC_JYEN` |JIS `¥` and `\|` |✔ | |✔ |
|`KC_INT4` |`KC_HENK` |JIS Henkan | |`KC_INT4` |`KC_HENK` |JIS Henkan |✔ | |✔ |
|`KC_INT5` |`KC_MHEN` |JIS Muhenkan | |`KC_INT5` |`KC_MHEN` |JIS Muhenkan |✔ | |✔ |
|`KC_INT6` | |JIS Numpad `,` | |`KC_INT6` | |JIS Numpad `,` | | |✔ |
|`KC_INT7` | |International 7 | |`KC_INT7` | |International 7 | | | |
|`KC_INT8` | |International 8 | |`KC_INT8` | |International 8 | | | |
|`KC_INT9` | |International 9 | |`KC_INT9` | |International 9 | | | |
|`KC_LANG1` |`KC_HAEN` |Hangul/English | |`KC_LANG1` |`KC_HAEN` |Hangul/English | | |✔ |
|`KC_LANG2` |`KC_HANJ` |Hanja | |`KC_LANG2` |`KC_HANJ` |Hanja | | |✔ |
|`KC_LANG3` | |JIS Katakana | |`KC_LANG3` | |JIS Katakana | | |✔ |
|`KC_LANG4` | |JIS Hiragana | |`KC_LANG4` | |JIS Hiragana | | |✔ |
|`KC_LANG5` | |JIS Zenkaku/Hankaku | |`KC_LANG5` | |JIS Zenkaku/Hankaku | | |✔ |
|`KC_LANG6` | |Language 6 | |`KC_LANG6` | |Language 6 | | | |
|`KC_LANG7` | |Language 7 | |`KC_LANG7` | |Language 7 | | | |
|`KC_LANG8` | |Language 8 | |`KC_LANG8` | |Language 8 | | | |
|`KC_LANG9` | |Language 9 | |`KC_LANG9` | |Language 9 | | | |
|`KC_ALT_ERASE` |`KC_ERAS` |Alternate Erase | |`KC_ALT_ERASE` |`KC_ERAS` |Alternate Erase | | | |
|`KC_SYSREQ` | |SysReq/Attention | |`KC_SYSREQ` | |SysReq/Attention | | | |
|`KC_CANCEL` | |Cancel | |`KC_CANCEL` | |Cancel | | | |
|`KC_CLEAR` |`KC_CLR` |Clear | |`KC_CLEAR` |`KC_CLR` |Clear | | |✔ |
|`KC_PRIOR` | |Prior | |`KC_PRIOR` | |Prior | | | |
|`KC_RETURN` | |Return | |`KC_RETURN` | |Return | | | |
|`KC_SEPARATOR` | |Separator | |`KC_SEPARATOR` | |Separator | | | |
|`KC_OUT` | |Out | |`KC_OUT` | |Out | | | |
|`KC_OPER` | |Oper | |`KC_OPER` | |Oper | | | |
|`KC_CLEAR_AGAIN` | |Clear/Again | |`KC_CLEAR_AGAIN` | |Clear/Again | | | |
|`KC_CRSEL` | |CrSel/Props | |`KC_CRSEL` | |CrSel/Props | | | |
|`KC_EXSEL` | |ExSel | |`KC_EXSEL` | |ExSel | | | |
|`KC_LCTRL` |`KC_LCTL` |Left Control | |`KC_LCTRL` |`KC_LCTL` |Left Control |✔ |✔ |✔ |
|`KC_LSHIFT` |`KC_LSFT` |Left Shift | |`KC_LSHIFT` |`KC_LSFT` |Left Shift |✔ |✔ |✔ |
|`KC_LALT` |`KC_LOPT` |Left Alt (Option) | |`KC_LALT` |`KC_LOPT` |Left Alt (Option) |✔ |✔ |✔ |
|`KC_LGUI` |`KC_LCMD`, `KC_LWIN` |Left GUI (Windows/Command/Meta key) | |`KC_LGUI` |`KC_LCMD`, `KC_LWIN` |Left GUI (Windows/Command/Meta key) |✔ |✔ |✔ |
|`KC_RCTRL` |`KC_RCTL` |Right Control | |`KC_RCTRL` |`KC_RCTL` |Right Control |✔ |✔ |✔ |
|`KC_RSHIFT` |`KC_RSFT` |Right Shift | |`KC_RSHIFT` |`KC_RSFT` |Right Shift |✔ |✔ |✔ |
|`KC_RALT` |`KC_ROPT`, `KC_ALGR` |Right Alt (Option/AltGr) | |`KC_RALT` |`KC_ROPT`, `KC_ALGR` |Right Alt (Option/AltGr) |✔ |✔ |✔ |
|`KC_RGUI` |`KC_RCMD`, `KC_RWIN` |Right GUI (Windows/Command/Meta key) | |`KC_RGUI` |`KC_RCMD`, `KC_RWIN` |Right GUI (Windows/Command/Meta key) |✔ |✔ |✔ |
|`KC_SYSTEM_POWER` |`KC_PWR` |System Power Down | |`KC_SYSTEM_POWER` |`KC_PWR` |System Power Down |✔ |✔<sup>3</sup>|✔ |
|`KC_SYSTEM_SLEEP` |`KC_SLEP` |System Sleep | |`KC_SYSTEM_SLEEP` |`KC_SLEP` |System Sleep |✔ |✔<sup>3</sup>|✔ |
|`KC_SYSTEM_WAKE` |`KC_WAKE` |System Wake | |`KC_SYSTEM_WAKE` |`KC_WAKE` |System Wake | |✔<sup>3</sup>|✔ |
|`KC_AUDIO_MUTE` |`KC_MUTE` |Mute | |`KC_AUDIO_MUTE` |`KC_MUTE` |Mute |✔ |✔ |✔ |
|`KC_AUDIO_VOL_UP` |`KC_VOLU` |Volume Up | |`KC_AUDIO_VOL_UP` |`KC_VOLU` |Volume Up |✔ |✔<sup>4</sup>|✔ |
|`KC_AUDIO_VOL_DOWN` |`KC_VOLD` |Volume Down | |`KC_AUDIO_VOL_DOWN` |`KC_VOLD` |Volume Down |✔ |✔<sup>4</sup>|✔ |
|`KC_MEDIA_NEXT_TRACK` |`KC_MNXT` |Next Track | |`KC_MEDIA_NEXT_TRACK` |`KC_MNXT` |Next Track |✔ |✔<sup>5</sup>|✔ |
|`KC_MEDIA_PREV_TRACK` |`KC_MPRV` |Previous Track | |`KC_MEDIA_PREV_TRACK` |`KC_MPRV` |Previous Track |✔ |✔<sup>5</sup>|✔ |
|`KC_MEDIA_STOP` |`KC_MSTP` |Stop Track (Windows) | |`KC_MEDIA_STOP` |`KC_MSTP` |Stop Track |✔ | |✔ |
|`KC_MEDIA_PLAY_PAUSE` |`KC_MPLY` |Play/Pause Track | |`KC_MEDIA_PLAY_PAUSE` |`KC_MPLY` |Play/Pause Track |✔ |✔ |✔ |
|`KC_MEDIA_SELECT` |`KC_MSEL` |Launch Media Player (Windows) | |`KC_MEDIA_SELECT` |`KC_MSEL` |Launch Media Player |✔ | |✔ |
|`KC_MEDIA_EJECT` |`KC_EJCT` |Eject (macOS) | |`KC_MEDIA_EJECT` |`KC_EJCT` |Eject | |✔ |✔ |
|`KC_MAIL` | |Launch Mail (Windows) | |`KC_MAIL` | |Launch Mail |✔ | |✔ |
|`KC_CALCULATOR` |`KC_CALC` |Launch Calculator (Windows) | |`KC_CALCULATOR` |`KC_CALC` |Launch Calculator |✔ | |✔ |
|`KC_MY_COMPUTER` |`KC_MYCM` |Launch My Computer (Windows) | |`KC_MY_COMPUTER` |`KC_MYCM` |Launch My Computer |✔ | |✔ |
|`KC_WWW_SEARCH` |`KC_WSCH` |Browser Search (Windows) | |`KC_WWW_SEARCH` |`KC_WSCH` |Browser Search |✔ | |✔ |
|`KC_WWW_HOME` |`KC_WHOM` |Browser Home (Windows) | |`KC_WWW_HOME` |`KC_WHOM` |Browser Home |✔ | |✔ |
|`KC_WWW_BACK` |`KC_WBAK` |Browser Back (Windows) | |`KC_WWW_BACK` |`KC_WBAK` |Browser Back |✔ | |✔ |
|`KC_WWW_FORWARD` |`KC_WFWD` |Browser Forward (Windows) | |`KC_WWW_FORWARD` |`KC_WFWD` |Browser Forward |✔ | |✔ |
|`KC_WWW_STOP` |`KC_WSTP` |Browser Stop (Windows) | |`KC_WWW_STOP` |`KC_WSTP` |Browser Stop |✔ | |✔ |
|`KC_WWW_REFRESH` |`KC_WREF` |Browser Refresh (Windows) | |`KC_WWW_REFRESH` |`KC_WREF` |Browser Refresh |✔ | |✔ |
|`KC_WWW_FAVORITES` |`KC_WFAV` |Browser Favorites (Windows) | |`KC_WWW_FAVORITES` |`KC_WFAV` |Browser Favorites |✔ | |✔ |
|`KC_MEDIA_FAST_FORWARD`|`KC_MFFD` |Next Track (macOS) | |`KC_MEDIA_FAST_FORWARD`|`KC_MFFD` |Next Track |✔ |✔<sup>5</sup>|✔ |
|`KC_MEDIA_REWIND` |`KC_MRWD` |Previous Track (macOS) | |`KC_MEDIA_REWIND` |`KC_MRWD` |Previous Track |✔<sup>6</sup>|✔<sup>5</sup>|✔ |
|`KC_BRIGHTNESS_UP` |`KC_BRIU` |Brightness Up | |`KC_BRIGHTNESS_UP` |`KC_BRIU` |Brightness Up |✔ |✔ |✔ |
|`KC_BRIGHTNESS_DOWN` |`KC_BRID` |Brightness Down | |`KC_BRIGHTNESS_DOWN` |`KC_BRID` |Brightness Down |✔ |✔ |✔ |
<sup>1. The Linux kernel HID driver recognizes [nearly all keycodes](https://github.com/torvalds/linux/blob/master/drivers/hid/hid-input.c), but the default bindings depend on the DE/WM.</sup><br/>
<sup>2. Treated as F13-F15.</sup><br/>
<sup>3. Must be held for about three seconds, and will display a prompt instead.</sup><br/>
<sup>4. Holding Shift+Option allows for finer control of volume level.</sup><br/>
<sup>5. Skips the entire track in iTunes when tapped, seeks within the current track when held.</sup><br/>
<sup>6. WMP does not recognize the Rewind key, but both alter playback speed in VLC.</sup>
## Quantum Keycodes :id=quantum-keycodes ## Quantum Keycodes :id=quantum-keycodes
+2 -2
View File
@@ -97,7 +97,7 @@ In most situations you will want to answer Yes to all of the prompts.
It's possible, that you will get an error saying something like: `bash: qmk: command not found`. It's possible, that you will get an error saying something like: `bash: qmk: command not found`.
This is due to a [bug](https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=839155) Debian introduced with their Bash 4.4 release, which removed `$HOME/.local/bin` from the PATH. This bug was later fixed on Debian and Ubuntu. This is due to a [bug](https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=839155) Debian introduced with their Bash 4.4 release, which removed `$HOME/.local/bin` from the PATH. This bug was later fixed on Debian and Ubuntu.
Sadly, Ubuntu reitroduced this bug and is [yet to fix it](https://bugs.launchpad.net/ubuntu/+source/bash/+bug/1588562). Sadly, Ubuntu reitroduced this bug and is [yet to fix it](https://bugs.launchpad.net/ubuntu/+source/bash/+bug/1588562).
Luckily, the fix is easy. Run this as your user: `echo "PATH=$HOME/.local/bin:$PATH" >> $HOME/.bashrc && source $HOME/.bashrc` Luckily, the fix is easy. Run this as your user: `echo 'PATH="$HOME/.local/bin:$PATH"' >> $HOME/.bashrc && source $HOME/.bashrc`
?>**Note on FreeBSD**: ?>**Note on FreeBSD**:
It is suggested to run `qmk setup` as a non-`root` user to start with, but this will likely identify packages that need to be installed to your It is suggested to run `qmk setup` as a non-`root` user to start with, but this will likely identify packages that need to be installed to your
@@ -135,7 +135,7 @@ Most people new to QMK only have 1 keyboard. You can set this keyboard as your d
qmk config user.keyboard=clueboard/66/rev4 qmk config user.keyboard=clueboard/66/rev4
You can also set your default keymap name. Most people use their github username here, and we recommend that you do too. You can also set your default keymap name. Most people use their GitHub username here, and we recommend that you do too.
qmk config user.keymap=<github_username> qmk config user.keymap=<github_username>
+1 -1
View File
@@ -15,7 +15,7 @@ You can control the behavior of one shot keys by defining these in `config.h`:
#define ONESHOT_TIMEOUT 5000 /* Time (in ms) before the one shot key is released */ #define ONESHOT_TIMEOUT 5000 /* Time (in ms) before the one shot key is released */
``` ```
* `OSM(mod)` - Momentarily hold down *mod*. You must use the `MOD_*` keycodes as shown in [Mod Tap](#mod-tap), not the `KC_*` codes. * `OSM(mod)` - Momentarily hold down *mod*. You must use the `MOD_*` keycodes as shown in [Mod Tap](mod_tap.md), not the `KC_*` codes.
* `OSL(layer)` - momentary switch to *layer*. * `OSL(layer)` - momentary switch to *layer*.
Sometimes, you want to activate a one-shot key as part of a macro or tap dance routine. Sometimes, you want to activate a one-shot key as part of a macro or tap dance routine.
+1 -1
View File
@@ -102,7 +102,7 @@ There are a number of extensions that you may want to install:
This installs a bunch of Git related tools that may make using Git with QMK Firmware easier. This installs a bunch of Git related tools that may make using Git with QMK Firmware easier.
* [EditorConfig for VS Code](https://marketplace.visualstudio.com/items?itemName=EditorConfig.EditorConfig) - _[Optional]_ - Helps to keep the code to the QMK Coding Conventions. * [EditorConfig for VS Code](https://marketplace.visualstudio.com/items?itemName=EditorConfig.EditorConfig) - _[Optional]_ - Helps to keep the code to the QMK Coding Conventions.
* [Bracket Pair Colorizer 2](https://marketplace.visualstudio.com/items?itemName=CoenraadS.bracket-pair-colorizer-2) - _[Optional]_ - This color codes the brackets in your code, to make it easier to reference nested code. * [Bracket Pair Colorizer 2](https://marketplace.visualstudio.com/items?itemName=CoenraadS.bracket-pair-colorizer-2) - _[Optional]_ - This color codes the brackets in your code, to make it easier to reference nested code.
* [Github Markdown Preview](https://marketplace.visualstudio.com/items?itemName=bierner.github-markdown-preview) - _[Optional]_ - Makes the markdown preview in VS Code more like GitHub's. * [GitHub Markdown Preview](https://marketplace.visualstudio.com/items?itemName=bierner.github-markdown-preview) - _[Optional]_ - Makes the markdown preview in VS Code more like GitHub's.
* [VS Live Share Extension Pack](https://marketplace.visualstudio.com/items?itemName=MS-vsliveshare.vsliveshare-pack) - _[Optional]_ - This extension allows somebody else to access your workspace (or you to access somebody else's workspace) and help out. This is great if you're having issues and need some help from somebody. * [VS Live Share Extension Pack](https://marketplace.visualstudio.com/items?itemName=MS-vsliveshare.vsliveshare-pack) - _[Optional]_ - This extension allows somebody else to access your workspace (or you to access somebody else's workspace) and help out. This is great if you're having issues and need some help from somebody.
* [VIM Keymap](https://marketplace.visualstudio.com/items?itemName=GiuseppeCesarano.vim-keymap) - _[Optional]_ - For those that prefer VIM style keybindings. There are other options for this, too. * [VIM Keymap](https://marketplace.visualstudio.com/items?itemName=GiuseppeCesarano.vim-keymap) - _[Optional]_ - For those that prefer VIM style keybindings. There are other options for this, too.
* [Travis CI Status](https://marketplace.visualstudio.com/items?itemName=felixrieseberg.vsc-travis-ci-status) - _[Optional]_ - This shows the current Travis CI status, if you have it set up. * [Travis CI Status](https://marketplace.visualstudio.com/items?itemName=felixrieseberg.vsc-travis-ci-status) - _[Optional]_ - This shows the current Travis CI status, if you have it set up.
+58
View File
@@ -0,0 +1,58 @@
# Choosing an Arm MCU :id=choose-arm-mcu
This page outlines the selection criteria to ensure compatibility with Arm/ChibiOS.
QMK uses the Hardware Abstraction Layer of ChibiOS in order to run on Arm devices. ChibiOS in general is best supported on STM32 devices, both in the perspective of base MCU support, as well as on-MCU peripheral support. As an extension to the core ChibiOS MCU support, QMK also utilises ChibiOS-Contrib (which includes the Kinetis MCU support layer, as an example), but it does not provide as great a level of peripheral support or general testing for supported devices.
Adding support for new MCU families must go through ChibiOS or ChibiOS-Contrib -- QMK does not have the bandwidth, resources, nor the inclination to maintain long-term MCU support for your board of choice.
To be clear: this also includes commercial boards -- unless agreed upon by all parties, QMK will not take over maintenance of a bespoke MCU support package. Even if MCU support is upstreamed into ChibiOS/ChibiOS-Contrib, QMK reserves the right to deprecate and/or remove keyboards utilising support packages that aren't kept up to date with upstream ChibiOS itself.
## Selecting an already-supported MCU :id=selecting-already-supported-mcu
### STM32 families
As outlined earlier, STM32 is the preferred option to ensure greatest compatibility with the subsystems already implemented in QMK. Not all subsystems are compatible yet, but for the most widely-used support is already present.
The simplest solution to determine if an STM32 MCU is compatible is to navigate to the list of supported STM32 ports in QMK's [ChibiOS fork](https://github.com/qmk/ChibiOS/tree/master/os/hal/ports/STM32). Inside this directory, each of the supported STM32 families will be listed, and inside each family a file called `stm32_registry.h` will be present. Scanning through these files will show `#define`s such as the following, which can be used to determine if ChibiOS supports a particular MCU:
```c
#if defined(STM32F303xC) || defined(__DOXYGEN__)
```
The example shows that STM32F303xC devices are supported by ChibiOS.
The next step is to ensure that USB is supported on those devices by ChibiOS -- you can confirm this by checking inside the same section guarded by the `#define` above, specifically for the following to be `TRUE`:
```c
#define STM32_HAS_USB TRUE
```
or one of the following being `TRUE`:
```c
#define STM32_HAS_OTG1 TRUE
#define STM32_HAS_OTG2 TRUE
```
For the most part, this is the bare minimum to be able to have a high confidence that QMK will be able to run on your MCU. After that, it's all up to configuration.
### Non-STM32 families
ChibiOS does have support for a handful of non-STM32 devices, and the list can be found in QMK's [ChibiOS fork](https://github.com/qmk/ChibiOS/tree/master/os/hal/ports) and [ChibiOS-Contrib fork](https://github.com/qmk/ChibiOS-Contrib/tree/master/os/hal/ports). Non-STM32 support is likely out of date, and only supports ancient MCUs -- whilst it might be possible to use these, it's not recommended.
Do note that there are sometimes licensing restrictions with respect to redistribution. As an example, binaries built for nRF5 are not able to be redistributed via QMK Configurator, due to the licensing of their board support package.
## Adding support for a new STM32 MCU (for an existing family) :id=add-new-stm32-mcu
Usually, one can "masquerade" as an existing MCU of the same family, especially if the only difference is RAM or Flash size. As an example, some MCUs within the same family are virtually identical, with the exception of adding a cryptographic peripheral -- STM32L072 vs. STM32L082 for instance. Given the unlikely use of the cryptographic peripheral, L082 chips can actually run as if they're an L072, and can be targeted accordingly.
Adding proper support for new MCUs within an existing STM32 family should ideally be upstreamed to ChibiOS. In general, this will require modifications of the `stm32_registry.h` file, providing correct responses for the same `#define`s provided for the other MCUs in that family.
## Adding support for a new STM32 Family :id=add-new-stm32-family
If this is a requirement, this needs to go through upstream ChibiOS before QMK would consider accepting boards targeting the new family. More information for porting should be sought by approaching ChibiOS directly, rather than through QMK.
## Adding support for a new MCU Family :id=add-new-mcu-family
As stated earlier, in order for a new MCU family to be supported by QMK, it needs to be upstreamed into ChibiOS-Contrib before QMK will consider accepting boards using it. The same principle applies for development -- you're best approaching the ChibiOS-Contrib maintainers to get a bit more of an idea on what's involved with upstreaming your contribution.
+1 -1
View File
@@ -36,7 +36,7 @@ These are defaults based on what has been implemented for ARM boards.
| [RGB Lighting](feature_rgblight.md) | Disabled | | [RGB Lighting](feature_rgblight.md) | Disabled |
| [Backlight](feature_backlight.md) | Forces [task driven PWM](feature_backlight.md#software-pwm-driver) until ARM can provide automatic configuration | | [Backlight](feature_backlight.md) | Forces [task driven PWM](feature_backlight.md#software-pwm-driver) until ARM can provide automatic configuration |
| USB Host (e.g. USB-USB converter) | Not supported (USB host code is AVR specific and is not currently supported on ARM) | | USB Host (e.g. USB-USB converter) | Not supported (USB host code is AVR specific and is not currently supported on ARM) |
| [Split keyboards](feature_split_keyboard.md) | Not supported yet | | [Split keyboards](feature_split_keyboard.md) | Partial - heavily dependent on enabled features |
## Manual Conversion ## Manual Conversion
+1 -1
View File
@@ -12,7 +12,7 @@ QMK (*Quantum Mechanical Keyboard*) é uma comunidade de código aberto que mant
## Como obter e usar o QMK ## Como obter e usar o QMK
Se você planeja contribuir com um _keymap_ ("mapa de teclas"), teclado ou recursos para o QMK, o jeito mais fácil é [percorrer o repositório através do Github](https://github.com/qmk/qmk_firmware#fork-destination-box) e clonar seu repositório localmente para fazer suas alterações, dê um _push_ nelas e abra uma [_Pull request_](https://github.com/qmk/qmk_firmware/pulls) no seu fork. Se você planeja contribuir com um _keymap_ ("mapa de teclas"), teclado ou recursos para o QMK, o jeito mais fácil é [percorrer o repositório através do GitHub](https://github.com/qmk/qmk_firmware#fork-destination-box) e clonar seu repositório localmente para fazer suas alterações, dê um _push_ nelas e abra uma [_Pull request_](https://github.com/qmk/qmk_firmware/pulls) no seu fork.
Caso contrário, você pode cloná-lo diretamente com `git clone https://github.com/qmk/qmk_firmware`. Não faça o download dos arquivos zip ou tar; é necessário um repositório git para baixar os submódulos para compilar. Caso contrário, você pode cloná-lo diretamente com `git clone https://github.com/qmk/qmk_firmware`. Não faça o download dos arquivos zip ou tar; é necessário um repositório git para baixar os submódulos para compilar.
+1 -1
View File
@@ -11,7 +11,7 @@
* [QMK CLI](pt-br/cli.md) * [QMK CLI](pt-br/cli.md)
* [QMK CLI Config](pt-br/cli_configuration.md) * [QMK CLI Config](pt-br/cli_configuration.md)
* [Contributing to QMK](pt-br/contributing.md) * [Contributing to QMK](pt-br/contributing.md)
* [How to Use Github](pt-br/getting_started_github.md) * [How to Use GitHub](pt-br/getting_started_github.md)
* [Getting Help](pt-br/getting_started_getting_help.md) * [Getting Help](pt-br/getting_started_getting_help.md)
* [Breaking Changes](pt-br/breaking_changes.md) * [Breaking Changes](pt-br/breaking_changes.md)
+80
View File
@@ -0,0 +1,80 @@
# Language-specific Keycodes
Keyboards are able to support a wide range of languages. However, they do not send the actual characters produced by pressing their keys - instead, they send numerical codes. In the USB HID spec, these are called "usages", although they are more often referred to as "scancodes" or "keycodes" when in the context of keyboards.
Less than 256 usages are defined in the HID Keyboard/Keypad usage page, and some of those do nothing on modern operating systems. So, how is this language support achieved?
In a nutshell, the operating system maps the usages it receives to the appropriate character based on the user's configured keyboard layout. For example, when a Swedish person presses the key with the `å` character printed on it, the keyboard is *actually* sending the keycode for `[`.
Obviously, this could get confusing, so QMK provides language-specific keycode aliases for many keyboard layouts. These won't do much on their own - you still have to set the matching keyboard layout in your OS settings. Think of them more as keycap labels for your keymap.
To use these, simply `#include` the corresponding [header file](https://github.com/qmk/qmk_firmware/tree/master/quantum/keymap_extras) in your `keymap.c`, and add the keycodes defined in them in place of the `KC_` prefixed ones:
|Layout |Header |
|---------------------------|--------------------------------|
|Canadian Multilingual (CSA)|`keymap_canadian_multilingual.h`|
|Croatian |`keymap_croatian.h` |
|Czech |`keymap_czech.h` |
|Danish |`keymap_danish.h` |
|Dutch (Belgium) |`keymap_belgian.h` |
|English (Ireland) |`keymap_irish.h` |
|English (UK) |`keymap_uk.h` |
|English (US International) |`keymap_us_international.h` |
|Estonian |`keymap_estonian.h` |
|Finnish |`keymap_finnish.h` |
|French |`keymap_french.h` |
|French (BÉPO) |`keymap_bepo.h` |
|French (Belgium) |`keymap_belgian.h` |
|French (Switzerland) |`keymap_fr_ch.h` |
|French (macOS, ISO) |`keymap_french_osx.h` |
|German |`keymap_german.h` |
|German (Switzerland) |`keymap_german_ch.h` |
|German (macOS) |`keymap_german_osx.h` |
|German (Neo2)* |`keymap_neo2.h` |
|Greek* |`keymap_greek.h` |
|Hungarian |`keymap_hungarian.h` |
|Icelandic |`keymap_icelandic.h` |
|Italian |`keymap_italian.h` |
|Italian (macOS, ANSI) |`keymap_italian_osx_ansi.h` |
|Italian (macOS, ISO) |`keymap_italian_osx_iso.h` |
|Japanese |`keymap_jp.h` |
|Korean |`keymap_korean.h` |
|Latvian |`keymap_latvian.h` |
|Lithuanian (ĄŽERTY) |`keymap_lithuanian_azerty.h` |
|Lithuanian (QWERTY) |`keymap_lithuanian_qwerty.h` |
|Norwegian |`keymap_norwegian.h` |
|Polish |`keymap_polish.h` |
|Portuguese |`keymap_portuguese.h` |
|Portuguese (Brazil) |`keymap_br_abnt2.h` |
|Romanian |`keymap_romanian.h` |
|Russian* |`keymap_russian.h` |
|Serbian* |`keymap_serbian.h` |
|Serbian (Latin) |`keymap_serbian_latin.h` |
|Slovak |`keymap_slovak.h` |
|Slovenian |`keymap_slovenian.h` |
|Spanish |`keymap_spanish.h` |
|Spanish (Dvorak) |`keymap_spanish_dvorak.h` |
|Swedish |`keymap_swedish.h` |
|Turkish (F) |`keymap_turkish_f.h` |
|Turkish (Q) |`keymap_turkish_q.h` |
There are also a few which are not quite language-specific, but useful if you are not using a QWERTY layout:
|Layout |Header |
|-------------------|------------------------|
|Colemak |`keymap_colemak.h` |
|Dvorak |`keymap_dvorak.h` |
|Dvorak (Programmer)|`keymap_dvp.h` |
|Norman |`keymap_norman.h` |
|Plover* |`keymap_plover.h` |
|Plover (Dvorak)* |`keymap_plover_dvorak.h`|
|Steno* |`keymap_steno.h` |
|Workman |`keymap_workman.h` |
|Workman (ZXCVM) |`keymap_workman_zxcvm.h`|
## Sendstring Support
By default, `SEND_STRING()` assumes a US ANSI keyboard layout is set. If you are using a different layout, you can also `#include "sendstring_*.h"` (as above) in your keymap to override the lookup tables used for mapping ASCII characters to keycodes.
An important thing to note here is that `SEND_STRING()` only operates on [ASCII text](https://en.wikipedia.org/wiki/ASCII#Character_set). This means that you cannot pass it a string containing Unicode characters - this unfortunately includes accented characters that may be present in your desired layout.
Many layouts make certain characters, such as Grave or Tilde, available only as [dead keys](https://en.wikipedia.org/wiki/Dead_key), so you must add a space immediately after it in the string you want to send, to prevent it from potentially combining with the next character.
Certain other layouts have no Sendstring header as they do not use a Latin-derived alphabet (for example Greek and Russian), and thus there is no way to input most of the ASCII character set. These are marked above with a `*`.
+1 -1
View File
@@ -11,7 +11,7 @@
* [QMK CLI](ru-ru/cli.md) * [QMK CLI](ru-ru/cli.md)
* [QMK CLI Config](ru-ru/cli_configuration.md) * [QMK CLI Config](ru-ru/cli_configuration.md)
* [Contributing to QMK](ru-ru/contributing.md) * [Contributing to QMK](ru-ru/contributing.md)
* [How to Use Github](ru-ru/getting_started_github.md) * [How to Use GitHub](ru-ru/getting_started_github.md)
* [Getting Help](ru-ru/getting_started_getting_help.md) * [Getting Help](ru-ru/getting_started_getting_help.md)
* [Breaking Changes](ru-ru/breaking_changes.md) * [Breaking Changes](ru-ru/breaking_changes.md)
+2 -2
View File
@@ -6,10 +6,10 @@ GitHub может показаться несколько сложным для
Откройте [страницу QMK на GitHub] (https://github.com/qmk/qmk_firmware), и в правом верхнем углу вы увидите кнопку с надписью "Fork": Откройте [страницу QMK на GitHub] (https://github.com/qmk/qmk_firmware), и в правом верхнем углу вы увидите кнопку с надписью "Fork":
![Fork on Github](http://i.imgur.com/8Toomz4.jpg) ![Fork on GitHub](http://i.imgur.com/8Toomz4.jpg)
Если вы состоите в какой-либо организации, вам нужно выбрать учетную запись, к которой будет привязан форк. В большинстве случаев это будет личной аккаунт. Как только ваш форк будет завершен (иногда это занимает немного времени), нажмите кнопку "Clone or Download": Если вы состоите в какой-либо организации, вам нужно выбрать учетную запись, к которой будет привязан форк. В большинстве случаев это будет личной аккаунт. Как только ваш форк будет завершен (иногда это занимает немного времени), нажмите кнопку "Clone or Download":
![Download from Github](http://i.imgur.com/N1NYcSz.jpg) ![Download from GitHub](http://i.imgur.com/N1NYcSz.jpg)
И обязательно выберите "HTTPS", затем выделите ссылку и скопируйте ее: И обязательно выберите "HTTPS", затем выделите ссылку и скопируйте ее:
+13 -3
View File
@@ -1,7 +1,7 @@
# 'serial' Driver # 'serial' Driver
This driver powers the [Split Keyboard](feature_split_keyboard.md) feature. This driver powers the [Split Keyboard](feature_split_keyboard.md) feature.
!> Serial in this context should be read as **sending information one bit at a time**, rather than implementing UART/USART/RS485/RS232 standards. ?> Serial in this context should be read as **sending information one bit at a time**, rather than implementing UART/USART/RS485/RS232 standards.
All drivers in this category have the following characteristics: All drivers in this category have the following characteristics:
* Provides data and signaling over a single conductor * Provides data and signaling over a single conductor
@@ -11,7 +11,7 @@ All drivers in this category have the following characteristics:
| | AVR | ARM | | | AVR | ARM |
|-------------------|--------------------|--------------------| |-------------------|--------------------|--------------------|
| bit bang | :heavy_check_mark: | Soon™ | | bit bang | :heavy_check_mark: | :heavy_check_mark: |
| USART Half-duplex | | :heavy_check_mark: | | USART Half-duplex | | :heavy_check_mark: |
## Driver configuration ## Driver configuration
@@ -35,6 +35,12 @@ Configure the driver via your config.h:
// 5: about 20kbps // 5: about 20kbps
``` ```
#### ARM
!> The bitbang driver causes connection issues with bitbang WS2812 driver
Along with the generic options above, you must also turn on the `PAL_USE_CALLBACKS` feature in your halconf.h.
### USART Half-duplex ### USART Half-duplex
Targeting STM32 boards where communication is offloaded to a USART hardware device. The advantage is that this provides fast and accurate timings. `SOFT_SERIAL_PIN` for this driver is the configured USART TX pin. **The TX pin must have appropriate pull-up resistors**. To configure it, add this to your rules.mk: Targeting STM32 boards where communication is offloaded to a USART hardware device. The advantage is that this provides fast and accurate timings. `SOFT_SERIAL_PIN` for this driver is the configured USART TX pin. **The TX pin must have appropriate pull-up resistors**. To configure it, add this to your rules.mk:
@@ -56,4 +62,8 @@ Configure the hardware via your config.h:
#define SERIAL_USART_TX_PAL_MODE 7 // Pin "alternate function", see the respective datasheet for the appropriate values for your MCU. default: 7 #define SERIAL_USART_TX_PAL_MODE 7 // Pin "alternate function", see the respective datasheet for the appropriate values for your MCU. default: 7
``` ```
You must also turn on the SERIAL feature in your halconf.h and mcuconf.h You must also enable the ChibiOS `SERIAL` feature:
* In your board's halconf.h: `#define HAL_USE_SERIAL TRUE`
* In your board's mcuconf.h: `#define STM32_SERIAL_USE_USARTn TRUE` (where 'n' matches the peripheral number of your selected USART on the MCU)
Do note that the configuration required is for the `SERIAL` peripheral, not the `UART` peripheral.
+1 -1
View File
@@ -11,7 +11,7 @@ No special setup is required - just connect the `SS`, `SCK`, `MOSI` and `MISO` p
|ATMega16/32U2/4|`B0`|`B1` |`B2` |`B3` | |ATMega16/32U2/4|`B0`|`B1` |`B2` |`B3` |
|AT90USB64/128 |`B0`|`B1` |`B2` |`B3` | |AT90USB64/128 |`B0`|`B1` |`B2` |`B3` |
|ATmega32A |`B4`|`B7` |`B5` |`B6` | |ATmega32A |`B4`|`B7` |`B5` |`B6` |
|ATmega328P |`B2`|`B5` |`B3` |`B4` | |ATmega328/P |`B2`|`B5` |`B3` |`B4` |
You may use more than one slave select pin, not just the `SS` pin. This is useful when you have multiple devices connected and need to communicate with them individually. You may use more than one slave select pin, not just the `SS` pin. This is useful when you have multiple devices connected and need to communicate with them individually.
`SPI_SS_PIN` can be passed to `spi_start()` to refer to `SS`. `SPI_SS_PIN` can be passed to `spi_start()` to refer to `SS`.
+1 -1
View File
@@ -12,6 +12,6 @@ If you need help with something, the best place to get quick support is going to
The official QMK forum is [/r/olkb](https://reddit.com/r/olkb) on [reddit.com](https://reddit.com). The official QMK forum is [/r/olkb](https://reddit.com/r/olkb) on [reddit.com](https://reddit.com).
## Github Issues ## GitHub Issues
You can open an [issue on GitHub](https://github.com/qmk/qmk_firmware/issues). This is especially handy when your issue will require long-term discussion or debugging. You can open an [issue on GitHub](https://github.com/qmk/qmk_firmware/issues). This is especially handy when your issue will require long-term discussion or debugging.
+74 -13
View File
@@ -4,6 +4,38 @@ While Tap-Hold options are fantastic, they are not without their issues. We hav
These options let you modify the behavior of the Tap-Hold keys. These options let you modify the behavior of the Tap-Hold keys.
## Tapping Term
The crux of all of the following features is the tapping term setting. This determines what is a tap and what is a hold. And the exact timing for this to feel natural can vary from keyboard to keyboard, from switch to switch, and from key to key.
You can set the global time for this by adding the following setting to your `config.h`:
```c
#define TAPPING_TERM 200
```
This setting is defined in milliseconds, and does default to 200ms. This is a good average for a majority of people.
For more granular control of this feature, you can add the following to your `config.h`:
```c
#define TAPPING_TERM_PER_KEY
```
You can then add the following function to your keymap:
```c
uint16_t get_tapping_term(uint16_t keycode, keyrecord_t *record) {
switch (keycode) {
case SFT_T(KC_SPC):
return TAPPING_TERM + 1250;
case LT(1, KC_GRV):
return 130;
default:
return TAPPING_TERM;
}
```
## Permissive Hold ## Permissive Hold
As of [PR#1359](https://github.com/qmk/qmk_firmware/pull/1359/), there is a new `config.h` option: As of [PR#1359](https://github.com/qmk/qmk_firmware/pull/1359/), there is a new `config.h` option:
@@ -27,6 +59,25 @@ Normally, if you do all this within the `TAPPING_TERM` (default: 200ms) this wil
?> If you have `Ignore Mod Tap Interrupt` enabled, as well, this will modify how both work. The regular key has the modifier added if the first key is released first or if both keys are held longer than the `TAPPING_TERM`. ?> If you have `Ignore Mod Tap Interrupt` enabled, as well, this will modify how both work. The regular key has the modifier added if the first key is released first or if both keys are held longer than the `TAPPING_TERM`.
For more granular control of this feature, you can add the following to your `config.h`:
```c
#define PERMISSIVE_HOLD_PER_KEY
```
You can then add the following function to your keymap:
```c
bool get_permissive_hold(uint16_t keycode, keyrecord_t *record) {
switch (keycode) {
case LT(1, KC_BSPC):
return true;
default:
return false;
}
}
```
## Ignore Mod Tap Interrupt ## Ignore Mod Tap Interrupt
To enable this setting, add this to your `config.h`: To enable this setting, add this to your `config.h`:
@@ -62,13 +113,13 @@ For more granular control of this feature, you can add the following to your `co
You can then add the following function to your keymap: You can then add the following function to your keymap:
```c ```c
bool get_ignore_mod_tap_interrupt(uint16_t keycode) { bool get_ignore_mod_tap_interrupt(uint16_t keycode, keyrecord_t *record) {
switch (keycode) { switch (keycode) {
case SFT_T(KC_SPC): case SFT_T(KC_SPC):
return true; return true;
default: default:
return false; return false;
} }
} }
``` ```
@@ -106,12 +157,12 @@ You can then add the following function to your keymap:
```c ```c
bool get_tapping_force_hold(uint16_t keycode, keyrecord_t *record) { bool get_tapping_force_hold(uint16_t keycode, keyrecord_t *record) {
switch (keycode) { switch (keycode) {
case LT(1, KC_BSPC): case LT(1, KC_BSPC):
return true; return true;
default: default:
return false; return false;
} }
} }
``` ```
@@ -126,3 +177,13 @@ To enable `retro tapping`, add the following to your `config.h`:
Holding and releasing a dual function key without pressing another key will result in nothing happening. With retro tapping enabled, releasing the key without pressing another will send the original keycode even if it is outside the tapping term. Holding and releasing a dual function key without pressing another key will result in nothing happening. With retro tapping enabled, releasing the key without pressing another will send the original keycode even if it is outside the tapping term.
For instance, holding and releasing `LT(2, KC_SPACE)` without hitting another key will result in nothing happening. With this enabled, it will send `KC_SPACE` instead. For instance, holding and releasing `LT(2, KC_SPACE)` without hitting another key will result in nothing happening. With this enabled, it will send `KC_SPACE` instead.
## Why do we include the key record for the per key functions?
One thing that you may notice is that we include the key record for all of the "per key" functions, and may be wondering why we do that.
Well, it's simply really: customization. But specifically, it depends on how your keyboard is wired up. For instance, if each row is actually using a row in the keyboard's matrix, then it may be simpler to use `if (record->event.row == 3)` instead of checking a whole bunch of keycodes. Which is especially good for those people using the Tap Hold type keys on the home row. So you could fine tune those to not interfere with your normal typing.
## Why is there no `*_kb` or `*_user` functions?!
Unlike many of the other functions here, there isn't a need (or even reason) to have a quantum or keyboard level function. Only user level functions are useful here, so no need to mark them as such.
+1 -1
View File
@@ -13,7 +13,7 @@ QMK (*Quantum Mechanical Keyboard*) 是一个社区维护的开源软件,包
## 如何得到它 ## 如何得到它
如果你打算贡献布局, 键盘, 或者其他QMK特性, 一下是最简单的方法:[从Github获得repo分支](https://github.com/qmk/qmk_firmware#fork-destination-box), 并克隆你的repo到本地进行编辑,推送,然后从你的分支打开 [Pull Request](https://github.com/qmk/qmk_firmware/pulls). 如果你打算贡献布局, 键盘, 或者其他QMK特性, 一下是最简单的方法:[从GitHub获得repo分支](https://github.com/qmk/qmk_firmware#fork-destination-box), 并克隆你的repo到本地进行编辑,推送,然后从你的分支打开 [Pull Request](https://github.com/qmk/qmk_firmware/pulls).
此外, 你也可以直接下载 ([zip](https://github.com/qmk/qmk_firmware/zipball/master), [tar](https://github.com/qmk/qmk_firmware/tarball/master)), 或者从git克隆 (`[email protected]:qmk/qmk_firmware.git`), 或 https (`https://github.com/qmk/qmk_firmware.git`). 此外, 你也可以直接下载 ([zip](https://github.com/qmk/qmk_firmware/zipball/master), [tar](https://github.com/qmk/qmk_firmware/tarball/master)), 或者从git克隆 (`[email protected]:qmk/qmk_firmware.git`), 或 https (`https://github.com/qmk/qmk_firmware.git`).
+1 -1
View File
@@ -14,7 +14,7 @@
* [QMK命令行工具](zh-cn/cli.md) * [QMK命令行工具](zh-cn/cli.md)
* [QMK命令行工具配置](zh-cn/cli_configuration.md) * [QMK命令行工具配置](zh-cn/cli_configuration.md)
* [向QMK贡献代码](zh-cn/contributing.md) * [向QMK贡献代码](zh-cn/contributing.md)
* [如何使用Github](zh-cn/getting_started_github.md) * [如何使用GitHub](zh-cn/getting_started_github.md)
* [获得帮助](zh-cn/getting_started_getting_help.md) * [获得帮助](zh-cn/getting_started_getting_help.md)
* [非兼容性修改](zh-cn/breaking_changes.md) * [非兼容性修改](zh-cn/breaking_changes.md)
+3 -3
View File
@@ -57,7 +57,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
case KC_ENTER: case KC_ENTER:
// 当按下回车时播放音符 // 当按下回车时播放音符
if (record->event.pressed) { if (record->event.pressed) {
PLAY_NOTE_ARRAY(tone_qwerty); PLAY_SONG(tone_qwerty);
} }
return true; // 让QMK触发回车按下/释放事件 return true; // 让QMK触发回车按下/释放事件
default: default:
@@ -413,7 +413,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
case KC_ENTER: case KC_ENTER:
// 在按下回车时播放音符 // 在按下回车时播放音符
if (record->event.pressed) { if (record->event.pressed) {
PLAY_NOTE_ARRAY(tone_qwerty); PLAY_SONG(tone_qwerty);
} }
return true; // 让QMK产生回车按下/释放事件 return true; // 让QMK产生回车按下/释放事件
case RGB_LYR: // 本句让underglow作为层指示,或正常使用。 case RGB_LYR: // 本句让underglow作为层指示,或正常使用。
@@ -473,7 +473,7 @@ void eeconfig_init_user(void) { // EEPROM正被重置
想要修改基于键码的`TAPPING TERM`,你要向`keymap.c`文件添加如下代码: 想要修改基于键码的`TAPPING TERM`,你要向`keymap.c`文件添加如下代码:
```c ```c
uint16_t get_tapping_term(uint16_t keycode) { uint16_t get_tapping_term(uint16_t keycode, keyrecord_t *record) {
switch (keycode) { switch (keycode) {
case SFT_T(KC_SPC): case SFT_T(KC_SPC):
return TAPPING_TERM + 1250; return TAPPING_TERM + 1250;
+1 -1
View File
@@ -10,6 +10,6 @@
QMK的官方论坛是[/r/olkb](https://reddit.com/r/olkb) 在[reddit.com](https://reddit.com)上. QMK的官方论坛是[/r/olkb](https://reddit.com/r/olkb) 在[reddit.com](https://reddit.com)上.
## Github的Issue ## GitHub的Issue
你可以在GitHub上 [提出issue](https://github.com/qmk/qmk_firmware/issues).当您的问题需要长期讨论或调试时,这尤其方便。 你可以在GitHub上 [提出issue](https://github.com/qmk/qmk_firmware/issues).当您的问题需要长期讨论或调试时,这尤其方便。
+6 -6
View File
@@ -1,16 +1,16 @@
# 如何在QMK中使用Github # 如何在QMK中使用GitHub
Github can be a little tricky to those that aren't familiar with it - this guide will walk through each step of forking, cloning, and submitting a pull request with QMK. GitHub can be a little tricky to those that aren't familiar with it - this guide will walk through each step of forking, cloning, and submitting a pull request with QMK.
?> 本教程假设您已安装GitHub,并且您喜欢使用命令行工作。 ?> 本教程假设您已安装GitHub,并且您喜欢使用命令行工作。
首先 [Github上的QMK页面](https://github.com/qmk/qmk_firmware), 您能看到右上方有个按钮写着"Fork": 首先 [GitHub上的QMK页面](https://github.com/qmk/qmk_firmware), 您能看到右上方有个按钮写着"Fork":
![从Github上分叉](http://i.imgur.com/8Toomz4.jpg) ![从GitHub上分叉](http://i.imgur.com/8Toomz4.jpg)
如果你是某组织成员,你将需要选择分叉到哪个账户。一般情况下, 你是想要分叉到你的私人账户下。当你完成分叉 (有时需要等一会), 点击"Clone or Download" 按钮: 如果你是某组织成员,你将需要选择分叉到哪个账户。一般情况下, 你是想要分叉到你的私人账户下。当你完成分叉 (有时需要等一会), 点击"Clone or Download" 按钮:
!从Github下载](http://i.imgur.com/N1NYcSz.jpg) !从GitHub下载](http://i.imgur.com/N1NYcSz.jpg)
你要选择 "HTTPS", 然后选择链接复制: 你要选择 "HTTPS", 然后选择链接复制:
@@ -54,7 +54,7 @@ To https://github.com/whoeveryouare/qmk_firmware.git
+ 20043e64...7da94ac5 master -> master + 20043e64...7da94ac5 master -> master
``` ```
现在你的改动已经在你Github上的分支中了 - 如果你回到这 (`https://github.com/你的GitHub账户名/qmk_firmware`) ,你可以点击下方所示按钮创建 "New Pull Request": 现在你的改动已经在你GitHub上的分支中了 - 如果你回到这 (`https://github.com/你的GitHub账户名/qmk_firmware`) ,你可以点击下方所示按钮创建 "New Pull Request":
![新的 Pull Request](http://i.imgur.com/DxMHpJ8.jpg) ![新的 Pull Request](http://i.imgur.com/DxMHpJ8.jpg)
+1 -1
View File
@@ -20,7 +20,7 @@
## 创建`default` 布局副本 ## 创建`default` 布局副本
打开`keymaps`文件夹后,您将需要创建`default`文件夹的副本。我们强烈建议您将文件夹命名为与Github用户名相同的名称,但您也可以使用任何您想使用的名称,只要它只包含小写字母、数字和下划线字符。 打开`keymaps`文件夹后,您将需要创建`default`文件夹的副本。我们强烈建议您将文件夹命名为与GitHub用户名相同的名称,但您也可以使用任何您想使用的名称,只要它只包含小写字母、数字和下划线字符。
要自动执行此过程,您还可以选择运行`new_keymap.sh`脚本。 要自动执行此过程,您还可以选择运行`new_keymap.sh`脚本。
+2 -2
View File
@@ -38,7 +38,7 @@ int16_t analogRead(uint8_t pin) {
// clang-format on // clang-format on
if (pin >= 12) return 0; if (pin >= 12) return 0;
return adc_read(pgm_read_byte(pin_to_mux + pin)); return adc_read(pgm_read_byte(pin_to_mux + pin));
#elif defined(__AVR_AT90USB646__) || defined(__AVR_AT90USB647__) || defined(__AVR_AT90USB1286__) || defined(__AVR_AT90USB1287__) || defined(__AVR_ATmega328P__) #elif defined(__AVR_AT90USB646__) || defined(__AVR_AT90USB647__) || defined(__AVR_AT90USB1286__) || defined(__AVR_AT90USB1287__) || defined(__AVR_ATmega328P__) || defined(__AVR_ATmega328__)
if (pin >= 8) return 0; if (pin >= 8) return 0;
return adc_read(pin); return adc_read(pin);
#else #else
@@ -85,7 +85,7 @@ uint8_t pinToMux(pin_t pin) {
case A6: return _BV(MUX2) | _BV(MUX1); // ADC6 case A6: return _BV(MUX2) | _BV(MUX1); // ADC6
case A7: return _BV(MUX2) | _BV(MUX1) | _BV(MUX0); // ADC7 case A7: return _BV(MUX2) | _BV(MUX1) | _BV(MUX0); // ADC7
default: return _BV(MUX4) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1) | _BV(MUX0); // 0V default: return _BV(MUX4) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1) | _BV(MUX0); // 0V
#elif defined(__AVR_ATmega328P__) #elif defined(__AVR_ATmega328P__) || defined(__AVR_ATmega328__)
case C0: return 0; // ADC0 case C0: return 0; // ADC0
case C1: return _BV(MUX0); // ADC1 case C1: return _BV(MUX0); // ADC1
case C2: return _BV(MUX1); // ADC2 case C2: return _BV(MUX1); // ADC2
+1 -1
View File
@@ -2,7 +2,7 @@
* APA102 lib V1.0a * APA102 lib V1.0a
* *
* Controls APA102 RGB-LEDs * Controls APA102 RGB-LEDs
* Author: Mikkel (Duckle29 on github) * Author: Mikkel (Duckle29 on GitHub)
* *
* Dec 22th, 2017 v1.0a Initial Version * Dec 22th, 2017 v1.0a Initial Version
* *
+1 -1
View File
@@ -14,7 +14,7 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
/* Library made by: g4lvanix /* Library made by: g4lvanix
* Github repository: https://github.com/g4lvanix/I2C-master-lib * GitHub repository: https://github.com/g4lvanix/I2C-master-lib
*/ */
#include <avr/io.h> #include <avr/io.h>
+1 -1
View File
@@ -14,7 +14,7 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
/* Library made by: g4lvanix /* Library made by: g4lvanix
* Github repository: https://github.com/g4lvanix/I2C-master-lib * GitHub repository: https://github.com/g4lvanix/I2C-master-lib
*/ */
#ifndef I2C_MASTER_H #ifndef I2C_MASTER_H
+1 -1
View File
@@ -14,7 +14,7 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
/* Library made by: g4lvanix /* Library made by: g4lvanix
* Github repository: https://github.com/g4lvanix/I2C-slave-lib * GitHub repository: https://github.com/g4lvanix/I2C-slave-lib
*/ */
#include <avr/io.h> #include <avr/io.h>
+1 -1
View File
@@ -14,7 +14,7 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
/* Library made by: g4lvanix /* Library made by: g4lvanix
* Github repository: https://github.com/g4lvanix/I2C-slave-lib * GitHub repository: https://github.com/g4lvanix/I2C-slave-lib
Info: Inititate the library by giving the required address. Info: Inititate the library by giving the required address.
Read or write to the necessary buffer according to the opperation. Read or write to the necessary buffer according to the opperation.
+1 -1
View File
@@ -28,7 +28,7 @@
# define SPI_SCK_PIN B7 # define SPI_SCK_PIN B7
# define SPI_MOSI_PIN B5 # define SPI_MOSI_PIN B5
# define SPI_MISO_PIN B6 # define SPI_MISO_PIN B6
#elif defined(__AVR_ATmega328P__) #elif defined(__AVR_ATmega328P__) || defined(__AVR_ATmega328__)
# define SPI_SCK_PIN B5 # define SPI_SCK_PIN B5
# define SPI_MOSI_PIN B3 # define SPI_MOSI_PIN B3
# define SPI_MISO_PIN B4 # define SPI_MISO_PIN B4
+1 -1
View File
@@ -25,7 +25,7 @@ typedef int16_t spi_status_t;
# define SPI_SS_PIN B0 # define SPI_SS_PIN B0
#elif defined(__AVR_ATmega32A__) #elif defined(__AVR_ATmega32A__)
# define SPI_SS_PIN B4 # define SPI_SS_PIN B4
#elif defined(__AVR_ATmega328P__) #elif defined(__AVR_ATmega328P__) || defined(__AVR_ATmega328__)
# define SPI_SS_PIN B2 # define SPI_SS_PIN B2
#endif #endif
+7 -6
View File
@@ -37,8 +37,9 @@
// #define DEBUG_EEPROM_OUTPUT // #define DEBUG_EEPROM_OUTPUT
#ifdef DEBUG_EEPROM_OUTPUT #if defined(CONSOLE_ENABLE) && defined(DEBUG_EEPROM_OUTPUT)
# include "print.h" # include "timer.h"
# include "debug.h"
#endif // DEBUG_EEPROM_OUTPUT #endif // DEBUG_EEPROM_OUTPUT
static inline void init_i2c_if_required(void) { static inline void init_i2c_if_required(void) {
@@ -60,7 +61,7 @@ static inline void fill_target_address(uint8_t *buffer, const void *addr) {
void eeprom_driver_init(void) {} void eeprom_driver_init(void) {}
void eeprom_driver_erase(void) { void eeprom_driver_erase(void) {
#ifdef CONSOLE_ENABLE #if defined(CONSOLE_ENABLE) && defined(DEBUG_EEPROM_OUTPUT)
uint32_t start = timer_read32(); uint32_t start = timer_read32();
#endif #endif
@@ -70,7 +71,7 @@ void eeprom_driver_erase(void) {
eeprom_write_block(buf, (void *)(uintptr_t)addr, EXTERNAL_EEPROM_PAGE_SIZE); eeprom_write_block(buf, (void *)(uintptr_t)addr, EXTERNAL_EEPROM_PAGE_SIZE);
} }
#ifdef CONSOLE_ENABLE #if defined(CONSOLE_ENABLE) && defined(DEBUG_EEPROM_OUTPUT)
dprintf("EEPROM erase took %ldms to complete\n", ((long)(timer_read32() - start))); dprintf("EEPROM erase took %ldms to complete\n", ((long)(timer_read32() - start)));
#endif #endif
} }
@@ -83,7 +84,7 @@ void eeprom_read_block(void *buf, const void *addr, size_t len) {
i2c_transmit(EXTERNAL_EEPROM_I2C_ADDRESS((uintptr_t)addr), complete_packet, EXTERNAL_EEPROM_ADDRESS_SIZE, 100); i2c_transmit(EXTERNAL_EEPROM_I2C_ADDRESS((uintptr_t)addr), complete_packet, EXTERNAL_EEPROM_ADDRESS_SIZE, 100);
i2c_receive(EXTERNAL_EEPROM_I2C_ADDRESS((uintptr_t)addr), buf, len, 100); i2c_receive(EXTERNAL_EEPROM_I2C_ADDRESS((uintptr_t)addr), buf, len, 100);
#ifdef DEBUG_EEPROM_OUTPUT #if defined(CONSOLE_ENABLE) && defined(DEBUG_EEPROM_OUTPUT)
dprintf("[EEPROM R] 0x%04X: ", ((int)addr)); dprintf("[EEPROM R] 0x%04X: ", ((int)addr));
for (size_t i = 0; i < len; ++i) { for (size_t i = 0; i < len; ++i) {
dprintf(" %02X", (int)(((uint8_t *)buf)[i])); dprintf(" %02X", (int)(((uint8_t *)buf)[i]));
@@ -110,7 +111,7 @@ void eeprom_write_block(const void *buf, void *addr, size_t len) {
complete_packet[EXTERNAL_EEPROM_ADDRESS_SIZE + i] = read_buf[i]; complete_packet[EXTERNAL_EEPROM_ADDRESS_SIZE + i] = read_buf[i];
} }
#ifdef DEBUG_EEPROM_OUTPUT #if defined(CONSOLE_ENABLE) && defined(DEBUG_EEPROM_OUTPUT)
dprintf("[EEPROM W] 0x%04X: ", ((int)target_addr)); dprintf("[EEPROM W] 0x%04X: ", ((int)target_addr));
for (uint8_t i = 0; i < write_length; i++) { for (uint8_t i = 0; i < write_length; i++) {
dprintf(" %02X", (int)(read_buf[i])); dprintf(" %02X", (int)(read_buf[i]));
+7 -6
View File
@@ -50,8 +50,9 @@
# define EXTERNAL_EEPROM_SPI_TIMEOUT 100 # define EXTERNAL_EEPROM_SPI_TIMEOUT 100
#endif #endif
#ifdef CONSOLE_ENABLE #if defined(CONSOLE_ENABLE) && defined(DEBUG_EEPROM_OUTPUT)
# include "print.h" # include "timer.h"
# include "debug.h"
#endif // CONSOLE_ENABLE #endif // CONSOLE_ENABLE
static void init_spi_if_required(void) { static void init_spi_if_required(void) {
@@ -93,7 +94,7 @@ static void spi_eeprom_transmit_address(uintptr_t addr) {
void eeprom_driver_init(void) {} void eeprom_driver_init(void) {}
void eeprom_driver_erase(void) { void eeprom_driver_erase(void) {
#ifdef CONSOLE_ENABLE #if defined(CONSOLE_ENABLE) && defined(DEBUG_EEPROM_OUTPUT)
uint32_t start = timer_read32(); uint32_t start = timer_read32();
#endif #endif
@@ -103,7 +104,7 @@ void eeprom_driver_erase(void) {
eeprom_write_block(buf, (void *)(uintptr_t)addr, EXTERNAL_EEPROM_PAGE_SIZE); eeprom_write_block(buf, (void *)(uintptr_t)addr, EXTERNAL_EEPROM_PAGE_SIZE);
} }
#ifdef CONSOLE_ENABLE #if defined(CONSOLE_ENABLE) && defined(DEBUG_EEPROM_OUTPUT)
dprintf("EEPROM erase took %ldms to complete\n", ((long)(timer_read32() - start))); dprintf("EEPROM erase took %ldms to complete\n", ((long)(timer_read32() - start)));
#endif #endif
} }
@@ -141,7 +142,7 @@ void eeprom_read_block(void *buf, const void *addr, size_t len) {
spi_eeprom_transmit_address((uintptr_t)addr); spi_eeprom_transmit_address((uintptr_t)addr);
spi_receive(buf, len); spi_receive(buf, len);
#ifdef DEBUG_EEPROM_OUTPUT #if defined(CONSOLE_ENABLE) && defined(DEBUG_EEPROM_OUTPUT)
dprintf("[EEPROM R] 0x%08lX: ", ((uint32_t)(uintptr_t)addr)); dprintf("[EEPROM R] 0x%08lX: ", ((uint32_t)(uintptr_t)addr));
for (size_t i = 0; i < len; ++i) { for (size_t i = 0; i < len; ++i) {
dprintf(" %02X", (int)(((uint8_t *)buf)[i])); dprintf(" %02X", (int)(((uint8_t *)buf)[i]));
@@ -200,7 +201,7 @@ void eeprom_write_block(const void *buf, void *addr, size_t len) {
return; return;
} }
#ifdef DEBUG_EEPROM_OUTPUT #if defined(CONSOLE_ENABLE) && defined(DEBUG_EEPROM_OUTPUT)
dprintf("[EEPROM W] 0x%08lX: ", ((uint32_t)(uintptr_t)target_addr)); dprintf("[EEPROM W] 0x%08lX: ", ((uint32_t)(uintptr_t)target_addr));
for (size_t i = 0; i < write_length; i++) { for (size_t i = 0; i < write_length; i++) {
dprintf(" %02X", (int)(uint8_t)(read_buf[i])); dprintf(" %02X", (int)(uint8_t)(read_buf[i]));
+1 -1
View File
@@ -64,7 +64,7 @@ uint8_t g_twi_transfer_buffer[20];
uint8_t g_pwm_buffer[DRIVER_COUNT][144]; uint8_t g_pwm_buffer[DRIVER_COUNT][144];
bool g_pwm_buffer_update_required[DRIVER_COUNT] = {false}; bool g_pwm_buffer_update_required[DRIVER_COUNT] = {false};
uint8_t g_led_control_registers[DRIVER_COUNT][18] = {{0}, {0}}; uint8_t g_led_control_registers[DRIVER_COUNT][18] = {{0}};
bool g_led_control_registers_update_required[DRIVER_COUNT] = {false}; bool g_led_control_registers_update_required[DRIVER_COUNT] = {false};
// This is the bit pattern in the LED control registers // This is the bit pattern in the LED control registers
+1 -1
View File
@@ -4,7 +4,7 @@ An open source 2x4 macropad designed by Charles Garcia.
Keyboard Maintainer: [Charles Garcia](https://github.com/cgarcia2097) Keyboard Maintainer: [Charles Garcia](https://github.com/cgarcia2097)
Hardware Supported: 8-Pack Macropad PCB Hardware Supported: 8-Pack Macropad PCB
Hardware Availability: [8-Pack Github](https://github.com/cgarcia2097/8-Pack) Hardware Availability: [8-Pack GitHub](https://github.com/cgarcia2097/8-Pack)
Make example for this keyboard (after setting up your build environment): Make example for this keyboard (after setting up your build environment):
+1 -1
View File
@@ -6,7 +6,7 @@ A first attempt at a PCB design for a mechanical keyboard. Includes rotary encod
* Keyboard Maintainer: [nickolaij](https://github.com/nickolaij) * Keyboard Maintainer: [nickolaij](https://github.com/nickolaij)
* Hardware Supported: Abacus PCB, [Elite C Microcontroller](https://keeb.io/products/elite-c-usb-c-pro-micro-replacement-arduino-compatible-atmega32u4) or Pro Micro Microcontroller (Elite C has additional pins for encoder) * Hardware Supported: Abacus PCB, [Elite C Microcontroller](https://keeb.io/products/elite-c-usb-c-pro-micro-replacement-arduino-compatible-atmega32u4) or Pro Micro Microcontroller (Elite C has additional pins for encoder)
* Hardware Availability: [Abacus PCB Github](https://github.com/nickolaij/Abacus_Rev2) * Hardware Availability: [Abacus PCB GitHub](https://github.com/nickolaij/Abacus_Rev2)
Make example for this keyboard (after setting up your build environment): Make example for this keyboard (after setting up your build environment):
+4 -4
View File
@@ -5,7 +5,7 @@
"width": 15.5, "width": 15.5,
"height": 4.25, "height": 4.25,
"layouts": { "layouts": {
"LAYOUT_all": { "LAYOUT": {
"layout": [ "layout": [
{"label":"Tab", "x":0, "y":0}, {"label":"Tab", "x":0, "y":0},
{"label":"Q", "x":1, "y":0}, {"label":"Q", "x":1, "y":0},
@@ -33,7 +33,7 @@
{"label":"J", "x":7.25, "y":1}, {"label":"J", "x":7.25, "y":1},
{"label":"K", "x":8.25, "y":1}, {"label":"K", "x":8.25, "y":1},
{"label":"L", "x":9.25, "y":1}, {"label":"L", "x":9.25, "y":1},
{"label":"Enter", "x":10.25, "y":1.75}, {"label":"Enter", "x":10.25, "y":1, "w":1.75},
{"label":"4", "x":12.5, "y":1}, {"label":"4", "x":12.5, "y":1},
{"label":"5", "x":13.5, "y":1}, {"label":"5", "x":13.5, "y":1},
{"label":"6", "x":14.5, "y":1}, {"label":"6", "x":14.5, "y":1},
@@ -47,7 +47,7 @@
{"label":"N", "x":6.75, "y":2}, {"label":"N", "x":6.75, "y":2},
{"label":"M", "x":7.75, "y":2}, {"label":"M", "x":7.75, "y":2},
{"label":"<", "x":8.75, "y":2}, {"label":"<", "x":8.75, "y":2},
{"label":"Fn1", "x":9.75, "y":2}, {"label":"Fn1", "x":9.75, "y":2, "w":1.25},
{"label":"Up", "x":11.25, "y":2.25}, {"label":"Up", "x":11.25, "y":2.25},
{"label":"1", "x":12.5, "y":2}, {"label":"1", "x":12.5, "y":2},
{"label":"2", "x":13.5, "y":2}, {"label":"2", "x":13.5, "y":2},
@@ -63,7 +63,7 @@
{"label":"Down", "x":11.25, "y":3.25}, {"label":"Down", "x":11.25, "y":3.25},
{"label":"Right", "x":12.25, "y":3.25}, {"label":"Right", "x":12.25, "y":3.25},
{"label":"0", "x":13.5, "y":3}, {"label":"0", "x":13.5, "y":3},
{"label":".", "x":14.5, "y":3}, {"label":".", "x":14.5, "y":3}
] ]
} }
} }
+1 -1
View File
@@ -4,7 +4,7 @@
A custom luxurious 60 with F-row and Macro A custom luxurious 60 with F-row and Macro
* Keyboard Maintainer: [Yiancar](http://yiancar-designs.com/) and on [github](https://github.com/yiancar) * Keyboard Maintainer: [Yiancar](http://yiancar-designs.com/) and on [GitHub](https://github.com/yiancar)
* Hardware Supported: ATmega32U4 * Hardware Supported: ATmega32U4
* Hardware Availability: Small production run by mrpetrov#9585 and [protoTypist](https://discord.gg/UvskpBB) * Hardware Availability: Small production run by mrpetrov#9585 and [protoTypist](https://discord.gg/UvskpBB)
+1 -1
View File
@@ -4,7 +4,7 @@
A custom luxurious numpad to match Allison A custom luxurious numpad to match Allison
* Keyboard Maintainer: [Yiancar](http://yiancar-designs.com/) and on [github](https://github.com/yiancar) * Keyboard Maintainer: [Yiancar](http://yiancar-designs.com/) and on [GitHub](https://github.com/yiancar)
* Hardware Supported: ATmega32U4 * Hardware Supported: ATmega32U4
* Hardware Availability: Small production run by mrpetrov#9585 and [protoTypist](https://discord.gg/UvskpBB) * Hardware Availability: Small production run by mrpetrov#9585 and [protoTypist](https://discord.gg/UvskpBB)
+1 -1
View File
@@ -6,7 +6,7 @@ Keyboard Maintainer: QMK Community
Hardware Supported: Alps64 PCB Hardware Supported: Alps64 PCB
Hardware Availability: https://geekhack.org/index.php?topic=69666.0 Hardware Availability: https://geekhack.org/index.php?topic=69666.0
QMK is not the Alps64 official firmware. To use the official tools, refer to [TMK Keymap Editor](http://www.tmk-kbd.com/tmk_keyboard/editor/unimap/?alps64) or [TMK Keyboard Firmware on Github](https://github.com/tmk/tmk_keyboard). QMK is not the Alps64 official firmware. To use the official tools, refer to [TMK Keymap Editor](http://www.tmk-kbd.com/tmk_keyboard/editor/unimap/?alps64) or [TMK Keyboard Firmware on GitHub](https://github.com/tmk/tmk_keyboard).
Make example for this keyboard (after setting up your build environment): Make example for this keyboard (after setting up your build environment):
+10 -10
View File
@@ -14,13 +14,13 @@ BOOTLOADER = atmel-dfu
# Build Options # Build Options
# comment out to disable the options. # comment out to disable the options.
# #
BOOTMAGIC_ENABLE ?= yes # Virtual DIP switch configuration BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration
MOUSEKEY_ENABLE ?= no # Mouse keys MOUSEKEY_ENABLE = no # Mouse keys
EXTRAKEY_ENABLE ?= yes # Audio control and System control EXTRAKEY_ENABLE = yes # Audio control and System control
CONSOLE_ENABLE ?= no # Console for debug CONSOLE_ENABLE = no # Console for debug
COMMAND_ENABLE ?= no # Commands for debug and configuration COMMAND_ENABLE = no # Commands for debug and configuration
SLEEP_LED_ENABLE ?= yes # Breathing sleep LED during USB suspend SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend
NKRO_ENABLE ?= yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work NKRO_ENABLE = yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
BACKLIGHT_ENABLE ?= yes # Enable keyboard backlight functionality BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
AUDIO_ENABLE ?= no AUDIO_ENABLE = no
RGBLIGHT_ENABLE ?= yes RGBLIGHT_ENABLE = yes
+12 -12
View File
@@ -14,15 +14,15 @@ BOOTLOADER = atmel-dfu
# Build Options # Build Options
# comment out to disable the options. # comment out to disable the options.
# #
BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration
MOUSEKEY_ENABLE ?= no # Mouse keys MOUSEKEY_ENABLE = no # Mouse keys
EXTRAKEY_ENABLE ?= yes # Audio control and System control EXTRAKEY_ENABLE = yes # Audio control and System control
CONSOLE_ENABLE ?= yes # Console for debug CONSOLE_ENABLE = yes # Console for debug
COMMAND_ENABLE ?= yes # Commands for debug and configuration COMMAND_ENABLE = yes # Commands for debug and configuration
NKRO_ENABLE ?= yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work NKRO_ENABLE = yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
RGBLIGHT_ENABLE ?= yes # Enable keyboard underlight functionality RGBLIGHT_ENABLE = yes # Enable keyboard underlight functionality
BACKLIGHT_ENABLE ?= yes # Enable keyboard backlight functionality BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
MIDI_ENABLE ?= no # MIDI controls MIDI_ENABLE = no # MIDI controls
AUDIO_ENABLE ?= no AUDIO_ENABLE = no
UNICODE_ENABLE ?= no # Unicode UNICODE_ENABLE = no # Unicode
BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+72
View File
@@ -0,0 +1,72 @@
/*
Copyright 2020 Leon Anavi <leon@anavi.org>
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/>.
*/
#pragma once
#include "config_common.h"
/* USB Device descriptor parameter */
#define VENDOR_ID 0xCEEB
#define PRODUCT_ID 0x0001
#define DEVICE_VER 0x0001
#define MANUFACTURER ANAVI
#define PRODUCT Macro Pad 8
#define DESCRIPTION 8-key mechanical keyboard/keypad/macropad with backlit, mini OLED display and RGB LED strip
/* key matrix size */
#define MATRIX_ROWS 2
#define MATRIX_COLS 4
/*
* Keyboard Matrix Assignments
*
* Change this to how you wired your keyboard
* COLS: AVR pins used for columns, left to right
* ROWS: AVR pins used for rows, top to bottom
* DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
* ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
* NO_DIODE = switches are directly connected to AVR pins
*
*/
#define DIRECT_PINS { \
{ D4, F6, B5, E6 }, \
{ F5, F7, B4, C6 } \
}
#define BACKLIGHT_PIN D7
#define BACKLIGHT_BREATHING
#define BACKLIGHT_LEVELS 3
#define RGBLIGHT_SLEEP
#define UNUSED_PINS
/* ws2812B RGB LED */
#ifdef RGBLIGHT_ENABLE
# define RGB_DI_PIN F4
# define RGBLIGHT_ANIMATIONS
# define RGBLED_NUM 4
# define RGBLIGHT_HUE_STEP 10
# define RGBLIGHT_SAT_STEP 17
# define RGBLIGHT_VAL_STEP 17
# define RGBLIGHT_LIMIT_VAL 255
#endif
#ifdef OLED_DRIVER_ENABLE
# define OLED_DISPLAY_128X64
# define OLED_TIMEOUT 60000
# define OLED_FONT_H "keyboards/anavi/macropad8/glcdfont.c"
#endif
Loaded 100 of 1328 files, more files were not shown because too many files have changed in this diff. Show more