Compare commits

...

945 Commits

Author SHA1 Message Date
just-another-jxliu
99d89b124f Drop FW Fixes for massdrop alt, ctrl, rocketeer & shift keyboards (#8)
- In config.h of each, added '#define BOOTKEY_HOLD_MS  2000' to define hold time required to active Boot key (was 500ms hardcode)
- Updated all active keymap.c files to use this define
- Added line in quantum.c in MAGIC_TOGGLE_NKRO case to clear_keyboard() before toggling nkro state to fix stuck key issues when switching NKRO.
2019-08-15 00:51:54 -07:00
just-another-jxliu
8b5e4959a0 Update SHIFT and Rocketeer config_led.c (#7) 2019-08-05 07:01:08 -07:00
just-another-jxliu
3cb242b47d Change debounce methodology to shift debounce window until row is settled (#5) 2019-08-02 16:44:19 -07:00
jonathan.liu
9b80ceca52 Rocketeer: LED positions for bottom LEDs, update mac_md keymap 2019-07-16 08:47:51 -07:00
jonathan.liu
9fdfae83d1 Misc including Rocketeer config_led.c 2019-07-12 03:05:12 -07:00
jonathan.liu
9075995ea3 Merge remote-tracking branch 'upstream/master' 2019-07-12 03:04:30 -07:00
jonathan.liu
c529972416 Merge remote-tracking branch 'origin/md_1800_qmk' 2019-07-12 00:49:08 -07:00
jonathan.liu
4c6b0f0291 Merge commit 'd0fb7005d51be7c876e63e87778d080c8a733a13' 2019-07-12 00:47:55 -07:00
jonathan.liu
9352fbee07 Merge commit '5fcd744ddba591829a129560992b2e43fb615d4d' 2019-07-11 23:47:27 -07:00
jonathan.liu
441b212c86 Upstream merge up to 02d44beb44 2019-07-11 23:21:18 -07:00
skullydazed
37d2f6dc2a Switch version incrementing to the command put together by @noroadsleft. (#6310)
* Switch version incrementing to the command put together by @noroadsleft.

* Update util/travis_compiled_push.sh

Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com>
2019-07-11 22:33:25 -07:00
Cody Bender
475d2c0c30 [Keyboard] Adding KeyHive Maypad (#6287)
* added files for KeyHive Maypad

* updated maypad files and moved honeycomb inside keyhive dir

* fixed file paths, incorporated changes with fauxpark's suggestions, undid honeycomb move

* updated with fixes from PR

* added new lines to end of honeycomb files to fix compiling

* Updated info.json to match the macro name from maypad.h

Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com>

* reordered layout in info.json

Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com>

* removed KEYMAP from maypad.h

Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com>

* removed extraneous keymap files

* pulled qmk/master for honeycomb

* added ortho_5x4 and keymap cleanup

* matched identities in maypad.h

* added bootmagic functionality to maypad

* changed bootmagic to lite
2019-07-11 13:01:17 -07:00
omkbd
2121de9192 [Keyboard] [runner3680] Fix the number of keys (#6302)
* Fix the number of keys

* add RGBLIGHT_LIMIT_VAL

* fix RGBLED_NUM and COLS
2019-07-11 12:27:13 -07:00
fauxpark
901edea927 [Keyboard] Fix XD96 info.json (#6309)
* Fix XD96 info.json

* Comma

* Another comma

Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com>
2019-07-11 12:09:48 -07:00
fauxpark
8e348c427d Display firmware size percentage (#6307) 2019-07-11 12:05:13 -07:00
fauxpark
2bbbfc6154 [Keyboard] Update Felix keyboard (#6306) 2019-07-11 12:04:22 -07:00
fauxpark
ecf0612cc8 [Docs] Clarify the rules.mk setup for Unicode (#6286)
* Clarify the rules.mk setup for Unicode

* code point

Co-Authored-By: Konstantin Đorđević <vomindoraan@gmail.com>

* Remove "your"

Co-Authored-By: Konstantin Đorđević <vomindoraan@gmail.com>

* Undo a line change

Co-Authored-By: Konstantin Đorđević <vomindoraan@gmail.com>

* dot the comma

Co-Authored-By: Konstantin Đorđević <vomindoraan@gmail.com>

* Update docs/feature_unicode.md

Co-Authored-By: Konstantin Đorđević <vomindoraan@gmail.com>
2019-07-11 11:33:55 -07:00
yttyx
676633e1f3 [Keymap] Balance Twelve / Steno Keymap for Planck (#6283)
* New keymap. Cursor layer does not work.

* Refinements to layout over months of use.

* Changes following review.

* Changes following review.
2019-07-11 11:32:47 -07:00
Napoleon Wulkan
e6420f0bd8 [Keyboard] Add handwired Wulkan keyboard (#6282)
* added handwired keyboard wulkan

* added info.json for qmk configurator

* fixed spelling

* enum dont need to be assigned to zero

* removed cflag from readme

* updated rules.mk

* removed unneeded rows from config

* moved unicode to keymap conf

* fix adjust layer and comments for keymap
2019-07-11 11:31:36 -07:00
XScorpion2
3ee062222a Fixing effects to respect user sat and val levels (#6275) 2019-07-11 11:29:19 -07:00
Stevan Milic
3dd2905b7b Add personal KBD67 keymap (#6292)
* Add kbdfans/kbd67/hotswap:stevanmilic keymap

* Change Fn+H, Fn+L to Ctrl+Left, Ctrl+Right

* Add keymap comments
2019-07-11 07:37:16 -07:00
zjp
607f6f5c16 Fix typo in Gentoo docstring (#6303) 2019-07-10 21:22:23 -07:00
noroadsleft
ffff0f03cb Fix bug in Mechllama G35 info.json (#6294) 2019-07-10 16:25:54 -07:00
noroadsleft
721b3546f6 QMK Configurator support for NEK Type A (#6295)
* QMK Configurator support for NEK Type A

* Update labels to match default keymap
2019-07-10 16:21:38 -07:00
Drashna Jaelre
05a97482e6 [Keyboard] Enable LTO on Handwired/Promethium to reduce compiled size (#6227) 2019-07-09 12:59:05 -07:00
Konstantin Đorđević
c69060465e Fix parentheses in macros, and in general clean up quantum.h (#5021)
* Fix up GPIO macros

* Fix up send string macros

`string` arguments must not be parenthesized

* Fix up miscellaneous macros

* Make indentation uniform (4 spaces)

* Make #ifdef vs #if defined usage consistent

* Reorder standard includes

* Revert indentation changes as per review comments

* Revert #if defined(__AVR__) → #ifdef __AVR__ change

* Change 2 space indent to 4 spaces on a couple of lines

* Replace include guard with #pragma once
2019-07-09 11:16:24 -07:00
Drashna Jaelre
37be1cb513 Fix debouncing issue for eager algorithms (#6081)
* Fix debouncing issue for eager algos

* Fix up typo issue
2019-07-09 11:09:54 -07:00
Kaylyn Bogle
207e50c534 Add G35 keyboard (#6263) 2019-07-09 08:01:11 -07:00
Drashna Jaelre
6cccc22be9 Use QUANTUM_LIB_SRC for i2c_master.c inclusion (#5617)
Using QUANTUM_LIB_SRC prevents the warning when multiple sources add the i2c_master.c file. Boards such as the Ergodox EZ Glow see this warning every time they compile because the board uses the file in general, and because the RGB LED Matrix requires it, as well.
2019-07-09 07:57:14 -07:00
noroadsleft
3184303037 [Keyboard] Espectro: add LAYOUT_split_bs_joined_right data to QMK Configurator (#6289) 2019-07-09 07:17:37 -07:00
noroadsleft
d780c2729b [Keyboard] Omnikeyish: fix LAYOUT_101 macro (#6285)
* Fix LAYOUT_101 macro

* Add default_101 keymap to prove the LAYOUT_101 macro works
2019-07-09 07:06:30 -07:00
Konstantin Đorđević
220873dfeb [Keymap] Add personal Wasdat keymap, update other keymaps (#6290)
* Add wasdat:konstantin keymap

TODO: Move it to layouts/

* Use HHKB arrow arrangement for mouse keys on KBD6X

* Move KC_APP from Ctrl to M on all boards

* Use RCT_RSF on Melody96

* Set TAP_HOLD_CAPS_DELAY to 50 in userspace

* Use RSF_RCT instead of RCT_RSF
2019-07-09 06:52:23 -07:00
fauxpark
8b1cdd1e3d Add copyright year placeholders to new keyboard script (#6280)
* Add copyright year placeholders to new keyboard script

* More copyright header tweaks
2019-07-08 14:07:35 -07:00
Jason Krasavage
dfebfecd48 [Keymap] Added my own keymap folder (#6261)
* added iris rev 3 keymap

* stuff

* Update config.h

* Removed personal mapping folder so that I can branch it

* Added personal Iris keymap folder

* added enums, removed break after return, and removed line 3 of keymap.c

* removed process record function
2019-07-08 12:58:12 -07:00
vxid
95b2364e5a [Keymap] Add crkbd/vxid keymap (#6281) 2019-07-08 11:15:59 -07:00
XScorpion2
6e6d079dd2 Updated OLED Docs with notes about screen timeout. (#6276)
* Updated OLED Docs with notes about screen timeout.

* Update docs/feature_oled_driver.md

Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com>
2019-07-08 06:28:31 -07:00
Matthew Lyon
06ba968759 mattly's userspace and iris (#6279) 2019-07-08 06:27:30 -07:00
skullydazed
7579518613 Fix chibios so the dfu-suffix is only applied once. (#6270) 2019-07-07 09:08:49 -07:00
XScorpion2
d16db69367 Added mod carry over from press to release. (#5866)
Update docs/feature_space_cadet.md

Co-Authored-By: fauxpark <fauxpark@gmail.com>
2019-07-06 21:00:05 -07:00
GreenShadowMaker
a07da6e245 keymap for idobo (#6250)
* greenshadowmaker keymap for idobo xd75 massdrop

* remove uneeded config.h

* corrected format to match convention instead of xd75 where I accidentally started from

* fixed errors and added arrows bottom right to match my other layouts

* updated readme

* right arrow fix

* Update keyboards/idobo/keymaps/greenshadowmaker/keymap.c

removing unnecessary part, copied from different keymap

Co-Authored-By: fauxpark <fauxpark@gmail.com>

* added suggested changes

* removed unneded elements
2019-07-06 20:56:23 -07:00
fauxpark
dd1790c1b3 Noxary 268.2 update (#6254)
* Fix Noxary 268.2 layout macros & info.json

* Update Noxary 268.2 to current QMK code style
2019-07-06 20:55:25 -07:00
Sid Carter
44f3c614c2 My personal keymap for the Iris Rev3 (#6271)
* updates to my iris keymap

* some rational updates to the keymap - let's see how this works

* updates to my iris keymap

* some rational updates to the keymap - let's see how this works

* add mouse keys and remove unused keys and some cleanup

* a little bit more cleanup

* actually enable mousekeys

* fix markdown lint complaints

* fix capitalization

* changes made per suggestions
2019-07-06 20:53:56 -07:00
Michel Gotta
853f5231d3 [Keymap] Adding new Gherkin keymap and configuration with RGB strip (#6252) 2019-07-05 23:20:17 -07:00
Drashna Jaelre
da86484027 Add makeful rules to .editorconfig
OMFG, why is it not set to tabs??
2019-07-05 11:35:55 -07:00
Gam3cat
509a34fbab [Keymap] Fixing keymap DYNAMIC_MACRO_RANGE keycode enumeration (#6248) 2019-07-05 04:56:57 -07:00
MechMerlin
cbf76a1290 [Keyboard] Add TGR x SINGA Unikorn 60 (#6249)
* initial commit, copied from singa

* default 60_ansi LAYOUT implemented and tested workin

* add rgb underglow support bounded by ifdefs

* edit readme to provide information on reset procedure and on rgb underglow support

* improve the default keymap to have a second layer with function keys and even a RESET

* Add LAYOUT_all macro and discovered that split backspace uses an additional pin on the microcontroller

* fix up last line in readme

* Add QMK Configurator support
2019-07-05 04:54:59 -07:00
Kenny Hung
78b9922fc4 Fix linux_install.sh script for OpenSuse v 15.1 (#6251) 2019-07-05 04:52:54 -07:00
noroadsleft
9eb48deb44 Move ISO Enter to its proper place in LAYOUT_60_iso (#6240) 2019-07-04 11:59:02 -07:00
fauxpark
bbd3e05335 [Keyboard] update Wasdat custom matrix (#6247)
* Fix unselect_rows() for Wasdat custom matrix

* Add fix for matrix_scan() return too (#5984)
2019-07-04 09:05:21 -07:00
francislan
8fb10edf97 [Keyboard] Fix Minivan K32 and K34 inversion (#6221) 2019-07-03 13:10:53 -07:00
Takeshi ISHII
f268993760 fix unselect_rows() in quantum/matrix.c (#6243)
unselect_col() uses setPinInputHigh(), but unselect_cols() uses setPinInput().
This is not correct. unselect_cols() should also use setPinInputHigh().
2019-07-03 11:50:06 -07:00
henrikosorensen
c0c8b2e50d [Keyboard] fix info.json for omnikeyish keyboards (#6189)
* fix info.json for omnikeyish keyboards

* Omnikey 101 obviously doesn't need a focus style backslash key, it has an ansi backslash already.
2019-07-03 06:00:29 -07:00
yiancar
d32ce9c746 [Keyboard] Fixed ISO keymap for Gingham (#6242) 2019-07-03 03:43:46 -07:00
francislan
5c381b34ea [Keyboard] Update catalog link in the TheVanKeyboards/Minivan Readme. (#6236)
Previous link was broken.
2019-07-03 03:38:30 -07:00
Alex Lewis
b7cdd06820 [Keymap] Add DZ60 layout that supports a hybrid hhkb layout (#6235)
* adds support for dz60 with 2 function keys

* fix images for readme

* Update readme.md

* block comment and readme cleanup
2019-07-03 03:37:43 -07:00
noroadsleft
308275909d [Keyboard] GH60 Configurator updates and modernization (#6232)
* Convert gh60.h to #pragma once include guard

* Lint gh60.h

This commit only changes white space.

* Convert info.json to debug linting

Making this file easier to read.

* Put the label keys first for LAYOUT_60_ansi

* Complete and correct key labels in info.json

* Duplicate LAYOUT as LAYOUT_all

Doing this for backwards compatibility. Has implications for user keymaps.

* Update LAYOUT_all to make sense

The original macro LAYOUT submitted for the GH60 gets a couple of things wrong:

- K49 is placed between Space and Right Alt, when it's actually the right half of a split Backspace
- K3C is assigned before K3D, when K3C is the 1u portion of a 1.75u/1u split Right Shift, and therefore K3D is actually to the left of K3C

The LAYOUT_all macro corrects these issues, but the LAYOUT macro is unchanged, so as to not break user keymaps that depend on it.

This commit also updates the default keymap to use the LAYOUT_all macro, and makes a minor change to the base layer to be more as a user would expect for the corresponding physical layout.

* Correct the layout data for the LAYOUT macro in info.json

Gives proper Configurator rendering.

* Modernize default keymap

Update the default keymap to use more modern QMK conventions.

* Modernize the LED management code

Update the LED management functions to use the GPIO functions, and clean up the led_set_kb() function.

* Update key labels in info.json for LAYOUT_60_ansi_split_rshift

Makes them consistent with the the rest of the file.

* Update Docs links in readme file
2019-07-02 09:22:56 -07:00
francislan
adda4e137e [Keymap] Replaced xxxxxxx by XXXXXXX to fix build breakage (#6228) 2019-07-02 09:21:45 -07:00
Dan Smith
8b58c67bbb [Keymap] snowkuma Planck keymap (#6225)
* Snowkuma's planck layout.

Heavily influenced by both Planck and SDOTHUMs layouts.  I have tried to
implement a comfortable layout with a wide stagger and a minimal set of
key usage.

Still a work in progress, hope it is useful to others.

* Adds simple readme file and images of layout

* Removes unused experimental definitions

* Update readme.md

Adds images of layout to readme.

* Removes accidentally added test keymap .swn .swo .swp files

* Updates config.h replaces include guard

As suggested by @noroadsleft replaces the include guard (ifndef, define
and endif) with just `#pragma once`.

* Replaces two extra KC with inbuilt QMK equivalents

custom_keycodes.h
Replaces `___f___` with the equivalent QMK alias `_______` KC_TRNS
`___x___` with the equivalent QMK alias `XXXXXXX` KC_NO

Updates keymap.c to reflect the changes made.

* Changes keymap.c to include QMK_KEYBOARD_H

Replaces planck.h and action_layer.h includes with the single inclusion
of QMK_KEYBOARD_H which includes action_layer.h automatically.

* Update keyboards/planck/keymaps/snowkuma/keymap.c

Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com>

* Update keymap.c

removes unused Coleman key code from enum planck_keycodes

* Update keymap.c removes COLEMAK key code logic
2019-07-02 09:20:44 -07:00
fauxpark
8f3dabbf3f [Keyboard] Remove empty led_set_kb() from crkbd/rev1 (#6230) 2019-07-01 22:53:28 -07:00
yiancar
c45b751b14 [Keyboard] Gingham (#6212)
* Initial

* Prepare for final release

* Final

* Update keyboards/gingham/matrix.c

Co-Authored-By: Drashna Jaelre <drashna@live.com>

* Update keyboards/gingham/rules.mk

Co-Authored-By: Drashna Jaelre <drashna@live.com>

* Update keyboards/gingham/rules.mk

Co-Authored-By: fauxpark <fauxpark@gmail.com>

* Update keyboards/gingham/config.h

Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com>

* Update keyboards/gingham/gingham.h

Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com>

* Update keyboards/hs60/v1/rules.mk

Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com>

* Update keyboards/gingham/info.json

Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com>

* Update keyboards/gingham/info.json

Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com>

* Update keyboards/gingham/info.json

Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com>

* Update keyboards/gingham/gingham.h

Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com>

* Update keyboards/gingham/gingham.h

Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com>

* Fixing copypastas

* Update keyboards/gingham/info.json

Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com>

* Update keyboards/gingham/info.json

Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com>

* Update keyboards/gingham/info.json

Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com>

* Update keyboards/gingham/info.json

Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com>

* More thingies
2019-07-01 13:11:38 -07:00
Biacco42
58641572cb [Keyboard] Add meishi2 keyboard (#6138)
* Add meishi2

* Fix pin assign

* Fix matrix representation macro

* Remove needless mcu conf
2019-07-01 12:48:34 -07:00
takashiski
c93954899e [Keyboard] Add Otaku split (#6207)
* init

* update

* split master left and right for qmk configurator

* add

* copy rev0 to rev1

* change rev1 file from rev0

* move rev0 keymap

* remove root keymap

* add comma

* update keymap

* add info.json

* update readme

* Update keyboards/otaku_split/rev1/rules.mk

Co-Authored-By: fauxpark <fauxpark@gmail.com>

* Update keyboards/otaku_split/rev0/config.h

Co-Authored-By: Drashna Jaelre <drashna@live.com>

* Update keyboards/otaku_split/rev0/readme.md

Co-Authored-By: Drashna Jaelre <drashna@live.com>

* rename .c, .h

* rename c&h files

* update rev0 readme

* copy default to sample

* remove VA_ARGS from default, rev0

* remove otaku_split.h and fixed sample keymap

* update keymaps

* update readme

* Update keyboards/otaku_split/rev1/config.h

Co-Authored-By: fauxpark <fauxpark@gmail.com>

* Update keyboards/otaku_split/rev0/rules.mk

Co-Authored-By: fauxpark <fauxpark@gmail.com>

* remove no need keycodes

* add rev0 infojson

* Update keyboards/otaku_split/rev0/config.h

Co-Authored-By: fauxpark <fauxpark@gmail.com>

* Update keyboards/otaku_split/rev0/readme.md

Co-Authored-By: fauxpark <fauxpark@gmail.com>

* Update keyboards/otaku_split/rev1/readme.md

Co-Authored-By: fauxpark <fauxpark@gmail.com>

* remove no user custom keycodes

* remove backslash

* remove backslash
2019-07-01 12:45:24 -07:00
Garret G
7095ae10f7 [Keyboard] add support for the RoPro Keyboard (#6210)
* add support for the RoPro Keyboard

* Update Readme.md

* update to missing keys in default keymap.c

* update default.c

* update formatting in ropro.h

* Update formatting on Readme.md

* Update rules.mk

* update to bootloader

* Create New File; config.h

added config.h file to pull request

* major transfer swap of ropro.h and config.h

* Update JSON to match Keymap

* Update New Layer Identifier

* Update Newbs Guide Info readme + Formatting

* Update Matrix Clarification

* Omit Layout for Clarity

* Changed default keymapbFile Title

default.c —> keymap.c

* Update Config.h

Add Rotary Encoder pins (this May not be correct)

* Add Rotary Encoder Build option

* Added rotary Encoder ID to keymap.c

* Update ropro.h

Added Commas at end of macro lines

* Update ropro.h

Added 1 “,”

* Update keymap.c

Omit suggested Line

* Update ropro.h

Format of “Lower”

* Apply suggestions from code review

Formatting of various suggested changes

Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com>

* update ropro.h

fixed rotary encoder click batch

* Update keymap.c

fixed rotary encoder click batch

* update config.h

fixed rotary encoder click batch

* "Clean Up" Keymap.c

* Update config.h

focus on Rotary and RGB activation and routing

* Update ropro.h

focus on rotary click

* update rules.mk

add RGB "underglow" function

* update readme.md

formatting and picture modifications

* update config.h

re add pragma

* Update keyboards/ropro/ropro.h

Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com>

* Update keyboards/ropro/info.json

Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com>

* Update keyboards/ropro/readme.md

Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com>

* Update keyboards/ropro/keymaps/default/keymap.c

Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com>

* Update keyboards/ropro/keymaps/default/keymap.c

Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com>
2019-07-01 12:44:02 -07:00
tucznak
aa587a5abb [Keymap] Add personal keymaps (#6217)
* TuCZnak's NIU keymap

* TuCZnak's KBD75 layout

* TuCZnak's KBD67 layout

* Implemented suggested changes

* Implemented suggested changes, cleanup

* Implemented suggested changes, cleanup
2019-07-01 12:42:17 -07:00
Danny
2c41b69d3e [Keyboard] Fix detection of Iris rev number used to set bootloader (#6226) 2019-07-01 12:21:09 -07:00
Drashna Jaelre
7ab99528d8 [Docs] Fix SFT_T in examples in advanced features page (#6223)
[docs] fix typo
2019-07-01 01:02:42 -07:00
Drashna Jaelre
57d389823b DZ60 w/ 2.25u left shift and arrow cluster (#6215)
* PoC weeheavy_2.25_lshift

* KB_B should read KC_B

* L1 work

* add play/pause and brightness to layer 1

* update README
2019-07-01 00:57:20 -07:00
tucznak
8be3c6f058 [Keyboard] Corrected Tanuki keymap to match physical appearance (#6216) 2019-07-01 00:56:42 -07:00
Franklin Harding
64aef1f4c9 [Keyboard] Add PDXKBC badge keyboard (#6218)
* Add PDXKBC badge

* Better custom keycodes enum formatting

* Remove #MCU

Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com>

* Proper README spacing

* Rename DEBOUNCING_DELAY to DEBOUNCE

Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com>

* Fix keyboard maintainer github link

* Add info.json
2019-07-01 00:49:57 -07:00
shela
c1c0cf73ce fix typo 2019-07-01 15:32:59 +09:00
Oliver Ladner
c257444509 update README 2019-06-29 23:49:14 +02:00
Oliver Ladner
c87851fcd5 add play/pause and brightness to layer 1 2019-06-29 23:35:19 +02:00
Isaac Elenbaas
86e0420b42 [Keymap] New Planck 2x2U keymap (#5519)
* Initial keymapping

* Removed unneccessary config files

* Update readme.md

* Updated symbol locations, tap dance on parentheses for brackets.

* Update readme.md

* Fixed layout image inconsistencies

* More quality shift key layer control, swapped enter + shift enter

* Keyap tweaks and config cleanup

* Almost compiling, still has layout reference issues.

* Finally compiling. 2x2u layout (default, not mine) had nonexistent keys on it

* Super minor changes

* Ctrl+Bksp after first tap

* Changed bind so un/lock is explicit to work with remote un/locking

* Added keyboard passwords please don't hate me

* Changed backspace functionality and added em dash

* Changed to send_string because it's preferred for macros

* Minor fixes

* Removed global redefinition and fixed possible issue between 6KRO and NKRO

* Cleanup

* Layer names, password layer is OSL over toggle

* Hopefully now in QMK preferred format.

* Blank passwords.c

I realized with me excluding this it wouldn't compile - so adding a blank one.

* Fixed OSLs not cancelling after tapping term

* Matrix change.

KC_NO instead of repeating.

* Unneeded line.

Co-Authored-By: IsaacElenbaas <34344969+IsaacElenbaas@users.noreply.github.com>

* Fixed return statements to work with after-press functions

* External image host

* Removed image from github

* Removed unneccessary rules.mk lines and fixed tabbing

* Typos

* Fixes upon part arrival.

* Final changes and bug fixes

* Preventing KC_NO from waking monitors.

* Fix to rest of matrices

In response to https://github.com/evillemez/qmk_firmware/issues/1—the rest have the same problem.
The switch of k37 for k36 is just for consistency between that and the 2x2u.

* Workaround for #6214, minor changes, CRLF change in passwords because it won't leave my modified no matter what I do.
2019-06-29 11:31:10 -07:00
jotix
8638b78819 [Keymap] jotix ortho_4x12 layout match new keycaps (#6209)
* jotix ortho_4x12 layout match new keycaps

* Update layouts/community/ortho_4x12/jotix/keymap.c

Co-Authored-By: fauxpark <fauxpark@gmail.com>

* Update layouts/community/ortho_4x12/jotix/keymap.c

Co-Authored-By: fauxpark <fauxpark@gmail.com>

* Update layouts/community/ortho_4x12/jotix/keymap.c

Co-Authored-By: fauxpark <fauxpark@gmail.com>

* get off layout_kc

* update readme

* get off the numpad
2019-06-29 11:22:34 -07:00
Oliver Ladner
fb6e5fd426 L1 work 2019-06-28 22:43:33 +02:00
ai03
e4b91cffea [Keyboard] Add Quasar SSK Controller (#6201)
* Begin work

* Finalize files

* Fix readme

* Update readme.md

* Add configurator support

* Update keyboards/ai03/quasar/rules.mk

Co-Authored-By: fauxpark <fauxpark@gmail.com>

* Remove tailing backslashes in keymaps
2019-06-28 10:52:25 -07:00
Vega Deftwing
064bdf7b6c [Keymap] Added 'Vega' ErgoDone layout (#6196)
* Added 'Vega' ErgoDone layout

* Changed as to Fauxpark's recomendations

* removed unused custom_keycodes
2019-06-28 10:52:00 -07:00
Michael F. Lamb
b802c0c8df [Keymap] mitosis:datagrok: use non-copyrighted songs, add workman ditty (#6205) 2019-06-28 10:50:49 -07:00
fauxpark
8c1900a658 Remove one more copyrighted song (#6200) 2019-06-26 18:12:27 -07:00
Max Rumpf
49699294b6 [Keyboard] Add Pulse 4k, a macropad by Maxr1998 (#6195)
* Add Pulse 4k, a macropad by Maxr1998

* Some config tweaks

* Remove image note

* Add license headers

* Fix media keys

* Remove Play/pause again as it doesn't work on Linux
2019-06-26 13:42:14 -07:00
vuhopkep
d4ff836d64 [Keyboard] Add Hnah40 keyboard (#6183)
* Add Hnah40 keyboard

Adding new keyboard Hnah40, open source hardware

* update infor

* make code looks neater

* move to handwired board

move and update readme file

* update

* update

* update image

* change bootloader type

* last change
2019-06-26 13:41:32 -07:00
Joel Challis
2a56b61a28 [Keyboard] Refactor of onekey to support multiple development boards (#6017)
* Initial refactor of onekey to support multiple development boards

* Fixes to get teensy lc && 3.2 working

* Add pin tables

* Add caveats to Teensy boards

* Correct bootloader for Elite-C
2019-06-26 10:52:09 -07:00
kifinnsson
01fb06af6c [Keymap] kifinnsson's Colemak angle mod ansi-ish layout for the dz60 (#6191)
* [Keymap] kifinnsson's dz60 keymap

kifinnsson's custom keymap for the dz60

* Update keyboards/dz60/keymaps/kifinnsson/readme.md

Co-Authored-By: fauxpark <fauxpark@gmail.com>

* Fixed readme.mk

cleaned up my readme.mk

* fixed readme.mk
2019-06-26 00:40:38 -07:00
kakunpc
be2c346edf [Keyboard] Add keyboard "suihankey" (#6184)
* new keyboard suihankey

* set split keyboard

* set default keymap

* fix keymap

* update default rules.mk

* I erased what I didn't need.

* Fix default keymap

* fix config

* add keyboard image url

* Update readme.md

* update README.md

* add info.json

* Update keyboards/suihankey/readme.md

Co-Authored-By: fauxpark <fauxpark@gmail.com>

* remove default RGBLIGHT on
2019-06-26 00:39:14 -07:00
Manna Harbour
4be1dfcee4 [Keymap] miryoku layout (#6171)
* First release

*  add "#pragma once" to config.h and related docs

* generate config.h with change from miryoku.org
2019-06-26 00:33:12 -07:00
Mathias Andersson
3483c51f62 [Keyboard] Modernize KMAC (#6131)
* [Keyboard] Modernize the KMAC implementation

This brings the matrix implementation more in line with the current
default matrix code.
It also simplifies the implementation quite a bit.

* [Keyboard] Add layout support to KMAC
2019-06-26 00:32:03 -07:00
Callum Oakley
8fd3f42281 [Keymap] use lowercase send_string for non-literals (#6193) 2019-06-25 10:13:00 -07:00
noroadsleft
2636464b85 [Keyboard] Cannonkeys Instant60 Configurator updates (#6186)
* Rename layout macros

The Instant60's info.json was updated in #6157. The intention seems to have been supporting Community Layouts, but that feature was not implemented. After checking that the layouts conform, rename the appropriate layout macros.

- rename LAYOUT_ansi as LAYOUT_60_ansi
- rename LAYOUT_tsangan as LAYOUT_60_tsangan_hhkb
- update `default` and `tsangan` keymaps

* Enable Community Layout support

Supported Community Layouts:

- 60_ansi (Instant60 ANSI version)
- 60_tsangan_hhkb (Instant60 Tsangan version)
2019-06-24 23:28:09 -07:00
Callum Oakley
5b776cfc2d [Keymap] the results of some experiments and radically simplify keymap.c (#6172)
* keymap simplification and fancy alt tab behaviour

* move symbols around and try ergo numbers

* mess with symbol positions

* f11 and f12 for volume control (for ease of remapping)

* slack unread navigation

* experiment with mods on home row

* mods on symbol layer

* dedicated tab left and tab right keys

* swap next and prev

* remove hold to shift on a and o

* revert to simpler keymap

* restore readme

* point to keymap image

* cmd + cmd -> cmd + ctrl

* expand readme

* slack unread channel navigation

* Update keyboards/planck/keymaps/callum/keymap.c

Co-Authored-By: Drashna Jaelre <drashna@live.com>

* return true from cmd handling block
2019-06-24 23:13:40 -07:00
Agent Blu, 006
48b5903677 [Keyboard] Added 3d printable, handwired numpad by tritiumfusion (#6125)
* Added tritium_numpad

Adding tritium numpad handwired 6x4 numpad design from thingiverse
user tritiumfusion.

* Updated readme with more tritiumfusion information

* Changed spacing in readme

* Changed blu keymap

* Update keyboards/handwired/tritium_numpad/config.h

Co-Authored-By: Drashna Jaelre <drashna@live.com>

* Update keyboards/handwired/tritium_numpad/config.h

Co-Authored-By: Drashna Jaelre <drashna@live.com>

* Update keyboards/handwired/tritium_numpad/config.h

Co-Authored-By: Drashna Jaelre <drashna@live.com>

* Update keyboards/handwired/tritium_numpad/keymaps/max/keymap.c

Co-Authored-By: Drashna Jaelre <drashna@live.com>

* Update keyboards/handwired/tritium_numpad/tritium_numpad.h

Co-Authored-By: Drashna Jaelre <drashna@live.com>

* Update keyboards/handwired/tritium_numpad/tritium_numpad.h

Co-Authored-By: Drashna Jaelre <drashna@live.com>

* Update keyboards/handwired/tritium_numpad/tritium_numpad.h

Co-Authored-By: Drashna Jaelre <drashna@live.com>

* Update keyboards/handwired/tritium_numpad/keymaps/ortho_left/keymap.c

Co-Authored-By: Drashna Jaelre <drashna@live.com>

* Update keyboards/handwired/tritium_numpad/keymaps/ortho_right/keymap.c

Co-Authored-By: Drashna Jaelre <drashna@live.com>

* Update keyboards/handwired/tritium_numpad/rules.mk

Co-Authored-By: fauxpark <fauxpark@gmail.com>

* Update keyboards/handwired/tritium_numpad/rules.mk

Co-Authored-By: fauxpark <fauxpark@gmail.com>

* Update keyboards/handwired/tritium_numpad/readme.md

Co-Authored-By: fauxpark <fauxpark@gmail.com>

* Removed action_function(), function_id, and MODS_CTRL_MASK

* Reformatted keymaps so that they look nicer.  Removed hackey backslashes that were there for no reason whatsoever.

* Update keyboards/handwired/tritium_numpad/readme.md

Co-Authored-By: fauxpark <fauxpark@gmail.com>

* Removed more backslashes

* Added bootmagic to tritium_numpad
2019-06-24 23:11:51 -07:00
Yan-Fa Li
1a2a54c326 [Keyboard] Add TA-65 PCB to QMK (#6180)
* [keyboard] TA-65 by maartenwut

 Add ta65 to QMK with 4 layouts

* Simplify config.h

* Simplify keymap

* Update bootloader

 - confirmed to be qmk-dfu by maartenwut

* Update keyboards/ta65/readme.md

Co-Authored-By: fauxpark <fauxpark@gmail.com>

* Review feedback

 - fauxpark recommendations
 - noroadsleft recommendations

* Repair info.json structure

JSON objects were not properly nested according to the QMK specification.

* Switch info.json to "debug linting"

So I can read the file more easily.

* Remove k2c and k31 from LAYOUT_tsangan

k2c was the Non-US Hash position, and k31 was the Non-US Backslash position, but this layout is intended for ANSI.

* Correct LAYOUT_tsangan data in info.json

* Update tsangan keymap to use updated LAYOUT_tsangan macro correctly

* Rename LAYOUT_tsangan to LAYOUT_ansi_tsangan

Increased clarity.

* Rename tsangan keymap as default_ansi_tsangan

Per QMK Keyboard Guidelines.

* Fix object ordering for ISO layouts in info.json

ISO Enter's object was out of sequence in both layouts.

* Rename ISO keymaps per QMK Keyboard Guidelines

- rename iso keymap as default_iso
- rename iso_tsangan keymap as default_iso_tsangan

* Add default_ansi keymap

For user reference.

* Enable Community Layout support

LAYOUT_ansi and LAYOUT_iso conform to the 65_ansi and 65_iso Community Layouts, respectively.

- rename LAYOUT_ansi to LAYOUT_65_ansi
- rename LAYOUT_iso to LAYOUT_65_iso
- update keymaps as appropriate
- add LAYOUTS rule to rules.mk

* Disambiguate key labels in info.json

* Remove trailing white space from info.json

* Update keyboards/ta65/keymaps/maartenwut/config.h

Co-Authored-By: Drashna Jaelre <drashna@live.com>
2019-06-24 12:29:53 -07:00
Drashna Jaelre
0a2894fc99 [Keyboard] Fixup RGB Matrix functionality on Planck EZ (#6099)
* [Keyboard] Allow RGB Matrix to be disabled on Planck EZ that don't have LEDs

* Add function calls to enabled/disable rgb matrix on idle/wakeup
2019-06-24 09:42:56 -07:00
Drashna Jaelre
80a40807e3 [Keyboard] Add idle/wakeup function calls to Ergodox EZ (#6173) 2019-06-24 09:22:05 -07:00
Josef Adamčík
1cdaedbedf [Keymap] Katana60 custom layout by josefadamcik - MacOS/Linux+Qwerty/Colemak support (#6178) 2019-06-24 00:31:47 -07:00
Andrew Kannan
cd59fe78be [Keyboard] Add Ortho75 (#6177)
* Add Ortho75

* fix typo

* Add dfu args to rules.mk

* Update keyboards/cannonkeys/ortho75/info.json

Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com>

* Update keyboards/cannonkeys/ortho75/info.json

Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com>

* Update keyboards/cannonkeys/ortho75/info.json

Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com>

* Update keyboards/cannonkeys/ortho75/info.json

Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com>

* Update keyboards/cannonkeys/ortho75/info.json

Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com>

* Update keyboards/cannonkeys/ortho75/info.json

Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com>

* Update keyboards/cannonkeys/ortho75/keymaps/default/keymap.c

Co-Authored-By: fauxpark <fauxpark@gmail.com>
2019-06-24 00:28:38 -07:00
lf
1a442f9989 [Docs] Reword confusing description of TO(layer) (#6174)
* Reword confusing description of `TO(layer)`

* Update docs/keycodes.md

Co-Authored-By: Drashna Jaelre <drashna@live.com>
2019-06-24 00:23:27 -07:00
Andrew Kannan
3915c8eb00 [Keyboard] Add AN-C PCB (#6157)
* Add cannonkeys AN-C keyboard

* Update Instant60 readme to point to CannonKeys docs

* Ortho75

* Update keyboards/cannonkeys/an_c/an_c.h

Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com>

* Update keyboards/cannonkeys/an_c/an_c.h

Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com>

* Update keyboards/cannonkeys/an_c/keymaps/default/keymap.c

Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com>

* Update keyboards/cannonkeys/an_c/keymaps/default/keymap.c

Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com>

* Update keyboards/cannonkeys/an_c/keymaps/tsangan/keymap.c

Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com>

* Update keyboards/cannonkeys/an_c/keymaps/tsangan/keymap.c

Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com>

* Update keyboards/cannonkeys/an_c/rules.mk

Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com>

* Update keyboards/cannonkeys/instant60/readme.md

Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com>

* Update keyboards/cannonkeys/an_c/readme.md

Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com>

* Update readme

* Update info.json

* Remove Ortho75 and put in a separate branch

* Update info.json

* remove redundant things

* Update keyboards/cannonkeys/an_c/keymaps/default/keymap.c

Co-Authored-By: fauxpark <fauxpark@gmail.com>

* Update keyboards/cannonkeys/an_c/keymaps/tsangan/keymap.c

Co-Authored-By: fauxpark <fauxpark@gmail.com>

* Update rules and info.json
2019-06-24 00:09:02 -07:00
Tyler Wince
90b10f2e7c [Keymap] add planck/tylerwince (#6169)
* tylerwince keymap added

* modifications for PR

* remove legacy import

* fix some build errors

* fix layers

* restore custom_keycodes

* remove trailing commas

* change persistent layer function

* update light noeeprom

* layer state set user

* missing trailing "

* changes to single_default_layer

* added autoshift and made a couple mods

* added planck layout

* formatting

* reset to upstream

* updated some comments

* remove EEP_RST

* Apply suggestions from code review

Co-Authored-By: Drashna Jaelre <drashna@live.com>
2019-06-22 12:25:00 -07:00
henrikosorensen
1c75385d76 [Keyboard] Add new keyboard: Omnikeyish - A replacement PCB for the Northgate Omnikey family (#6167)
* Add omnikeyish keyboard support.

* remove out of date comment

* PCB Rev 1.1 moved Row5's pin to E6, because the teensy++ hangs an onboard LED off D6.

* Move string.h include to .c file

* Add pcb kicad link.

* Add info.json

* Move macro programming to numlock's keyposition, the most useless key on the post model M layout. Force numlock enabled on host at init time, so you're not stuck without a numpad (hopefully)

* Make the macro blink function toggle LEDs from their previous state.

* Use incorrect but code style compliant opening curly bracing style.

* Make PCB rev 1.1 the default Omnikeyish config, as the author has the only rev 1.0 boards that'll ever be.

* Fix silly spelling error in 3 defines

* First set of review changes.

* Layout macro and keymap defined using it.

* Layout macros for the northgate factory plates.

* minor rearrangements

* ALL the layouts.

* Forgot ultra-t in info.json
2019-06-22 08:36:05 -07:00
4saito5
7f23ad72c5 [Keymap] New keymap for crkbd (#6103)
* New keymap

* Update keymap
2019-06-20 13:00:39 -07:00
Max
af34c548f9 [Keyboard] fixes for issue with aanzee qmk port (#6159)
* fixed issue with LED indicators
corrected error in info.json

* fixed issue with led indictors

* added fix for key_count to info.json for westfoxtrot/aanzee

* fix to support config.qmk.fm correctly and remove unused key from matrix for westfoxtrot/aanzee

* fix for caps_lock led

* Update readme.md
2019-06-20 12:34:19 -07:00
Fredric Silberberg
b36bb58b76 Add ergodash layout, update the backlight numbers for the rgb backlight to be the actual intended colors. 2019-06-20 09:25:41 -07:00
Xelus22
e15417eca8 [Keyboard] Aeboards Ext65 - New keyboard & Aegis Update (#6127)
* aegis config update and ext65 added

* update readme's

* PID ext65 change

* fix ext65 config
2019-06-20 09:20:15 -07:00
fauxpark
317b809564 Fix breathing always on for soft PWM (#5983)
* Fix breathing always on for soft PWM

* Remove reference to hardware PWM pins in BACKLIGHT_BREATHING description

Now, breathing will only be unsupported when Timers 1 and 3 are both used by Audio

* Document BACKLIGHT_ON_STATE and its purpose
2019-06-19 22:33:39 -07:00
yiancar
67e0c951af [Keyboard] Added NK65 Picture in Readme as promised (#6163) 2019-06-19 22:20:59 -07:00
Michael Speiser
db0c179552 [Keymap] Added Deft layout (#6153)
* Added Deft layout

* Updated style and keymap

* Updated readme, removed files

* Updated readme and keymap

* Updated readme

* Fixed broken keymap

* Fixed a typo in keymap and readme layer images

* Fixed a typo in readme

* Embedded layout image for readme

* Embedded layout image for readme

* Embedded layout image for readme

* Fixed typos in keymap

Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com>

* Fixed typo in keymap

Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com>

* Fixed typo in keymap

Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com>

* Fixed a spelling error in the readme

* Typos and formatting in readme

Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com>
Co-Authored-By: fauxpark <fauxpark@gmail.com>
2019-06-19 22:19:54 -07:00
Alex Mayer
9639f44f48 [Keyboard] 1up60hse: Add RGBLIGHT_SLEEP To Default Config (#6164) 2019-06-19 22:04:24 -07:00
Max Rumpf
8af3fe0c7d [Keymap] Actually swap space and left control in gaming mode (#6162) 2019-06-19 22:02:43 -07:00
Danny
810c8db770 Set default I2C clock speed to 100kHz for split_common (#6161)
* Set default I2C clock rate for split_common boards to 100kHz

Default from I2C driver is 400kHz.

* Update documentation for setting I2C clock speed
2019-06-19 22:02:20 -07:00
noroadsleft
5f0ab5a24b [Keyboard] Planck Layout Macro Refactor, Part II (#6156)
* Move layout macros to revision folders

* Update Planck EZ layout macros

Planck EZ only supports one layout (centered 2u spacebar). Deleted all the other macros.

* Flesh out QMK Configurator support

Give each Planck revision its own info.json file.

* Readme updates

- give each revision its own readme
- add the Planck EZ to the main Planck readme

* Fix layout macro for Planck EZ

Previous matrix didn't compile because the electrical matrix defined a k3b location, which was unused by the physical arguments.

Drashna was kind enough to confirm the Planck EZ's matrix for me.

Co-authored-by: Drashna Jaelre <drashna@live.com>

* Pretend the Planck EZ supports ortho_4x12 layout

The hardware doesn't, but doing so prevents CI errors because the default keymap uses LAYOUT_planck_grid.

Going to pretend LAYOUT_ortho_4x12 is a valid layout for the Planck EZ.

* Update Planck EZ's URL in info.json

Co-Authored-By: Drashna Jaelre <drashna@live.com>
2019-06-19 10:56:20 -07:00
Jimmy Multani
a825bbf5ea [Keyboard] Fix incorrect RGBLED_NUM value (#6148)
KBD67 Rev 2 has 20 LEDs, not 18. This was causing 2 of the underglow LEDs to remain off. This fix updates that.
2019-06-18 22:54:55 -07:00
jotix
4a43a947bd [Keymap] Update Jotix keymap (#6154)
* jotix ortho_4x12_layout

* jotix ortho_4x12_layout

* add KC_CAPS to raise
2019-06-18 22:47:54 -07:00
Ismael Venegas Castelló
628e08c606 [Keymap] Add new mod tap dances to Hacker Dvorak (#6155) 2019-06-18 22:43:06 -07:00
joelproko
2d15961855 [Keyboard] added custom keyboard (#6141)
* added keyboard_layout_jopr

* making it compile

* #pragma once instead of #ifndef and #define

* renamed and added keymap

renamed old "default" to "modded_white", added new "default" that resembles an ISO 105-key layout

* reordered keyboards/jopr/info.json to match order o layout array

* implemented most suggestions

* fixed missing ;

* fixed bootloader setting for rules.mk

* adopted standard layout matrix naming convention

* "fixed" commented-out code in keymaps

* changes to keymap layers and LEDs

Turns out adding a layer for ROYA-modified keycodes is more trouble than it's worth and works better by just defining a ROYA key.
Also, LEDs were set up incorrectly.
Lastly, implemented SysReq-Warning LED.

* moved forced NumLock code

just in case either it or the CapsLock & ScrlLock update code wouldn't both work otherwise

* rearranged media keycodes

* replaced Shifted keycodes with basic ones

* Apply suggestions from code review

Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com>

* implemented suggestions by noroadsleft

* Apply suggestions from code review

Make ISO-Enter QMK Configurator-friendly

Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com>

* Update readme.md

* Update keyboards/jopr/info.json

Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com>

* moved keyboard to handwired folder

It was said that personal passion projects belong in there, even if they're not actually handwired

* Update readme.md
2019-06-18 11:34:36 -07:00
George Petri
d5f0327b97 [Keymap] Add keymap for keebio/nyquist (#6144)
* duplicate default

* delete colemak, dvorak

* cleanup

* update keymap

* disable unused rules, fix spit leds

* ascii layout keymap

* wip change rgb on layer

* change rgb on layer

* change rgb on caps lock

* add impl navigation layer

* add readme, swap gui and alt

* update readme

* Update keyboards/keebio/nyquist/keymaps/georgepetri/readme.md

Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com>

* Update keyboards/keebio/nyquist/keymaps/georgepetri/readme.md

Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com>

* remove backslashes, use IS_HOST_LED_ON
2019-06-18 11:01:51 -07:00
M-AS
70285f5ed9 [Keymap] Update to personal keymaps (#6142)
* added personal CTRL keymap

* added personal dz60rgb keymap

* enabled new rgb effect

* added space cadet shift

* media player track buttons now orange

* updated keymaps with rgb setting and visual HSV setting preview

* fixed source stuff?

* added support for underglow toggle (bugged to all hell)

* everything now behaves as expected when ti comes to RGB toggles, thank god

* removed ifdefs

* changed color of MAS_CRM

* uh, whitespace

* changed rgb positions and modifiers within RGB matrix thing for CTRL and DZ60RGB

* updated keymap to work kindof

* KEYMAP: changed list of rgb effects

* changed CTRL rgb defaults

* KEYMAP: new LED layout for ctrl

* fixed white LED position in indicator

* changed capslock tap timing
2019-06-17 23:37:51 -07:00
Benjamin
875ae08692 [Keymap] ortho_4x12: bredfield (#6137)
* [Layout] 4x12: bredfield

* ortho_4x12:bredfield code review tweaks
2019-06-17 19:50:31 -07:00
Scott Sheffield
7f65844f75 [Keymap] 40percent/gherkin Midi Layout (#6130)
* Add midi layout for 40percent/gherkin

* Add readme for 40percent/gherkin:midi
2019-06-17 19:40:38 -07:00
fauxpark
6bdcbfb25a Fix backlight breathing on C6 (#6102)
* Fix backlight breathing on C6

* Account for ATmega32A's single TIMSK register (MT40)

* Document hardware PWM on D4 for ATmega32A

* Add C6 and D4 to BACKLIGHT_PIN description
2019-06-17 19:37:17 -07:00
Sid Carter
c6850bad74 [Keymap] Layout for FC660C with additions for mouse keys and few other changes (#6139)
* new keymap for the hasu with media keys and mac layout

* switch escape and grave

* switch to the usual default

* with play and stop

* add reset on fn layer

* add mouse buttons, move reset, update copyright
2019-06-16 17:44:14 -07:00
SpacebarRacecar
83754c1146 [Keymap] Update to personal keymaps (#6136)
* changes to keymaps

* changes to userspace

* changes to userspace

* removed reference to fc660c keymap which no longer exists from userspace readme

* removed preonic keymap
2019-06-16 17:35:20 -07:00
Oliver Ladner
9058c93bc1 KB_B should read KC_B 2019-06-16 22:47:37 +02:00
Oliver Ladner
e58b82e7ca PoC weeheavy_2.25_lshift 2019-06-16 22:19:02 +02:00
Jonathan Rascher
53a81fc2f6 [Keymap] Minor userspace and Quefrency keymap fixes (#6134)
* Fix typo for RGBLIGHT config values

It doesn't make a difference right now since these are the defaults in
rgblight.h (which I'm just setting explicitly since some of the keyboard
configs change these defaults). However, I'd rather be explicit, so
fixing my typo. :)

* Remove mouse keys layer from Quefrency keymap

It's a fun idea, but I never use it in practice.
2019-06-16 00:35:46 -07:00
Rob Hilgefort
fff526cb00 [Keymap] Fix firmware errors when flashing Rev6 Planck (#6135) 2019-06-16 00:34:10 -07:00
Yusuke Nakamura
5f69ca47ff Install avrdude in Arch/Manjaro Linux (#6132)
avrdude is require package but not installed by script when
arch linux.
2019-06-15 11:32:06 -07:00
jotix
d34b71f008 [Keymap] jotix ortho_4x12_layout rethink (#6126)
* jotix ortho_4x12_layout rethink

* refactor

* readme update
2019-06-14 11:10:56 -07:00
roggan87
1cd26607bd [Keyboard] Made it possible for real to choose register on io expander for cols and rows (#6124)
* Replace deprecated EXPANDER_MASK with dynamic expander_pin_input_mask

* Made it possible to switch rows and cols registers on expander
2019-06-13 11:47:31 -07:00
Nicholas Ryan
03ce37052f [Keymap] add new planck keymap (#6122)
* add new planck keymap

* add newlines to end of files
2019-06-13 11:45:48 -07:00
kakunpc
61b884d865 [Keymap] add keymap hecomi alpha (#6115)
* add keymap hecomi alpha

* Update keyboards/hecomi/keymaps/kakunpc/keymap.c

Co-Authored-By: Drashna Jaelre <drashna@live.com>
2019-06-13 11:44:44 -07:00
noroadsleft
f4840139a2 [Keyboard] Planck: Layout Macro Refactor (#4402)
* Planck: layout macro refactor

Unified layout macro names across AVR and ARM boards.

Currently certain layout macros are specific to either AVR or ARM when used in the QMK Configurator. If an AVR-specific macro is used for a Planck rev. 6, or an ARM-specific macro on a rev. 5 or earlier, the user receives a compile error.

* Update keyboards/planck/planck.h per @drashna

Changed KC_LAYOUT_ortho_4x12 alias to LAYOUT_kc_ortho_4x12.

Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com>

* Add KC_KEYMAP alias for LAYOUT_kc macro

per @drashna
Update keyboards/planck/planck.h

Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com>

* Fix LAYOUT_planck_1x2uC macro for Planck rev6

Thanks to drashna for testing.

* Fix inline comment regarding revisions

* Add specific info.json file for Planck rev6
2019-06-12 09:53:15 -07:00
mgalisa
29824f3cf7 [Keymap] New planck keymap (#6093)
* New keymap

* Add readme; fix lack of asterisk on raise

* Update default planck map to tap_code vs reg/unreg

* Press F to pay respects
2019-06-11 16:02:33 -07:00
brickbots
5343eaf89a [Keymap] Adding personal keymap / clarifying default keymap readme (#6119)
* Adding led support for Plaid

* Adding led support for Plaid

* Update readme.md

Fixing bad markdown

* Adding my personal keymap

* Clarifying LED instructions / formatting
2019-06-11 15:56:06 -07:00
Michael F. Lamb
e6a81133dd Add SH1106 OLED support (#5787)
* modify oled_driver to support SH1106

also:
- improve mechanism to specify which OLED IC we use
- comment calc_bounds()
- give OLED_COLUMN_OFFSET a default value
- inline comment re: OLED MEMORY_MODE and SH1106
- update docs/feature_oled_driver.h for SH1106 support and related changes
- docs: OLED: note we have tested SSD1306 on ARM boards (per @XScorpion2)
- define out MEMORY_MODE when using SH1106 OLED driver

* document that SSD1306 128x64 on AVR works

Per @XScorpion2: https://github.com/qmk/qmk_firmware/pull/5787#discussion_r291837842
2019-06-11 15:27:17 -07:00
Volodymyr Lukashevych
b92387b749 [Keymap] Add BB8520 trackpad support for CrKbd (#5925)
* Add vlukash CrKbd keymap to support trackpad adapter.

The trackpad adapter uses Elite-C board that has five extra pins.
Also SPI pins are taken for trackpad, keymap config updates column data
pins for matrix scan.

* Update vlukash keymap

* Enable pointing devide, configure mouse BTN1

* Set TAPPING_TERM to 300

* Add support for the BlackBerry 8520 trackpad

* Add vlukash keymap for master-right no-trackpad version

* Remap backspace

* Set EXTRAKEY_ENABLE = yes

* Update thumb keys mappings

* Set bootloader to atmel-dfu

* Sync keymap

* Add scrolling support

* Make debug LEDS conditional

* Add support for both flex and no-flex PCBs

* Add readme and rename root folders

* Update readme file with blog link

* Fix readme file formatting

* Remove ADJUST keycode, code cleanup.

* Add Win key to the keymap.
2019-06-11 15:18:14 -07:00
pngu
2558466d78 [Keyboard] Added idb 60 keyboard (#5994)
* Added idb 60 keyboard

* fixed info.json

* implemented revievers' suggested changes

* fixed an error

* implemented revievers' suggestions

* further cleanup

* implemented suggested changes

* fixed errors
2019-06-11 14:58:29 -07:00
Yan-Fa Li
332fc7e814 [Keymap] Tsangan bottom plain60 configuration (#6100)
* Personal keymap for plain60

* Update keymap for incorrect keys

 - update docs

* Placate the gods of Case Insensitivity
2019-06-11 14:49:50 -07:00
Drashna Jaelre
1d11c62df6 Jotix minor layout changes - readme.md fix (#6120)
* jotix layout add KC_GESC

* fix error in readme.md
2019-06-11 14:43:50 -07:00
Chris Scheib
bba5c09b23 [Docs] Update feature_rgb_matrix.md (#6117)
* Update feature_rgb_matrix.md

fix indentation on code comments

* Update feature_rgb_matrix.md

more formatting changes, missed these the first time
2019-06-11 14:42:53 -07:00
yiancar
105c90bd1c [Keyboard] Siemens Tastatur Converter (#6090)
* initial commit

* Siemens Tastatur

* Update keyboards/handwired/siemens_tastatur/keymaps/default/keymap.c

Co-Authored-By: fauxpark <fauxpark@gmail.com>

* beauty fixes

* More tidying up

* Update keyboards/converter/siemens_tastatur/keymaps/default/keymap.c

Co-Authored-By: Drashna Jaelre <drashna@live.com>
2019-06-11 09:14:54 -07:00
Calvin Moody
f664ed9254 [Keymap] add keymap with split spacebar, ansi, hhkb features (#6114)
* add calbatr0ss dz60 layout

* add media controls

* add media next/prev controls

* add base layer for windows and macos

* swap right ctrl and menu

* missing bracket

* update gitignore
2019-06-11 09:11:47 -07:00
brickbots
8c22d641ee [Keyboard] Adding LED support to the plaid default keycap (#6109)
* Adding led support for Plaid

* Adding led support for Plaid
2019-06-11 09:01:59 -07:00
Yan-Fa Li
d0c29f25c9 [Keyboard] Fix the layer state messages for actual values (#6116)
- display adjust when the bits are set correctly
2019-06-11 02:45:00 -07:00
shela
c3c61dc76e fix indent size 2019-06-11 01:51:40 -07:00
Christopher Jenkins
8ac9048803 [Keyboard] niu_mini uses dfu bootloader rather than the afrdude bootloader (#6092)
* niu_mini uses dfu bootloader rather than the afrdude bootloader
	modified: readme.md

* Change rules in rules.mk to reflect the bootloader change
	modified:   keyboards/niu_mini/rules.mk
2019-06-08 20:39:23 -07:00
jotix
a03ece6aff fix error in readme.md 2019-06-08 00:31:07 -03:00
XScorpion2
09968ba035 Fixing OLED Driver for 128x64 displays (#6085) 2019-06-07 17:02:05 -07:00
Jonathan Rascher
54ac80d4a5 Add 60_ansi_split_bs_rshift layout to DZ60, with a new keymap for the same (#6096)
* Add 60_ansi_split_bs_rshift layout to DZ60

I know there's already a lot of DZ60 layout macros, and #4668 suggests
they should be refactored at some point, but since this is one of the
standard layouts already in QMK that this PCB supports, I figured it was
okay to add so that DZ60 keyboards can share this layout with other
keyboards.

* New 60% ANSI split backspace/right-shift layout

I'm using this on a DZ60, but it should work fine on most 60% PCBs. It's
basically a HHKB layout with a standard ANSI bottom row (3x 1.25U mods,
6.25U spacebar, 4x 1.25U mods).
2019-06-07 17:01:13 -07:00
jotix
f6e2716dfb jotix layout add KC_GESC 2019-06-07 18:14:03 -03:00
MechMerlin
2cb32328b6 [Keyboard] New Keyboard(s): Red Scarf II+ RS68 and RS78 (#6084)
* martenwuut's original code commit

* delete random directory that is the same as the parent directory

* get this compiling

* update readmes

* add manufacturer

* fix up the keymap error and replace KC_A with KC_1

* add verc support which is basically just at trimmed down verb

* update keymap readme to specify which redscarf it is

* add parent level readme

* fix grammar

* fix up readmes and put in alternative name for PCBs

* add configurator support for the ver.c pcb

* add configurator support for Ver.B (RS78) pcb

* add iso support for Ver.C (RS68)

* change DEBOUNCING_DELAY to just DEBOUNCE

* remove K2C to fit the default layouts

* fix keymap

* fixup configurator layout with split backspace
2019-06-07 13:42:40 -07:00
jotix
2a71bc9fde [Keymap] jotix ortho_4x12 layout change (#6088) 2019-06-07 13:22:30 -07:00
Domantas Petrauskas
e86298fbe2 [Keymap] Update jj40:cockpit keymap (#6089)
* Add JJ40 Cockpit keymap

* Fix lower layer symbols

* Improve documentation JJ40 Cockpit

* Add screen backlight controls jj40:cockpit

* Update docs jj40:cockpit
2019-06-07 13:21:24 -07:00
Jonathan Rascher
c70016eee5 [Keymap] Set a short TAP_CODE_DELAY so media keys work (#6097)
A delay of 10ms seems sufficient. Otherwise, media keys tapped from the
encoder of my BDN9 macropad only seem to get picked up by the OS
(Windows 10) some of the time.
2019-06-07 12:58:23 -07:00
Pavlos Vinieratos
e495574670 use mods (#6095) 2019-06-07 06:44:46 -07:00
Drashna Jaelre
44f4338688 Fix debounce conflicts in a few boards 2019-06-06 20:03:33 -07:00
Viktor Eikman
983613c88d [Keyboard] Added DMOTE (#6087)
* Added DMOTE as a variant of the Dactyl-ManuForm, with slight changes to
  prior code organization to reflect differences.
2019-06-06 13:15:19 -07:00
TerryMathews
29c7fa6efc [Keyboard] Candybar: updated rules.mk (#6083)
* Candybar: updated rules.mk

Disabled console and command to get compiled size under flash space limitations.

* Candybar: Enable LINK_TIME_OPTIMIZATION_ENABLE
2019-06-06 13:08:27 -07:00
Stick
de29da973a [Keymap] update @nstickney's keymaps (#6076)
* [Keymap] iris@nstickney: improve RGB init

Perfecting the rgb backlight initialization with a delay for each
color; also start and stop the animation at the "default layer"
color.

* [Keymap] iris,ergodox@nstickney fix FN on SYMB

The function key was not operational on the SYMB and SYSH layers due
to other keycodes being mapped over MO() on those layers. The
offending keycodes have been moved to other keys.

* [Keymap] add @nstickney's userspace

Pulled common code out to a userspace directory for my iris and
ergodox keymaps.

* [Keymap] iris@nstickney add image to README

Added an image from keyboard-layout-editor.com to meet the README
standard.

* iris@nstickney hue values now `uint8_t` (#6050)
2019-06-06 13:00:52 -07:00
omkbd
872480dde2 [Keyboard] add runner3680 keyboards (#6069)
* add runner3680

* Remove unnecessary code
2019-06-06 12:50:00 -07:00
Drashna Jaelre
06975aa0dd Remove all Copyrighted Sounds and Songs (#5905)
* Remove all Copyrighted Sounds and Songs

This removes any song that has a license/copyright on them.
Additionally, it adds the license information for any song that remains.

* Add removed song list

Can be reverted if we'd rather do that

* Use newer coding conventions

* Fix typo

Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com>

* Revert copyright date

* Update quantum/audio/song_list.h

Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com>
2019-06-06 12:23:46 -07:00
Drashna Jaelre
faaaa134fd Replace DEBOUNCING_DELAY (deprecated) with DEBOUNCE (#5997) 2019-06-06 12:09:56 -07:00
Jack Humbert
fe6b8edd58 use twitter card large setting for larger previews 2019-06-06 01:23:18 -04:00
Jack Humbert
834a8d1da1 add type:object to docs meta info (github uses it) 2019-06-06 01:07:54 -04:00
Jack Humbert
91b0c75045 Add meta tags for docs 2019-06-06 01:01:24 -04:00
Danny Nguyen
4f2f2271cd Change from avr-gcc@7 to @8 for Mac 2019-06-05 17:51:39 -07:00
XScorpion2
de968eb310 [Keymap] Xulkal changes (#6075) 2019-06-05 16:14:35 -07:00
Alex Mayer
b2f7915994 [Docs] Make Code Examples Consistent On Combo Page (#6078) 2019-06-05 11:18:20 -07:00
noroadsleft
a63e2abc9c [Keyboard] Fix Configurator support for Mulletpad (#6074)
- correct layout macro name
- correct JSON object ordering
2019-06-04 20:29:05 -07:00
ymzcdg
e0a0d80bd3 docs to Mandarin Chinese (#5960)
* faq_general.md to Chinese

faq_general.md to Chinese
faq finished

* custom_quantum_functions.md to Chinese

custom_quantum_functions.md to Chinese

* custom_quantum_functions.md fix 

custom_quantum_functions.md fix

* custom_quantum_functions.md fix translate 

custom_quantum_functions.md fix translate

* !ver.English! _summary.md bug fix

 _summary.md bug fix of English doc. add".md" behind "feature_combo"

* !ver.English! custom_quantum_functions.md fix#5869

custom_quantum_functions.md in English : delete redundant "is" . issue#5869

* !ver.English! how_keyboards_work.md link fix

change 
https://en.wikipedia.org/wiki/Unicode_input#Hexadecimal_code_input
to 
https://en.wikipedia.org/wiki/Unicode_input#Hexadecimal_input
"#Hexadecimal_code_input" not exist

* !English! how_keyboards_work.md add missing "t"

Tied to a specific OS a a time (need recompilation when changing OS);
change to
Tied to a specific OS at a time (need recompilation when changing OS);

* _summary.md improve translation

_summary.md improve translation

* reference_glossary.md into Chinese

reference_glossary.md into Chinese
术语表翻译,这个术语表英文版似乎不太全,应该补充英文版,并在中文版添加其他具有中国特色的术语。
2019-06-04 11:06:17 -07:00
XScorpion2
e7711b3b66 Moving rgb typedefs into a single location (#5978)
Because someone named the define poorly

Using full relative path as handwired/promethium has a color.h file
2019-06-04 11:04:30 -07:00
Jack Humbert
661a9154ae Add missing links to features page and sidebar section (#5949)
* Add missing links to features page and sidebar section

* Fix links

Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com>

* Additional link fixes

Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com>

* Fix typo
2019-06-04 02:26:44 -04:00
Danny
0dc0be7302 [Keyboard] Add Levinson Rev 3 (#6064)
* Add Levinson Rev 3

* Update keyboards/keebio/levinson/rev3/config.h

Co-Authored-By: Drashna Jaelre <drashna@live.com>

* Update keyboards/keebio/levinson/rev3/config.h

Co-Authored-By: Drashna Jaelre <drashna@live.com>
2019-06-03 23:26:34 -07:00
zvecr
91849853ba upgrade gcc-arm-none-eabi from the default 5.4.1 to 6.3.1 due to ARM runtime issues 2019-06-03 17:14:34 -07:00
Danny
a8958c5e53 [Keyboard] Updates to iris (#6063)
* Swap LSFT/LCTL in default Iris keymaps

* Migrate to new DEBOUNCE setting
2019-06-03 12:15:18 -07:00
Chris Dosé
7ddf3c28f4 Fixes compile errors for massdrop keyboards 2019-06-03 12:11:03 -07:00
Erovia
a678f4a206 [Keyboard] Dimple: fix unintended LED behaviour (#6046)
* Dimple: fix unintended LED behaviour

The LED was always-on if the custom keymap did not call dimple_led_off()
at least once.

* Dimple: LED code fixup
2019-06-03 12:09:46 -07:00
Peter Tillemans
32952d8624 Pti keymaps (#6025)
* created new folder to port my old layout

* removed Colemak, enabled backlight.

* fixed backlight support

* added Ctrl/Esc + Shift/Enter double function keys

* made planck compatible with Atreus board, including docs

* enable backlight control

* make planck more compatible with atreus layout

* migrate to qwerty and separate alt-space

* adding ok64 and redox layouts

* fix dot in numerical pad

* fix dot in dvorak layout

* added redox and pro micro version of snampad

* add arrows on right mod keys and map PrtScr on Fn P

* add keys to swap between mac and windows

* added escape to redox layout

* added printscreen key

* moved layout closer to what I am used to.

* swap spc and bspc, add ctrl to quot

* qwertified atreus layout

* fix for compile errors when RGB or BACKLIGHT disabled

* add customized keymap for the m65a

* Reverted unintended change in default keymap.

* Remove unused code in my keymap and modernized tap hold keys

* Update keyboards/snampad/config.h

Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com>

* Update keyboards/snampad/rules.mk

Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com>

* Update keyboards/snampad/rules.mk

Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com>

* Update keyboards/snampad/snampad.h

Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com>

* Update keyboards/snampad/config.h

Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com>

* Update keyboards/snampad/keymaps/default/config.h

Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com>

* Update keyboards/snampad/snampad.h

Co-Authored-By: Drashna Jaelre <drashna@live.com>

* Update keyboards/snampad/readme.md

Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com>

* Update keyboards/snampad/keymaps/default/keymap.c

Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com>

* Update keyboards/snampad/snampad.h

Co-Authored-By: Drashna Jaelre <drashna@live.com>

* Update keyboards/snampad/snampad.h

Co-Authored-By: Drashna Jaelre <drashna@live.com>

* Update keyboards/snampad/snampad.h

Co-Authored-By: Drashna Jaelre <drashna@live.com>

* Update keyboards/snampad/rules.mk

Co-Authored-By: Drashna Jaelre <drashna@live.com>

* Update keyboards/planck/keymaps/ptillemans/keymap.c

Co-Authored-By: Drashna Jaelre <drashna@live.com>

* Update keyboards/jc65/v32a/keymaps/ptillemans/keymap.c

Co-Authored-By: Drashna Jaelre <drashna@live.com>

* Update keyboards/snampad/snampad.h

Co-Authored-By: Drashna Jaelre <drashna@live.com>

* cleanup snampad layout

* Update keyboards/snampad/snampad.c

Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com>

* further mmended cleaning

- removed obsolete Backspace handling in jc65 keymap
- improved shift detection
- modernized planck keymap
- added details to snampad readme
- other recommended refactors in snampad
2019-06-03 12:09:01 -07:00
Boy_314
28539fd67f [Keymap] Create Boy_314's Canoe layout, small update on xd75 layout (#6060)
* create canoe layout, update caps lock on xd75 layout

* added readme

* fixed copyright comments
2019-06-03 12:01:49 -07:00
patrickmt
413a8938f1 190528 updates to get it compiling
Updates to get the package compiling and working for the most part
Bug with reactive lighting for QMK code and keeping caps/num lock lit when on
2019-06-03 10:30:35 -04:00
Wilba
1a9173cafc [Keyboard] Added WT65-B, WT75-B, minor fixes (#5991)
* Added WT65-B, WT75-B, minor fixes

* Update keyboards/wilba_tech/wt65_b/config.h

Co-Authored-By: Drashna Jaelre <drashna@live.com>

* Update keyboards/wilba_tech/wt65_b/readme.md

Co-Authored-By: fauxpark <fauxpark@gmail.com>

* Update keyboards/wilba_tech/wt75_b/config.h

Co-Authored-By: Drashna Jaelre <drashna@live.com>

* Change DEBOUNCING_DELAY to DEBOUNCE

* Change DEBOUNCING_DELAY to DEBOUNCE
2019-06-03 00:46:00 -07:00
Danny Nguyen
4a8e62d30e Have hexwire Iris keymap use I2C 2019-06-02 21:23:35 -07:00
Danny Nguyen
2c8149aa55 Fix compilation error when I2C and encoder is enabled for split code 2019-06-02 21:23:35 -07:00
holtenc
5971b663cb Enable extrakey in rules (#6055)
* correct indicator light states.

function of indicator lights was inverted. these changes correct that.

* flesh out keymaps pre production

* Enable extrakey in rules
2019-06-02 14:19:31 -07:00
gorbachev
6766c5315e [Keyboard] 8 pack (#6031)
* 8-Pack Macropad

* Added MANUFACTUTER to config.h

* Fix the mirrored keymaps by creating rev1.1 and rev1.2 layouts, then using them in the keymaps

* fixes from code review comments

* Use revisions to manage the different layouts for rev1.1 and rev1.2

* Add DEFAULT_FOLDER to fix default build failures

* code review comments fixes

* code review comments fixes
2019-06-01 22:43:00 -07:00
Danny
0744af97af [Keyboard] Update Iris Rev 3 QMK-DFU settings (#6050)
* Set the correct pinout for Iris Rev 3 QMK-DFU

* Set bootloader to QMK-DFU
2019-06-01 22:36:30 -07:00
ai03
3449000f42 [Keyboard] Add support for KBDPAD MKII (#6034)
* Build some testing keymaps

* Match naming convention to 8x

* Add configurator json

* Forgot to build the readme

* Apply suggestions from code review

Co-Authored-By: Elliot Powell <32494740+e11i0t23@users.noreply.github.com>
Co-Authored-By: Drashna Jaelre <drashna@live.com>

* Update keyboards/kbdfans/kbdpad_mk2/rules.mk

Co-Authored-By: Drashna Jaelre <drashna@live.com>
2019-06-01 22:02:33 -07:00
Nick Brassel
155be34a1d Parameterise STM32 I2C pin modes and timing parameters. (#5671)
I2C timing parameters were seemingly set up for an STM32F303 target MCU, at a specific clock speed. This commit allows specifying the timing parameters via config.h, allowing other STM32 MCUs to be targeted, potentially at different clock frequencies.
Alternate function modes for the I2C pins are now also configurable, allowing for remapping to other pins.
2019-06-01 16:04:09 -07:00
XScorpion2
4f788c2ae9 [Keymap] Xulkal user changes (#6044)
* Xulkal user changes

Xulkal user changes

* Reduce code duplication

* Massive user code refactor
2019-06-01 14:39:31 -07:00
John M Daly
02b3fadbac [Keyboard] Initial firmware and keymaps for the CO60 PCB (#5959)
* Add: Initial firmware and keymaps for the CO60 PCB

* Apply suggestions from code review

Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com>
Co-Authored-By: Drashna Jaelre <drashna@live.com>
Co-Authored-By: fauxpark <fauxpark@gmail.com>

* Update: Address reviewer comments

* Apply suggestions from code review

Co-Authored-By: Drashna Jaelre <drashna@live.com>

* Update: Reviewer changes
2019-06-01 14:37:32 -07:00
zunger-humu
912b6a5916 [Keymap] "Cadet-style" keymap + improved LAYOUT macro for melody96 (#5985)
* [melody96] "Cadet-style" keymap for melody96; LAYOUT macro for hotswap keyboard.

* Rename macro.

* Fix layer types.
2019-06-01 14:35:52 -07:00
kakunpc
67105b2a21 [Keyboard] Add new keyboard BusinessCard (#6015)
* add Business Card

* remove helix code

* Change rgblight use noeeprom

* remove include

* Update keyboards/business_card

* Forgetting to erase
2019-06-01 14:09:42 -07:00
ai03
0874502757 [Keyboard] Add support for Soyuz numpad (#6030)
* Generate project, fill in the details

* Repair json

* Separate keymaps to numpad and all-1U

* Apply suggestions from code review

Co-Authored-By: Elliot Powell <32494740+e11i0t23@users.noreply.github.com>
Co-Authored-By: Drashna Jaelre <drashna@live.com>
2019-06-01 13:55:37 -07:00
ai03
d9ebd5cde6 [Keyboard] Add support for KBD8X MKII (#6033)
* Begin work

* Make things a tad easier to read

* Fix spacing

* Get things compiling

* Build a variety of generic keymaps

* Correct RGB pin

* Add configurator json

* Apply suggestions from code review

Co-Authored-By: Elliot Powell <32494740+e11i0t23@users.noreply.github.com>
Co-Authored-By: MechMerlin <30334081+mechmerlin@users.noreply.github.com>
2019-06-01 13:45:32 -07:00
zvecr
c393d3afde Add additional pins for Teensy 3.x and LC 2019-06-01 13:33:11 -07:00
Austin Hill
8eb5022af5 [Keymap] fixed location of del on fn layer (#6040) 2019-06-01 13:30:23 -07:00
jotix
016a258301 [Keymap] add 2 custom leds to handwired/jotanck (#6042)
* add JOTANCK_LED1&2

* set BACKLIGHT_ENABLE = no

* add 2 custom leds

* swap custom led pins 1&2

* readme update

* update default keymap
2019-06-01 13:26:46 -07:00
jotix
9f5733b595 [Keymap] jotix's ortho4x12 layout (#6045)
* jotix ortho 4x12 layout tweaking

* tapping toggle -> 2

* leds on/of on layer states

* add JOTANCK_LED1&2

* set custom leds on layers

* bug fix

* bug fix

* rearrange layers

* leds on layers bug fixed

* leds working
2019-06-01 13:22:41 -07:00
Elliot Powell
d3317a8a66 [Docs] Update getting_started_introduction.md (#6037)
* Update getting_started_introduction.md

* Update docs/getting_started_introduction.md

Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com>

* Update docs/getting_started_introduction.md

Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com>

* Update docs/getting_started_introduction.md

Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com>

* Update docs/getting_started_introduction.md

Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com>
2019-05-31 14:44:27 -07:00
zvecr
f9c0936cea Initial attempt to fix docker creating files as root 2019-05-31 14:39:43 -07:00
zvecr
dabd73b769 [Keyboard] Remove relative location of i2c master/slave as it causes the build to write to a folder outside of qmk_firmware (#6039) 2019-05-31 13:54:08 -07:00
noroadsleft
2a1f6389c2 [Keyboard] YMD96 refactor (#5472)
* Remove JJ50 data from YMD96

JJ50 was actually added as its own keyboard when this was added in #2546. It should have been taken out then, but wasn't.

* Update ymd96.h

- use #pragma once include guard
- remove redundant file includes

* Update LAYOUT_iso macro to K<row><col> notation

* Update LAYOUT_custom macro to K<row><col> notation

* Update LAYOUT_default macro to K<row><col> notation

* Refactor default keymap

* Rename readme file to lowercase

* Rename layers enum and default layer

- renamed layers enum to layer_names
  - proposed by fauxpark in Issue 5977, and I like the idea
    - https://github.com/qmk/qmk_firmware/issues/5977#issuecomment-495924338
- renamed the base layer to _DEFAULT
  - I think it looks nicer.
2019-05-31 11:57:07 -07:00
Elliot Powell
9cc5841a91 Update reference_configurator_support.md
We no longer auto generate bootloader into info.json through the website therefore this can be removed
2019-05-31 11:54:01 -07:00
zvecr
ba6b3fc1b5 Use qmk docker image for travis CI builds 2019-05-31 11:04:16 -07:00
Alex Speller
6693d16362 [Keyboard] Remove file with same name and different case (#6028) 2019-05-30 19:54:40 -07:00
yiancar
6241cf977e [Keyboard] Fix json for NK65 (#6026) 2019-05-30 17:50:09 -07:00
Austin Hill
b877596096 [Keymap] added hhkb layout for tada68 (#6027) 2019-05-30 17:49:27 -07:00
Jason Dunsmore
3fd34daf14 [Keymap] Added keymap for user jasondunsmore (#6023) 2019-05-30 17:13:29 -07:00
Peter Tillemans
88966767ee [Keyboard] Fix jc65 when RGB or BACKLIGHT disabled (#6022) 2019-05-30 17:11:55 -07:00
Elliot Powell
3ef425423a Update feature_encoders.md
Fix missing closing comment after second encoder
2019-05-30 17:00:21 -07:00
zvecr
2f7a57a6de Copy avr teensy flash logic to arm (#6016) 2019-05-30 16:53:49 -07:00
MechMerlin
786ee9c7be [Keyboard] E6V2 R2 BMC PCB (#6009)
* initial commit

* remove mentions of oe and replace with le

* add new layout macros with the spacebar change

* add rgb underglow support

* Update keyboards/exclusive/e6v2/le_bmc/rules.mk

Co-Authored-By: fauxpark <fauxpark@gmail.com>

* Update keyboards/exclusive/e6v2/le_bmc/readme.md

Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com>
2019-05-29 11:16:13 -07:00
Kimat Boven
4d97f35230 Add belgian layout for sendstring (#6008)
* belgian layout had no sendstring definition

* backtick was not defined for belgian sendstring

* slash definition was wrong for belgian sendstring

Co-Authored-By: fauxpark <fauxpark@gmail.com>

* use BE_ keys whenever we can

Co-Authored-By: fauxpark <fauxpark@gmail.com>

* ^ can be sent as a normal key (not a dead key) with altgr+para
2019-05-29 11:10:30 -07:00
itsdrdick
2ca840d0b8 [Keyboard] Added XW60 PCB (#6011)
* Added XW60 PCB

* Update keyboards/xw60/config.h

Co-Authored-By: fauxpark <fauxpark@gmail.com>

* Update keyboards/xw60/rules.mk

Co-Authored-By: fauxpark <fauxpark@gmail.com>

* Update keyboards/xw60/rules.mk

Co-Authored-By: fauxpark <fauxpark@gmail.com>

* Update keyboards/xw60/xw60.h

Co-Authored-By: fauxpark <fauxpark@gmail.com>

* Update keyboards/xw60/xw60.h

Co-Authored-By: fauxpark <fauxpark@gmail.com>

* Update keyboards/xw60/xw60.h

Co-Authored-By: fauxpark <fauxpark@gmail.com>

* Update rules.mk

* Removed redundant line

* Update keyboards/xw60/config.h

Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com>

* Update keyboards/xw60/readme.md

Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com>
2019-05-29 11:01:14 -07:00
Jeremy Bernhardt
a1a7a84831 [Keymap] Georgi flippydippy layout (#6005)
* keymap(gergo): colemak

* added flipped numbers

* Updated as per Drash
2019-05-29 10:57:38 -07:00
fauxpark
d16056e60a Fix TO() and DF() calling layer_state_set_[kb,user] twice (#6003) 2019-05-29 07:45:28 -07:00
Fred Silberberg
287767bba1 Update 333fred keymaps and add new iris map. (#6010)
* Update 333fred keymaps and add new iris map.

* Fix iris key
2019-05-29 07:44:43 -07:00
M-AS
38d3b7aa45 [Keyboard] Changed LED positions for Massdrop CTRL and DZ60RGB (#5801)
* changed rgb positions and modifiers within RGB matrix thing for CTRL and DZ60RGB

* changed CTRL corner LEDs + centered horizontally

* whoops - changed CTRL's underglow LEDs back to the underglow flag

* whitespace

* I changed the right file this time

* Fixed DZ60RGB left shift out of position
2019-05-28 20:57:09 -07:00
Elliot Powell
bd1cfcd593 [Keyboard] Add support for AKB boards (#5996)
* Move boards to akb folder

* Updates for PR

* fix for PR

* Fix info.json
2019-05-28 20:15:38 -07:00
noroadsleft
03bc8e71e6 Duck Octagon V1 Configurator cleanup (#5957)
* Expand info.json formatting to one line per key

This is a white-space-only change. Make it easier for me to read the file.

* Make sure every key object has a label

Going to be using them shortly.

* Insert key identifiers from v1.h into info.json labels

Shows where each key is located in the switch matrix.

* Move K5O to its correct location on the top row

* Adjust white space in v1.h

At this point, the macros for LAYOUT and LAYOUT_75_ansi are 100% identical, except for their names.

* Redefine LAYOUT_75_ansi as an alias of LAYOUT

No need for two code blocks with the same data.

* Correct visual positioning in info.json

- move Pause 1u to the right
- move K5O to the top row, between Print Screen and Pause
- move Enter key 1u to the left and 1u wider (1.25u to 2.25u)

* Delete key identifiers from info.json labels

Don't need them anymore now that we know where everything is.

I'm calling K5O as ScrLk so it has a label, even though that's not actually what it is.

Also gave the Spacebar a label because I prefer when all the keys have labels.

* Enable 75_ansi Community Layout support

* Reassign layout macro as LAYOUT_75_ansi and delete macro alias

Configure the codebase so LAYOUT_75_ansi is the only layout macro available.

* Add key_count key to info.json data
2019-05-28 15:47:59 -07:00
Ryan Caltabiano
6d6646de04 Fixing matrix_scan so it properly returns changed status 2019-05-28 14:09:47 -07:00
Mikkel Jeppesen
70a7b84dab Clean up duped filenames om qmk.fm (#5822)
Removes all binaries that don't correspond to an entry in the .keyboards file
2019-05-28 11:38:47 -07:00
Elliot Powell
a31c2ac03e [Keyboard] Merge Commissions to repo (#5995)
* Moved commisions to one folder

* Update keyboards/ep/comsn/hs68/config.h

Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com>

* Resolve merge issues

* Fix comiplation issues
2019-05-28 11:35:19 -07:00
moyi4681
4d46489a2a [Keyboard] add geekboards 8key macro-pad tester (#5940)
* add geekboards 8key macro-pad tester

* Update readme.md

* Update keyboards/geekboards/tester/rules.mk

Co-Authored-By: fauxpark <fauxpark@gmail.com>

* Update keyboards/geekboards/tester/keymaps/default/keymap.c

Co-Authored-By: fauxpark <fauxpark@gmail.com>

* Update keyboards/geekboards/tester/keymaps/default/keymap.c

Co-Authored-By: fauxpark <fauxpark@gmail.com>

* Update keyboards/geekboards/tester/keymaps/default/keymap.c

Co-Authored-By: fauxpark <fauxpark@gmail.com>

* Update keyboards/geekboards/tester/keymaps/default/keymap.c

Co-Authored-By: fauxpark <fauxpark@gmail.com>

* Update keymap.c

* Update keyboards/geekboards/tester/readme.md

Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com>

* Update keyboards/geekboards/tester/readme.md

Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com>

* Update keyboards/geekboards/tester/readme.md

Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com>

* Update keyboards/geekboards/tester/readme.md

Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com>

* Update keyboards/geekboards/tester/readme.md

Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com>

* Update readme.md

* Update tester.c

* Update keyboards/geekboards/tester/config.h

Co-Authored-By: Drashna Jaelre <drashna@live.com>

* Update keyboards/geekboards/tester/rules.mk

Co-Authored-By: Drashna Jaelre <drashna@live.com>

* Update keyboards/geekboards/tester/keymaps/default/keymap.c

Co-Authored-By: Drashna Jaelre <drashna@live.com>

* Update keyboards/geekboards/tester/keymaps/default/keymap.c

Co-Authored-By: Drashna Jaelre <drashna@live.com>
2019-05-28 11:20:39 -07:00
Klemen Košir
ff6a57c3c3 [Kenyboard] Add ansi_split_space_rshift layout to DZ60 (#6004)
* [DZ60] Add ansi_split_space_rshift layout

* [DZ60] Add kream keymap

* Revert spacebar sizes
2019-05-28 11:05:07 -07:00
Mathias Andersson
7a7e3848c7 [Keyboard] Add keyboard Moon (#5976) 2019-05-28 10:57:17 -07:00
noroadsleft
b0532c433e Waldo LAYOUT_60_hhkb bugfix (#6000)
* Fix typo in LAYOUT_60_hhkb macro

Reported by Sushiimi
- https://github.com/qmk/qmk_configurator/issues/376

* Unify white space

Tabs and spaces were being mixed for indenting.

No logic change.
2019-05-28 06:52:31 -07:00
Tyler Wince
5aa4420f59 [Keymap] Add lets_split keymap (#5992)
* tylerwince keymap added

* modifications for PR

* remove legacy import

* fix some build errors

* fix layers

* restore custom_keycodes

* remove trailing commas

* change persistent layer function

* update light noeeprom

* layer state set user

* missing trailing "

* changes to single_default_layer
2019-05-27 20:28:37 -07:00
M-AS
a23c3396a9 [Keymap] Updated personal keymaps (#5993)
* added personal CTRL keymap

* added personal dz60rgb keymap

* enabled new rgb effect

* added space cadet shift

* media player track buttons now orange

* updated keymaps with rgb setting and visual HSV setting preview

* fixed source stuff?

* added support for underglow toggle (bugged to all hell)

* everything now behaves as expected when ti comes to RGB toggles, thank god

* removed ifdefs

* changed color of MAS_CRM

* uh, whitespace

* changed rgb positions and modifiers within RGB matrix thing for CTRL and DZ60RGB

* updated keymap to work kindof

* KEYMAP: changed list of rgb effects

* changed CTRL rgb defaults

* KEYMAP: new LED layout for ctrl
2019-05-27 16:58:45 -07:00
Gaëtan Ark
6c7c178cd2 [Keymap] Added french Bépo support on Ergo42 keeb (#5986)
* Added french Bépo support on Ergo42 keeb

* Fixed some typos

* Removed a unused include
2019-05-26 20:36:24 -07:00
Kyle Terry
df73a81db8 [Keyboard] adds spacetime keyboard (#5969)
* adds spacetime keyboard

* removes custom tap and mod functions

this commit replaces tap_key, control_key and shift_key with built-in
tap_code16.

* changes thumb layer and makes left palm key ralt
2019-05-26 13:05:42 -07:00
jotix
2f961265a1 [Keymap] jotix ortho_4x12 layout change (#5979)
* jotix ortho_4x12 layout change

* simplifying things

* simplifying things
2019-05-26 10:47:54 -07:00
chax
0d12627f0b Add Solus support to linux_install.sh script
added update-repo command before install command
2019-05-26 10:11:38 -07:00
chax
7fbb253f88 Add Solus support to linux_install.sh script 2019-05-26 10:11:38 -07:00
fauxpark
fe8c2209ca Document MT keycode in keycodes.md 2019-05-25 09:10:52 -07:00
Maarten Dekkers
1a55d84224 Add support for LSJ Ares (#5588)
* Add support for LSJ Ares

Thanks to the other ports which have made this port possible.

* Update Ares code per request

* More changes to Ares

* Update Ares rules.mk

Co-Authored-By: Maartenwut <maartenwut@gmail.com>

* Remove escaping backslashes from Ares default keymap
2019-05-24 18:33:37 -07:00
Doug Raffle
1da8ad8668 Added media keys to 1up60rgb:raffle (#5973) 2019-05-24 15:06:37 -07:00
Mark
4f1537b879 [Keyboard] Fix formatting on keyboard to micro connection table (#5968)
* Fix formatting on keyboard to micro connection table

* Add whitespace to make more readable
2019-05-24 14:18:57 -07:00
AbstractKB
a1e2d51712 [Keyboard] Added Abstract Ellipse Rev1 (#5939)
* mostly done with first version of Ellipse Rev1 software

* mostly done, error with backlight breathing

* more testing and changing default keymaps

* ready for first release attempt

* fix newline in readme

* fix copyright and extraneous declarations and symbols

* remove more excess backslashes

* fixed more formatting
2019-05-24 14:10:40 -07:00
Danny
362bfc5b15 Fix cypher iso (#5971)
* Reformat JSON to look less like AIDS

* Fix location of ISO Enter
2019-05-24 12:14:14 -07:00
Drashna Jaelre
83afae31ed Fix up Debouncing in AVR Templates (#5964) 2019-05-23 17:42:06 -07:00
tuesdayjohn
a37e44b2d7 Added keymap folder matching username; added readme to previous keymap (#5961)
* Added keymap folder matching username; added readme into previous keymap

* Update keymap.c
2019-05-23 17:41:25 -07:00
Erovia
f7caca51f6 Add support for Dimple (#5963)
Add support for Dimple, a 40% custom keyboard designed and produced by LazyDesigners.
2019-05-23 17:26:15 -07:00
Tobias V. Langhoff
701a1d9435 Fix layout comment (#5967)
Swap the "Cmd" and "Alt" keys in the comment to reflect the actual layout.

Also change "Cmd" to "Win" for consistency with the default keymap.
2019-05-23 17:12:16 -07:00
Drashna Jaelre
36f427f40c Fix typo 2019-05-23 10:29:18 -07:00
Jarrett Drouillard
03e53dc8a2 [Keymap] changes to my userspace and preonic keymap ( spring 2019 ) (#5881)
* feat-user-kuatsure: abstract symbol row out

* feat-user-kuatsure: abstract grouped bracket, brace, paren out

* fix-preonic-kuatsure: remove eol as requested by @drashna

* feat-user-kuatsure: add KC_MAKE and KC_FLSH

thanks to @drashna for the help

* chore-preonic-kuatsure: remove auto shift

* chore-user-kuatsure: move leader seq's to macro syntax

* feat-user-kuatsure: add `KC_VRSN` key

plus use it preonic keymap

* chore-user-kuatsure: namespace keyboard macros `KB`

* chore-preonic-kuatsure: move some keyboardy keys around

* chore-preonic-kuatsure: remove parens, brackets, braces from lower

* chore-user-kuatsure: move tmux window shifts to dbl press leaders

* feat-user-kuatsure: add a computer lock leader seq

* fix-preonic-kuatsure: go back to lower brackets

* chore-preonic-kuatsure: clear out raise

* feat-various-kuatsure: add meh + tab mod tap

* chore-preonic-kuatsure: `raise` eats `game_mod` layer

* fix-preonic-kuatsure: reverse pg up and pg down

* chore-user-kuatsure: add double tap to turn off music

* chore-user-kuatsure: move like seqs together

* chore-preonic-kuatsure: add a few more items to the num pad on raise

* feat-user-kuatsure: re-enable td for <> keys

* chore-user-kuatsure: give a little more grace period for leader

* fix-user-kuatsure: give lock leader a gui buffer

no timer or anything, but alfred doesn't boot up as quickly as I would like sometimes

gui doesn't do anything but gives a little bit of a time bump

* fix-user-kuatsure: changes from @drashna review
2019-05-22 21:40:16 -07:00
tuesdayjohn
73715bacc2 [Keymap] Added personal keymap in Kinesis matching username; updated old readme.md (#5955)
* Added 'tuesdayjohn' folder; updated old readme.md

* Update keymap.c

* Update readme.md

* Update keymap.c
2019-05-22 21:13:55 -07:00
Jonathan Rascher
fcb5653411 [Keymap] Switch Quefrency keymap from I2C back to serial; factor common configs into userspace (#5951)
* Switch Quefrency from flaky I2C back to serial

* Lower mouse wheel speed on Quefrency slightly

* Migrate common settings to userspace

* Enable Bootmagic Lite for consistent reset to bootloader.

* Turn off some undesired features across all keyboards.

* Remove EEPROM reset keybinding from all keyboards since Bootmagic Lite
also does an EEPROM reset.

* Set backlight and underglow increments consistently across all
keyboards since lots of them like to override the deafults.

* Set mouse keys consistently across all keyboards.

* Update function layer keymap images
2019-05-22 21:08:48 -07:00
Ben
d31c54c8af [Keyboard] Add info.json to O4L5x12 (#5950)
* [Keyboard] Add info.json to O4L5x12

* Apply suggestions from code review

Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com>

* Better formatting

* Add key_count to all layouts
2019-05-22 21:06:55 -07:00
Drashna Jaelre
c97315dc5a Additional link fixes
Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com>
2019-05-22 21:00:20 -07:00
Drashna Jaelre
dcb274b286 Fix links
Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com>
2019-05-22 20:55:52 -07:00
ymzcdg
894010786c translate docs into Mandarin Chinese (#5890)
* translate docs into Mandarin Chinese

translate
faq_debug.md
into Chinese

* translate faq_build.md into Chinese

translate faq_build.md into Chinese

* faq_keymap.md to zh-cn

faq_keymap.md to zh-cn
2019-05-22 14:33:10 -07:00
Drashna Jaelre
eb756916c2 [Keyboard] Fix 9key macropad keymap (#5942)
Fails to compile on the configurator because tapdance is enabled for the entire keyboard
2019-05-21 13:40:50 -07:00
Drashna Jaelre
02787ac07f Add missing links to features page and sidebar section 2019-05-21 13:15:59 -07:00
Jesper Nellemann Jakobsen
fc3965ef70 [Keymap] Update Mouse key settings (#5946)
Set shorter `MOUSEKEY_INTERVAL` and `MOUSEKEY_TIME_TO_MAX`.
Move mouse scroll buttons around and update comment to reflect change.
2019-05-21 11:03:57 -07:00
dsanchezseco
fdd8c5c50c [Keymap] dsanchezseco for planck (#5944)
* added user keymap

* updated keymap

* updated keymap

* swapped positions of alt and altGr
2019-05-21 11:01:29 -07:00
noroadsleft
419f2c3f40 [Keyboard] QMK Configurator support for Diverge TM 2(#5943) 2019-05-21 11:00:32 -07:00
stanrc85
a0d5f0722f [Keymap] Romac added and tweaks to existing keymaps (#5941)
* Initial keymap for Romac

* Formatting changes

* keymap tweaks

* Add new cycle layer key

* add cycle layer code

* initial upload

* keymap updates

* keymap updates

* keymap updates for new layer names

* new enum layers

* case added for 4th layer

* removed extra space for formatting
2019-05-21 10:59:07 -07:00
Michael Pio
68501261c3 [Keyboard] Add Ixora keypad (#5931)
* added ixora files

* upload ixora

* update readme

* Update keyboards/peiorisboards/ixora/ixora.h

Co-Authored-By: fauxpark <fauxpark@gmail.com>

* Update keyboards/peiorisboards/ixora/ixora.h

Co-Authored-By: fauxpark <fauxpark@gmail.com>

* Update keyboards/peiorisboards/ixora/ixora.h

Co-Authored-By: fauxpark <fauxpark@gmail.com>

* Update keyboards/peiorisboards/ixora/keymaps/default/keymap.c

Co-Authored-By: fauxpark <fauxpark@gmail.com>

* Update keyboards/peiorisboards/ixora/keymaps/default/keymap.c

Co-Authored-By: fauxpark <fauxpark@gmail.com>

* Update keyboards/peiorisboards/ixora/keymaps/wntrmln/keymap.c

Co-Authored-By: fauxpark <fauxpark@gmail.com>

* Update keyboards/peiorisboards/ixora/keymaps/wntrmln/keymap.c

Co-Authored-By: fauxpark <fauxpark@gmail.com>

* update files according to suggestions

* removed unused code
2019-05-21 10:49:33 -07:00
Anthony Leung
0aece4ddab add dz60rgb-ansi layout to configurator (#5938)
* add dz60rgb-ansi layout to configurator

* fix mekanist's dz60rgb keymap
2019-05-21 06:03:37 -07:00
MechMerlin
d93c53fc62 [Keyboard] fix hhkb bottom layer (#5926) 2019-05-20 15:52:06 -07:00
Jesper Nellemann Jakobsen
5904933a3f [Keymap] bingocaller's DZ60 MacOS keymap (#5914)
* Added customisations and README

* Tweak keymap: word traversal/deletion

* Add w and b word traversal/deletion keycodes.
* Add fine volume control key codes, but don't use them, because they
  conflict with other key codes. `A` somehow got remapped to fine
  volume up.

* Set mousekey delay to zero

* Use SAFE_RANGE for key codes.

* Update keymap and README

Add new mouse-specific layer 3, activated by pressing and holding space.
Add brightness controls to layer 4 (previously, layer 3).
Update README:
  * New keyboard-layout mockup image.
  * Add actual link to kbdfans.cn.
  * Update layer descriptions.

* Fix indentation in keymap.c

* Use _______ over KC_TRNS to increase readability

* Custom keys: use #define over process_record_user

* Use enum for naming layers

* Rename README.md -> readme.md
2019-05-20 15:46:24 -07:00
Kenneth Aloysius
57f5cd3ca7 [Keyboard] YD60MQ support (#5911)
* Keep ASCII art consistent with keymap

* Possible fix for xyverz ortho keymap: define RGBLED_NUM

* Update DZ60 keymap; TODO store old keymap under different directory?

* Change RGUI to RALT because 7u spacebar is too long

* Save old bottom row keymap

* Update Iris keymap: replace backslash with grv

* Add ortho_4x12 layout

* Added Delete key to Iris keymap

* Move delete key

* Oh look a new keyboard

* ortho4x12: get an adjust layer back

* Remove jj40 keymap, add custom power draw #define

* Set WhiteFox to advertise only 100mA of power draw

* Update WhiteFox keymap

* Update WF keymap (2)

* Remove lets_split keymap, update community krusli keymap

* Add #define for BACKLIGHT_LEVELS (unused)

* Update Whitefox keymap

* Add YD60 from auto-generated kbfirmware files

* Bring files up to speed with new standards

* Fix: KEYMAP -> LAYOUT

* Fix keymap differences (DZ60 -> YD60)

* Update keymap

* Update README

* Fix RShift position

* Specify that the port is for the YD60MQ variant

* Update keyboards/iris/keymaps/krusli/keymap.c

Co-Authored-By: fauxpark <fauxpark@gmail.com>

* Fix Iris and Let's Split keymaps

* Remove unused keymap file

* Use #include QMK_KEYBOARD_H

* Add atmel-dfu selection to yd60

* Rename dir to YD60MQ, update definitions

* Use new convenience macros/functions for led_set_user

* Use #pragma once

* Change all ?= to = in rules.mk

* Use pragma once for yd60mq.h

* Take out DZ60 and Iris changes

* Remove now-removed Iris folder

* Revert adding ortho_4x12

* Revert on xyverz ortho_4x12 keymap

* Undo deleting JJ40 keymap files

* Don't revert beyond upstream jj40 state

* Extra files from earlier commit is to be deleted

* Remove WhiteFox keymap not in upstream yet

* Re-add my Let's Split keymap

* Revert keymap changes

* Cleanup: indentation

* Update keyboards/yd60mq/rules.mk

Co-Authored-By: fauxpark <fauxpark@gmail.com>

* Update keyboards/yd60mq/rules.mk

Co-Authored-By: fauxpark <fauxpark@gmail.com>

* Cleanup & move kb backlighting code to yd60mq.c

* Update README, rename to lowercase

* Update README: rename to lowercase

* Update README with links and picture of PCB

* Remove PREVENT_STUCK_MODIFIERS

Co-Authored-By: Drashna Jaelre <drashna@live.com>
2019-05-20 15:43:29 -07:00
noroadsleft
843c67d805 Plain60: Configurator layout extension (#5929)
* Add LAYOUT_60_ansi

* Add LAYOUT_60_iso

* Add LAYOUT_60_ansi_split_bs_rshift

* Add LAYOUT_60_iso_split_bs_rshift

* Enable Community Layout support

Added:

- 60_ansi
- 60_ansi_split_bs_rshift
- 60_iso

* Add LAYOUT_60_hhkb and enable its community layout support
2019-05-20 15:19:31 -07:00
Danny
566b8c57b1 [Keyboard] Fix pinout of Levinson Rev 1 scrap sale boards to use non-jumpered pinout (#5935) 2019-05-20 10:16:40 -07:00
jotix
cd826e39d2 vim style cursor keys (#5932) 2019-05-20 08:22:20 -07:00
Jonathan Rascher
228e7145c0 Remove spurious backslashes from my keymaps (#5927)
Suggested in #5924.
2019-05-19 17:14:28 -07:00
Jonathan Rascher
1435a2ca61 Update my Quefrency/KBD67 keymaps, adding BDN9 macropad keymap as well (#5924)
* Set Quefrency bootloader correctly for Elite-C

* Update Quefrency layout to be more like HHKB

* Update KBD67 layout to be more like HHKB

* Add keymap for BDN9 macropad
2019-05-19 16:11:18 -07:00
Ryan Caltabiano
c9a7161d93 Reduce rgb matrix firmware size 2019-05-19 15:23:01 -07:00
crilith
e7af23788f [Keymap] Update keymap.c (#5923)
Corrected formatting and added shortcuts.

Removed invalid #define
2019-05-19 12:12:34 -07:00
Andrew Kannan
e8372692c5 [Keyboard] Instant60 VIA Support (#5909)
* VIA Support for Instant60

* Backlighting updates

* Update default keymap

* Add Standard layout default VIA supported layout

* Clean up some backslashes

* Add info.json

* Update info json metadata

* add info.json for practice65

* Update keyboards/cannonkeys/instant60/info.json

Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com>

* Update keyboards/cannonkeys/practice65/info.json

Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com>

* Update keyboards/cannonkeys/instant60/keymaps/via/keymap.c

Co-Authored-By: fauxpark <fauxpark@gmail.com>

* Update keyboards/cannonkeys/instant60/keymaps/via_standard/keymap.c

Co-Authored-By: fauxpark <fauxpark@gmail.com>

* Remove unused enum
2019-05-19 10:03:06 -07:00
marksard
b479eff940 [Keymap] Add keymap csprt (#5918)
* Keyboard: add treeadstone48

* rename layout defines

* Use of pragma once

* move common include code

* fixed info.json

* change keymap layout from kc to normal

* fix alpha revision keymap

* fixed info.json

* remove USE_Link_Time_Optimization

* Add center sprit keymap for nomu30
2019-05-19 10:02:13 -07:00
Drashna Jaelre
6b8be98555 [Keymap] Drashna Corne Keyboard updates (#5903)
* Re-enable Audio

And there was much rejoicingmake keebio/iris/rev2:drashna AUDIO_ENABLE=yes!

* Re-add debounce to ergodox EZ

* Fix rgb matrix helper function

* Make sure that RGM Matrix is checked properly

* Fix merge commit?

* Disable more RGB matrix modes

* Increase Debounce for Ergodox EZ

The performance improvements have made it necessary, actually

* Consolidate RGB Matrix layer indication function

And changes to iris

* Fix lighting issue for gamepad

* Update Corne Keyboard configuration

* Update Corne Keyboard layout

* Update KC_MAKE macro to better handle crkbd split

* Tweaks to Corne Keyboard Layout

* Enable RGB Matrix Sleep

* Update my code to use layer_state_t typedef
2019-05-19 10:01:16 -07:00
marksard
2a8fd58232 [Keymap] Add keymap nomu30 likejijs (#5917)
* Keyboard: add treeadstone48

* rename layout defines

* Use of pragma once

* move common include code

* fixed info.json

* change keymap layout from kc to normal

* fix alpha revision keymap

* fixed info.json

* remove USE_Link_Time_Optimization

* Add like_jis keymap for nomu30
2019-05-19 10:00:53 -07:00
MechMerlin
2ce3c5548a [Keyboard] E6V2 BMC OE (#5908)
* rename bmc due to confusion as the bmc from r2 is different

* update readme

* Update keyboards/exclusive/e6v2/readme.md

Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com>
2019-05-19 09:51:56 -07:00
MechMerlin
d67eb20aed [Keyboard] Pearl Refactors (#5907)
* use pragma once

* remove custom matrix

* remove custom i2c code in favor of QMK's i2c_master

* rename to all lower case readme

* update readme

* turn off bootmagic as it doesn't work anyway

* Update keyboards/pearl/readme.md

Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com>
2019-05-19 09:50:57 -07:00
jotix
11c7cd47ae [Keymap] jotix ortho_4x12_layout tweakings (#5904)
* jotix ortho_4x12_layout tweakings

* jotix ortho_4x12_layout tweakings
2019-05-19 09:49:23 -07:00
fauxpark
e0ecc53f4e Make DEBUG keycode disable as well as enable (#5898)
* Make DEBUG keycode disable as well as enable

* print() can always be used regardless of debug_enable state
2019-05-19 09:46:41 -07:00
marksard
26203401a1 [Keyboard] Add keyboard treadstone32 (#5888)
* Keyboard: add treeadstone48

* rename layout defines

* Use of pragma once

* move common include code

* fixed info.json

* change keymap layout from kc to normal

* fix alpha revision keymap

* fixed info.json

* remove USE_Link_Time_Optimization

* Added Treadstone32 keyboard.

* Fixed some code

* Fixed some codes

* Fixed config.h

* modified review point

* Fixed redundant include
2019-05-19 09:43:58 -07:00
coseyfannitutti
5e7b929717 [Keyboard] Add mullet and mulletpad keyboards (#5878)
* Added mullet and mulletpad keyboards

* Added mullet and mulletpad keyboards

* Update keyboards/coseyfannitutti/mullet/mullet.h

Co-Authored-By: fauxpark <fauxpark@gmail.com>

* Update keyboards/coseyfannitutti/mullet/mullet.h

Co-Authored-By: fauxpark <fauxpark@gmail.com>

* Update keyboards/coseyfannitutti/mullet/mullet.h

Co-Authored-By: fauxpark <fauxpark@gmail.com>

* Update keyboards/coseyfannitutti/mulletpad/mulletpad.h

Co-Authored-By: fauxpark <fauxpark@gmail.com>

* Update keyboards/coseyfannitutti/mulletpad/mulletpad.h

Co-Authored-By: fauxpark <fauxpark@gmail.com>

* Update keyboards/coseyfannitutti/mulletpad/mulletpad.h

Co-Authored-By: fauxpark <fauxpark@gmail.com>

* Update keyboards/coseyfannitutti/mullet/config.h

Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com>

* Update keyboards/coseyfannitutti/mullet/keymaps/alternate/keymap.c

Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com>

* Update keyboards/coseyfannitutti/mullet/keymaps/default/keymap.c

Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com>

* Update keyboards/coseyfannitutti/mullet/mullet.c

Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com>

* removed unnecessary slashes from keymaps

* Update keyboards/coseyfannitutti/mullet/mullet.h

Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com>

* Update keyboards/coseyfannitutti/mullet/readme.md

Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com>

* Update keyboards/coseyfannitutti/mullet/readme.md

Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com>

* Update keyboards/coseyfannitutti/mullet/readme.md

Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com>

* Update keyboards/coseyfannitutti/mullet/rules.mk

Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com>

* Update keyboards/coseyfannitutti/mulletpad/config.h

Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com>

* Update config.h

* Update keyboards/coseyfannitutti/mulletpad/keymaps/default/keymap.c

Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com>

* Update keyboards/coseyfannitutti/mulletpad/mulletpad.c

Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com>

* Update keyboards/coseyfannitutti/mulletpad/mulletpad.h

Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com>

* Update keyboards/coseyfannitutti/mulletpad/readme.md

Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com>

* Update keyboards/coseyfannitutti/mulletpad/readme.md

Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com>

* Update keyboards/coseyfannitutti/mulletpad/readme.md

Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com>

* update config.h

* Update keyboards/coseyfannitutti/mullet/rules.mk

Co-Authored-By: fauxpark <fauxpark@gmail.com>

* Update keyboards/coseyfannitutti/mulletpad/rules.mk

Co-Authored-By: fauxpark <fauxpark@gmail.com>

* Update keyboards/coseyfannitutti/mulletpad/mulletpad.h

Co-Authored-By: fauxpark <fauxpark@gmail.com>

* Update keyboards/coseyfannitutti/mulletpad/rules.mk

Co-Authored-By: fauxpark <fauxpark@gmail.com>

* Update keyboards/coseyfannitutti/mulletpad/keymaps/default/keymap.c

Co-Authored-By: fauxpark <fauxpark@gmail.com>

* update info.json

* Update readme.md

update readme.me

* Update keyboards/coseyfannitutti/mulletpad/readme.md

Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com>

* Update keyboards/coseyfannitutti/mulletpad/readme.md

Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com>

* Update keyboards/coseyfannitutti/mulletpad/readme.md

Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com>

* Update keyboards/coseyfannitutti/mulletpad/readme.md

Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com>

* Update keyboards/coseyfannitutti/mulletpad/info.json

Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com>
2019-05-19 09:43:10 -07:00
XScorpion2
56930a0174 [Keyboard] Update LED positions to be more physically accurate for Sol rev1 (#5921) 2019-05-19 09:39:30 -07:00
Ryan Caltabiano
5c7b37bbbd Added custom center point to rgb matrix 2019-05-19 09:38:38 -07:00
XScorpion2
270b39b2eb Spirals, Pinwheels, and Documentation....Oh My! RGB Matrix Effects (#5877)
* Spirals, Pinwheels, and Documentation....Oh My!

* Spiral effect band thickness adjustments

* Fixing animation spin directions
2019-05-19 09:19:46 -07:00
XScorpion2
a0d6c5a113 [Keymap] Update Xulkal user code (#5920) 2019-05-19 09:15:50 -07:00
XScorpion2
f11fde9bf5 Fixing hsv_to_rgb where s = 0 and v < 255 (#5915)
* Fixing hsv to rgb where s is 0 and v is < 255

* Update color.c
2019-05-19 09:11:08 -07:00
XScorpion2
0099bbf9a6 Single Color Band scrolling left to right effects (#5867) 2019-05-19 09:09:06 -07:00
Ryan Caltabiano
ba26736d7e Fix bit count calculation for iterating layers 2019-05-18 13:47:34 -07:00
Drashna Jaelre
89e9785d7a Update my code to use layer_state_t typedef 2019-05-17 15:21:45 -07:00
Drashna Jaelre
356521864e Enable RGB Matrix Sleep 2019-05-17 15:02:21 -07:00
Drashna Jaelre
ebfc39cc50 Tweaks to Corne Keyboard Layout 2019-05-17 15:02:20 -07:00
Drashna Jaelre
bcfc24fd13 Update KC_MAKE macro to better handle crkbd split 2019-05-17 15:02:20 -07:00
Drashna Jaelre
05e2baaa49 Update Corne Keyboard layout 2019-05-17 15:02:20 -07:00
Drashna Jaelre
ed08787aaa Update Corne Keyboard configuration 2019-05-17 15:02:19 -07:00
Drashna Jaelre
2a6cb04876 Fix lighting issue for gamepad 2019-05-17 15:02:19 -07:00
Drashna Jaelre
6689f900fc Consolidate RGB Matrix layer indication function
And changes to iris
2019-05-17 15:02:19 -07:00
Drashna Jaelre
f520316124 Increase Debounce for Ergodox EZ
The performance improvements have made it necessary, actually
2019-05-17 15:02:19 -07:00
Drashna Jaelre
667b927004 Disable more RGB matrix modes 2019-05-17 15:02:18 -07:00
Drashna Jaelre
db7c3b9220 Fix merge commit? 2019-05-17 15:02:18 -07:00
Drashna Jaelre
6af0c1e129 Make sure that RGM Matrix is checked properly 2019-05-17 15:02:18 -07:00
Drashna Jaelre
42a6bd2fd4 Fix rgb matrix helper function 2019-05-17 15:02:17 -07:00
Drashna Jaelre
ed6d5d5b7b Re-add debounce to ergodox EZ 2019-05-17 15:02:17 -07:00
Drashna Jaelre
f06910f5bf Re-enable Audio
And there was much rejoicingmake keebio/iris/rev2:drashna AUDIO_ENABLE=yes!
2019-05-17 15:02:17 -07:00
Josh
d85110b6ec Adds a configurable initial delay to the audio clicky feature (#4286)
* Adding an AUDIO_CLICKY_DELAY_DURATION configurable value to the AUDIO_CLICKY feature.

* Tweaking my community keymap to work better with my rev 4 planck.
2019-05-17 13:48:53 -07:00
Alex Ong
00d1d7828c Typedef'ed layer_state_t to uint32_t (#3637)
* Typedef'ed layer_state_t to uint32_t.

This enables future work with layer_state_t to uint8_t for optimization purposes.

* Removed accidental xeal60 commit

* Revert to egyptian brackets, added sizeof(layer_state_t) so when layer_state_t is redefined it will automagically work.

* Add additional typedefs

* Add checks for setting layer state

* Update tmk_core/common/action_layer.h

Co-Authored-By: alex-ong <the.onga@gmail.com>

* Revert commit.
2019-05-17 13:47:50 -07:00
Jeremy Bernhardt
90a45aac6e [Keyboard] Butterstick fix (#5900)
* Working on chording

* Working on chording

* Got layouts in order

* Initial Georgi support

* forgot to add keymaps

* Updated readme

* Update keyboards/georgi/keymaps/template/readme.md

Co-Authored-By: germ <jeremythegeek@gmail.com>

* Update keyboards/georgi/georgi.h

Co-Authored-By: germ <jeremythegeek@gmail.com>

* Update keyboards/georgi/keymaps/default/keymap.c

Co-Authored-By: germ <jeremythegeek@gmail.com>

* Update keyboards/georgi/keymaps/default/keymap.c

Co-Authored-By: germ <jeremythegeek@gmail.com>

* Update keyboards/georgi/rules.mk

Co-Authored-By: germ <jeremythegeek@gmail.com>

* Update keyboards/georgi/rules.mk

Co-Authored-By: germ <jeremythegeek@gmail.com>

* Update keyboards/georgi/matrix.c

Co-Authored-By: germ <jeremythegeek@gmail.com>

* Update keyboards/georgi/georgi.c

Co-Authored-By: germ <jeremythegeek@gmail.com>

* Update keyboards/georgi/georgi.c

Co-Authored-By: germ <jeremythegeek@gmail.com>

* Update keyboards/georgi/rules.mk

Co-Authored-By: germ <jeremythegeek@gmail.com>

* Update keyboards/georgi/keymaps/default/keymap.c

Co-Authored-By: germ <jeremythegeek@gmail.com>

* Update keyboards/georgi/keymaps/template/keymap.c

Co-Authored-By: germ <jeremythegeek@gmail.com>

* Update keyboards/georgi/matrix.c

Co-Authored-By: germ <jeremythegeek@gmail.com>

* Disabled features, updated info

* Update keyboards/georgi/config.h

Co-Authored-By: germ <jeremythegeek@gmail.com>

* Update keyboards/georgi/config.h

Co-Authored-By: germ <jeremythegeek@gmail.com>

* Fixed info.json

* Split the number button and fixed gaming mode.

* started work on history feature

* Working history/multikeyfuckery

* type

* inital code reduction refactor

* Got multikey patched up, optimizing for size

* Forgot to remove stuff

* fixed key repeat

* Key repeat added.

* Symshift locking

* Midchord Sym shenanigans.

* Added only QWERTY mode

* Split out header

* Added stickybits, minimal layour

* Fixing user layout

* Whitespace fixing

* Fixing Version name

* Starting work on BS

* Fixing default layout and rules

* Updated Butter fw

* Copy-paste rebase

* more fixing from merge. Fuck

* Forgot to roll version

* Added revisions as per @mechmerlin

* Somehow forgot backspace

* Forgot Backspace?
2019-05-17 13:07:37 -07:00
Jeremy Bernhardt
d0c9ad6433 [Keyboard] Georgi improvements (#5899)
* Georgi improvements

* The writing was in the -Wall
2019-05-17 13:02:22 -07:00
Chris Broekema
7a0174f871 [Keyboard] keypad enter should not be remapped in Model M default keymap (#5897) 2019-05-17 12:58:28 -07:00
kingwangwong
b34d2c73fa [Keymap] Adding my keymap for the minivan/kumo (#5896)
* adding my keymap for the KUMO

* edited the readme file

* edited some more files

* edited some more files

* edited files from feedback

* edited one more files from feedback

* edited rules
2019-05-17 12:57:10 -07:00
MechMerlin
8be32e98d8 [Keyboard] New Keyboard: Mars 8.0 TKL (#5894)
* fix the things the stupid script broke

* create an appropriate LAYOUT macro using LAYOUT_tkl_ansi

* create an appropriate keymap stolen from the phantom default keymap

* add correct pins used and rgb led numbers

* change vendor and device name

* add QMK Configurator support

* fix up RGB underglow

* update readme

* introduce new layout macro tkl_iso

* add QMK Configurator support for new layout macro

* enable backlight and add community layout support
2019-05-17 12:54:10 -07:00
marksard
49464be645 [Keymap] Add keymap for minivan (#5887)
* Keyboard: add treeadstone48

* rename layout defines

* Use of pragma once

* move common include code

* fixed info.json

* change keymap layout from kc to normal

* fix alpha revision keymap

* fixed info.json

* remove USE_Link_Time_Optimization

* Added like_jis keymap for minivan/KUMO keyboard.

* Fixed comments

* Fixed review
2019-05-17 12:40:02 -07:00
mogira
9c7818582d Fix the modifier of font variable in ssd1306.c (#5880) 2019-05-17 12:37:12 -07:00
Drashna Jaelre
48b01446ba Make delay for Capslock in Hold-Tap functions configurable (#5497)
* Increase delay for Hold-Tap register for CAPSLOCK

Because it seems that the 80ms delay wasn't too much

* Screw it, make the caps delay a define and make it configurable
2019-05-16 10:28:06 -07:00
Jan Christoph Ebersbach
5a8e387b77 [Keymap] Signum 3.0 Swap positions (#5892) 2019-05-16 09:40:00 -07:00
ENDO Katsuhiro
63ddad86a9 Add a new keyboard Halberd (#5874)
* Add a new keyboard Halberd.

* Update default keymap and add new keymap.

* Use pragma once.

* Comment out IS_COMMAND macro.

* Remove unnecessary backslashes.

* Remove dead code.

* Change layer defines to enum.

* Remove DISABLE_JTAG definition.

* Change BOOTMAGIC_ENABLE to "lite".

* Remove unnecessary line.

Co-Authored-By: fauxpark <fauxpark@gmail.com>
2019-05-16 09:39:06 -07:00
Pavlos Vinieratos
1a28906a3d [Keymap] Pvinis/update for iris (#5889)
* add default functions

* some indenting

* add ctl and alt

* maybe?
2019-05-16 09:38:28 -07:00
MechMerlin
a8af694d26 [Keyboard] Leaf60 hotswap and universal pcb (#5882)
* initial commit

* copy paste with some fixes the code from fox lab leaf60 repo

* add 60_ansi and 60_hhkb and community layout support

* add QMK Configurator support

* turn bootmagic to lite and turn on rgb and backlights

* disable some features so firmware isn't too big

* initial commit for hotswap leaf60

* add hotswap support

* edits for consistency

* add a generic leaf60 readme

* turn off console and command to save firmware space

* not enabling sleep led enable

* not enabling sleep led enable

* had one extra key in 60_hhkb

* get rid of limit val define

* Update keyboards/foxlab/leaf60/hotswap/readme.md

Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com>

* Update keyboards/foxlab/leaf60/hotswap/rules.mk

Co-Authored-By: fauxpark <fauxpark@gmail.com>

* Update keyboards/foxlab/leaf60/universal/rules.mk

Co-Authored-By: fauxpark <fauxpark@gmail.com>
2019-05-16 08:52:38 -07:00
Pavlos Vinieratos
b541369c45 [Docs] Fix typo in Userspace doc (#5871)
* typo

* Update docs/feature_userspace.md

Co-Authored-By: fauxpark <fauxpark@gmail.com>
2019-05-16 08:21:51 -07:00
zvecr
fc06975fa3 Add Configurator support for ai03/orbit (#5863)
* Add Configurator support for ai03/orbit

* Add Configurator support for ai03/orbit - align with documented KLE
2019-05-16 05:54:43 -07:00
zvecr
6764bb0157 Align Configurator support for ai03/lunar (#5864) 2019-05-16 05:53:48 -07:00
Takeshi ISHII
670a9b7f83 Add effect range to rgblight.c (#5856)
* add rgblight_set_effect_range()

* implement effect range

* Arrange the order of function list in rgblight.h .

* update docs/feature_rgblight.md

* fix RGBLIGHT_RAINBOW_SWIRL_RANGE default value

* add example code about Utility Functions

* add example code about direct operation functions

* When RGBLIGHT_SPLIT is defined, the following function has no meaning and is invalidated.

 * rgblight_setrgb_master(r, g, b)
 * rgblight_setrgb_slave(r, g, b)
 * rgblight_sethsv_master(h, s, v)
 * rgblight_sethsv_slave(h, s, v)

* add temporary test code for rgblight_set_effect_range

* fix rgblight_effect_knight() bug

* Test End. Revert "add temporary test code for rgblight_set_effect_range"

This reverts commit 5680cddd01.
2019-05-15 21:11:28 -07:00
yiancar
acd3e79add NK65 Addition (#5865)
* Nk65 initial commit

* Minor fix for compatibility

* Make everything pretty

* Update keyboards/nk65/config.h

Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com>

* Update keyboards/nk65/readme.md

Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com>

* Chmod Dummy

* Update getting_started_introduction.md

* Revert "Update getting_started_introduction.md"

This reverts commit daf446acf7.
2019-05-15 21:09:36 -07:00
Erez Zukerman
8680c50d07 Removes Erez personally from QMK (#5883) 2019-05-15 19:53:45 -04:00
zvecr
8bcefc92d0 Port 40percentclub nein (#5876) 2019-05-15 12:57:35 -07:00
ENDO Katsuhiro
547eb55553 Add a new keybord Scythe (#5873)
* Add a new keyboard Scythe.

* Update info.json.

* Use pragma once.

* Comment out IS_COMMAND macro.

* Remove DISABLE_JTAG definition.

* Remove unnecessary backslashes.

* Change layer defines to enum.

* Remove dead code.

* Fix typo(RGBLIGHT_SPLIT).

* Change BOOTMAGIC_ENABLE to "lite".

* Remove unnecessary keys.

Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com>

* Fix width.

Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com>

* Fix hight.

Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com>
2019-05-15 08:52:30 -07:00
Nicholas Shaff
7209266ea1 [Keyboard] Added capslock LED support to the Doro67 Multi PCB. (#5875) 2019-05-14 19:31:36 -07:00
Ben
4ed474b66a [Keyboard] Add Keycapsss O4L 5x12 keyboard (#5859)
* [Keyboard] Add Keycapsss O4L 5x12 keyboard

* Fix layout error in rules.mk

* Update keyboards/keycapsss/o4l_5x12/readme.md

Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com>

* Update keyboards/keycapsss/o4l_5x12/readme.md

Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com>

* Update keyboards/keycapsss/o4l_5x12/readme.md

Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com>

* Update keyboards/keycapsss/o4l_5x12/readme.md

Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com>

* Update keyboards/keycapsss/o4l_5x12/readme.md

Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com>

* Update keyboards/keycapsss/o4l_5x12/config.h

Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com>

* Remove trailing backslashes

* Add additional infos to the readme

* Remove remaining backslashes

* Change 2x2y layout to my needs

* Update keyboards/keycapsss/o4l_5x12/o4l_5x12.h

Co-Authored-By: Drashna Jaelre <drashna@live.com>

* Update keyboards/keycapsss/o4l_5x12/o4l_5x12.h

Co-Authored-By: Drashna Jaelre <drashna@live.com>

* Update keyboards/keycapsss/o4l_5x12/o4l_5x12.h

Co-Authored-By: Drashna Jaelre <drashna@live.com>

* Update keymaps to use new layout names

* Update keyboards/keycapsss/o4l_5x12/rules.mk

Co-Authored-By: Drashna Jaelre <drashna@live.com>
2019-05-14 17:00:31 -07:00
XScorpion2
3220b24819 Update Zen rev2 info.json file with option positions (#5872) 2019-05-14 15:25:26 -07:00
Markus Dieckmann
fd0ba01d68 [Keymap] Correction for DE_Simple keymap readme (#5870)
Replaced erroneous second QWERTZ keymap with diagramm for 'Lower'
layer.
2019-05-14 12:27:49 -07:00
Morton Jonuschat
7c0f2ae6d1 [Keymap] Neo2 for ErgoDox on MacOS US QWERTY / ABC Extended keymap (#5862)
This is a Neo2 inspired layout that is meant to be fully usable on
MacOS when used with the default US QWERTY/ABC Extended keymap.

Neo2 layers 1-4 have been almost fully implemented in hardware.
Layers 5 and 6 (greek and mathematical symbols) have been left
out for now as most of them aren't available on the default
keymaps.

Layer toggling for layer 3 on the right hand side utilizes a
tap-toggle approach that is a combination of MO & LT macros.
This is required to allow sending Y when tapped, @ when tapped
while the SHIFT modifier is active and support momentarily
toggling the layer while the key is held.
2019-05-14 12:12:29 -07:00
zvecr
93a97ec6e5 Fix arch installs as 8.1 is unavailable and #5456 has been merged (#5857) 2019-05-14 12:05:09 -07:00
Pavlos Vinieratos
b68d8fe82e [Keymap] Pvinis master (#5843)
* trying to make my global keymap

* refactoring the old keymap using userspace

* getting there

* move readme and remove community layout

* use pragma once instead of ifndefs

* just make iris work

* iris decent

* better naming

* add some modifiers on the home row

* use symbol and sysctl layers

* fix up

* a bit faster

* add < and > on symbol layer

* apparently im not using z all that much..

* okok

* fix up stuff

* led init is back

* bring back led indicators

* Update keyboards/ergotravel/keymaps/pvinis/config.h

Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com>

* not needed

* not needed

* delete these for now, until I use the userspace code

* remove katamari from here. made a new pr for it

* lower case

* drashna suggestion :)

* move files to correct place

* fix missing command
2019-05-14 12:02:22 -07:00
XScorpion2
4cdb86c730 [Keyboard] Create RGBKB Folder (#5858)
* Move Sol, Zen, & Zygomorph keyboards to RGBKB folder

* Updated default keymaps

* Fixing more areas due too folder moves

* Fixing Zen layer numbers

* Fixing zygomorph layer comments

* Fixing Colmak comments

* Fixing Sol Colmak readme

* Macro alignment

* Zen rev2 configuration json

* Fixing sol ifdef

* Fixing Sol info.json
2019-05-14 11:58:56 -07:00
roguepullrequest
e8b27a965d Roguepullrequest mousepad (#5860)
* First publish of roguepullreqest programmer dvorak planck layout

* Removed junk line

* Update keyboards/planck/keymaps/roguepullrequest/keymap.c

Co-Authored-By: roguepullrequest <roguepullrequest@users.noreply.github.com>

* Update keyboards/planck/keymaps/roguepullrequest/keymap.c

Co-Authored-By: roguepullrequest <roguepullrequest@users.noreply.github.com>

* Update keyboards/planck/keymaps/roguepullrequest/keymap.c

Co-Authored-By: roguepullrequest <roguepullrequest@users.noreply.github.com>

* Update keyboards/planck/keymaps/roguepullrequest/keymap.c

Co-Authored-By: roguepullrequest <roguepullrequest@users.noreply.github.com>

* Removed layer songs

Removed layer songs for cleanliness. Will use them later.

* Update keyboards/planck/keymaps/roguepullrequest/readme.md

Co-Authored-By: roguepullrequest <roguepullrequest@users.noreply.github.com>

* Made basic LSHIFT framework but is not working. Listed other tapdances.

* Got LSHIFT to work

* Added working RSHIFT

* Added working TD_S

* Cleaned up LEFT and RIGHT [ { ] } on the UPPER layer.

* Cleaned up layout.

* Reenabled audio space is not needed right now.

* Added tap dances and layout image

* Started dactylmanuform layout

* Revert "Started dactylmanuform layout"

This reverts commit 5ef48e4a23.

* Started mousepad version of BDN9...wont compile for some reason.

* Fixed BDN9 mousepad layout

* Added readme.md to mousepad bdn9 layout.

* Updated readme.md for mousepad bdn9 layout. 

Fixed the tables to finally work.

* Unslashed the mousepad keymap for the BDN9
2019-05-13 08:00:20 -07:00
XScorpion2
9b46fabe08 Xulkal Keymap Changes (#5861) 2019-05-13 07:58:15 -07:00
fauxpark
8e3cbe030c Add Wasdat controller (#5855)
* Add Wasdat controller

* Add reset instructions

* Clarify ANSI & ISO support
2019-05-12 11:22:16 -07:00
zvecr
7e1d28673f [Keyboard] Fix file encoding and add readme (#5853) 2019-05-12 00:01:00 -07:00
Croktopus
94f104cb6c [Keyboard] Added hand wired keyboard "Daishi" (#5712)
* added daishi

* edits made based on feedback

* Update keyboards/handwired/daishi/readme.md

Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com>

* Update keyboards/handwired/daishi/keymaps/default/readme.md

Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com>

* Update keyboards/handwired/daishi/keymaps/default/readme.md

Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com>

* made more changes based on feedback

* Update keyboards/handwired/daishi/keymaps/default/readme.md

Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com>

* updated usb device info

* fixed layouts

* fixed LEDs and keymaps
2019-05-11 23:59:52 -07:00
takashiski
0db65190c2 [Keyboard] Enable RGBLED_SPLIT on hecomi/alpha (#5836)
* remove not need file

* set RGBLIGHT_SPLIT

* set RGBLIGHT by layer

* exchange LED color on layer

* Update keyboards/hecomi/alpha/rules.mk

I misunderstand RGBLIGHT_SPLIT

Co-Authored-By: Drashna Jaelre <drashna@live.com>
2019-05-11 23:20:45 -07:00
zvecr
2b78840ef7 [Keyboard] Fix dz60 LAYOUT_60_iso_split_space_bs_rshift api errors (#5852)
* Fix LAYOUT_60_iso_split_space_bs_rshift to match comments and Configurator

* Fix LAYOUT_60_iso_split_space_bs_rshift to match comments and Configurator
2019-05-11 23:15:17 -07:00
zvecr
b32ad8b90c [Keyboard] Convert Staryu to use DIRECT_PINS and BACKLIGHT_PINS (#5848)
* Convert to use DIRECT_PINS and BACKLIGHT_PINS

* Convert to use DIRECT_PINS and BACKLIGHT_PINS - remove old comment
2019-05-11 22:57:51 -07:00
MechMerlin
831d765b52 [Keyboard] clarify readme for the growing number of kbd67 revisions (#5844)
* clarify readme for the growing number of kbd67 revisions

* some pr comment nits
2019-05-11 22:56:00 -07:00
XScorpion2
8d46bb9cab [Keyboard] Adding RGBKB Zygomorph Keyboard (#5841)
* Initial Zygomorph 5x6 code

Split is not working yet

* layout changes

implement 4 row config option (not done yet), remove layout comments in layout.c

* Zygomorph layouts for 5x12, 5x6, 4x12, and 4x6

Also, info.json *should* be nearly usable
 for the configurator

* temporary fix for pin D5 being broken

* show D5 issue comment

* add build notes

* Pin B7 broken in split why?

* remove fix

* Fix some pin assignments

* begin to fix keymap

* Create new 5x6 layout

* update key positions

* Initial Zygomorph 5x6 code

Split is not working yet

* layout changes

implement 4 row config option (not done yet), remove layout comments in layout.c

* Zygomorph layouts for 5x12, 5x6, 4x12, and 4x6

Also, info.json *should* be nearly usable
 for the configurator

* temporary fix for pin D5 being broken

* show D5 issue comment

* add build notes

* Pin B7 broken in split why?

* remove fix

* Fix some pin assignments

* begin to fix keymap

* Create new 5x6 layout

* Rough first pass at split common conversion.
Keymap cleanup to cover just the basics.
Broke OLED code out into separate example.

* Fix readme

* Removal of old encoder / oled driver, fix for layout macros

* small update

* xulkal zygomorph keymaps

* Removed the LED_MIRRORED option as leds are always mirrored on Zygomorph

* Xulkal keymaps update

* split rgb light support

* fix line endings

* Apply suggestions from code review

Co-Authored-By: zvecr <git@zvecr.com>

* More layout and compile fixes from pr review

* Cleaning up rules.mk files

* Apply suggestions from code review

Co-Authored-By: zvecr <git@zvecr.com>

* Updating defaults

* Apply suggestions from code review

Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com>
2019-05-11 22:42:57 -07:00
XScorpion2
c6184d2e7e Added check for event pressed to clear space cadet (#5839)
* Added check for pressed to clear space cadet

* Found some docs to update

* Update docs/quantum_keycodes.md

Co-Authored-By: fauxpark <fauxpark@gmail.com>

* Changes from PR
2019-05-11 22:20:14 -07:00
noroadsleft
ec302295b6 [Keyboard] Z-150 Blackheart refactor (#5823)
* Fix white space on z150_blackheart.h

* Update z150_blackheart.h to use #pragma once include guard

* Update z150_blackheart.h to use QMK-preferred K<row><col> notation

* Add QMK Configurator support

* Refactor the keymaps

- refactor the keymaps into separate files for each layout macro
- give credit where credit is due
- white space update (four-space indent)

* Make Hardware Availability link in readme a rich text link

* Convert LED indicators to GPIO commands

* Elevate Indicator LED set-up and toggling to keyboard level
2019-05-11 22:16:07 -07:00
Mike Roberts
f542c0589b NEK Type A (#5175)
* project creation and config.h import

* fix name

* cleanup

* layout for left

* working left with feather pins

* full keymap

* ?

* let's do this

* non working twimaster version

* it fucking works!

* bluetooth!

* cleanup

* use auto output for ADAFRUIT_BLE

* remove auto from custom matrix

* better ble auto

* fix f1

* revert

* fix ble

* update readme

* Update readme.md

* Update readme.md
2019-05-11 18:12:06 -07:00
zvecr
d53cbd2dc6 Update run command now that the install script is unattended, fix mount point for Debian (#5847) 2019-05-11 17:55:12 -07:00
stanrc85
5c4707eafc [Keymap] Minor keymap updates (#5850)
* Move layer toggle key for one handed operation

* Add print screen keycode

* Cleaning up some tab/space formatting
2019-05-11 17:51:37 -07:00
XScorpion2
819364ea23 Fix for Solid Reactive mode bug (#5846)
derp, forgot to remove the pragma once
2019-05-11 12:31:31 -07:00
William Chang
b9c38cfec8 Add vim arrow keybindings to layer 1, update readme. (#5842) 2019-05-11 10:14:42 -07:00
Paul J. Miller
d591ab6263 feat: add kbd67v2 support (#5777)
* feat: add kbd67v2 support

* update cr

* Update keyboards/kbdfans/kbd67/rev2/config.h

Co-Authored-By: Vorror <paul@dgtlrepublic.com>

* Update keyboards/kbdfans/kbd67/rev2/config.h

Co-Authored-By: Vorror <paul@dgtlrepublic.com>

* Update keyboards/kbdfans/kbd67/rev2/rev2.c

Co-Authored-By: Vorror <paul@dgtlrepublic.com>

* Update keyboards/kbdfans/kbd67/rev2/rules.mk

Co-Authored-By: MechMerlin <30334081+mechmerlin@users.noreply.github.com>

* Update keyboards/kbdfans/kbd67/rev2/readme.md

Co-Authored-By: MechMerlin <30334081+mechmerlin@users.noreply.github.com>
2019-05-11 09:24:49 -07:00
ymzcdg
7871a465d3 translate docs into Mandarin Chinese (#5807)
* translate newbs.md into Madarin Chinese

translate newbs.md into Madarin Chinese

* translate docs into Mandarin Chinese

translate getting_started_github.md into Mandarin Chinese

* translate getting_started_getting_help.md into Mandarin Chinese

translate getting_started_getting_help.md into Mandarin Chinese

* contributing.md to Chinese

Personify QMK as a girl named Q酱 . It can make more developer read this document and contribute QMK.

* getting_started_introduction.md to Chinese

getting_started_introduction.md to Chinese

* faq.md to Chinese

faq.md to Chinese

* crlf2lf getting_started_introduction.md

ending line fix getting_started_introduction.md

* crlf2lf contributing.md

crlf2lf contributing.md
2019-05-11 09:22:16 -07:00
XScorpion2
fd23a0e909 RGB Matrix Effects: Cycle Out to In & Cycle Out to In Dual (#5812) 2019-05-10 19:56:16 -07:00
XScorpion2
62ba66d618 Cleanup/rgb matrix (#5811)
* clean up rgb matrix extern usage

Moved rgb matrix boiler plate into macros

Rebased onto typing heatmap pr

* Fixing the reversed frame buffer access in digital rain

* Fixing digital rain & typing heatmap if keyreactive effects are not enabled

* Apply suggestions from code review

Co-Authored-By: Drashna Jaelre <drashna@live.com>

* Adding parenthesizes to DRIVER_LED_TOTAL where necessary

* Updated docs

* added notes about parentheses
2019-05-10 16:55:02 -07:00
Yan-Fa Li
febaf9dec4 [Docs] RGB Animation documentation on reducing memory footprint (#5813)
* Improve Animation docs with example

 - example to reduce flash footprint of animations using RGBLIGHT_EFFECT_ defines

* Re-order the effects list

* Update docs/feature_rgblight.md

Co-Authored-By: yanfali <yanfali@gmail.com>

* Update docs/feature_rgblight.md

Co-Authored-By: yanfali <yanfali@gmail.com>

* Update docs/feature_rgblight.md

Co-Authored-By: yanfali <yanfali@gmail.com>

* Introduce line breaks

* Add title for animation speed section

* Organize Animation Defines Into Groups

* Use the RGB EFFECT recommended by mtei in docs

 - has the most modes, and STATIC_LIGHT can't really be disabled.

* Use more accurate titles for effects and animation

 - accidentally put a toggle in settings
2019-05-10 09:50:52 -07:00
Andrew Kannan
6464dfc91d [Keyboard] Satisfaction75 i2c fix and VIA layout (#5798) 2019-05-09 22:53:36 -07:00
Torben Hoffmann
d3f3da5112 Norman layout for the minidox keyboard (#5747)
* Norman layout with Lower and Raise layers working

* Add keymap_extra def for Norman layout
* Re-org'ed the modifiers as explained in the Readme
* Corrected colour legend for KLE that the Readme links to

* Use #pragma once in header file

* Use pragma once and move user config to config.h

* Move definitions to the right file and correct link in Readme

* Move def of NM_COLN to the logical place in header file

* Add sendstring_norman.h for when the laptop layout is not QWERTY

* Update quantum/keymap_extras/sendstring_norman.h

Co-Authored-By: lehoff <torben.lehoff@gmail.com>
2019-05-09 22:12:11 -07:00
William Chang
7dcf9237d5 [Keymap] Updated keymap and readme (#5834)
* Initial commit

* Modified keymap and updated readme.

* fixed numbering in readme

* Update README.md

* Update README.md

* Update README.md

* Update README.md

* Update README.md

* Update README.md

* Made requested changes in PR.

* Rename README.md to readme.md

* swapped media control keys

* updated right alt key to apply shift key for emacs

* updated R_Alt to remove shift

* Updated readme
2019-05-09 21:41:26 -07:00
moyi4681
bce391a663 [Keyboard] DZTECH: CODE CLEANUP (#5828)
* Delete board.c

* Delete board.h

* Delete board.mk

* Delete bootloader_defs.h

* Delete chconf.h

* Delete halconf.h

* Delete mcuconf.h

* Update rules.mk

* Update config.h

* Update config.h

* Update config.h

* Update config.h

* Update config.h

* Update rules.mk

* Delete bootloader_defs.h

* Delete halconf.h

* Delete chconf.h

* Delete mcuconf.h

* Update rules.mk

* Update config.h

* Update dz40rgb.c

* Update dz65rgb.c
2019-05-09 18:48:07 -07:00
Konstantin Đorđević
2835a70749 [Keymap] Fix RGB_MATRIX_ENABLE check in users/konstantin/rules.mk (#5832) 2019-05-09 11:05:33 -07:00
Hannes Egler
94c4b6bd74 fixed matrix (#5831) 2019-05-09 09:57:56 -07:00
Danu Widatama
f5b9690ec7 Add no_caps_lock layout for Satan GH60 (#5829) 2019-05-09 06:35:47 -07:00
Tobias V. Langhoff
16f367348a [Docs] Fix Space Cadet link (#5825)
Fix broken Space Cadet link in Features list
2019-05-08 21:45:00 -07:00
Jan Christoph Ebersbach
aa65cd7a90 [Keymap] Signum3.0 Generate printable keymap (#5818)
* Externalize generation of visual text keymap

* Generate keymap in Asciidoc format for further processing

* Remove artifacts from a2x call
2019-05-08 11:04:32 -07:00
Jan Christoph Ebersbach
86532fa8d3 [Keymap] Signum 3.0, fix, move and change keys (#5820) 2019-05-08 11:03:53 -07:00
MechMerlin
0f0062b492 [Keyboard] Noxary 220 (#5816)
* initial commit and script error fixes

* add matrix and pin definitions along with LAYOUT macro

* add an appropriate keymap

* add num lock led support

* turn on bootmagic lite along with backlight led support

* add QMK Configurator support
2019-05-07 22:15:01 -07:00
MechMerlin
9d5b4ec975 [Keyboard] Add Noxary 260 (#5815)
* initial commit

* fix script issues

* define pins used and electrical matrix size and an appropriate LAYOUT macro

* add an appropriate keymap

* turn on bootmagic lite and backlight support

* Add QMK Configurator support

* add caps lock led support

* update readme with group buy links
2019-05-07 21:40:45 -07:00
MechMerlin
e52930df24 [Keyboard] Add Noxary 280 (#5814)
* initial commit

* fixup script issues

* define pins used and create an appropriate LAYOUT macro

* create an appropriate keymap

* turn on backlight and bootmagic lite

* add QMK Configurator support

* fixup readme

* remove doubly defined KC_TRNS from keymap

* add support for Caps lock and Scroll lock LEDs
2019-05-07 21:39:31 -07:00
XScorpion2
60eae7335b RGB Matrix Typing Heatmap (#5786)
* RGB Matrix Typing Heatmap Effect

* Fixing file name and effect init
2019-05-07 19:17:00 -07:00
XScorpion2
af89752bff rgb_led struct conversion (aka: Per led (key) type rgb matrix effects - part 2) (#5783)
* Initial conversion of the rgb_led struct

* Converting last keyboard & updating effects to take advantage of the new structure

* New struct should not be const

* Updated docs

* Changing define ___ for no led to NO_LED

* Missed converting some keymap usages of the old struct layout
2019-05-07 16:22:46 -07:00
Chuck Lauer Vose
c7f8548d9a Add layout description to keymap.c (#5810) 2019-05-07 14:43:00 -07:00
Rainer Clasen
12e6d41202 [Split] fix split_common i2c backlight disabling (#3886)
slave backlight was always on - as get_backlight_level() doesn't
indicate if the backlight is enabled or not.

also updated the corosponding code for serial transport to stop peeking
directly at 'internal' backlight_config structure.
2019-05-07 10:45:10 -07:00
Olivier Poitrey
2d5c16dfd4 [Keymap] crkbd/keymaps/rs: add rs keymap to corne keyboard and adapt others (#5181)
Update all my keymaps to work with 40 keys. Refactor code using
Userspace.
2019-05-07 10:43:08 -07:00
kaylanm
3b13259942 Add remaining RGB light components. (#5785) 2019-05-07 06:36:40 -07:00
Chuck Lauer Vose
97b8567a1f Adding bdn9 keymap examples for company event (#5800)
* Adding bdn9 keymap examples for company event

* Simplify some code w/ tap_code16 [pr feedback]

- Also remove backslashes
- Remove xxx and ___ layer definitions
- Properly name enums
- Add newline after slack reaction
2019-05-06 22:36:21 -07:00
Drashna Jaelre
f3d5b1091d [Keymap] RGB Changes for Drashna Keyboards (#5803)
* Disable a bunch of reactive modes

* Enable rgb matrix for Corne Keyboard

* Convert CRKBD to rgb matrix

* Add Gergo keyboard layout

* Make Diablo 3 tap dance better

* Add basic support for Planck EZ

* Fix RGB Matrix stuff

* Fix keycodes for Planck EZ

* Update CRKBD OLED stuff

* Fix typo for sleep on ergodox glow

* Improve my gergo layout

* Scrolling OLED key logger!

* Change gergo layout

* Hnadle unicode keycodes if unicode is disabled

* Disable COMMAND/CONSOLE for gergo

* Fix right side control

* Re-enable LTO for all platforms

Since I got updated arm gcc binaries that no longer error out on lto

* Update formatting to match newer community standards

Poor 2 space

* Re-alight startup animation to use new HUE range

* Streamline gitlab ci scripts

* Disabled Space Cadet

* Add support for breathing table

* Enable new LTO Option

And clean up defines that will now be repeatitive

* Remove vscode settings

* Additional formatting cleanup of config.h files
2019-05-06 22:34:09 -07:00
Brendan Wrafter
7a751f1141 Add Boardwalk keymap (#5806)
* Add Boardwalk keyboard layout

* Remove backslashes
2019-05-06 22:33:41 -07:00
XScorpion2
e83e316555 [Keyboard] Enable RGBLIGHT_ANIMATIONS by default on the Zen rev2 (#5805)
* Enable RGBLIGHT_ANIMATIONS by default on the Zen rev2

* Also fixing OLED as it is upside down
2019-05-06 15:29:13 -07:00
XScorpion2
e01b2d518a [Keyboard] Sol keyboard conversion to split common (#5773)
* Split common conversion

* Updated serial and encoder pins

* Fixing default folder until r2

* Fixing oled driver on slave split common

* Fixing keymap compile errors

* Fixing oled inactivity timer on slave split common

* Hoisted oled driver task, init, & activity to keyboard.c

* Update keyboards/sol/config.h

Co-Authored-By: XScorpion2 <rcalt2vt@gmail.com>

* Remove TAPPING_FORCE_HOLD
2019-05-06 15:06:43 -07:00
skullydazed
99500243e1 Make python a required build dependency (#5784)
* Make python a required build dependency

* Add missing color

* fixup sabayon linux per @BlitzKraft
2019-05-06 10:56:34 -07:00
Konstantin Đorđević
cb1935aaff [Keymap] Update personal userspace and keymaps (now with 4 spaces!) (#5774)
* Add FnLk to Melody96 bottom row

* Update conditional in userspace makefile

Thanks @drashna

* Add F keys to Melody96 Fn layer

* Add FN_ESC alias to userspace

* Update KBD6X keymap

* Fix RGB_MATRIX_ENABLE constant name in #if

* Remove trailing \ from LAYOUT macro calls

* Set RGB mode on EEPROM reset in KBD6X

* Swap right and middle mouse buttons in KBD6X

* Rearrange RGB controls in KBD6X

* Update keycode aliases, replace CLEAR with DEL_NXT in KBD6X

Add Clear to KBD6X as RCtrl+`

* Convert code to 4 space indents

* Tweak RCTRL layer functionality

* Replace NUMPAD custom keycode with layer state logic

* Update RGB_MATRIX_ENABLE check

Co-Authored-By: vomindoraan <vomindoraan@gmail.com>
2019-05-06 08:41:45 -07:00
Drashna Jaelre
8a9c90ad78 Re-fix Mousekey Movements (#5740)
* Re-fix Mousekey Movements

After the new movement model was instroduced, it broke diagonal momement, again.  Reapplying fix from #3147 to both old and new acceleration method.

* Make diagonal mouse report checks more readable

Co-Authored-By: drashna <drashna@live.com>
2019-05-06 08:35:01 -07:00
keyhive
fbc40032e7 [Keyboard] add ut47.2 (#5788)
* adding ut47.2

adding ut47.2

* Update keyboards/ut472/ut472.c

Co-Authored-By: keyhive <42986966+keyhive@users.noreply.github.com>

* Update keyboards/ut472/rules.mk

Co-Authored-By: keyhive <42986966+keyhive@users.noreply.github.com>

* Update keyboards/ut472/ut472.c

Co-Authored-By: keyhive <42986966+keyhive@users.noreply.github.com>

* Update keyboards/ut472/rules.mk

Co-Authored-By: keyhive <42986966+keyhive@users.noreply.github.com>

* changed shift enter special keys to KC_SFTENT

changed shift enter special keys to KC_SFTENT

* Update keyboards/ut472/ut472.h

Co-Authored-By: keyhive <42986966+keyhive@users.noreply.github.com>

* Update keyboards/ut472/ut472.h

Co-Authored-By: keyhive <42986966+keyhive@users.noreply.github.com>

* Update keyboards/ut472/ut472.h

Co-Authored-By: keyhive <42986966+keyhive@users.noreply.github.com>

* Update keyboards/ut472/readme.md

Co-Authored-By: keyhive <42986966+keyhive@users.noreply.github.com>

* Update keyboards/ut472/readme.md

Co-Authored-By: keyhive <42986966+keyhive@users.noreply.github.com>

* updated for sourcing

updated for sourcing

* Update keyboards/ut472/readme.md

Co-Authored-By: keyhive <42986966+keyhive@users.noreply.github.com>

* changed flash to make

changed flash to make
2019-05-05 22:01:43 -07:00
M-AS
e96d196dc9 [Keymap] MatthewRobo Massdrop CTRL/DZ60RGB Keymaps (#5799)
* added personal CTRL keymap

* added personal dz60rgb keymap

* enabled new rgb effect

* added space cadet shift

* media player track buttons now orange

* updated keymaps with rgb setting and visual HSV setting preview

* fixed source stuff?

* added support for underglow toggle (bugged to all hell)

* everything now behaves as expected when ti comes to RGB toggles, thank god

* removed ifdefs

* changed color of MAS_CRM

* uh, whitespace
2019-05-05 21:54:41 -07:00
Andrew Kannan
c2f9e018ab [Keyboard] Add ProjectKeyboard Alice PCB to QMK (#5581)
* Update instant60 for tsangan version

* Add project alice keyboard

* remove

* Remove commented out code

* Update readme

* Add newline

* Update keyboards/projectkb/alice/readme.md

Co-Authored-By: awkannan <andrew.kannan@klaviyo.com>

* Update keyboards/projectkb/alice/halconf.h

Co-Authored-By: awkannan <andrew.kannan@klaviyo.com>

* Update keyboards/projectkb/alice/halconf.h

Co-Authored-By: awkannan <andrew.kannan@klaviyo.com>

* Fix ifdef and use helper macros

* Add reset keycode

* udpate keymap

* Add RGB Keycodes

* Styling things

* remove unused enum

* fix
2019-05-05 21:08:12 -07:00
Andrew Kannan
af22609ba5 [Keyboard] Practice65 Keyboard (#5795)
* Save p65 changes

* Save p65 changes

* Add reset

* update num leds
2019-05-05 16:58:08 -07:00
XScorpion2
e290dc5ad8 Space Cadet: Reducing unnecessary reported keypresses (#5781)
* Reducing unnecessary reported keypresses and minor docs / variable name changes

* Apply suggestions from code review

Co-Authored-By: XScorpion2 <rcalt2vt@gmail.com>
2019-05-05 16:27:02 -07:00
Martinffx
e14732be9f Add my layout for the KBD67, update readme for default layout to (#5779)
display layout.
2019-05-05 16:25:29 -07:00
omkbd
eb9ea84927 [Keybooard] Update of Ergodash Keyboard (#5772)
* Simpler coding

use SPLIT_KEYBOARD
delete rev1 (rev2→rev1)  because rev1is not sold

* delete USE_I2C = no

* Update readme.md
2019-05-05 16:19:07 -07:00
Max
63d53b0f28 config.qmk.fm support fix for westfoxtrot/aanzee (#5794)
* fixed issue with LED indicators
corrected error in info.json

* fixed issue with led indictors

* added fix for key_count to info.json for westfoxtrot/aanzee

* fix to support config.qmk.fm correctly and remove unused key from matrix for westfoxtrot/aanzee
2019-05-05 14:37:54 -07:00
kwerdenker
0213867dea Fix wrong key assigning in keymap for ISO layout (#5790) 2019-05-05 09:31:51 -07:00
Ryan Caltabiano
3a7c65b424 fix line endings 2019-05-04 10:17:46 -07:00
jotix
9f2fc1179a [Keymap] add unicode to jotix's ortho_4x12_layout (#5775)
* add unicode to jotix's ortho_4x12_layout

* suggested change #define UNICODE_SELECTED_MODES UC_LNX
2019-05-04 09:57:41 -07:00
Jez Cope
9d97e47df4 [Docs] Update Super ALT↯TAB to remove use of unregister_code16 (#5766)
The code as originally listed didn't work for me, but replacing `unregister_code16(LALT(KC_TAB));` with `unregister_code(KC_LALT);` fixes the problem and causes the macro to work as intended.

Thanks to folks on Discord for helping me figure this out.
2019-05-04 09:46:44 -07:00
Robin Hallabro-Kokko
e73587cfd0 docker_build.sh: Docker requires access to hosts devices (#5063)
* docker_build.sh: Docker requires access to hosts devices

This also runs the container interactively which allows the user to
interupt the build with Ctrl-C.

* docker_build.sh: Mount /dev via $usb_args instead
2019-05-03 17:41:39 -07:00
MechMerlin
997bafc8ec [Keyboard] Refactor S60x (#5596)
* remove files that contributed to default hex file creation

* fix up rgb pcb rules and config that previously depended on rules and config in a parent directory

* use #pragma once

* turn on backlight breathing and use #pragma once

* fix config.h and rules.mk to not depend on the parent directory

* use #pragma once

* removed keyboard info.jsons in favor of a shared one

* add in hhkb layout and shared info.json file

* fixup readme file

* remove cruft

* use bootmagic lite over yes

* fix config path and use pragma once

* commit PR fixes

* update manufacturer

* set bootloader correctly
2019-05-03 17:28:03 -07:00
MechMerlin
4c14b5832a Fix up ps2avrgb templates (#5606)
* fix up ps2avrgb templates

* set backlight enable to no as per review comments

* add back no_uart
2019-05-03 17:26:29 -07:00
Oliver Granlund
b9f060c98c [Keymap] DZ60 keymap and layout (#5474)
* init

* function layout planning

* nordic keymap v1.0

* Added latest satan layouts, updated readmes

* Cleaning code

* Renamed ISO -> iso

* Updated keymap to work better with Swedish layout

* merge conflict

* Added dz60 layout

* pr issues fixes

* removed weirdly positioned files

* code cleanup, added dz60 layout json data

* Added dz60 layout readme

* Renamed layout

* removed vscode file

* Update keyboards/dz60/dz60.h

Co-Authored-By: OlliGranlund <OlliGranlund@users.noreply.github.com>
2019-05-03 17:25:24 -07:00
zvecr
da995d2aea [Docs] Add examples to debugging docs (#5555)
* Add examples to debugging docs

* Add examples to debugging docs - review comments

* Update matrix keypress example to use uprintf
2019-05-03 17:24:07 -07:00
Konstantin Đorđević
bdc8d89e6b New keycode macro (XP) for shifted character pairs using UNICODEMAP + bug fixes and improvements (#4803)
* Expose unicode_saved_mods

* Add UNICODEMAP shift pair functionality and XS keycode

* Add XS to keycode reference documentation

* Pick pair index based on both Shift and Caps Lock state

* Add XS to Unicode feature docs

* Clean up process_unicode* headers

* Extract unicode_map index calculation into function

* Pick pair index as XOR rather than OR of Shift and Caps states

* unicode_input_start() has to be called before the unicode_map index is calculated

* Replace unicodemap_input_error() with more generic unicode_input_cancel()

* Replace register+tap+unregister with tap_code16(LCTL(LSFT(KC_U)))

* UNICODE_OSX_KEY → UNICODE_KEY_OSX, UNICODE_WINC_KEY → UNICODE_KEY_WINC

* Make keycode range checks more robust

* Fix keycode range checks for different input modes

* Add UNICODE_KEY_LNX, update docs

* QK_UNICODEMAP_SHIFT → QK_UNICODEMAP_PAIR

* XS → XP, update docs

* Tweak Unicode docs

* Use recently added MOD_MASK_SHIFT and IS_HOST_LED_ON helpers

* Update Unicode table in docs/keycodes.md

* Update Unicode docs per review comments

* Replace references to Mac OS X with macOS in Unicode docs

* As of v0.9.0, WinCompose supports all possible code points

* Expand descriptions in XP docs

* Update keycode table and cycling docs

* Further expand cycling docs
2019-05-03 09:33:00 -07:00
Drashna Jaelre
41beecfc18 Add DFU Suffix for ARM boards (#5763)
* Add DFU Suffix for ARM boards

* Blindly flash DFU SUFFIX ARGS for now

* Fix commented out check

* Fix DFU Suffix Argument check

Thank you jack!

* Update Travis CI Scripts to include dfu-util

So we can get dfu-suffix as well

* Manually add dfu-suffix package

* Use external repo for newer version of dfu-util

One that includes dfu-suffix

* Update .travis.yml

* Silence unnecessary output from dfu-suffix
2019-05-03 08:24:22 -07:00
Takeshi ISHII
29f68459a0 Fix LIB_SRC insert position (#5731)
The insertion point for `$(patsubst %.c,%.clib,$(LIB_SRC))` must be after all normal `SRC += ..` . I modified it to be so.

Because LIB_SRC and SRC are assumed to be used in pairs. Similarly, QUANTUM_LIB_SRC and QUANTUM_SRC are assumed to be used in pairs.
2019-05-03 06:20:23 -07:00
moyi4681
6a59198a42 add dz65rgb (#5756)
* add dz68rgb

* Update dz68rgb.c

* Apply suggestions from code review

Co-Authored-By: moyi4681 <moyi4681@users.noreply.github.com>

* Apply suggestions from code review

Co-Authored-By: moyi4681 <moyi4681@users.noreply.github.com>

* Apply suggestions from code review

Co-Authored-By: moyi4681 <moyi4681@users.noreply.github.com>

* Apply suggestions from code review

Co-Authored-By: moyi4681 <moyi4681@users.noreply.github.com>

* Apply suggestions from code review

Co-Authored-By: moyi4681 <moyi4681@users.noreply.github.com>

* Apply suggestions from code review

Co-Authored-By: moyi4681 <moyi4681@users.noreply.github.com>

* Apply suggestions from code review

Co-Authored-By: moyi4681 <moyi4681@users.noreply.github.com>

* Rename keyboards/dztech/dz68rgb/rules.mk to keyboards/dztech/dz65rgb/rules.mk

* Update and rename keyboards/dztech/dz68rgb/config.h to keyboards/dztech/dz65rgb/config.h

* Update and rename keyboards/dztech/dz68rgb/dz68rgb.c to keyboards/dztech/dz65rgb/dz65rgb.c

* Rename keyboards/dztech/dz68rgb/dz68rgb.h to keyboards/dztech/dz65rgb/dz65rgb.h

* Update and rename keyboards/dztech/dz68rgb/info.json to keyboards/dztech/dz65rgb/info.json

* Update readme.md

* Rename keyboards/dztech/dz68rgb/readme.md to keyboards/dztech/dz65rgb/readme.md

* Rename keyboards/dztech/dz68rgb/keymaps/default/keymap.c to keyboards/dztech/dz65rgb/keymaps/default/keymap.c

* Update dz65rgb.c

* Update readme.md

* Update keyboards/dztech/dz65rgb/keymaps/default/keymap.c

Co-Authored-By: moyi4681 <moyi4681@users.noreply.github.com>

* Update keyboards/dztech/dz65rgb/keymaps/default/keymap.c

Co-Authored-By: moyi4681 <moyi4681@users.noreply.github.com>
2019-05-03 06:19:33 -07:00
ymzcdg
36bed36cd6 getting_started_introduction.md ->zh-cn (#5767)
translate getting_started_introduction.md into Mandarin Chinese
2019-05-03 06:18:20 -07:00
ymzcdg
db440f3e75 translate the first unit(newbs) (#5753)
translate
newbs_getting_started.md
newbs_building_firmware.md
newbs_flashing.md
newbs_testing_debugging.md
newbs_best_practices.md
newbs_learn_more_resources.md
into Mandarin Chinese
2019-05-02 22:21:06 -07:00
Drashna Jaelre
7e655a207e Add option to enable LTO easily (#5674)
* Add option to enable LTO easily and disable features that cause compiling errors with LTO

* Add documentation about LTO option

* Add to show_options
2019-05-02 08:03:42 -07:00
Teng
55d37d9fbc add a new keymap of DZ60 for MacOS (#5760)
* add a new keymap of DZ60 for MacOS

* dz60:macos_64
    1. remove useless bright keys code, change to KC_PAUSE
    2. add a documentation link in the readme
2019-05-02 08:02:34 -07:00
Drashna Jaelre
27b0f8923e Change VPATH path addition order (#5754)
Specifically, to fix some edge cases, and keep the handling consistent, the userspace folder should not actually be added at the end.  Ideally, it should be added after the keymap paths, but before the keyboard's path.

This issue was discovered in #5484, and the fix created by mtei.
2019-05-02 08:01:58 -07:00
Takeshi ISHII
3da8d46a07 If RGBLIGHT_EFFECT_BREATHE_CENTER is undefined, use fixed breathe table instead of exp() and sin() (#5484)
* If RGBLIGHT_EFFECT_BREATHE_CENTER is undefined, use fixed breathe table instead of exp() and sin()

* Change rgblight breathing table size to be easily selectable.

add RGBLIGHT_BREATHE_TABLE_SIZE macro for customize breathing effect.
2019-05-02 07:59:29 -07:00
yynmt
4db31fb374 Add new keyboard KagaMidget (#5755)
* Add KagaMidget keyboard

* Update readme.md
2019-05-02 07:55:55 -07:00
Takeshi ISHII
3956b7c685 add '#define USE_SERIAL' to keyboards/mint60/config.h (#5758)
If there is no '#define USE_SERIAL', qmk configurator will give an error, so add '#define USE_SERIAL' to `mint60/config.h`。
2019-05-02 07:37:37 -07:00
Naoto Takai
de5c8d86b4 Add support for Nomu30 (#5759) 2019-05-02 07:33:04 -07:00
zvecr
7e68faa336 [Keyboard] Plaid - Add compatibility for LAYOUTS = planck_mit planck_grid (#5591)
* Add compatibility for LAYOUTS = planck_mit planck_grid

* Add compatibility for LAYOUTS = ortho_4x12

* Remove planck_grid community support from Plaid
2019-05-01 21:50:16 -07:00
wanleg
588b2329cb Wanleg tuneup / additions (#5752)
* change split keyboard tapping term in userspace

* fix 5x15 layout numpad movement

* minor changes for Nori setup

* edit based on 40percentclub refactor change

* fix gherkin due to refactor

* kbd6x wanleg keymap

* kbd6x edits

* kbd6x tweak

* fn / backlight layer

* fix jj40 rgb hex issue

* wanleg gherkin lighting

* 4x12 layout cleanup

* move kbd6x to new kbdfans directory

* minor edit related to new kbdfans directory

* mac layout for kbd6x

* gherkin flip option

* tweak tapping term on lets_split

* edit for keebio board coalescing

* update user readme with git hints

* wanleg miniaxe keymap

* testing Permissive Hold instead of Mod Tap Interrupt

* wiring names

* kbd6x keymap

* change default backlight behaviour on kbd6x

* userspace underglow

* userspace underglow

* underglow tweaks

* user readme update

* more layer underglow tweaks

* fix userspace for non-underglow-enabled boards

* readme edits

* readme edits

* readme edits

* readme edits

* Update readme.md

* Update readme.md

* readme edits

* readme edits

* update keymap picture
2019-05-01 20:29:00 -07:00
roguepullrequest
6fa88d981c Roguepullrequest planck layout update (#5751)
* First publish of roguepullreqest programmer dvorak planck layout

* Removed junk line

* Update keyboards/planck/keymaps/roguepullrequest/keymap.c

Co-Authored-By: roguepullrequest <roguepullrequest@users.noreply.github.com>

* Update keyboards/planck/keymaps/roguepullrequest/keymap.c

Co-Authored-By: roguepullrequest <roguepullrequest@users.noreply.github.com>

* Update keyboards/planck/keymaps/roguepullrequest/keymap.c

Co-Authored-By: roguepullrequest <roguepullrequest@users.noreply.github.com>

* Update keyboards/planck/keymaps/roguepullrequest/keymap.c

Co-Authored-By: roguepullrequest <roguepullrequest@users.noreply.github.com>

* Removed layer songs

Removed layer songs for cleanliness. Will use them later.

* Update keyboards/planck/keymaps/roguepullrequest/readme.md

Co-Authored-By: roguepullrequest <roguepullrequest@users.noreply.github.com>

* Made basic LSHIFT framework but is not working. Listed other tapdances.

* Got LSHIFT to work

* Added working RSHIFT

* Added working TD_S

* Cleaned up LEFT and RIGHT [ { ] } on the UPPER layer.

* Cleaned up layout.

* Reenabled audio space is not needed right now.

* Added tap dances and layout image

* Started dactylmanuform layout

* Revert "Started dactylmanuform layout"

This reverts commit 5ef48e4a23.
2019-05-01 20:27:54 -07:00
XScorpion2
12a07dae33 Adjusted the linear led table and hsv_to_rgb to better handle 255 hue (#5739)
* Adjusted the linear led table and hsv_to_rgb to better handle 255 hue

* small math adjustments to better handle specific uint8_t rounding and overflows
2019-05-01 18:59:01 -07:00
XScorpion2
3235c8527d Simple fix for selecting which tracked key press to work off of for simple reactive effects (#5745) 2019-05-01 11:36:50 -07:00
XScorpion2
22ba36a4d8 rgblight 255 hue (#5547) 2019-05-01 08:02:02 -07:00
XScorpion2
50bc2dbe77 Fixing incorrect usage of RGBLED_NUM in ws2812 driver when used with RGB Matrix (#5744) 2019-05-01 05:48:33 -07:00
Josh Hinnebusch
61ce41ae13 [Keyboard] Update hineybush keyboard projects (#5554)
* Add H87a keymap and info

* Create readme.md

* Add h87a .json for kbfirmware.com use

* Update readme.md

* Update readme.md

* Update h87a files

* Delete Makefile

* Update readme.md

* Delete desktop.ini

* update files to match new QMK framework

* Update files to match new QMK structure

* Update files to match new QMK structure

* add layout name information

* Add info.json

* update keymap to support layout_all

* update keymap to support layout_all

* update rules.mk to fix filesize

* Update readme.md

* Update config.h

* Update readme.md

* Update config.h

* Update config.h

Add "define CONFIG_H and include "config_common.h" back to file

* update config.h to include RGB turnoff when PC goes to sleep

* update info.json

* update info.json

* Update readme.md

Add project link

* Update readme.md

* refactor hineybush projects into single folder. update hineyg80 to modern code

* updated layout file to reflect new keymap changes

* actually updated all layout names this time, verified make

* Update keyboards/hineybush/h87a/h87a.h

Co-Authored-By: hineybush <josh@hinnebus.ch>

* Update keyboards/hineybush/h87a/keymaps/default/config.h

Co-Authored-By: hineybush <josh@hinnebus.ch>

* Update keyboards/hineybush/h87a/readme.md

Co-Authored-By: hineybush <josh@hinnebus.ch>

* edit based on PR edit requests

* update hiney80 files to avoid confusion

* update hineyg80.h to reflect matrix

* Update keyboards/hineybush/hineyg80/info.json

Co-Authored-By: hineybush <josh@hinnebus.ch>

* Update keyboards/hineybush/hineyg80/info.json

Co-Authored-By: hineybush <josh@hinnebus.ch>

* Update keyboards/hineybush/hineyg80/info.json

Co-Authored-By: hineybush <josh@hinnebus.ch>

* Update keyboards/hineybush/h87a/info.json

Co-Authored-By: hineybush <josh@hinnebus.ch>

* Update keyboards/hineybush/h87a/keymaps/default/config.h

Co-Authored-By: hineybush <josh@hinnebus.ch>

* Update keyboards/hineybush/hineyg80/keymaps/wkl/config.h

Co-Authored-By: hineybush <josh@hinnebus.ch>

* Update keyboards/hineybush/h87a/keymaps/default/config.h

Co-Authored-By: hineybush <josh@hinnebus.ch>

* Update keyboards/hineybush/hineyg80/readme.md

Co-Authored-By: hineybush <josh@hinnebus.ch>

* Update keyboards/hineybush/hineyg80/readme.md

Co-Authored-By: hineybush <josh@hinnebus.ch>

* Update keyboards/hineybush/h87a/readme.md

Co-Authored-By: hineybush <josh@hinnebus.ch>

* Update keyboards/hineybush/h87a/readme.md

Co-Authored-By: hineybush <josh@hinnebus.ch>

* Update keyboards/hineybush/h87a/keymaps/default/config.h

Co-Authored-By: hineybush <josh@hinnebus.ch>

* Update keyboards/hineybush/h87a/keymaps/wkl/config.h

Co-Authored-By: hineybush <josh@hinnebus.ch>

* Update keyboards/hineybush/h87a/keymaps/wkl/config.h

Co-Authored-By: hineybush <josh@hinnebus.ch>

* Update keyboards/hineybush/hineyg80/keymaps/default/config.h

Co-Authored-By: hineybush <josh@hinnebus.ch>

* Update keyboards/hineybush/h87a/keymaps/wkl/config.h

Co-Authored-By: hineybush <josh@hinnebus.ch>

* Update keyboards/hineybush/h87a/readme.md

Co-Authored-By: hineybush <josh@hinnebus.ch>

* Update keyboards/hineybush/h87a/keymaps/wkl/config.h

Co-Authored-By: hineybush <josh@hinnebus.ch>

* Update keyboards/hineybush/h87a/readme.md

Co-Authored-By: hineybush <josh@hinnebus.ch>

* Update keyboards/hineybush/hineyg80/hineyg80.c

Co-Authored-By: hineybush <josh@hinnebus.ch>

* update hineyg80 config.h

* Update keyboards/hineybush/h87a/keymaps/wkl/keymap.c

Co-Authored-By: hineybush <josh@hinnebus.ch>

* Update keyboards/hineybush/h87a/keymaps/wkl/keymap.c

Co-Authored-By: hineybush <josh@hinnebus.ch>

* Update keyboards/hineybush/h87a/keymaps/wkl/keymap.c

Co-Authored-By: hineybush <josh@hinnebus.ch>

* Update keyboards/hineybush/h87a/keymaps/wkl/keymap.c

Co-Authored-By: hineybush <josh@hinnebus.ch>

* Update keyboards/hineybush/hineyg80/hineyg80.c

Co-Authored-By: hineybush <josh@hinnebus.ch>

* Update keyboards/hineybush/hineyg80/hineyg80.c

Co-Authored-By: hineybush <josh@hinnebus.ch>

* Update keyboards/hineybush/hineyg80/hineyg80.c

Co-Authored-By: hineybush <josh@hinnebus.ch>

* Update keyboards/hineybush/h87a/keymaps/wkl/keymap.c

Co-Authored-By: hineybush <josh@hinnebus.ch>

* Update keyboards/hineybush/h87a/keymaps/wkl/keymap.c

Co-Authored-By: hineybush <josh@hinnebus.ch>

* Update keyboards/hineybush/h87a/keymaps/wkl/keymap.c

Co-Authored-By: hineybush <josh@hinnebus.ch>

* Update keyboards/hineybush/h87a/keymaps/wkl/keymap.c

Co-Authored-By: hineybush <josh@hinnebus.ch>

* Update keyboards/hineybush/hineyg80/hineyg80.c

Co-Authored-By: hineybush <josh@hinnebus.ch>

* Update keyboards/hineybush/hineyg80/hineyg80.c

Co-Authored-By: hineybush <josh@hinnebus.ch>

* Update keyboards/hineybush/hineyg80/hineyg80.c

Co-Authored-By: hineybush <josh@hinnebus.ch>

* Update keyboards/hineybush/hineyg80/hineyg80.c

Co-Authored-By: hineybush <josh@hinnebus.ch>

* Update keyboards/hineybush/hineyg80/hineyg80.c

Co-Authored-By: hineybush <josh@hinnebus.ch>

* Update keyboards/hineybush/hineyg80/hineyg80.c

Co-Authored-By: hineybush <josh@hinnebus.ch>

* Update keyboards/hineybush/hineyg80/config.h

Co-Authored-By: hineybush <josh@hinnebus.ch>

* Update keyboards/hineybush/hineyg80/config.h

Co-Authored-By: hineybush <josh@hinnebus.ch>

* Update keyboards/hineybush/hineyg80/config.h

Co-Authored-By: hineybush <josh@hinnebus.ch>
2019-04-30 22:35:49 -07:00
fauxpark
e4b5c44262 [Docs] Use HTTPS for qmk.fm link (#5506)
* Use HTTPS for qmk.fm link

* Fix the rest of the HTTP links
2019-04-30 21:54:52 -07:00
Jan Christoph Ebersbach
074be4fe5e [Keyboard] Signum3.0 generate json keymap (#5688)
* Remove dependency on sortedcontainers

* Sort dictionary on output

* Externalize writing of keymap.c into function

- serialize layers into one flat list

* Add encoding

* Generate JSON keymap in addition to keymap.c

* Replace XXXXXX with KC_NO
2019-04-30 21:53:29 -07:00
mikethetiger
670ff2d19f [Keymap] Made adjustment to my Preonic keymap (#5733)
* Added my Preonic keymap

* Update keyboards/preonic/keymaps/mikethetiger/keymap.c

Co-Authored-By: mikethetiger <30720424+mikethetiger@users.noreply.github.com>

* Update keyboards/preonic/keymaps/mikethetiger/keymap.c

Co-Authored-By: mikethetiger <30720424+mikethetiger@users.noreply.github.com>

* Added my Preonic keymap

* Added my Preonic keymap
2019-04-30 21:35:21 -07:00
XScorpion2
e95283b545 [Keymap] Xulkal keymap tweeks (#5746)
* Minor keymap tweeks and more oled data

* Update keymap.c
2019-04-30 20:55:01 -07:00
Benjamin
8725197ad6 [Keyboard] Adds support for BM16S keyboard (#5659)
* Added support for BM16S keyboard.

* Update keyboards/bm16s/bm16s.h

Co-Authored-By: bontakun <ben@bontakun.net>

* Update keyboards/bm16s/bm16s.h

Co-Authored-By: bontakun <ben@bontakun.net>

* Cleaned up a bunch of unneeded stuff.

* Made layout name match.

* Changed rules file to have correct bootloader and indention. Updated readme to reflect availability on krepublic. Updated keymap to have more obvious RGB controls.

* Removed unnecessary file.

* Fixed grammar in readme.

Co-Authored-By: bontakun <ben@bontakun.net>

* Migrated to autogenerated layout config, without issue.

* Renamed LAYOUT to match community standards.
2019-04-30 19:29:51 -07:00
Ryan Caltabiano
d67b99ff3c Added OLED Driver to the summary 2019-04-30 18:04:11 -07:00
Daniel Peregolise
7c2a7ab817 [Keyboard] doro67 readme clarification (#5736)
* readme clarification

* Apply suggestions from code review

verbiage updates

Co-Authored-By: dperegolise <danielperegolise@gmail.com>

* mechmerlin suggested verbiage
2019-04-30 12:11:57 -07:00
Drashna Jaelre
5b9667a4bf Ignore VSCode ipsh folder (#5741) 2019-04-30 09:18:11 -07:00
Jeremy Bernhardt
0cde880747 🐮🥛 Butterstick Support 🥛🐮 (#5742)
* Working on chording

* Working on chording

* Got layouts in order

* Initial Georgi support

* forgot to add keymaps

* Updated readme

* Update keyboards/georgi/keymaps/template/readme.md

Co-Authored-By: germ <jeremythegeek@gmail.com>

* Update keyboards/georgi/georgi.h

Co-Authored-By: germ <jeremythegeek@gmail.com>

* Update keyboards/georgi/keymaps/default/keymap.c

Co-Authored-By: germ <jeremythegeek@gmail.com>

* Update keyboards/georgi/keymaps/default/keymap.c

Co-Authored-By: germ <jeremythegeek@gmail.com>

* Update keyboards/georgi/rules.mk

Co-Authored-By: germ <jeremythegeek@gmail.com>

* Update keyboards/georgi/rules.mk

Co-Authored-By: germ <jeremythegeek@gmail.com>

* Update keyboards/georgi/matrix.c

Co-Authored-By: germ <jeremythegeek@gmail.com>

* Update keyboards/georgi/georgi.c

Co-Authored-By: germ <jeremythegeek@gmail.com>

* Update keyboards/georgi/georgi.c

Co-Authored-By: germ <jeremythegeek@gmail.com>

* Update keyboards/georgi/rules.mk

Co-Authored-By: germ <jeremythegeek@gmail.com>

* Update keyboards/georgi/keymaps/default/keymap.c

Co-Authored-By: germ <jeremythegeek@gmail.com>

* Update keyboards/georgi/keymaps/template/keymap.c

Co-Authored-By: germ <jeremythegeek@gmail.com>

* Update keyboards/georgi/matrix.c

Co-Authored-By: germ <jeremythegeek@gmail.com>

* Disabled features, updated info

* Update keyboards/georgi/config.h

Co-Authored-By: germ <jeremythegeek@gmail.com>

* Update keyboards/georgi/config.h

Co-Authored-By: germ <jeremythegeek@gmail.com>

* Fixed info.json

* Split the number button and fixed gaming mode.

* started work on history feature

* Working history/multikeyfuckery

* type

* inital code reduction refactor

* Got multikey patched up, optimizing for size

* Forgot to remove stuff

* fixed key repeat

* Key repeat added.

* Symshift locking

* Midchord Sym shenanigans.

* Added only QWERTY mode

* Split out header

* Added stickybits, minimal layour

* Fixing user layout

* Whitespace fixing

* Fixing Version name

* Starting work on BS

* Fixing default layout and rules

* Updated Butter fw

* Copy-paste rebase

* more fixing from merge. Fuck

* Forgot to roll version

* Added revisions as per @mechmerlin
2019-04-30 08:28:01 -07:00
motform
b09dc19d32 [Keymap] Add motform planck keymap (swedish colemak) (#5734)
* [Keymap] Add motform planck keymap (swedish colemak)

* Add readme and remove unused enums (thanks @drasha!)
2019-04-30 08:25:31 -07:00
XScorpion2
bb208f3e3b Implement kb function for rgb matrix to led lookup (#5738) 2019-04-30 07:55:53 -07:00
Jan Christoph Ebersbach
483ad4e3e0 [Keyboard] Signum 3.0 Fix key order in layout (#5687)
* Fix key order in layout

* Reduce keyboard dimensions

* Reduce space around keys
2019-04-29 22:06:23 -07:00
Jan Christoph Ebersbach
4c2453aa1b [Keyboard] Signum3.0 remove sortedcontainers (#5679)
* Remove dependency on sortedcontainers

* Sort dictionary on output
2019-04-29 21:35:34 -07:00
XScorpion2
c745d9b82e Simple extended space cadet (#5277)
* Simplifying and Extending Space Cadet to work on Ctrl and Alt keys

* PR Review feedback

* Reverting back to keycodes
2019-04-29 20:21:46 -07:00
XScorpion2
7d4ae3e66e Removed forced in lining for lib8tion functions (#5670) 2019-04-29 17:45:42 -07:00
Alec Geatches
75d72c221d Change lib8tion library to be usable in user keymaps (#5598)
* Move lib8tion header-defined constant into implementation file, add to build

* Move b_m16_interleave initializtion to lib8tion.c, change build to include lib8tion.c in QUANTUM_LIB_SRC

* Remove left-over whitespace

* Move lib8tion include by RGB_MATRIX_ENABLE code in makefile

* Revert build changes and change lib8tion b_m16_interleave constant to static
2019-04-29 17:44:36 -07:00
Jeremy Bernhardt
507805cd10 [Keyboard] Fixing drag-and-drop (#5728)
* Fixing drag-and-drop

* Forgot to rtfm and do a full build. Added colemak

* What
2019-04-29 17:29:00 -07:00
David Dai
e77e46f4bf [Keyboard] Adding ortho_4x12 & planck_mit layouts for KBD4X (#5729)
* Adding ortho_4x12 & planck_mit layouts for KBD4X.

* Adding LAYOUT_kc_ortho_4x12 macro to KBD4x.

* Turn off console for KBD4X so firmware size falls within limit.
2019-04-29 17:27:49 -07:00
noroadsleft
1f0a2d5550 [Keyboard] Minor fixes for Baguette (#5737)
* Fix Baguette ISO layout in QMK Configurator

Corrected the position of the ISO Enter key.

* Fix readme markdown

Was missing a line break.
2019-04-29 17:23:01 -07:00
XScorpion2
a7113c8ed0 Updated rgb_led struct field modifier to flags (#5619)
Updated effects to test led flags
Updated massdrop to use new flags field for led toggle
2019-04-29 15:18:50 -07:00
Daniel Prilik
1d784f0f95 RGB Matrix: Custom effects on a kb/user level (#5338)
* Revamped custom effects approach

See docs for example usage

* push-up RGB Matrix default mode

Override default effect using RGB_MATRIX_STARTUP_MODE.
Useful on boards without EEPROM support
(*cough* Massdrop ALT/CTRL *cough*)

* update docs
2019-04-29 14:48:41 -07:00
noroadsleft
e337bb82a3 Fix Planck and Preonic builds (#5658)
* Planck: Copy contents of Planck rules.mk to each revision

* Planck: Delete Planck rules.mk

* Planck: Concatenate duplicate rules

Concatenate rules that are set and then overridden into one setting.

* Preonic: Copy contents of Preonic rules.mk to each revision

* Preonic: Delete Preonic rules.mk

* Preonic: Concatenate duplicate rules

Concatenate rules that are set and then overridden into one setting.

* Planck: Delete non-specific Bootloader settings from revs. 1 and 2

Deleted BOOTLOADER setting code block, as the checks were only valid for revs. 3-5 and the Planck Light.

Neither Planck rev1 or rev2 set the bootloader via rules.mk, so there's no setting of BOOTLOADER in their rules.mk files.

* Preonic: Fix BOOTLOADER settings code blocks

* Preonic: delete extra blank lines from rules.mk files

* Preonic: delete AVR-type hardware config blocks from rev3

* Update Planck and Preonic readme files

- update Hardware Supported
- update/add Install Examples
- update Docs paragraph

* Enable Bootmagic Lite where it is disabled

Enabled Bootmagic Lite for:

- Planck Light
- Planck revs. 1-5
- Preonic revs. 1 and 2

* Remove `planck_grid` from LAYOUTS rule for all Planck revisions

Community has landed on `ortho_4x12`, which is already set; `planck_grid` is redundant.
2019-04-29 11:04:56 -07:00
loChris
6806398246 [Keymap] dz60 keymap w/ hhkb-esque default layer (#5708)
* hello world

* Update keyboards/dz60/keymaps/zepol_layout/keymap.c

Co-Authored-By: loChris <44450518+loChris@users.noreply.github.com>
2019-04-29 09:34:43 -07:00
Priyadi Iman Nurcahyo
36e950a13f [Keymap] Added compatibility for Planck rev6 (#5706)
* Update code for compatibility with latest QMK

* Added compatibility with Planck rev6

* use wait_ms instead of _delay_ms

* removed unnecessary rules

* disable audio on rev4 only
2019-04-29 09:33:13 -07:00
Andrew Kannan
b23c3b0fd6 [Keyboard] Satisfaction75 i2c fix and VIA layout (#5726) 2019-04-27 20:35:31 -07:00
fauxpark
53c51f1d16 A better new_project.sh (#5191)
* A better new_project.sh

* Fix docstrings

* Use single quotes for anything not shown to user

* Missed this docstring

* Simplify get_git_username()

Thanks @vomindoraan

* chmod +x

* Add docstring for print_error()

* Break up git username call into multiple lines

* Use with statement here

* Conform to PEP 8 even more

* Turn it back into a shell script

* chmod +x again

* Update docs to reflect new keyboard generator usage

* Tweak wording slightly

* Trim trailing whitespace

* Don't actually need to escape the newlines here

* As I suspected, you can pass shift a number

* Prepend ./ to match the other code block

* Minor syntax tweaks

* The username token has changed

* Replace name in the readme too

* Make some reasonable assumptions about the presence of Git
2019-04-27 16:42:16 -07:00
fauxpark
c3be0520c4 Fix sendstring "#" producing "£" instead (#5724) 2019-04-27 11:04:28 -07:00
Wilba
0250cad420 [Keyboard] Added WT69-A PCB (#5721)
* Added WT69-A

* Tweaked some things before PR

* Update keyboards/wilba_tech/wt69_a/info.json

Co-Authored-By: Wilba6582 <Jason.S.Williams@gmail.com>

* Update keyboards/wilba_tech/wt69_a/readme.md

Co-Authored-By: Wilba6582 <Jason.S.Williams@gmail.com>

* Update keyboards/wilba_tech/wt69_a/wt69_a.h

Co-Authored-By: Wilba6582 <Jason.S.Williams@gmail.com>

* Update keyboards/wilba_tech/wt69_a/readme.md

Co-Authored-By: Wilba6582 <Jason.S.Williams@gmail.com>

* PR fixes

* Fixed readme.md

* Fixed keymaps
2019-04-27 11:03:36 -07:00
Jonathan Rascher
27cff473e0 [Keymap] Fix typo and function layer image for Quefrency (#5719) 2019-04-27 11:01:39 -07:00
Jonathan Rascher
e2d141582c [Keymap] Initial keyboard layout for KBD67 (#5720) 2019-04-26 23:55:58 -07:00
Jonathan Rascher
777e8be80a [Keymap] New keymap for Quefrency 65% with split backspace, RGB, media keys, mouse keys (#5717)
* Add initial keyboard layout for Quefrency

* Add RGB config and keybindings for Quefrency

* Move Quefrency wheel keys to more convenient place

* Actually switch from serial to I2C

Commit 64708c6 updated the comment, not the #define. D'oh!
2019-04-26 20:48:26 -07:00
Drashna Jaelre
8faee5c9f6 [Keyboard] Update Gergo to use newer Ergodox Matrix code (#5703)
* [Keyboard] Update Gergo to use newer Ergodox Matrix code

And update layout macros to be correct

* Almost forgot the json file

* Remove board specific defines for i2c timeout
2019-04-26 17:24:00 -07:00
MechMerlin
ffd10d4116 [Keyboard] Eagle/Viper V2 Cleanups (#5709)
* cleanup matrix of unused row and column, and add more documentation

* update matrix notes

* update readmes

* update readmes

* fix comments E2 to E3
2019-04-26 11:21:40 -07:00
Drashna Jaelre
90cd383d46 Fix wakeup function on ChibiOS (#5707)
Somebody was a very, very bad boy, and did a poor job of copy-pasting
2019-04-26 11:03:51 -07:00
jotix
6caaf69357 jotix ortho_4x12 keymap tweakings (#5715) 2019-04-26 11:02:19 -07:00
noroadsleft
f0599542ea QMK Configurator support for the emptystring studio NQG (#5711)
* NQG Configurator support

* Fix line break in readme file
2019-04-26 06:55:27 -07:00
moyi4681
5c302fad21 Update rules.mk (#5710) 2019-04-26 06:54:44 -07:00
kit-bto
4322c71771 [Keyboard] Add a new keyboard ADKB96 (#5685)
* New Keyboard ADKB96 http://bit-trade-one.co.jp/selfmadekb/adkb96/

* New Keyboard ADKB96 http://bit-trade-one.co.jp/selfmadekb/adkb96/

* Update Readme.md

* Update Readme.md

* Update Readme.md

* Update Readme.md

* Update Readme.md

* Update Readme.md

* Update Readme.md

* Rename Readme.md to readme.md

* Update keyboards/adkb96/adkb96.h

Co-Authored-By: kit-bto <42862131+kit-bto@users.noreply.github.com>

* Update readme.md

* Update readme.md

* Update keyboards/adkb96/adkb96.h

Co-Authored-By: kit-bto <42862131+kit-bto@users.noreply.github.com>

* Update keyboards/adkb96/adkb96.h

Co-Authored-By: kit-bto <42862131+kit-bto@users.noreply.github.com>

* Update keyboards/adkb96/config.h

Co-Authored-By: kit-bto <42862131+kit-bto@users.noreply.github.com>

* Update keyboards/adkb96/config.h

Co-Authored-By: kit-bto <42862131+kit-bto@users.noreply.github.com>

* Update keyboards/adkb96/config.h

Co-Authored-By: kit-bto <42862131+kit-bto@users.noreply.github.com>

* Update keymap.c

* Update keyboards/adkb96/rev1/config.h

Co-Authored-By: kit-bto <42862131+kit-bto@users.noreply.github.com>

* Update keyboards/adkb96/rev1/config.h

Co-Authored-By: kit-bto <42862131+kit-bto@users.noreply.github.com>

* Update config.h

* Update keyboards/adkb96/rev1/config.h

Co-Authored-By: kit-bto <42862131+kit-bto@users.noreply.github.com>

* Update keyboards/adkb96/rev1/rev1.h

Co-Authored-By: kit-bto <42862131+kit-bto@users.noreply.github.com>

* Update keyboards/adkb96/rev1/rev1.h

Co-Authored-By: kit-bto <42862131+kit-bto@users.noreply.github.com>

* Update keyboards/adkb96/rev1/rev1.h

Co-Authored-By: kit-bto <42862131+kit-bto@users.noreply.github.com>

* Update rules.mk

* Delete rules.mk

* Update rules.mk

* Update keyboards/adkb96/rules.mk

Co-Authored-By: kit-bto <42862131+kit-bto@users.noreply.github.com>

* Update keyboards/adkb96/rules.mk

Co-Authored-By: kit-bto <42862131+kit-bto@users.noreply.github.com>

* Update keyboards/adkb96/rev1/config.h

Co-Authored-By: kit-bto <42862131+kit-bto@users.noreply.github.com>

* Update config.h

* Update rules.mk

* Update config.h

* Delete i2c.c

* Delete i2c.h

* Delete matrix.c

* Delete serial.c

* Delete serial.h

* Delete split_util.c

* Delete split_util.h

* Update keymap.c

* Update keymap.c

* Update keymap.c

* Update keymap.c

* Update rev1.c

* Update keyboards/adkb96/rev1/config.h

Co-Authored-By: kit-bto <42862131+kit-bto@users.noreply.github.com>

* Update keyboards/adkb96/rules.mk

Co-Authored-By: kit-bto <42862131+kit-bto@users.noreply.github.com>

* Update rev1.h
2019-04-25 23:11:21 -07:00
skullY
9c98fef4f6 test commit 2019-04-25 10:29:12 -07:00
mtei
9f8c8c53a5 add RGBLIGHT_SPLIT_SET_CHANGE_MODEHSVS; to rgblight_update_dword() 2019-04-24 12:52:15 -07:00
mtei
5312131d35 add RGBLIGHT_SPLIT_SET_CHANGE_MODEHSVS; to eeconfig_update_rgblight_default() 2019-04-24 12:52:15 -07:00
zvecr
e6f4173aec Refactor cospad to current standards and enable support for backlight keycodes (#5582) 2019-04-24 11:13:07 -07:00
Callum Oakley
eda924d7dc [Keymap] update (mouse emulation, rev 6 compatibility) (#5696)
* mess with mouse emulation some more

* reverse scrolling

* mouse speed 20

* ndash and £ on symbol layer

* rev6 compatibility
2019-04-23 19:31:42 -07:00
Bob
dafdb5f9ae [Keyboard] fix project zen rev1 bootloader declaration (#5695) 2019-04-23 19:29:54 -07:00
Rockman18
479baf98e0 [FIX] Misspelled RGB_YELLOW (#5692) 2019-04-23 19:27:29 -07:00
Jan Christoph Ebersbach
978074e417 [Keymap] Fix broken Shift-Insert binding (#5689) 2019-04-23 19:26:49 -07:00
MechMerlin
703699b81f [Keyboard] forgot to omit k05 from the electrical matrix in hhkb layout (#5684) 2019-04-23 19:11:18 -07:00
Florian Didron
d4a5402aeb [Keyboard] Fix red an green leds location (#5698) 2019-04-23 19:10:28 -07:00
ymzcdg
7ae2ded590 Translate docs into Chinese (#5693)
* Docs translate

Translate some docs to  Standard Chinese for Chinese Developers.

* fix translate

fix translate
2019-04-23 12:37:20 -07:00
MechMerlin
d48a5b29d7 [Keymap] Fix my userspace RGB bug (#5686)
* fix bug that enabled RGBLIGHT_ENABLE on all my boards regardless if it was supported or not

* update changelog with new changes for 0.2.2
2019-04-22 21:52:05 -07:00
ishtob
ce8fb1eab9 Boston meetup 2019 (#5611)
* Add boston_meetup folder for community meetup macropads

* Modify OLED indicators to match macropad

* PR cleanup

* Spelling fix

Co-Authored-By: ishtob <ishtob@gmail.com>

* convert custom matrix to standard matrix defines

* refactor layer define with enum

* Remove un-used files

* remove "\" in keymap
2019-04-22 20:26:51 -07:00
Drashna Jaelre
a2cec0594b [Keymap] Update to Drashna Keymaps (#5594)
* Start to standardize macro timer

* Update Fractal layout

Specifically, limit the RGB Lighting, since it's too many for the power, and only have the KITT annimation on the front

* Update Iris keymap to use I2C for transport

* Remove TAP_CODE_DELAY from keyboard in favor of global setting

* Remove Woodpad

Since it\'s no longer in my possession

* Only enable LTO on AVR boards

* Run matrix_scans while doing startup light

* Run matrix_scan to get split keyboard code synced properly

* Fix rgb mode

* Remove custom debouncing settings

* Make RGB Light Startup Animation optional

* Fix opt def

* Remove extra tap code delay value

* Fix references to keebio boards

* Add support for LP Iris keyboard

* Add backlight code

* Make startup animation optional

* Update gitlab ci script

* Remove port declaration

* Revert avrgcc changes to gitlab ci file

* Don't re-set mods

* Remove MACRO_TIMER define

* Add custom name for crkbd

* Add name for Prime M pad

* Add names for ortho 4x12 boards

* Add some additional handling for rgb init

* Change thumb clusters on ergodox

* Switch Orthodox to I2C

* Fix Space in ergodox keymap

* Use OSL for ergodox layout

* Ugh, can't find a good layout

* Fix typo

* Fix up animation startup

* Cries in AVR

* Fix makefiles for ergodox ez boards

* Add support for "secret songs" in my userspace

* Reset debounce to 5ms for Ergodox EZ

* Fix gitlab CI yaml file

* More crying in AVR

* Cannot use rgb light and rgb matrix at the same time due to the WS2812 rgb matrix PR until the "Coexistance" PR is merged

* Update ODox for split common and i2c

* Add split config

* Impement Split code

* Add support for xscorpion OLED code

* Add OLED display config

* Fix OLED screen font

* Get OLED set up in vertical mode

* Remove old OLED code

* add per key support for crkbd

* Fix split changes

* RGB Tweeaks

* More OLED tweaks

* Fix rotation stuff

* Fix more OLED stuff

* Remove custom Debounce from Ergodox layout since it's no longer needed
2019-04-22 11:55:55 -07:00
Takeshi ISHII
6d73fe1277 fix LIB_SRC and QUANTUM_LIB_SRC for ARM (#5623)
* fix LIB_SRC and QUANTUM_LIB_SRC for ARM(chibios)

* remove ARFLAGS

* tmk_core/arm_atsam.mk:AR: remove 'rcs'
2019-04-22 11:20:13 -07:00
M-AS
bb52119a6d RGB Matrix Animations: Three/six new reactive effects (wide, cross, nexus) (#5602)
* added 3 new RGB_Matrix effects

* made cross effect behavior smoother

* removed dead code

* added effect descriptions
2019-04-22 08:37:40 -07:00
Brice Figureau
b61baf4281 Fix #3566 use an hardware timer for software PWM stability (#3615)
With my XD60, I noticed that when typing the backlight was flickering.

The XD60 doesn't have the backlight wired to a hardware PWM pin.
I assumed it was a timing issue in the matrix scan that made the PWM
lit the LED a bit too longer. I verified it because the more keys that
were pressed, the more lighting I observed.

This patch makes the software PWM be called during CPU interruptions.
It works almost like the hardware PWM, except instead of using
the CPU waveform generation, the CPU will fire interruption
when the LEDs need be turned on or off.

Using the same timer system as for hardware PWM, when the counter
will reach OCRxx (the current backlight level), an Output Compare
match interrupt will be fired and we'll turn the LEDs off.
When the counter reaches its maximum value, an overflow interrupt
will be triggered in which we turn the LEDs on.
This way we replicate the hardware backlight PWM duty cycle.

This gives a better time stability of the PWM computation than pure
software PWM, leading to a flicker free backlight.

Since this is reusing the hardware PWM code, software PWM also supports
backlight breathing.

Note that if timer1 is used for audio, backlight will use timer3, and if
timer3 is used for audio backlight will use timer1.
If both timers are used for audio, then this feature is disabled and we
revert to the matrix scan based PWM computation.

Signed-off-by: Brice Figureau <brice@daysofwonder.com>
2019-04-22 08:34:13 -07:00
Harshit Goel
c28a432112 added info.json for ymd96 (#4982)
* added info.json for ymd96

* fix layout for keymap_custom macrom, correct info.json for default layout

* add info layout for iso

* add info layout for iso

* align layout name, added maintainer username

* layout case fix

* layout case fix

* fix overlapping keys

* match layouts to keymaps.
2019-04-22 08:28:17 -07:00
Erovia
066818f5f9 Define RGB colors (#5300)
* Define RGB colors

Define RGB colors and pass them to the rgblight functions, instead of
defining multiple macros.

* Add new color definitions support for RGB Matrix

* Add/clarify info about new color definitions in Docs

* Add deprecation warning banner to rgblight_list.h
2019-04-22 08:26:41 -07:00
Drashna Jaelre
c7583d181a Update handwired/frenchdev keyboard (#5443) 2019-04-22 08:25:21 -07:00
Jason Koh
76e78e8ca1 Atreus rules.mk and readme (#5678)
* Update rules and readme to reflect new make usage.

* Minor edit.

* Minor edit.
2019-04-22 08:15:56 -07:00
XScorpion2
4ecaa25f3e forgot to update the define usage when 90 degree rotation was moved to a runtime switch (#5676) 2019-04-22 08:14:57 -07:00
MechMerlin
81d8e6ef3e [Keyboard] Doro67 RGB PCB (#5677)
* initial commit

* get rid of some of the vanilla code

* set up matrix and pins

* Create LAYOUT macro and an appropriate keymap

* support for caps lock LED

* add some documentation to the doro67 parent readme

* align the language used in the several readme files

* initial commit

* get rid of some of the vanilla code

* set up matrix and pins

* Create LAYOUT macro and an appropriate keymap

* support for caps lock LED

* add some documentation to the doro67 parent readme

* align the language used in the several readme files

* Use RGB Matrix and fix enter key bug

* fix formatting

* remove merge conflict artifacts

* make a more useful default keymap

* add configurator support for the RGB pcb

* fix rgb matrix based on new info. Multipler should be reversed

* forgot to actually set the pin output for caps lock led

* fix offset keys in layer 1 keymap

* code cleanup

* use macros for the rgb_led calculations struct

* set RGB led num to 67 as I mistakenly counted the caps lock led

* cleanup config.h file

* add RGB note in readme

* get consistent naming in config file

* fix some inconsistencies

* readjust matrix and get rid of macros based on drashna's suggestions
2019-04-21 19:59:39 -07:00
George Petri
98f7af6d3b [Keymap] Add keymap for keebio/quefrency 65% version (#5666)
* add keymap

* fix readme title

* renamed README.md to lowercase, fix typo

* renamed README.md to lowercase, for real

* add double spaces for github

* lowercase name in readme

* rename directory to lowercase
2019-04-21 09:43:23 -07:00
moyi4681
50e0bdab00 [Keyboard] dz60rgb: update default keymap (#5661)
* Update keymap.c

* Update config.h

* Update dz60rgb.c

* Update keymap.c
2019-04-21 09:33:36 -07:00
Rys Sommefeldt
e2843c25ce [Keymap] Shuffle FL1 some more to match keycap legends (#5673) 2019-04-21 09:15:19 -07:00
XScorpion2
b27ddf1edb [Keyboard] Updated rules.mk for Sol to use the correct feature flag (#5672) 2019-04-21 09:13:44 -07:00
XScorpion2
829ccd3491 RGB Matrix docs update from mechmerlin discussion (#5667)
* RGB Matrix docs update from mechmerlin discussion

* alignment

* Apply suggestions from code review

Co-Authored-By: XScorpion2 <rcalt2vt@gmail.com>
2019-04-20 18:21:22 -07:00
William Chang
ff9cd1dd0c Added keymap/userspace for dz60 build 4 with readme (#5668)
* Initial commit

* Modified keymap and updated readme.

* fixed numbering in readme

* Update README.md

* Update README.md

* Update README.md

* Update README.md

* Update README.md

* Update README.md

* Made requested changes in PR.

* Rename README.md to readme.md
2019-04-20 17:38:33 -07:00
Ryan Caltabiano
d3268280ef Removed / replaced questionable logos and added licenses file for safe logos 2019-04-20 08:05:10 -07:00
Ryan Caltabiano
33e27b2a83 Fixing readme from feedback 2019-04-20 08:05:10 -07:00
Ryan Caltabiano
dd3a813f87 Reducing size of data send in one frame & update Zen rev2 oled usage 2019-04-20 08:05:10 -07:00
Ryan Caltabiano
0a645225b9 OLED Driver Feature 2019-04-20 08:05:10 -07:00
zvecr
b5cb5ec6dd Fix koyu readme encoding (#5655) 2019-04-20 08:02:59 -07:00
Jan Christoph Ebersbach
a1f2514051 [Keyboard] Layout and configuration updates for Signum 3.0 (#5652)
* Make Signum 3.0 compatible with default ortho_4x12 layout

* Disable unicode map by default

* Add missing backspace key

* Add missing delete key

* Fix broken gui right command

* Move MO5 to a different key an add Esc to L4

* Move MO5 to a different key

* Add Del and Bspace to layer 4
2019-04-19 23:37:19 -07:00
Rys Sommefeldt
ed74bd95f6 [Keymap] Make the layout friendlier for use with the iPad (#5654)
* Make the layout more similar to Apple keyboards to make it friendlier for using with an iPad

* Fix config.h pragma, plus second layer mistakes
2019-04-19 23:35:46 -07:00
zvecr
edcedd53d1 [Keyboard] Add LAYOUT macro and Configurator config (#5656) 2019-04-19 23:34:13 -07:00
Len Trigg
8170be5b10 [Keyboard] crkbd: compile time hand-dependent rgb_matrix LED declarations (#5657)
Set RGB_MATRIX_SPLIT_RIGHT=yes when flashing the right hand side of the
keyboard.
2019-04-19 23:33:07 -07:00
Markus Weimar
4856552f8b Update mouse keys docs (#5653) 2019-04-19 23:18:06 -07:00
Takeshi ISHII
7e67bd791b Change split_common to use RGBLIGHT_SPLIT (#5509)
* add I2C_slave_buffer_t to quantum/split_common/transport.c

Improvements to ease the maintenance of the I2C slave buffer layout. And this commit does not change the compilation results.

* add temporary pdhelix(Patched Helix) code

* temporary cherry-pick from #5020

add new version(#5020) quantum/rgblight.[ch], quantum/rgblight_modes.h

* add post_config.h support to build_keyboard.mk

* add quantum/rgblight_post_config.h, quantum/split_common/post_config.h

Add quantum/rgblight_post_config.h and quantum/split_common/post_config.h using POST_CONFIG_H variable of build_keyboard.mk.

quantum/rgblight_post_config.h additionally defines RGBLIGHT_SPLIT if RGBLED_SPIT is defined.

quantum/split_common/post_config.h defines RGBLIGHT_SPLIT additionally when master-slave communication is I2C.

* Change split_common's transport.c I2C to use the synchronization feature of rgblight.c

* Change split_common's transport.c serial to use the synchronization feature of rgblight.c

* test RGBLIGHT_SPLIT on keyboards/handwired/pdhelix

* Test End Revert "test RGBLIGHT_SPLIT on keyboards/handwired/pdhelix"

This reverts commit 80118a6bbd.

[x] make RGBLIGHT_TEST=1 handwired/pdhelix/i2c:default
[x] make RGBLIGHT_TEST=2 handwired/pdhelix/i2c:default (same RGBLIGHT_TEST=3)
[x] make RGBLIGHT_TEST=3 handwired/pdhelix/i2c:default

[x] make RGBLIGHT_TEST=1 handwired/pdhelix/pd2:default
[x] make RGBLIGHT_TEST=2 handwired/pdhelix/pd2:default
[x] make RGBLIGHT_TEST=3 handwired/pdhelix/pd2:default

[x] make RGBLIGHT_TEST=1 handwired/pdhelix/pd2_2oled:default
[x] make RGBLIGHT_TEST=2 handwired/pdhelix/pd2_2oled:default
[x] make RGBLIGHT_TEST=3 handwired/pdhelix/pd2_2oled:default

* Test End, Revert "temporary cherry-pick from #5020"

This reverts commit d35069f68b.

* Test End, Revert "add temporary pdhelix(Patched Helix) code"

This reverts commit aebddfc1a8.

* temporarily cherry-pick from #5020 to see if it passes the travis-ci test.

add new version(#5020) quantum/rgblight.[ch], quantum/rgblight_modes.h

* Passed the travis-ci test. Revert "temporarily cherry-pick from #5020 to see if it passes the travis-ci test."

This reverts commit 647c0a9755.

* update docs/config_options.md

* update split_common/transport.c, improves maintainability of serial transaction IDs.

No change in build result.

* temporary cherry-pick from #5020

* fix build fail keebio/iris/rev3:default

* fix build fail lets_split_eh/eh:default

* Revert "temporary cherry-pick from #5020"

This reverts commit be48ca1b45.

* temporary cherry-pick from #5020 (0.6.336)

* Revert "temporary cherry-pick from #5020 (0.6.336)"

This reverts commit 978d26a8b3.

* temporary cherry-pick from #5020 (0.6.336)
2019-04-19 15:25:08 -07:00
Takeshi ISHII
dfab177f88 Add function to support split-keyboard in rgblight.[ch]. (#5020)
* add temporary file that is rgblight.c call graph

* add rgblight_update_hook()

* update rgblight-call-graph.dot (temporary file)

* add more hook point

* add TODO comment

* temporary Revert "add TODO comment"

This reverts commit df6165aac9.

* temporary Revert "add more hook point"

This reverts commit 64592b06f3.

* temporary Revert "add rgblight_update_hook()"

This reverts commit 432b74c912.

* add rgblight_update_hook()

* add more hook point

* add TODO comment

* implement rgblight_update_hook()

* remove rgblight_update_hook(), add RGBLIGHT_SPLIT_SET_CHANGE_XXXX

rgblight_update_hook() is too large.
change to simple flag setting.

* shrink rgblight_config_t

* implement rgblight_update_sync()

Note: The animation synchronization process has not been implemented yet.

* update quantum/rgblight-call-graph.dot (temporary file)

* rmove quantum/rgblight-call-graph.dot (temporary file)

* update rgblight.c

* Add temporary code to Helix keyboard 'five_rows' keymap to test rgblight.c .

* fix build break rgblight_update_sync() when all animation off

* fix quantum/rgblight.c:rgblight_disable_XX() add RGBLIGHT_SPLIT_SET_CHANGE_MODE

* quantum/rgblight.c change code order: move rgblight_update_sync()

* add mode_base_table[] to quantum/rgblight.c

* quantum/rgblight.c use mode_base_table[] and rgblight_status.base_mode

* quantum/rgblkght.c animation timer integration

* quantum/rgblkght.c add animation sync for split keyboard

* fix mode_base_table[] and snake effect

* fix build break keyboards/mxss.

keyboards/mxss's local rgblight.c need old version rgblight.h

* rgblight.c: fix animation sync

* quantum/rgblight.c: fix snake effect sync

* quantum/rgblight.c: animation sync interverl 30 sec

* quantum/rgblight.c: fix rgblight_effect_rainbow_swirl() and rgblight_effect_knight()

* quantum/rgblight.c: add macro RGBLIGHT_SPLIT_ANIMATION

* cherry-pick from 'rgblight_modes.h sample implementation'

* fix RGBLIGHT_SPLIT_ANIMATION check position

* Update temporary code in Helix keyboard 'five_rows' keymap to test rgblight.c

* Reduce the firmware size by 1500 bytes when rgblight_effect_breathing() is enabled.

* Changed to rgblight_sethsv_eeprom_helper() for easier reading.

* add fail-safe code to quantum/rgblight.c:rgblight_task(),rgblight_timer_enable()

* remove temporary code in Helix keyboard 'five_rows' keymap

* quantum/rgblight.c: add split-keyboard master side sync functions

add functions:
  uint8_t rgblight_get_change_flags(void);
  void rgblight_clear_change_flags(void);
  void rgblight_get_syncinfo(rgblight_syncinfo_t *syncinfo);

change function:
  void rgblight_update_sync(rgblight_syncinfo_t *syncinfo, bool write_to_eeprom);

* Change rgblight_update_sync() to use write_to_eeprom.

* remove TODO comment from quantum/rgblight.h

* Revert "fix build break keyboards/mxss."

This reverts commit 90b9a1aa7d.
(Separated this change into the newly opened PR #5461.)

* Revert "Reduce the firmware size by 1500 bytes when rgblight_effect_breathing() is enabled."

This reverts commit b61004e63e.

* update quantum/rgblight.c: Code size reduction when not using RGBLIGHT_SPLIT.

* Add temporary code to Helix keyboard 'five_rows' keymap to test rgblight.c .

* add temporary pdhelix(Patched Helix) code

* Add temporary code to split_common/transport.c to test rgblight.c.

* Finish testing rgblight.c with helix keyboard.

Revert "Add temporary code to Helix keyboard 'five_rows' keymap to test rgblight.c ."

This reverts commit 0bf81a4723.

* Finish testing rgblight.c with quantum/split_common code.

Revert "Add temporary code to split_common/transport.c to test rgblight.c."

This reverts commit 71db3e24ee.

* remove temporary pdhelix(Patched Helix) code

This reverts commit 5287e51a39.

* Added description of RGBLIGHT_SPLIT macro to docs/feature_rgblight.md.

* add RGBLIGHT_SPLIT_SET_CHANGE_HSVS to rgblight_init()

* Changed to restart animation only when changing mode.

When changing hue, sat and val, the animation is not restarted and continues.
2019-04-19 15:05:51 -07:00
Drashna Jaelre
dd64a4e738 Init RGB Matrix EEPROM
I'm not sure how to check if it's the same as RGBLIGHT's EEPROM, but if you don't init it, it **will not** work properly until it is initialized.
2019-04-19 14:58:08 -07:00
mechmerlin
1ef01ba4c6 add -yq flags to actually make it noninteractive 2019-04-19 14:46:19 -07:00
Danny Nguyen
746058306b Make sure NOBITS is set on reset_key
Patch from https://github.com/qmk/qmk_firmware/issues/3657#issuecomment-415147411

Long story short, in avr-gcc pre-8.2, reset_key was assigned to a memory area that was in a normal range, but when 8.2 came out, that memory got moved to an out of range area, causing errors like 0x800293 out of range. Apparently, this was fixed up in avr-gcc, but we haven't seen a release with the fix yet (we expected it in 8.3, but that didn't happen for some reason).

What this commit does is move the reset_key back to the original memory location it was in before.
2019-04-19 14:44:16 -07:00
zvecr
50fce7f255 Travis CI - skip unit tests for documentation changes (#5267)
* Add script to skip tests on non master branches with only docs changes

* Review comments - Use 'grep -c' instead of 'wc -l'
2019-04-19 13:20:02 -07:00
Mike Roberts
b60413af60 Use auto output for Adafruit BLE (#4131)
* use auto for adafruit ble

* spacing

* switch ifdef name
2019-04-19 13:07:35 -07:00
Jack Humbert
55ace26a5d Remove default folders for the Planck & Preonic (#3497)
* remove planck default folder

* Update rules.mk
2019-04-19 13:05:31 -07:00
Jeff Hastings
5539d7affb [Keyboard] Update 1upkeyboards/super16 with code from vendor (#5645)
* readme formatting

* cleanup rules.mk

* update config.h

* add numpad layout

* Update default keymap

* cleanup rules

* disable console and commands to fit the bootloader

* cleanup whitespace

* revert readme changes

* revert changes to config.h

* remove unused keycodes

* add LAYOUTS to rules.mk

* remove redundant config setting

Co-Authored-By: jeffmhastings <jeffmhastings@gmail.com>
2019-04-19 10:43:15 -07:00
Salt-Peanuts
7fa854729c [Keymap] Added personal keymap to BFO-9000; cleaned up personal files in Kinesis and Rorschach (#5638)
* Added personal keymap to BFO-9000; cleaned up personal Kinesis and Rorschach files

Added personal keymap to BFO-9000; cleaned up personal Kinesis and Rorschach files

* Update keymap.c

* Update keymap.c

* Update keymap.c

* Update readme.md

* Update readme.md

* Update readme.md

* Update readme.md

* Update readme.md

* Update readme.md
2019-04-19 09:23:11 -07:00
Markus Weimar
5ed7d9c9ca Update XD75 keymap by markus (#5651) 2019-04-19 07:27:23 -07:00
Markus Weimar
e3a940026e Improve mouse keys docs and constant speed mode 2019-04-18 23:31:17 -07:00
XScorpion2
74af596d8a [Keyboard] niu_mini reduce firmware size (#5648)
* Reducing firmware size by removing audio for keymaps that are not using it.

* Update rules.mk
2019-04-18 21:58:38 -07:00
shela
8aee82e8b4 [Keymap] Fix compilation error of feature #4301 (#5649) 2019-04-18 17:41:01 -07:00
QMK Bot
dd290085c9 convert to unix line-endings [skip ci] 2019-04-18 23:23:52 +00:00
skullydazed
068571b9fe Update our style guide (#5500)
* Update our style guide

* Clarify muiltple condition ifs

* update the ifdef section
2019-04-18 15:59:51 -07:00
Alex Ong
7a1086e405 [core] Fix for eager_pr #5643
Added extra transfer_matrix_values() call whenever counters don't need updating
2019-04-18 15:45:36 -07:00
YouCanFly
9e3b38425f [Keyboard] Update Tetris (#5513)
* Update Tetris

Add a fake row to config the encoder's keycode easily.

* Delete rules.mk

* Update keyboards/tetris/readme.md

Co-Authored-By: YCF <65446+YCF@users.noreply.github.com>

* Update config.h

add #define RGBLIGHT_SLEEP
2019-04-18 15:37:26 -07:00
Drashna Jaelre
a58c66df88 Reduce CRKBD firmware size by reducing layer numbers (#5471)
* Reduce CRKBD firmware size by reducing layer numbers

* Update layer output code based on mtei's suggestion/code

* Fix spacing

* Revert "Update layer output code based on mtei's suggestion/code"

This reverts commit 036d347db3.

Unfortunately, because this is NOT in the keymap itself, the layer macros aren't accessible and will error on commit

* Add comment for future person
2019-04-18 14:02:32 -07:00
Øyvind Wilhelmsen
162a1d39b6 Update readme.md (#5647) 2019-04-18 13:27:05 -07:00
patrickmt
3542f594d9 Fix wake from suspend LED functionality
When waking from suspend, only enable the LED drivers if they were not previously set to disabled by the user. This functionality was removed by the recent updates to adapt Massdrop keyboards to QMK RGB Matrix. Affects Massdrop CTRL and ALT keyboards compiled using Massdrop Configurator mode.
2019-04-18 11:55:45 -07:00
Erez Zukerman
0511b522e0 Merge pull request #5642 from fdidron/f/change-ergodoxez-debounce
Change Ergodox EZ default debounce
2019-04-17 21:53:07 -04:00
Florian Didron
34239edcb0 Set default debounce to 5 2019-04-18 10:49:13 +09:00
roguepullrequest
8bdbac14a3 [Keymap] Roguepullrequest Planck layout update (#5640)
* First publish of roguepullreqest programmer dvorak planck layout

* Removed junk line

* Update keyboards/planck/keymaps/roguepullrequest/keymap.c

Co-Authored-By: roguepullrequest <roguepullrequest@users.noreply.github.com>

* Update keyboards/planck/keymaps/roguepullrequest/keymap.c

Co-Authored-By: roguepullrequest <roguepullrequest@users.noreply.github.com>

* Update keyboards/planck/keymaps/roguepullrequest/keymap.c

Co-Authored-By: roguepullrequest <roguepullrequest@users.noreply.github.com>

* Update keyboards/planck/keymaps/roguepullrequest/keymap.c

Co-Authored-By: roguepullrequest <roguepullrequest@users.noreply.github.com>

* Removed layer songs

Removed layer songs for cleanliness. Will use them later.

* Update keyboards/planck/keymaps/roguepullrequest/readme.md

Co-Authored-By: roguepullrequest <roguepullrequest@users.noreply.github.com>

* Made basic LSHIFT framework but is not working. Listed other tapdances.

* Got LSHIFT to work

* Added working RSHIFT

* Added working TD_S

* Cleaned up LEFT and RIGHT [ { ] } on the UPPER layer.

* Cleaned up layout.

* Reenabled audio space is not needed right now.
2019-04-17 18:39:50 -07:00
kingwangwong
01f4b67ef0 [keymap] adding kingwangwong's keymaps (#5626)
* Add files via upload

* kingwangwong

* kingwangwong

* revisions and adding atom40

* revisions for 5626

* revisions for 5626

* revisions for 5626.

* revisions for 5626, re added safe range

* revisions for 5626, added qmkkeyboard

* revisions for 5626, quefrency
2019-04-17 13:26:20 -07:00
Øyvind Wilhelmsen
f05927a2f0 [Keymap] Update to oeywil's keymap (#5614)
* Switched to grid, added leader key and space cadet shift

* renamed layer, removed sound

* fixed comment

* added comment

* Added tap dance

* Added comments

* removed useless sound

* removed useless comments

* removed useless cases

* changed to register_code16 function

* renamed variables

* fixed typo

* fixed indentation
2019-04-17 11:07:19 -07:00
Teodor Tomic
4cd3afc7e9 [keymap] TADA68 KBP-V60-like keymap (#5637)
* [keymap] Added TADA68 KBParadise V60 like keymap

* Remove extra define
2019-04-17 06:37:40 -07:00
Ryan Caltabiano
86855f4417 Xulkal Keymaps 2019-04-16 18:30:54 -07:00
marcoSchr
416eb1dee7 [Keyboard] Fix macro keycode for alpha keyboard (#5633) 2019-04-16 15:57:24 -07:00
ishtob
0a6beab224 [Keyboard] Hadron keymap and config updates (#5632)
* update hadron keymaps, code cleanup

* keymap update

* refactor custom matrix to use quantum matrix defines

* fix wrong pin for matrix
2019-04-16 14:49:24 -07:00
marcoSchr
93b7fccad6 [Keymap] Use Right Alt/Ctrl on right side of OK60 (#5630)
* Use Right Alt/Ctrl on right side of OK60

* Update keyboards/ok60/keymaps/default/keymap.c

Co-Authored-By: marcoSchr <49691247+marcoSchr@users.noreply.github.com>
2019-04-16 10:39:57 -07:00
Rob Rogers
565a7812ab [Keyboard] Crkbd RGB Matrix config with WS2812 (#5627) 2019-04-16 10:29:48 -07:00
Iason Dimitrakopoulos
838d09b0a9 [Keymap] Bugfixes on tapdance logic and small changes in layout (#5622)
* Add layer switcher functionality

* Fixes in left/right bracket functions and other small fixes

* used better KCs
2019-04-16 10:28:29 -07:00
patrickmt
082c835c26 Merge remote-tracking branch 'upstream/master' into md_1800_qmk 2019-04-16 09:26:22 -04:00
patrickmt
0500497612 ctrl alt working but not fully tested 2019-04-16 09:24:38 -04:00
Alex Ong
d0fb7005d5 Eager pk/pr optimization (#5621)
* Optimizations to eager_pk

* eager_pr also uses changed boolean now.
2019-04-15 12:58:03 -07:00
XScorpion2
ffc82ebdb2 [Keyboard] Zen keyboard update for Rev2 (#5522)
* Updated Zen keyboard for rev2 support

* Fixing r1 compile errors

* PR feedback and changes for Proton-C compile errors
2019-04-14 21:29:50 -07:00
iw0rm3r
4974683040 [Keyboard] IBM Model M (ANSI/ISO) Teensy 2.0++ conversion (#5560)
* Added initial modelm101 config

* Update keyboards/modelm101/keymaps/default/keymap.c

Co-Authored-By: iw0rm3r <49209191+iw0rm3r@users.noreply.github.com>

* Update keyboards/modelm101/keymaps/iw0rm3r/keymap.c

Co-Authored-By: iw0rm3r <49209191+iw0rm3r@users.noreply.github.com>

* Update keyboards/modelm101/readme.md

Co-Authored-By: iw0rm3r <49209191+iw0rm3r@users.noreply.github.com>

* Added wiring notes to clarify use of the config

* Small fix

* Small fix

* Moved modelm101 to converter directory

* Added info.json file for QMK configurator

* Corrected path

Co-Authored-By: iw0rm3r <49209191+iw0rm3r@users.noreply.github.com>

* Update keyboards/converter/modelm101/readme.md

Co-Authored-By: iw0rm3r <49209191+iw0rm3r@users.noreply.github.com>

* Update keyboards/converter/modelm101/modelm101.c

Co-Authored-By: iw0rm3r <49209191+iw0rm3r@users.noreply.github.com>

* Update keyboards/converter/modelm101/modelm101.c

Co-Authored-By: iw0rm3r <49209191+iw0rm3r@users.noreply.github.com>

* Update keyboards/converter/modelm101/modelm101.c

Co-Authored-By: iw0rm3r <49209191+iw0rm3r@users.noreply.github.com>

* Update keyboards/converter/modelm101/modelm101.c

Co-Authored-By: iw0rm3r <49209191+iw0rm3r@users.noreply.github.com>

* Update keyboards/converter/modelm101/modelm101.c

Co-Authored-By: iw0rm3r <49209191+iw0rm3r@users.noreply.github.com>

* Update keyboards/converter/modelm101/modelm101.c

Co-Authored-By: iw0rm3r <49209191+iw0rm3r@users.noreply.github.com>

* Replaced DDR and PORT with QMK functions
2019-04-14 20:58:56 -07:00
XScorpion2
5fcd744ddb Features/ws2812 matrix driver (#5418)
* WS2812 driver implementation for RGB Matrix

* Added driver configuration docs
2019-04-14 17:50:35 -07:00
roguepullrequest
d7ba190cd9 [Keymap] First publish of roguepullreqest programmer dvorak planck layout (#5612)
* First publish of roguepullreqest programmer dvorak planck layout

* Removed junk line

* Update keyboards/planck/keymaps/roguepullrequest/keymap.c

Co-Authored-By: roguepullrequest <roguepullrequest@users.noreply.github.com>

* Update keyboards/planck/keymaps/roguepullrequest/keymap.c

Co-Authored-By: roguepullrequest <roguepullrequest@users.noreply.github.com>

* Update keyboards/planck/keymaps/roguepullrequest/keymap.c

Co-Authored-By: roguepullrequest <roguepullrequest@users.noreply.github.com>

* Update keyboards/planck/keymaps/roguepullrequest/keymap.c

Co-Authored-By: roguepullrequest <roguepullrequest@users.noreply.github.com>

* Removed layer songs

Removed layer songs for cleanliness. Will use them later.

* Update keyboards/planck/keymaps/roguepullrequest/readme.md

Co-Authored-By: roguepullrequest <roguepullrequest@users.noreply.github.com>
2019-04-14 11:35:21 -07:00
Drashna Jaelre
66dbcccb48 Fix incorrect keyboard dimensions in Configurator API data (#5615)
* Fix Ergodone keyboard dimensions in info.json

* Fix handwired/prime_exl keyboard dimensions in info.json

* Fix KBDfans KBD4x keyboard dimensions in info.json

* Fix handwired/not_so_minidox keyboard dimensions in info.json

* Fix Canoe keyboard dimensions in info.json

* Fix Clueboard Cluecard keyboard dimensions in info.json

* Fix Corne (crkbd) keyboard dimensions in info.json

* Fix Gergo keyboard dimensions in info.json

* Fix handwired/frenchdev keyboard dimensions in info.json

* Fix handwired/ortho5x13 keyboard dimensions in info.json

* Fix handwired/promethium keyboard dimensions in info.json

* Fix Speedo keyboard dimensions in info.json

* Fix XD87 keyboard dimensions in info.json

* Fix Ergodox EZ keyboard dimensions in info.json

* Fix Ergodox Infinity keyboard dimensions in info.json

* Fix Keeb.io Iris keyboard dimensions in info.json

* Fix Orthodox keyboard dimensions in info.json (all revisions)

* Fix Qwertyydox keyboard dimensions in info.json

* Fix handwired/tradestation keyboard dimensions in info.json
2019-04-14 11:33:52 -07:00
roguepullrequest
e7e13ebdd7 [Docs] Adding Alt↯Tab example macro (#5616) 2019-04-14 11:32:11 -07:00
Bob
02b74d521b fix combo enabling logic (#5610) 2019-04-14 11:02:41 -07:00
Jeremy Bernhardt
61a7aebd16 [Keyboard] Georgi FW updates (#5609)
* Working on chording

* Working on chording

* Got layouts in order

* Initial Georgi support

* forgot to add keymaps

* Updated readme

* Update keyboards/georgi/keymaps/template/readme.md

Co-Authored-By: germ <jeremythegeek@gmail.com>

* Update keyboards/georgi/georgi.h

Co-Authored-By: germ <jeremythegeek@gmail.com>

* Update keyboards/georgi/keymaps/default/keymap.c

Co-Authored-By: germ <jeremythegeek@gmail.com>

* Update keyboards/georgi/keymaps/default/keymap.c

Co-Authored-By: germ <jeremythegeek@gmail.com>

* Update keyboards/georgi/rules.mk

Co-Authored-By: germ <jeremythegeek@gmail.com>

* Update keyboards/georgi/rules.mk

Co-Authored-By: germ <jeremythegeek@gmail.com>

* Update keyboards/georgi/matrix.c

Co-Authored-By: germ <jeremythegeek@gmail.com>

* Update keyboards/georgi/georgi.c

Co-Authored-By: germ <jeremythegeek@gmail.com>

* Update keyboards/georgi/georgi.c

Co-Authored-By: germ <jeremythegeek@gmail.com>

* Update keyboards/georgi/rules.mk

Co-Authored-By: germ <jeremythegeek@gmail.com>

* Update keyboards/georgi/keymaps/default/keymap.c

Co-Authored-By: germ <jeremythegeek@gmail.com>

* Update keyboards/georgi/keymaps/template/keymap.c

Co-Authored-By: germ <jeremythegeek@gmail.com>

* Update keyboards/georgi/matrix.c

Co-Authored-By: germ <jeremythegeek@gmail.com>

* Disabled features, updated info

* Update keyboards/georgi/config.h

Co-Authored-By: germ <jeremythegeek@gmail.com>

* Update keyboards/georgi/config.h

Co-Authored-By: germ <jeremythegeek@gmail.com>

* Fixed info.json

* Split the number button and fixed gaming mode.

* started work on history feature

* Working history/multikeyfuckery

* type

* inital code reduction refactor

* Got multikey patched up, optimizing for size

* Forgot to remove stuff

* fixed key repeat

* Key repeat added.

* Symshift locking

* Midchord Sym shenanigans.

* Added only QWERTY mode

* Split out header

* Added stickybits, minimal layour

* Fixing user layout

* Whitespace fixing

* Fixing Version name
2019-04-14 11:01:52 -07:00
noroadsleft
de161493c7 Fix handwired/tradestation keyboard dimensions in info.json 2019-04-13 12:06:15 -07:00
noroadsleft
58a04162a8 Fix Qwertyydox keyboard dimensions in info.json 2019-04-13 01:27:44 -07:00
noroadsleft
424c359109 Fix Orthodox keyboard dimensions in info.json (all revisions) 2019-04-13 01:27:43 -07:00
noroadsleft
165b1683c1 Fix Keeb.io Iris keyboard dimensions in info.json 2019-04-13 01:27:43 -07:00
noroadsleft
69f757c3a2 Fix Ergodox Infinity keyboard dimensions in info.json 2019-04-13 01:27:42 -07:00
noroadsleft
8f3063402d Fix Ergodox EZ keyboard dimensions in info.json 2019-04-13 01:27:42 -07:00
noroadsleft
8af1d3ad86 Fix XD87 keyboard dimensions in info.json 2019-04-13 01:27:41 -07:00
noroadsleft
8c87274e83 Fix Speedo keyboard dimensions in info.json 2019-04-13 01:27:41 -07:00
noroadsleft
eab6546fda Fix handwired/promethium keyboard dimensions in info.json 2019-04-13 01:27:40 -07:00
noroadsleft
2485f73f06 Fix handwired/ortho5x13 keyboard dimensions in info.json 2019-04-13 01:27:40 -07:00
noroadsleft
814118175b Fix handwired/frenchdev keyboard dimensions in info.json 2019-04-13 01:27:39 -07:00
noroadsleft
de6b568177 Fix Gergo keyboard dimensions in info.json 2019-04-13 01:27:39 -07:00
noroadsleft
a20e59ac75 Fix Corne (crkbd) keyboard dimensions in info.json 2019-04-13 01:27:38 -07:00
noroadsleft
7870000d89 Fix Clueboard Cluecard keyboard dimensions in info.json 2019-04-13 01:27:37 -07:00
noroadsleft
f19d138206 Fix Canoe keyboard dimensions in info.json 2019-04-13 01:27:37 -07:00
noroadsleft
a206f3b739 Fix handwired/not_so_minidox keyboard dimensions in info.json 2019-04-13 01:27:36 -07:00
noroadsleft
75535cdfa3 Fix KBDfans KBD4x keyboard dimensions in info.json 2019-04-13 01:27:36 -07:00
noroadsleft
1529f0b2d7 Fix handwired/prime_exl keyboard dimensions in info.json 2019-04-13 01:27:35 -07:00
noroadsleft
b090fe15d7 Fix Ergodone keyboard dimensions in info.json 2019-04-13 01:26:23 -07:00
Drashna Jaelre
a6857d18e1 Change table names 2019-04-12 14:07:05 -07:00
Drashna Jaelre
1d7a06a0a2 Cleanup code 2019-04-12 14:07:05 -07:00
Drashna Jaelre
e88530af79 Make send_char multilined for readaability
So future us' will thaank us
2019-04-12 14:07:05 -07:00
Drashna Jaelre
7148c0b10c Clean up some of the code 2019-04-12 14:07:05 -07:00
Drashna Jaelre
a2090d5e86 Add AltGr/RALT support to Send String 2019-04-12 14:07:05 -07:00
zvecr
6832a067ef Add vendor and product arguments to atmega32a_program.py - fix hex print 2019-04-12 14:04:40 -07:00
zvecr
0e88d756f9 Add vendor and product arguments to atmega32a_program.py 2019-04-12 14:04:40 -07:00
Drashna Jaelre
a9a5fd754e Max out range for max compatibility 2019-04-12 13:55:59 -07:00
Drashna Jaelre
c27d96b4c1 Fix ATSAM's USB HID descriptor to support higher heycodes
Assuming I understand this correctly, this should set the max scancode to E7 (RGUI), which is the last listed code in the main list (everything else use for internal QMK/TMK stuff).
2019-04-12 13:55:59 -07:00
zvecr
0ee4206bd0 Fix build detection of keymap and board changes 2019-04-12 13:53:17 -07:00
zvecr
e93465ffdb Apply MAKEFLAGS to speed up CI 2019-04-12 13:38:59 -07:00
holtenc
dc267f96c7 Flesh out keymaps and some tweaks to indicators (#5608)
* correct indicator light states.

function of indicator lights was inverted. these changes correct that.

* flesh out keymaps pre production
2019-04-12 09:23:04 -07:00
mechmerlin
2a55368a59 add in the missing #defines 2019-04-11 18:49:28 -07:00
noroadsleft
2df82514ab Update ps2avrgb readme template (#5584)
- fix markdown formatting on macOS instructions (close code block)
- update package install commands
  - set python3
  - use pip3 to install pyusb
  - fix typo (extra backtick on bootloadhid package install line)
- update Keyboard Maintainer line (now unified with AVR template)
2019-04-11 15:39:40 -07:00
kaylanm
c78bc6a2fe Use DIRECT_PINS for BDN9 (#5603) 2019-04-11 12:24:29 -07:00
zvecr
0137b02319 Port DIRECT_PINS from split_common/matrix.c to matrix.c (#5091)
* Port DIRECT_PINS from split_common/matrix.c to matrix.c

* Reorder matrix.c to remove foward declaration and match split_common/matrix.c

* Refactor nano to use DIRECT_PINS

* Reorder matrix.c to remove foward declaration and match split_common/matrix.c

* Add DIRECT_PINS documentation

* Reorder matrix.c to remove foward declaration and match split_common/matrix.c - fix logic from inherited from split_common

* Add DIRECT_PINS documentation - review comments
2019-04-11 11:51:55 -07:00
さくらんぼ
dc570b0b38 Keyboard: Add yosino58 Keyboard (#5465)
* Keyboard: Add yosino58 Keyboard

* Keyboard: Add yosino58 Keyboard
2019-04-11 09:07:39 -07:00
MechMerlin
fa514e63aa fix offset in matrix (#5600) 2019-04-10 21:19:27 -07:00
Noah Frederick
606b1fe82f Remove caveat about combos with shared keys (#5601)
Combos with shared keys are supported as of https://github.com/qmk/qmk_firmware/pull/2561. Therefore, this caveat no longer applies.
2019-04-10 18:36:05 -07:00
Konstantin Đorđević
4882f7f16d Revert "Update build instructions and docker file to download submodules" (#5533)
* Revert "Update build instructions and Dockerfile to download submodules"

This reverts commit 93210547bd.

* Update build tools docs based on feedback

* Fix bad link in build tools docs
2019-04-10 14:15:51 -07:00
zvecr
45620fd289 Remove ps2avrGB since its a hangover from the keyboards/winkeyless refactor (#5592) 2019-04-09 16:39:06 -07:00
Alex Ong
3761c28bf9 ergodox_ez: fixed bug where debounce() was called without calculating changed (#5589) 2019-04-08 21:52:38 -07:00
Jack Humbert
fa4052c26e Adds the Planck EZ, 3737 RGB, fixes out-of-tune notes (#5532)
* RGB Matrix overhaul
Breakout of animations to separate files
Integration of optimized int based math lib
Overhaul of rgb_matrix.c and animations for performance

* Updating effect function api for future extensions

* Combined the keypresses || keyreleases define checks into a single define so I stop forgetting it where necessary

* Moving define RGB_MATRIX_KEYREACTIVE_ENABLED earlier in the include chain

* Adds the Planck EZ, 3737 RGB, fixes out-of-tune notes

* fix bug in quantum/rgb_matrix_drivers.c

Co-Authored-By: jackhumbert <jack.humb@gmail.com>

* update command setting to the correct default

* correct rgb config

* remove commented-out lines

* update docs for the 3737

* Update docs/feature_rgb_matrix.md

Co-Authored-By: jackhumbert <jack.humb@gmail.com>
2019-04-08 16:57:43 -07:00
Bob
bc536b9b6d Switch process_combo to using global register and timer (#2561)
Since combos keep local state about what keys have been previously pressed, when combos are layered, multiple keypresses will register for any key with multiple combos assigned to it. In order to fix this, I switched process_combo to use a global keycode / keyrecord register and timer. When a keypress is consumed by a combo, it gets stored in the register and the timer is updated; when the next keypress takes too long or a key is pressed that isn't part of any combo, the buffer is emitted and the timer reset. This has a few side effects. For instance, I couldn't _not_ fix combo keys printing out of order while also fixing this bug, so combo keys print in order correctly when a combo fails. since combos no longer have local timers, the logic around when combos time out has changed. now that there is a single timer pressing any combo key (including one in a different combo) will reset the timer for all combos, making combo entry a little more lenient. Since combos no longer have local keycode / keyrecord state, there is an edge case where incomplete combo keys can be consumed. if you have a combo for a+s = tab and a combo for b+n = space, if you press a+b+n, only a space will be emitted. This is because when b+n completes successfully, it drops the register.
2019-04-08 14:07:15 -07:00
Drashna Jaelre
f8d365a478 Convert BFO9000 to Split Keyboard code (#5568) 2019-04-08 12:43:03 -07:00
zvecr
da9bb59055 [Keyboard] Refactor jj4x4 to current standards (#5567)
* Refactor 4x4 in line with current ps2avrgb template

* Add backlight pwm bodge till #4324 lands

* Disable bootmagic lite as it seems to not work on atmega32a/bootloadHID
2019-04-08 11:35:47 -07:00
MechMerlin
15d7c5f0bd [Keyboard] Bootmagic does not actually work on BMC boards, removing from panc60 (#5573)
* remove unneeded uart setting

* use pragma once everywhere

* remove custom matrix support

* fixup readme

* set bootmagic to lite

* remove dependency on custom i2c code

* use the right header files and function calls

* remove bootmagic support as it doesn't work on bmc boards

* readme merge artifacts removal
2019-04-08 11:03:53 -07:00
MechMerlin
3e26886700 [Keyboard] Refactor Singa (#5579)
* pragma once it all

* put amnesia's name everywhere

* fixup readme

* remove custom matrix

* remove unneccessary configs

* disable bootmagic

* remove custom i2c in favor of i2c_master

* fix rgb led num

* add in rgb underglow support
2019-04-08 10:55:36 -07:00
Takeshi ISHII
0456bd668d [Docs] update feature_rgblight.md: add some figures (#5578)
* Added diagrams to illustrate the RGBLIGHT_LED_MAP macro and the `rgblight_set_clipping_range()` function.

* change fig size

* change fig size

* update figs
2019-04-08 10:55:00 -07:00
zvecr
91b18e263f [Keyboard] Refactor jj40 to current standards (#5574)
* Refactor jj40 in line with current ps2avrgb template

* Disable bootmagic lite as it seems to not work on atmega32a/bootloadHID

* Add backlight pwm bodge till #4324 lands

* Increase planck keymap compatibility
2019-04-08 10:53:15 -07:00
MechMerlin
9b393700d2 [Keyboard] Waldo 60 PCB Refactor (#5583)
* use pragma once

* modified readme with maintainer info

* remove rev1 for the time being

* QMK Configurator support for 60_ansi and 60_ansi_split_bs_rshift

* add hhkb layout and QMK Configurator support

* fix compile issue due to missing DEVICE_VER

* use a saner and less complicated default layout

* remove unused file

* fix up LAYOUT_all and formatting along with QKM Configurator support

* turn on bootmagic lite as the hardware reset switch isn't in a standard position

* remove default folder
2019-04-07 23:32:01 -07:00
That-Canadian
f44483f6aa Adding the Waldo PCB (PCB for the Holz keyboard) (#4817)
* Added Waldo keyboard base files and default keymap

* Updated Waldo files and added keymap for split shift and split backspace

* Updated meta-data for the Waldo board

* Apply suggestions from code review

Committing suggestions for real this time.

Co-Authored-By: That-Canadian <Poole.Chris.11@gmail.com>

* Made suggested changes that were not explicitly made.
2019-04-07 21:05:32 -07:00
fauxpark
95ebe90185 [Keymap] Change SFT_ESC keycode in default Satan keymap to KC_GESC (#5482) 2019-04-07 19:32:12 -07:00
Jan Christoph Ebersbach
eef00e4da1 [Keyboard] Add Signum 3.0 for the elite-c (#5478)
* Add keyboard Signum 3.0 for the elite-c

* Update readme.md

* Remove unused macros

* Use bootmagic lite instead of full

* Add warning to keymap.c that it's auto-generate

* Add description for customizing keyboard layouts

* Make generate_km.py executable

* Make right shift available in numpad layer

* Update keyboards/signum/3_0/elitec/readme.md

Co-Authored-By: jceb <jceb@e-jc.de>

* Update keyboards/signum/3_0/elitec/readme.md

Co-Authored-By: jceb <jceb@e-jc.de>

* Fix typo in symbol name
2019-04-07 19:20:09 -07:00
Drashna Jaelre
908966bdf3 Fixed tap/down/up handling in dynamic keymap macros (#5363)
* Fixed tap/down/up handling in dynamic keymap macros

* Added SS_TAP_CODE, SS_DOWN_CODE, SS_UP_CODE
2019-04-07 19:19:00 -07:00
Andrew Kannan
6a4c54870c [Keyboard] Instant60 Tsangan (#5580)
* Update instant60 for tsangan version

* Add extra init hook

* Remove hacky first init thing
2019-04-07 18:32:16 -07:00
fauxpark
8dd0ff6c7a Remove keyboard description from Adafruit BLE device name 2019-04-07 16:05:30 -07:00
Konstantin Đorđević
9a701632c4 [Keyboard] Remove unnecessary IS_COMMAND definition in treadstone48 (#5566) 2019-04-07 07:40:09 -07:00
MechMerlin
b262f20ad4 [Keyboard] Refactor HB85 to get rid of custom i2c code (#5570)
* remove dependency on custom i2c code

* missed a pragma once

* fix readme install instructions

* config.h cleanup

* make the bootmagic key not the same bmc reset key

* disable bootmagic functionality as it doesn't seem to work on atmega32a bmc boards
2019-04-07 07:34:31 -07:00
MechMerlin
a8e3462b4b [Keyboard] Refactor budget96 to remove custom i2c code in favor of QMK i2c_master (#5571)
* remove custom i2c code in favor of QMK i2c_master

* fix readme

* disable bootmagic as it doesn't work on bmc boards
2019-04-07 07:34:01 -07:00
Drashna Jaelre
b8f7834051 Refactor E6V2 BMC PCB to get rid of custom i2c code in favor of QMK i2c_master (#5572)
* remove custom i2c code in favor of QMK i2c_master

* clean up config file

* fix pyusb install instructions

* fix naming in usbconfig.h

* disable bootmagic as it does not work for bmc boards
2019-04-07 07:33:10 -07:00
noroadsleft
18a9f7999e [Keymap] Updates to noroadsleft keymap for KC60 (2019-04-07) (#5576)
* Update macros and keycode handling

- Update NUBS_Z macro so it repeats when held down
- Number row now uses numpad keycodes if Right Alt is being held
- coding conventions and formatting update
  - switched to four-space indent
  - reformatted a block comment

* Update readme files
2019-04-07 07:32:06 -07:00
MechMerlin
0231caa25a [Keyboard] Refactor FaceW for new BMC changes (#5575)
* use #pragma once for guards

* update readme and fix pyusb install instructions

* replace custom i2c code with QMK i2c_master

* remove unneeded code from config.h

* fix keyboard name

* remove custom matrix and i2c driver

* turn off bootmagic, turn on leds

* remove keymap in favor of userspace/community layouts keymap

* remove custom matrix

* update readme
2019-04-07 07:30:40 -07:00
mechmerlin
1b9f82c844 disable bootmagic as it does not work for bmc boards 2019-04-06 19:24:41 -07:00
mechmerlin
0baa1e2b2f fix naming in usbconfig.h 2019-04-06 18:33:32 -07:00
mechmerlin
8173db634d fix pyusb install instructions 2019-04-06 18:31:36 -07:00
mechmerlin
f6c305ba52 clean up config file 2019-04-06 18:31:00 -07:00
mechmerlin
44435d7444 remove custom i2c code in favor of QMK i2c_master 2019-04-06 18:30:15 -07:00
MechMerlin
5c1ef2bddc [Keyboard] Panc60 Refactor (#5559)
* remove unneeded uart setting

* use pragma once everywhere

* remove custom matrix support

* fixup readme

* set bootmagic to lite

* remove dependency on custom i2c code

* use the right header files and function calls
2019-04-06 18:08:57 -07:00
MechMerlin
410984486b i2c_init update to work with atmega32a boards (#5562)
* On i2c_init, enable two wire interface, twi interrupt, and slave
address ACK along with pull up resistors.

* thanks to some testing by drashna, we know that setting TWI doesn't work for all boards. Putting the new code into an ifdef block
2019-04-06 17:30:48 -07:00
Lenbok
2ffa4798a4 Fix bugs that cause compile failures when enabling only some animations. 2019-04-06 10:59:25 -07:00
Drashna Jaelre
cb33643f02 Remove user keymap changes 2019-04-05 14:58:42 -07:00
Drashna Jaelre
c9a2d9d1aa Additional cleanup of orthodox files and keymaps 2019-04-05 14:58:42 -07:00
Drashna Jaelre
a615a2ae93 Convert Orthodox to Split Common code 2019-04-05 14:58:42 -07:00
Bernard
ced2bbdac8 Add a new keyboard: NQG (#5558)
* Add new keyboard: NQG

* Delete .gitignore

.gitignore removed

Originally used to ignore .DS_Store files from being committed.

* Changed Maintainer information

Maintainer link now points to a github account.
2019-04-05 12:53:07 -07:00
Drashna Jaelre
5701b75e3c Custom Tapping Term per key (#5009)
* Add customizable tapping terms

* Add Documentation

* Fix function

* Fixes

* It's not a pointer

* Add debugging output

* Update documentation to be at least vaguely accurate

* Use `get_tapping_term(tapping_key.event)` instead

`e` doesn't include column and row information, properly. It registers as 255, regardless of the actual keypress.

However `tapping_key.event` actually gives the correct column and row information.  It appears be the correct structure to use. 

In fact, it looks like the issue is that `e` is actually the "TICK" structure, as defined in keyboard.h

* Use variable tapping term value rather than define

* Silly drashna - tapping_key.event, not event

* add get_event_keycode() function

* Fix typo

Co-Authored-By: drashna <drashna@live.com>

* Remove post_process_record_quantum since it's the wrong PR

* Update quantum/quantum.c

Co-Authored-By: drashna <drashna@live.com>

* Better handle ifdef statement for permissive hold

Since we can't be sure that tapping term is actually 500

* Update quantum.c comments based on feedback

* Clean up get_tapping_term function

Clean up function so that users don't need to call the event function, and instead only check the keycode

* Add ability to run functionality on and off

* Make ifdef's more compact
2019-04-05 15:47:25 -04:00
James Churchill
4c1760883e Update ps2avrgb template to use standard matrix/i2c code (#4957)
* Update ps2avrgb template to use standard matrix/i2c code

* Default to an 8x11 matrix in the ps2avrgb template
2019-04-05 09:20:43 -07:00
Alex Ong
dad66cad40 [Keyboard] Simplified handwired/xealous since most of the features are in core now. (#5556) 2019-04-04 21:44:33 -07:00
MechMerlin
7e5c107d43 [Keyboard] Move scrabblepad into donutcables directory (#5553)
* move scrabblepad into donutcables directory

* use pragma once

* update scrabblepad readme
2019-04-04 15:16:59 -07:00
stanrc85
60668ef39d [Keymap] Additional RGB options set (#5551)
* Add new RGB backlight options to config

* Add new RGB options
2019-04-04 14:41:55 -07:00
MechMerlin
f698f1e3f4 [Keyboard] Add Budget96 by Donut Cables (#5550)
* initial commit of budget96

* non logic changes

* add my name to readme

* update matrix.c

* make the matrix representation of the layout macro

* fix up LAYOUT macro

* add missing character

* initial keymap commit

* put KC_NO where they belong

* basic keymap

* fix matrix row and col definition

* The diagram I was sent and the pins used I was sent were in opposite order from each other. This should fix the issues

* update the readme

* change up manufacturer for budget96

* update copyright date

* fix up the switch matrix and provide a keymap

* forgot the keymap

* other matrix fixes

* missing a few keys in the switch matrix

* messed up the row tracing

* tweak keymap a bit

* use a lower case k

* fix spacing for markdown rendering

* put in the reset key documentation

* clean up the file a little

* use LAYOUT_96_ansi

* add a second layer for lighting controls

* add in lighting support

* add QMK Configurator support

* use pragma once

* remove un needed matrix.c

* convert to GPIO methods

* turn on rgblight_enable and get rid of custom matrix

* set bootloadhid_bootloader to 1

* set bootmagic to lite and set it to k50

* add reset information to readme

* use i2c_master instead of custom i2c

* restore the custom i2c code

* introduce reset key and eep_rst in function layer 1

* fix up pip3 install commands

* fix up device and manufacturer names

* remove un needed comments

* add an ALL layout macro along with QMK Configurator support

* move budget96 into donutcables directory since he actually has different boards

* add a short donut cables blurb taken from his website

* update readme for make instructions to point to the new path

* Update keyboards/donutcables/budget96/config.h

Co-Authored-By: mechmerlin <30334081+mechmerlin@users.noreply.github.com>

* Update keyboards/donutcables/budget96/readme.md

Co-Authored-By: mechmerlin <30334081+mechmerlin@users.noreply.github.com>

* Update keyboards/donutcables/budget96/info.json

Co-Authored-By: mechmerlin <30334081+mechmerlin@users.noreply.github.com>

* turn on backlight

* Update keyboards/donutcables/budget96/readme.md

Co-Authored-By: mechmerlin <30334081+mechmerlin@users.noreply.github.com>

* remove extra UART and BOOTLOADER settings that are not needed
2019-04-04 14:25:35 -07:00
Wilba
852d125413 [Keyboard] Added configurable defaults for RGB backlight parameters. (#5549)
* Added configurable defaults for RGB backlight indicators.

* Added more configurable defaults
2019-04-04 07:10:07 -07:00
Deckweiss
3c7cb5cf5d Added Hacked Motospeed keyboard (#5534)
* Added first configuration for handwired hacked motosped keyboard

* Added first keymap

* Fixed h file key layout

* Swapped Y and Z in default keymap

* Added name, email and description

* Moved hacked motospeed keyboard to handwired

* Changed make command in readme

* Formatted readme to be displayed properly with markdown

* Formatted keymap and layout to better reflect the physical keyboard

* Fixed info.json

* Update keyboards/handwired/hacked_motospeed/info.json

Co-Authored-By: Deckweiss <Deckweiss75@gmail.com>

* Removed .directory from .gitignore

Co-Authored-By: Deckweiss <Deckweiss75@gmail.com>

* Minor changes and cleanup

* Update keyboards/handwired/hacked_motospeed/hacked_motospeed.h

Added back newline needed for properly parsing

Co-Authored-By: Deckweiss <Deckweiss75@gmail.com>
2019-04-04 06:05:06 -07:00
stanrc85
76d982feba [Keymap] New HS60/v2 HHKB keymap for goatmaster (#5545)
* Adding new keymap folder for goadmaster

* add switch break

* zeal60 rgb backlight files

* modified for red caps lock key

* Remove return statement

* Files removed

* Add new RGB options

* Back to original file
2019-04-03 22:57:41 -07:00
marksard
debd902a3d [Keyboard] add treeadstone48 (#5405)
* Keyboard: add treeadstone48

* rename layout defines

* Use of pragma once

* move common include code

* fixed info.json

* change keymap layout from kc to normal

* fix alpha revision keymap

* fixed info.json

* remove USE_Link_Time_Optimization
2019-04-03 22:56:22 -07:00
Nicholas Shaff
4f4fad8373 [Keyboard] Doro67 Multi PCB port (#5539)
* Initial portover of the doro68.json with corrected column pins.

* Initial setup of LAYOUT_ansi and it's use in the default keymap.

* Added F keys to default kemap on layer 1.

* Added split space (and everything else) layout and a base keymap to be updated.

* Renamed split_space to multi.

* Changed product_id for doro.

* Created a basic doro LAYOUT_iso and default keymap.

* Copied over basic layout and keymap.

* Added readme.md for doro67 multi.

* Removed basic keyboad layout and keymap because it's a separate PCB.

* Added backlight controls to the various keymaps.

* Added explicit backlight pin define.

* Increased number of backlight levels for flexibility.

* Removed unnecessary line slashes and unified keymcaps.

* Corrected ISO layout and switched position with multi.

* Added keymap readme.md files.

* Corrected ISO keymap.

* Added Layouts to info.json for toolbox.

* Re-added slashes as they were necessary here...

* Corrected info.json/keymap discreptancies.

* Updated copyright messages (and fixed small readme error).

* Added missing line break spaces in readme.md

Co-Authored-By: ShadeDream <nick@shadedream.com>

* Keymap alignments on default_multi readme.md

Co-Authored-By: ShadeDream <nick@shadedream.com>

* Keymap alignments on default_multi readme.md

Co-Authored-By: ShadeDream <nick@shadedream.com>

* Keymap alignments on default_multi readme.md

Co-Authored-By: ShadeDream <nick@shadedream.com>

* Small alignment adjustment on the default keymap readme.md

Co-Authored-By: ShadeDream <nick@shadedream.com>
2019-04-03 22:54:30 -07:00
MechMerlin
b463415d84 [Keyboard] V60 Type R - Turn on leds for Configurator + Refactor (#5546)
* use pragma once where applicable

* remove ?

* update default keymap readme

* remove un need include

* update readme with newbs guide

* set underglow and backlight to be on by default, and explicitly set them to no for the default keymap to handle the non Polestar case.

* put mine and benlyall's name in the code

* update readme
2019-04-03 18:35:53 -07:00
Daniel Prilik
763b26cdb9 RGB Matrix support for Massdrop CTRL/ALT (#5328)
* port Massdrop CTRL/ALT to use RGB Matrix

Co-authored-by: Matt Schneeberger <helluvamatt@gmail.com>

* Massdrop lighting support working

This commit is to get the Massdrop lighting code working again through use of the compilation define USE_MASSDROP_CONFIGURATOR added to a keymap's rules.mk.
Added keymaps for both CTRL and ALT named default_md and mac_md. These should be used if the Massdrop style lighting is desired.

* Updating config based on testing results with patrickmt & compile errors

* Updates for PR5328

For CTRL and ALT:
Moved location of new RGB Matrix macros from config_led.h to config.h.
Added RGB_MATRIX_LED_FLUSH_LIMIT (time between flushes) to config.h for correct LED driver update timing.
Re-added missing breathing code for when Massdrop configurator mode is defined.

* remove prilik keymap form PR
2019-04-03 18:30:47 -07:00
XScorpion2
63177760de Added encoder support to split common code (#5477)
* Added slave encoder support to split common

* Fixing handwired/xealous/rev1 compile error

* Removed unnecessary ifdef
2019-04-03 16:01:17 -07:00
Alex Ong
17e7762de7 Eager Per Row Debouncing added (added to Ergodox) (#5498)
* Implemented Eager Per Row debouncing algorithm.

Good for when fingers can only press one row at a time (e.g. when keyboard is wired so that "rows" are vertical)

* Added documentation for eager_pr

* Ported ergodox_ez to eager_pr debouncing.

* Removed check for changes in matrix_scan.

* Added further clarification in docs.

* Accidental merge with ergodox_ez

* Small cleanup in eager_pr

* Forgot to debounce_init - this would probably cause seg-faults.
2019-04-03 14:45:55 -07:00
Drashna Jaelre
e1e08a494b Merge pull request #5536 from stanrc85/feature/updates
[Keymap] Config tweaks and adding zeal60 RGB files to userspace
2019-04-03 10:25:09 -07:00
Wilba6582
eb0bbe997b Added configurable defaults for RGB backlight indicators. 2019-04-03 10:24:40 -07:00
MechMerlin
cb2f2fd258 [Keyboard] Small Refactor of Duck boards (#5521)
* first [ass at pulling out common duck library functions

* use new library in jetfire

* use new library in duck lightsaver

* use new library in octagon v2

* put Device into the library

* refactor send_value

* refactor send_value and send_color

* use pragma once

* use pragma once

* use pragma once

* use pragma once

* rename backlight_led to indicator_leds to match with other duck boards

* rename enum

* make #define names consistent

* rename ducklib to duck_led

* update rules.mk ?= to =

* put rgb in the correct order

* add debounce debugging printouts

* turn on bootmagic lite and set it to the top left most key commonly programmed as Escape

* add reset key documentation

* fix that typo

* Update keyboards/duck/duck_led/duck_led.c

Co-Authored-By: mechmerlin <30334081+mechmerlin@users.noreply.github.com>

* include the correct library
2019-04-03 10:17:25 -07:00
MechMerlin
caefb1c61e [Keyboard] Quantrik Kyuu 65% Board (#5541)
* initial commit

* get rid of some of the vanilla cookie cutter code

* Put in the matrix size and the pins

* add LAYOUT macro and a suitable keymap

* Add QMK Configurator support

* set bootmagic to lite

* put a RESET key into the default keymap

* edit kyuu readme file for description and quantrik.com link

* Update keyboards/quantrik/kyuu/config.h

Co-Authored-By: mechmerlin <30334081+mechmerlin@users.noreply.github.com>

* fix captilization of keyboard name

* fix keymap wrapping issue and add MO key

* preserve RESET key location

* use one of the macros
2019-04-03 09:47:55 -07:00
stanrc85
0e10a66c05 Call default zeal60 rgb file 2019-04-03 09:21:04 -04:00
stanrc85
67793b3912 remove call to custom rgb file 2019-04-03 09:19:22 -04:00
stanrc85
1a625ae2c0 Removed duplicated zeal60 files 2019-04-03 09:18:00 -04:00
moyi4681
6c86577237 [Keyboard] fix dz60rgb response speed (#5540) 2019-04-02 20:41:00 -07:00
stanrc85
ca19cd8bb8 remove uneeded returns floating around 2019-04-02 20:33:17 -04:00
XScorpion2
c98247e3dd RGB Matrix Overhaul (#5372)
* RGB Matrix overhaul
Breakout of animations to separate files
Integration of optimized int based math lib
Overhaul of rgb_matrix.c and animations for performance

* Updating effect function api for future extensions

* Combined the keypresses || keyreleases define checks into a single define so I stop forgetting it where necessary

* Moving define RGB_MATRIX_KEYREACTIVE_ENABLED earlier in the include chain
2019-04-02 17:24:14 -07:00
stanrc85
3cfa24c684 Adding zeal60 rgb files with modifications 2019-04-02 19:57:22 -04:00
stanrc85
387ede9e6b Tweaking tapping_term value 2019-04-02 19:56:28 -04:00
stanrc85
813d79bac6 Use modified rgb_backlight.c file 2019-04-02 19:56:11 -04:00
Jack
68d8bb2b3f [Keyboard] Add handwired keyboard "Tennie" (#5507)
* Add tennie

* Jacobs Functions

* Switch back to normal layout

* Remove define from old template

* Fix broken keymaps

* Correct style errors, add bootlite

* Update readmes. Rename test keymap

* Missed comma

* Switch rgb from init to post init
2019-04-02 16:13:08 -07:00
DDRnJn
61b2f2b16e Added some new songs (#5525)
Added Fantasie Impromptu and Nocturne Op. 9 No. 1 in B flat minor by Chopin
Added Isabella's Lullaby from The Promised Neverland
Added Renai Circulation and Platinum Disco from Monogatari
Added Terra's theme from Final Fantasy 6
2019-04-02 11:51:28 -07:00
David Rambo
b23752c840 [Keymap] Minor update to my XD75 keymap (#5531)
* Updated iris, planck, and xd75 keymaps

* Added brightness down and up to commented layout of Symbol layer.

* updated config files for planck and iris

* removed unnecessary include lines from iris and planck config files

* updated XD75's PC layer and its NAVPC toggle layer

* fixed typo in alias declaration for C_BSPS

* changed alias names for BSPC toggle keys
2019-04-02 11:50:22 -07:00
stanrc85
e6b3bef077 Adjusting tapping term 2019-04-02 12:25:36 -04:00
Nicolas CARPi
448d3ad8de [Keymap] Add alternate bépo layout for Ergodox EZ (#5524)
The other bépo layouts were a bit too complex/weird or without LED code
and hard to transition to for new users. This config is a good base for
bépo users.
2019-04-01 21:18:06 -07:00
AbstractKB
8b8d69f0df [Keymap] Updated my personal keymaps for the bfo9000 and jj50 (#5508)
* Updated my personal keymaps for the bfo9000 and jj50

* fixed best practices mistakes
2019-04-01 20:58:47 -07:00
Garret G
fbee737ff3 [Keyboard] add support for romac macropad (#5530)
* add support for romac macropad

* Update info.json

fixed total key_count

* Update keymap.c

* Update keymap.c

* Update README.md

* Update config.h

* Update romac.h

* Update romac.h

* Update romac.h

* Update rules.mk

* Update config.h

* Update README.md

* Update romac.h

* Update README.md

* Update README.md

* Update README.md

* Update config.h

* Update config.h

* Update config.h

* Update info.json

* Update info.json

* Update info.json

* Update keymap.c

* Update keymap.c

* Update keymap.c

* Update README.md

* Update README.md

* Update README.md

* Update config.h

* Rename README.md to readme.md

* Update rules.mk

* Update config.h

* Delete .gitattributes

* Update romac.h

* Update config.h

* Update config.h

* Update keymap.c

* Update keymap.c

* Update keymap.c

* Update readme.md

* Update readme.md

* Update readme.md

* Update info.json

* Update config.h

* Update config.h

* Update config.h

* Update readme.md
2019-04-01 20:31:38 -07:00
zvecr
40c6269f9f Fix typo in keyboard_post_init_user example, remove EPRM from Persistent Configuration (EEPROM) (#5528) 2019-04-01 11:32:39 -07:00
Alex Mayer
58b065cfda 1UP Keyboards: Use Right Variant Of Keys On Right Side Of Board (#5529) 2019-04-01 09:02:30 -07:00
yfuku
3654d0f080 [Keyboard] add claw44 keyboard (#5511)
* add claw44 keyboard

* Update keyboards/claw44/lib/layer_state_reader.c

Co-Authored-By: yfuku <30647434+yfuku@users.noreply.github.com>

* Update keyboards/claw44/lib/layer_state_reader.c

Co-Authored-By: yfuku <30647434+yfuku@users.noreply.github.com>

* Update keyboards/claw44/lib/layer_state_reader.c

Co-Authored-By: yfuku <30647434+yfuku@users.noreply.github.com>

* Update keyboards/claw44/lib/layer_state_reader.c

Co-Authored-By: yfuku <30647434+yfuku@users.noreply.github.com>

* Update keyboards/claw44/readme.md

Co-Authored-By: yfuku <30647434+yfuku@users.noreply.github.com>

* Remove unnecessary code because of default value

* Move layer definition

* Update keyboards/claw44/keymaps/default/keymap.c

Co-Authored-By: yfuku <30647434+yfuku@users.noreply.github.com>

* Update keyboards/claw44/keymaps/yfuku/keymap.c

Co-Authored-By: yfuku <30647434+yfuku@users.noreply.github.com>

* Update keyboards/claw44/readme.md

Co-Authored-By: yfuku <30647434+yfuku@users.noreply.github.com>

* default keymap. LAYOUT_kc -> LAYOUT macro

* Move rules.mk from keymaps to keyboard level.

* add Hardware Supported, Hardware Availability

* Update keyboards/claw44/keymaps/default/keymap.c

Co-Authored-By: yfuku <30647434+yfuku@users.noreply.github.com>

* Update keyboards/claw44/keymaps/yfuku/keymap.c

Co-Authored-By: yfuku <30647434+yfuku@users.noreply.github.com>

* Remove depreciated function
2019-03-30 12:16:18 -07:00
David Rambo
4f7dd9edf8 [Keymap] Updated my iris, planck, and xd75 keymaps (#5515)
* Updated iris, planck, and xd75 keymaps

* Added brightness down and up to commented layout of Symbol layer.

* updated config files for planck and iris

* removed unnecessary include lines from iris and planck config files
2019-03-30 11:05:31 -07:00
Mikhail Goncharov
93210547bd Update build instructions and Dockerfile to download submodules 2019-03-30 10:48:09 -07:00
Wilba
b846c25a56 [Keyboard] Added RAMA KOYU (#5512)
* Initial commit of RAMA KOYU

* Changed default layout

* removed IS_COMMAND()
2019-03-29 22:13:28 -07:00
Wilba6582
d15bb05c93 Added SS_TAP_CODE, SS_DOWN_CODE, SS_UP_CODE 2019-03-30 14:24:13 +11:00
jotix
3f9d20032a [Keyboard] Update jot50 readme.md (#5510) 2019-03-29 11:21:19 -07:00
Jeremy Bernhardt
8fa9f67256 [Keyboard] ErgoTaco Support (#5504)
* ErgoTaco support

* Update keyboards/ergotaco/ergotaco.h

Co-Authored-By: germ <jeremythegeek@gmail.com>

* Update keyboards/ergotaco/keymaps/default/keymap.c

Co-Authored-By: germ <jeremythegeek@gmail.com>

* Update keyboards/ergotaco/keymaps/default/keymap.c

Co-Authored-By: germ <jeremythegeek@gmail.com>

* Update keyboards/ergotaco/readme.md

Co-Authored-By: germ <jeremythegeek@gmail.com>

* Update keyboards/ergotaco/readme.md

Co-Authored-By: germ <jeremythegeek@gmail.com>

* Update keyboards/ergotaco/rules.mk

Co-Authored-By: germ <jeremythegeek@gmail.com>

* juggling rules.mk

* Update keyboards/ergotaco/rules.mk

Co-Authored-By: germ <jeremythegeek@gmail.com>

* updating IS_COMMAND

* learning2english


Meme-tastic --Drashna
2019-03-29 10:39:28 -07:00
Brian Choromanski
3f4d706c98 Fixing dead links (#5503)
* Fixed typo of 'confid.h' to 'config.h'

* Fixed broken links in docs

* Fixed a lot of dead links

* Removed all dead links that I could not find a replacement for

* Placed knops links back in

* Fixed plank keymaps so that they will compile for planck light

* Https doesn't work on knops.io

* tv44:budi now compiles

* s60_x:amnesia0287 now compiles

* Fixed allocation of key_combos so that narze keymap for planck can compile correctly

* Disabled rgb on ergodone and infinity

* Enabled tap dance so it compiles

* Added return statement so it compiles

* If compiling on light disable extra functionality

* Properly redefined variable so it compiles

* Remove remaining dead links
2019-03-29 06:20:25 -07:00
tomholford
4fa7c9f1d0 [Keymap] addition: macro for "screenshot region to clipboard" in macOS (#5505)
* Create custom Planck Light keycap

See README for details

* Link to WhatPulse in README

* More remapping, and add RGB LED effects

* Remove dead code, address PR feedback from @drashna

* Add macro for “screenshot region to clipboard” hotkey for macOS

Also remove unused layer / key logic

* Remove extraneous comment

* Incorporate PR feedback from @drashna.

Update README with new mapping.
2019-03-28 15:31:39 -07:00
MechMerlin
6f6ab261e6 [Keyboard] revert back to the old custom i2c code for bmc (#5501) 2019-03-28 12:52:57 -07:00
stanrc85
2352afb383 [Keymap] Add custom macro to launch RDP (#5502)
* Add keycodes for new macros to keymaps

* add macros for commonly used shortcuts

* FIx macro code and add comments

* Replaced with build in QMK keycodes

* Removed macros that duplicated QMK keycodes
2019-03-28 11:46:34 -07:00
Drashna Jaelre
188a1e66ff Update KBD67 readme so that it mentions the KBD65 PCB (#5143)
* The code in this directory supports the KBD65

* Update readme.md

* Update readme.md

* Clear up the confusion between the kbd67/kbd65 naming.

* Update keyboards/kbdfans/kbd67/readme.md

Co-Authored-By: Hackerpilot <briancschott@gmail.com>
2019-03-27 22:13:29 -07:00
MechMerlin
04684a94ef [Keyboard] E6V2 Bootmapper Client QMK port (#5495)
* initial commit of e6v2 bmc files

* update readme with bmc template and reset key location

* fix up the switch matrix

* add usbconfig.h file

* add i2c files

* cleanup config.h

* cleanup rules.mk and remove non atmega32a architecture code

* add an appropriate keymap for testing

* update readme with warning not to flash this hex file onto atmega32u4 e6v2

* get rgb lights working

* add QMK Configurator support for 60_ansi layout

* add hhkb support layout

* add additional layouts such as tsangan and all and included QMK Configurator support for them

* add bootmagic lite, and have it be set to Esc or the key located at k50

* update readme

* fixup spacing for LAYOUT_all electrical matrix

* add some pragma once magic

* use i2c_master instead of custom i2c.c

* remove the custom i2c.c

* restore a more valid default keymap

* add eep_rst to keymap
2019-03-27 22:12:17 -07:00
kwerdenker
67ca9e0c85 [Keymap] Add kwer keymap and RGB mod description to cypher (#5479)
* Add kwer keymap and RGB mod description to cypher

* Add custom led_set_user to keymap

* Remove unneccessary include path from keyboards/westfoxtrot/cypher/keymaps/kwer/keymap.c

Co-Authored-By: kwerdenker <sebastian.spindler@gmail.com>
2019-03-27 10:39:23 -07:00
dsanchezseco
c98380e0dd [Keymap] added user keymap (#5499) 2019-03-27 10:15:40 -07:00
Takeshi ISHII
b9f6ff05d0 build size-check enhancement (#5485)
* build size-check enhancement

Changed to display a warning when the free size of compilation result is less than 512 bytes.

* update message.mk

* add SIZE_MARGIN variable, change default margin 512 to 1024

for Example.
```
$ make SIZE_MARGIN=2048 crkbd:all
$ make crkbd:all ## mergin is 1024
```

* Update message.mk

change message to ‘approaching the maximum’

Co-Authored-By: mtei <2170248+mtei@users.noreply.github.com>
2019-03-27 08:51:56 -07:00
Danny
6f124b7909 [Keyboard] Add Collide39 keyboard (#5486)
* Add Collide39 keyboard

* Remove unneeded lines
2019-03-27 08:50:28 -07:00
Rob Rogers
2519de92b5 [Docs] Add udev rule for Input Club bootloaders (#5494)
* Add udev rule for Input Club bootloaders

* match style with file name above udev rule
2019-03-27 08:42:03 -07:00
martinmksiu
795c2c27b9 [Keymap] adding keymaps (#3583)
* add key map

* QWERTY with 40% layers

* updated line 21

updated line 21 from "#include "xd75.h" to "#include QMK_KEYBOARD_H" as requested

* upload contra folders

* Update .directory

* Update config.h

* Update config.h

* Update keymap.c

* Update config.h

* Update rules.mk

* Update keyboards/contra/keymaps/martin_bac/config.h

Co-Authored-By: martinmksiu <martinmksiu@gmail.com>

* Update keyboards/xd75/keymaps/martin_cennum/config.h

Co-Authored-By: martinmksiu <martinmksiu@gmail.com>

* Delete .directory

* upload

* Delete rules.mk

* Update keyboards/contra/keymaps/msiu/config.h

Co-Authored-By: martinmksiu <martinmksiu@gmail.com>

* Update keyboards/katana60/keymaps/msiu/config.h

Co-Authored-By: martinmksiu <martinmksiu@gmail.com>

* Update keyboards/katana60/keymaps/msiu/config.h

Co-Authored-By: martinmksiu <martinmksiu@gmail.com>

* Update keyboards/katana60/keymaps/msiu/config.h

Co-Authored-By: martinmksiu <martinmksiu@gmail.com>

* Update keyboards/katana60/keymaps/msiu/config.h

Co-Authored-By: martinmksiu <martinmksiu@gmail.com>

* Delete nano.save

* Delete rules.mk

* Update keymap.c

* Update keymap.c

* Update config.h

* Update keyboards/lets_split_eh/keymaps/msiu/keymap.c

Co-Authored-By: martinmksiu <martinmksiu@gmail.com>

* Update keyboards/lets_split_eh/keymaps/msiu/keymap.c

Co-Authored-By: martinmksiu <martinmksiu@gmail.com>

* Update keymap.c

* Update keyboards/planck/keymaps/msiu/config.h

Co-Authored-By: martinmksiu <martinmksiu@gmail.com>

* Apply suggestions from code review

Co-Authored-By: martinmksiu <martinmksiu@gmail.com>

* Update keymap.c

* Update readme.md

* Update keymap.c
2019-03-26 20:22:56 -07:00
Jon Arintok
346cbd8816 Add 3 speed mousekey movement option (#2246)
This allows for constant, non-accelerated mouse movement, while retaining the original functionality. Configurable by a define.
2019-03-26 19:34:33 -07:00
Fabien Culpo
509668ca7c [Keymap] add redox/rev1:fculpo keymap (#5491) 2019-03-26 18:41:37 -07:00
Danny
d8371b3380 [Keymap] Update iris default (#5489)
* Update Iris default to include KC_GRV on base layer and match Configurator default

* Update default config
2019-03-26 18:40:01 -07:00
zvecr
9ef21d2e1c Refactor staryu to current standards and enable support for backlight keycodes (#5487) 2019-03-26 18:39:09 -07:00
Ryan Caltabiano
a0270b55e1 Fixing Ergodox_EZ rgb_led initialization 2019-03-26 16:34:02 -07:00
DDRnJn
b90df560f8 Added songs from Nier and Nier Automata
Added song of the ancients and kaine salvation fron Nier
Added Amusement park, Copied city, Vague Hope cold rain and weight of the world from Nier Automata
2019-03-24 17:13:07 -07:00
fauxpark
3510d8dc8d Document an annoyance with Grave Escape and macOS Terminal (#5483) 2019-03-24 17:11:26 -07:00
Max
f1d921bee6 Bugfix for recently integrated cypher keyboard (#5481)
* fixed issue with LED indicators
corrected error in info.json

* fixed issue with led indictors
2019-03-24 14:00:48 -07:00
Takeshi ISHII
bfc16765f4 add keyboards/mxss/rgblight.h from e661f1559:quantum/rgblight.h (#5461)
This PR is cherry-pick from 90b9a1aa7d in PR #5020.

@MxBlu copied quantum/rgblight.c to keyboards/mxss/rgblight.c on July 8, 2018. At that time, I think it would be better to copy quantum/rgblight.h at the same time.
Because if someone makes a change to `quantum/rgblight.[ch]` that is incompatible with the past, it may cause problems with the compilation of keyboards/mxss.
(Like when I changed the prototype of the `rgblight_effect_XXX()` functions of rgblight.c in PR #5020.)
2019-03-23 22:23:50 -07:00
Rob Hilgefort
74e05f3451 [Keymap] Planck Keymap :: rjhiglefort (#5059)
* copy default over as starting point

* Getting rid of dvorak and colemak for now, added a couple changes to the
keymap

* removed refs to bad layers, formatting comments

* First version of my ergodox ported layout!

* Symbols layer, media layer, updated comments

* Hyper as a single key

* Fix stuck hyper key when switching layers

* Tweak some annoying things about the layout.

- move raise left and promote alt
- remove swap keys on the last layer
- reorganize media keys so they're easier to reach and more intuitive
- fix some comment template things

* Add readme for rjhilgefort planck layout

* readme tweak

* PR feedback changes
2019-03-23 17:22:40 -07:00
Danny
f077204fae Add support for RGB LEDs wired directly to each half's controller (#5392)
* Add support for wiring RGB LEDs for both halves directly to their respective controllers

RGB LEDs for each half don't need to be chained together across the TRRS cable with this

* Add split RGB LED support for serial

* Update config/rules for bakingpy layout

* Un-nest ifdefs for hand detection

* Read RGB config state from memory instead of EEPROM for serial updates

* Reuse existing LED pointer instead of creating new one
2019-03-23 17:20:14 -07:00
Max
23086808a7 [Keyboard] added cypher keyboard support (#5466)
* added the cypher qmk configuration

* Update keyboards/westfoxtrot/cypher/cypher.h

Co-Authored-By: westfoxtrot <17062872+westfoxtrot@users.noreply.github.com>

* Update keyboards/westfoxtrot/cypher/cypher.h

Co-Authored-By: westfoxtrot <17062872+westfoxtrot@users.noreply.github.com>

* Update keyboards/westfoxtrot/cypher/cypher.h

Co-Authored-By: westfoxtrot <17062872+westfoxtrot@users.noreply.github.com>

* Update keyboards/westfoxtrot/cypher/cypher.h

Co-Authored-By: westfoxtrot <17062872+westfoxtrot@users.noreply.github.com>

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

Co-Authored-By: westfoxtrot <17062872+westfoxtrot@users.noreply.github.com>

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

Co-Authored-By: westfoxtrot <17062872+westfoxtrot@users.noreply.github.com>

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

Co-Authored-By: westfoxtrot <17062872+westfoxtrot@users.noreply.github.com>

* Update keyboards/westfoxtrot/cypher/info.json

Co-Authored-By: westfoxtrot <17062872+westfoxtrot@users.noreply.github.com>

* Update keyboards/westfoxtrot/cypher/info.json

Co-Authored-By: westfoxtrot <17062872+westfoxtrot@users.noreply.github.com>

* Update keyboards/westfoxtrot/cypher/keymaps/default-iso/keymap.c

Co-Authored-By: westfoxtrot <17062872+westfoxtrot@users.noreply.github.com>

* Update keyboards/westfoxtrot/cypher/keymaps/default-iso/keymap.c

Co-Authored-By: westfoxtrot <17062872+westfoxtrot@users.noreply.github.com>

* Update keyboards/westfoxtrot/cypher/keymaps/default-iso/keymap.c

Co-Authored-By: westfoxtrot <17062872+westfoxtrot@users.noreply.github.com>

* Update keyboards/westfoxtrot/cypher/readme.md

Co-Authored-By: westfoxtrot <17062872+westfoxtrot@users.noreply.github.com>

* Update keyboards/westfoxtrot/cypher/readme.md

Co-Authored-By: westfoxtrot <17062872+westfoxtrot@users.noreply.github.com>

* made modifications as per requests

* removed endif from cypher.h
2019-03-23 11:13:59 -07:00
tomholford
3529384c12 [Keymap] Add custom Planck Light keymap (#5464)
* Create custom Planck Light keycap

See README for details

* Link to WhatPulse in README

* More remapping, and add RGB LED effects

* Remove dead code, address PR feedback from drashna
2019-03-22 21:26:32 -07:00
stanrc85
3a7816843c [Keymap] New tap dance code added to userspace and keymaps (#5468)
* Adding new tap dance key

* Adding new tap dance code

* add code for copy/paste to tap dance

* testing tap dance enums

* New tap dance keycodes

* Fix enums
2019-03-22 20:50:56 -07:00
wanleg
1dda671e4a ISP Flashing Guide - atmega32a info (#4993)
* update isp flashing page

* update isp flashing page
2019-03-22 18:26:21 -07:00
moonfall
f8d5b9f204 [Keymap] iris: moonfall: Initial checking of layout. (#5462)
Layout is similar to Kinesis/Ergodox.
2019-03-21 20:14:40 -07:00
noroadsleft
dfe02441bb handwired/magicforce61 Refactor (#5459)
* handwired/magicforce61: refactor

Renamed layout macro KEYMAP to LAYOUT.

Keymap now uses #include QMK_KEYBOARD_H.

Refactored the default keymap to use non-auto-prepended keycodes per QMK standard.

Deleted deprecated action_get_macro block (was unused).

* handwired/magicforce61: Configurator support

* handwired/magicforce61: readme cleanup

Restructured the readme to be more similar to current QMK template.

* handwired/magicforce61: replace missing image in readme

Replaced the missing wiring image (error 404) with a table.

* handwired/magicforce61: rename readme to lowercase

* Convert config.h to #pragma once include guard
2019-03-21 06:06:27 -07:00
KOBAYASHI Daisuke
6e4edbd157 Keymap: Add Koba's keymap for KBD67. (#5460) 2019-03-21 06:05:50 -07:00
noroadsleft
7e37daab6e Update keyboards/kbdfans/kbd67/readme.md
Co-Authored-By: Hackerpilot <briancschott@gmail.com>
2019-03-20 17:09:00 -07:00
Takeshi ISHII
f7fd7f67bd rgblight.c: add remap feature (#5243)
* rgblight.c: add RGBLIGHT_LED_MAP support

* add code to keyboards/helix/rev2/keymaps/five_rows/config.h to test rgblight.c:RGBLIGHT_LED_MAP

* Test end. Revert "add code to keyboards/helix/rev2/keymaps/five_rows/config.h to test rgblight.c:RGBLIGHT_LED_MAP"

This reverts commit e7488d6f73.

* update docs/feature_rgblight.md

* led_map[] move to PROGMEM
2019-03-20 16:55:24 -07:00
Felipe Coury
d5fd8c4f1c Uses K(row)(col) standard for TGR Alice matrix (#5457) 2019-03-20 15:48:44 -07:00
noroadsleft
0786f227d8 [Keyboard] Refactor MF68 default keymap to use LAYOUT_68_ansi macro (#5455) 2019-03-20 13:26:50 -07:00
MechMerlin
995b31a565 [Keyboard] HB85 Refactor/Layout Addition (#5451)
* introduce stt layout with K(row)(col)

* set bootmagic to lite

* Rename the original LAYOUT to LAYOUT_all
Introduce the STT layout

In additional the whole matrix was changed to support the K(row)(col) notation.

* rename LAYOUT to LAYOUT_all

* add QMK Configurator support

* stt keymap based on mrpetrov's default configuration on the hb85 he lent me

* update readme

* introduce basic and aop layouts along with QMK Configurator support for them

* add a new line

* add EEP_RST to layer 1 as it is needed to get rgb underglow to work

* add documentation on how to reset the eeprom on the board

* put contributors names where appropriate
2019-03-20 10:39:57 -07:00
jotix
066465fa6f [Keymap] jotix layouts adjustments (#5453) 2019-03-20 10:38:39 -07:00
James Churchill
cd696ed3d1 Fix i2c splits with >8 columns (#5454) 2019-03-20 07:43:36 -07:00
fauxpark
ab29481391 Fix link to Caterina bootloader hex files (#5452) 2019-03-20 07:43:20 -07:00
Jason Won
6eb5a25a6a [Keyboard] add quantum matrix calls to zen matrix calls (#5450) 2019-03-19 19:51:08 -07:00
jotix
8b859872da [Keymap] Jotix (#5448)
* jotix layout adjustments

* jotix layout readme
2019-03-19 19:46:54 -07:00
stanrc85
6e7eff47b3 [Keymap] Keymap and readme updates (#5449)
* Remove tap dance code from keymap.c

* Add tap dance code to userspace files

* Readme updates

* Update keymap images
2019-03-19 19:45:33 -07:00
Boy_314
4b4eba997f [Keymap] Boy_314's Halfnhalf layout update (#5441)
* added Boy_.314's layout for halfnhalf keyboard

* reset rules.mk to default

* update keymap with qwerty layout, and enable tap dancing

* fixed formatting in layout visualization

* added rules.mk to custom layout

* added mod tap for ctrl/capslock

* fixed typo in config.h, remove excess in rules.mk, revert half_n_half rules.mk

* added Boy_.314's layout for halfnhalf keyboard

* reset rules.mk to default

* update keymap with qwerty layout, and enable tap dancing

* fixed typo in config.h, remove excess in rules.mk, revert half_n_half rules.mk

* added macros to raise layer

* fixed mismatched layout/comments

* fixed layout switching
2019-03-19 14:34:18 -07:00
Konstantin Đorđević
6a4884e3bd [Keyboard] Remove unnecessary IS_COMMAND definitions from a couple of boards (#5269)
* Remove unnecessary IS_COMMAND definition from clueboard/66_hotswap/gen1

* Remove old-style IS_COMMAND definition comment from dozen0

* Use get_mods() instead of keyboard_report->mods in georgi
2019-03-19 14:33:44 -07:00
Drashna Jaelre
0072fdd799 Cleanup Default Keymaps (#5442)
* Cleanup Default Keymaps to conform to QMK Firmware standards

* Minor fixes

* Revert some changes
2019-03-19 12:57:40 -07:00
Drashna Jaelre
29bfd634e1 Fix dk60 compiler issue on newer compiler versions (#5444) 2019-03-19 07:37:22 -07:00
Rob Rogers
afdc67184d correct typo in eeprom split target for dfu (#5445) 2019-03-18 23:25:34 -07:00
Drashna Jaelre
161d469f2c [Docs] Recursively clone qmk_firmware repo (#5378)
* Recursively clone qmk_firmware repo

Specifically, so that it grabs the submodules, since ARM keyboards are becoming more common, and we are seeing more issues about chibiOS not being downloaded (in the error log, rather than by question)

* Wrap in shell
2019-03-18 14:22:33 -07:00
Drashna Jaelre
c534a4c775 [Docs] Smallish overhaul of the docs (#5281)
* Fix up Common functions doc

* Add to extra commands to flashing doc

* Rearrange and touch up Macros

* Expand Newbs Flashing guide

* Update process_record documentation

* Add git to best practices name in sidebar

* Expand FAQ for build/flashing

* Add deprecated info to functions

* Update docs/feature_macros.md

Co-Authored-By: drashna <drashna@live.com>

* Update docs/feature_macros.md

Co-Authored-By: drashna <drashna@live.com>

* Update docs/flashing.md

Co-Authored-By: drashna <drashna@live.com>

* Update docs/flashing.md

Co-Authored-By: drashna <drashna@live.com>

* Update docs/keymap.md

Co-Authored-By: drashna <drashna@live.com>

* Update docs/newbs_flashing.md

Co-Authored-By: drashna <drashna@live.com>

* Update docs/newbs_flashing.md

Co-Authored-By: drashna <drashna@live.com>

* Update docs/custom_quantum_functions.md

Co-Authored-By: drashna <drashna@live.com>

* Update docs/faq_build.md

Co-Authored-By: drashna <drashna@live.com>

* Update docs/feature_macros.md

Co-Authored-By: drashna <drashna@live.com>

* Update docs/keymap.md

Co-Authored-By: drashna <drashna@live.com>

* Fix up Common functions doc

* Make pre-init example accurate

* Update docs/custom_quantum_functions.md

Co-Authored-By: drashna <drashna@live.com>

* Zadig Driver catchall

* Spelling Depriciated

* Completely remove fn_actions section
2019-03-18 14:22:02 -07:00
Drashna Jaelre
28e182bc8a [Keyboard] Reduce compile size of the Lily58 Keyboard (#5412) 2019-03-18 14:21:10 -07:00
Drashna Jaelre
4f0dc945c3 [Docs] Add music_map to audio documentation (#5419)
* [Docs] Add music_map to audio documentation

* Add link to planck as example
2019-03-18 14:20:30 -07:00
Luciano Malavasi
618718e042 [Keymap] PyroL's TMO50 layout update (#5435)
* keymap + alpha

* some fixes

* keymap + alpha

* some fixes

* drashna changes

* linked main Alpha repo in keyboards/alpha readme

* missed a spot

* there's another function called FUNC lol

* keymap + alpha

* some fixes

* keymap + alpha

* drashna changes

* Fixed include

* Revert "Fixed include"

This reverts commit ea92f261f8.

* messed up my git, fixed include

* starting work on TMO50 layout

* Update keyboards/tmo50/keymaps/default/keymap.c

Co-Authored-By: PyrooL <lm11887@gmail.com>

* Updated PyroL's TMO50 keymap

* Added task manager/Ctrl Alt Del that i stole from the eco keymap

* Clean up task manager and ctrl alt del macros

Co-Authored-By: PyrooL <lm11887@gmail.com>
2019-03-18 11:54:59 -07:00
Riley Weber
d63f954b25 [Keymap] Add vim-style keymap for lets split (#5399)
* initial commit

* initial commit

* fixed indents

* spelling, capitalization, and order.

* added dota mode keymap, removed old comments

* fixed default keymap always having tilde, instead of grave accent and tilde. Improved dota keymap.

* lower does not change backspace to delete anymore

* corrected pgup/pgdown

* changed period on lower from numpad dot to regular dot

* added colemak and dvorak

* made colemak/dvorak border keys consistent with querty

* updated to match current practices, added custom metakeys for dvorak and colemak

* added disclaimer about audio

* renamed to lowercase

* replaced include guards with #pragma once

Co-Authored-By: rileyweber13 <rileyw13@protonmail.com>

* removed unncessary include

Co-Authored-By: rileyweber13 <rileyw13@protonmail.com>

* removed defines included in core

Co-Authored-By: rileyweber13 <rileyw13@protonmail.com>

* replace defines with an enum, switched from custom function to set_single_persistent_default_layer

* removed ifndef/include/endif left over from previous build system

* removed unnecessary ifdef block

* updated soungs to work with set_single_persistent_default_layer
2019-03-18 11:51:24 -07:00
Andrew Kannan
99a8628383 [Keyboard] CannonKeys Instant60 Keyboard (#5433)
* Instant 60

* Instant60 changes again

* turn off LSE and features

* Working RGB underglow 🎉

* Add missing files

* Update keymap to have reset

* Backlighting on

* Backlight code for instant60

* Move 072 files to common folder and use it in Instant60

* Updates

* Update keyboards/cannonkeys/instant60/rules.mk

Co-Authored-By: awkannan <andrew.kannan@klaviyo.com>
2019-03-18 11:12:09 -07:00
lucwastiaux
3a2eb68e9e [Keymap] add android studio keyboard shortcuts to dvorak 42 key atreus / ergodox layouts (#5423)
* add SCREEN_NAV layer for copy/pasting within screen

* working readreg/paste macros

* working read reg / paste macros

* write log and tran patterns, and expand

* add ls -la shortcut, add tab on combined layer

* put delete word on the right pinky key on shell_nav layer

* add TAB on the right side, add reset key

* added Cloud9 macros

* add cloud9 shortcuts to atreus layout

* added BROWSER_CONTROL layer

* finalized browser control layer

* adding comment

* add browser control layer to atreus

* add flashing command line

* remove the tab on combined layer

* remove the tomouse

* remove mouse layer, change log/tran expand patterns, cleanups

* add dumptlog macro

* add "delete to home" shortcut

* fix conflict

* remove unneeded mouse layer

* add meh shortcuts on the browser_control layer

* add/modify some macros

* explain the various layers

* putty paste is right mouse button

* add android studio shortcuts

* allow switching between base and alternate base layouts

* replace cloud9 shortcuts with android studio

* more android studio shortcuts

* add two meh shortcuts on keynav layer

* additional android studio shortcut

* added defines for android studio
2019-03-18 11:10:18 -07:00
FiNeXdesign
473dedb309 [Keymap] Updated layout after some months of testing. (#5427)
* Updated layout after some months of testing.

The current setup looks quite better than the initial one. It's not
perfect but it allows me to work quite well.

The only big problem is the Alt modifiers on the home row which
sometimes break the typing if keys are pressed too fast. I'm also not
satisfied by the TAB key position on the thumb cluster.

Main improvements since previous push:
- Shift layouts on both halves
- Moved around symbols
- Improved number/fn keys
- Reorganized thumbs

* Used enum as suggested by @drashna :-)
2019-03-18 11:09:37 -07:00
Adam Newbold
83937573d1 [Keyboard] Corrected layout for top row keys (#5429)
* Corrected column count and adjusted layouts to include missing key

The original version reflected 14 columns and omitted KC_GRV, the 15th key on the top row. This revision adds support for the 15h key, and also updates the default (Tsangan) layout to include the HHKB layer keys.

* Reverted config.h to version in master branch

* Moved K413 to the correct location

* Added info.json

* Update keyboards/1upkeyboards/1up60hte/1up60hte.h

Co-Authored-By: newbold <adam@neatnik.net>

* Update keyboards/1upkeyboards/1up60hte/info.json

Co-Authored-By: newbold <adam@neatnik.net>

* Update keyboards/1upkeyboards/1up60hte/keymaps/default/keymap.c

Co-Authored-By: newbold <adam@neatnik.net>

* Update keyboards/1upkeyboards/1up60hte/keymaps/hhkb/keymap.c

Co-Authored-By: newbold <adam@neatnik.net>

* Update keyboards/1upkeyboards/1up60hte/keymaps/hhkb/keymap.c

Co-Authored-By: newbold <adam@neatnik.net>

* Update keyboards/1upkeyboards/1up60hte/keymaps/default/keymap.c

Co-Authored-By: newbold <adam@neatnik.net>
2019-03-18 11:06:31 -07:00
jotix
bd61b5b0ed [Keyboard] Add Jot50 handwired board (#5431) 2019-03-18 10:56:12 -07:00
jotix
68d4f78b25 [Keyboard] layout fixed in jotanck.h (#5432) 2019-03-18 10:53:47 -07:00
holtenc
a6c9e53510 [Keyboard] correct indicator light states (#5434)
function of indicator lights was inverted. these changes correct that.
2019-03-18 10:42:26 -07:00
layne001365
3e7a2c49a6 [Keyboard] Fix matrix positions for HotDox (#5437)
* Add HotDox

* Update keyboards/hotdox/config.h

Co-Authored-By: layne001365 <layne.guan@gmail.com>

* Update keyboards/hotdox/config.h

Co-Authored-By: layne001365 <layne.guan@gmail.com>

* Update keyboards/hotdox/config.h

Co-Authored-By: layne001365 <layne.guan@gmail.com>

* Update keyboards/hotdox/config.h

Co-Authored-By: layne001365 <layne.guan@gmail.com>

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

Co-Authored-By: layne001365 <layne.guan@gmail.com>

* * Update

  - keyboards/hotdox/config.h
  - keyboards/hotdox/hotdox.h
  - keyboards/hotdox/info.json
  - keyboards/hotdox/left.h
  - keyboards/hotdox/left.c
  - keyboards/hotdox/rules.mk

* Replace EPRM with EPRM

  - keyboards/hotdox/keymaps/default/keymap.c
  - keyboards/hotdox/keymaps/eozaki/keymap.c
  - keyboards/hotdox/keymaps/kloki/keymap.c

* Remove keymaps readme.md
* Remove twimaster.h/ twimaster.c

* * Update
  - remove FORCE_NKRO from keyboards/hotdox/config.h
  - keyboards/hotdox/hotdox.c
  - keyboards/hotdox/hotdox.h
  - keyboards/hotdox/keymaps/default/keymap.c
  - keyboards/hotdox/left.c
  - keyboards/hotdox/readme.md
  - keyboards/hotdox/rules.mk

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

Co-Authored-By: layne001365 <layne.guan@gmail.com>

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

Co-Authored-By: layne001365 <layne.guan@gmail.com>

* Update keyboards/hotdox/rules.mk

Co-Authored-By: layne001365 <layne.guan@gmail.com>

* Update keyboards/hotdox/rules.mk

Co-Authored-By: layne001365 <layne.guan@gmail.com>

* Update keyboards/hotdox/rules.mk

Co-Authored-By: layne001365 <layne.guan@gmail.com>

* Update keyboards/hotdox/rules.mk

Co-Authored-By: layne001365 <layne.guan@gmail.com>

* Update keyboards/hotdox/rules.mk

Co-Authored-By: layne001365 <layne.guan@gmail.com>

* Update keyboards/hotdox/hotdox.h

Co-Authored-By: layne001365 <layne.guan@gmail.com>

* Update keyboards/hotdox/rules.mk

Co-Authored-By: layne001365 <layne.guan@gmail.com>

* Update keyboards/hotdox/rules.mk

Co-Authored-By: layne001365 <layne.guan@gmail.com>

* Update keyboards/hotdox/config.h

Co-Authored-By: layne001365 <layne.guan@gmail.com>

* Update keyboards/hotdox/config.h

Co-Authored-By: layne001365 <layne.guan@gmail.com>

* [Keymaps] reverse the K5C<->K5A, L53<->L51, R55<->R53 position.
2019-03-18 10:33:57 -07:00
Alexander Kagno
d7b381128e [Keymap] Arkag Userspace Update (#5438)
* fresh commit for a new fork for PR to upstream/master

* gaming mode added, lighting changes for other modes

* rules.mk fixed...

* fixed collision issue with aesthetic and shifty modes

* fixed collision issue with aesthetic and shifty modes

* troubleshooting game mode failing

* moved game tapdance key to default layer, fixed issue
2019-03-18 10:31:09 -07:00
M-AS
221ac2eabb New RGB Matrix effect: Single color reactive (#5330)
* Adds new RGB Matrix effect: rgb_matrix_config'd reactive LEDs

* [Docs] Adds disable for new effect

* [Docs] Added new effect to list of effects
2019-03-17 10:38:51 -07:00
zvecr
d8df01ca5e Align docker and vagrant base images (#4905)
* Align docker and vagrant base images - update box to debian 9.6

* Align docker and vagrant base images - lock docker image to debian 9

* Align docker and vagrant base images - update vagrant docker to debian 9
2019-03-17 10:36:59 -07:00
cubimon
f9f0a31904 Unicode fix for new wincompose version (#5082)
* unicode fix for new wincompose version

* move wincompose case to linux

* Change unicode input end to enter
2019-03-17 10:35:14 -07:00
Samuel Jahnke
c74b11a959 [Keymap] Improvements to Samuel's literate keymap (#5428)
* added my own keymap

* changed thing

* updated keymap Samuel

* updated laypout for better one handed use

* updated stuff I want

* happy with my lagout

* formatting

* Added new literate config

* made everything nice

* cleaned

* fixed spelling and two small bugs in macros

* Made press and lift function for modifiers

* made taps occur on press instead of release

* added oneshot keys and chars cant be negative!

* removed debug message

* Added command and qwerty layers

* fixed bug with oneshot layer

* same bug, different key
2019-03-17 10:22:35 -07:00
DDRnJn
fcc9b4b8e7 Added 4 new songs to song_list.h
Added Liebesleid by Kriesler (or Rachmaninoff), Michishirube from Violet Evergarden, Melodies of Life from Final Fantasy 9 and Eyes on Me from Final Fantasy 8
2019-03-17 10:17:12 -07:00
jotix
5047503230 [Keymap] Jotix (#5424)
* ortho_4x12 jotix2 layout

* ortho_4x12 jotix2 layout
2019-03-17 10:16:08 -07:00
Nik Richers
c62f6b0825 [Keymap] Add a tweaked Redox keymap (#5422)
* Add nrichers keymap

* Additional keymap tweaks, add readme info

* Improve descriptions for changes from default keymap

* Add image of keymap, update .gitignore to

* Add image link

Adds an image of the modified keymap.

* Improve legibility of keymap changes with colour coding

* Tinker with color codes in Markdown

* Experiment with colour codes

* Tinker more with colour codes

* Figured out the easiest way to include colour coding

* Undo earlier .gitignore change
2019-03-17 10:13:45 -07:00
noroadsleft
e30c993d75 [Keyboard] XD75 refactor (#5420)
* Refactor layout macro names

Update the names of the layout macros to reflect QMK's desired usage.

- KEYMAP renamed to LAYOUT
  - colinta keymap updated accordingly
- KC_KEYMAP renamed to LAYOUT_kc
  - mtdjr keymap updated accordingly

* Update xd75.h to use #pragma once include guard

* Update keymaps to use QMK_KEYBOARD_H

* Refactor default keymap

- updated to use layout macro
- remove deprecated action_get_macro function
- add functions from QMK keymap.c template
  - process_record_user
  - matrix_init_user
  - matrix_scan_user
  - led_set_user

* Update supporting files

- updated config.h files to use #pragma once include guard
- remove errant QUANTUM_DIR code block

* Rename readme files to fully lowercase filenames

* Restructure keyboard readme

Updated the readme to better align with the current QMK template.

* Bugfixes to supporting files
2019-03-17 10:04:50 -07:00
Drashna Jaelre
e9ace14878 [Docs] Add VSCode guide to docs (#5124)
* Add VSCode guide to docs

* Fix settings menu enumeration

* Update docs/other_vscode.md

Co-Authored-By: drashna <drashna@live.com>

* Update docs/other_vscode.md

Co-Authored-By: drashna <drashna@live.com>

* Update docs/other_vscode.md

Co-Authored-By: drashna <drashna@live.com>

* Update docs/other_vscode.md

Co-Authored-By: drashna <drashna@live.com>

* Update docs/other_vscode.md

Co-Authored-By: drashna <drashna@live.com>
2019-03-15 14:34:58 -07:00
Danny
22e499efdb [Keyboard] Add handwired split tester (#5413)
* Add handwired split tester

* Update keyboards/handwired/splittest/readme.md

Co-Authored-By: nooges <nooges@users.noreply.github.com>

* Update keyboards/handwired/splittest/readme.md

Co-Authored-By: nooges <nooges@users.noreply.github.com>
2019-03-15 14:28:38 -07:00
Danny
3c257c1c6e Add avrdude split EE_HANDS flash commands (#5414)
* Add EEPROM avrdude flashing commands for setting handedness

* Update docs with info on flashing EEPROM handedness files with commands
2019-03-15 14:05:50 -07:00
Len Trigg
9c4424ae2c rgblight split transfer non-eeprom config (#5396)
* Make rgblight_update_dword not update eeprom (we already have
eeconfig_update_rgblight for that).

Make split i2c keyboards transfer active rgblight config rather than
eeprom saved version of rgblight config, enabling runtime changes
that aren't persisted to eeprom.

* prev_level and prev_rgb only store successfully transmitted values
2019-03-15 13:46:49 -07:00
GreenShadowMaker
fabdb3c4e8 [Keymap] Keymap for Idobo (#5402)
* greenshadowmaker keymap for idobo xd75 massdrop

* remove uneeded config.h

* corrected format to match convention instead of xd75 where I accidentally started from
2019-03-15 11:01:50 -07:00
Drashna Jaelre
493fbb3dc1 [Keymap] Update to drashna keymaps: Conform to QMK Standards Edition (#5377)
* Use correct functions for dip switch code

* Some planck cleanup

* Hopefully fix RGB Sleeping with RGB Matrix

* Add rgbmatrix extern

* Add numpad 5x6 layout

* RGB Tweaks

* Add RGB startup animation

* Minor RGB Fixes

* Turn off RBG on planck

* Enable separate storage of EEPROM

* Update Macro pad

* Add BJohnson Keymap and minor darshna tweaks

* Clean up rgb and other code for new numpad

* Remove clicky hachy thing

* Update my code to use built in MOD_MASK defines

* Fix up modifier calls

* Tweak to KC_MAKE

* Tweak to KC_MAKE

* Add Semi-colon to numpad

* Preprocess out rgb matrix stuff if not enabled

* Formatting of KC_MAKE

* Add stuff for matrix and light rgb coexistance

* Fix bad spelling

* Change where layer indication shows based on rgblight status

* Force set mods in KC_MAKE

* Optimize CRKBD
2019-03-15 08:57:44 -07:00
zvecr
e0a03bfa6c Fix return value of i2c_readReg and i2c_receive (#5410) 2019-03-15 08:55:07 -07:00
GreenShadowMaker
b85e2eef9a [Keymap] Greenshadowmaker keymap for ergodash (#5403)
* My Inital Keymap, adjusted for not removing outer keys, and using large inner key

* First working version of keymap

* RGB investigate

* Updated Keymap, added keyboard-layout-editor.com json file

* minor fix

* Update keyboards/ergodash/rev2/keymaps/greenshadowmaker/config.h

Ah!  Thanks fort the clarification, it was a blind copy/paste

Co-Authored-By: GreenShadowMaker <39226745+GreenShadowMaker@users.noreply.github.com>

* Update keyboards/ergodash/rev2/keymaps/greenshadowmaker/config.h

Co-Authored-By: GreenShadowMaker <39226745+GreenShadowMaker@users.noreply.github.com>

* Update keyboards/ergodash/rev2/keymaps/greenshadowmaker/config.h

Co-Authored-By: GreenShadowMaker <39226745+GreenShadowMaker@users.noreply.github.com>

* Update keyboards/ergodash/rev2/keymaps/greenshadowmaker/config.h

Co-Authored-By: GreenShadowMaker <39226745+GreenShadowMaker@users.noreply.github.com>

* Update keyboards/ergodash/rev2/keymaps/greenshadowmaker/rules.mk

Co-Authored-By: GreenShadowMaker <39226745+GreenShadowMaker@users.noreply.github.com>

* Update keyboards/ergodash/rev2/keymaps/greenshadowmaker/keymap.c

Co-Authored-By: GreenShadowMaker <39226745+GreenShadowMaker@users.noreply.github.com>

* Update keyboards/ergodash/rev2/keymaps/greenshadowmaker/keymap.c

Co-Authored-By: GreenShadowMaker <39226745+GreenShadowMaker@users.noreply.github.com>

* Update keyboards/ergodash/rev2/keymaps/greenshadowmaker/keymap.c

Co-Authored-By: GreenShadowMaker <39226745+GreenShadowMaker@users.noreply.github.com>

* Update keyboards/ergodash/rev2/keymaps/greenshadowmaker/keymap.c

Co-Authored-By: GreenShadowMaker <39226745+GreenShadowMaker@users.noreply.github.com>

* removed persistent_default_layer_set and the QWERTY section as suggested
2019-03-14 23:13:24 -07:00
Boy_314
41584c3384 [Keymap] Added Boy_314's layout for half n half keyboard (#5373)
* added Boy_.314's layout for halfnhalf keyboard

* reset rules.mk to default

* update keymap with qwerty layout, and enable tap dancing

* fixed formatting in layout visualization

* added rules.mk to custom layout

* added mod tap for ctrl/capslock

* fixed typo in config.h, remove excess in rules.mk, revert half_n_half rules.mk
2019-03-14 21:09:35 -07:00
zvecr
205ffc277c Align use of atmega32a program script (#5259)
* Remove duplicate 'program' files and refactor to use atmega32a_program.py

* Update readme references from 'program' to 'atmega32a_program.py'
2019-03-14 15:55:08 -07:00
ginjake
c025d813ba [Keyboard] new keyboard lovelive9 (#5266)
* new keyboard lovelive9

* Update keyboards/lovelive9/config.h

thank you

Co-Authored-By: ginjake <hsginjake123@gmail.com>

* Apply suggestions from code review

Co-Authored-By: ginjake <hsginjake123@gmail.com>

* fix review

* fix readme

* move handwired

* Update keyboards/handwired/lovelive9/keymaps/default/keymap.c

thanks

Co-Authored-By: ginjake <hsginjake123@gmail.com>

* Apply suggestions from code review

commit suggestion

Co-Authored-By: ginjake <hsginjake123@gmail.com>

* fix spell miss

* fix review

* fix col and row

* fix layout define
2019-03-14 15:54:16 -07:00
zvecr
577e99f195 [Keyboard] Inital port of xd96 (#5401)
* Initial import of xd96 based on xd84 code

* Configure xd96 port expander mapping

* Fix xd96 led count

* Fix xd96 port expander reading

* Fix xd96 port expander reading

* Fix xd96 LAYOUT matrix mapping

* Add additional links for xd96 Hardware Availability

* Correct Configurator config

Co-Authored-By: zvecr <git@zvecr.com>

* Readme review comments

Co-Authored-By: zvecr <git@zvecr.com>
2019-03-14 14:22:50 -07:00
Brendan Wrafter
c02c7b7517 Fix ascii art (#5407) 2019-03-14 14:18:11 -07:00
Jeremy Bernhardt
980a41e904 [Keyboard] Georgi Support (#5384)
* Working on chording

* Working on chording

* Got layouts in order

* Initial Georgi support

* forgot to add keymaps

* Updated readme

* Update keyboards/georgi/keymaps/template/readme.md

Co-Authored-By: germ <jeremythegeek@gmail.com>

* Update keyboards/georgi/georgi.h

Co-Authored-By: germ <jeremythegeek@gmail.com>

* Update keyboards/georgi/keymaps/default/keymap.c

Co-Authored-By: germ <jeremythegeek@gmail.com>

* Update keyboards/georgi/keymaps/default/keymap.c

Co-Authored-By: germ <jeremythegeek@gmail.com>

* Update keyboards/georgi/rules.mk

Co-Authored-By: germ <jeremythegeek@gmail.com>

* Update keyboards/georgi/rules.mk

Co-Authored-By: germ <jeremythegeek@gmail.com>

* Update keyboards/georgi/matrix.c

Co-Authored-By: germ <jeremythegeek@gmail.com>

* Update keyboards/georgi/georgi.c

Co-Authored-By: germ <jeremythegeek@gmail.com>

* Update keyboards/georgi/georgi.c

Co-Authored-By: germ <jeremythegeek@gmail.com>

* Update keyboards/georgi/rules.mk

Co-Authored-By: germ <jeremythegeek@gmail.com>

* Update keyboards/georgi/keymaps/default/keymap.c

Co-Authored-By: germ <jeremythegeek@gmail.com>

* Update keyboards/georgi/keymaps/template/keymap.c

Co-Authored-By: germ <jeremythegeek@gmail.com>

* Update keyboards/georgi/matrix.c

Co-Authored-By: germ <jeremythegeek@gmail.com>

* Disabled features, updated info

* Update keyboards/georgi/config.h

Co-Authored-By: germ <jeremythegeek@gmail.com>

* Update keyboards/georgi/config.h

Co-Authored-By: germ <jeremythegeek@gmail.com>

* Fixed info.json
2019-03-14 13:59:34 -07:00
Alexander Kagno
2558372b3f fresh commit for a new fork for PR to upstream/master (#5406) 2019-03-14 12:04:59 -07:00
walkerstop
c3b4f65c64 Added info.json for mt980 keyboard and fixes to walker keymap (#5391)
* Added info.json and minor fixes to walker keymap

* Fix url

* Update keyboards/mt980/info.json

Co-Authored-By: walkerstop <walkerstop@gmail.com>

* Update keyboards/mt980/info.json

Co-Authored-By: walkerstop <walkerstop@gmail.com>

* Update keyboards/mt980/info.json

Co-Authored-By: walkerstop <walkerstop@gmail.com>

* Update keyboards/mt980/info.json

Co-Authored-By: walkerstop <walkerstop@gmail.com>

* Update keyboards/mt980/info.json

Co-Authored-By: walkerstop <walkerstop@gmail.com>

* Update keyboards/mt980/info.json

Co-Authored-By: walkerstop <walkerstop@gmail.com>

* Update keyboards/mt980/info.json

Co-Authored-By: walkerstop <walkerstop@gmail.com>

* Fix user calling keymap functions

* cancel oneshot layer on KC_TRNS

* Fix to oneshot layer handling

* Fix oneshot handling of reset

* Move bootmagic key to Esc where it normally resides

* Remove deprecated function

* Treat shift-numlock as shift-insert in Walker layer
2019-03-14 08:21:41 -07:00
Erovia
f9c5b80aed Add support for THE60 (#5385) 2019-03-13 16:26:25 -07:00
Michael Dye
30db1b18e5 Added 1up60rgb keymap: mdyevimnav (#5386)
Added keymap for 60% board 1up60rgb. The map provides VIM-style navigation on a
second layer (L1) with HOME, PGDN, PGUP, and END keys on that same layer one
row below the home row. The layout is used by https://github.com/michaeldye.
2019-03-13 16:23:49 -07:00
Drashna Jaelre
4a908288f1 Fix i2c calls for HotDox keyboard (#5387) 2019-03-13 14:08:21 -07:00
Michael F. Lamb
f34244a871 Sleep until USB port becomes writable before running avrdude (#5393)
* sleep until usb port becomes writable before running avrdude

* only wait for a writable USB port when not on MSYS

using MINGW or MSYS: sleep for one second, as before.

otherwise: wait for the port to become writable.

* typo

* typo
2019-03-13 14:00:09 -07:00
Christian Westerlund
5a12b054ae [Keymap] Some more improvements to keymap, currency symbols.. (#5395)
acute accent and pipe character also
2019-03-13 11:54:34 -07:00
Jarred Steenvoorden
7e306f9c98 [Keymap] Add atreus, ergotravel and org60 keymaps (#5381)
* Add atreus, ergotravel and org60 keymaps

* Cleanup my keymap config files
2019-03-13 11:22:06 -07:00
Iason Dimitrakopoulos
2902035dcc archetype keymap for jj50 (#5397)
* archetype keymap for jj50 keyboard

* archetype keymap for jj50 keyboard

* PR fixes proposed by mechmerlin
2019-03-13 08:06:09 -07:00
walkerstop
73c4c9f9e8 Wheat Field Peripherals mt980 (FC980M Layout) PCB Support (#5374)
* mt980 keyboard support

* Update manufacturer name

* Correct indicator LEDs, add walker keymap

* Added readme.md

* Update keyboards/mt980/mt980.c

Co-Authored-By: walkerstop <walkerstop@gmail.com>

* Treat number pad + and enter as pgup and pgdn when number lock is off

* Update keyboards/mt980/mt980.c

Co-Authored-By: walkerstop <walkerstop@gmail.com>

* Update keyboards/mt980/mt980.c

Co-Authored-By: walkerstop <walkerstop@gmail.com>

* Update keyboards/mt980/readme.md

Co-Authored-By: walkerstop <walkerstop@gmail.com>

* Update keyboards/mt980/readme.md

Co-Authored-By: walkerstop <walkerstop@gmail.com>

* Update keyboards/mt980/readme.md

Co-Authored-By: walkerstop <walkerstop@gmail.com>

* Update keyboards/mt980/rules.mk

Co-Authored-By: walkerstop <walkerstop@gmail.com>
2019-03-12 15:23:09 -07:00
yiancar
131b647a96 Minor readme fix (#5389) 2019-03-12 15:15:32 -07:00
Takuya Urakawa
2f3dbb1253 Add new keyboard Plaid and ATMEGA328p support (#5379)
* add plaid

* Change usb vid/pid to free id from vusb
Trivial fix for vusb core

* update readme

* update info.json default keymap

* fix typo

* Replace copyright
2019-03-12 11:48:17 -07:00
James Churchill
37932c293c Next set of split_common changes (#4974)
* Update split_common to use standard i2c drivers

* Eliminate RGB_DIRTY/BACKLIT_DIRTY

* Fix avr i2c_master error handling

* Fix i2c_slave addressing

* Remove unneeded timeout on i2c_stop()

* Fix RGB I2C transfers

* Remove incorrect comment
2019-03-12 10:23:28 -07:00
Naoki Katahira
25bb059e4e [Keyboard] Lily58 Add info.json file (#5354)
* Add info.json file

* fix info.json

* fix2 info.json

* Update keyboards/lily58/rev1/info.json

Co-Authored-By: kata0510 <kata0510.com@gmail.com>

* Update2 keyboards/lily58/rev1/info.json

Co-Authored-By: kata0510 <kata0510.com@gmail.com>
2019-03-12 10:20:07 -07:00
zvecr
9e49f19a1a KPrepublic bm16a port (#5383)
* Initial bm16a port

* Initial bm16a port - fix readme formatting
2019-03-12 07:38:05 -07:00
moyi4681
fe642a84fc Fix speed issues with RGB Matrix in the DZ60RGB (#5380)
* Fix speed issues with RGB Matrix in the DZ60RGB

* keep boards in sync
2019-03-12 07:25:39 -07:00
Callum Oakley
395a7793d1 Keymap update (#5382)
* home and end on fn layer (for forward and back with left hand)

* space movement shortcuts

* mouse layer
2019-03-12 07:21:51 -07:00
Andrew Kannan
e046872a80 [Keyboard] Satisfaction75 Protoype/Rev1 split, and new VIA features (#5303)
* Add satisfaction75 revision 1

* Update manufacturer

* Add tester layout and update rev1 comments

* Add ifdef guards for OLED for tester

* Add oled disabling rules

* Update to save backlight settings and setup for VIA custom config

* Add new VIA values to satisfaction75

* Safety guard in clock set mode

* Fix mistaken doc edit

* Address PR comments

* bring the default back to pass travis CI

* Address further PR comments
2019-03-11 20:47:50 -07:00
jotix
fd43259cbd [Keyboard] Update rules.mk (#5370)
MOUSEKEY_ENABLED = yes
by default
2019-03-11 16:53:25 -07:00
zvecr
99654c6e4f [Keyboard] Fix diode and split keyboard configuration for 40percentclub/half_n_half (#5371) 2019-03-11 16:52:04 -07:00
Christian Westerlund
8ff4b4dba4 [Keymap] Small improvements to this keymap (#5343)
* Small fixes, added tilde, print screen and switched alt keys

* Comments

* ..

* Removed fn_actions block
2019-03-11 14:02:31 -07:00
DDRnJn
fe89aef774 Add 3 new songs and add new note type (#5351)
* Added 3 new songs and added new note type to musical_notes.h

Added Megalovania from Undertale, Kataware Doki from Kimi no Na Wa and La Campanella by Lizst to song_list.h
Added the breve (double whole note) and dotted breve note types to musical_notes.h. I included this because the default tempo is quite high, so I thought a note with higher
duration was needed

* Fixed indentation for new notes in musical_notes.h

Changed tabs to spaces in indentation
2019-03-11 13:53:22 -07:00
FateEverywhere
e88a75904b [Keyboard] Add Stand Aside keyboard (#5360)
* 412_64 move to handwired

412_64 and its second printing, Mark Zero Stand Aside, are now obsolesced by new hardware. As only two units exist in the wild not owned by me, I'm moving the definition to handwired.

* Mark 3 Stand Aside ready for production.

Uploading firmware, compiled and tested, for Mark 3 Stand Aside. The hardware's ready, now the software is too.

* Whoops.

Should've branched before pushing Stand Aside. Sorry 'bout that.

* Revert "Whoops."

This reverts commit d222046cfe.

* Revert "Mark 3 Stand Aside ready for production."

This reverts commit c790899af7.

* Mark 3 Stand Aside ready.

Initial commit for Mark 3 Stand Aside, ready for production.

* Update keyboards/standaside/rules.mk

noroadsleft suggested removal of a line, 'LAYOUTS = ortho_4x16'. I agree.

Co-Authored-By: FateEverywhere <41215461+FateEverywhere@users.noreply.github.com>

* Cleanup for pull request.

Making changes requested by Drashna, as they're all good, and I know way less about the standards than they do.

* Initial cleanup completion.

Missed a few lines in standaside.c, they're cleaned up now.
2019-03-11 13:49:23 -07:00
yiancar
863d54d2fc [Keyboard] Mechboards Micropad (#5368) 2019-03-11 13:46:55 -07:00
layne001365
2a2f41c6de [Keyboard] Add HotDox keyboard (#5365)
* Add HotDox

* Update keyboards/hotdox/config.h

Co-Authored-By: layne001365 <layne.guan@gmail.com>

* Update keyboards/hotdox/config.h

Co-Authored-By: layne001365 <layne.guan@gmail.com>

* Update keyboards/hotdox/config.h

Co-Authored-By: layne001365 <layne.guan@gmail.com>

* Update keyboards/hotdox/config.h

Co-Authored-By: layne001365 <layne.guan@gmail.com>

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

Co-Authored-By: layne001365 <layne.guan@gmail.com>

* * Update

  - keyboards/hotdox/config.h
  - keyboards/hotdox/hotdox.h
  - keyboards/hotdox/info.json
  - keyboards/hotdox/left.h
  - keyboards/hotdox/left.c
  - keyboards/hotdox/rules.mk

* Replace EPRM with EPRM

  - keyboards/hotdox/keymaps/default/keymap.c
  - keyboards/hotdox/keymaps/eozaki/keymap.c
  - keyboards/hotdox/keymaps/kloki/keymap.c

* Remove keymaps readme.md
* Remove twimaster.h/ twimaster.c

* * Update
  - remove FORCE_NKRO from keyboards/hotdox/config.h
  - keyboards/hotdox/hotdox.c
  - keyboards/hotdox/hotdox.h
  - keyboards/hotdox/keymaps/default/keymap.c
  - keyboards/hotdox/left.c
  - keyboards/hotdox/readme.md
  - keyboards/hotdox/rules.mk

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

Co-Authored-By: layne001365 <layne.guan@gmail.com>

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

Co-Authored-By: layne001365 <layne.guan@gmail.com>

* Update keyboards/hotdox/rules.mk

Co-Authored-By: layne001365 <layne.guan@gmail.com>

* Update keyboards/hotdox/rules.mk

Co-Authored-By: layne001365 <layne.guan@gmail.com>

* Update keyboards/hotdox/rules.mk

Co-Authored-By: layne001365 <layne.guan@gmail.com>

* Update keyboards/hotdox/rules.mk

Co-Authored-By: layne001365 <layne.guan@gmail.com>

* Update keyboards/hotdox/rules.mk

Co-Authored-By: layne001365 <layne.guan@gmail.com>

* Update keyboards/hotdox/hotdox.h

Co-Authored-By: layne001365 <layne.guan@gmail.com>

* Update keyboards/hotdox/rules.mk

Co-Authored-By: layne001365 <layne.guan@gmail.com>

* Update keyboards/hotdox/rules.mk

Co-Authored-By: layne001365 <layne.guan@gmail.com>

* Update keyboards/hotdox/config.h

Co-Authored-By: layne001365 <layne.guan@gmail.com>

* Update keyboards/hotdox/config.h

Co-Authored-By: layne001365 <layne.guan@gmail.com>
2019-03-11 12:41:16 -07:00
trinity1561
bf1e51ec22 [Keyboard] Update info.json to include macro layout (#5364)
* Update info.json

Adding layout for the macro version.

* Update info.json

Changed the macro layout to match exactly like the non-macro version (split backspace and bottow row match)
2019-03-11 11:35:59 -07:00
Jarred Steenvoorden
d2311afb66 Add crkbd keymap (#5366) 2019-03-11 07:15:08 -07:00
zk-phi
5e093ad224 [Keyboard] Add keyboard hifumi (#5341)
* Add keyboard hifumi

* Update keyboards/hifumi/Readme.md

Co-Authored-By: zk-phi <zk-phi@users.noreply.github.com>

* Update keyboards/hifumi/Readme.md

Co-Authored-By: zk-phi <zk-phi@users.noreply.github.com>

* Update keyboards/hifumi/Readme.md

Co-Authored-By: zk-phi <zk-phi@users.noreply.github.com>

* Update keyboards/hifumi/keymaps/default/keymap.c

Co-Authored-By: zk-phi <zk-phi@users.noreply.github.com>

* Update keyboards/hifumi/keymaps/test/keymap.c

Co-Authored-By: zk-phi <zk-phi@users.noreply.github.com>

* Update keyboards/hifumi/Readme.md

Co-Authored-By: zk-phi <zk-phi@users.noreply.github.com>

* Add DIODE_DIRECTION

* Rename readme.md
2019-03-10 21:49:08 -07:00
noroadsleft
0f67232035 QMK Configurator bugfix for KBDfans KBD19x (#5362)
Configurator was assigning keys in the wrong order around the arrow keys and numpad.

Rebuilt the layout contents from scratch.
2019-03-10 20:21:59 -07:00
Eric
61accb8794 [Keymap] Underglow support for Launchpad (#5340)
* added my launchpad

* updated keymap with legends and fixed layout errors

* Added default keymap with added layer for RGB controls and included the necessary config code

* fixed layer orders

* removed my personal keymap to clean PR

* missed an underscore

* updated readme

* removed more unnecessary code

* moved RGB code to its own config phone

* moved underglow info to its own readme

* removed redundant code from default_rgb config.h file, included QMK KEYBOARD H in place of initial defines in keymap.c

* reverted launchpad config

* removing the = because I can't figure out why its there

* Revert "removing the = because I can't figure out why its there"

This reverts commit e3b5e6d568.

* reverted rev1/config.h

* reverted all files I should not have touched

* removing redundant code in rules.mk

* readibility improvements to keymap
2019-03-10 20:11:45 -07:00
Joel Yauk
eb48e5ebdb [Keyboard] Add ISO backslash key position to facew matrix and keymap files (#5190)
* Add ISO backslash key position to matrix and keymap files

* Use KC_NO instead of KC_BSLS for unused position in custom keymap

* Add new key position to json layout file used by online configurator
2019-03-10 20:09:56 -07:00
ai03
9bea41c9b2 [Keyboard] Add Orbit keyboard (#5306)
* Get things working except indicators

* Attempt to get things working

* hmm

* Compiles but doesn't run

* Make data transfer work

* Get all indicators working

* Remove old transport

* Prepare for pullreq

* Revert keymap from testing to production

* Final error checking for pull request

* Remove autogenerated is_command from config.h

* Rewrite pin toggles using qmk functions
2019-03-10 19:57:36 -07:00
Wilba6582
92c19dae8c Fixed tap/down/up handling in dynamic keymap macros 2019-03-11 12:41:50 +11:00
the-frey
ad12acd3c0 Add personal keymap for crkbd (#5208)
* Add a crkbd layout with nkro on by default, and an emacs-friendly layout for clojure

* Added readme and image

* Add changes as requested on PR
2019-03-10 10:17:43 -07:00
moyi4681
c8ad13d0f9 fix dz60rgb config.qmk.fm non-combile (#5356)
* Update config.h

* Update config.h

* Update config.h

* Delete config.h

* Update config.h

* Update config.h

* Update config.h

* Delete config.h
2019-03-10 10:15:53 -07:00
FateEverywhere
2b1b5fed2a 412_64 move to handwired (#5359)
* 412_64 move to handwired

412_64 and its second printing, Mark Zero Stand Aside, are now obsolesced by new hardware. As only two units exist in the wild not owned by me, I'm moving the definition to handwired.

* Mark 3 Stand Aside ready for production.

Uploading firmware, compiled and tested, for Mark 3 Stand Aside. The hardware's ready, now the software is too.

* Whoops.

Should've branched before pushing Stand Aside. Sorry 'bout that.

* Revert "Whoops."

This reverts commit d222046cfe.

* Revert "Mark 3 Stand Aside ready for production."

This reverts commit c790899af7.
2019-03-10 10:04:10 -07:00
Jarred Steenvoorden
ff95c60e46 Keymap / userspace update (#5358)
* Update userspace with common config.h

* Add my dz60, satan and xd75 keyboard keymaps

* Fixing executable bits changed during last upstream merge

* Cleanup unnecessary files and defines

* Remove unnecessary defines from userspace config

* Add underglow controls to dz60 function layer

* Fixing merge conflicts

* Fixing exectable bits changed during merge

* Userspace update
2019-03-10 10:00:55 -07:00
epaew
9d915ed051 Update edvorak keymap simplify (#5350)
* Update edvorakjp layouts

* swap master hand

* update tapping_term
2019-03-09 08:22:21 -08:00
Vyolle
cd9e15036e Swapped Gui keys and Shift Keys. I think it's more ergonomic in this configuration. (#5347) 2019-03-08 14:37:40 -08:00
enkore
fef206f661 getting_started_build_tools: dfu-{util,programmer} now available from arch repo
See https://www.archlinux.org/packages/extra/x86_64/dfu-programmer/
2019-03-08 10:18:21 -08:00
Blaž Hrastnik
7b768be784 Shallow clone submodules. (#5279)
There's no need to fetch the entire submodule history if we only need the latest revision. Speeds up the download a fair bit.
2019-03-08 07:58:40 -08:00
Drashna Jaelre
3d446c6050 [Docs] Update the KC_MAKE example in Userspace docs (#5337)
This includes a much more feature rich version of the code, as well as updating for changes that have occurred in QMK Firmware
2019-03-08 07:56:08 -08:00
linyaofred
fc87d9b0d5 fix wrong key order in qmk configurator. (#5342) 2019-03-08 07:50:46 -08:00
MechMerlin
98b68bec53 [Keyboard] New Keyboard: MK60 (#5327)
* intial commit

* fix up some of the cookie cutter code

* define pins used and size of switch matrix

* enable lighting settings and bootmagic lite

* create the appropriate LAYOUT macro

* remove a comma for compilation errors

* provide a suitable keymap

* disable console and command due to firmware being too large

* add Caps Lock LED support

* Add QMK Configurator support

* fix markdown rendering

* fix mechmerlin to mechkeys
2019-03-07 17:58:49 -08:00
stanrc85
4a597e031f [Keymap] Smarter KC_MAKE code and removed duplicate MOD_MASK entries (#5331)
* Change to predefined MOD_MASK codes

* Remove duplicate predefined codes

* Better reset keybaord logic

* Cleaned up code as requested
2019-03-07 17:13:02 -08:00
MechMerlin
81fae5c306 Add in mekanist's keymap. Thanks to MatthewRobo for assisting in creating some of his features (#5335) 2019-03-07 17:06:04 -08:00
Dusty Pomerleau
234c117613 Keymap update: Use register_code16() and its variants in lieu of separate mod registration (#5333)
* use `register_code16` and relatives for tapdance code

* rename tapdance keys to more closely mirror the `KC` names in QMK

* additional naming change to match QMK style
2019-03-07 17:03:29 -08:00
Dusty Pomerleau
6d4f6f3f49 [Docs] Add Tap Dance example to the docs (#5326)
* add a tapdance example for creating advanced mod-tap and layer-tap keys

* add optional curly braces to match QMK conventions

* change example to use `register_code16()` and tapdance keycodes more closely matching QMK variants
2019-03-07 12:30:02 -08:00
Felipe Coury
ba11a1c807 [Keyboard] Adds Gray Studio HB85 Initial Support (#5311)
* Gray Studio HB85 Initial Support

* Fixed README image

* Updated README

* Disabled Bootmagic and Console for HB85

* Fixed Numpad 4 matrix place

* Fixes board crashing with RGB enabled

* Moved HB85 files to gray_studio folder

* Uses old i2c library since this version makes RGB underglow work

* Improved default keymap with underglow control layer

* Removes obsolete program and uses generic script instead

As per zvecr feedback

* Uses GPIO Functions to initialise and set RGB underglow PINS
2019-03-06 12:49:16 -08:00
stanrc85
33e9f1c75a [Keymap] Add KC_MAKE keycode to my userspace and keymaps (#5324)
* Add keycode for KC_MAKE

* Add KC_MAKE keycode

* Add stanrc85.c file with KC_MAKE

* Remove unused include

* Improved KC_MAKE stolen from Drashna

* Define mod mask for new KC_MAKE code

* RESET board to flash after compiling

* Remove send_string

* RESET fixed in KC_MAKE
2019-03-06 12:20:51 -08:00
noroadsleft
be8257f0a7 [Keyboard] handwired/trackpoint: refactor and readme cleanup (#5325)
* handwired/trackpoint: refactor

- layout macro KEYMAP renamed to LAYOUT
- keymap now uses #include QMK_KEYBOARD_H

* handwired/trackpoint: readme cleanup

- fix wiring layout image URL
- update readme structure

* handwired/trackpoint: rename readme to lowercase

* handwired/trackpoint: update header files to use #pragma once
2019-03-06 11:51:41 -08:00
jotix
da2eedc0c2 [Keyboard] re-arrange the pinout for backlight support (#5321) 2019-03-05 15:59:11 -08:00
Dusty Pomerleau
3aa4d55bee [Keymap] update: simplify tapdance code for Minidox/keymaps/dustypomerleau (#5315)
* add dusty keymap

* change keymap folder to match my github username

* initial keymap completed in comments only

* layout without NAV completed in comments only

* disable Command to prevent interference with Space Cadet keys

* switch _ and \ in the symbol layer

* Layers complete through _NAV

* add thumb keys to _NAV

* complete _NUM

* all layouts complete; still needs `process_user_record()`

* completed first draft of keymap; still needs config.h to match

* corrected keycodes for Mac macro-volume keys

* fix Mac mute keycode

* add missing Mac keycodes for previous and next track

* placeholder for qwerty layout, not yet completed;

remove unnecessary breaks;

add todos

* eliminate Preonic branch before switching to Minidox branch:

• delete dustypomerleau Preonic keymap folder

• complete keymap.c (QWERTY layer, vanilla numbers layer)

TODO:
• add preferences to config.h
• complete the README

* edit commented keymap diagrams for clarity in dual function keys

* define initial config.h and add rules.mk for mouse key support

* fix redundant line after implementation of tap_code()

* fixed key_timer declaration, added README and rules

* formatting of keymap

* add CTPC to config

* cycle thumb keys to favor center position

* modify config.h for temporary Pro Micro compatibility

* remove superfluous call to use serial; homebrewed mod tap keys are still broken with OSL

* merge _SYS and _MEDIA on new Z_SYS key

* ALT_OP example of new MT macro complete

* initial narze-inspired MT fixes in PRU

* add (currently superfluous) custom keycode for the _SYS layer

* rudimentary `OSL` symbol macros that immediately register the mod and fail to reset the oneshot layer, but do output the proper keys—fix both of these things

* remove permissive hold to improve tapping performance

* remove calls to `clear_oneshot_layer_state()`, as they have no effect inside `process_record_user()`. Tapdance appears to be the way forward.

* final commit before tapdance code; correct layout in comments

* initial tapdance code for shifted mod taps

* add numeric and ergo NUM layers and pinky shifts for keycuts

* add TD() wrappers to tapdance codes and clean up commented layout guides

* add faux return to cur_dance to allow compilation - TODO: research what the default clause should be in cur_dance

* update commented schematics for better readability

* add backspace and delete to lockable layers, Z_SYS -> SYS_Z for consistency, fix schematic errors

* add `DOUBLE_SINGLE_TAP` to tapdance cases to allow doubling of the single tap character without waiting tapping term

* remove reduced oneshot tapping toggles

* update README

* newline tweak :)

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

Co-Authored-By: dustypomerleau <dustypomerleau@users.noreply.github.com>

* Update keyboards/minidox/keymaps/dustypomerleau/config.h

Co-Authored-By: dustypomerleau <dustypomerleau@users.noreply.github.com>

* Update keyboards/minidox/keymaps/dustypomerleau/config.h

Co-Authored-By: dustypomerleau <dustypomerleau@users.noreply.github.com>

* Update keyboards/minidox/keymaps/dustypomerleau/config.h

Co-Authored-By: dustypomerleau <dustypomerleau@users.noreply.github.com>

* Update keyboards/minidox/keymaps/dustypomerleau/config.h

Co-Authored-By: dustypomerleau <dustypomerleau@users.noreply.github.com>

* remove `PREVENT_STUCK_MODIFIERS`, as this is default behavior

* enable extrakey in rules to enable media keys

* enable extrakeys for media key compatibility on macOS

* add dash and slash to _NUM layers

* change to universal volume keycodes

* revert micro volume adjustments to macOS-specific codes due to lack of functionality (macro volume adjustments are still universal)

* fix image of _SYS layer in comments

* more diagram fixes in comments

* fix typo

* simplify tapdance code

* match _NUM_N to _NUM_E

* move slash to allow better use of comma in number layers

* match layer and keycode enums to the docs

* correct qwerty numlock to match numeric numlock layer
2019-03-05 15:46:05 -08:00
Drashna Jaelre
edef1f9396 Update personal userspace and keymaps + improve custom functionality (#5289)
* Change how desktop commands work

* Add DST_MOD_MASK as a config option

* DST_RMV → DST_REM

* Add melody96:konstantin keymap

* Update custom SEND_STRING

* Move feature flags from userspace into keyboard rules

* Use "Vo-", "Vo+" instead of "VoD", "VoU" in keymap comments

* Add RGB controls and numpad Unicode to Melody96 keymap

* Add RGB_SET keycode to Melody96 and RGB files to userspace

* Generate UNICODE and UNICODEMAP constants using macros

* Avoid collisions with X_* send string constants

* Use two spaces before inline comments

* Add _keymap versions of other custom Quantum functions

Not added: eeconfig_update_keymap, eeconfig_read_keymap

* Switch to UNICODEMAP in keyboard rules

* Make toggle_numpad a nested function in process_record_user

* Set Melody96 underglow color to Godspeed blue on EEPROM reset

* Remove most _keymap and _user definitions in userspace

Some keyboards misuse _user functions by defining them in the base files
instead of the corresponding _kb functions (especially led_set_user and
matrix_init_user). Until this is fixed (#5148), I've removed definitions
in my userspace that could cause linking collisions.

* Update GODSPEED_BLUE values and RGB mode keys

* Add GODSPEED_YELLOW color

* Set preferred intervals for rgblight effects

* Update tap dance function names

* Replace td_lshift_fn with generic td_mod_layer, add TD_RCTL_FN

Move TD_FN_RCTL after TD_RCTL_FN

* Replace td_fn_rctrl with generic td_layer_mod

* Add blank lines, prefer explicit initialization

* ACTION_TAP_DANCE_DOUBLE_MODS → ACTION_TAP_DANCE_DOUBLE_MOD

* Update Godspeed colors

* Add media controls to Melody96 keymap

* Add SysRq, Break combos and other keys to Melody96 keymap
2019-03-05 15:07:13 -08:00
vxid
2e8e465423 [Keymap] Add vxid planck layout (#5271) 2019-03-05 15:05:32 -08:00
Marco Monaco
73d8593352 increase size of note counter variable to avoid overflow 2019-03-05 15:03:24 -08:00
Christopher Browne
dbfbe0d7f0 Adopted LAYOUT, added some keys (#5320)
* Add HOME/END keys as upper/lower on arrow-up/down

* Reduce .hex file size by turning off unneeded options

* Put digit keypad onto left hand upon RAISE; this will sometimes be preferable to double-hits of right hand

* Latest super latest version merge

* cbbrowne keymap for XD75re

* starting notes on XD75re keymap plans

* First draft of bottom row of QWERTY

* Switch my special bottom line over to QCENT

* Dunno

* Filling in wanted keys, bit by bit...

* Add copyright, extra macro

* Clean up comments, remove some experimental code I didn't like

* TODO plans for xd75re

* clean up keyboard layout

* QCENT2 is my new experiment for the main keyboard...

* Add a few more main layer keys, and modify LOWER to shift things outwards to conform with main layer

* Clean up RAISE layer to conform with main layer, remove QCENT layer as QCENT2 is the new thing

* More xd75 changes, now that I actually have it in hand

* shift keymap around, as original attempt was a bit too aggressive in keeping to the edges

* more revs to XD75

* Dropping parts of the centre keypad in favor of Keys I Really Need

* Improve documentation to conform with how builds are done now

* Improve documentation to conform with how builds are done now

* Add cbbrowne rules file as alternative to having the rules in Makefile

* Makefile not needed anymore for individual keymap

* Some revs to my keymapping

* Add {}

* Add PGUP/PGDN

* Shifted some middle-range keys around

* Needed Tilde, Backquote, and to shift RESET onto FUNCTION layer

* Wanted ~

* cbbrowne hasn't anything to do with hadron keymaps

* trim unneeded bits

* I prefer OrgMode for my notes

* Have a right-alt

* Layer keys make LED colors change

* Add sample user rules for cbbrowne

* Add source of xd75 rules

* Individualized xd75 rules

* Adopt LAYOUT to genericize the layout as an ortholinear 5x15 keyboard
2019-03-05 12:22:51 -08:00
Mitchel van Eijgen
8c2a23dee1 Add more "decent" text editors (#5308)
I'm a web designer and know there are several "decent" code editors out there, but I would figure not everyone into keyboards is, so I found Sublime text a bit of a hard sell for someone who just need to manipulate some text files. VS Code or Atom would b a much better suit for them instead of dropping $80 on a "decent" text editor.
2019-03-05 07:31:54 -08:00
Eduardo Lourenço Pinto Neto
69d6298f6b Add DZ60 Tsangan Layout + Fn layer (#5319)
* Fix Mac mute keycode

* Add DZ60 Tsangan layout with Fn layer

* Add new line at end of the file
2019-03-05 07:28:35 -08:00
lf
4c62c7bd6e [Docs] Fix function signature (layer_state_set_*) (#5313)
`void uint32_t` is not a return type.
2019-03-04 22:08:09 -08:00
noroadsleft
a8a9a2066e Correct keyboard and layout dimensions for 40percent.club Foobar (#5310) 2019-03-04 20:19:05 -08:00
noroadsleft
a903893883 Dactyl Manuform 5x6, 5x7, and 6x6: QMK Configurator fixes and partial code clean-up (#5307)
* Tidy up 5x6.h

- replaced tabs with spaces (QMK convention)
- aligned layout macro visually

* Fix Configurator support for Dactyl Manuform 5x6

- layout macro had the wrong name in info.json

* Tidy up 5x7.h

- replaced tabs with spaces (QMK convention)
- aligned layout macro visually

* Fix Configurator support for Dactyl Manuform 5x7

- corrected keyboard height
- layout macro had the wrong name in info.json

* Tidy up 6x6.h

- replaced tabs with spaces (QMK convention)
- aligned layout macro visually

* Fix Configurator support for Dactyl Manuform 6x6

- layout macro had the wrong name in info.json
2019-03-04 10:09:37 -08:00
yiancar
3e8ee96b2c Fixed default to dissable VIA (#5309)
This should have gone into previous PR but I am dumb
2019-03-04 08:34:08 -08:00
James Churchill
c7c4937eef Clean up debounce a bit (#5255) 2019-03-04 07:44:46 -08:00
zvecr
cdfcbfc92d Fix aanzee Configurator config file (#5286) 2019-03-04 06:29:29 -08:00
yiancar
7bfe0879bf Separate keymaps to VIA enabled/dissabled. (#5302)
* Separate keymaps to VIA enabled/dissabled.

- Default rules.mk has been changed to disable via.
- VIA keymaps have been added for default keymaps.

* Update naming
2019-03-04 06:28:33 -08:00
stanrc85
043ef40b92 [Keymap] Add RGB config and controls to userspace (#5299)
* Add INSERT and EEP_RST to HS60 keymap

* Add INSERT to keymap

* Layer based RGB colors

* Move RGB code to layer_rgb.c

* New file with layer based RGB colors

* Use RGB code if RGBLIGHT is enabled

* Set RGB options in config.h

* Remove rgb enable from init user
2019-03-03 15:31:12 -08:00
Drashna Jaelre
3305df8e79 Add LED Matrix to Features list for easy reference (#5280) 2019-03-03 15:29:29 -08:00
leico
a2a2ba0eec [Keymap] layout/community/ortho4x12/symbolic update (#5274)
* change readme.md

* diy LayerTap function

* fixed forgot update_tri_layer
correspound permissive hold

* update README

* change No_event of general shift

* update symbolic layout

* merge symbolic_general_shift to symbolic layout

* update README.md

* following code style

* delete excess codes, change codes that don't follows the code style
2019-03-03 10:49:27 -08:00
Ray Cielencki
9b0a548687 [Keyboard] matrix_init_user shouldn't call itself (#5298) 2019-03-03 10:38:12 -08:00
omkbd
be497126e8 [Keymap] Update keymap.c (#5290) 2019-03-03 10:36:40 -08:00
yttyx
3380694740 Update Atreus layout to match the Niu layout. Fix Niu comment typo. (#5297) 2019-03-03 10:34:41 -08:00
KOBAYASHI Daisuke
f9f04ff2a4 [Keymap] Fix comment in the KBD67 default keymap. (#5296) 2019-03-03 10:33:52 -08:00
takashiski
98b87e6357 [Keyboard] update Hecomi/alpha's info.json (#5295)
* remove offset

* update layout(I missed)

* formatted
2019-03-03 10:33:19 -08:00
Adam Newbold
b5d85ddc90 [Keyboard] Adding Numeric Keypad //e converter (#5294)
* Adding Numeric Keypad //e to conversions

* Update keyboards/converter/numeric_keypad_IIe/config.h

//e -> IIe

Co-Authored-By: newbold <adam@neatnik.net>

* Update keyboards/converter/numeric_keypad_IIe/config.h

//e -> IIe and wrapped description in quotes for comma inclusion

Co-Authored-By: newbold <adam@neatnik.net>

* Updating info.json for Configurator

* Corrected legend

* Update keyboards/converter/numeric_keypad_IIe/info.json

Corrected layout

Co-Authored-By: newbold <adam@neatnik.net>
2019-03-03 10:29:27 -08:00
Ray Cielencki
6aba3ce9d2 [Keyboard] Add support for matrix_scan_user to usb-usb converter (#5291)
* [Keyboard] Add support for matrix_scan_user to usb-usb converter

* update to matrix_scan_quantum

* also add init calls
2019-03-03 10:25:08 -08:00
noroadsleft
79e0964d21 handwired/terminus_mini: refactor, Configurator support, and readme cleanup (#5292)
* handwired/terminus_mini: refactor

- white space changes in terminus_mini.h (alignment)
- keymap now uses #include QMK_KEYBOARD_H
- refactored TMK macros into QMK process_record_user
- refactored TMK layer functions into QMK keycodes
- removed redundant keycode definitions

* handwired/terminus_mini: Configurator support

* handwired/terminus_mini: readme cleanup

- completed keyboard description
- removed Hardware Availability line (it was blank)
- updated Docs links
2019-03-02 17:08:42 -08:00
Konstantin Đorđević
be1d5c6609 Add SysRq, Break combos and other keys to Melody96 keymap 2019-03-02 16:04:37 +01:00
Konstantin Đorđević
51182a4f03 Add media controls to Melody96 keymap 2019-03-02 15:16:01 +01:00
Konstantin Đorđević
f9c070e1a4 Update Godspeed colors 2019-03-02 15:16:00 +01:00
Konstantin Đorđević
9baee84b36 ACTION_TAP_DANCE_DOUBLE_MODS → ACTION_TAP_DANCE_DOUBLE_MOD 2019-03-02 15:16:00 +01:00
Konstantin Đorđević
6a088f7ff6 Add blank lines, prefer explicit initialization 2019-03-02 15:15:59 +01:00
Konstantin Đorđević
14908f86fb Replace td_fn_rctrl with generic td_layer_mod 2019-03-02 15:15:59 +01:00
Konstantin Đorđević
b05a4b1a4b Replace td_lshift_fn with generic td_mod_layer, add TD_RCTL_FN
Move TD_FN_RCTL after TD_RCTL_FN
2019-03-02 15:15:59 +01:00
Konstantin Đorđević
1b3b9414b7 Update tap dance function names 2019-03-02 15:15:58 +01:00
Konstantin Đorđević
45dddfa6c2 Set preferred intervals for rgblight effects 2019-03-02 15:15:58 +01:00
Konstantin Đorđević
fbe2eba472 Add GODSPEED_YELLOW color 2019-03-02 15:15:58 +01:00
Konstantin Đorđević
de2e03650b Update GODSPEED_BLUE values and RGB mode keys 2019-03-02 15:15:58 +01:00
Konstantin Đorđević
8e0dfdfb53 Set Melody96 underglow color to Godspeed blue on EEPROM reset 2019-03-02 15:15:57 +01:00
Konstantin Đorđević
f09a237a07 Remove most _keymap and _user definitions in userspace
Some keyboards misuse _user functions by defining them in the base files
instead of the corresponding _kb functions (especially led_set_user and
matrix_init_user). Until this is fixed (#5148), I've removed definitions
in my userspace that could cause linking collisions.
2019-03-02 15:15:57 +01:00
Konstantin Đorđević
784e2af062 Make toggle_numpad a nested function in process_record_user 2019-03-02 15:15:57 +01:00
Konstantin Đorđević
be65a0cc79 Add _keymap versions of other custom Quantum functions
Not added: eeconfig_update_keymap, eeconfig_read_keymap
2019-03-02 15:15:56 +01:00
Konstantin Đorđević
bd43df53bd Use two spaces before inline comments 2019-03-02 15:15:56 +01:00
Konstantin Đorđević
5a41c06cd7 Switch to UNICODEMAP in keyboard rules 2019-03-02 15:15:56 +01:00
Konstantin Đorđević
7b11d740ea Avoid collisions with X_* send string constants 2019-03-02 15:15:55 +01:00
Konstantin Đorđević
ddb0f39ebf Generate UNICODE and UNICODEMAP constants using macros 2019-03-02 15:15:55 +01:00
Konstantin Đorđević
2f07627a5d Add RGB_SET keycode to Melody96 and RGB files to userspace 2019-03-02 15:15:55 +01:00
Konstantin Đorđević
d163b22dfb Add RGB controls and numpad Unicode to Melody96 keymap 2019-03-02 15:15:54 +01:00
Konstantin Đorđević
ea23035c53 Use "Vo-", "Vo+" instead of "VoD", "VoU" in keymap comments 2019-03-02 15:15:54 +01:00
Konstantin Đorđević
ef189da243 Move feature flags from userspace into keyboard rules 2019-03-02 15:15:53 +01:00
Konstantin Đorđević
db1ace5426 Add melody96:konstantin keymap 2019-03-02 15:15:53 +01:00
Konstantin Đorđević
012c5ef9bd Update custom SEND_STRING 2019-03-02 15:15:53 +01:00
Konstantin Đorđević
f2543c3b9b DST_RMV → DST_REM 2019-03-02 15:15:52 +01:00
Konstantin Đorđević
6695c874fb Add DST_MOD_MASK as a config option 2019-03-02 15:15:52 +01:00
Konstantin Đorđević
6f386ca6ae Change how desktop commands work 2019-03-02 15:15:51 +01:00
holtenc
6e48ea082d [Keyboard] Initial commit for Prime_E w/ VIA config support (#5285)
* Initial Prime_E commit

* Via support for Prime_EXL

* Backlight testing

* update libs

* Clean up and addition of VIA compatibility.

* Update keyboards/handwired/prime_exl/keymaps/via/keymap.c

Co-Authored-By: holtenc <holtenc@gmail.com>

* Update keyboards/handwired/prime_exl/keymaps/via/keymap.c

Co-Authored-By: holtenc <holtenc@gmail.com>

* Update keyboards/handwired/prime_exl/keymaps/via/keymap.c

Co-Authored-By: holtenc <holtenc@gmail.com>

* Update keyboards/handwired/prime_exl/keymaps/via/keymap.c

Co-Authored-By: holtenc <holtenc@gmail.com>

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

Co-Authored-By: holtenc <holtenc@gmail.com>

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

Co-Authored-By: holtenc <holtenc@gmail.com>

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

Co-Authored-By: holtenc <holtenc@gmail.com>

* Update keyboards/handwired/prime_exl/keymaps/via/keymap.c

Co-Authored-By: holtenc <holtenc@gmail.com>

* Update keyboards/handwired/prime_exl/keymaps/via/keymap.c

Co-Authored-By: holtenc <holtenc@gmail.com>

* Update keyboards/handwired/prime_exl/keymaps/via/keymap.c

Co-Authored-By: holtenc <holtenc@gmail.com>

* Update keyboards/handwired/prime_exl/keymaps/via/keymap.c

Co-Authored-By: holtenc <holtenc@gmail.com>

* Update keyboards/handwired/prime_exl/keymaps/via/keymap.c

Co-Authored-By: holtenc <holtenc@gmail.com>

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

Co-Authored-By: holtenc <holtenc@gmail.com>

* removed IS_COMMAND from config.h. updated GPIO commands

* clean up libs
2019-03-01 21:14:24 -08:00
moyi4681
681db534f3 [Keyboard] add dz60rgb ansi and hhkb support; add dz40rgb (#5231)
* add dz60rgb keyboard

* add info.json

* Update config.h

* Update rules.mk

* Update dz60rgb.h

* Update dz60rgb.c

* Update keymap.c

* Update dz60rgb.h

* Create readme.md

* Update readme.md

* Update keymap.c

* Update dz60rgb.h

* Update info.json

* Update info.json

* Update dz60rgb.c

add dz60rgb ansi, iso and hhkb support

* Update dz60rgb.h

add dz60rgb ansi, iso and hhkb support

* Add files via upload

* Add files via upload

* Delete config.h

* Delete keymap.c

* add ansi,iso and hhkb layout

* add dz60rgb ansi,iso and hhkb layout

* Update keyboards/dztech/dz40rgb/dz40rgb.c

Co-Authored-By: moyi4681 <moyi4681@users.noreply.github.com>

* Update keyboards/dztech/dz60rgb/keymaps/hhkb/config.h

Co-Authored-By: moyi4681 <moyi4681@users.noreply.github.com>

* Update keyboards/dztech/dz60rgb/keymaps/hhkb_iso/config.h

Co-Authored-By: moyi4681 <moyi4681@users.noreply.github.com>

* Update keyboards/dztech/dz60rgb/keymaps/iso/config.h

Co-Authored-By: moyi4681 <moyi4681@users.noreply.github.com>

* Update keyboards/dztech/dz40rgb/rules.mk

Co-Authored-By: moyi4681 <moyi4681@users.noreply.github.com>

* Update keyboards/dztech/dz60rgb/keymaps/ansi/config.h

Co-Authored-By: moyi4681 <moyi4681@users.noreply.github.com>

* Update keyboards/dztech/dz60rgb/keymaps/default/config.h

Co-Authored-By: moyi4681 <moyi4681@users.noreply.github.com>

* Update keyboards/dztech/dz40rgb/keymaps/default/config.h

Co-Authored-By: moyi4681 <moyi4681@users.noreply.github.com>

* Update dz40rgb.c
2019-03-01 19:40:08 -08:00
zvecr
d8ccabeeef [Keyboard] Convert mf68_ble to keymap (#5287)
* Initial refactor of handwired bluetooth mod to keymap

* Initial refactor of handwired bluetooth mod to keymap - strip out unnecessary duplicate config, update readme

* Initial refactor of handwired bluetooth mod to keymap - reduce firmware size

* Initial refactor of handwired bluetooth mod to keymap - update readme image
2019-03-01 19:33:05 -08:00
stanrc85
d5f01ad2f9 [Keymap] Added INSERT to my keymaps (#5284)
* Add INSERT and EEP_RST to HS60 keymap

* Add INSERT to keymap
2019-03-01 11:09:49 -08:00
Andy
f4a2e58182 HS60 v2: Instructions how to reset and flash (#5241)
* HS60 v2: Instructions how to reset and flash

* HS60v2 README using place holder for keymap
2019-03-01 09:12:20 -08:00
unausgeschlafen
7abf507cb6 [Keymap] unausgeschlafen quefrency keymap (#5273)
* unausgeschlafen quefrency keymap

* added build & flash instructions

* review by drashna
2019-03-01 08:45:42 -08:00
MechMerlin
5c491da0e7 [Keymap] Fix rgblight_enable ifdefs (#5283) 2019-03-01 08:33:29 -08:00
Dan
41d8be7e75 [Keymap] DCompact Layout Updates pt. 3 (#5209)
* Fix whitespace and Markdown errors

* Add DCompact layout implementation for Levinson keyboard

* Rename README.md to readme.md

* Rename README.md to readme.md

* Rename README.md to readme.md

* Update keyboards/keebio/levinson/keymaps/dcompact/keymap.c

Co-Authored-By: loksonarius <loksonarius@users.noreply.github.com>

* Update keyboards/keebio/levinson/keymaps/dcompact/keymap.c

Co-Authored-By: loksonarius <loksonarius@users.noreply.github.com>
2019-03-01 08:28:46 -08:00
yynmt
a1de199aa9 [Keyboard] Add Dozen0 (#5272)
* Add Dozen0 macropad

* Fix readme image

* Add info.json

* Fix keymap f12

* Fix copyright and replace include guards

* remove IS_COMMAND at config.h
2019-02-28 20:12:56 -08:00
Dusty Pomerleau
f6a0ee85fd [Keymap] update: add extrakey support for macOS media keys (#5263)
* add dusty keymap

* change keymap folder to match my github username

* initial keymap completed in comments only

* layout without NAV completed in comments only

* disable Command to prevent interference with Space Cadet keys

* switch _ and \ in the symbol layer

* Layers complete through _NAV

* add thumb keys to _NAV

* complete _NUM

* all layouts complete; still needs `process_user_record()`

* completed first draft of keymap; still needs config.h to match

* corrected keycodes for Mac macro-volume keys

* fix Mac mute keycode

* add missing Mac keycodes for previous and next track

* placeholder for qwerty layout, not yet completed;

remove unnecessary breaks;

add todos

* eliminate Preonic branch before switching to Minidox branch:

• delete dustypomerleau Preonic keymap folder

• complete keymap.c (QWERTY layer, vanilla numbers layer)

TODO:
• add preferences to config.h
• complete the README

* edit commented keymap diagrams for clarity in dual function keys

* define initial config.h and add rules.mk for mouse key support

* fix redundant line after implementation of tap_code()

* fixed key_timer declaration, added README and rules

* formatting of keymap

* add CTPC to config

* cycle thumb keys to favor center position

* modify config.h for temporary Pro Micro compatibility

* remove superfluous call to use serial; homebrewed mod tap keys are still broken with OSL

* merge _SYS and _MEDIA on new Z_SYS key

* ALT_OP example of new MT macro complete

* initial narze-inspired MT fixes in PRU

* add (currently superfluous) custom keycode for the _SYS layer

* rudimentary `OSL` symbol macros that immediately register the mod and fail to reset the oneshot layer, but do output the proper keys—fix both of these things

* remove permissive hold to improve tapping performance

* remove calls to `clear_oneshot_layer_state()`, as they have no effect inside `process_record_user()`. Tapdance appears to be the way forward.

* final commit before tapdance code; correct layout in comments

* initial tapdance code for shifted mod taps

* add numeric and ergo NUM layers and pinky shifts for keycuts

* add TD() wrappers to tapdance codes and clean up commented layout guides

* add faux return to cur_dance to allow compilation - TODO: research what the default clause should be in cur_dance

* update commented schematics for better readability

* add backspace and delete to lockable layers, Z_SYS -> SYS_Z for consistency, fix schematic errors

* add `DOUBLE_SINGLE_TAP` to tapdance cases to allow doubling of the single tap character without waiting tapping term

* remove reduced oneshot tapping toggles

* update README

* newline tweak :)

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

Co-Authored-By: dustypomerleau <dustypomerleau@users.noreply.github.com>

* Update keyboards/minidox/keymaps/dustypomerleau/config.h

Co-Authored-By: dustypomerleau <dustypomerleau@users.noreply.github.com>

* Update keyboards/minidox/keymaps/dustypomerleau/config.h

Co-Authored-By: dustypomerleau <dustypomerleau@users.noreply.github.com>

* Update keyboards/minidox/keymaps/dustypomerleau/config.h

Co-Authored-By: dustypomerleau <dustypomerleau@users.noreply.github.com>

* Update keyboards/minidox/keymaps/dustypomerleau/config.h

Co-Authored-By: dustypomerleau <dustypomerleau@users.noreply.github.com>

* remove `PREVENT_STUCK_MODIFIERS`, as this is default behavior

* enable extrakey in rules to enable media keys

* enable extrakeys for media key compatibility on macOS

* add dash and slash to _NUM layers

* change to universal volume keycodes

* revert micro volume adjustments to macOS-specific codes due to lack of functionality (macro volume adjustments are still universal)
2019-02-28 15:27:34 -08:00
Luciano Malavasi
beb292e7f0 [Keymap] My TMO50 layout (#5116)
* keymap + alpha

* some fixes

* keymap + alpha

* some fixes

* drashna changes

* linked main Alpha repo in keyboards/alpha readme

* missed a spot

* there's another function called FUNC lol

* keymap + alpha

* some fixes

* keymap + alpha

* drashna changes

* Fixed include

* Revert "Fixed include"

This reverts commit ea92f261f8.

* messed up my git, fixed include

* starting work on TMO50 layout

* Update keyboards/tmo50/keymaps/default/keymap.c

Co-Authored-By: PyrooL <lm11887@gmail.com>
2019-02-28 13:02:16 -08:00
avatak
8dd1dab7cb Added two songs to song_list.h (FF Prelude and To Boldly Go) (#5252)
Adds FF_Prelude (from most Final Fantasy games) and TO_BOLDLY_GO (a melody from the main themes of Star Trek TNG and the original series)
2019-02-28 12:35:42 -08:00
Tobias Schulte
7470317d95 [Keymap] use steno mode from base (#5220) 2019-02-28 12:33:02 -08:00
Graham P Heath
9b82a9295f [Docs] Add note about using Unicode Hex Input (#5248)
* Add note about using Unicode Hex Input

* Update docs

* remove extra return, oops
2019-02-28 12:15:38 -08:00
fauxpark
220551ed5f [Keyboard] GH60 Satan improvements (#5264)
* GH60 Satan improvements

* Link no worky

* Accidentally a h

* Use MOD_MASK_SHIFT from core

* Remove nonexistent layouts from here
2019-02-28 12:06:26 -08:00
stanrc85
32b63d676f [Keymap] Cleaning up my config and userspace files (#5265)
* Removed since options are in userspace

* Removed RGB option that was breaking one of my builds

* Remove unused options

* Removed options present in userspace, add board specific options here

* Removed code also present in userspace

* Turns out those lines were needed, added them back

* Testing changes

* Added code to ensure board read as ANSI instead of default ISO for HS60

* Setting \ key to "MOD" instead of "ALPHA" for lighting
2019-02-28 12:02:22 -08:00
MechMerlin
a872faa53e [Keymap] Userspace Keymap Updates (#5215)
* enable velocikey for my userspace and explicitly for my 75% layout

* add guards to only turn on RGB stuff if the RGB pin is actually defined

* update 60_ansi keymap

* update the 60_ansi_split_bs_rshift keymap

* update 66_ansi keymap

* update docs

* Update layouts/community/60_ansi/mechmerlin-ansi/keymap.c

Co-Authored-By: mechmerlin <30334081+mechmerlin@users.noreply.github.com>

* Update layouts/community/60_ansi_split_bs_rshift/mechmerlin-split/keymap.c

Co-Authored-By: mechmerlin <30334081+mechmerlin@users.noreply.github.com>

* Update layouts/community/60_ansi_split_bs_rshift/mechmerlin-split/keymap.c

Co-Authored-By: mechmerlin <30334081+mechmerlin@users.noreply.github.com>

* Update layouts/community/66_ansi/mechmerlin/keymap.c

Co-Authored-By: mechmerlin <30334081+mechmerlin@users.noreply.github.com>

* Update layouts/community/60_ansi_split_bs_rshift/mechmerlin-split/keymap.c

Co-Authored-By: mechmerlin <30334081+mechmerlin@users.noreply.github.com>

* Update layouts/community/60_ansi/mechmerlin-ansi/keymap.c

Co-Authored-By: mechmerlin <30334081+mechmerlin@users.noreply.github.com>

* Update layouts/community/60_ansi/mechmerlin-ansi/keymap.c

Co-Authored-By: mechmerlin <30334081+mechmerlin@users.noreply.github.com>

* remove my attempt to find a good way to detect this

* move audio clicky into user space and do feature setting per keyboard

* fixup 66_ansi keymap

* update changelog

* update readme
2019-02-28 11:37:34 -08:00
Juno Nguyen
3ac3bb9b5e [Keymap] Added personal keymaps for Planck, Preonic, Vitamins Included by Juno (#5169)
* Added personal keymaps for Planck, Preonic, Vitamins Included by Juno

* Removing redundancies as suggested

* More removals that were missed out in the previous commits

* Updated Preonic to use new layout

* More redundancies missed out

* Updated more optimal code for FN layer LED indicator.

* Further codes clean up.
2019-02-28 11:12:32 -08:00
Christoffer Holmberg
95d2a11c44 Update Nyquist layout (#5270)
* Add Home,End,Insert,Del to Arrow layer

* Add Back & Forward to Arrow layer

* fix typo
2019-02-28 06:11:52 -08:00
zvecr
a120a000d4 Add Configurator support and readme for boardwalk (#5261)
* Add configurator support and readme for boardwalk

* Readme review comments
2019-02-27 07:20:45 -08:00
zvecr
a0c36ed253 [Keyboard] Add configurator support for 40percentclub/half_n_half (#5260) 2019-02-26 13:49:05 -08:00
Jeri Mason
dcf4877fac Bucktooth 2.0 key layout for Preonic (#5258)
Updated layout slightly for better compatibility with sculpted
(row-specific) profile keysets.

Fix build error on rev 3 toolchain; click waits don't seem to be
necessary anymore.
2019-02-26 13:17:28 -08:00
mcmadhatter
659e5d6316 [Keymap] Hs60 win osx dual (#5249)
* Added a dual windows/osx layout

Default layer is normal ISO for windows. Second layout is Windows ISO layout but for OSX, but with the keys corrected so you will get the correct shifted and alt'd keys on OSX (keyboard keys match OSX keys without having to change your keyboard type in system preferences).  Layer three is configuration and other functions, and layer four is where the shifting magic happens.  Also tab and caps lock have been swapped around.

* made sure bootmagic is in a seperate rules.mk

made sure bootmagic is in a seperate rules.mk

* commiting the keymap rules.mk

commiting the keymap rules.mk
2019-02-26 13:05:18 -08:00
Mikkel Jeppesen
168b0cf64d Added a numpad keymap for the vitamins included keyboard (#5247)
* Fixed pin for RGB

* Added numpad keymap for vitamins included

* Implemented changes
2019-02-26 13:04:28 -08:00
stanrc85
bcaf66bd32 [Keymap] Converted stanrc85 community layout to userspace (#5244)
* Convert community layout to userspace for future use

* Big readme update

* Move layer toggle to CAPS

* Readme updates

* Deleted since unused

* Removed call to unused .c file
2019-02-26 13:01:46 -08:00
jotix
11bdf28001 LAYOUT_ortho_4x4 (#5257) 2019-02-26 08:12:56 -08:00
fauxpark
0d936b2fe6 Ask for your name when generating a new keyboard (#5214)
* Ask for your name when generating a new keyboard

* Update docs

* Apply suggestions from code review

Co-Authored-By: fauxpark <fauxpark@gmail.com>
2019-02-26 07:59:34 -08:00
Stick
7ba2bc765b [Keymap] nstickney's layout for iris (#5045) 2019-02-25 22:26:39 -08:00
VM
80ddb34415 [Keymap] adding my Levinson keymap (#5177)
* [keymap] adding my Levinson keymap

pretty self explanatory, added the readme, just in case

tested it just now, seems to work fine for my needs

* Update keymap.c

removing the deprecated persistent layer function as Drashna kindly reminded me

* Apply suggestions from code review

incorporated the suggestions, and thanks again for taking care of me with my silly changes :)

Co-Authored-By: OMGVee <mateescu.victor@gmail.com>

* Fix up audio calls
2019-02-25 21:30:26 -08:00
stanrc85
7a89b39aad [Keymap] HS60 v2 keymap updates (#5250)
* Add backlight controls

* Add backlight controls and remove RGB underglow

* Make HS60 board specific changes to readme

* Remove BL_TOGG as it isn't use on this board
2019-02-25 18:16:20 -08:00
Nick Christus
5838c458d7 [Keyboard] Added Boardwalk keyboard (#5195)
* initial commit

* removed key for fn layer

* added missing row, misc cleanup

* added nchristus keymap, more misc cleanup

* Updating ergo60.h, rules

* Adding McAllaster keymap

* added a bunch of keymaps

* added LED code

* added userspace

* ls vitamins keymap

* added Boardwalk keyboard

* boardwalk: removed unrelated files

* boardwalk: undoing tkc1800 change

* boardwalk: undoing tkc1800 change

* nchristus keymap cleanup

* boardwalk: updates per PR feedback

* boardwalk: updated bootloader

* boardwalk: additional updates from PR review
2019-02-25 17:24:11 -08:00
yttyx
f019cd12a5 [Keymap] Balance Twelve-based layout for Niu Mini (#5228)
* Balance Twelve-based layout for Niu Mini.

* niu - Changes following review.

* niu - Changes following review.
2019-02-25 17:09:42 -08:00
zvecr
36fce12d08 [Keyboard] Initial refactor of maxipad to conform to current standards (#5233) 2019-02-25 17:07:58 -08:00
noroadsleft
303859ea28 handwired/magicforce68: refactor, Configurator support, and readme cleanup (#5234)
* handwired/magicforce68: refactor

- layout macro KEYMAP renamed to LAYOUT
- keymap now uses #include QMK_KEYBOARD_H
- keymap now uses non-auto-prepended keycodes per QMK standard.
- deleted deprecated and unused action_get_macro block from default
keymap.

* handwired/magicforce68: Configurator support

* handwired/magicforce68: readme cleanup

- updated to current QMK template
- rename file to lowercase
- fix make commands
- Add Docs links
2019-02-25 17:05:22 -08:00
Andy
65db404260 [Keymap] HS60 v2 ISO layout andys8 (#5235) 2019-02-25 17:04:15 -08:00
MechMerlin
d7e3d718d0 Some minor refactoring of boards in 1upkeyboards directory (#5236)
* use #pragma once

* get rid of code for unused indicators

* pragma once and other small fixes for consistency

* use #pragma once

* pragma once and other small fixes for consistency

* add a short blurb to the readme

* turn on compiler optimization flags

* remove the compiler optimization

* remove compiler optimization for super16
2019-02-25 17:03:36 -08:00
Danny Nguyen
da5e904306 Fix pinout for Quefrency left half w/macros 2019-02-25 17:00:26 -08:00
MechMerlin
7276cc24d0 [Keyboard] KBDFans Minor Fixes (#5238)
* pragma once and turn on bootmagic lite

* pragma once changes and turning on bootmagic lite

* switch to using pragma once

* switch to using #pragma once

* switch to using #pramga once
2019-02-25 16:59:40 -08:00
takashiski
2c1963d583 [Keyboard] Hecomi conf (#5246)
* add info.json

* update readme

* remove info.json from no rule.mk folder
2019-02-25 16:51:09 -08:00
stanrc85
c4451f4505 Corrected HS60 v2 keyboard name in info.json (#5242)
* Corrected keyboard name in info.json

* Updated maintainer to yiancar
2019-02-25 08:02:40 -08:00
Adam Price
79acf1e660 atreus default keymap pagedown didn't match comment instructions (#5245) 2019-02-25 08:01:50 -08:00
Hackerpilot
c1cb95d953 Clear up the confusion between the kbd67/kbd65 naming. 2019-02-24 20:00:26 -08:00
Brian Schott
d093678458 Update readme.md 2019-02-24 19:49:48 -08:00
Brian Schott
2fe21c67c5 Update readme.md 2019-02-24 19:49:48 -08:00
Brian Schott
1c2b3143d0 The code in this directory supports the KBD65 2019-02-24 19:49:48 -08:00
Konstantin Đorđević
d5dcf54e23 Fix indentation in quantum_keycodes.h (#5221) 2019-02-24 15:21:09 -08:00
stanrc85
c8de0f78bf [Keymap] Initial upload of stanrc85 HS60 v2 layout and config (#5217) 2019-02-24 15:14:55 -08:00
Fred Silberberg
6f30a6b407 [Keymap] Added a key to handle copy/paste in and out of a terminal (#5205) 2019-02-24 14:57:16 -08:00
Tobias Schulte
a69e4406d4 Fix Tx Bolt ghosting second character on key press (#5229)
* convert tabs to spaces

* fix #4578: don't call gemini protocol code when in bolt mode

Add missing break; statements in switch. The missing break resulted in
a fall through and an additional processing of the gemini code.
2019-02-23 19:32:48 -08:00
skullydazed
0f62383be5 Clueboard 66% Hotswap Support (#5204)
* Initial Clueboard 66% arm support

* Fix LAYOUT_66_ansi

* wip

* Bring this branch up to date with led_matrix

* Get Clueboard 66% hotswap working with led_matrix

* stm32 cleanup

* Fix compiling for clueboard 66% hotswap prototype

* Reduce the size of the prototype firmware
2019-02-23 17:25:25 -08:00
SpacebarRacecar
539a6fc825 removed old keymaps (#5227) 2019-02-23 17:22:55 -08:00
KOBAYASHI Daisuke
58d035dccc Keymap: Update Koba's keymap for Ergo42. (#5223) 2019-02-23 17:22:20 -08:00
Campbell Barton
791cdd6e31 Update readme.md (#5230)
Correct comment.
2019-02-23 17:21:01 -08:00
mechmerlin
db26d0fbd8 edit the readme to mention the NYM96 since it's the same PCB and is currently on sale at Massdrop 2019-02-22 17:05:32 -08:00
jotix
24a8bc3fd0 Jotix keymaps (#5203)
* jotix 4x12 keymap

* readme corrections

* jotix ortho 4x12 keymap

* jotix ortho 4x12 keymap

* jotix ortho 4x12 keymap

* jotix ortho 4x12 keymap

* jotix ortho 4x12 keymap

* jotix ortho 4x12 keymap

* jotix ortho 4x4 keymap

* jotix ortho 4x4 keymap

* jotix keymaps
2019-02-22 08:47:42 -08:00
TerryMathews
50139d9c59 Candybar: remove mousekeys as default (#5210)
Binaries compiled at config.qmk.fm are oversized for the MCU. Adjusting
default options to compensate.
2019-02-22 08:46:05 -08:00
jotix
c3cf9c0cef Jotpad16 (#5212)
* jotix 4x12 keymap

* readme corrections

* jotix ortho 4x12 keymap

* jotix ortho 4x12 keymap

* jotix ortho 4x12 keymap

* jotix ortho 4x12 keymap

* jotix ortho 4x12 keymap

* jotix ortho 4x12 keymap

* add jotpad keyboard

* add jotpad keyboard

* backlight pin for arduino pro micro

* readme correction

* readme correction

* jotpad16

* Update keyboards/handwired/jotpad16/jotpad16.h

Co-Authored-By: jotix <47826561+jotix@users.noreply.github.com>

* Update keyboards/handwired/jotpad16/keymaps/default/keymap.c

Co-Authored-By: jotix <47826561+jotix@users.noreply.github.com>

* Update keyboards/handwired/jotpad16/readme.md

Co-Authored-By: jotix <47826561+jotix@users.noreply.github.com>
2019-02-22 08:08:25 -08:00
Takeshi ISHII
e3621c162c fix rgblight_effect_breathing interval time (#5213) 2019-02-22 08:07:31 -08:00
noroadsleft
384fef72d3 Replace instances of KEYMAP with LAYOUT
Many instances in the QMK Docs referenced KEYMAP macros, which is outdated terminology.

Replaced most instances of KEYMAP with LAYOUT, to reflect the desired usage.
2019-02-21 23:19:26 -08:00
SpacebarRacecar
8a2346eda1 [Keymap] Added preonic and mechmini 2 keymaps (#5202)
* added mechmini2 keymap

* added preonic keymap

* changed readme

* correction to mechmini 2 readme

* changes to preonic keymap
2019-02-21 09:39:04 -08:00
noroadsleft
9c73a4a5c6 Grammar cleanup of Flashing Your Keyboard Newbs Guide (#5201)
Fixed references to a "built" (sic) command, and an incorrect word.
2019-02-21 09:24:59 -08:00
jotix
0c607f8bf7 [Keyboard] add jotanck keyboard (#5192)
* add jotanck keyboard

* Update keyboards/jotanck/config.h

Co-Authored-By: jotix <47826561+jotix@users.noreply.github.com>

* Update keyboards/jotanck/config.h

Co-Authored-By: jotix <47826561+jotix@users.noreply.github.com>

* Update keyboards/jotanck/config.h

Co-Authored-By: jotix <47826561+jotix@users.noreply.github.com>

* Update keyboards/jotanck/config.h

Co-Authored-By: jotix <47826561+jotix@users.noreply.github.com>

* Update keyboards/jotanck/jotanck.h

Co-Authored-By: jotix <47826561+jotix@users.noreply.github.com>

* Update keyboards/jotanck/jotanck.h

Co-Authored-By: jotix <47826561+jotix@users.noreply.github.com>

* Update keyboards/jotanck/jotanck.h

Co-Authored-By: jotix <47826561+jotix@users.noreply.github.com>

* requested changes

* Update keyboards/handwired/jotanck/readme.md

Co-Authored-By: jotix <47826561+jotix@users.noreply.github.com>

* add backlight support

* add default keymap image to readme

* add default keymap image to readme
2019-02-21 09:08:28 -08:00
Chris Lewis
c1c5922aae Velocikey: Match RGB animation speed to typing speed (#3754)
* Draft commit of typing speed RGB control

* More information in the readme

* Support all RGB animation modes (Fixes #1)

* Added support for all RGB light modes to use typing speed

Except christmas lights because that is seizure-inducing at high speeds!

* Introduced a value range specific to each RGB mode

Because some modes are a little too much when running at full speed!

* Update readme.md

* Update readme.md

* Re-arrange typing_speed definitions (Fixes #5) (#6)

* Re-arrange variable definitions to avoid including quantum.h from rgblight.c

* Fix a compilation error when trying to run make test:all

* Tweaks to the typing speed decay rate

* Renamed to momentum; moved implementation into dedicated files

* Groundwork for toggling momentum on/off (currently always on)

* Add EEPROM toggle for momentum-matching

* Moved momentum out of RGBLIGHT_ENABLE toggles so it's more generic

* Move momentum decay task out of rgblight_task()

* Fix missing momentum.h in lufa.c

* Experimental LED support (untested)

* Draft commit of typing speed RGB control

* More information in the readme

* Support all RGB animation modes (Fixes #1)

* Added support for all RGB light modes to use typing speed

Except christmas lights because that is seizure-inducing at high speeds!

* Introduced a value range specific to each RGB mode

Because some modes are a little too much when running at full speed!

* Update readme.md

* Update readme.md

* Re-arrange typing_speed definitions (Fixes #5) (#6)

* Re-arrange variable definitions to avoid including quantum.h from rgblight.c

* Fix a compilation error when trying to run make test:all

* Tweaks to the typing speed decay rate

* Renamed to momentum; moved implementation into dedicated files

* Groundwork for toggling momentum on/off (currently always on)

* Add EEPROM toggle for momentum-matching

* Moved momentum out of RGBLIGHT_ENABLE toggles so it's more generic

* Move momentum decay task out of rgblight_task()

* Fix missing momentum.h in lufa.c

* Added documentation

* Renamed feature to velocikey

* Reverted readme to original state

* Correct the readme title

* Updated feature name in the docs

* Update EECONFIG name

* Add compile-time toggles for velocikey

* Update feature documentation

* Revert "Merge branch 'led-support' into master"

This reverts commit e123ff5feb, reversing
changes made to df111a55b9.

* Move velocikey EECONFIG definition to depend on VELOCIKEY_ENABLE

* Rename decay_task function to decelerate

* Apply suggestions from code review

Co-Authored-By: chrislewisdev <chris@chrislewisdev.com>

* Re-order eeconfig definitions

* Apply coding conventions

* Apply #ifdef check in lufa.c

* Refactored interval time checks into one functionc

* Small rename

* Fix unused function error for layouts not using all rgb effects

* Only update EEPROM if Velocikey is enabled

* Incorporate code review feedback

* Small adjustment to top-end decay rate

* Add Velocikey documentation to table of contents

* Bring tetris:default keymap size down by disabling audio
2019-02-21 07:22:46 -08:00
Johannes Jansson
9f1d781fcb Updated hand wiring docs (#5198)
* renamed KEYMAP to LAYOUT in hand wiring docs

* added two additional guides for hand wiring
2019-02-20 17:27:27 -08:00
Chris Lewis
de0fb39403 Reduce tetris firmware size by disabling default audio (#5197) 2019-02-20 14:46:30 -08:00
Hannes Hornwall
657b44cb7c Make escape work after changing the backlight settings on the HS60 V2 (#5193) 2019-02-20 12:48:46 -08:00
noroadsleft
eb7a821c5b Markdown cleanup on Config Options doc
Descriptions for B5_AUDIO, B6_AUDIO, and B7_AUDIO under Hardware Options were partially italicized when parsed by Docsify, though rendered as intended by GitHub.
2019-02-20 12:06:15 -08:00
tw1t611
b6e1e6aeeb [Keymap] Add kinesis layout. (#5183)
* Add kinesis layout.

* Remove unneeded code.
2019-02-20 08:33:53 -08:00
MechMerlin
67495ae24a [Keyboard] Alf X1.1 QMK Support (#5189)
* initial commit

* get rid of vanilla cookie cutter code  and replace with  more correct info

* edit config file for pins and switch matrix size

* turn on bootmagic lite, and backlight/rgb settings

* copy pasta switch matrix from noroads tool

* create an appropriate keymap (copy pasta)

* disable some features to decrease firmware file size

* add qmk configurator support

* add in support for caps lock, scroll lock, and num lock leds
2019-02-19 20:57:15 -08:00
Ben
8ae83b490e [Docs] Fix typo in RGB Matrix Driver configuration (#5182)
* Fix #3797 firmware not compiling

If DRIVER_COUNT 1 firmware will not compile.

* Fix typo
2019-02-19 20:49:22 -08:00
mechmerlin
ffb75b720f move sixshooter into bpiphany directory and edit readme 2019-02-19 20:48:35 -08:00
mechmerlin
33f1259f89 get doro67 led working 2019-02-19 18:48:30 -08:00
zvecr
9a64c6b82e [Keyboard] XD84 fixes for caps lock led, backlight and firmware size (#5178)
* Enable backlight

* Enable Link Time Optimization

* Enable caps lock led
2019-02-18 16:48:52 -08:00
Takeshi ISHII
030faf951c Fix quantum/split_common/matrix.c: select_col()/select_row() (#5174)
* add temporary pdhelix(Patched Helix) code

* add test code into  quantum/split_common/matrix.c

* add test code into keyboards/handwired/pdhelix/

* Revert "add test code into keyboards/handwired/pdhelix/"

This reverts commit 9ed98f0797ddd962c99756689fc4ecb4cd067d3d.

* Revert "add test code into  quantum/split_common/matrix.c"

This reverts commit 1876d3ed69f6c213153a9f6476192be839f16c1f.

* Revert "add temporary pdhelix(Patched Helix) code"

This reverts commit 41ac92b814e3f894eaf85bc3e5bb945895342fa8.

* fix quantum/split_common/matrix.c: select_col()/select_row()
2019-02-18 13:55:20 -08:00
Drashna Jaelre
100697ebab Stop all notes on startup, if there is no song and audio is disabled to prevent continouse tone (#5173) 2019-02-18 12:32:38 -08:00
Jumail Mundekkat
149015e799 Fixed grep issue in bootloader build target (#3848)
* Changed use of '\s' in grep to '[ \t]' for portability

* Pushed DFU Keyboard.h into a shell script

* Fixed execution permissions on make_dfu_header,sh
2019-02-18 10:00:33 -08:00
upinthecloudz
0cee0764fd Fix Espectro Mac keymap and add new layout option (#4923)
* Fix Espectro Mac keymap and add new layout option

* Fix keymap

* Fix keymap
2019-02-18 09:59:08 -08:00
Drashna Jaelre
feee01192e Fix Audio Clicky by adding missing punctuation (#5171) 2019-02-18 09:53:38 -08:00
zvecr
1a6a2a7b75 Relocate usb_detach to utils (#5121)
* Relocate usb_detach to utils

* Relocate usb_detach to utils - fix up files after move
2019-02-18 09:03:44 -08:00
fauxpark
545f95c8f4 Migrate ACTION_LAYER_TAP_TOGGLEs to TT() 2019-02-18 08:52:51 -08:00
Yan-Fa Li
efef54032b [Docs] Add section about EEPROM on ARM (#5070)
* [Docs] Add section about EEPROM on ARM

* Add Preonic firmware

* Update docs/faq_build.md

add hyperlink

Co-Authored-By: yanfali <yanfali@gmail.com>
2019-02-18 08:50:22 -08:00
zvecr
fc06986989 Remove CUSTOM_MATRIX option from diode direction (#5090)
* Remove CUSTOM_MATRIX refs from DIODE_DIRECTION

* Remove '#define DIODE_DIRECTION CUSTOM_MATRIX'

* Remove CUSTOM_MATRIX refs from DIODE_DIRECTION documentation
2019-02-18 08:49:51 -08:00
zwnk
7639edb0ae [Keyboard] handwired dactyl with 2 pro micros added (#5113)
* handwired dactyl with 2 pro micros added

* dactyl_promicro README updated

* dactyl_promicro default layout fixed

* requested changes

* dactyl_promicro README updated

* qmk toolbox link fixed

* layout reflects phys. keys positions
2019-02-18 08:49:11 -08:00
Rys Sommefeldt
0e68b6c1a9 Add UK variant of the SEND_STRING() LUTs 2019-02-18 08:47:31 -08:00
Drashna Jaelre
3d4aabf251 Update Helix 'led_test' keymap (#5168)
Change to use keyboard_post_init_user() hook (#3113)
2019-02-18 08:36:41 -08:00
MechMerlin
66a86bc50c [Keymap] update keymap and readme for my 75% layout (#5166) 2019-02-18 08:36:12 -08:00
MechMerlin
f0edc993b7 [Keyboard] Winkeyless Directory (#5163)
* introduce wkl directory and readme

* move bface into winkeyless directory and edit readme for new make instructions

* move bmini into the winkeyless directory and edit readme

* move bmini ex into winkeyless directory

* edit readme some more

* add newbs guide to readmes

* fix path to bface

* temporarily turn off community layout support until we refactor this taking out all the custom ps2avrgb stuff
2019-02-18 08:35:34 -08:00
zvecr
593d08d6ae [Keyboard] Add LAYOUT_75_iso community layout support (#5161)
* Add LAYOUT_75_iso community layout support

* Add LAYOUT_75_iso community layout support - review comments
2019-02-18 08:33:10 -08:00
mtei
2cd2078b9d Update Helix 'led_test' keymap
Change to use keyboard_post_init_user() hook (#3113)
2019-02-18 19:01:37 +09:00
Konstantin Đorđević
5cb713148d Change Command keycode defaults to match corresponding Bootmagic codes (#5078)
* Change Command keycode defaults to match corresponding Bootmagic codes

* Make alternate magic key keycodes consistent

* Reflect changes from previous commit in tmk_core/common/command.c

* Remove unnecessary MAGIC_KEY_* definitions from keymaps compatible with these changes

* Swap E and BSPACE for MAGIC_KEY_EEPROM

* Add MAGIC_KEY_EEPROM_CLEAR instead of MAGIC_KEY_EEPROM_ALT

* Remove BOOTMAGIC_ENABLE checks around EECONFIG stuff

* Update Command descriptions
2019-02-17 22:23:32 -08:00
Konstantin Đorđević
4e2369693f Move RGBLIGHT_LIMIT_VAL definition from rgblight.c to rgblight.h (#5167) 2019-02-17 19:05:12 -08:00
zvecr
657d055934 Inital port of xd84 (#5164)
* Inital port of xd84

* Inital port of xd84 - review comments
2019-02-17 17:47:01 -08:00
Olivia Briggs
278a6c74f3 Add Olivia's TMO50 layout 2019-02-17 11:33:10 -08:00
jonathan.liu
a0fac849eb Merge remote-tracking branch 'upstream/master' 2018-12-06 23:35:20 -08:00
jonathan.liu
e0e57110e0 Add LED instructions to ALT default/mac, CTRL mac 2018-10-17 11:43:40 -07:00
jonathan.liu
02d6be34d7 Merge remote-tracking branch 'upstream/master' 2018-10-15 17:42:39 -07:00
jonathan.liu
151feb4723 Change back to LED IDs starting at 1 2018-09-28 17:54:08 -07:00
jonathan.liu
ca618bcf6c CTRL: LED loop perf improvement from patrickmt 2018-09-20 19:02:39 -07:00
jonathan.liu
d8936f3435 Use highest active layer only for LEDs 2018-09-14 15:47:47 -07:00
just-another-jxliu
5fb9b45481 CTRL (arm_atsam) support user-defined LED instructions (#2)
* CTRL (arm_atsam) support user-defined LED instructions

* ok, layer matching works now

* Bitwise LED ID to reduce number of instructions (performance)

* Use 32-bit ints to be more compatible with generation in JS

* TYpo
2018-09-14 14:23:36 -07:00
4134 changed files with 192178 additions and 32989 deletions

View File

@@ -1,4 +1,4 @@
---
---
BasedOnStyle: Google
AlignAfterOpenBracket: Align
AlignConsecutiveAssignments: 'true'
@@ -13,14 +13,14 @@ BinPackParameters: 'true'
ColumnLimit: '1000'
IndentCaseLabels: 'true'
IndentPPDirectives: AfterHash
IndentWidth: '2'
IndentWidth: '4'
MaxEmptyLinesToKeep: '1'
PointerAlignment: Right
SortIncludes: 'false'
SpaceBeforeAssignmentOperators: 'true'
SpaceBeforeParens: ControlStatements
SpaceInEmptyParentheses: 'false'
TabWidth: '2'
TabWidth: '4'
UseTab: Never
...

View File

@@ -5,7 +5,7 @@ root = true
[*]
indent_style = space
indent_size = 2
indent_size = 4
# We recommend you to keep these unchanged
charset = utf-8
@@ -19,9 +19,11 @@ indent_size = 4
# Make these match what we have in .gitattributes
[*.mk]
end_of_line = lf
indent_style = tab
[Makefile]
end_of_line = lf
indent_style = tab
[*.sh]
end_of_line = lf

1
.gitignore vendored
View File

@@ -54,6 +54,7 @@ util/Win_Check_Output.txt
.vscode/tasks.json
.vscode/last.sql
.vscode/temp.sql
.vscode/ipch/
.stfolder
.tags

View File

@@ -10,27 +10,22 @@ branches:
env:
global:
- secure: vBTSL34BDPxDilKUuTXqU4CJ26Pv5hogD2nghatkxSQkI1/jbdnLj/DQdPUrMJFDIY6TK3AltsBx72MaMsLQ1JO/Ou24IeHINHXzUC1FlS9yQa48cpxnhX5kzXNyGs3oa0qaFbvnr7RgYRWtmD52n4bIZuSuW+xpBv05x2OCizdT2ZonH33nATaHGFasxROm4qYZ241VfzcUv766V6RVHgL4x9V08warugs+RENVkfzxxwhk3NmkrISabze0gSVJLHBPHxroZC6EUcf/ocobcuDrCwFqtEt90i7pNIAFUE7gZsN2uE75LmpzAWin21G7lLPcPL2k4FJVd8an1HiP2WmscJU6U89fOfMb2viObnKcCzebozBCmKGtHEuXZo9FcReOx49AnQSpmESJGs+q2dL/FApkTjQiyT4J6O5dJpoww0/r57Wx0cmmqjETKBb5rSgXM51Etk3wO09mvcPHsEwrT7qH8r9XWdyCDoEn7FCLX3/LYnf/D4SmZ633YPl5gv3v9XEwxR5+04akjgnvWDSNIaDbWBdxHNb7l4pMc+WR1bwCyMyA7KXj0RrftEGOrm9ZRLe6BkbT4cycA+j77nbPOMcyZChliV9pPQos+4TOJoTzcK2L8yWVoY409aDNVuAjdP6Yum0R2maBGl/etLmIMpJC35C5/lZ+dUNjJAM=
- MAKEFLAGS="-j3 --output-sync"
services:
- docker
before_install:
- wget http://ww1.microchip.com/downloads/en/DeviceDoc/avr8-gnu-toolchain-3.5.4.1709-linux.any.x86_64.tar.gz || wget http://qmk.fm/avr8-gnu-toolchain-3.5.4.1709-linux.any.x86_64.tar.gz
- docker build -t qmkfm/qmk_firmware .
install:
- tar -zxf avr8-gnu-toolchain-3.5.4.1709-linux.any.x86_64.tar.gz
- export PATH="$PATH:$TRAVIS_BUILD_DIR/avr8-gnu-toolchain-linux_x86_64/bin"
- npm install -g moxygen
before_script:
- avr-gcc --version
script:
- git rev-parse --short HEAD
- make test:all
- bash util/travis_build.sh
- bash util/travis_docs.sh
- git rev-parse --short HEAD
- bash util/travis_test.sh
- bash util/travis_build.sh
- bash util/travis_docs.sh
addons:
apt:
packages:
- dfu-programmer
- pandoc
- gcc-arm-none-eabi
- binutils-arm-none-eabi
- libnewlib-arm-none-eabi
- diffutils
- dos2unix
- doxygen

View File

@@ -1,4 +1,4 @@
FROM debian
FROM debian:9
RUN apt-get update && apt-get install --no-install-recommends -y \
avr-libc \
@@ -9,7 +9,6 @@ RUN apt-get update && apt-get install --no-install-recommends -y \
dfu-programmer \
dfu-util \
gcc \
gcc-arm-none-eabi \
gcc-avr \
git \
libnewlib-arm-none-eabi \
@@ -19,11 +18,12 @@ RUN apt-get update && apt-get install --no-install-recommends -y \
zip \
&& rm -rf /var/lib/apt/lists/*
ENV KEYBOARD=ergodox_ez
ENV KEYMAP=default
# upgrade gcc-arm-none-eabi from the default 5.4.1 to 6.3.1 due to ARM runtime issues
RUN wget -q https://developer.arm.com/-/media/Files/downloads/gnu-rm/6-2017q2/gcc-arm-none-eabi-6-2017-q2-update-linux.tar.bz2 -O - | \
tar xj --strip-components=1 -C /
VOLUME /qmk_firmware
WORKDIR /qmk_firmware
COPY . .
CMD make $KEYBOARD:$KEYMAP
CMD make all:default

View File

@@ -534,11 +534,13 @@ endef
%:
# Check if we have the CMP tool installed
cmp $(ROOT_DIR)/Makefile $(ROOT_DIR)/Makefile >/dev/null 2>&1; if [ $$? -gt 0 ]; then printf "$(MSG_NO_CMP)"; exit 1; fi;
# Ensure that python3 is installed. This check can be removed after python is used in more places.
if ! python3 --version 1> /dev/null 2>&1; then printf "$(MSG_PYTHON_MISSING)"; fi
# Check if the submodules are dirty, and display a warning if they are
ifndef SKIP_GIT
if [ ! -e lib/chibios ]; then git submodule sync lib/chibios && git submodule update --init lib/chibios; fi
if [ ! -e lib/chibios-contrib ]; then git submodule sync lib/chibios-contrib && git submodule update --init lib/chibios-contrib; fi
if [ ! -e lib/ugfx ]; then git submodule sync lib/ugfx && git submodule update --init lib/ugfx; fi
if [ ! -e lib/chibios ]; then git submodule sync lib/chibios && git submodule update --depth 1 --init lib/chibios; fi
if [ ! -e lib/chibios-contrib ]; then git submodule sync lib/chibios-contrib && git submodule update --depth 1 --init lib/chibios-contrib; fi
if [ ! -e lib/ugfx ]; then git submodule sync lib/ugfx && git submodule update --depth 1 --init lib/ugfx; fi
git submodule status --recursive 2>/dev/null | \
while IFS= read -r x; do \
case "$$x" in \

8
Vagrantfile vendored
View File

@@ -6,7 +6,9 @@ Vagrant.configure(2) do |config|
config.vm.define "qmk_firmware"
# VMware/Virtualbox ( and also Hyperv/Parallels) 64 bit
config.vm.box = "bento/ubuntu-16.04"
config.vm.box = "generic/debian9"
config.vm.synced_folder '.', '/vagrant'
# This section allows you to customize the Virtualbox VM
# settings, ie showing the GUI or upping the memory
@@ -55,7 +57,7 @@ Vagrant.configure(2) do |config|
# image, you'll need to: chmod -R a+rw .
config.vm.provider "docker" do |docker, override|
override.vm.box = nil
docker.image = "jesselang/debian-vagrant:jessie"
docker.image = "jesselang/debian-vagrant:stretch"
docker.has_ssh = true
end
@@ -64,7 +66,7 @@ Vagrant.configure(2) do |config|
# If this causes issues you can run a 'vagrant destroy' and then
# add a # before ,run: (or change "always" to "once") and run 'vagrant up' to get a working
# non-updated box and then attempt to troubleshoot or open a Github issue
config.vm.provision "shell", inline: "/bin/sh -c 'yes | /vagrant/util/qmk_install.sh'", run: "always"
config.vm.provision "shell", inline: "/vagrant/util/qmk_install.sh", run: "always"
config.vm.post_up_message = <<-EOT

View File

@@ -280,6 +280,23 @@ ifneq ("$(wildcard $(KEYBOARD_PATH_1)/config.h)","")
CONFIG_H += $(KEYBOARD_PATH_1)/config.h
endif
POST_CONFIG_H :=
ifneq ("$(wildcard $(KEYBOARD_PATH_1)/post_config.h)","")
POST_CONFIG_H += $(KEYBOARD_PATH_1)/post_config.h
endif
ifneq ("$(wildcard $(KEYBOARD_PATH_2)/post_config.h)","")
POST_CONFIG_H += $(KEYBOARD_PATH_2)/post_config.h
endif
ifneq ("$(wildcard $(KEYBOARD_PATH_3)/post_config.h)","")
POST_CONFIG_H += $(KEYBOARD_PATH_3)/post_config.h
endif
ifneq ("$(wildcard $(KEYBOARD_PATH_4)/post_config.h)","")
POST_CONFIG_H += $(KEYBOARD_PATH_4)/post_config.h
endif
ifneq ("$(wildcard $(KEYBOARD_PATH_5)/post_config.h)","")
POST_CONFIG_H += $(KEYBOARD_PATH_5)/post_config.h
endif
# Save the defines and includes here, so we don't include any keymap specific ones
PROJECT_DEFS := $(OPT_DEFS)
PROJECT_INC := $(VPATH) $(EXTRAINCDIRS) $(KEYBOARD_PATHS)
@@ -307,7 +324,6 @@ ifneq ("$(wildcard $(KEYMAP_PATH)/config.h)","")
endif
# # project specific files
SRC += $(patsubst %.c,%.clib,$(LIB_SRC))
SRC += $(KEYBOARD_SRC) \
$(KEYMAP_C) \
$(QUANTUM_SRC)
@@ -317,15 +333,16 @@ SRC += $(KEYBOARD_SRC) \
# Search Path
VPATH += $(KEYMAP_PATH)
VPATH += $(USER_PATH)
VPATH += $(KEYBOARD_PATHS)
VPATH += $(COMMON_VPATH)
VPATH += $(USER_PATH)
include common_features.mk
include $(TMK_PATH)/protocol.mk
include $(TMK_PATH)/common.mk
include bootloader.mk
SRC += $(patsubst %.c,%.clib,$(LIB_SRC))
SRC += $(patsubst %.c,%.clib,$(QUANTUM_LIB_SRC))
SRC += $(TMK_COMMON_SRC)
OPT_DEFS += $(TMK_COMMON_DEFS)
@@ -355,6 +372,7 @@ ifeq ($(strip $(VISUALIZER_ENABLE)), yes)
include $(VISUALIZER_PATH)/visualizer.mk
endif
CONFIG_H += $(POST_CONFIG_H)
ALL_CONFIGS := $(PROJECT_CONFIG) $(CONFIG_H)
OUTPUTS := $(KEYMAP_OUTPUT) $(KEYBOARD_OUTPUT)

View File

@@ -103,7 +103,9 @@ ifeq ($(strip $(UNICODE_COMMON)), yes)
endif
ifeq ($(strip $(RGBLIGHT_ENABLE)), yes)
POST_CONFIG_H += $(QUANTUM_DIR)/rgblight_post_config.h
OPT_DEFS += -DRGBLIGHT_ENABLE
SRC += $(QUANTUM_DIR)/color.c
SRC += $(QUANTUM_DIR)/rgblight.c
CIE1931_CURVE = yes
LED_BREATHING_TABLE = yes
@@ -114,7 +116,7 @@ ifeq ($(strip $(RGBLIGHT_ENABLE)), yes)
endif
endif
VALID_MATRIX_TYPES := yes IS31FL3731 IS31FL3733 custom
VALID_MATRIX_TYPES := yes IS31FL3731 IS31FL3733 IS31FL3737 WS2812 custom
LED_MATRIX_ENABLE ?= no
ifneq ($(strip $(LED_MATRIX_ENABLE)), no)
@@ -131,10 +133,11 @@ ifeq ($(strip $(LED_MATRIX_ENABLE)), IS31FL3731)
OPT_DEFS += -DIS31FL3731
COMMON_VPATH += $(DRIVER_PATH)/issi
SRC += is31fl3731-simple.c
SRC += i2c_master.c
QUANTUM_LIB_SRC += i2c_master.c
endif
RGB_MATRIX_ENABLE ?= no
ifneq ($(strip $(RGB_MATRIX_ENABLE)), no)
ifeq ($(filter $(RGB_MATRIX_ENABLE),$(VALID_MATRIX_TYPES)),)
$(error RGB_MATRIX_ENABLE="$(RGB_MATRIX_ENABLE)" is not a valid matrix type)
@@ -151,17 +154,37 @@ ifeq ($(strip $(RGB_MATRIX_ENABLE)), yes)
endif
ifeq ($(strip $(RGB_MATRIX_ENABLE)), IS31FL3731)
OPT_DEFS += -DIS31FL3731
OPT_DEFS += -DIS31FL3731 -DSTM32_I2C -DHAL_USE_I2C=TRUE
COMMON_VPATH += $(DRIVER_PATH)/issi
SRC += is31fl3731.c
SRC += i2c_master.c
QUANTUM_LIB_SRC += i2c_master.c
endif
ifeq ($(strip $(RGB_MATRIX_ENABLE)), IS31FL3733)
OPT_DEFS += -DIS31FL3733
OPT_DEFS += -DIS31FL3733 -DSTM32_I2C -DHAL_USE_I2C=TRUE
COMMON_VPATH += $(DRIVER_PATH)/issi
SRC += is31fl3733.c
SRC += i2c_master.c
QUANTUM_LIB_SRC += i2c_master.c
endif
ifeq ($(strip $(RGB_MATRIX_ENABLE)), IS31FL3737)
OPT_DEFS += -DIS31FL3737 -DSTM32_I2C -DHAL_USE_I2C=TRUE
COMMON_VPATH += $(DRIVER_PATH)/issi
SRC += is31fl3737.c
QUANTUM_LIB_SRC += i2c_master.c
endif
ifeq ($(strip $(RGB_MATRIX_ENABLE)), WS2812)
OPT_DEFS += -DWS2812
SRC += ws2812.c
endif
ifeq ($(strip $(RGB_MATRIX_CUSTOM_KB)), yes)
OPT_DEFS += -DRGB_MATRIX_CUSTOM_KB
endif
ifeq ($(strip $(RGB_MATRIX_CUSTOM_USER)), yes)
OPT_DEFS += -DRGB_MATRIX_CUSTOM_USER
endif
ifeq ($(strip $(TAP_DANCE_ENABLE)), yes)
@@ -248,7 +271,7 @@ ifeq ($(strip $(HAPTIC_ENABLE)), DRV2605L)
COMMON_VPATH += $(DRIVER_PATH)/haptic
SRC += haptic.c
SRC += DRV2605L.c
SRC += i2c_master.c
QUANTUM_LIB_SRC += i2c_master.c
OPT_DEFS += -DHAPTIC_ENABLE
OPT_DEFS += -DDRV2605L
endif
@@ -266,6 +289,11 @@ ifeq ($(strip $(HD44780_ENABLE)), yes)
OPT_DEFS += -DHD44780_ENABLE
endif
ifeq ($(strip $(VELOCIKEY_ENABLE)), yes)
OPT_DEFS += -DVELOCIKEY_ENABLE
SRC += $(QUANTUM_DIR)/velocikey.c
endif
ifeq ($(strip $(DYNAMIC_KEYMAP_ENABLE)), yes)
OPT_DEFS += -DDYNAMIC_KEYMAP_ENABLE
SRC += $(QUANTUM_DIR)/dynamic_keymap.c
@@ -293,34 +321,40 @@ ifneq ($(strip $(CUSTOM_MATRIX)), yes)
endif
DEBOUNCE_DIR:= $(QUANTUM_DIR)/debounce
# Debounce Modules. If implemented in matrix.c, don't use these.
# Debounce Modules. Set DEBOUNCE_TYPE=custom if including one manually.
DEBOUNCE_TYPE?= sym_g
VALID_DEBOUNCE_TYPES := sym_g eager_pk custom
ifeq ($(filter $(DEBOUNCE_TYPE),$(VALID_DEBOUNCE_TYPES)),)
$(error DEBOUNCE_TYPE="$(DEBOUNCE_TYPE)" is not a valid debounce algorithm)
ifneq ($(strip $(DEBOUNCE_TYPE)), custom)
QUANTUM_SRC += $(DEBOUNCE_DIR)/$(strip $(DEBOUNCE_TYPE)).c
endif
ifeq ($(strip $(DEBOUNCE_TYPE)), sym_g)
QUANTUM_SRC += $(DEBOUNCE_DIR)/debounce_sym_g.c
else ifeq ($(strip $(DEBOUNCE_TYPE)), eager_pk)
QUANTUM_SRC += $(DEBOUNCE_DIR)/debounce_eager_pk.c
endif
ifeq ($(strip $(SPLIT_KEYBOARD)), yes)
POST_CONFIG_H += $(QUANTUM_DIR)/split_common/post_config.h
OPT_DEFS += -DSPLIT_KEYBOARD
# Include files used by all split keyboards
QUANTUM_SRC += $(QUANTUM_DIR)/split_common/split_flags.c \
$(QUANTUM_DIR)/split_common/split_util.c
QUANTUM_SRC += $(QUANTUM_DIR)/split_common/split_util.c
# Determine which (if any) transport files are required
ifneq ($(strip $(SPLIT_TRANSPORT)), custom)
QUANTUM_SRC += $(QUANTUM_DIR)/split_common/transport.c
# Functions added via QUANTUM_LIB_SRC are only included in the final binary if they're called.
# Unused functions are pruned away, which is why we can add both drivers here without bloat.
QUANTUM_LIB_SRC += $(QUANTUM_DIR)/split_common/i2c.c \
$(QUANTUM_DIR)/split_common/serial.c
# Unused functions are pruned away, which is why we can add multiple drivers here without bloat.
QUANTUM_LIB_SRC += $(QUANTUM_DIR)/split_common/serial.c \
i2c_master.c \
i2c_slave.c
endif
COMMON_VPATH += $(QUANTUM_PATH)/split_common
endif
ifeq ($(strip $(OLED_DRIVER_ENABLE)), yes)
OPT_DEFS += -DOLED_DRIVER_ENABLE
COMMON_VPATH += $(DRIVER_PATH)/oled
QUANTUM_LIB_SRC += i2c_master.c
SRC += oled_driver.c
endif
SPACE_CADET_ENABLE ?= yes
ifeq ($(strip $(SPACE_CADET_ENABLE)), yes)
SRC += $(QUANTUM_DIR)/process_keycode/process_space_cadet.c
OPT_DEFS += -DSPACE_CADET_ENABLE
endif

View File

@@ -3,7 +3,7 @@
* [Building Your First Firmware](newbs_building_firmware.md)
* [Flashing Firmware](newbs_flashing.md)
* [Testing and Debugging](newbs_testing_debugging.md)
* [Best Practices](newbs_best_practices.md)
* [Git Best Practices](newbs_best_practices.md)
* [Learning Resources](newbs_learn_more_resources.md)
* [QMK Basics](README.md)
@@ -52,23 +52,27 @@
* [Backlight](feature_backlight.md)
* [Bluetooth](feature_bluetooth.md)
* [Bootmagic](feature_bootmagic.md)
* [Combos](feature_combo)
* [Combos](feature_combo.md)
* [Command](feature_command.md)
* [Debounce API](feature_debounce_type.md)
* [Dynamic Macros](feature_dynamic_macros.md)
* [Encoders](feature_encoders.md)
* [Grave Escape](feature_grave_esc.md)
* [Haptic Feedback](feature_haptic_feedback.md)
* [HD44780 LCD Controller](feature_hd44780.md)
* [Key Lock](feature_key_lock.md)
* [Layouts](feature_layouts.md)
* [Leader Key](feature_leader_key.md)
* [LED Matrix](feature_led_matrix.md)
* [Macros](feature_macros.md)
* [Mouse Keys](feature_mouse_keys.md)
* [OLED Driver](feature_oled_driver.md)
* [One Shot Keys](feature_advanced_keycodes.md#one-shot-keys)
* [Pointing Device](feature_pointing_device.md)
* [PS/2 Mouse](feature_ps2_mouse.md)
* [RGB Lighting](feature_rgblight.md)
* [RGB Matrix](feature_rgb_matrix.md)
* [Space Cadet Shift](feature_space_cadet_shift.md)
* [Space Cadet Shift Enter](feature_space_cadet_shift_enter.md)
* [Space Cadet](feature_space_cadet.md)
* [Stenography](feature_stenography.md)
* [Swap Hands](feature_swap_hands.md)
* [Tap Dance](feature_tap_dance.md)
@@ -76,6 +80,7 @@
* [Thermal Printer](feature_thermal_printer.md)
* [Unicode](feature_unicode.md)
* [Userspace](feature_userspace.md)
* [Velocikey](feature_velocikey.md)
* For Makers and Modders
* [Hand Wiring Guide](hand_wire.md)
@@ -90,7 +95,8 @@
* [Understanding QMK](understanding_qmk.md)
* Other Topics
* [Using Eclipse with QMK](eclipse.md)
* [Using Eclipse with QMK](other_eclipse.md)
* [Using VSCode with QMK](other_vscode.md)
* [Support](support.md)
* QMK Internals (In Progress)

View File

@@ -59,6 +59,8 @@ This is a C header file that is one of the first things included, and will persi
* define is matrix has ghost (unlikely)
* `#define DIODE_DIRECTION COL2ROW`
* COL2ROW or ROW2COL - how your matrix is configured. COL2ROW means the black mark on your diode is facing to the rows, and between the switch and the rows.
* `#define DIRECT_PINS { { F1, F0, B0, C7 }, { F4, F5, F6, F7 } }`
* pins mapped to rows and columns, from left to right. Defines a matrix where each switch is connected to a separate pin and ground.
* `#define AUDIO_VOICES`
* turns on the alternate audio voices (to cycle through)
* `#define C4_AUDIO`
@@ -68,20 +70,20 @@ This is a C header file that is one of the first things included, and will persi
* `#define C6_AUDIO`
* enables audio on pin C6
* `#define B5_AUDIO`
* enables audio on pin B5 (duophony is enables if one of B[5-7]_AUDIO is enabled along with one of C[4-6]_AUDIO)
* enables audio on pin B5 (duophony is enables if one of B[5-7]\_AUDIO is enabled along with one of C[4-6]\_AUDIO)
* `#define B6_AUDIO`
* enables audio on pin B6 (duophony is enables if one of B[5-7]_AUDIO is enabled along with one of C[4-6]_AUDIO)
* enables audio on pin B6 (duophony is enables if one of B[5-7]\_AUDIO is enabled along with one of C[4-6]\_AUDIO)
* `#define B7_AUDIO`
* enables audio on pin B7 (duophony is enables if one of B[5-7]_AUDIO is enabled along with one of C[4-6]_AUDIO)
* enables audio on pin B7 (duophony is enables if one of B[5-7]\_AUDIO is enabled along with one of C[4-6]\_AUDIO)
* `#define BACKLIGHT_PIN B7`
* pin of the backlight - B5, B6, B7 use PWM, others use softPWM
* pin of the backlight - `B5`, `B6`, `B7` and `C6` (and `D4` on ATmega32A) use hardware PWM, others use software implementation
* `#define BACKLIGHT_LEVELS 3`
* number of levels your backlight will have (maximum 15 excluding off)
* `#define BACKLIGHT_BREATHING`
* enables backlight breathing (only works with backlight pins B5, B6 and B7)
* enables backlight breathing
* `#define BREATHING_PERIOD 6`
* the length of one backlight "breath" in seconds
* `#define DEBOUNCING_DELAY 5`
* `#define DEBOUNCE 5`
* the delay when reading the value of the pin (5 is default)
* `#define LOCKING_SUPPORT_ENABLE`
* mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap
@@ -91,8 +93,8 @@ This is a C header file that is one of the first things included, and will persi
* key combination that allows the use of magic commands (useful for debugging)
* `#define USB_MAX_POWER_CONSUMPTION`
* sets the maximum power (in mA) over USB for the device (default: 500)
* `#define SCL_CLOCK 100000L`
* sets the SCL_CLOCK speed for split keyboards. The default is `100000L` but some boards can be set to `400000L`.
* `#define F_SCL 100000L`
* sets the I2C clock rate speed for keyboards using I2C. The default is `400000L`, except for keyboards using `split_common`, where the default is `100000L`.
## Features That Can Be Disabled
@@ -126,6 +128,8 @@ If you define these options you will enable the associated feature, which may in
* `#define TAPPING_TERM 200`
* how long before a tap becomes a hold, if set above 500, a key tapped during the tapping term will turn it into a hold too
* `#define TAPPING_TERM_PER_KEY`
* enables handling for per key `TAPPING_TERM` settings
* `#define RETRO_TAPPING`
* tap anyway, even after TAPPING_TERM, if there was no other key interruption between press and release
* See [Retro Tapping](feature_advanced_keycodes.md#retro-tapping) for details
@@ -167,15 +171,23 @@ If you define these options you will enable the associated feature, which may in
* how long for the Combo keys to be detected. Defaults to `TAPPING_TERM` if not defined.
* `#define TAP_CODE_DELAY 100`
* Sets the delay between `register_code` and `unregister_code`, if you're having issues with it registering properly (common on VUSB boards). The value is in milliseconds.
* `#define TAP_HOLD_CAPS_DELAY 200`
* Sets the delay for Tap Hold keys (`LT`, `MT`) when using `KC_CAPSLOCK` keycode, as this has some special handling on MacOS. The value is in milliseconds, and defaults to 200ms if not defined.
## RGB Light Configuration
* `#define RGB_DI_PIN D7`
* pin the DI on the ws2812 is hooked-up to
* pin the DI on the WS2812 is hooked-up to
* `#define RGBLIGHT_ANIMATIONS`
* run RGB animations
* `#define RGBLED_NUM 15`
* `#define RGBLED_NUM 12`
* number of LEDs
* `#define RGBLIGHT_SPLIT`
* Needed if both halves of the board have RGB LEDs wired directly to the RGB output pin on the controllers instead of passing the output of the left half to the input of the right half
* `#define RGBLED_SPLIT { 6, 6 }`
* number of LEDs connected that are directly wired to `RGB_DI_PIN` on each half of a split keyboard
* First value indicates number of LEDs for left half, second value is for the right half
* When RGBLED_SPLIT is defined, RGBLIGHT_SPLIT is implicitly defined.
* `#define RGBLIGHT_HUE_STEP 12`
* units to step when in/decreasing hue
* `#define RGBLIGHT_SAT_STEP 25`
@@ -208,9 +220,13 @@ There are a few different ways to set handedness for split keyboards (listed in
1. Set `SPLIT_HAND_PIN`: Reads a pin to determine handedness. If pin is high, it's the left side, if low, the half is determined to be the right side
2. Set `EE_HANDS` and flash `eeprom-lefthand.eep`/`eeprom-righthand.eep` to each half
* For boards with DFU bootloader you can use `:dfu-split-left`/`:dfu-split-right` to flash these EEPROM files
* For boards with Caterina bootloader (like stock Pro Micros), use `:avrdude-split-left`/`:avrdude-split-right`
3. Set `MASTER_RIGHT`: Half that is plugged into the USB port is determined to be the master and right half (inverse of the default)
4. Default: The side that is plugged into the USB port is the master half and is assumed to be the left half. The slave side is the right half
#### Defines for handedness
* `#define SPLIT_HAND_PIN B7`
* For using high/low pin to determine handedness, low = right hand, high = left hand. Replace `B7` with the pin you are using. This is optional, and if you leave `SPLIT_HAND_PIN` undefined, then you can still use the EE_HANDS method or MASTER_LEFT / MASTER_RIGHT defines like the stock Let's Split uses.
@@ -232,6 +248,9 @@ There are a few different ways to set handedness for split keyboards (listed in
* `#define MATRIX_COL_PINS_RIGHT { <col pins> }`
* If you want to specify a different pinout for the right half than the left half, you can define `MATRIX_ROW_PINS_RIGHT`/`MATRIX_COL_PINS_RIGHT`. Currently, the size of `MATRIX_ROW_PINS` must be the same as `MATRIX_ROW_PINS_RIGHT` and likewise for the definition of columns.
* `#define RGBLED_SPLIT { 6, 6 }`
* See [RGB Light Configuration](#rgb-light-configuration)
* `#define SELECT_SOFT_SERIAL_SPEED <speed>` (default speed is 1)
* Sets the protocol speed when using serial communication
* Speeds:
@@ -307,12 +326,14 @@ Use these to enable or disable building certain features. The more you have enab
* Enables split keyboard support (dual MCU like the let's split and bakingpy's boards) and includes all necessary files located at quantum/split_common
* `CUSTOM_MATRIX`
* Allows replacing the standard matrix scanning routine with a custom one.
* `CUSTOM_DEBOUNCE`
* Allows replacing the standard key debouncing routine with a custom one.
* `DEBOUNCE_TYPE`
* Allows replacing the standard key debouncing routine with an alternative or custom one.
* `WAIT_FOR_USB`
* Forces the keyboard to wait for a USB connection to be established before it starts up
* `NO_USB_STARTUP_CHECK`
* Disables usb suspend check after keyboard startup. Usually the keyboard waits for the host to wake it up before any tasks are performed. This is useful for split keyboards as one half will not get a wakeup call but must send commands to the master.
* `LINK_TIME_OPTIMIZATION_ENABLE`
= Enables Link Time Optimization (`LTO`) when compiling the keyboard. This makes the process take longer, but can significantly reduce the compiled size (and since the firmware is small, the added time is not noticable). However, this will automatically disable the old Macros and Functions features automatically, as these break when `LTO` is enabled. It does this by automatically defining `NO_ACTION_MACRO` and `NO_ACTION_FUNCTION`
## USB Endpoint Limitations

View File

@@ -56,7 +56,7 @@ Never made an open source contribution before? Wondering how contributions work
Most of our style is pretty easy to pick up on, but right now it's not entirely consistent. You should match the style of the code surrounding your change, but if that code is inconsistent or unclear use the following guidelines:
* We indent using two spaces (soft tabs)
* We indent using four (4) spaces (soft tabs)
* We use a modified One True Brace Style
* Opening Brace: At the end of the same line as the statement that opens the block
* Closing Brace: Lined up with the first character of the statement that opens the block
@@ -71,6 +71,14 @@ Most of our style is pretty easy to pick up on, but right now it's not entirely
* If you not sure if a comment is obvious, go ahead and include it.
* In general we don't wrap lines, they can be as long as needed. If you do choose to wrap lines please do not wrap any wider than 76 columns.
* We use `#pragma once` at the start of header files rather than old-style include guards (`#ifndef THIS_FILE_H`, `#define THIS_FILE_H`, ..., `#endif`)
* We accept both forms of preprocessor if's: `#ifdef DEFINED` and `#if defined(DEFINED)`
* If you are not sure which to prefer use the `#if defined(DEFINED)` form.
* Do not change existing code from one style to the other, except when moving to a multiple condition `#if`.
* Do not put whitespace between `#` and `if`.
* When deciding how (or if) to indent directives keep these points in mind:
* Readability is more important than consistency.
* Follow the file's existing style. If the file is mixed follow the style that makes sense for the section you are modifying.
* When choosing to indent you can follow the indention level of the surrounding C code, or preprocessor directives can have their own indent level. Choose the style that best communicates the intent of your code.
Here is an example for easy reference:
@@ -129,6 +137,20 @@ Documentation is one of the easiest ways to get started contributing to QMK. Fin
You'll find all our documentation in the `qmk_firmware/docs` directory, or if you'd rather use a web based workflow you can click "Suggest An Edit" at the top of each page on http://docs.qmk.fm/.
When providing code examples in your documentation, try to observe naming conventions used elsewhere in the docs. For example, standardizing enums as `my_layers` or `my_keycodes` for consistency:
```c
enum my_layers {
_FIRST_LAYER,
_SECOND_LAYER
};
enum my_keycodes {
FIRST_LAYER = SAFE_RANGE,
SECOND_LAYER
};
```
## Keymaps
Most first-time QMK contributors start with their personal keymaps. We try to keep keymap standards pretty casual (keymaps, after all, reflect the personality of their creators) but we do ask that you follow these guidelines to make it easier for others to discover and learn from your keymap.
@@ -137,7 +159,7 @@ Most first-time QMK contributors start with their personal keymaps. We try to ke
* All Keymap PR's are squashed, so if you care about how your commits are squashed you should do it yourself
* Do not lump features in with keymap PR's. Submit the feature first and then a second PR for the keymap.
* Do not include `Makefile`s in your keymap folder (they're no longer used)
* Update copyrights in file headers (look for `REPLACE_WITH_YOUR_NAME `)
* Update copyrights in file headers (look for `%YOUR_NAME%`)
## Keyboards
@@ -150,7 +172,7 @@ We also ask that you follow these guidelines:
* Do not lump core features in with new keyboards. Submit the feature first and then submit a separate PR for the keyboard.
* Name `.c`/`.h` file after the immediate parent folder, eg `/keyboards/<kb1>/<kb2>/<kb2>.[ch]`
* Do not include `Makefile`s in your keyboard folder (they're no longer used)
* Update copyrights in file headers (look for `REPLACE_WITH_YOUR_NAME `)
* Update copyrights in file headers (look for `%YOUR_NAME%`)
## Quantum/TMK Core

View File

@@ -116,29 +116,29 @@ Use the `IS_LED_ON(usb_led, led_name)` and `IS_LED_OFF(usb_led, led_name)` macro
```c
void led_set_user(uint8_t usb_led) {
if (IS_LED_ON(usb_led, USB_LED_NUM_LOCK)) {
PORTB |= (1<<0);
writePinLow(B0);
} else {
PORTB &= ~(1<<0);
writePinHigh(B0);
}
if (IS_LED_ON(usb_led, USB_LED_CAPS_LOCK)) {
PORTB |= (1<<1);
writePinLow(B1);
} else {
PORTB &= ~(1<<1);
writePinHigh(B1);
}
if (IS_LED_ON(usb_led, USB_LED_SCROLL_LOCK)) {
PORTB |= (1<<2);
writePinLow(B2);
} else {
PORTB &= ~(1<<2);
writePinHigh(B2);
}
if (IS_LED_ON(usb_led, USB_LED_COMPOSE)) {
PORTB |= (1<<3);
writePinLow(B3);
} else {
PORTB &= ~(1<<3);
writePinHigh(B3);
}
if (IS_LED_ON(usb_led, USB_LED_KANA)) {
PORTB |= (1<<4);
writePinLow(B4);
} else {
PORTB &= ~(1<<4);
writePinHigh(B4);
}
}
```
@@ -189,16 +189,18 @@ However, if you have hardware stuff that you need initialized, this is the best
### Example `keyboard_pre_init_user()` Implementation
This example, at the keyboard level, sets up B1, B2, and B3 as LED pins.
This example, at the keyboard level, sets up B0, B1, B2, B3, and B4 as LED pins.
```c
void keyboard_pre_init_user(void) {
// Call the keyboard pre init code.
// Set our LED pins as output
DDRB |= (1<<1);
DDRB |= (1<<2);
DDRB |= (1<<3);
setPinOutput(B0);
setPinOutput(B1);
setPinOutput(B2);
setPinOutput(B3);
setPinOutput(B4);
}
```
@@ -233,7 +235,7 @@ This example, running after everything else has initialized, sets up the rgb und
void keyboard_post_init_user(void) {
// Call the post init code.
rgblight_enable_noeeprom(); // enables Rgb, without saving settings
rgblight_sethsv_noeeprom(180, 255, 255): // sets the color to teal/cyan without saving
rgblight_sethsv_noeeprom(180, 255, 255); // sets the color to teal/cyan without saving
rgblight_mode_noeeprom(RGBLIGHT_MODE_BREATHING + 3); // sets mode to Fast breathing without saving
}
```
@@ -265,21 +267,18 @@ You should use this function if you need custom matrix scanning code. It can als
If the board supports it, it can be "idled", by stopping a number of functions. A good example of this is RGB lights or backlights. This can save on power consumption, or may be better behavior for your keyboard.
This is controlled by two functions: `suspend_power_down_*` and `suspend_wakeup_init_*`, which are called when the system is board is idled and when it wakes up, respectively.
This is controlled by two functions: `suspend_power_down_*` and `suspend_wakeup_init_*`, which are called when the system board is idled and when it wakes up, respectively.
### Example suspend_power_down_user() and suspend_wakeup_init_user() Implementation
This example, at the keyboard level, sets up B1, B2, and B3 as LED pins.
```c
void suspend_power_down_user(void)
{
void suspend_power_down_user(void) {
rgb_matrix_set_suspend_state(true);
}
void suspend_wakeup_init_user(void)
{
void suspend_wakeup_init_user(void) {
rgb_matrix_set_suspend_state(false);
}
```
@@ -321,9 +320,10 @@ uint32_t layer_state_set_user(uint32_t state) {
```
### `layer_state_set_*` Function Documentation
* Keyboard/Revision: `void uint32_t layer_state_set_kb(uint32_t state)`
* Keyboard/Revision: `uint32_t layer_state_set_kb(uint32_t state)`
* Keymap: `uint32_t layer_state_set_user(uint32_t state)`
The `state` is the bitmask of the active layers, as explained in the [Keymap Overview](keymap.md#keymap-layer-status)
@@ -343,7 +343,7 @@ This is an example of how to add settings, and read and write it. We're using th
In your keymap.c file, add this to the top:
```
```c
typedef union {
uint32_t raw;
struct {
@@ -356,11 +356,11 @@ user_config_t user_config;
This sets up a 32 bit structure that we can store settings with in memory, and write to the EEPROM. Using this removes the need to define variables, since they're defined in this structure. Remember that `bool` (boolean) values use 1 bit, `uint8_t` uses 8 bits, `uint16_t` uses up 16 bits. You can mix and match, but changing the order can cause issues, as it will change the values that are read and written.
We're using `rgb_layer_change`, for the `layer_state_set_*` function, and use `matrix_init_user` and `process_record_user` to configure everything.
We're using `rgb_layer_change`, for the `layer_state_set_*` function, and use `keyboard_post_init_user` and `process_record_user` to configure everything.
Now, using the `matrix_init_user` code above, you want to add `eeconfig_read_user()` to it, to populate the structure you've just created. And you can then immediately use this structure to control functionality in your keymap. And It should look like:
```
void matrix_init_user(void) {
Now, using the `keyboard_post_init_user` code above, you want to add `eeconfig_read_user()` to it, to populate the structure you've just created. And you can then immediately use this structure to control functionality in your keymap. And It should look like:
```c
void keyboard_post_init_user(void) {
// Call the keymap level matrix init.
// Read the user config from EEPROM
@@ -376,7 +376,7 @@ void matrix_init_user(void) {
```
The above function will use the EEPROM config immediately after reading it, to set the default layer's RGB color. The "raw" value of it is converted in a usable structure based on the "union" that you created above.
```
```c
uint32_t layer_state_set_user(uint32_t state) {
switch (biton32(state)) {
case _RAISE:
@@ -398,8 +398,8 @@ uint32_t layer_state_set_user(uint32_t state) {
return state;
}
```
This will cause the RGB underglow to be changed ONLY if the value was enabled. Now to configure this value, create a new keycode for `process_record_user` called `RGB_LYR` and `EPRM`. Additionally, we want to make sure that if you use the normal RGB codes, that it turns off Using the example above, make it look this:
```
This will cause the RGB underglow to be changed ONLY if the value was enabled. Now to configure this value, create a new keycode for `process_record_user` called `RGB_LYR`. Additionally, we want to make sure that if you use the normal RGB codes, that it turns off Using the example above, make it look this:
```c
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
switch (keycode) {
@@ -416,11 +416,6 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
PLAY_NOTE_ARRAY(tone_qwerty);
}
return true; // Let QMK send the enter press/release events
case EPRM:
if (record->event.pressed) {
eeconfig_init(); // resets the EEPROM to default
}
return false;
case RGB_LYR: // This allows me to use underglow as layer indication, or as normal
if (record->event.pressed) {
user_config.rgb_layer_change ^= 1; // Toggles the status
@@ -443,10 +438,11 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
}
}
```
And lastly, you want to add the `eeconfig_init_user` function, so that when the EEPROM is reset, you can specify default values, and even custom actions. For example, if you want to set rgb layer indication by default, and save the default valued.
And lastly, you want to add the `eeconfig_init_user` function, so that when the EEPROM is reset, you can specify default values, and even custom actions. To force an EEPROM reset, use the `EEP_RST` keycode or [Bootmagic](feature_bootmagic.md) functionallity. For example, if you want to set rgb layer indication by default, and save the default valued.
```
```c
void eeconfig_init_user(void) { // EEPROM is getting reset!
user_config.raw = 0;
user_config.rgb_layer_change = true; // We want this enabled by default
eeconfig_update_user(user_config.raw); // Write default value to EEPROM now
@@ -465,3 +461,31 @@ And you're done. The RGB layer indication will only work if you want it to. And
* Keymap: `void eeconfig_init_user(void)`, `uint32_t eeconfig_read_user(void)` and `void eeconfig_update_user(uint32_t val)`
The `val` is the value of the data that you want to write to EEPROM. And the `eeconfig_read_*` function return a 32 bit (DWORD) value from the EEPROM.
# Custom Tapping Term
By default, the tapping term is defined globally, and is not configurable by key. For most users, this is perfectly fine. But in come cases, dual function keys would be greatly improved by different timeouts 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 `TAPPING_TERM`.
To enable this functionality, you need to add `#define TAPPING_TERM_PER_KEY` to your `config.h`, first.
## 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;
}
}
```
### `get_tapping_term` 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 a user level function is useful here, so no need to mark it as such.

View File

@@ -15,7 +15,7 @@ or just:
$ sudo make <keyboard>:<keymap>:dfu
Note that running `make` with `sudo` is generally *not* a good idea, and you should use one of the former methods, if possible.
Note that running `make` with `sudo` is generally ***not*** a good idea, and you should use one of the former methods, if possible.
### Linux `udev` Rules
On Linux, you'll need proper privileges to access the MCU. You can either use
@@ -36,18 +36,29 @@ SUBSYSTEMS=="usb", ATTRS{idVendor}=="03eb", ATTRS{idProduct}=="2ff0", MODE:="066
# 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:**
```
# Input Club keyboard bootloader
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1c11", MODE:="0666"
```
### Serial device is not detected in bootloader mode on Linux
Make sure your kernel has appropriate support for your device. If your device uses USB ACM, such as
Make sure your kernel has appropriate support for your device. If your device uses USB ACM, such as
Pro Micro (Atmega32u4), make sure to include `CONFIG_USB_ACM=y`. Other devices may require `USB_SERIAL` and any of its sub options.
## Unknown Device for DFU Bootloader
If you're using Windows to flash your keyboard, and you are running into issues, check the Device Manager. If you see an "Unknown Device" when the keyboard is in "bootloader mode", then you may have a driver issue.
If you're using Windows to flash your keyboard, and you are running into issues, check the Device Manager. If you see an "Unknown Device" when the keyboard is in "bootloader mode", then you may have a driver issue.
Re-running the installation script for MSYS2 may help (eg run `./util/qmk_install.sh` from MSYS2/WSL) or reinstalling the QMK Toolbox may fix the issue.
Re-running the installation script for MSYS2 may help (eg run `./util/qmk_install.sh` from MSYS2/WSL) or reinstalling the QMK Toolbox may fix the issue.
If that doesn't work, then you may need to grab the [Zadig Utility](https://zadig.akeo.ie/). Download this, find the device in question, and select the `WinUSB` option, and hit "Reinstall driver". Once you've done that, try flashing your board, again. If that doesn't work, try all of the options, until one works.
?> There isn't a best option for which driver should be used here. Some options work better on some systems than others. libUSB and WinUSB seem to be the best options here.
If the bootloader doesn't show up in the list for devices, you may need to enable the "List all devices" option in the `Options` menu, and then find the bootloader in question.
If that doesn't work, then you may need to grab the [Zadig Utility](https://zadig.akeo.ie/). Download this, find the device in question, and select the `WinUS(libusb-1.0)` option, and hit "Reinstall driver". Once you've done that, try flashing your board, again.
## WINAVR is Obsolete
It is no longer recommended and may cause some problem.
@@ -102,9 +113,9 @@ OPT_DEFS += -DBOOTLOADER_SIZE=2048
```
## `avr-gcc: internal compiler error: Abort trap: 6 (program cc1)` on MacOS
This is an issue with updating on brew, causing symlinks that avr-gcc depend on getting mangled.
This is an issue with updating on brew, causing symlinks that avr-gcc depend on getting mangled.
The solution is to remove and reinstall all affected modules.
The solution is to remove and reinstall all affected modules.
```
brew rm avr-gcc
@@ -129,6 +140,14 @@ For now, you need to rollback avr-gcc to 7 in brew.
```
brew uninstall --force avr-gcc
brew install avr-gcc@7
brew link --force avr-gcc@7
brew install avr-gcc@8
brew link --force avr-gcc@8
```
### I just flashed my keyboard and it does nothing/keypresses don't register - it's also ARM (rev6 planck, clueboard 60, hs60v2, etc...) (Feb 2019)
Due to how EEPROM works on ARM based chips, saved settings may no longer be valid. This affects the default layers, and *may*, under certain circumstances we are still figuring out, make the keyboard unusable. Resetting the EEPROM will correct this.
[Planck rev6 reset EEPROM](https://cdn.discordapp.com/attachments/473506116718952450/539284620861243409/planck_rev6_default.bin) can be used to force an eeprom reset. After flashing this image, flash your normal firmware again which should restore your keyboard to _normal_ working order.
[Preonic rev3 reset EEPROM](https://cdn.discordapp.com/attachments/473506116718952450/537849497313738762/preonic_rev3_default.bin)
If bootmagic is enabled in any form, you should be able to do this too (see [Bootmagic docs](feature_bootmagic.md) and keyboard info for specifics on how to do this).

View File

@@ -151,13 +151,13 @@ This turns right modifier keys into arrow keys when the keys are tapped while st
*/
const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* 0: qwerty */
[0] = KEYMAP( \
[0] = LAYOUT( \
ESC, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, NUHS,BSPC, \
TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC,BSLS, \
LCTL,A, S, D, F, G, H, J, K, L, SCLN,QUOT,ENT, \
LSFT,NUBS,Z, X, C, V, B, N, M, COMM,DOT, SLSH,FN0, ESC, \
FN4, LGUI,LALT, SPC, APP, FN2, FN1, FN3),
[1] = KEYMAP( \
[1] = LAYOUT( \
GRV, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, TRNS,TRNS, \
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,\
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, \

View File

@@ -11,11 +11,11 @@ People often define custom names using `#define`. For example:
#define ALT_TAB LALT(KC_TAB)
```
This will allow you to use `FN_CAPS` and `ALT_TAB` in your `KEYMAP()`, keeping it more readable.
This will allow you to use `FN_CAPS` and `ALT_TAB` in your keymap, keeping it more readable.
## Caveats
Currently, `LT()` and `MT()` are limited to the [Basic Keycode set](keycodes_basic.md), meaning you can't use keycodes like `LCTL()`, `KC_TILD`, or anything greater than `0xFF`. Modifiers specified as part of a Layer Tap or Mod Tap's keycode will be ignored.
Currently, `LT()` and `MT()` are limited to the [Basic Keycode set](keycodes_basic.md), meaning you can't use keycodes like `LCTL()`, `KC_TILD`, or anything greater than `0xFF`. Modifiers specified as part of a Layer Tap or Mod Tap's keycode will be ignored. If you need to apply modifiers to your tapped keycode, [Tap Dance](https://github.com/qmk/qmk_firmware/blob/master/docs/feature_tap_dance.md#example-5-using-tap-dance-for-advanced-mod-tap-and-layer-tap-keys) can be used to accomplish this.
Additionally, if at least one right-handed modifier is specified in a Mod Tap or Layer Tap, it will cause all modifiers specified to become right-handed, so it is not possible to mix and match the two.
@@ -256,10 +256,10 @@ If you press a Mod Tap key, tap another key (press and release) and then release
For Instance:
- `SHFT_T(KC_A)` Down
- `SFT_T(KC_A)` Down
- `KC_X` Down
- `KC_X` Up
- `SHFT_T(KC_A)` Up
- `SFT_T(KC_A)` Up
Normally, if you do all this within the `TAPPING_TERM` (default: 200ms) this will be registered as `ax` by the firmware and host system. With permissive hold enabled, this modifies how this is handled by considering the Mod Tap keys as a Mod if another key is tapped, and would registered as `X` (`SHIFT`+`x`).
@@ -279,9 +279,9 @@ Setting `Ignore Mod Tap Interrupt` requires holding both keys for the `TAPPING_
For Instance:
- `SHFT_T(KC_A)` Down
- `SFT_T(KC_A)` Down
- `KC_X` Down
- `SHFT_T(KC_A)` Up
- `SFT_T(KC_A)` Up
- `KC_X` Up
Normally, this would send `X` (`SHIFT`+`x`). With `Ignore Mod Tap Interrupt` enabled, holding both keys are required for the `TAPPING_TERM` to register the hold action. A quick tap will output `ax` in this case, while a hold on both will still output `X` (`SHIFT`+`x`).
@@ -303,11 +303,11 @@ When the user holds a key after tap, this repeats the tapped key rather to hold
Example:
- SHFT_T(KC_A) Down
- SHFT_T(KC_A) Up
- SHFT_T(KC_A) Down
- SFT_T(KC_A) Down
- SFT_T(KC_A) Up
- SFT_T(KC_A) Down
- wait more than tapping term...
- SHFT_T(KC_A) Up
- SFT_T(KC_A) Up
With default settings, `a` will be sent on the first release, then `a` will be sent on the second press allowing the computer to trigger its auto repeat function.

View File

@@ -100,6 +100,16 @@ In music mode, the following keycodes work differently, and don't pass through:
* `KC_UP` - speed-up playback
* `KC_DOWN` - slow-down playback
The pitch standard (`PITCH_STANDARD_A`) is 440.0f by default - to change this, add something like this to your `config.h`:
#define PITCH_STANDARD_A 432.0f
You can completely disable Music Mode as well. This is useful, if you're pressed for space on your controller. To disable it, add this to your `config.h`:
#define NO_MUSIC_MODE
### Music Mask
By default, `MUSIC_MASK` is set to `keycode < 0xFF` which means keycodes less than `0xFF` are turned into notes, and don't output anything. You can change this by defining this in your `config.h` like this:
#define MUSIC_MASK keycode != KC_NO
@@ -120,13 +130,26 @@ For a more advanced way to control which keycodes should still be processed, you
Things that return false are not part of the mask, and are always processed.
The pitch standard (`PITCH_STANDARD_A`) is 440.0f by default - to change this, add something like this to your `config.h`:
### Music Map
#define PITCH_STANDARD_A 432.0f
By default, the Music Mode uses the columns and row to determine the scale for the keys. For a board that uses a rectangular matrix that matches the keyboard layout, this is just fine. However, for boards that use a more complicated matrix (such as the Planck Rev6, or many split keyboards) this would result in a very skewed experience.
You can completely disable Music Mode as well. This is useful, if you're pressed for space on your controller. To disable it, add this to your `config.h`:
However, the Music Map option allows you to remap the scaling for the music mode, so it fits the layout, and is more natural.
#define NO_MUSIC_MODE
To enable this feature, add `#define MUSIC_MAP` to your `config.h` file, and then you will want to add a `uint8_t music_map` to your keyboard's `c` file, or your `keymap.c`.
```c
const uint8_t music_map[MATRIX_ROWS][MATRIX_COLS] = LAYOUT_ortho_4x12(
36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35,
12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23,
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11
);
```
You will want to use whichever `LAYOUT` macro that your keyboard uses here. This maps it to the correct key location. Start in the bottom left of the keyboard layout, and move to the right, and then upwards. Fill in all the entries until you have a complete matrix.
You can look at the [Planck Keyboard](https://github.com/qmk/qmk_firmware/blob/e9ace1487887c1f8b4a7e8e6d87c322988bec9ce/keyboards/planck/planck.c#L24-L29) as an example of how to implement this.
## Audio Click
@@ -152,8 +175,9 @@ You can configure the default, min and max frequencies, the stepping and built i
| `AUDIO_CLICKY_FREQ_DEFAULT` | 440.0f | Sets the default/starting audio frequency for the clicky sounds. |
| `AUDIO_CLICKY_FREQ_MIN` | 65.0f | Sets the lowest frequency (under 60f are a bit buggy). |
| `AUDIO_CLICKY_FREQ_MAX` | 1500.0f | Sets the the highest frequency. Too high may result in coworkers attacking you. |
| `AUDIO_CLICKY_FREQ_FACTOR` | 1.18921f| Sets the stepping of UP/DOWN key codes. |
| `AUDIO_CLICKY_FREQ_FACTOR` | 1.18921f| Sets the stepping of UP/DOWN key codes. This is a multiplicative factor. The default steps the frequency up/down by a musical minor third. |
| `AUDIO_CLICKY_FREQ_RANDOMNESS` | 0.05f | Sets a factor of randomness for the clicks, Setting this to `0f` will make each click identical, and `1.0f` will make this sound much like the 90's computer screen scrolling/typing effect. |
| `AUDIO_CLICKY_DELAY_DURATION` | 1 | An integer note duration where 1 is 1/16th of the tempo, or a sixty-fourth note (see `quantum/audio/musical_notes.h` for implementation details). The main clicky effect will be delayed by this duration. Adjusting this to values around 6-12 will help compensate for loud switches. |

View File

@@ -30,7 +30,32 @@ You should then be able to use the keycodes below to change the backlight level.
This feature is distinct from both the [RGB underglow](feature_rgblight.md) and [RGB matrix](feature_rgb_matrix.md) features as it usually allows for only a single colour per switch, though you can obviously use multiple different coloured LEDs on a keyboard.
Hardware PWM is only supported on certain pins of the MCU, so if the backlighting is not connected to one of them, a software implementation will be used, and backlight breathing will not be available. Currently the supported pins are `B5`, `B6`, `B7`, and `C6`.
Hardware PWM is only supported on certain pins of the MCU, so if the backlighting is not connected to one of them, a software PWM implementation triggered by hardware timer interrupts will be used.
Hardware PWM is supported according to the following table:
| Backlight Pin | Hardware timer |
|---------------|-------------------------|
|`B5` | Timer 1 |
|`B6` | Timer 1 |
|`B7` | Timer 1 |
|`C6` | Timer 3 |
|`D4` | Timer 1 (ATmega32A only)|
| other | Software PWM |
The [audio feature](feature_audio.md) also uses hardware timers. Please refer to the following table to know what hardware timer the software PWM will use depending on the audio configuration:
| Audio Pin(s) | Audio Timer | Software PWM Timer |
|--------------|-------------|--------------------|
| `C4` | Timer 3 | Timer 1 |
| `C5` | Timer 3 | Timer 1 |
| `C6` | Timer 3 | Timer 1 |
| `B5` | Timer 1 | Timer 3 |
| `B6` | Timer 1 | Timer 3 |
| `B7` | Timer 1 | Timer 3 |
| `Bx` & `Cx` | Timer 1 & 3 | None |
When all timers are in use for [audio](feature_audio.md), the backlight software PWM will not use a hardware timer, but instead will be triggered during the matrix scan. In this case the backlight doesn't support breathing and might show lighting artifacts (for instance flickering), because the PWM computation might not be called with enough timing precision.
## Configuration
@@ -39,10 +64,31 @@ To change the behaviour of the backlighting, `#define` these in your `config.h`:
|Define |Default |Description |
|---------------------|-------------|-------------------------------------------------------------------------------------------------------------|
|`BACKLIGHT_PIN` |`B7` |The pin that controls the LEDs. Unless you are designing your own keyboard, you shouldn't need to change this|
|`BACKLIGHT_PINS` |*Not defined*|experimental: see below for more information |
|`BACKLIGHT_LEVELS` |`3` |The number of brightness levels (maximum 15 excluding off) |
|`BACKLIGHT_CAPS_LOCK`|*Not defined*|Enable Caps Lock indicator using backlight (for keyboards without dedicated LED) |
|`BACKLIGHT_BREATHING`|*Not defined*|Enable backlight breathing, if hardware PWM is used |
|`BACKLIGHT_BREATHING`|*Not defined*|Enable backlight breathing, if supported |
|`BREATHING_PERIOD` |`6` |The length of one backlight "breath" in seconds |
|`BACKLIGHT_ON_STATE` |`0` |The state of the backlight pin when the backlight is "on" - `1` for high, `0` for low |
## Backlight On State
Most backlight circuits are driven by an N-channel MOSFET or NPN transistor. This means that to turn the transistor *on* and light the LEDs, you must drive the backlight pin, connected to the gate or base, *low*.
Sometimes, however, a P-channel MOSFET, or a PNP transistor is used. In this case you must `#define BACKLIGHT_ON_STATE 1`, so that when the transistor is on, the pin is driven *high* instead.
## Multiple backlight pins
Most keyboards have only one backlight pin which control all backlight LEDs (especially if the backlight is connected to an hardware PWM pin).
In software PWM, it is possible to define multiple backlight pins. All those pins will be turned on and off at the same time during the PWM duty cycle.
This feature allows to set for instance the Caps Lock LED (or any other controllable LED) brightness at the same level as the other LEDs of the backlight. This is useful if you have mapped LCTRL in place of Caps Lock and you need the Caps Lock LED to be part of the backlight instead of being activated when Caps Lock is on.
To activate multiple backlight pins, you need to add something like this to your user `config.h`:
~~~c
#define BACKLIGHT_LED_COUNT 2
#undef BACKLIGHT_PIN
#define BACKLIGHT_PINS { F5, B2 }
~~~
## Hardware PWM Implementation
@@ -53,6 +99,15 @@ In this way `OCRxx` essentially controls the duty cycle of the LEDs, and thus th
The breathing effect is achieved by registering an interrupt handler for `TIMER1_OVF_vect` that is called whenever the counter resets, roughly 244 times per second.
In this handler, the value of an incrementing counter is mapped onto a precomputed brightness curve. To turn off breathing, the interrupt handler is simply disabled, and the brightness reset to the level stored in EEPROM.
## Software PWM Implementation
When `BACKLIGHT_PIN` is not set to a hardware backlight pin, QMK will use a hardware timer configured to trigger software interrupts. This time will count up to `ICRx` (by default `0xFFFF`) before resetting to 0.
When resetting to 0, the CPU will fire an OVF (overflow) interrupt that will turn the LEDs on, starting the duty cycle.
The desired brightness is calculated and stored in the `OCRxx` register. When the counter reaches this value, the CPU will fire a Compare Output match interrupt, which will turn the LEDs off.
In this way `OCRxx` essentially controls the duty cycle of the LEDs, and thus the brightness, where `0x0000` is completely off and `0xFFFF` is completely on.
The breathing effect is the same as in the hardware PWM implementation.
## Backlight Functions
|Function |Description |

View File

@@ -140,7 +140,7 @@ To replace the function, all you need to do is add something like this to your c
```c
void bootmagic_lite(void) {
matrix_scan();
wait_ms(DEBOUNCING_DELAY * 2);
wait_ms(DEBOUNCE * 2);
matrix_scan();
if (matrix_get_row(BOOTMAGIC_LITE_ROW) & (1 << BOOTMAGIC_LITE_COLUMN)) {

View File

@@ -19,7 +19,6 @@ combo_t key_combos[COMBO_COUNT] = {COMBO(test_combo, KC_ESC)};
This will send "Escape" if you hit the A and B keys.
!> This method only supports [basic keycodes](keycodes_basic.md). See the examples for more control.
!> You cannot reuse (share) keys in combos. Each key should only belong to a single combo.
## Examples
@@ -30,6 +29,7 @@ enum combos {
AB_ESC,
JK_TAB
};
const uint16_t PROGMEM ab_combo[] = {KC_A, KC_B, COMBO_END};
const uint16_t PROGMEM jk_combo[] = {KC_J, KC_K, COMBO_END};
@@ -45,7 +45,7 @@ For a more complicated implementation, you can use the `process_combo_event` fun
enum combo_events {
ZC_COPY,
XV_PASTE
};
};
const uint16_t PROGMEM copy_combo[] = {KC_Z, KC_C, COMBO_END};
const uint16_t PROGMEM paste_combo[] = {KC_X, KC_V, COMBO_END};

View File

@@ -29,9 +29,10 @@ If you would like to change the key assignments for Command, `#define` these in
|`MAGIC_KEY_CONSOLE` |`C` |Enable the Command console |
|`MAGIC_KEY_VERSION` |`V` |Print the running QMK version to the console |
|`MAGIC_KEY_STATUS` |`S` |Print the current keyboard status to the console|
|`MAGIC_KEY_HELP1` |`H` |Print Command help to the console |
|`MAGIC_KEY_HELP2` |`SLASH` |Print Command help to the console (alternate) |
|`MAGIC_KEY_HELP` |`H` |Print Command help to the console |
|`MAGIC_KEY_HELP_ALT` |`SLASH` |Print Command help to the console (alternate) |
|`MAGIC_KEY_LAYER0` |`0` |Make layer 0 the default layer |
|`MAGIC_KEY_LAYER0_ALT` |`GRAVE` |Make layer 0 the default layer (alternate) |
|`MAGIC_KEY_LAYER1` |`1` |Make layer 1 the default layer |
|`MAGIC_KEY_LAYER2` |`2` |Make layer 2 the default layer |
|`MAGIC_KEY_LAYER3` |`3` |Make layer 3 the default layer |
@@ -41,10 +42,10 @@ If you would like to change the key assignments for Command, `#define` these in
|`MAGIC_KEY_LAYER7` |`7` |Make layer 7 the default layer |
|`MAGIC_KEY_LAYER8` |`8` |Make layer 8 the default layer |
|`MAGIC_KEY_LAYER9` |`9` |Make layer 9 the default layer |
|`MAGIC_KEY_LAYER0_ALT1` |`ESC` |Make layer 0 the default layer (alternate) |
|`MAGIC_KEY_LAYER0_ALT2` |`GRAVE` |Make layer 0 the default layer (alternate) |
|`MAGIC_KEY_BOOTLOADER` |`PAUSE` |Enter the bootloader |
|`MAGIC_KEY_BOOTLOADER` |`B` |Jump to bootloader |
|`MAGIC_KEY_BOOTLOADER_ALT` |`ESC` |Jump to bootloader (alternate) |
|`MAGIC_KEY_LOCK` |`CAPS` |Lock the keyboard so nothing can be typed |
|`MAGIC_KEY_EEPROM` |`E` |Clear the EEPROM |
|`MAGIC_KEY_EEPROM` |`E` |Print stored EEPROM config to the console |
|`MAGIC_KEY_EEPROM_CLEAR` |`BSPACE` |Clear the EEPROM |
|`MAGIC_KEY_NKRO` |`N` |Toggle N-Key Rollover (NKRO) |
|`MAGIC_KEY_SLEEP_LED` |`Z` |Toggle LED when computer is sleeping |

View File

@@ -2,45 +2,41 @@
QMK supports multiple debounce algorithms through its debounce API.
The underlying debounce algorithm is determined by which matrix.c file you are using.
The logic for which debounce method called is below. It checks various defines that you have set in rules.mk
```
DEBOUNCE_DIR:= $(QUANTUM_DIR)/debounce
DEBOUNCE_TYPE?= sym_g
VALID_DEBOUNCE_TYPES := sym_g eager_pk custom
ifeq ($(filter $(DEBOUNCE_TYPE),$(VALID_DEBOUNCE_TYPES)),)
$(error DEBOUNCE_TYPE="$(DEBOUNCE_TYPE)" is not a valid debounce algorithm)
endif
ifeq ($(strip $(DEBOUNCE_TYPE)), sym_g)
QUANTUM_SRC += $(DEBOUNCE_DIR)/debounce_sym_g.c
else ifeq ($(strip $(DEBOUNCE_TYPE)), eager_pk)
QUANTUM_SRC += $(DEBOUNCE_DIR)/debounce_eager_pk.c
ifneq ($(strip $(DEBOUNCE_TYPE)), custom)
QUANTUM_SRC += $(DEBOUNCE_DIR)/$(strip $(DEBOUNCE_TYPE)).c
endif
```
# Debounce selection
| DEBOUNCE_ALGO | Description | What to do |
| ------------- | --------------------------------------------------- | ----------------------------- |
| Not defined | You are using the included matrix.c and debounce.c | Nothing. Debounce_sym_g will be compiled, and used if necessary |
| custom | Use your own debounce.c | ```SRC += debounce.c``` add your own debounce.c and implement necessary functions |
| sym_g / eager_pk | You are using the included matrix.c and debounce.c | Use an alternative debounce algorithm |
| DEBOUNCE_TYPE | Description | What else is needed |
| ------------- | --------------------------------------------------- | ----------------------------- |
| Not defined | Use the default algorithm, currently sym_g | Nothing |
| custom | Use your own debounce.c | ```SRC += debounce.c``` add your own debounce.c and implement necessary functions |
| anything_else | Use another algorithm from quantum/debounce/* | Nothing |
**Regarding split keyboards**:
**Regarding split keyboards**:
The debounce code is compatible with split keyboards.
# Use your own debouncing code
* Set ```DEBOUNCE_TYPE = custom ```.
* Add ```SRC += debounce.c```
* Add your own ```debounce.c```. Look at included ```debounce_sym_g.c```s for sample implementations.
* Add your own ```debounce.c```. Look at current implementations in ```quantum/debounce``` for examples.
* Debouncing occurs after every raw matrix scan.
* Use num_rows rather than MATRIX_ROWS, so that split keyboards are supported correctly.
# Changing between included debouncing methods
You can either use your own code, by including your own debounce.c, or switch to another included one.
Included debounce methods are:
* debounce_eager_pk - debouncing per key. On any state change, response is immediate, followed by ```DEBOUNCE_DELAY``` millseconds of no further input for that key
* debounce_sym_g - debouncing per keyboard. On any state change, a global timer is set. When ```DEBOUNCE_DELAY``` milliseconds of no changes has occured, all input changes are pushed.
* eager_pr - debouncing per row. On any state change, response is immediate, followed by locking the row ```DEBOUNCE_DELAY``` milliseconds of no further input for that row.
For use in keyboards where refreshing ```NUM_KEYS``` 8-bit counters is computationally expensive / low scan rate, and fingers usually only hit one row at a time. This could be
appropriate for the ErgoDox models; the matrix is rotated 90°, and hence its "rows" are really columns, and each finger only hits a single "row" at a time in normal use.
* eager_pk - debouncing per key. On any state change, response is immediate, followed by ```DEBOUNCE_DELAY``` milliseconds of no further input for that key
* sym_g - debouncing per keyboard. On any state change, a global timer is set. When ```DEBOUNCE_DELAY``` milliseconds of no changes has occured, all input changes are pushed.

View File

@@ -38,7 +38,7 @@ or `keymap.c`:
} else {
tap_code(KC_PGUP);
}
} else if (index == 1) { /* Second encoder
} else if (index == 1) { /* Second encoder */
if (clockwise) {
tap_code(KC_UP);
} else {

View File

@@ -18,7 +18,7 @@ If Mary presses GESC on her keyboard, the OS will see an KC_ESC character. Now i
### Caveats
* On macOS CMD/GUI + KC_GRV is actually mapped to a hot key so it will not output a backtick.
On macOS, Command+<code>&#96;</code> is by default mapped to "Move focus to next window" so it will not output a backtick. Additionally, Terminal always recognises this shortcut to cycle between windows, even if the shortcut is changed in the Keyboard preferences.
## Configuration

View File

@@ -146,9 +146,102 @@ send_string(my_str);
SEND_STRING(".."SS_TAP(X_END));
```
## The Old Way: `MACRO()` & `action_get_macro`
?> This is inherited from TMK, and hasn't been updated - it's recommend that you use `SEND_STRING` and `process_record_user` instead.
## Advanced Macro Functions
There are some functions you may find useful in macro-writing. Keep in mind that while you can write some fairly advanced code within a macro, if your functionality gets too complex you may want to define a custom keycode instead. Macros are meant to be simple.
### `record->event.pressed`
This is a boolean value that can be tested to see if the switch is being pressed or released. An example of this is
```c
if (record->event.pressed) {
// on keydown
} else {
// on keyup
}
```
### `register_code(<kc>);`
This sends the `<kc>` keydown event to the computer. Some examples would be `KC_ESC`, `KC_C`, `KC_4`, and even modifiers such as `KC_LSFT` and `KC_LGUI`.
### `unregister_code(<kc>);`
Parallel to `register_code` function, this sends the `<kc>` keyup event to the computer. If you don't use this, the key will be held down until it's sent.
### `tap_code(<kc>);`
This will send `register_code(<kc>)` and then `unregister_code(<kc>)`. This is useful if you want to send both the press and release events ("tap" the key, rather than hold it).
If you're having issues with taps (un)registering, you can add a delay between the register and unregister events by setting `#define TAP_CODE_DELAY 100` in your `config.h` file. The value is in milliseconds.
### `register_code16(<kc>);`, `unregister_code16(<kc>);` and `tap_code16(<kc>);`
These functions work similar to their regular counterparts, but allow you to use modded keycodes (with Shift, Alt, Control, and/or GUI applied to them).
Eg, you could use `register_code16(S(KC_5));` instead of registering the mod, then registering the keycode.
### `clear_keyboard();`
This will clear all mods and keys currently pressed.
### `clear_mods();`
This will clear all mods currently pressed.
### `clear_keyboard_but_mods();`
This will clear all keys besides the mods currently pressed.
## Advanced Example:
### Super ALT↯TAB
This macro will register `KC_LALT` and tap `KC_TAB`, then wait for 1000ms. If the key is tapped again, it will send another `KC_TAB`; if there is no tap, `KC_LALT` will be unregistered, thus allowing you to cycle through windows.
```c
bool is_alt_tab_active = false; # ADD this near the begining of keymap.c
uint16_t alt_tab_timer = 0; # we will be using them soon.
enum custom_keycodes { # Make sure have the awesome keycode ready
ALT_TAB = SAFE_RANGE,
};
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
switch (keycode) { # This will do most of the grunt work with the keycodes.
case ALT_TAB:
if (record->event.pressed) {
if (!is_alt_tab_active) {
is_alt_tab_active = true;
register_code(KC_LALT);
}
alt_tab_timer = timer_read();
register_code(KC_TAB);
} else {
unregister_code(KC_TAB);
}
break;
}
return true;
}
void matrix_scan_user(void) { # The very important timer.
if (is_alt_tab_active) {
if (timer_elapsed(alt_tab_timer) > 1000) {
unregister_code(KC_LALT);
is_alt_tab_active = false;
}
}
}
```
---
## **(DEPRECATED)** The Old Way: `MACRO()` & `action_get_macro`
!> This is inherited from TMK, and hasn't been updated - it's recommended that you use `SEND_STRING` and `process_record_user` instead.
By default QMK assumes you don't have any macros. To define your macros you create an `action_get_macro()` function. For example:
@@ -183,11 +276,11 @@ A macro can include the following commands:
### Mapping a Macro to a Key
Use the `M()` function within your `KEYMAP()` to call a macro. For example, here is the keymap for a 2-key keyboard:
Use the `M()` function within your keymap to call a macro. For example, here is the keymap for a 2-key keyboard:
```c
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = KEYMAP(
[0] = LAYOUT(
M(0), M(1)
),
};
@@ -216,55 +309,16 @@ If you have a bunch of macros you want to refer to from your keymap while keepin
#define M_BYE M(1)
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = KEYMAP(
[0] = LAYOUT(
M_HI, M_BYE
),
};
```
## Advanced Macro Functions
There are some functions you may find useful in macro-writing. Keep in mind that while you can write some fairly advanced code within a macro if your functionality gets too complex you may want to define a custom keycode instead. Macros are meant to be simple.
## Advanced Example:
### `record->event.pressed`
This is a boolean value that can be tested to see if the switch is being pressed or released. An example of this is
```c
if (record->event.pressed) {
// on keydown
} else {
// on keyup
}
```
### `register_code(<kc>);`
This sends the `<kc>` keydown event to the computer. Some examples would be `KC_ESC`, `KC_C`, `KC_4`, and even modifiers such as `KC_LSFT` and `KC_LGUI`.
### `unregister_code(<kc>);`
Parallel to `register_code` function, this sends the `<kc>` keyup event to the computer. If you don't use this, the key will be held down until it's sent.
### `tap_code(<kc>);`
This will send `register_code(<kc>)` and then `unregister_code(<kc>)`. This is useful if you want to send both the press and release events ("tap" the key, rather than hold it).
If you're having issues with taps (un)registering, you can add a delay between the register and unregister events by setting `#define TAP_CODE_DELAY 100` in your `config.h` file. The value is in milliseconds.
### `clear_keyboard();`
This will clear all mods and keys currently pressed.
### `clear_mods();`
This will clear all mods currently pressed.
### `clear_keyboard_but_mods();`
This will clear all keys besides the mods currently pressed.
## Advanced Example: Single-Key Copy/Paste
### Single-Key Copy/Paste
This example defines a macro which sends `Ctrl-C` when pressed down, and `Ctrl-V` when released.

View File

@@ -1,81 +1,119 @@
# Mousekeys
# Mouse keys
Mouse keys is a feature that allows you to emulate a mouse using your keyboard. You can move the pointer at different speeds, press 5 buttons and scroll in 8 directions.
Mousekeys is a feature that allows you to emulate a mouse using your keyboard. You can move the pointer around, click up to 5 buttons, and even scroll in all 4 directions. QMK uses the same algorithm as the X Window System MouseKeysAccel feature. You can read more about it [on Wikipedia](https://en.wikipedia.org/wiki/Mouse_keys).
## Adding mouse keys to your keyboard
## Adding Mousekeys to a Keymap
To use mouse keys, you must at least enable mouse keys support and map mouse actions to keys on your keyboard.
There are two steps to adding Mousekeys support to your keyboard. You must enable support in the `rules.mk` file and you must map mouse actions to keys on your keyboard.
### Enabling mouse keys
### Adding Mousekeys Support in the `rules.mk`
To enable mouse keys, add the following line to your keymaps `rules.mk`:
To add support for Mousekeys you simply need to add a single line to your keymap's `rules.mk`:
```
```c
MOUSEKEY_ENABLE = yes
```
You can see an example here: https://github.com/qmk/qmk_firmware/blob/master/keyboards/clueboard/66/keymaps/mouse_keys/rules.mk
### Mapping mouse actions
### Mapping Mouse Actions to Keyboard Keys
In your keymap you can use the following keycodes to map key presses to mouse actions:
You can use these keycodes within your keymap to map button presses to mouse actions:
|Key |Aliases |Description |
|----------------|---------|-----------------|
|`KC_MS_UP` |`KC_MS_U`|Move cursor up |
|`KC_MS_DOWN` |`KC_MS_D`|Move cursor down |
|`KC_MS_LEFT` |`KC_MS_L`|Move cursor left |
|`KC_MS_RIGHT` |`KC_MS_R`|Move cursor right|
|`KC_MS_BTN1` |`KC_BTN1`|Press button 1 |
|`KC_MS_BTN2` |`KC_BTN2`|Press button 2 |
|`KC_MS_BTN3` |`KC_BTN3`|Press button 3 |
|`KC_MS_BTN4` |`KC_BTN4`|Press button 4 |
|`KC_MS_BTN5` |`KC_BTN5`|Press button 5 |
|`KC_MS_WH_UP` |`KC_WH_U`|Move wheel up |
|`KC_MS_WH_DOWN` |`KC_WH_D`|Move wheel down |
|`KC_MS_WH_LEFT` |`KC_WH_L`|Move wheel left |
|`KC_MS_WH_RIGHT`|`KC_WH_R`|Move wheel right |
|`KC_MS_ACCEL0` |`KC_ACL0`|Set speed to 0 |
|`KC_MS_ACCEL1` |`KC_ACL1`|Set speed to 1 |
|`KC_MS_ACCEL2` |`KC_ACL2`|Set speed to 2 |
|Key |Aliases |Description |
|----------------|---------|---------------------------|
|`KC_MS_UP` |`KC_MS_U`|Mouse Cursor Up |
|`KC_MS_DOWN` |`KC_MS_D`|Mouse Cursor Down |
|`KC_MS_LEFT` |`KC_MS_L`|Mouse Cursor Left |
|`KC_MS_RIGHT` |`KC_MS_R`|Mouse Cursor Right |
|`KC_MS_BTN1` |`KC_BTN1`|Mouse Button 1 |
|`KC_MS_BTN2` |`KC_BTN2`|Mouse Button 2 |
|`KC_MS_BTN3` |`KC_BTN3`|Mouse Button 3 |
|`KC_MS_BTN4` |`KC_BTN4`|Mouse Button 4 |
|`KC_MS_BTN5` |`KC_BTN5`|Mouse Button 5 |
|`KC_MS_WH_UP` |`KC_WH_U`|Mouse Wheel Up |
|`KC_MS_WH_DOWN` |`KC_WH_D`|Mouse Wheel Down |
|`KC_MS_WH_LEFT` |`KC_WH_L`|Mouse Wheel Left |
|`KC_MS_WH_RIGHT`|`KC_WH_R`|Mouse Wheel Right |
|`KC_MS_ACCEL0` |`KC_ACL0`|Set mouse acceleration to 0|
|`KC_MS_ACCEL1` |`KC_ACL1`|Set mouse acceleration to 1|
|`KC_MS_ACCEL2` |`KC_ACL2`|Set mouse acceleration to 2|
## Configuring mouse keys
You can see an example in the `_ML` here: https://github.com/qmk/qmk_firmware/blob/master/keyboards/clueboard/66/keymaps/mouse_keys/keymap.c#L46
Mouse keys supports two different modes to move the cursor:
## Configuring the Behavior of Mousekeys
* **Accelerated (default):** Holding movement keys accelerates the cursor until it reaches its maximum speed.
* **Constant:** Holding movement keys moves the cursor at constant speeds.
The default speed for controlling the mouse with the keyboard is intentionally slow. You can adjust these parameters by adding these settings to your keymap's `config.h` file. All times are specified in milliseconds (ms).
The same principle applies to scrolling.
```
#define MOUSEKEY_DELAY 300
#define MOUSEKEY_INTERVAL 50
#define MOUSEKEY_MAX_SPEED 10
#define MOUSEKEY_TIME_TO_MAX 20
#define MOUSEKEY_WHEEL_MAX_SPEED 8
#define MOUSEKEY_WHEEL_TIME_TO_MAX 40
Configuration options that are times, intervals or delays are given in milliseconds. Scroll speed is given as multiples of the default scroll step. For example, a scroll speed of 8 means that each scroll action covers 8 times the length of the default scroll step as defined by your operating system or application.
### Accelerated mode
This is the default mode. You can adjust the cursor and scrolling acceleration using the following settings in your keymaps `config.h` file:
|Define |Default|Description |
|----------------------------|-------|---------------------------------------------------------|
|`MOUSEKEY_DELAY` |300 |Delay between pressing a movement key and cursor movement|
|`MOUSEKEY_INTERVAL` |50 |Time between cursor movements |
|`MOUSEKEY_MAX_SPEED` |10 |Maximum cursor speed at which acceleration stops |
|`MOUSEKEY_TIME_TO_MAX` |20 |Time until maximum cursor speed is reached |
|`MOUSEKEY_WHEEL_MAX_SPEED` |8 |Maximum number of scroll steps per scroll action |
|`MOUSEKEY_WHEEL_TIME_TO_MAX`|40 |Time until maximum scroll speed is reached |
Tips:
* Setting `MOUSEKEY_DELAY` too low makes the cursor unresponsive. Setting it too high makes small movements difficult.
* For smoother cursor movements, lower the value of `MOUSEKEY_INTERVAL`. If the refresh rate of your display is 60Hz, you could set it to `16` (1/60). As this raises the cursor speed significantly, you may want to lower `MOUSEKEY_MAX_SPEED`.
* Setting `MOUSEKEY_TIME_TO_MAX` or `MOUSEKEY_WHEEL_TIME_TO_MAX` to `0` will disable acceleration for the cursor or scrolling respectively. This way you can make one of them constant while keeping the other accelerated, which is not possible in constant speed mode.
Cursor acceleration uses the same algorithm as the X Window System MouseKeysAccel feature. You can read more about it [on Wikipedia](https://en.wikipedia.org/wiki/Mouse_keys).
### Constant mode
In this mode you can define multiple different speeds for both the cursor and the mouse wheel. There is no acceleration. `KC_ACL0`, `KC_ACL1` and `KC_ACL2` change the cursor and scroll speed to their respective setting.
You can choose whether speed selection is momentary or tap-to-select:
* **Momentary:** The chosen speed is only active while you hold the respective key. When the key is raised, mouse keys returns to the unmodified speed.
* **Tap-to-select:** The chosen speed is activated when you press the respective key and remains active even after the key has been raised. The default speed is that of `KC_ACL1`. There is no unmodified speed.
The default speeds from slowest to fastest are as follows:
* **Momentary:** `KC_ACL0` < `KC_ACL1` < *unmodified* < `KC_ACL2`
* **Tap-to-select:** `KC_ACL0` < `KC_ACL1` < `KC_ACL2`
To use constant speed mode, you must at least define `MK_3_SPEED` in your keymaps `config.h` file:
```c
#define MK_3_SPEED
```
To enable momentary mode, also define `MK_MOMENTARY_ACCEL`:
### `MOUSEKEY_DELAY`
```c
#define MK_MOMENTARY_ACCEL
```
When one of the mouse movement buttons is pressed this setting is used to define the delay between that button press and the mouse cursor moving. Some people find that small movements are impossible if this setting is too low, while settings that are too high feel sluggish.
Use the following settings if you want to adjust cursor movement or scrolling:
### `MOUSEKEY_INTERVAL`
When a movement key is held down this specifies how long to wait between each movement report. Lower settings will translate into an effectively higher mouse speed.
### `MOUSEKEY_MAX_SPEED`
As a movement key is held down the speed of the mouse cursor will increase until it reaches `MOUSEKEY_MAX_SPEED`.
### `MOUSEKEY_TIME_TO_MAX`
How long you want to hold down a movement key for until `MOUSEKEY_MAX_SPEED` is reached. This controls how quickly your cursor will accelerate.
### `MOUSEKEY_WHEEL_MAX_SPEED`
The top speed for scrolling movements.
### `MOUSEKEY_WHEEL_TIME_TO_MAX`
How long you want to hold down a scroll key for until `MOUSEKEY_WHEEL_MAX_SPEED` is reached. This controls how quickly your scrolling will accelerate.
|Define |Default |Description |
|---------------------|-------------|-------------------------------------------|
|`MK_3_SPEED` |*Not defined*|Enable constant cursor speeds |
|`MK_MOMENTARY_ACCEL` |*Not defined*|Enable momentary speed selection |
|`MK_C_OFFSET_UNMOD` |16 |Cursor offset per movement (unmodified) |
|`MK_C_INTERVAL_UNMOD`|16 |Time between cursor movements (unmodified) |
|`MK_C_OFFSET_0` |1 |Cursor offset per movement (`KC_ACL0`) |
|`MK_C_INTERVAL_0` |32 |Time between cursor movements (`KC_ACL0`) |
|`MK_C_OFFSET_1` |4 |Cursor offset per movement (`KC_ACL1`) |
|`MK_C_INTERVAL_1` |16 |Time between cursor movements (`KC_ACL1`) |
|`MK_C_OFFSET_2` |32 |Cursor offset per movement (`KC_ACL2`) |
|`MK_C_INTERVAL_2` |16 |Time between cursor movements (`KC_ACL2`) |
|`MK_W_OFFSET_UNMOD` |1 |Scroll steps per scroll action (unmodified)|
|`MK_W_INTERVAL_UNMOD`|40 |Time between scroll steps (unmodified) |
|`MK_W_OFFSET_0` |1 |Scroll steps per scroll action (`KC_ACL0`) |
|`MK_W_INTERVAL_0` |360 |Time between scroll steps (`KC_ACL0`) |
|`MK_W_OFFSET_1` |1 |Scroll steps per scroll action (`KC_ACL1`) |
|`MK_W_INTERVAL_1` |120 |Time between scroll steps (`KC_ACL1`) |
|`MK_W_OFFSET_2` |1 |Scroll steps per scroll action (`KC_ACL2`) |
|`MK_W_INTERVAL_2` |20 |Time between scroll steps (`KC_ACL2`) |

289
docs/feature_oled_driver.md Normal file
View File

@@ -0,0 +1,289 @@
# OLED Driver
## OLED Supported Hardware
OLED modules using SSD1306 or SH1106 driver ICs, communicating over I2C.
Tested combinations:
| IC driver | Size | Keyboard Platform | Notes |
|-----------|--------|-------------------|--------------------------|
| SSD1306 | 128x32 | AVR | Primary support |
| SSD1306 | 128x64 | AVR | Verified working |
| SSD1306 | 128x32 | ARM | |
| SH1106 | 128x64 | AVR | No rotation or scrolling |
Hardware configurations using ARM-based microcontrollers or different sizes of OLED modules may be compatible, but are untested.
!> Warning: This OLED Driver currently uses the new i2c_master driver from split common code. If your split keyboard uses I2C to communicate between sides, this driver could cause an address conflict (serial is fine). Please contact your keyboard vendor and ask them to migrate to the latest split common code to fix this. In addition, the display timeout system to reduce OLED burn-in also uses split common to detect keypresses, so you will need to implement custom timeout logic for non-split common keyboards.
## Usage
To enable the OLED feature, there are three steps. First, when compiling your keyboard, you'll need to set `OLED_DRIVER_ENABLE=yes` in `rules.mk`, e.g.:
```
OLED_DRIVER_ENABLE = yes
```
This enables the feature and the `OLED_DRIVER_ENABLE` define. Then in your `keymap.c` file, you will need to implement the user task call, e.g:
```C++
#ifdef OLED_DRIVER_ENABLE
void oled_task_user(void) {
// Host Keyboard Layer Status
oled_write_P(PSTR("Layer: "), false);
switch (biton32(layer_state)) {
case _QWERTY:
oled_write_P(PSTR("Default\n"), false);
break;
case _FN:
oled_write_P(PSTR("FN\n"), false);
break;
case _ADJ:
oled_write_P(PSTR("ADJ\n"), false);
break;
default:
// Or use the write_ln shortcut over adding '\n' to the end of your string
oled_write_ln_P(PSTR("Undefined"), false);
}
// Host Keyboard LED Status
uint8_t led_usb_state = host_keyboard_leds();
oled_write_P(led_usb_state & (1<<USB_LED_NUM_LOCK) ? PSTR("NUMLCK ") : PSTR(" "), false);
oled_write_P(led_usb_state & (1<<USB_LED_CAPS_LOCK) ? PSTR("CAPLCK ") : PSTR(" "), false);
oled_write_P(led_usb_state & (1<<USB_LED_SCROLL_LOCK) ? PSTR("SCRLCK ") : PSTR(" "), false);
}
#endif
```
## Logo Example
In the default font, ranges in the font file are reserved for a QMK Logo. To Render this logo to the oled screen, use the following code example:
```C++
static void render_logo(void) {
static const char PROGMEM qmk_logo[] = {
0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f,0x90,0x91,0x92,0x93,0x94,
0xa0,0xa1,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7,0xa8,0xa9,0xaa,0xab,0xac,0xad,0xae,0xaf,0xb0,0xb1,0xb2,0xb3,0xb4,
0xc0,0xc1,0xc2,0xc3,0xc4,0xc5,0xc6,0xc7,0xc8,0xc9,0xca,0xcb,0xcc,0xcd,0xce,0xcf,0xd0,0xd1,0xd2,0xd3,0xd4,0};
oled_write_P(qmk_logo, false);
}
```
## Other Examples
In split keyboards, it is very common to have two OLED displays that each render different content and oriented flipped differently. You can do this by switching which content to render by using the return from `is_keyboard_master()` or `is_keyboard_left()` found in `split_util.h`, e.g:
```C++
#ifdef OLED_DRIVER_ENABLE
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;
}
void oled_task_user(void) {
if (is_keyboard_master()) {
render_status(); // Renders the current keyboard state (layer, lock, caps, scroll, etc)
} else {
render_logo(); // Renders a statuc logo
oled_scroll_left(); // Turns on scrolling
}
}
#endif
```
## Basic Configuration
| Define | Default | Description |
|------------------------|-------------------|----------------------------------------------------------------------------------------------------------------------------|
| `OLED_DISPLAY_ADDRESS` | `0x3C` | The i2c address of the OLED Display |
| `OLED_FONT_H` | `"glcdfont.c"` | The font code file to use for custom fonts |
| `OLED_FONT_START` | `0` | The starting characer index for custom fonts |
| `OLED_FONT_END` | `224` | The ending characer index for custom fonts |
| `OLED_FONT_WIDTH` | `6` | The font width |
| `OLED_FONT_HEIGHT` | `8` | The font height (untested) |
| `OLED_DISABLE_TIMEOUT` | *Not defined* | Disables the built in OLED timeout feature. Useful when implementing custom timeout rules. |
| `OLED_IC` | `OLED_IC_SSD1306` | Set to `OLED_IC_SH1106` if you're using the SH1106 OLED controller. |
| `OLED_COLUMN_OFFSET` | `0` | (SH1106 only.) Shift output to the right this many pixels.<br />Useful for 128x64 displays centered on a 132x64 SH1106 IC. |
## 128x64 & Custom sized OLED Displays
The default display size for this feature is 128x32 and all necessary defines are precalculated with that in mind. We have added a define, `OLED_DISPLAY_128X64`, to switch all the values to be used in a 128x64 display, as well as added a custom define, `OLED_DISPLAY_CUSTOM`, that allows you to provide the necessary values to the driver.
|Define |Default |Description |
|-----------------------|---------------|-----------------------------------------------------------------|
|`OLED_DISPLAY_128X64` |*Not defined* |Changes the display defines for use with 128x64 displays. |
|`OLED_DISPLAY_CUSTOM` |*Not defined* |Changes the display defines for use with custom displays.<br />Requires user to implement the below defines. |
|`OLED_DISPLAY_WIDTH` |`128` |The width of the OLED display. |
|`OLED_DISPLAY_HEIGHT` |`32` |The height of the OLED display. |
|`OLED_MATRIX_SIZE` |`512` |The local buffer size to allocate.<br />`(OLED_DISPLAY_HEIGHT / 8 * OLED_DISPLAY_WIDTH)`. |
|`OLED_BLOCK_TYPE` |`uint16_t` |The unsigned integer type to use for dirty rendering. |
|`OLED_BLOCK_COUNT` |`16` |The number of blocks the display is divided into for dirty rendering.<br />`(sizeof(OLED_BLOCK_TYPE) * 8)`. |
|`OLED_BLOCK_SIZE` |`32` |The size of each block for dirty rendering<br />`(OLED_MATRIX_SIZE / OLED_BLOCK_COUNT)`. |
|`OLED_COM_PINS` |`COM_PINS_SEQ` |How the SSD1306 chip maps it's memory to display.<br />Options are `COM_PINS_SEQ`, `COM_PINS_ALT`, `COM_PINS_SEQ_LR`, & `COM_PINS_ALT_LR`. |
|`OLED_SOURCE_MAP` |`{ 0, ... N }` |Precalculated source array to use for mapping source buffer to target OLED memory in 90 degree rendering. |
|`OLED_TARGET_MAP` |`{ 24, ... N }`|Precalculated target array to use for mapping source buffer to target OLED memory in 90 degree rendering. |
### 90 Degree Rotation - Technical Mumbo Jumbo
!> Rotation is unsupported on the SH1106.
```C
// OLED Rotation enum values are flags
typedef enum {
OLED_ROTATION_0 = 0,
OLED_ROTATION_90 = 1,
OLED_ROTATION_180 = 2,
OLED_ROTATION_270 = 3, // OLED_ROTATION_90 | OLED_ROTATION_180
} oled_rotation_t;
```
OLED displays driven by SSD1306 drivers only natively support in hard ware 0 degree and 180 degree rendering. This feature is done in software and not free. Using this feature will increase the time to calculate what data to send over i2c to the OLED. If you are strapped for cycles, this can cause keycodes to not register. In testing however, the rendering time on an `atmega32u4` board only went from 2ms to 5ms and keycodes not registering was only noticed once we hit 15ms.
90 Degree Rotated Rendering is achieved by using bitwise operations to rotate each 8 block of memory and uses two precalculated arrays to remap buffer memory to OLED memory. The memory map defines are precalculated for remap performance and are calculated based on the OLED Height, Width, and Block Size. For example, in the 128x32 implementation with a `uint8_t` block type, we have a 64 byte block size. This gives us eight 8 byte blocks that need to be rotated and rendered. The OLED renders horizontally two 8 byte blocks before moving down a page, e.g:
| | | | | | |
|---|---|---|---|---|---|
| 0 | 1 | | | | |
| 2 | 3 | | | | |
| 4 | 5 | | | | |
| 6 | 7 | | | | |
However the local buffer is stored as if it was Height x Width display instead of Width x Height, e.g:
| | | | | | |
|---|---|---|---|---|---|
| 3 | 7 | | | | |
| 2 | 6 | | | | |
| 1 | 5 | | | | |
| 0 | 4 | | | | |
So those precalculated arrays just index the memory offsets in the order in which each one iterates its data.
## OLED API
```C++
// OLED Rotation enum values are flags
typedef enum {
OLED_ROTATION_0 = 0,
OLED_ROTATION_90 = 1,
OLED_ROTATION_180 = 2,
OLED_ROTATION_270 = 3, // OLED_ROTATION_90 | OLED_ROTATION_180
} oled_rotation_t;
// Initialize the OLED display, rotating the rendered output based on the define passed in.
// Returns true if the OLED was initialized successfully
bool oled_init(oled_rotation_t rotation);
// Called at the start of oled_init, weak function overridable by the user
// rotation - the value passed into oled_init
// Return new oled_rotation_t if you want to override default rotation
oled_rotation_t oled_init_user(oled_rotation_t rotation);
// Clears the display buffer, resets cursor position to 0, and sets the buffer to dirty for rendering
void oled_clear(void);
// Renders the dirty chunks of the buffer to OLED display
void oled_render(void);
// Moves cursor to character position indicated by column and line, wraps if out of bounds
// Max column denoted by 'oled_max_chars()' and max lines by 'oled_max_lines()' functions
void oled_set_cursor(uint8_t col, uint8_t line);
// Advances the cursor to the next page, writing ' ' if true
// Wraps to the begining when out of bounds
void oled_advance_page(bool clearPageRemainder);
// Moves the cursor forward 1 character length
// Advance page if there is not enough room for the next character
// Wraps to the begining when out of bounds
void oled_advance_char(void);
// Writes a single character to the buffer at current cursor position
// Advances the cursor while writing, inverts the pixels if true
// Main handler that writes character data to the display buffer
void oled_write_char(const char data, bool invert);
// Writes a string to the buffer at current cursor position
// Advances the cursor while writing, inverts the pixels if true
void oled_write(const char *data, bool invert);
// Writes a string to the buffer at current cursor position
// Advances the cursor while writing, inverts the pixels if true
// Advances the cursor to the next page, wiring ' ' to the remainder of the current page
void oled_write_ln(const char *data, bool invert);
// Writes a PROGMEM string to the buffer at current cursor position
// Advances the cursor while writing, inverts the pixels if true
// Remapped to call 'void oled_write(const char *data, bool invert);' on ARM
void oled_write_P(const char *data, bool invert);
// Writes a PROGMEM string to the buffer at current cursor position
// Advances the cursor while writing, inverts the pixels if true
// Advances the cursor to the next page, wiring ' ' to the remainder of the current page
// Remapped to call 'void oled_write_ln(const char *data, bool invert);' on ARM
void oled_write_ln_P(const char *data, bool invert);
// Can be used to manually turn on the screen if it is off
// Returns true if the screen was on or turns on
bool oled_on(void);
// Can be used to manually turn off the screen if it is on
// Returns true if the screen was off or turns off
bool oled_off(void);
// Basically it's oled_render, but with timeout management and oled_task_user calling!
void oled_task(void);
// Called at the start of oled_task, weak function overridable by the user
void oled_task_user(void);
// Scrolls the entire display right
// Returns true if the screen was scrolling or starts scrolling
// NOTE: display contents cannot be changed while scrolling
bool oled_scroll_right(void);
// Scrolls the entire display left
// Returns true if the screen was scrolling or starts scrolling
// NOTE: display contents cannot be changed while scrolling
bool oled_scroll_left(void);
// Turns off display scrolling
// Returns true if the screen was not scrolling or stops scrolling
bool oled_scroll_off(void);
// Returns the maximum number of characters that will fit on a line
uint8_t oled_max_chars(void);
// Returns the maximum number of lines that will fit on the OLED
uint8_t oled_max_lines(void);
```
!> Scrolling and rotation are unsupported on the SH1106.
## SSD1306.h driver conversion guide
|Old API |Recommended New API |
|---------------------------|-----------------------------------|
|`struct CharacterMatrix` |*removed - delete all references* |
|`iota_gfx_init` |`oled_init` |
|`iota_gfx_on` |`oled_on` |
|`iota_gfx_off` |`oled_off` |
|`iota_gfx_flush` |`oled_render` |
|`iota_gfx_write_char` |`oled_write_char` |
|`iota_gfx_write` |`oled_write` |
|`iota_gfx_write_P` |`oled_write_P` |
|`iota_gfx_clear_screen` |`oled_clear` |
|`matrix_clear` |*removed - delete all references* |
|`matrix_write_char_inner` |`oled_write_char` |
|`matrix_write_char` |`oled_write_char` |
|`matrix_write` |`oled_write` |
|`matrix_write_ln` |`oled_write_ln` |
|`matrix_write_P` |`oled_write_P` |
|`matrix_write_ln_P` |`oled_write_ln_P` |
|`matrix_render` |`oled_render` |
|`iota_gfx_task` |`oled_task` |
|`iota_gfx_task_user` |`oled_task_user` |

View File

@@ -5,217 +5,399 @@ This feature allows you to use RGB LED matrices driven by external drivers. It h
If you want to use single color LED's you should use the [LED Matrix Subsystem](feature_led_matrix.md) instead.
## Driver configuration
---
### IS31FL3731
There is basic support for addressable RGB matrix lighting with the I2C IS31FL3731 RGB controller. To enable it, add this to your `rules.mk`:
RGB_MATRIX_ENABLE = IS31FL3731
```C
RGB_MATRIX_ENABLE = IS31FL3731
```
Configure the hardware via your `config.h`:
// This is a 7-bit address, that gets left-shifted and bit 0
// set to 0 for write, 1 for read (as per I2C protocol)
// The address will vary depending on your wiring:
// 0b1110100 AD <-> GND
// 0b1110111 AD <-> VCC
// 0b1110101 AD <-> SCL
// 0b1110110 AD <-> SDA
#define DRIVER_ADDR_1 0b1110100
#define DRIVER_ADDR_2 0b1110110
```C
// This is a 7-bit address, that gets left-shifted and bit 0
// set to 0 for write, 1 for read (as per I2C protocol)
// The address will vary depending on your wiring:
// 0b1110100 AD <-> GND
// 0b1110111 AD <-> VCC
// 0b1110101 AD <-> SCL
// 0b1110110 AD <-> SDA
#define DRIVER_ADDR_1 0b1110100
#define DRIVER_ADDR_2 0b1110110
#define DRIVER_COUNT 2
#define DRIVER_1_LED_TOTAL 25
#define DRIVER_2_LED_TOTAL 24
#define DRIVER_LED_TOTAL DRIVER_1_LED_TOTAL + DRIVER_2_LED_TOTAL
#define DRIVER_COUNT 2
#define DRIVER_1_LED_TOTAL 25
#define DRIVER_2_LED_TOTAL 24
#define DRIVER_LED_TOTAL (DRIVER_1_LED_TOTAL + DRIVER_2_LED_TOTAL)
```
!> Note the parentheses, this is so when `DRIVER_LED_TOTAL` is used in code and expanded, the values are added together before any additional math is applied to them. As an example, `rand() % (DRIVER_1_LED_TOTAL + DRIVER_2_LED_TOTAL)` will give very different results than `rand() % DRIVER_1_LED_TOTAL + DRIVER_2_LED_TOTAL`.
Currently only 2 drivers are supported, but it would be trivial to support all 4 combinations.
Define these arrays listing all the LEDs in your `<keyboard>.c`:
const is31_led g_is31_leds[DRIVER_LED_TOTAL] = {
/* Refer to IS31 manual for these locations
* driver
* | R location
* | | G location
* | | | B location
* | | | | */
{0, C1_3, C2_3, C3_3},
....
}
```C
const is31_led g_is31_leds[DRIVER_LED_TOTAL] = {
/* Refer to IS31 manual for these locations
* driver
* | R location
* | | G location
* | | | B location
* | | | | */
{0, C1_3, C2_3, C3_3},
....
}
```
Where `Cx_y` is the location of the LED in the matrix defined by [the datasheet](http://www.issi.com/WW/pdf/31FL3731.pdf) and the header file `drivers/issi/is31fl3731.h`. The `driver` is the index of the driver you defined in your `config.h` (`0` or `1` right now).
### IS31FL3733
---
### IS31FL3733/IS31FL3737
!> For the IS31FL3737, replace all instances of `IS31FL3733` below with `IS31FL3737`.
There is basic support for addressable RGB matrix lighting with the I2C IS31FL3733 RGB controller. To enable it, add this to your `rules.mk`:
RGB_MATRIX_ENABLE = IS31FL3733
```C
RGB_MATRIX_ENABLE = IS31FL3733
```
Configure the hardware via your `config.h`:
// This is a 7-bit address, that gets left-shifted and bit 0
// set to 0 for write, 1 for read (as per I2C protocol)
// The address will vary depending on your wiring:
// 00 <-> GND
// 01 <-> SCL
// 10 <-> SDA
// 11 <-> VCC
// ADDR1 represents A1:A0 of the 7-bit address.
// ADDR2 represents A3:A2 of the 7-bit address.
// The result is: 0b101(ADDR2)(ADDR1)
#define DRIVER_ADDR_1 0b1010000
#define DRIVER_ADDR_2 0b1010000 // this is here for compliancy reasons.
```C
// This is a 7-bit address, that gets left-shifted and bit 0
// set to 0 for write, 1 for read (as per I2C protocol)
// The address will vary depending on your wiring:
// 00 <-> GND
// 01 <-> SCL
// 10 <-> SDA
// 11 <-> VCC
// ADDR1 represents A1:A0 of the 7-bit address.
// ADDR2 represents A3:A2 of the 7-bit address.
// The result is: 0b101(ADDR2)(ADDR1)
#define DRIVER_ADDR_1 0b1010000
#define DRIVER_ADDR_2 0b1010000 // this is here for compliancy reasons.
#define DRIVER_COUNT 1
#define DRIVER_1_LED_TOTAL 64
#define DRIVER_LED_TOTAL DRIVER_1_LED_TOTAL
#define DRIVER_COUNT 2
#define DRIVER_1_LED_TOTAL 64
#define DRIVER_LED_TOTAL DRIVER_1_LED_TOTAL
```
Currently only a single drivers is supported, but it would be trivial to support all 4 combinations. For now define `DRIVER_ADDR_2` as `DRIVER_ADDR_1`
Define these arrays listing all the LEDs in your `<keyboard>.c`:
const is31_led g_is31_leds[DRIVER_LED_TOTAL] = {
/* Refer to IS31 manual for these locations
* driver
* | R location
* | | G location
* | | | B location
* | | | | */
{0, B_1, A_1, C_1},
....
}
```C
const is31_led g_is31_leds[DRIVER_LED_TOTAL] = {
/* Refer to IS31 manual for these locations
* driver
* | R location
* | | G location
* | | | B location
* | | | | */
{0, B_1, A_1, C_1},
....
}
```
Where `X_Y` is the location of the LED in the matrix defined by [the datasheet](http://www.issi.com/WW/pdf/31FL3733.pdf) and the header file `drivers/issi/is31fl3733.h`. The `driver` is the index of the driver you defined in your `config.h` (Only `0` right now).
From this point forward the configuration is the same for all the drivers.
---
const rgb_led g_rgb_leds[DRIVER_LED_TOTAL] = {
/* {row | col << 4}
* | {x=0..224, y=0..64}
* | | modifier
* | | | */
{{0|(0<<4)}, {20.36*0, 21.33*0}, 1},
{{0|(1<<4)}, {20.36*1, 21.33*0}, 1},
....
}
### WS2812 (AVR only)
The format for the matrix position used in this array is `{row | (col << 4)}`. The `x` is between (inclusive) 0-224, and `y` is between (inclusive) 0-64. The easiest way to calculate these positions is:
There is basic support for addressable RGB matrix lighting with a WS2811/WS2812{a,b,c} addressable LED strand. To enable it, add this to your `rules.mk`:
x = 224 / ( NUMBER_OF_ROWS - 1 ) * ROW_POSITION
y = 64 / (NUMBER_OF_COLS - 1 ) * COL_POSITION
```C
RGB_MATRIX_ENABLE = WS2812
```
Where all variables are decimels/floats.
Configure the hardware via your `config.h`:
`modifier` is a boolean, whether or not a certain key is considered a modifier (used in some effects).
```C
// The pin connected to the data pin of the LEDs
#define RGB_DI_PIN D7
// The number of LEDs connected
#define DRIVER_LED_TOTAL 70
```
---
From this point forward the configuration is the same for all the drivers. The `led_config_t` struct provides a key electrical matrix to led index lookup table, what the physical position of each LED is on the board, and what type of key or usage the LED if the LED represents. Here is a brief example:
```C
const led_config_t g_led_config = { {
// Key Matrix to LED Index
{ 5, NO_LED, NO_LED, 0 },
{ NO_LED, NO_LED, NO_LED, NO_LED },
{ 4, NO_LED, NO_LED, 1 },
{ 3, NO_LED, NO_LED, 2 }
}, {
// LED Index to Physical Position
{ 188, 16 }, { 187, 48 }, { 149, 64 }, { 112, 64 }, { 37, 48 }, { 38, 16 }
}, {
// LED Index to Flag
1, 4, 4, 4, 4, 1
} };
```
The first part, `// Key Matrix to LED Index`, tells the system what key this LED represents by using the key's electrical matrix row & col. The second part, `// LED Index to Physical Position` represents the LED's physical `{ x, y }` position on the keyboard. The default expected range of values for `{ x, y }` is the inclusive range `{ 0..224, 0..64 }`. This default expected range is due to effects that calculate the center of the keyboard for their animations. The easiest way to calculate these positions is imagine your keyboard is a grid, and the top left of the keyboard represents `{ x, y }` coordinate `{ 0, 0 }` and the bottom right of your keyboard represents `{ 224, 64 }`. Using this as a basis, you can use the following formula to calculate the physical position:
```C
x = 224 / (NUMBER_OF_COLS - 1) * COL_POSITION
y = 64 / (NUMBER_OF_ROWS - 1) * ROW_POSITION
```
Where NUMBER_OF_COLS, NUMBER_OF_ROWS, COL_POSITION, & ROW_POSITION are all based on the physical layout of your keyboard, not the electrical layout.
As mentioned earlier, the center of the keyboard by default is expected to be `{ 112, 32 }`, but this can be changed if you want to more accurately calculate the LED's physical `{ x, y }` positions. Keyboard designers can implement `#define RGB_MATRIX_CENTER { 112, 32 }` in their config.h file with the new center point of the keyboard, or where they want it to be allowing more possibilities for the `{ x, y }` values. Do note that the maximum value for x or y is 255, and the recommended maximum is 224 as this gives animations runoff room before they reset.
`// LED Index to Flag` is a bitmask, whether or not a certain LEDs is of a certain type. It is recommended that LEDs are set to only 1 type.
## Flags
|Define |Description |
|------------------------------------|-------------------------------------------|
|`#define HAS_FLAGS(bits, flags)` |Returns true if `bits` has all `flags` set.|
|`#define HAS_ANY_FLAGS(bits, flags)`|Returns true if `bits` has any `flags` set.|
|`#define LED_FLAG_NONE 0x00` |If this LED has no flags. |
|`#define LED_FLAG_ALL 0xFF` |If this LED has all flags. |
|`#define LED_FLAG_MODIFIER 0x01` |If the Key for this LED is a modifier. |
|`#define LED_FLAG_UNDERGLOW 0x02` |If the LED is for underglow. |
|`#define LED_FLAG_KEYLIGHT 0x04` |If the LED is for key backlight. |
## Keycodes
All RGB keycodes are currently shared with the RGBLIGHT system:
* `RGB_TOG` - toggle
* `RGB_MOD` - cycle through modes
* `RGB_HUI` - increase hue
* `RGB_HUD` - decrease hue
* `RGB_SAI` - increase saturation
* `RGB_SAD` - decrease saturation
* `RGB_VAI` - increase value
* `RGB_VAD` - decrease value
* `RGB_SPI` - increase speed effect (no EEPROM support)
* `RGB_SPD` - decrease speed effect (no EEPROM support)
* `RGB_MODE_*` keycodes will generally work, but are not currently mapped to the correct effects for the RGB Matrix system
* `RGB_TOG` - toggle
* `RGB_MOD` - cycle through modes
* `RGB_HUI` - increase hue
* `RGB_HUD` - decrease hue
* `RGB_SAI` - increase saturation
* `RGB_SAD` - decrease saturation
* `RGB_VAI` - increase value
* `RGB_VAD` - decrease value
* `RGB_SPI` - increase speed effect (no EEPROM support)
* `RGB_SPD` - decrease speed effect (no EEPROM support)
* `RGB_MODE_*` keycodes will generally work, but are not currently mapped to the correct effects for the RGB Matrix system
## RGB Matrix Effects
These are the effects that are currently available:
All effects have been configured to support current configuration values (Hue, Saturation, Value, & Speed) unless otherwise noted below. These are the effects that are currently available:
```C
enum rgb_matrix_effects {
RGB_MATRIX_NONE = 0,
RGB_MATRIX_SOLID_COLOR = 1, // Static single hue, no speed support
RGB_MATRIX_ALPHAS_MODS, // Static dual hue, speed is hue for secondary hue
RGB_MATRIX_GRADIENT_UP_DOWN, // Static gradient top to bottom, speed controls how much gradient changes
RGB_MATRIX_BREATHING, // Single hue brightness cycling animation
RGB_MATRIX_BAND_SAT, // Single hue band fading saturation scrolling left to right
RGB_MATRIX_BAND_VAL, // Single hue band fading brightness scrolling left to right
RGB_MATRIX_BAND_PINWHEEL_SAT, // Single hue 3 blade spinning pinwheel fades saturation
RGB_MATRIX_BAND_PINWHEEL_VAL, // Single hue 3 blade spinning pinwheel fades brightness
RGB_MATRIX_BAND_SPIRAL_SAT, // Single hue spinning spiral fades saturation
RGB_MATRIX_BAND_SPIRAL_VAL, // Single hue spinning spiral fades brightness
RGB_MATRIX_CYCLE_ALL, // Full keyboard solid hue cycling through full gradient
RGB_MATRIX_CYCLE_LEFT_RIGHT, // Full gradient scrolling left to right
RGB_MATRIX_CYCLE_UP_DOWN, // Full gradient scrolling top to bottom
RGB_MATRIX_CYCLE_OUT_IN, // Full gradient scrolling out to in
RGB_MATRIX_CYCLE_OUT_IN_DUAL, // Full dual gradients scrolling out to in
RGB_MATRIX_RAINBOW_MOVING_CHEVRON, // Full gradent Chevron shapped scrolling left to right
RGB_MATRIX_CYCLE_PINWHEEL, // Full gradient spinning pinwheel around center of keyboard
RGB_MATRIX_CYCLE_SPIRAL, // Full gradient spinning spiral around center of keyboard
RGB_MATRIX_DUAL_BEACON, // Full gradient spinning around center of keyboard
RGB_MATRIX_RAINBOW_BEACON, // Full tighter gradient spinning around center of keyboard
RGB_MATRIX_RAINBOW_PINWHEELS, // Full dual gradients spinning two halfs of keyboard
RGB_MATRIX_RAINDROPS, // Randomly changes a single key's hue
RGB_MATRIX_JELLYBEAN_RAINDROPS, // Randomly changes a single key's hue and saturation
#if define(RGB_MATRIX_FRAMEBUFFER_EFFECTS)
RGB_MATRIX_TYPING_HEATMAP, // How hot is your WPM!
RGB_MATRIX_DIGITAL_RAIN, // That famous computer simulation
#endif
#if defined(RGB_MATRIX_KEYPRESSES) || defined(RGB_MATRIX_KEYRELEASES)
RGB_MATRIX_SOLID_REACTIVE_SIMPLE, // Pulses keys hit to hue & value then fades value out
RGB_MATRIX_SOLID_REACTIVE, // Static single hue, pulses keys hit to shifted hue then fades to current hue
RGB_MATRIX_SOLID_REACTIVE_WIDE // Hue & value pulse near a single key hit then fades value out
RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE // Hue & value pulse near multiple key hits then fades value out
RGB_MATRIX_SOLID_REACTIVE_CROSS // Hue & value pulse the same column and row of a single key hit then fades value out
RGB_MATRIX_SOLID_REACTIVE_MULTICROSS // Hue & value pulse the same column and row of multiple key hits then fades value out
RGB_MATRIX_SOLID_REACTIVE_NEXUS // Hue & value pulse away on the same column and row of a single key hit then fades value out
RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS // Hue & value pulse away on the same column and row of multiple key hits then fades value out
RGB_MATRIX_SPLASH, // Full gradient & value pulse away from a single key hit then fades value out
RGB_MATRIX_MULTISPLASH, // Full gradient & value pulse away from multiple key hits then fades value out
RGB_MATRIX_SOLID_SPLASH, // Hue & value pulse away from a single key hit then fades value out
RGB_MATRIX_SOLID_MULTISPLASH, // Hue & value pulse away from multiple key hits then fades value out
#endif
RGB_MATRIX_EFFECT_MAX
};
```
enum rgb_matrix_effects {
RGB_MATRIX_SOLID_COLOR = 1,
RGB_MATRIX_ALPHAS_MODS,
RGB_MATRIX_DUAL_BEACON,
RGB_MATRIX_GRADIENT_UP_DOWN,
RGB_MATRIX_RAINDROPS,
RGB_MATRIX_CYCLE_ALL,
RGB_MATRIX_CYCLE_LEFT_RIGHT,
RGB_MATRIX_CYCLE_UP_DOWN,
RGB_MATRIX_RAINBOW_BEACON,
RGB_MATRIX_RAINBOW_PINWHEELS,
RGB_MATRIX_RAINBOW_MOVING_CHEVRON,
RGB_MATRIX_JELLYBEAN_RAINDROPS,
RGB_MATRIX_DIGITAL_RAIN,
#ifdef RGB_MATRIX_KEYPRESSES
RGB_MATRIX_SOLID_REACTIVE,
RGB_MATRIX_SPLASH,
RGB_MATRIX_MULTISPLASH,
RGB_MATRIX_SOLID_SPLASH,
RGB_MATRIX_SOLID_MULTISPLASH,
#endif
RGB_MATRIX_EFFECT_MAX
};
You can disable a single effect by defining `DISABLE_[EFFECT_NAME]` in your `config.h`:
|Define |Description |
|---------------------------------------------------|--------------------------------------------|
|`#define DISABLE_RGB_MATRIX_ALPHAS_MODS` |Disables `RGB_MATRIX_ALPHAS_MODS` |
|`#define DISABLE_RGB_MATRIX_DUAL_BEACON` |Disables `RGB_MATRIX_DUAL_BEACON` |
|`#define DISABLE_RGB_MATRIX_GRADIENT_UP_DOWN` |Disables `RGB_MATRIX_GRADIENT_UP_DOWN` |
|`#define DISABLE_RGB_MATRIX_RAINDROPS` |Disables `RGB_MATRIX_RAINDROPS` |
|`#define DISABLE_RGB_MATRIX_CYCLE_ALL` |Disables `RGB_MATRIX_CYCLE_ALL` |
|`#define DISABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT` |Disables `RGB_MATRIX_CYCLE_LEFT_RIGHT` |
|`#define DISABLE_RGB_MATRIX_CYCLE_UP_DOWN` |Disables `RGB_MATRIX_CYCLE_UP_DOWN` |
|`#define DISABLE_RGB_MATRIX_RAINBOW_BEACON` |Disables `RGB_MATRIX_RAINBOW_BEACON` |
|`#define DISABLE_RGB_MATRIX_RAINBOW_PINWHEELS` |Disables `RGB_MATRIX_RAINBOW_PINWHEELS` |
|`#define DISABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON`|Disables `RGB_MATRIX_RAINBOW_MOVING_CHEVRON`|
|`#define DISABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS` |Disables `RGB_MATRIX_JELLYBEAN_RAINDROPS` |
|`#define DISABLE_RGB_MATRIX_DIGITAL_RAIN` |Disables `RGB_MATRIX_DIGITAL_RAIN` |
|`#define DISABLE_RGB_MATRIX_SOLID_REACTIVE` |Disables `RGB_MATRIX_SOLID_REACTIVE` |
|`#define DISABLE_RGB_MATRIX_SPLASH` |Disables `RGB_MATRIX_SPLASH` |
|`#define DISABLE_RGB_MATRIX_MULTISPLASH` |Disables `RGB_MATRIX_MULTISPLASH` |
|`#define DISABLE_RGB_MATRIX_SOLID_SPLASH` |Disables `RGB_MATRIX_SOLID_SPLASH` |
|`#define DISABLE_RGB_MATRIX_SOLID_MULTISPLASH` |Disables `RGB_MATRIX_SOLID_MULTISPLASH` |
|Define |Description |
|-------------------------------------------------------|-----------------------------------------------|
|`#define DISABLE_RGB_MATRIX_ALPHAS_MODS` |Disables `RGB_MATRIX_ALPHAS_MODS` |
|`#define DISABLE_RGB_MATRIX_GRADIENT_UP_DOWN` |Disables `RGB_MATRIX_GRADIENT_UP_DOWN` |
|`#define DISABLE_RGB_MATRIX_BREATHING` |Disables `RGB_MATRIX_BREATHING` |
|`#define DISABLE_RGB_MATRIX_BAND_SAT` |Disables `RGB_MATRIX_BAND_SAT` |
|`#define DISABLE_RGB_MATRIX_BAND_VAL` |Disables `RGB_MATRIX_BAND_VAL` |
|`#define DISABLE_RGB_MATRIX_BAND_PINWHEEL_SAT` |Disables `RGB_MATRIX_BAND_PINWHEEL_SAT` |
|`#define DISABLE_RGB_MATRIX_BAND_PINWHEEL_VAL` |Disables `RGB_MATRIX_BAND_PINWHEEL_VAL` |
|`#define DISABLE_RGB_MATRIX_BAND_SPIRAL_SAT` |Disables `RGB_MATRIX_BAND_SPIRAL_SAT` |
|`#define DISABLE_RGB_MATRIX_BAND_SPIRAL_VAL` |Disables `RGB_MATRIX_BAND_SPIRAL_VAL` |
|`#define DISABLE_RGB_MATRIX_CYCLE_ALL` |Disables `RGB_MATRIX_CYCLE_ALL` |
|`#define DISABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT` |Disables `RGB_MATRIX_CYCLE_LEFT_RIGHT` |
|`#define DISABLE_RGB_MATRIX_CYCLE_UP_DOWN` |Disables `RGB_MATRIX_CYCLE_UP_DOWN` |
|`#define DISABLE_RGB_MATRIX_CYCLE_OUT_IN` |Disables `RGB_MATRIX_CYCLE_OUT_IN` |
|`#define DISABLE_RGB_MATRIX_CYCLE_OUT_IN_DUAL` |Disables `RGB_MATRIX_CYCLE_OUT_IN_DUAL` |
|`#define DISABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON` |Disables `RGB_MATRIX_RAINBOW_MOVING_CHEVRON` |
|`#define DISABLE_RGB_MATRIX_DUAL_BEACON` |Disables `RGB_MATRIX_DUAL_BEACON` |
|`#define DISABLE_RGB_MATRIX_CYCLE_PINWHEEL` |Disables `RGB_MATRIX_CYCLE_PINWHEEL` |
|`#define DISABLE_RGB_MATRIX_CYCLE_SPIRAL` |Disables `RGB_MATRIX_CYCLE_SPIRAL` |
|`#define DISABLE_RGB_MATRIX_RAINBOW_BEACON` |Disables `RGB_MATRIX_RAINBOW_BEACON` |
|`#define DISABLE_RGB_MATRIX_RAINBOW_PINWHEELS` |Disables `RGB_MATRIX_RAINBOW_PINWHEELS` |
|`#define DISABLE_RGB_MATRIX_RAINDROPS` |Disables `RGB_MATRIX_RAINDROPS` |
|`#define DISABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS` |Disables `RGB_MATRIX_JELLYBEAN_RAINDROPS` |
|`#define DISABLE_RGB_MATRIX_TYPING_HEATMAP` |Disables `RGB_MATRIX_TYPING_HEATMAP` |
|`#define DISABLE_RGB_MATRIX_DIGITAL_RAIN` |Disables `RGB_MATRIX_DIGITAL_RAIN` |
|`#define DISABLE_RGB_MATRIX_SOLID_REACTIVE` |Disables `RGB_MATRIX_SOLID_REACTIVE` |
|`#define DISABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE` |Disables `RGB_MATRIX_SOLID_REACTIVE_SIMPLE` |
|`#define DISABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE` |Disables `RGB_MATRIX_SOLID_REACTIVE_WIDE` |
|`#define DISABLE_RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE` |Disables `RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE` |
|`#define DISABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS` |Disables `RGB_MATRIX_SOLID_REACTIVE_CROSS` |
|`#define DISABLE_RGB_MATRIX_SOLID_REACTIVE_MULTICROSS` |Disables `RGB_MATRIX_SOLID_REACTIVE_MULTICROSS`|
|`#define DISABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS` |Disables `RGB_MATRIX_SOLID_REACTIVE_NEXUS` |
|`#define DISABLE_RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS` |Disables `RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS`|
|`#define DISABLE_RGB_MATRIX_SPLASH` |Disables `RGB_MATRIX_SPLASH` |
|`#define DISABLE_RGB_MATRIX_MULTISPLASH` |Disables `RGB_MATRIX_MULTISPLASH` |
|`#define DISABLE_RGB_MATRIX_SOLID_SPLASH` |Disables `RGB_MATRIX_SOLID_SPLASH` |
|`#define DISABLE_RGB_MATRIX_SOLID_MULTISPLASH` |Disables `RGB_MATRIX_SOLID_MULTISPLASH` |
## Custom layer effects
## Custom RGB Matrix Effects
Custom layer effects can be done by defining this in your `<keyboard>.c`:
By setting `RGB_MATRIX_CUSTOM_USER` (and/or `RGB_MATRIX_CUSTOM_KB`) in `rule.mk`, new effects can be defined directly from userspace, without having to edit any QMK core files.
void rgb_matrix_indicators_kb(void) {
rgb_matrix_set_color(index, red, green, blue);
}
To declare new effects, create a new `rgb_matrix_user/kb.inc` that looks something like this:
`rgb_matrix_user.inc` should go in the root of the keymap directory.
`rgb_matrix_kb.inc` should go in the root of the keyboard directory.
```C
// !!! DO NOT ADD #pragma once !!! //
// Step 1.
// Declare custom effects using the RGB_MATRIX_EFFECT macro
// (note the lack of semicolon after the macro!)
RGB_MATRIX_EFFECT(my_cool_effect)
RGB_MATRIX_EFFECT(my_cool_effect2)
// Step 2.
// Define effects inside the `RGB_MATRIX_CUSTOM_EFFECT_IMPLS` ifdef block
#ifdef RGB_MATRIX_CUSTOM_EFFECT_IMPLS
// e.g: A simple effect, self-contained within a single method
static bool my_cool_effect(effect_params_t* params) {
RGB_MATRIX_USE_LIMITS(led_min, led_max);
for (uint8_t i = led_min; i < led_max; i++) {
rgb_matrix_set_color(i, 0xff, 0xff, 0x00);
}
return led_max < DRIVER_LED_TOTAL;
}
// e.g: A more complex effect, relying on external methods and state, with
// dedicated init and run methods
static uint8_t some_global_state;
static void my_cool_effect2_complex_init(effect_params_t* params) {
some_global_state = 1;
}
static bool my_cool_effect2_complex_run(effect_params_t* params) {
RGB_MATRIX_USE_LIMITS(led_min, led_max);
for (uint8_t i = led_min; i < led_max; i++) {
rgb_matrix_set_color(i, 0xff, some_global_state++, 0xff);
}
return led_max < DRIVER_LED_TOTAL;
}
static bool my_cool_effect2(effect_params_t* params) {
if (params->init) my_cool_effect2_complex_init(params);
return my_cool_effect2_complex_run(params);
}
#endif // RGB_MATRIX_CUSTOM_EFFECT_IMPLS
```
For inspiration and examples, check out the built-in effects under `quantum/rgb_matrix_animation/`
## Colors
These are shorthands to popular colors. The `RGB` ones can be passed to the `setrgb` functions, while the `HSV` ones to the `sethsv` functions.
|RGB |HSV |
|-------------------|-------------------|
|`RGB_WHITE` |`HSV_WHITE` |
|`RGB_RED` |`HSV_RED` |
|`RGB_CORAL` |`HSV_CORAL` |
|`RGB_ORANGE` |`HSV_ORANGE` |
|`RGB_GOLDENROD` |`HSV_GOLDENROD` |
|`RGB_GOLD` |`HSV_GOLD` |
|`RGB_YELLOW` |`HSV_YELLOW` |
|`RGB_CHARTREUSE` |`HSV_CHARTREUSE` |
|`RGB_GREEN` |`HSV_GREEN` |
|`RGB_SPRINGGREEN` |`HSV_SPRINGGREEN` |
|`RGB_TURQUOISE` |`HSV_TURQUOISE` |
|`RGB_TEAL` |`HSV_TEAL` |
|`RGB_CYAN` |`HSV_CYAN` |
|`RGB_AZURE` |`HSV_AZURE` |
|`RGB_BLUE` |`HSV_BLUE` |
|`RGB_PURPLE` |`HSV_PURPLE` |
|`RGB_MAGENTA` |`HSV_MAGENTA` |
|`RGB_PINK` |`HSV_PINK` |
These are defined in [`rgblight_list.h`](https://github.com/qmk/qmk_firmware/blob/master/quantum/rgblight_list.h). Feel free to add to this list!
A similar function works in the keymap as `rgb_matrix_indicators_user`.
## Additional `config.h` Options
#define RGB_MATRIX_KEYPRESSES // reacts to keypresses (will slow down matrix scan by a lot)
#define RGB_MATRIX_KEYRELEASES // reacts to keyreleases (not recommened)
#define RGB_DISABLE_AFTER_TIMEOUT 0 // number of ticks to wait until disabling effects
#define RGB_DISABLE_WHEN_USB_SUSPENDED false // turn off effects when suspended
#define RGB_MATRIX_SKIP_FRAMES 1 // number of frames to skip when displaying animations (0 is full effect) if not defined defaults to 1
#define RGB_MATRIX_MAXIMUM_BRIGHTNESS 200 // limits maximum brightness of LEDs to 200 out of 255. If not defined maximum brightness is set to 255
```C
#define RGB_MATRIX_KEYPRESSES // reacts to 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_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_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_MAXIMUM_BRIGHTNESS 200 // limits maximum brightness of LEDs to 200 out of 255. If not defined maximum brightness is set to 255
```
## EEPROM storage
The EEPROM for it is currently shared with the RGBLIGHT system (it's generally assumed only one RGB would be used at a time), but could be configured to use its own 32bit address with:
#define EECONFIG_RGB_MATRIX (uint32_t *)16
```C
#define EECONFIG_RGB_MATRIX (uint32_t *)28
```
Where `16` is an unused index from `eeconfig.h`.
Where `28` is an unused index from `eeconfig.h`.
## Suspended state
To use the suspend feature, add this to your `<keyboard>.c`:
void suspend_power_down_kb(void)
{
rgb_matrix_set_suspend_state(true);
}
```C
void suspend_power_down_kb(void)
{
rgb_matrix_set_suspend_state(true);
}
void suspend_wakeup_init_kb(void)
{
rgb_matrix_set_suspend_state(false);
}
void suspend_wakeup_init_kb(void)
{
rgb_matrix_set_suspend_state(false);
}
```

View File

@@ -23,10 +23,11 @@ RGBLIGHT_ENABLE = yes
At minimum you must define the data pin your LED strip is connected to, and the number of LEDs in the strip, in your `config.h`. If your keyboard has onboard RGB LEDs, and you are simply creating a keymap, you usually won't need to modify these.
|Define |Description |
|------------|---------------------------------------------|
|`RGB_DI_PIN`|The pin connected to the data pin of the LEDs|
|`RGBLED_NUM`|The number of LEDs connected |
|Define |Description |
|---------------|---------------------------------------------------------------------------------------------------------|
|`RGB_DI_PIN` |The pin connected to the data pin of the LEDs |
|`RGBLED_NUM` |The number of LEDs connected |
|`RGBLED_SPLIT` |(Optional) For split keyboards, the number of LEDs connected on each half directly wired to `RGB_DI_PIN` |
Then you should be able to use the keycodes below to change the RGB lighting to your liking.
@@ -36,9 +37,9 @@ QMK uses [Hue, Saturation, and Value](https://en.wikipedia.org/wiki/HSL_and_HSV)
<img src="gitbook/images/color-wheel.svg" alt="HSV Color Wheel" width="250"/>
Changing the **Hue** cycles around the circle.
Changing the **Saturation** moves between the inner and outer sections of the wheel, affecting the intensity of the color.
Changing the **Value** sets the overall brightness.
Changing the **Hue** cycles around the circle.<br>
Changing the **Saturation** moves between the inner and outer sections of the wheel, affecting the intensity of the color.<br>
Changing the **Value** sets the overall brightness.<br>
## Keycodes
@@ -74,9 +75,9 @@ Your RGB lighting can be configured by placing these `#define`s in your `config.
|`RGBLIGHT_VAL_STEP` |`17` |The number of steps to increment the brightness by |
|`RGBLIGHT_LIMIT_VAL` |`255` |The maximum brightness level |
|`RGBLIGHT_SLEEP` |*Not defined*|If defined, the RGB lighting will be switched off when the host goes to sleep|
|`RGBLIGHT_SPLIT` |*Not defined*|If defined, synchronization functionality for split keyboards is added|
## Animations
## Effects and Animations
Not only can this lighting be whatever color you want,
if `RGBLIGHT_EFFECT_xxxx` or `RGBLIGHT_ANIMATIONS` is defined, you also have a number of animation modes at your disposal:
@@ -98,32 +99,59 @@ Check out [this video](https://youtube.com/watch?v=VKrpPAHlisY) for a demonstrat
Note: For versions older than 0.6.117, The mode numbers were written directly. In `quantum/rgblight.h` there is a contrast table between the old mode number and the current symbol.
The following options can be used to tweak the various animations:
### Effect and Animation Toggles
Use these defines to add or remove animations from the firmware. When you are running low on flash space, it can be helpful to disable animations you are not using.
|Define |Default |Description |
|------------------------------------|-------------|-------------------------------------------------------------------------------------|
|`RGBLIGHT_EFFECT_BREATHING` |*Not defined*|If defined, enable breathing animation mode. |
|`RGBLIGHT_EFFECT_RAINBOW_MOOD` |*Not defined*|If defined, enable rainbow mood animation mode. |
|`RGBLIGHT_EFFECT_RAINBOW_SWIRL` |*Not defined*|If defined, enable rainbow swirl animation mode. |
|`RGBLIGHT_EFFECT_SNAKE` |*Not defined*|If defined, enable snake animation mode. |
|`RGBLIGHT_EFFECT_KNIGHT` |*Not defined*|If defined, enable knight animation mode. |
|`RGBLIGHT_EFFECT_CHRISTMAS` |*Not defined*|If defined, enable christmas animation mode. |
|`RGBLIGHT_EFFECT_STATIC_GRADIENT` |*Not defined*|If defined, enable static gradient mode. |
|`RGBLIGHT_EFFECT_RGB_TEST` |*Not defined*|If defined, enable RGB test animation mode. |
|`RGBLIGHT_EFFECT_ALTERNATING` |*Not defined*|If defined, enable alternating animation mode. |
|`RGBLIGHT_ANIMATIONS` |*Not defined*|If defined, enables all additional animation modes |
|`RGBLIGHT_EFFECT_BREATHE_CENTER` |`1.85` |Used to calculate the curve for the breathing animation. Valid values are 1.0 to 2.7 |
|`RGBLIGHT_ANIMATIONS` |*Not defined*|Enable all additional animation modes. |
|`RGBLIGHT_EFFECT_ALTERNATING` |*Not defined*|Enable alternating animation mode. |
|`RGBLIGHT_EFFECT_BREATHING` |*Not defined*|Enable breathing animation mode. |
|`RGBLIGHT_EFFECT_CHRISTMAS` |*Not defined*|Enable christmas animation mode. |
|`RGBLIGHT_EFFECT_KNIGHT` |*Not defined*|Enable knight animation mode. |
|`RGBLIGHT_EFFECT_RAINBOW_MOOD` |*Not defined*|Enable rainbow mood animation mode. |
|`RGBLIGHT_EFFECT_RAINBOW_SWIRL` |*Not defined*|Enable rainbow swirl animation mode. |
|`RGBLIGHT_EFFECT_RGB_TEST` |*Not defined*|Enable RGB test animation mode. |
|`RGBLIGHT_EFFECT_SNAKE` |*Not defined*|Enable snake animation mode. |
|`RGBLIGHT_EFFECT_STATIC_GRADIENT` |*Not defined*|Enable static gradient mode. |
### Effect and Animation Settings
The following options are used to tweak the various animations:
|Define |Default |Description |
|------------------------------------|-------------|-------------------------------------------------------------------------------------|
|`RGBLIGHT_EFFECT_BREATHE_CENTER` |*Not defined*|If defined, used to calculate the curve for the breathing animation. Valid values are 1.0 to 2.7 |
|`RGBLIGHT_EFFECT_BREATHE_MAX` |`255` |The maximum brightness for the breathing mode. Valid values are 1 to 255 |
|`RGBLIGHT_EFFECT_SNAKE_LENGTH` |`4` |The number of LEDs to light up for the "Snake" animation |
|`RGBLIGHT_EFFECT_KNIGHT_LENGTH` |`3` |The number of LEDs to light up for the "Knight" animation |
|`RGBLIGHT_EFFECT_KNIGHT_OFFSET` |`0` |The number of LEDs to start the "Knight" animation from the start of the strip by |
|`RGBLIGHT_EFFECT_KNIGHT_LED_NUM` |`RGBLED_NUM` |The number of LEDs to have the "Knight" animation travel |
|`RGBLIGHT_EFFECT_CHRISTMAS_INTERVAL`|`1000` |How long to wait between light changes for the "Christmas" animation, in milliseconds|
|`RGBLIGHT_EFFECT_CHRISTMAS_STEP` |`2` |The number of LEDs to group the red/green colors by for the "Christmas" animation |
|`RGBLIGHT_RAINBOW_SWIRL_RANGE` |`360` |Range adjustment for the rainbow swirl effect to get different swirls |
|`RGBLIGHT_EFFECT_KNIGHT_LED_NUM` |`RGBLED_NUM` |The number of LEDs to have the "Knight" animation travel |
|`RGBLIGHT_EFFECT_KNIGHT_LENGTH` |`3` |The number of LEDs to light up for the "Knight" animation |
|`RGBLIGHT_EFFECT_KNIGHT_OFFSET` |`0` |The number of LEDs to start the "Knight" animation from the start of the strip by |
|`RGBLIGHT_RAINBOW_SWIRL_RANGE` |`255` |Range adjustment for the rainbow swirl effect to get different swirls |
|`RGBLIGHT_EFFECT_SNAKE_LENGTH` |`4` |The number of LEDs to light up for the "Snake" animation |
### Example Usage to Reduce Memory Footprint
1. Remove `RGBLIGHT_ANIMATIONS` from `config.h`.
1. Selectively add the animations you want to enable. The following would enable two animations and save about 4KiB:
```diff
#undef RGBLED_NUM
-#define RGBLIGHT_ANIMATIONS
+#define RGBLIGHT_EFFECT_STATIC_GRADIENT
+#define RGBLIGHT_EFFECT_RAINBOW_SWIRL
#define RGBLED_NUM 12
#define RGBLIGHT_HUE_STEP 8
#define RGBLIGHT_SAT_STEP 8
```
### Animation Speed
You can also modify the speeds that the different modes animate at:
Here is a quick demo on Youtube (with NPKC KC60) (https://www.youtube.com/watch?v=VKrpPAHlisY).
```c
// How long (in milliseconds) to wait between animation steps for each of the "Solid color breathing" animations
const uint8_t RGBLED_BREATHING_INTERVALS[] PROGMEM = {30, 20, 10, 5};
@@ -141,52 +169,216 @@ const uint8_t RGBLED_SNAKE_INTERVALS[] PROGMEM = {100, 50, 20};
const uint8_t RGBLED_KNIGHT_INTERVALS[] PROGMEM = {127, 63, 31};
// These control which hues are selected for each of the "Static gradient" modes
const uint16_t RGBLED_GRADIENT_RANGES[] PROGMEM = {360, 240, 180, 120, 90};
const uint8_t RGBLED_GRADIENT_RANGES[] PROGMEM = {255, 170, 127, 85, 64};
```
## 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:
|Function |Description |
|--------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------|
|`rgblight_enable()` |Turn LEDs on, based on their previous state |
|`rgblight_enable_noeeprom()` |Turn LEDs on, based on their previous state (not written to EEPROM) |
|`rgblight_disable()` |Turn LEDs off |
|`rgblight_disable_noeeprom()` |Turn LEDs off (not written to EEPROM) |
|`rgblight_mode(x)` |Set the mode, if RGB animations are enabled |
|`rgblight_mode_noeeprom(x)` |Set the mode, if RGB animations are enabled (not written to EEPROM) |
|`rgblight_setrgb(r, g, b)` |Set all LEDs to the given RGB value where `r`/`g`/`b` are between 0 and 255 (not written to EEPROM) |
|`rgblight_setrgb_at(r, g, b, led)` |Set a single LED to the given RGB value, where `r`/`g`/`b` are between 0 and 255 and `led` is between 0 and `RGBLED_NUM` (not written to EEPROM) |
|`rgblight_setrgb_range(r, g, b, start, end)`|Set a continuous range of LEDs to the given RGB value, where `r`/`g`/`b` are between 0 and 255 and `start`(included) and `stop`(excluded) are between 0 and `RGBLED_NUM` (not written to EEPROM)|
|`rgblight_setrgb_master(r, g, b)` |Set the LEDs on the master side to the given RGB value, where `r`/`g`/`b` are between 0 and 255 (not written to EEPROM) |
|`rgblight_setrgb_slave(r, g, b)` |Set the LEDs on the slave side to the given RGB value, where `r`/`g`/`b` are between 0 and 255 (not written to EEPROM) |
|`rgblight_sethsv(h, s, v)` |Set all LEDs to the given HSV value where `h` is between 0 and 360 and `s`/`v` are between 0 and 255 |
|`rgblight_sethsv_noeeprom(h, s, v)` |Set all LEDs to the given HSV value where `h` is between 0 and 360 and `s`/`v` are between 0 and 255 (not written to EEPROM) |
|`rgblight_sethsv_at(h, s, v, led)` |Set a single LED to the given HSV value, where `h` is between 0 and 360, `s`/`v` are between 0 and 255, and `led` is between 0 and `RGBLED_NUM` (not written to EEPROM)|
|`rgblight_sethsv_range(h, s, v, start, end)`|Set a continuous range of LEDs to the given HSV value, where `h` is between 0 and 360, `s`/`v` are between 0 and 255, and `start`(included) and `stop`(excluded) are between 0 and `RGBLED_NUM` (not written to EEPROM)|
|`rgblight_sethsv_master(h, s, v)` |Set the LEDs on the master side to the given HSV value, where `h` is between 0 and 360, `s`/`v` are between 0 and 255 (not written to EEPROM) |
|`rgblight_sethsv_slave(h, s, v)` |Set the LEDs on the slave side to the given HSV value, where `h` is between 0 and 360, `s`/`v` are between 0 and 255 (not written to EEPROM) |
|`rgblight_toggle()` |Toggle all LEDs between on and off |
|`rgblight_toggle_noeeprom()` |Toggle all LEDs between on and off (not written to EEPROM) |
|`rgblight_step()` |Change the mode to the next RGB animation in the list of enabled RGB animations |
|`rgblight_step_noeeprom()` |Change the mode to the next RGB animation in the list of enabled RGB animations (not written to EEPROM) |
|`rgblight_step_reverse()` |Change the mode to the previous RGB animation in the list of enabled RGB animations |
|`rgblight_step_reverse_noeeprom()` |Change the mode to the previous RGB animation in the list of enabled RGB animations (not written to EEPROM) |
|`rgblight_increase_hue()` |Increase the hue for all LEDs. This wraps around at maximum hue |
|`rgblight_increase_hue_noeeprom()` |Increase the hue for all LEDs. This wraps around at maximum hue (not written to EEPROM) |
|`rgblight_decrease_hue()` |Decrease the hue for all LEDs. This wraps around at minimum hue |
|`rgblight_decrease_hue_noeeprom()` |Decrease the hue for all LEDs. This wraps around at minimum hue (not written to EEPROM) |
|`rgblight_increase_sat()` |Increase the saturation for all LEDs. This wraps around at maximum saturation |
|`rgblight_increase_sat_noeeprom()` |Increase the saturation for all LEDs. This wraps around at maximum saturation (not written to EEPROM) |
|`rgblight_decrease_sat()` |Decrease the saturation for all LEDs. This wraps around at minimum saturation |
|`rgblight_decrease_sat_noeeprom()` |Decrease the saturation for all LEDs. This wraps around at minimum saturation (not written to EEPROM) |
|`rgblight_increase_val()` |Increase the value for all LEDs. This wraps around at maximum value |
|`rgblight_increase_val_noeeprom()` |Increase the value for all LEDs. This wraps around at maximum value (not written to EEPROM) |
|`rgblight_decrease_val()` |Decrease the value for all LEDs. This wraps around at minimum value |
|`rgblight_decrease_val_noeeprom()` |Decrease the value for all LEDs. This wraps around at minimum value (not written to EEPROM) |
### Utility Functions
|Function |Description |
|--------------------------------------------|-------------------------------------------------------------------|
|`sethsv(hue, sat, val, ledbuf)` |Set ledbuf to the given HSV value |
|`sethsv_raw(hue, sat, val, ledbuf)` |Set ledbuf to the given HSV value without RGBLIGHT_LIMIT_VAL check |
|`setrgb(r, g, b, ledbuf)` |Set ledbuf to the given RGB value where `r`/`g`/`b` |
Additionally, [`rgblight_list.h`](https://github.com/qmk/qmk_firmware/blob/master/quantum/rgblight_list.h) defines several predefined shortcuts for various colors. Feel free to add to this list!
### Low level Functions
|Function |Description |
|--------------------------------------------|-------------------------------------------|
|`rgblight_set()` |Flash out led buffers to LEDs |
|`rgblight_set_clipping_range(pos, num)` |Set clipping Range. see [Clipping Range](#clipping-range) |
Example:
```c
sethsv(HSV_WHITE, (LED_TYPE *)&led[0]); // led 0
sethsv(HSV_RED, (LED_TYPE *)&led[1]); // led 1
sethsv(HSV_GREEN, (LED_TYPE *)&led[2]); // led 2
rgblight_set(); // Utility functions do not call rgblight_set() automatically, so they need to be called explicitly.
```
### Effects and Animations Functions
#### effect range setting
|Function |Description |
|--------------------------------------------|------------------|
|`rgblight_set_effect_range(pos, num)` |Set Effects Range |
#### direct operation
|Function |Description |
|--------------------------------------------|-------------|
|`rgblight_setrgb_at(r, g, b, index)` |Set a single LED to the given RGB value, where `r`/`g`/`b` are between 0 and 255 and `index` is between 0 and `RGBLED_NUM` (not written to EEPROM) |
|`rgblight_sethsv_at(h, s, v, index)` |Set a single LED to the given HSV value, where `h`/`s`/`v` are between 0 and 255, and `index` is between 0 and `RGBLED_NUM` (not written to EEPROM) |
|`rgblight_setrgb_range(r, g, b, start, end)`|Set a continuous range of LEDs to the given RGB value, where `r`/`g`/`b` are between 0 and 255 and `start`(included) and `stop`(excluded) are between 0 and `RGBLED_NUM` (not written to EEPROM)|
|`rgblight_sethsv_range(h, s, v, start, end)`|Set a continuous range of LEDs to the given HSV value, where `h`/`s`/`v` are between 0 and 255, and `start`(included) and `stop`(excluded) are between 0 and `RGBLED_NUM` (not written to EEPROM)|
|`rgblight_setrgb(r, g, b)` |Set effect range LEDs to the given RGB value where `r`/`g`/`b` are between 0 and 255 (not written to EEPROM) |
|`rgblight_setrgb_master(r, g, b)` |Set the LEDs on the master side to the given RGB value, where `r`/`g`/`b` are between 0 and 255 (not written to EEPROM) |
|`rgblight_setrgb_slave(r, g, b)` |Set the LEDs on the slave side to the given RGB value, where `r`/`g`/`b` are between 0 and 255 (not written to EEPROM) |
|`rgblight_sethsv_master(h, s, v)` |Set the LEDs on the master side to the given HSV value, where `h`/`s`/`v` are between 0 and 255 (not written to EEPROM) |
|`rgblight_sethsv_slave(h, s, v)` |Set the LEDs on the slave side to the given HSV value, where `h`/`s`/`v` are between 0 and 255 (not written to EEPROM) |
Example:
```c
rgblight_sethsv(HSV_WHITE, 0); // led 0
rgblight_sethsv(HSV_RED, 1); // led 1
rgblight_sethsv(HSV_GREEN, 2); // led 2
// The above functions automatically calls rgblight_set(), so there is no need to call it explicitly.
// Note that it is inefficient to call repeatedly.
```
#### effect mode change
|Function |Description |
|--------------------------------------------|-------------|
|`rgblight_mode(x)` |Set the mode, if RGB animations are enabled |
|`rgblight_mode_noeeprom(x)` |Set the mode, if RGB animations are enabled (not written to EEPROM) |
|`rgblight_step()` |Change the mode to the next RGB animation in the list of enabled RGB animations |
|`rgblight_step_noeeprom()` |Change the mode to the next RGB animation in the list of enabled RGB animations (not written to EEPROM) |
|`rgblight_step_reverse()` |Change the mode to the previous RGB animation in the list of enabled RGB animations |
|`rgblight_step_reverse_noeeprom()` |Change the mode to the previous RGB animation in the list of enabled RGB animations (not written to EEPROM) |
#### effects mode disable/enable
|Function |Description |
|--------------------------------------------|-------------|
|`rgblight_toggle()` |Toggle effect range LEDs between on and off |
|`rgblight_toggle_noeeprom()` |Toggle effect range LEDs between on and off (not written to EEPROM) |
|`rgblight_enable()` |Turn effect range LEDs on, based on their previous state |
|`rgblight_enable_noeeprom()` |Turn effect range LEDs on, based on their previous state (not written to EEPROM) |
|`rgblight_disable()` |Turn effect range LEDs off |
|`rgblight_disable_noeeprom()` |Turn effect range LEDs off (not written to EEPROM) |
#### hue, sat, val change
|Function |Description |
|--------------------------------------------|-------------|
|`rgblight_increase_hue()` |Increase the hue for effect range LEDs. This wraps around at maximum hue |
|`rgblight_increase_hue_noeeprom()` |Increase the hue for effect range LEDs. This wraps around at maximum hue (not written to EEPROM) |
|`rgblight_decrease_hue()` |Decrease the hue for effect range LEDs. This wraps around at minimum hue |
|`rgblight_decrease_hue_noeeprom()` |Decrease the hue for effect range LEDs. This wraps around at minimum hue (not written to EEPROM) |
|`rgblight_increase_sat()` |Increase the saturation for effect range LEDs. This wraps around at maximum saturation |
|`rgblight_increase_sat_noeeprom()` |Increase the saturation for effect range LEDs. This wraps around at maximum saturation (not written to EEPROM) |
|`rgblight_decrease_sat()` |Decrease the saturation for effect range LEDs. This wraps around at minimum saturation |
|`rgblight_decrease_sat_noeeprom()` |Decrease the saturation for effect range LEDs. This wraps around at minimum saturation (not written to EEPROM) |
|`rgblight_increase_val()` |Increase the value for effect range LEDs. This wraps around at maximum value |
|`rgblight_increase_val_noeeprom()` |Increase the value for effect range LEDs. This wraps around at maximum value (not written to EEPROM) |
|`rgblight_decrease_val()` |Decrease the value for effect range LEDs. This wraps around at minimum value |
|`rgblight_decrease_val_noeeprom()` |Decrease the value for effect range LEDs. This wraps around at minimum value (not written to EEPROM) |
|`rgblight_sethsv(h, s, v)` |Set effect range LEDs to the given HSV value where `h`/`s`/`v` are between 0 and 255 |
|`rgblight_sethsv_noeeprom(h, s, v)` |Set effect range LEDs to the given HSV value where `h`/`s`/`v` are between 0 and 255 (not written to EEPROM) |
#### query
|Function |Description |
|-----------------------|-----------------|
|`rgblight_get_mode()` |Get current mode |
|`rgblight_get_hue()` |Get current hue |
|`rgblight_get_sat()` |Get current sat |
|`rgblight_get_val()` |Get current val |
## Colors
These are shorthands to popular colors. The `RGB` ones can be passed to the `setrgb` functions, while the `HSV` ones to the `sethsv` functions.
|RGB |HSV |
|-------------------|-------------------|
|`RGB_WHITE` |`HSV_WHITE` |
|`RGB_RED` |`HSV_RED` |
|`RGB_CORAL` |`HSV_CORAL` |
|`RGB_ORANGE` |`HSV_ORANGE` |
|`RGB_GOLDENROD` |`HSV_GOLDENROD` |
|`RGB_GOLD` |`HSV_GOLD` |
|`RGB_YELLOW` |`HSV_YELLOW` |
|`RGB_CHARTREUSE` |`HSV_CHARTREUSE` |
|`RGB_GREEN` |`HSV_GREEN` |
|`RGB_SPRINGGREEN` |`HSV_SPRINGGREEN` |
|`RGB_TURQUOISE` |`HSV_TURQUOISE` |
|`RGB_TEAL` |`HSV_TEAL` |
|`RGB_CYAN` |`HSV_CYAN` |
|`RGB_AZURE` |`HSV_AZURE` |
|`RGB_BLUE` |`HSV_BLUE` |
|`RGB_PURPLE` |`HSV_PURPLE` |
|`RGB_MAGENTA` |`HSV_MAGENTA` |
|`RGB_PINK` |`HSV_PINK` |
```c
rgblight_setrgb(RGB_ORANGE);
rgblight_sethsv_noeeprom(HSV_GREEN);
rgblight_setrgb_at(RGB_GOLD, 3);
rgblight_sethsv_range(HSV_WHITE, 0, 6);
```
These are defined in [`rgblight_list.h`](https://github.com/qmk/qmk_firmware/blob/master/quantum/rgblight_list.h). Feel free to add to this list!
## Changing the order of the LEDs
If you want to make the logical order of LEDs different from the electrical connection order, you can do this by defining the `RGBLIGHT_LED_MAP` macro in your `config.h`.
Normally, the contents of the LED buffer are output to the LEDs in the same order.
<img src="https://user-images.githubusercontent.com/2170248/55743718-01866c80-5a6e-11e9-8134-25419928327a.JPG" alt="simple dicrect" width="50%"/>
By defining `RGBLIGHT_LED_MAP` as in the example below, you can specify the LED with addressing in reverse order of the electrical connection order.
```c
// config.h
#define RGBLED_NUM 4
#define RGBLIGHT_LED_MAP { 3, 2, 1, 0 }
```
<img src="https://user-images.githubusercontent.com/2170248/55743725-08ad7a80-5a6e-11e9-83ed-126a2b0209fc.JPG" alt="simple mapped" width="50%"/>
For keyboards that use the RGB LEDs as a backlight for each key, you can also define it as in the example below.
```c
// config.h
#define RGBLED_NUM 30
/* RGB LED Conversion macro from physical array to electric array */
#define LED_LAYOUT( \
L00, L01, L02, L03, L04, L05, \
L10, L11, L12, L13, L14, L15, \
L20, L21, L22, L23, L24, L25, \
L30, L31, L32, L33, L34, L35, \
L40, L41, L42, L43, L44, L45 ) \
{ \
L05, L04, L03, L02, L01, L00, \
L10, L11, L12, L13, L14, L15, \
L25, L24, L23, L22, L21, L20, \
L30, L31, L32, L33, L34, L35, \
L46, L45, L44, L43, L42, L41 \
}
/* RGB LED logical order map */
/* Top->Bottom, Right->Left */
#define RGBLIGHT_LED_MAP LED_LAYOUT( \
25, 20, 15, 10, 5, 0, \
26, 21, 16, 11, 6, 1, \
27, 22, 17, 12, 7, 2, \
28, 23, 18, 13, 8, 3, \
29, 24, 19, 14, 9, 4 )
```
## Clipping Range
Using the `rgblight_set_clipping_range()` function, you can prepare more buffers than the actual number of LEDs, and output some of the buffers to the LEDs. This is useful if you want the split keyboard to treat left and right LEDs as logically contiguous.
You can set the Clipping Range by executing the following code.
```c
// some soruce
rgblight_set_clipping_range(3, 4);
```
<img src="https://user-images.githubusercontent.com/2170248/55743785-2bd82a00-5a6e-11e9-9d4b-1b4ffaf4932b.JPG" alt="clip direct" width="70%"/>
In addition to setting the Clipping Range, you can use `RGBLIGHT_LED_MAP` together.
```c
// config.h
#define RGBLED_NUM 8
#define RGBLIGHT_LED_MAP { 7, 6, 5, 4, 3, 2, 1, 0 }
// some soruce
rgblight_set_clipping_range(3, 4);
```
<img src="https://user-images.githubusercontent.com/2170248/55743747-119e4c00-5a6e-11e9-91e5-013203ffae8a.JPG" alt="clip mapped" width="70%"/>
## Hardware Modification

View File

@@ -0,0 +1,60 @@
# Space Cadet: The Future, Built In
Steve Losh described the [Space Cadet Shift](http://stevelosh.com/blog/2012/10/a-modern-space-cadet/) quite well. Essentially, when you tap Left Shift on its own, you get an opening parenthesis; tap Right Shift on its own and you get the closing one. When held, the Shift keys function as normal. Yes, it's as cool as it sounds, and now even cooler supporting Control and Alt as well!
## Usage
Firstly, in your keymap, do one of the following:
- Replace the Left Shift key with `KC_LSPO` (Left Shift, Parenthesis Open), and Right Shift with `KC_RSPC` (Right Shift, Parenthesis Close).
- Replace the Left Control key with `KC_LCPO` (Left Control, Parenthesis Open), and Right Control with `KC_RCPC` (Right Control, Parenthesis Close).
- Replace the Left Alt key with `KC_LAPO` (Left Alt, Parenthesis Open), and Right Alt with `KC_RAPC` (Right Alt, Parenthesis Close).
- Replace any Shift key in your keymap with `KC_SFTENT` (Right Shift, Enter).
## Keycodes
|Keycode |Description |
|-----------|-------------------------------------------|
|`KC_LSPO` |Left Shift when held, `(` when tapped |
|`KC_RSPC` |Right Shift when held, `)` when tapped |
|`KC_LCPO` |Left Control when held, `(` when tapped |
|`KC_RCPC` |Right Control when held, `)` when tapped |
|`KC_LAPO` |Left Alt when held, `(` when tapped |
|`KC_RAPC` |Right Alt when held, `)` when tapped |
|`KC_SFTENT`|Right Shift when held, Enter when tapped |
## Caveats
Space Cadet's functionality can conflict with the default Command functionality when both Shift keys are held at the same time. See the [Command feature](feature_command.md) for info on how to change it, or make sure that Command is disabled in your `rules.mk` with:
```make
COMMAND_ENABLE = no
```
## Configuration
By default Space Cadet assumes a US ANSI layout, but if your layout uses different keys for parentheses, you can redefine them in your `config.h`. In addition, you can redefine the modifier to send on tap, or even send no modifier at all. The new configuration defines bundle all options up into a single define of 3 key codes in this order: the `Modifier` when held or when used with other keys, the `Tap Modifer` sent when tapped (no modifier if `KC_TRNS`), finally the `Keycode` sent when tapped. Now keep in mind, mods from other keys will still apply to the `Keycode` if say `KC_RSFT` is held while tapping `KC_LSPO` key with `KC_TRNS` as the `Tap Modifer`.
|Define |Default |Description |
|----------------|-------------------------------|---------------------------------------------------------------------------------|
|`LSPO_KEYS` |`KC_LSFT, LSPO_MOD, LSPO_KEY` |Send `KC_LSFT` when held, the mod and key defined by `LSPO_MOD` and `LSPO_KEY`. |
|`RSPC_KEYS` |`KC_RSFT, RSPC_MOD, RSPC_KEY` |Send `KC_RSFT` when held, the mod and key defined by `RSPC_MOD` and `RSPC_KEY`. |
|`LCPO_KEYS` |`KC_LCTL, KC_LSFT, KC_9` |Send `KC_LCTL` when held, the mod `KC_LSFT` with the key `KC_9` when tapped. |
|`RCPC_KEYS` |`KC_RCTL, KC_RSFT, KC_0` |Send `KC_RCTL` when held, the mod `KC_RSFT` with the key `KC_0` when tapped. |
|`LAPO_KEYS` |`KC_LALT, KC_LSFT, KC_9` |Send `KC_LALT` when held, the mod `KC_LSFT` with the key `KC_9` when tapped. |
|`RAPC_KEYS` |`KC_RALT, KC_RSFT, KC_0` |Send `KC_RALT` when held, the mod `KC_RSFT` with the key `KC_0` when tapped. |
|`SFTENT_KEYS` |`KC_RSFT, KC_TRNS, SFTENT_KEY` |Send `KC_RSFT` when held, no mod with the key `SFTENT_KEY` when tapped. |
|`SPACE_CADET_MODIFIER_CARRYOVER` |*Not defined* |Store current modifiers before the hold mod is pressed and use them with the tap mod and keycode. Useful for when you frequently release a modifier before triggering Space Cadet. |
## Obsolete Configuration
These defines are used in the above defines internally to support backwards compatibility, so you may continue to use them, however the above defines open up a larger range of flexibility than before. As an example, say you want to not send any modifier when you tap just `KC_LSPO`, with the old defines you had an all or nothing choice of using the `DISABLE_SPACE_CADET_MODIFIER` define. Now you can define that key as: `#define LSPO_KEYS KC_LSFT, KC_TRNS, KC_9`. This tells the system to set Left Shift if held or used with other keys, then on tap send no modifier (transparent) with the `KC_9`.
|Define |Default |Description |
|------------------------------|-------------|------------------------------------------------------------------|
|`LSPO_KEY` |`KC_9` |The keycode to send when Left Shift is tapped |
|`RSPC_KEY` |`KC_0` |The keycode to send when Right Shift is tapped |
|`LSPO_MOD` |`KC_LSFT` |The modifier to apply to `LSPO_KEY` |
|`RSPC_MOD` |`KC_RSFT` |The modifier to apply to `RSPC_KEY` |
|`SFTENT_KEY` |`KC_ENT` |The keycode to send when the Shift key is tapped |
|`DISABLE_SPACE_CADET_MODIFIER`|*Not defined*|If defined, prevent the Space Cadet from applying a modifier |

View File

@@ -1,37 +0,0 @@
# Space Cadet Shift: The Future, Built In
Steve Losh described the [Space Cadet Shift](http://stevelosh.com/blog/2012/10/a-modern-space-cadet/) quite well. Essentially, when you tap Left Shift on its own, you get an opening parenthesis; tap Right Shift on its own and you get the closing one. When held, the Shift keys function as normal. Yes, it's as cool as it sounds.
## Usage
Replace the Left Shift key in your keymap with `KC_LSPO` (Left Shift, Parenthesis Open), and Right Shift with `KC_RSPC` (Right Shift, Parenthesis Close).
## Keycodes
|Keycode |Description |
|---------|--------------------------------------|
|`KC_LSPO`|Left Shift when held, `(` when tapped |
|`KC_RSPC`|Right Shift when held, `)` when tapped|
## Caveats
Space Cadet's functionality can conflict with the default Command functionality when both Shift keys are held at the same time. Make sure that Command is disabled in your `rules.mk` with:
```make
COMMAND_ENABLE = no
```
## Configuration
By default Space Cadet assumes a US ANSI layout, but if your layout uses different keys for parentheses, you can redefine them in your `config.h`.
You can also disable the rollover, allowing you to use the opposite Shift key to cancel the Space Cadet state in the event of an erroneous press, instead of emitting a pair of parentheses when the keys are released.
Also, by default, the Space Cadet applies modifiers LSPO_MOD and RSPC_MOD to keys defined by LSPO_KEY and RSPC_KEY. You can override this behavior by redefining those variables in your `config.h`. You can also prevent the Space Cadet to apply a modifier by defining DISABLE_SPACE_CADET_MODIFIER in your `config.h`.
|Define |Default |Description |
|------------------------------|-------------|--------------------------------------------------------------------------------|
|`LSPO_KEY` |`KC_9` |The keycode to send when Left Shift is tapped |
|`RSPC_KEY` |`KC_0` |The keycode to send when Right Shift is tapped |
|`LSPO_MOD` |`KC_LSFT` |The keycode to send when Left Shift is tapped |
|`RSPC_MOD` |`KC_RSFT` |The keycode to send when Right Shift is tapped |
|`DISABLE_SPACE_CADET_ROLLOVER`|*Not defined*|If defined, use the opposite Shift key to cancel Space Cadet |
|`DISABLE_SPACE_CADET_MODIFIER`|*Not defined*|If defined, prevent the Space Cadet to apply a modifier to LSPO_KEY and RSPC_KEY|

View File

@@ -1,31 +0,0 @@
# Space Cadet Shift Enter
Based on the [Space Cadet Shift](feature_space_cadet_shift.md) feature. Tap the Shift key on its own, and it behaves like Enter. When held, the Shift functions as normal.
## Usage
Replace any Shift key in your keymap with `KC_SFTENT` (Shift, Enter), and you're done.
## Keycodes
|Keycode |Description |
|-----------|----------------------------------------|
|`KC_SFTENT`|Right Shift when held, Enter when tapped|
## Caveats
As with Space Cadet Shift, this feature may conflict with Command, so it should be disabled in your `rules.mk` with:
```make
COMMAND_ENABLE = no
```
This feature also uses the same timers as Space Cadet Shift, so using them in tandem may produce strange results.
## Configuration
By default Space Cadet assumes a US ANSI layout, but if you'd like to use a different key for Enter, you can redefine it in your `config.h`:
|Define |Default |Description |
|------------|--------|------------------------------------------------|
|`SFTENT_KEY`|`KC_ENT`|The keycode to send when the Shift key is tapped|

View File

@@ -314,3 +314,86 @@ qk_tap_dance_action_t tap_dance_actions[] = {
And then simply use `TD(X_CTL)` anywhere in your keymap.
If you want to implement this in your userspace, then you may want to check out how [DanielGGordon](https://github.com/qmk/qmk_firmware/tree/master/users/gordon) has implemented this in their userspace.
### Example 5: Using tap dance for advanced mod-tap and layer-tap keys
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:
```c
// tapdance keycodes
enum td_keycodes {
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
typedef enum {
SINGLE_TAP,
SINGLE_HOLD,
DOUBLE_SINGLE_TAP
} td_state_t;
// create a global instance of the tapdance state type
static td_state_t td_state;
// declare your tapdance functions:
// function to determine the current tapdance state
int cur_dance (qk_tap_dance_state_t *state);
// `finished` and `reset` functions for each tapdance keycode
void altlp_finished (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:
```c
// determine the tapdance state to return
int cur_dance (qk_tap_dance_state_t *state) {
if (state->count == 1) {
if (state->interrupted || !state->pressed) { return SINGLE_TAP; }
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) {
td_state = cur_dance(state);
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) {
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[] = {
[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)`.

View File

@@ -1,48 +1,78 @@
# Unicode Support
There are three Unicode keymap definition methods available in QMK:
Unicode characters can be input straight from your keyboard! There are some limitations, however.
## `UNICODE_ENABLE`
QMK has three different methods for enabling Unicode input and defining keycodes:
Supports Unicode up to `0x7FFF`. This covers characters for most modern languages, as well as symbols, but it doesn't cover emoji. The keycode function is `UC(c)` in the keymap file, where _c_ is the code point's number (preferably hexadecimal, up to 4 digits long). For example: `UC(0x45B)`, `UC(0x30C4)`.
## Basic Unicode
## `UNICODEMAP_ENABLE`
This method supports Unicode code points up to `0x7FFF`. This covers characters for most modern languages, as well as symbols, but it doesn't cover emoji.
Supports Unicode up to `0x10FFFF` (all possible code points). You need to maintain a separate mapping table `const uint32_t PROGMEM unicode_map[] = {...}` in your keymap file. The keycode function is `X(i)`, where _i_ is an array index into the mapping table. The table may contain at most 1024 entries.
Add the following to your `rules.mk`:
You may want to have an enum to make referencing easier. So, you could add something like this to your keymap file:
```make
UNICODE_ENABLE = yes
```
Then add `UC(c)` keycodes to your keymap, where _c_ is the code point (preferably in hexadecimal, up to 4 digits long). For example: `UC(0x45B)`, `UC(0x30C4)`.
## Unicode Map
This method supports all possible code points (up to `0x10FFFF`); however, you need to maintain a separate mapping table in your keymap file, which may contain at most 16384 entries.
Add the following to your `rules.mk`:
```make
UNICODEMAP_ENABLE = yes
```
Then add `X(i)` keycodes to your keymap, where _i_ is an array index into the mapping table:
```c
enum unicode_names {
BANG,
IRONY,
SNEK,
BANG,
IRONY,
SNEK
};
const uint32_t PROGMEM unicode_map[] = {
[BANG] = 0x203D, // ‽
[IRONY] = 0x2E2E, // ⸮
[SNEK] = 0x1F40D, // 🐍
[BANG] = 0x203D, // ‽
[IRONY] = 0x2E2E, // ⸮
[SNEK] = 0x1F40D, // 🐍
};
```
Then you can use `X(BANG)` etc. in your keymap.
Then you can use `X(BANG)`, `X(SNEK)` etc. in your keymap.
## `UCIS_ENABLE`
### Lower and Upper Case
Supports Unicode up to `0x10FFFF` (all possible code points). As with `UNICODEMAP`, you need to maintain a mapping table in your keymap file. However, there are no built-in keycodes for this feature — you will have to add a keycode or function that calls `qk_ucis_start()`. Once this function's been called, you can type the corresponding mnemonic for your character, then hit Space or Enter to complete it, or Esc to cancel. If the mnemonic matches an entry in your table, the typed text will automatically be erased and the corresponding Unicode character inserted.
Characters often come in lower and upper case pairs, such as å and Å. To make inputting these characters easier, you can use `XP(i, j)` in your keymap, where _i_ and _j_ are the mapping table indices of the lower and upper case character, respectively. If you're holding down Shift or have Caps Lock turned on when you press the key, the second (upper case) character will be inserted; otherwise, the first (lower case) version will appear.
For instance, you would define a table like this in your keymap file:
This is most useful when creating a keymap for an international layout with special characters. Instead of having to put the lower and upper case versions of a character on separate keys, you can have them both on the same key by using `XP()`. This helps blend Unicode keys in with regular alphas.
Due to keycode size constraints, _i_ and _j_ can each only refer to one of the first 128 characters in your `unicode_map`. In other words, 0 ≤ _i_ ≤ 127 and 0 ≤ _j_ ≤ 127. This is enough for most use cases, but if you'd like to customize the index calculation, you can override the [`unicodemap_index()`](https://github.com/qmk/qmk_firmware/blob/71f640d47ee12c862c798e1f56392853c7b1c1a8/quantum/process_keycode/process_unicodemap.c#L40) function. This also allows you to, say, check Ctrl instead of Shift/Caps.
## UCIS
This method also supports all possible code points. As with the Unicode Map method, you need to maintain a mapping table in your keymap file. However, there are no built-in keycodes for this feature — you have to create a custom keycode or function that invokes this functionality.
Add the following to your `rules.mk`:
```make
UCIS_ENABLE = yes
```
Then define a table like this in your keymap file:
```c
const qk_ucis_symbol_t ucis_symbol_table[] = UCIS_TABLE(
UCIS_SYM("poop", 0x1F4A9), // 💩
UCIS_SYM("rofl", 0x1F923), // 🤣
UCIS_SYM("kiss", 0x1F619) // 😙
UCIS_SYM("poop", 0x1F4A9), // 💩
UCIS_SYM("rofl", 0x1F923), // 🤣
UCIS_SYM("kiss", 0x1F619) // 😙
);
```
You call `qk_ucis_start()`, then type "rofl" and hit Enter. QMK should erase the "rofl" text and input the laughing emoji.
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.
### Customization
@@ -60,26 +90,29 @@ Unicode input in QMK works by inputting a sequence of characters to the OS, sort
The following input modes are available:
* **`UC_OSX`**: Mac OS X built-in Unicode hex input. Supports code points up to `0xFFFF` (`0x10FFFF` with `UNICODEMAP`).
* **`UC_OSX`**: macOS built-in Unicode hex input. Supports code points up to `0xFFFF` (`0x10FFFF` with Unicode Map).
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`), but this can be changed by defining [`UNICODE_OSX_KEY`](#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_OSX`](#input-key-configuration) with another keycode.
!> Using the _Unicode Hex Input_ input source may disable some Option based shortcuts, such as Option + Left Arrow and Option + Right Arrow.
* **`UC_LNX`**: Linux built-in IBus Unicode input. Supports code points up to `0x10FFFF` (all possible code points).
Enabled by default and works almost anywhere on IBus-enabled distros. Without IBus, this mode works under GTK apps, but rarely anywhere else.
By default, this mode uses Ctrl+Shift+U (`LCTL(LSFT(KC_U))`) to start Unicode input, but this can be changed by defining [`UNICODE_KEY_LNX`](#input-key-configuration) with another keycode. This might be required for IBus versions ≥1.5.15, where Ctrl+Shift+U behavior is consolidated into Ctrl+Shift+E.
* **`UC_WIN`**: _(not recommended)_ Windows built-in hex numpad Unicode input. Supports code points up to `0xFFFF`.
To enable, create a registry key under `HKEY_CURRENT_USER\Control Panel\Input Method\EnableHexNumpad` of type `REG_SZ` called `EnableHexNumpad` and set its value to `1`. This can be done from the Command Prompt by running `reg add "HKCU\Control Panel\Input Method" -v EnableHexNumpad -t REG_SZ -d 1` with administrator privileges. Afterwards, reboot.
To enable, create a registry key under `HKEY_CURRENT_USER\Control Panel\Input Method\EnableHexNumpad` of type `REG_SZ` called `EnableHexNumpad` and set its value to `1`. This can be done from the Command Prompt by running `reg add "HKCU\Control Panel\Input Method" -v EnableHexNumpad -t REG_SZ -d 1` with administrator privileges. Reboot afterwards.
This mode is not recommended because of reliability and compatibility issues; use the `UC_WINC` mode instead.
* **`UC_BSD`**: _(non implemented)_ Unicode input under BSD. Not implemented at this time. If you're a BSD user and want to help add support for it, please [open an issue on GitHub](https://github.com/qmk/qmk_firmware/issues).
* **`UC_WINC`**: Windows Unicode input using [WinCompose](https://github.com/samhocevar/wincompose). As of v0.8.2, supports code points up to `0xFFFFF` (all currently assigned code points).
* **`UC_WINC`**: Windows Unicode input using [WinCompose](https://github.com/samhocevar/wincompose). As of v0.9.0, supports code points up to `0x10FFFF` (all possible code points).
To enable, install the [latest release](https://github.com/samhocevar/wincompose/releases/latest). Once installed, WinCompose will automatically run on startup. Works reliably under all version of Windows supported by the app.
By default, this mode uses the right Alt key (`KC_RALT`), but this can be changed in the WinCompose settings and by defining [`UNICODE_WINC_KEY`](#input-key-configuration) with another keycode.
By default, this mode uses right Alt (`KC_RALT`) as the Compose key, but this can be changed in the WinCompose settings and by defining [`UNICODE_KEY_WINC`](#input-key-configuration) with another keycode.
### Switching Input Modes
@@ -87,21 +120,21 @@ There are two ways to set the input mode for Unicode: by keycode or by function.
You can switch the input mode at any time by using one of the following keycodes. The easiest way is to add the ones you use to your keymap.
|Keycode |Alias |Input mode |Description |
|-----------------------|---------|-------------|-----------------------------------------|
|`UNICODE_MODE_FORWARD` |`UC_MOD` | |Cycles forwards through the available modes. [(Disabled by default)](#input-method-cycling)|
|`UNICODE_MODE_REVERSE` |`UC_RMOD`| |Cycles forwards through the available modes. [(Disabled by default)](#input-method-cycling)|
|`UNICODE_MODE_OSX` |`UC_M_OS`|`UC_OSX` |Switch to Mac OS X input. |
|`UNICODE_MODE_LNX` |`UC_M_LN`|`UC_LNX` |Switch to Linux input. |
|`UNICODE_MODE_WIN` |`UC_M_WI`|`UC_WIN` |Switch to Windows input. |
|`UNICODE_MODE_BSD` |`UC_M_BS`|`UC_BSD` |Switch to BSD input (not implemented). |
|`UNICODE_MODE_WINC` |`UC_M_WC`|`UC_WINC` |Switch to Windows input using WinCompose.|
|Keycode |Alias |Input Mode |Description |
|----------------------|---------|------------|--------------------------------------------------------------|
|`UNICODE_MODE_FORWARD`|`UC_MOD` |Next in list|[Cycle](#input-mode-cycling) through selected modes |
|`UNICODE_MODE_REVERSE`|`UC_RMOD`|Prev in list|[Cycle](#input-mode-cycling) through selected modes in reverse|
|`UNICODE_MODE_OSX` |`UC_M_OS`|`UC_OSX` |Switch to macOS input |
|`UNICODE_MODE_LNX` |`UC_M_LN`|`UC_LNX` |Switch to Linux input |
|`UNICODE_MODE_WIN` |`UC_M_WI`|`UC_WIN` |Switch to Windows input |
|`UNICODE_MODE_BSD` |`UC_M_BS`|`UC_BSD` |Switch to BSD input (not implemented) |
|`UNICODE_MODE_WINC` |`UC_M_WC`|`UC_WINC` |Switch to Windows input using WinCompose |
You can also switch the input mode by calling `set_unicode_input_mode(x)` in your code, where _x_ is one of the above input mode constants (e.g. `UC_LNX`). Since the function only needs to be called once, it's recommended that you do it in `eeconfig_init_user` (or a similar function). For example:
You can also switch the input mode by calling `set_unicode_input_mode(x)` in your code, where _x_ is one of the above input mode constants (e.g. `UC_LNX`). Since the function only needs to be called once, it's recommended that you do it in `eeconfig_init_user()` (or a similar function). For example:
```c
void eeconfig_init_user(void) {
set_unicode_input_mode(UC_LNX);
set_unicode_input_mode(UC_LNX);
}
```
@@ -121,35 +154,45 @@ For instance, you can add these definitions to your `config.h` file:
### Additional Customization
Because Unicode is such a large and variable feature, there are a number of options that you can customize to work better on your system.
Because Unicode is a large and versatile feature, there are a number of options you can customize to make it work better on your system.
#### Start and Finish input functions
#### Start and Finish Input Functions
The functions for starting and finishing Unicode input on your platform can be overridden locally. Possible uses include customizing input mode behavior if you don't use the default keys, or adding extra visual/audio feedback to Unicode input.
* `void unicode_input_start(void)` This sends the initial sequence that tells your platform to enter Unicode input mode. For example, it presses Ctrl+Shift+U on Linux and holds the Option key on Mac.
* `void unicode_input_start(void)` This sends the initial sequence that tells your platform to enter Unicode input mode. For example, it presses Ctrl+Shift+U on Linux and holds the Option key on macOS.
* `void unicode_input_finish(void)` This is called to exit Unicode input mode, for example by pressing Space or releasing the Option key.
You can find the default implementations of these functions in [`process_unicode_common.c`](https://github.com/qmk/qmk_firmware/blob/master/quantum/process_keycode/process_unicode_common.c).
#### Input Key Configuration
Additionally, you can customize the keys used to trigger the unicode input for macOS and WinCompose by adding defines to your `config.h`
You can customize the keys used to trigger Unicode input for macOS, Linux and WinCompose by adding corresponding defines to your `config.h`. The default values match the platforms' default settings, so you shouldn't need to change this unless Unicode input isn't working, or you want to use a different key (e.g. in order to free up left or right Alt).
|Define |Type |Default |Example |
|------------------|----------|------------------|-------------------------------------------|
|`UNICODE_KEY_OSX` |`uint8_t` |`KC_LALT` |`#define UNICODE_KEY_OSX KC_RALT` |
|`UNICODE_KEY_LNX` |`uint16_t`|`LCTL(LSFT(KC_U))`|`#define UNICODE_KEY_LNX LCTL(LSFT(KC_E))`|
|`UNICODE_KEY_WINC`|`uint8_t` |`KC_RALT` |`#define UNICODE_KEY_WINC KC_RGUI` |
#### Input Mode Cycling
You can choose which input modes are available for cycling through. By default, this is disabled. If you want to enable it, limiting it to just the modes you use makes sense. Note that the values in the list are comma-delimited.
```c
#define UNICODE_OSX_KEY KC_LALT
#define UNICODE_WINC_KEY KC_RALT
#define UNICODE_SELECTED_MODES UC_OSX, UC_LNX, UC_WIN, UC_WINC
```
#### Input Method Cycling
You can cycle through the selected modes by using the `UC_MOD`/`UC_RMOD` keycodes, or by calling `cycle_unicode_input_mode(offset)` in your code (`offset` is how many modes to move forward by, so +1 corresponds to `UC_MOD`).
Also, you can choose which input methods are availble for cycling through. By default, this is disabled. But if you want to enabled it, then limiting it to just those modes makes sense. Note that `UNICODE_SELECTED_MODES` define is comma delimited.
By default, when the keyboard boots, it will initialize the input mode to the last one you used. You can disable this and make it start with the first mode in the list every time by adding the following to your `config.h`:
```c
#define UNICODE_SELECTED_MODES UC_OSX, UC_LNX, UC_WIN, UC_BSD, UC_WINC
#define UNICODE_CYCLE_PERSIST false
```
!> Using `UNICODE_SELECTED_MODES` means you don't have to initially set the input mode in `matrix_init_user()` (or a similar function); the Unicode system will do that for you on startup. This has the added benefit of avoiding unnecessary writes to EEPROM.
## `send_unicode_hex_string`
To type multiple characters for things like (ノಠ痊ಠ)ノ彡┻━┻, you can use `send_unicode_hex_string()` much like `SEND_STRING()` except you would use hex values separate by spaces.
@@ -183,7 +226,7 @@ AutoHotkey inserts the Text right of `Send, ` when this combination is pressed.
### US International
If you enable the US International layout on the system, it will use punctuation to accent the characters.
If you enable the US International layout on the system, it will use punctuation to accent the characters.
For instance, typing "`a" will result in à.

View File

@@ -110,7 +110,7 @@ QMK has a bunch of [functions](custom_quantum_functions.md) that have [`_quantum
However, you can actually add support for keymap version, so that you can use it in both your userspace and your keymap!
For instance, lets looks at the `layer_state_set_user` function. Lets enable the [Tri Layer State](ref_functions.md#olkb-tri-layers) functionalitly to all of our boards, and then still have your `keymap.c` still able to use this functionality.
For instance, let's look at the `layer_state_set_user()` function. You can enable the [Tri Layer State](ref_functions.md#olkb-tri-layers) functionality on all of your boards, while also retaining the Tri Layer functionality in your `keymap.c` files.
In your `<name.c>` file, you'd want to add this:
```c
@@ -201,27 +201,51 @@ bool process_record_keymap(uint16_t keycode, keyrecord_t *record) {
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
switch (keycode) {
case KC_MAKE:
if (!record->event.pressed) {
SEND_STRING("make " QMK_KEYBOARD ":" QMK_KEYMAP
#if (defined(BOOTLOADER_DFU) || defined(BOOTLOADER_LUFA_DFU) || defined(BOOTLOADER_QMK_DFU))
":dfu "
#elif defined(BOOTLOADER_HALFKAY)
":teensy "
#elif defined(BOOTLOADER_CATERINA)
":avrdude "
#endif
SS_TAP(X_ENTER));
}
return false;
break;
case KC_MAKE: // Compiles the firmware, and adds the flash command based on keyboard bootloader
if (!record->event.pressed) {
uint8_t temp_mod = get_mods();
uint8_t temp_osm = get_oneshot_mods();
clear_mods(); clear_oneshot_mods();
SEND_STRING("make " QMK_KEYBOARD ":" QMK_KEYMAP);
#ifndef FLASH_BOOTLOADER
if ( (temp_mod | temp_osm) & MOD_MASK_SHIFT )
#endif
{ //
#if defined(__arm__) // only run for ARM boards
SEND_STRING(":dfu-util");
#elif defined(BOOTLOADER_DFU) // only run for DFU boards
SEND_STRING(":dfu");
#elif defined(BOOTLOADER_HALFKAY) // only run for teensy boards
SEND_STRING(":teensy");
#elif defined(BOOTLOADER_CATERINA) // only run for Pro Micros
SEND_STRING(":avrdude");
#endif // bootloader options
}
if ( (temp_mod | temp_osm) & MOD_MASK_CTRL) {
SEND_STRING(" -j8 --output-sync");
}
SEND_STRING(SS_TAP(X_ENTER));
set_mods(temp_mod);
}
break;
}
return process_record_keymap(keycode, record);
}
```
For boards that may not have a shift button (such as on a macro pad), we need a way to always include the bootloader option. To do that, add the following to the `rules.mk` in your userspace folder:
```make
ifeq ($(strip $(FLASH_BOOTLOADER)), yes)
OPT_DEFS += -DFLASH_BOOTLOADER
endif
```
This will add a new `KC_MAKE` keycode that can be used in any of your keymaps. And this keycode will output `make <keyboard>:<keymap>`, making frequent compiling easier. And this will work with any keyboard and any keymap as it will output the current boards info, so that you don't have to type this out every time.
Additionally, this should flash the newly compiled firmware automatically, using the correct utility, based on the bootloader settings (or default to just generating the HEX file). However, it should be noted that this may not work on all systems. AVRDUDE doesn't work on WSL, namely (and will dump the HEX in the ".build" folder instead).
Also, holding `shift` will add the appropriate flashing command (`:dfu`, `:teensy`, `:avrdude`, `:dfu-util`) for a majority of keyboards. Holding `control` will add some commands that will speed up compiling time by processing multiple files at once.
And for the boards that lack a shift key, or that you want to always attempt the flashing part, you can add `FLASH_BOOTLOADER = yes` to the `rules.mk` of that keymap.
?> This should flash the newly compiled firmware automatically, using the correct utility, based on the bootloader settings (or default to just generating the HEX file). However, it should be noted that this may not work on all systems. AVRDUDE doesn't work on WSL, namely. And this doesn't support BootloadHID or mdloader.

30
docs/feature_velocikey.md Normal file
View File

@@ -0,0 +1,30 @@
# Velocikey
Velocikey is a feature that lets you control the speed of lighting effects (like the Rainbow Swirl effect) with the speed of your typing. The faster you type, the faster the lights will go!
## Usage
For Velocikey to take effect, there are two steps. First, when compiling your keyboard, you'll need to set `VELOCIKEY_ENABLE=yes` in `rules.mk`, e.g.:
```
BOOTMAGIC_ENABLE = no
MOUSEKEY_ENABLE = no
STENO_ENABLE = no
EXTRAKEY_ENABLE = yes
VELOCIKEY_ENABLE = yes
```
Then, while using your keyboard, you need to also turn it on with the VLK_TOG keycode, which toggles the feature on and off.
The following light effects will all be controlled by Velocikey when it is enabled:
- RGB Breathing
- RGB Rainbow Mood
- RGB Rainbow Swirl
- RGB Snake
- RGB Knight
Support for LED breathing effects is planned but not available yet.
As long as Velocikey is enabled, it will control the speed regardless of any other speed setting that your RGB lights are currently on.
## Configuration
Velocikey doesn't currently support any configuration via keyboard settings. If you want to adjust something like the speed increase or decay rate, you would need to edit `velocikey.c` and adjust the values there to achieve the kinds of speeds that you like.

View File

@@ -7,24 +7,29 @@ QMK has a staggering number of features for building your keyboard. It can take
* [Audio](feature_audio.md) - Connect a speaker to your keyboard for audio feedback, midi support, and music mode.
* [Auto Shift](feature_auto_shift.md) - Tap for the normal key, hold slightly longer for its shifted state.
* [Backlight](feature_backlight.md) - LED lighting support for your keyboard.
* [Bluetooth](feature_bluetooth.md) - BlueTooth support for your keyboard.
* [Bootmagic](feature_bootmagic.md) - Adjust the behavior of your keyboard using hotkeys.
* [Combos](feature_combo.md) - Custom actions for multiple key holds.
* [Command](feature_command.md) - Runtime version of bootmagic (Formerly known as "Magic").
* [Debounce API](feature_debounce_type.md) - Customization of debouncing algorithms, and the ability to add more/custom debouncing.
* [Dynamic Macros](feature_dynamic_macros.md) - Record and playback macros from the keyboard itself.
* [Encoders](feature_encoders.md) - Rotary encoders!
* [Grave Escape](feature_grave_esc.md) - Lets you use a single key for Esc and Grave.
* [Haptic Feedback](feature_haptic_feedback.md) - Add haptic feedback drivers to your board.
* [HD44780 LCD Display](feature_hd44780.md) - Support for LCD character displays using the HD44780 standard.
* [Key Lock](feature_key_lock.md) - Lock a key in the "down" state.
* [Layouts](feature_layouts.md) - Use one keymap with any keyboard that supports your layout.
* [Leader Key](feature_leader_key.md) - Tap the leader key followed by a sequence to trigger custom behavior.
* [LED Matrix](feature_led_matrix.md) - LED Matrix single color lights for per key lighting (Single Color, not RGB).
* [Macros](feature_macros.md) - Send multiple key presses when pressing only one physical key.
* [Mouse keys](feature_mouse_keys.md) - Control your mouse pointer from your keyboard.
* [One Shot Keys](feature_advanced_keycodes.md#one-shot-keys) - Sticky Keys, lets hit a key rather than holding it.
* [OLED Driver](feature_oled_driver.md) - Add OLED screens to your keyboard.
* [One Shot Keys](feature_advanced_keycodes.md#one-shot-keys) - Sticky Keys, lets you hit a key rather than holding it.
* [Pointing Device](feature_pointing_device.md) - Framework for connecting your custom pointing device to your keyboard.
* [PS2 Mouse](feature_ps2_mouse.md) - Driver for connecting a PS/2 mouse directly to your keyboard.
* [RGB Light](feature_rgblight.md) - RGB lighting for your keyboard.
* [RGB Matrix](feature_rgb_matrix.md) - RGB Matrix lights for per key lighting.
* [Space Cadet](feature_space_cadet_shift.md) - Use your left/right shift keys to type parenthesis and brackets.
* [Space Cadet](feature_space_cadet.md) - Use your left/right shift keys to type parenthesis and brackets.
* [Stenography](feature_stenography.md) - Put your keyboard into Plover mode for stenography use.
* [Swap Hands](feature_swap_hands.md) - Mirror your keyboard for one handed usage.
* [Tap Dance](feature_tap_dance.md) - Make a single key do as many things as you want.
@@ -32,3 +37,4 @@ QMK has a staggering number of features for building your keyboard. It can take
* [Thermal Printer](feature_thermal_printer.md) - Connect a thermal printer to your keyboard to be able to toggle on a printed log of everything you type.
* [Unicode](feature_unicode.md) - Unicode input support.
* [Userspace](feature_userspace.md) - Share code between different keymaps and keyboards.
* [Velocikey](feature_velocikey.md) - Allows changes in RGB animation speed based on WPM/Typing speed.

View File

@@ -49,9 +49,18 @@ To generate this bootloader, use the `bootloader` target, eg `make planck/rev4:d
To generate a production-ready .hex file (containing the application and the bootloader), use the `production` target, eg `make planck/rev4:default:production`.
### DFU commands
There are a number of DFU commands that you can use to flash firmware to a DFU device:
* `:dfu` - This is the normal option and waits until a DFU device is available, and then flashes the firmware. This will check every 5 seconds, to see if a DFU device has appeared.
* `:dfu-ee` - This flashes an `eep` file instead of the normal hex. This is uncommon.
* `:dfu-split-left` - This flashes the normal firmware, just like the default option (`:dfu`). However, this also flashes the "Left Side" EEPROM file for split keyboards. _This is ideal for Elite C based split keyboards._
* `:dfu-split-right` - This flashes the normal firmware, just like the default option (`:dfu`). However, this also flashes the "Right Side" EEPROM file for split keyboards. _This is ideal for Elite C based split keyboards._
## Caterina
Arduino boards and their clones use the [Caterina bootloader](https://github.com/arduino/Arduino/tree/master/hardware/arduino/avr/bootloaders/caterina) (any keyboard built with a Pro Micro, or clone), and uses the avr109 protocol to communicate through virtual serial. Bootloaders like [A-Star](https://www.pololu.com/docs/0J61/9) are based on Caterina.
Arduino boards and their clones use the [Caterina bootloader](https://github.com/arduino/ArduinoCore-avr/tree/master/bootloaders/caterina) (any keyboard built with a Pro Micro, or clone), and uses the avr109 protocol to communicate through virtual serial. Bootloaders like [A-Star](https://www.pololu.com/docs/0J61/9) are based on Caterina.
To ensure compatibility with the Caterina bootloader, make sure this block is present your `rules.mk`:
@@ -84,6 +93,7 @@ or if you want to flash multiple boards, use the following command
When you're done flashing boards, you'll need to hit Ctrl + C or whatever the correct keystroke is for your operating system to break the loop.
## Halfkay
Halfkay is a super-slim protocol developed by PJRC that uses HID, and come on all Teensys (namely the 2.0).
@@ -131,3 +141,12 @@ Flashing sequence:
* You will receive a warning about the DFU signature; Just ignore it
4. Reset the device into application mode (may be done automatically)
* If you are building from command line (e.g. `make planck/rev6:default:dfu-util`), make sure that `:leave` is passed to the `DFU_ARGS` variable inside your `rules.mk` (e.g. `DFU_ARGS = -d 0483:df11 -a 0 -s 0x08000000:leave`) so that your device resets after flashing
### STM32 Commands
There are a number of DFU commands that you can use to flash firmware to a STM32 device:
* `:dfu-util` - The default command for flashing to STM32 devices.
* `:dfu-util-wait` - This works like the default command, but it gives you a (configurable) 10 second timeout before it attempts to flash the firmware. You can use `TIME_DELAY=20` from the command line to change the timeout.
* Eg: `make <keyboard>:<keymap>:dfu-util TIME_DELAY=5`
* `:st-link-cli` - This allows you to flash the firmware via ST-LINK's CLI utility, rather than dfu-util.

View File

@@ -4,7 +4,9 @@ This page describes setting up the build environment for QMK. These instructions
<!-- FIXME: We should have ARM instructions somewhere. -->
Note: If it is your first time here, Check out the "Complete Newbs guide" instead
**Note:** If this is your first time here, check out the [Complete Newbs Guide](newbs.md) page.
Before continuing, double check that your submodules (third-party libraries) are up to date by running `make git-submodule`.
## Linux
@@ -44,9 +46,7 @@ Fedora / Red Hat example:
Arch / Manjaro example:
pacman -S base-devel gcc unzip wget zip avr-gcc avr-binutils avr-libc dfu-util arm-none-eabi-gcc arm-none-eabi-binutils arm-none-eabi-newlib git
(the `dfu-programmer` package is availble on AUR only so you should download from there or use an AUR helper)
pacman -S base-devel gcc unzip wget zip avr-gcc avr-binutils avr-libc dfu-util arm-none-eabi-gcc arm-none-eabi-binutils arm-none-eabi-newlib git dfu-programmer dfu-util
## Nix
@@ -62,14 +62,14 @@ If you're using [homebrew,](http://brew.sh/) you can use the following commands:
brew tap osx-cross/avr
brew tap PX4/homebrew-px4
brew update
brew install avr-gcc@7
brew link --force avr-gcc@7
brew install avr-gcc@8
brew link --force avr-gcc@8
brew install dfu-programmer
brew install dfu-util
brew install gcc-arm-none-eabi
brew install avrdude
This is the recommended method. If you don't have homebrew, [install it!](http://brew.sh/) It's very much worth it for anyone who works in the command line. Note that the `make` and `make install` portion during the homebrew installation of `avr-gcc@7` can take over 20 minutes and exhibit high CPU usage.
This is the recommended method. If you don't have homebrew, [install it!](http://brew.sh/) It's very much worth it for anyone who works in the command line. Note that the `make` and `make install` portion during the homebrew installation of `avr-gcc@8` can take over 20 minutes and exhibit high CPU usage.
## Windows with msys2 (recommended)

View File

@@ -12,11 +12,17 @@ Within the folder `users` is a directory for each user. This is a place for user
### Keyboard Project Structure
Within the folder `keyboards` and its subfolder `handwired` is a directory for each keyboard project, for example `qmk_firmware/keyboards/clueboard`. Within it you'll find the following structure:
Within the folder `keyboards`, its subfolder `handwired` and its vendor and manufacture subdirectories e.g. `clueboard` is a directory for each keyboard project, for example `qmk_firmware/keyboards/clueboard/2x1800`. Within it, you'll find the following structure:
* `keymaps/`: Different keymaps that can be built
* `rules.mk`: The file that sets the default "make" options. Do not edit this file directly, instead use a keymap specific `rules.mk`.
* `config.h`: The file that sets the default compile time options. Do not edit this file directly, instead use a keymap specific `config.h`.
* `info.json`: The file used for setting layout for QMK Configurator. See [Configurator Support](reference_configurator_support.md) for more information.
* `readme.md`: A brief overview of the keyboard.
* `<keyboardName>.h`: This file is where the keyboard layout is defined against the keyboard's switch matrix.
* `<keyboardName>.c`: This file is where you can find custom code for the keyboard.
For more information on project structure, see [QMK Keyboard Guidelines](hardware_keyboard_guidelines.md).
### Keymap Structure

View File

@@ -143,9 +143,9 @@ As there is no standard split communication driver for ARM-based split keyboards
Lets you replace the default matrix scanning routine with your own code. You will need to provide your own implementations of matrix_init() and matrix_scan().
`CUSTOM_DEBOUNCE`
`DEBOUNCE_TYPE`
Lets you replace the default key debouncing routine with your own code. You will need to provide your own implementation of debounce().
Lets you replace the default key debouncing routine with an alternative one. If `custom` you will need to provide your own implementation.
## Customizing Makefile Options on a Per-Keymap Basis

View File

@@ -185,21 +185,30 @@ When you're done with the columns, start with the rows in the same process, from
As you move along, be sure that the Teensy is staying in place - recutting and soldering the wires is a pain!
## Additional guides
If you're more of a visual learner, or want some additional tips and something more to follow along, these two visual step by step guides may be helpful:
- [BrownFox's step by step guide](https://deskthority.net/viewtopic.php?f=7&t=6050)
- [Cribbit's modern hand wiring guide](https://geekhack.org/index.php?topic=87689.0)
# Getting Some Basic Firmware Set Up
From here, you should have a working keyboard once you program a firmware. Before we attach the Teensy permanently to the keyboard, let's quickly get some firmware loaded onto the Teensy so we can test each keyswitch.
To start out, download [the firmware](https://github.com/qmk/qmk_firmware/) - we'll be using my (Jack's) fork of TMK called QMK/Quantum. We'll be doing a lot from the Terminal/command prompt, so get that open, along with a decent text editor like [Sublime Text](http://www.sublimetext.com/).
To start out, download [the firmware](https://github.com/qmk/qmk_firmware/) - we'll be using my (Jack's) fork of TMK called QMK/Quantum. We'll be doing a lot from the Terminal/command prompt, so get that open, along with a decent text editor like [Sublime Text](http://www.sublimetext.com/) (paid) or [Visual Studio Code](https://code.visualstudio.com) (free).
The first thing we're going to do is create a new project using the script in the root directory of the firmware. In your terminal, run this command with `<project_name>` replaced by the name of your project - it'll need to be different from any other project in the `keyboards/` folder:
The first thing we're going to do is create a new keyboard. In your terminal, run this command, which will ask you some questions and generate a basic keyboard project:
```
util/new_project.sh <project_name>
./util/new_keyboard.sh
```
You'll want to navigate to the `keyboards/<project_name>/` folder by typing, like the print-out from the script specifies:
cd keyboards/<project_name>
```
cd keyboards/<project_name>
```
### `config.h`
@@ -209,7 +218,7 @@ Farther down are `MATRIX_ROW_PINS` and `MATRIX_COL_PINS`. Change their definitio
### `<project_name>.h`
The next file you'll want to look at is `<project_name>.h`. You're going to want to rewrite the `KEYMAP` definition - the format and syntax here is extremely important, so pay attention to how things are setup. The first half of the definition are considered the arguments - this is the format that you'll be following in your keymap later on, so you'll want to have as many k*xy* variables here as you do keys. The second half is the part that the firmware actually looks at, and will contain gaps depending on how you wired your matrix.
The next file you'll want to look at is `<project_name>.h`. You're going to want to rewrite the `LAYOUT` definition - the format and syntax here is extremely important, so pay attention to how things are setup. The first half of the definition are considered the arguments - this is the format that you'll be following in your keymap later on, so you'll want to have as many k*xy* variables here as you do keys. The second half is the part that the firmware actually looks at, and will contain gaps depending on how you wired your matrix.
We'll dive into how this will work with the following example. Say we have a keyboard like this:
@@ -231,10 +240,10 @@ This can be described by saying the top row is 3 1u keys, and the bottom row is
└─────┴─────┘
```
The middle column is unused on the bottom row in this example. Our `KEYMAP` definition would look like this:
The middle column is unused on the bottom row in this example. Our `LAYOUT` definition would look like this:
```
#define KEYMAP( \
#define LAYOUT( \
k00, k01, k02, \
k10, k11, \
) \
@@ -256,10 +265,10 @@ Let's say that instead, we wired our keyboard like this (a fair thing to do):
└─────┴─────┘
```
This would require our `KEYMAP` definition to look like this:
This would require our `LAYOUT` definition to look like this:
```
#define KEYMAP( \
#define LAYOUT( \
k00, k01, k02, \
k10, k11, \
) \
@@ -269,7 +278,7 @@ This would require our `KEYMAP` definition to look like this:
}
```
Notice how the `k11` and `KC_NO` switched places to represent the wiring, and the unused final column on the bottom row. Sometimes it'll make more sense to put a keyswitch on a particular column, but in the end, it won't matter, as long as all of them are accounted for. You can use this process to write out the `KEYMAP` for your entire keyboard - be sure to remember that your keyboard is actually backwards when looking at the underside of it.
Notice how the `k11` and `KC_NO` switched places to represent the wiring, and the unused final column on the bottom row. Sometimes it'll make more sense to put a keyswitch on a particular column, but in the end, it won't matter, as long as all of them are accounted for. You can use this process to write out the `LAYOUT` for your entire keyboard - be sure to remember that your keyboard is actually backwards when looking at the underside of it.
### `keymaps/<variant>/default.c`
@@ -291,7 +300,7 @@ This can be accomplished by using the following `keymaps` definition:
```
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = KEYMAP( /* Base */
[0] = LAYOUT( /* Base */
KC_A, KC_1, KC_H, \
KC_TAB, KC_SPC \
),
@@ -300,7 +309,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
Note that the layout of the keycodes is similar to the physical layout of our keyboard - this make it much easier to see what's going on. A lot of the keycodes should be fairly obvious, but for a full list of them, check out [Keycodes](keycodes.md) - there are also a lot of aliases to condense your keymap file.
It's also important to use the `KEYMAP` function we defined earlier - this is what allows the firmware to associate our intended readable keymap with the actual wiring.
It's also important to use the `LAYOUT` function we defined earlier - this is what allows the firmware to associate our intended readable keymap with the actual wiring.
## Compiling Your Firmware
@@ -319,7 +328,7 @@ Carefully flip your keyboard over, open up a new text document, and try typing -
2. Check the solder joints on the diode - if the diode is loose, part of your row may register, while the other may not.
3. Check the solder joints on the columns - if your column wiring is loose, part or all of the column may not work.
4. Check the solder joints on both sides of the wires going to/from the Teensy - the wires need to be fully soldered and connect to both sides.
5. Check the <project_name>.h file for errors and incorrectly placed `KC_NO`s - if you're unsure where they should be, instead duplicate a k*xy* variable.
5. Check the `<project_name>.h` file for errors and incorrectly placed `KC_NO`s - if you're unsure where they should be, instead duplicate a k*xy* variable.
6. Check to make sure you actually compiled the firmware and flashed the Teensy correctly. Unless you got error messages in the terminal, or a pop-up during flashing, you probably did everything correctly.
If you've done all of these things, keep in mind that sometimes you might have had multiple things affecting the keyswitch, so it doesn't hurt to test the keyswitch by shorting it out at the end.
@@ -328,4 +337,4 @@ If you've done all of these things, keep in mind that sometimes you might have h
Now that you have a working board, it's time to get things in their permanent positions. I've often used liberal amounts of hot glue to secure and insulate things, so if that's your style, start spreading that stuff like butter. Otherwise, double-sided tape is always an elegant solution, and electrical tape is a distant second. Due to the nature of these builds, a lot of this part is up to you and how you planned (or didn't plan) things out.
There are a lot of possibilities inside the firmware - explore [docs.qmk.fm](http://docs.qmk.fm) for a full feature list, and dive into the different project (Planck, Clueboard, Ergodox EZ, etc) to see how people use all of them. You can always stop by [the OLKB subreddit for help!](http://reddit.com/r/olkb)
There are a lot of possibilities inside the firmware - explore [docs.qmk.fm](http://docs.qmk.fm) for a full feature list, and dive into the different keyboards (Planck, Clueboard, Ergodox EZ, etc) to see how people use all of them. You can always stop by [the OLKB subreddit for help!](http://reddit.com/r/olkb)

View File

@@ -6,14 +6,26 @@ If you have not yet you should read the [Keyboard Guidelines](hardware_keyboard_
## Adding Your AVR Keyboard to QMK
QMK has a number of features to simplify working with AVR keyboards. For most keyboards you don't have to write a single line of code. To get started run the `util/new_project.sh` script:
QMK has a number of features to simplify working with AVR keyboards. For most keyboards you don't have to write a single line of code. To get started, run the `util/new_keyboard.sh` script:
```bash
$ util/new_project.sh my_awesome_keyboard
######################################################
# /keyboards/my_awesome_keyboard project created. To start
# working on things, cd into keyboards/my_awesome_keyboard
######################################################
```
$ ./util/new_keyboard.sh
Generating a new QMK keyboard directory
Keyboard Name: mycoolkb
Keyboard Type [avr]:
Your Name [John Smith]:
Copying base template files... done
Copying avr template files... done
Renaming keyboard files... done
Replacing %KEYBOARD% with mycoolkb... done
Replacing %YOUR_NAME% with John Smith... done
Created a new keyboard called mycoolkb.
To start working on things, cd into keyboards/mycoolkb,
or open the directory in your favourite text editor.
```
This will create all the files needed to support your new keyboard, and populate the settings with default values. Now you just need to customize it for your keyboard.
@@ -87,12 +99,30 @@ Once you've defined the size of your matrix you need to define which pins on you
The number of `MATRIX_ROW_PINS` entries must be the same as the number you assigned to `MATRIX_ROWS`, and likewise for `MATRIX_COL_PINS` and `MATRIX_COLS`. You do not have to specify `UNUSED_PINS`, but you can if you want to document what pins are open.
Finally, you can specify the direction your diodes point. This can be `COL2ROW`, `ROW2COL`, or `CUSTOM_MATRIX`.
Finally, you can specify the direction your diodes point. This can be `COL2ROW` or `ROW2COL`.
```c
#define DIODE_DIRECTION COL2ROW
```
#### Direct Pin Matrix
To configure a keyboard where each switch is connected to a separate pin and ground instead of sharing row and column pins, use `DIRECT_PINS`. The mapping defines the pins of each switch in rows and columns, from left to right. Must conform to the sizes within `MATRIX_ROWS` and `MATRIX_COLS`, use `NO_PIN` to fill in blank spaces. Overrides the behaviour of `DIODE_DIRECTION`, `MATRIX_ROW_PINS` and `MATRIX_COL_PINS`.
```c
// #define MATRIX_ROW_PINS { D0, D5 }
// #define MATRIX_COL_PINS { F1, F0, B0 }
#define DIRECT_PINS { \
{ F1, E6, B0, B2, B3 }, \
{ F5, F0, B1, B7, D2 }, \
{ F6, F7, C7, D5, D3 }, \
{ B5, C6, B6, NO_PIN, NO_PIN } \
}
#define UNUSED_PINS
/* COL2ROW, ROW2COL */
//#define DIODE_DIRECTION
```
### Backlight Configuration
By default QMK supports backlighting on pins `B5`, `B6`, and `B7`. If you are using one of those you can simply enable it here. For more details see the [Backlight Documentation](feature_backlight.md).

View File

@@ -14,9 +14,9 @@ QMK is used on a lot of different hardware. While support for the most common MC
Support for addressing pins on the ProMicro by their Arduino name rather than their AVR name. This needs to be better documented, if you are trying to do this and reading the code doesn't help please [open an issue](https://github.com/qmk/qmk_firmware/issues/new) and we can help you through the process.
## SSD1306 (AVR Only)
## SSD1306 OLED Driver
Support for SSD1306 based OLED displays. This needs to be better documented, if you are trying to do this and reading the code doesn't help please [open an issue](https://github.com/qmk/qmk_firmware/issues/new) and we can help you through the process.
Support for SSD1306 based OLED displays. For more information see the [OLED Driver Feature](feature_oled_driver.md) page.
## uGFX
@@ -32,4 +32,4 @@ Support for up to 2 drivers. Each driver impliments 2 charlieplex matrices to in
## IS31FL3733
Support for up to a single driver with room for expansion. Each driver can control 192 individual LEDs or 64 RGB LEDs. For more information on how to setup the driver see the [RGB Matrix](feature_rgb_matrix.md) page.
Support for up to a single driver with room for expansion. Each driver can control 192 individual LEDs or 64 RGB LEDs. For more information on how to setup the driver see the [RGB Matrix](feature_rgb_matrix.md) page.

View File

@@ -12,7 +12,7 @@ place:
``` text
+------+ +-----+ +----------+ +----------+ +----+
| User |-------->| Key |------>| Firmware |----->| USB wire |---->| OS |
+------+ +-----+ +----------+ +----------+ |----+
+------+ +-----+ +----------+ +----------+ +----+
```
This scheme is a very simple view of what's going on, and more details follow
@@ -63,10 +63,10 @@ You may wonder why a keyboard layout containing all of Unicode is not devised th
## How to (Maybe) Enter Unicode Characters
You can have the firmware send *sequences of keys* to use the [software Unicode Input Method](https://en.wikipedia.org/wiki/Unicode_input#Hexadecimal_code_input) of the target operating system, thus effectively entering characters independently of the layout defined in the OS.
You can have the firmware send *sequences of keys* to use the [software Unicode Input Method](https://en.wikipedia.org/wiki/Unicode_input#Hexadecimal_input) of the target operating system, thus effectively entering characters independently of the layout defined in the OS.
Yet, it does come with multiple disadvantages:
- Tied to a specific OS a a time (need recompilation when changing OS);
- Tied to a specific OS at a time (need recompilation when changing OS);
- Within a given OS, does not work in all software;
- Limited to a subset of Unicode on some systems.

View File

@@ -12,7 +12,7 @@ The I2C Master drivers used in QMK have a set of common functions to allow porta
|`uint8_t i2c_receive(uint8_t address, uint8_t* data, uint16_t length, uint16_t timeout);` |Receive data over I2C. Address is the 7-bit slave address without the direction. Saves number of bytes specified by `length` in `data` array. Returns status of transaction. |
|`uint8_t i2c_writeReg(uint8_t devaddr, uint8_t regaddr, uint8_t* data, uint16_t length, uint16_t timeout);` |Same as the `i2c_transmit` function but `regaddr` sets where in the slave the data will be written. |
|`uint8_t i2c_readReg(uint8_t devaddr, uint8_t regaddr, uint8_t* data, uint16_t length, uint16_t timeout);` |Same as the `i2c_receive` function but `regaddr` sets from where in the slave the data will be read. |
|`uint8_t i2c_stop(uint16_t timeout);` |Stops the I2C driver. |
|`uint8_t i2c_stop(void);` |Ends an I2C transaction. |
### Function Return
@@ -65,11 +65,30 @@ By default the I2C1 hardware driver is assumed to be used. If another hardware d
STM32 MCUs allows a variety of pins to be configured as I2C pins depending on the hardware driver used. By default B6 and B7 are set to I2C. You can use these defines to set your i2c pins:
| Variable | Description | Default |
|-------------|----------------------------------------------|---------|
| `I2C1_BANK` | The bank of pins (`GPIOA`, `GPIOB`, `GPIOC`) | `GPIOB` |
| `I2C1_SCL` | The pin number for the SCL pin (0-9) | `6` |
| `I2C1_SDA` | The pin number for the SDA pin (0-9) | `7` |
| Variable | Description | Default |
|--------------------------|----------------------------------------------------------------------------------------------|---------|
| `I2C1_SCL_BANK` | The bank of pins (`GPIOA`, `GPIOB`, `GPIOC`) to use for SCL | `GPIOB` |
| `I2C1_SDA_BANK` | The bank of pins (`GPIOA`, `GPIOB`, `GPIOC`) to use for SDA | `GPIOB` |
| `I2C1_SCL` | The pin number for the SCL pin (0-9) | `6` |
| `I2C1_SDA` | The pin number for the SDA pin (0-9) | `7` |
| `I2C1_BANK` (deprecated) | The bank of pins (`GPIOA`, `GPIOB`, `GPIOC`), superceded by `I2C1_SCL_BANK`, `I2C1_SDA_BANK` | `GPIOB` |
STM32 MCUs allow for different timing parameters when configuring I2C. These can be modified using the following parameters, using https://www.st.com/en/embedded-software/stsw-stm32126.html as a reference:
| Variable | Default |
|-----------------------|---------|
| `I2C1_TIMINGR_PRESC` | `15U` |
| `I2C1_TIMINGR_SCLDEL` | `4U` |
| `I2C1_TIMINGR_SDADEL` | `2U` |
| `I2C1_TIMINGR_SCLH` | `15U` |
| `I2C1_TIMINGR_SCLL` | `21U` |
STM32 MCUs allow for different "alternate function" modes when configuring GPIO pins. These are required to switch the pins used to I2C mode. See the respective datasheet for the appropriate values for your MCU.
| Variable | Default |
|---------------------|---------|
| `I2C1_SCL_PAL_MODE` | `4` |
| `I2C1_SDA_PAL_MODE` | `4` |
You can also overload the `void i2c_init(void)` function, which has a weak attribute. If you do this the configuration variables above will not be used. Please consult the datasheet of your MCU for the available GPIO configurations. The following is an example initialization function:

View File

@@ -5,7 +5,13 @@
<title>QMK Firmware</title>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
<meta name="description" content="Description">
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta property="og:title" content="QMK Firmware Docs">
<meta property="og:type" content="website">
<meta property="og:description" content="The full documenation of the open-source firmware">
<meta property="og:image" content="https://i.imgur.com/svjvIrw.jpg">
<meta property="og:url" content="https://docs.qmk.fm">
<meta name="twitter:card" content="summary_large_image">
<link rel="stylesheet" href="//unpkg.com/docsify/lib/themes/vue.css" title="light">
<link rel="stylesheet" href="qmk.css" title="dark" disabled>
<link rel="stylesheet" href="sidebar.css" />

View File

@@ -63,6 +63,7 @@ If you just want to get things back to normal, you can flash only a bootloader f
* [`atmega32u4`](https://github.com/qmk/qmk_firmware/blob/master/util/bootloader_atmega32u4_1_0_0.hex) - Most keyboards, Planck Rev 1-5, Preonic Rev 1-2
* [`at90usb1286`](https://github.com/qmk/qmk_firmware/blob/master/util/bootloader_at90usb128x_1_0_1.hex) - Planck Light Rev 1
* [`atmega32a`](https://github.com/qmk/qmk_firmware/blob/master/util/bootloader_atmega32a_1_0_0.hex) - jj40
If you're not sure what your board uses, look in the `rules.mk` file for the keyboard in QMK. The `MCU =` line will have the value you need. It may differ between different versions of the board.
@@ -113,6 +114,10 @@ Since our keyboard uses an `atmega32u4` (common), that is the chip we'll specify
avrdude -c avrisp -P COM3 -p atmega32u4 -U flash:w:main.hex:i
If your board uses an `atmega32a` (e.g. on a jj40), the command is this (the extra code at the end sets the fuses correctly):
avrdude -c avrisp -P COM3 -p atmega32 -U flash:w:main.hex:i -U hfuse:w:0xD0:m -U lfuse:w:0x0F:m
You should see a couple of progress bars, then you should see:
avrdude: verifying ...

View File

@@ -216,6 +216,11 @@ This is a reference only. Each group of keys links to the page documenting their
|`KC_GESC` |`GRAVE_ESC`|Escape when tapped, <code>&#96;</code> when pressed with Shift or GUI|
|`KC_LSPO` | |Left Shift when held, `(` when tapped |
|`KC_RSPC` | |Right Shift when held, `)` when tapped |
|`KC_LCPO` | |Left Control when held, `(` when tapped |
|`KC_RCPC` | |Right Control when held, `)` when tapped |
|`KC_LAPO` | |Left Alt when held, `(` when tapped |
|`KC_RAPC` | |Right Alt when held, `)` when tapped |
|`KC_SFTENT` | |Right Shift when held, Enter when tapped |
|`KC_LEAD` | |The [Leader key](feature_leader_key.md) |
|`KC_LOCK` | |The [Lock key](feature_key_lock.md) |
|`FUNC(n)` |`F(n)` |Call `fn_action(n)` (deprecated) |
@@ -293,7 +298,7 @@ This is a reference only. Each group of keys links to the page documenting their
|`LM(layer, mod)`|Momentarily turn on `layer` (like MO) with `mod` active as well. Where `mod` is a mods_bit. Mods can be viewed [here](https://docs.qmk.fm/#/feature_advanced_keycodes?id=mod-tap). Example Implementation: `LM(LAYER_1, MOD_LALT)`|
|`LT(layer, kc)` |Turn on `layer` when held, `kc` when tapped |
|`TG(layer)` |Toggle `layer` on or off |
|`TO(layer)` |Turn on `layer` when pressed |
|`TO(layer)` |Turns on `layer` and turns off all other layers, except the default layer |
|`TT(layer)` |Normally acts like MO unless it's tapped multiple times, which toggles `layer` on |
## [Mouse Keys](feature_mouse_keys.md)
@@ -339,23 +344,24 @@ This is a reference only. Each group of keys links to the page documenting their
## [Mod-Tap Keys](feature_advanced_keycodes.md#mod-tap)
|Key |Aliases |Description |
|------------|-----------------------------------------------------------------|-------------------------------------------------------|
|`LCTL_T(kc)`|`CTL_T(kc)` |Left Control when held, `kc` when tapped |
|`LSFT_T(kc)`|`SFT_T(kc)` |Left Shift when held, `kc` when tapped |
|`LALT_T(kc)`|`ALT_T(kc)` |Left Alt when held, `kc` when tapped |
|`LGUI_T(kc)`|`LCMD_T(kc)`, `LWIN_T(kc)`, `GUI_T(kc)`, `CMD_T(kc)`, `WIN_T(kc)`|Left GUI when held, `kc` when tapped |
|`RCTL_T(kc)`| |Right Control when held, `kc` when tapped |
|`RSFT_T(kc)`| |Right Shift when held, `kc` when tapped |
|`RALT_T(kc)`|`ALGR_T(kc)` |Right Alt when held, `kc` when tapped |
|`RGUI_T(kc)`|`RCMD_T(kc)`, `RWIN_T(kc)` |Right GUI when held, `kc` when tapped |
|`SGUI_T(kc)`|`SCMD_T(kc)`, `SWIN_T(kc)` |Left Shift and GUI when held, `kc` when tapped |
|`LCA_T(kc)` | |Left Control and Alt when held, `kc` when tapped |
|`LCAG_T(kc)`| |Left Control, Alt and GUI when held, `kc` when tapped |
|`RCAG_T(kc)`| |Right Control, Alt and GUI when held, `kc` when tapped |
|`C_S_T(kc)` | |Left Control and Shift when held, `kc` when tapped |
|`MEH_T(kc)` | |Left Control, Shift and Alt when held, `kc` when tapped|
|`HYPR_T(kc)`|`ALL_T(kc)` |Left Control, Shift, Alt and GUI when held, `kc` when tapped - more info [here](http://brettterpstra.com/2012/12/08/a-useful-caps-lock-key/)|
|Key |Aliases |Description |
|-------------|-----------------------------------------------------------------|-------------------------------------------------------|
|`MT(mod, kc)`| |`mod` when held, `kc` when tapped |
|`LCTL_T(kc)` |`CTL_T(kc)` |Left Control when held, `kc` when tapped |
|`LSFT_T(kc)` |`SFT_T(kc)` |Left Shift when held, `kc` when tapped |
|`LALT_T(kc)` |`ALT_T(kc)` |Left Alt when held, `kc` when tapped |
|`LGUI_T(kc)` |`LCMD_T(kc)`, `LWIN_T(kc)`, `GUI_T(kc)`, `CMD_T(kc)`, `WIN_T(kc)`|Left GUI when held, `kc` when tapped |
|`RCTL_T(kc)` | |Right Control when held, `kc` when tapped |
|`RSFT_T(kc)` | |Right Shift when held, `kc` when tapped |
|`RALT_T(kc)` |`ALGR_T(kc)` |Right Alt when held, `kc` when tapped |
|`RGUI_T(kc)` |`RCMD_T(kc)`, `RWIN_T(kc)` |Right GUI when held, `kc` when tapped |
|`SGUI_T(kc)` |`SCMD_T(kc)`, `SWIN_T(kc)` |Left Shift and GUI when held, `kc` when tapped |
|`LCA_T(kc)` | |Left Control and Alt when held, `kc` when tapped |
|`LCAG_T(kc)` | |Left Control, Alt and GUI when held, `kc` when tapped |
|`RCAG_T(kc)` | |Right Control, Alt and GUI when held, `kc` when tapped |
|`C_S_T(kc)` | |Left Control and Shift when held, `kc` when tapped |
|`MEH_T(kc)` | |Left Control, Shift and Alt when held, `kc` when tapped|
|`HYPR_T(kc)` |`ALL_T(kc)` |Left Control, Shift, Alt and GUI when held, `kc` when tapped - more info [here](http://brettterpstra.com/2012/12/08/a-useful-caps-lock-key/)|
## [RGB Lighting](feature_rgblight.md)
@@ -450,7 +456,15 @@ This is a reference only. Each group of keys links to the page documenting their
## [Unicode Support](feature_unicode.md)
|Key |Description |
|-------|---------------------------------------------------------------------------|
|`UC(c)`|Send Unicode code point `c` (`UNICODE_ENABLE`) |
|`X(i)` |Send Unicode code point at index `i` in `unicode_map` (`UNICODEMAP_ENABLE`)|
|Key |Aliases |Description |
|----------------------|---------|----------------------------------------------------------------|
|`UC(c)` | |Send Unicode code point `c` |
|`X(i)` | |Send Unicode code point at index `i` in `unicode_map` |
|`XP(i, j)` | |Send Unicode code point at index `i`, or `j` if Shift/Caps is on|
|`UNICODE_MODE_FORWARD`|`UC_MOD` |Cycle through selected input modes |
|`UNICODE_MODE_REVERSE`|`UC_RMOD`|Cycle through selected input modes in reverse |
|`UNICODE_MODE_OSX` |`UC_M_OS`|Switch to macOS input |
|`UNICODE_MODE_LNX` |`UC_M_LN`|Switch to Linux input |
|`UNICODE_MODE_WIN` |`UC_M_WI`|Switch to Windows input |
|`UNICODE_MODE_BSD` |`UC_M_BS`|Switch to BSD input (not implemented) |
|`UNICODE_MODE_WINC` |`UC_M_WC`|Switch to Windows input using WinCompose |

View File

@@ -1,6 +1,6 @@
# Keymap Overview
QMK keymaps are defined inside a C source file. The data structure is an array of arrays. The outer array is a list of layer arrays while the inner layer array is a list of keys. Most keyboards define a `KEYMAP()` macro to help you create this array of arrays.
QMK keymaps are defined inside a C source file. The data structure is an array of arrays. The outer array is a list of layer arrays while the inner layer array is a list of keys. Most keyboards define a `LAYOUT()` macro to help you create this array of arrays.
## Keymap and Layers
@@ -119,7 +119,7 @@ The main part of this file is the `keymaps[]` definition. This is where you list
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
After this you'll find a list of KEYMAP() macros. A KEYMAP() is simply a list of keys to define a single layer. Typically you'll have one or more "base layers" (such as QWERTY, Dvorak, or Colemak) and then you'll layer on top of that one or more "function" layers. Due to the way layers are processed you can't overlay a "lower" layer on top of a "higher" layer.
After this you'll find a list of LAYOUT() macros. A LAYOUT() is simply a list of keys to define a single layer. Typically you'll have one or more "base layers" (such as QWERTY, Dvorak, or Colemak) and then you'll layer on top of that one or more "function" layers. Due to the way layers are processed you can't overlay a "lower" layer on top of a "higher" layer.
`keymaps[][MATRIX_ROWS][MATRIX_COLS]` in QMK holds the 16 bit action code (sometimes referred as the quantum keycode) in it. For the keycode representing typical keys, its high byte is 0 and its low byte is the USB HID usage ID for keyboard.
@@ -131,7 +131,7 @@ Here is an example of the Clueboard's base layer:
/* Keymap _BL: Base Layer (Default Layer)
*/
[_BL] = KEYMAP(
[_BL] = LAYOUT(
F(0), KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_GRV, KC_BSPC, KC_PGUP, \
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGDN, \
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, \
@@ -149,7 +149,7 @@ Some interesting things to note about this:
Our function layer is, from a code point of view, no different from the base layer. Conceptually, however, you will build that layer as an overlay, not a replacement. For many people this distinction does not matter, but as you build more complicated layering setups it matters more and more.
[_FL] = KEYMAP(
[_FL] = LAYOUT(
KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, KC_DEL, BL_STEP, \
_______, _______, _______,_______,_______,_______,_______,_______,KC_PSCR,KC_SLCK, KC_PAUS, _______, _______, _______, _______, \
_______, _______, MO(_CL),_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, \
@@ -161,62 +161,6 @@ Some interesting things to note:
* We have used our `_______` definition to turn `KC_TRNS` into `_______`. This makes it easier to spot the keys that have changed on this layer.
* While in this layer if you press one of the `_______` keys it will activate the key in the next lowest active layer.
### Custom Functions
At the bottom of the file we've defined a single custom function. This function defines a key that sends `KC_ESC` when pressed without modifiers and `KC_GRAVE` when modifiers are held. There are a couple pieces that need to be in place for this to work, and we will go over both of them.
#### `fn_actions[]`
We define the `fn_actions[]` array to point to custom functions. `F(N)` in a keymap will call element N of that array. For the Clueboard's that looks like this:
const uint16_t PROGMEM fn_actions[] = {
[0] = ACTION_FUNCTION(0), // Calls action_function()
};
In this case we've instructed QMK to call the `ACTION_FUNCTION` callback, which we will define in the next section.
> This `fn_actions[]` interface is mostly for backward compatibility. In QMK, you don't need to use `fn_actions[]`. You can directly use `ACTION_FUNCTION(N)` or any other action code value itself normally generated by the macro in `keymaps[][MATRIX_ROWS][MATRIX_COLS]`. N in `F(N)` can only be 0 to 31. Use of the action code directly in `keymaps` unlocks this limitation.
You can get a full list of Action Functions in [action_code.h](https://github.com/qmk/qmk_firmware/blob/master/tmk_core/common/action_code.h).
#### `action_function()`
To actually handle the keypress event we define an `action_function()`. This function will be called when the key is pressed, and then again when the key is released. We have to handle both situations within our code, as well as determining whether to send/release `KC_ESC` or `KC_GRAVE`.
void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) {
static uint8_t mods_pressed;
switch (id) {
case 0:
/* Handle the combined Grave/Esc key
*/
mods_pressed = get_mods()&GRAVE_MODS; // Check to see what mods are pressed
if (record->event.pressed) {
/* The key is being pressed.
*/
if (mods_pressed) {
add_key(KC_GRV);
send_keyboard_report();
} else {
add_key(KC_ESC);
send_keyboard_report();
}
} else {
/* The key is being released.
*/
if (mods_pressed) {
del_key(KC_GRV);
send_keyboard_report();
} else {
del_key(KC_ESC);
send_keyboard_report();
}
}
break;
}
}
# Nitty Gritty Details
This should have given you a basic overview for creating your own keymap. For more details see the following resources:

View File

@@ -86,7 +86,7 @@ If you know what bootloader that you're using, then when compiling the firmware,
### DFU
For the DFU bootloader, when you're ready to compile and flash your firmware, open up your terminal window and run the built command:
For the DFU bootloader, when you're ready to compile and flash your firmware, open up your terminal window and run the build command:
make <my_keyboard>:<my_keymap>:dfu
@@ -131,9 +131,19 @@ If you have any issues with this, you may need to this:
sudo make <my_keyboard>:<my_keymap>:dfu
#### DFU commands
There are a number of DFU commands that you can use to flash firmware to a DFU device:
* `:dfu` - This is the normal option and waits until a DFU device is available, and then flashes the firmware. This will check every 5 seconds, to see if a DFU device has appeared.
* `:dfu-ee` - This flashes an `eep` file instead of the normal hex. This is uncommon.
* `:dfu-split-left` - This flashes the normal firmware, just like the default option (`:dfu`). However, this also flashes the "Left Side" EEPROM file for split keyboards. _This is ideal for Elite C based split keyboards._
* `:dfu-split-right` - This flashes the normal firmware, just like the default option (`:dfu`). However, this also flashes the "Right Side" EEPROM file for split keyboards. _This is ideal for Elite C based split keyboards._
### Caterina
For Arduino boards and their close (such as the SparkFun ProMicro), when you're ready to compile and flash your firmware, open up your terminal window and run the built command:
For Arduino boards and their clones (such as the SparkFun ProMicro), when you're ready to compile and flash your firmware, open up your terminal window and run the build command:
make <my_keyboard>:<my_keymap>:avrdude
@@ -199,9 +209,17 @@ If you have any issues with this, you may need to this:
sudo make <my_keyboard>:<my_keymap>:avrdude
Additionally, if you want to flash multiple boards, use the following command:
make <keyboard>:<keymap>:avrdude-loop
When you're done flashing boards, you'll need to hit Ctrl + C or whatever the correct keystroke is for your operating system to break the loop.
## HalfKay
For the PJRC devices (Teensy's), when you're ready to compile and flash your firmware, open up your terminal window and run the built command:
For the PJRC devices (Teensy's), when you're ready to compile and flash your firmware, open up your terminal window and run the build command:
make <my_keyboard>:<my_keymap>:teensy
@@ -226,12 +244,61 @@ Waiting for Teensy device...
```
Found HalfKay Bootloader
Read "./.build/ergodox_ez_drashna.hex": 28532 bytes, 88.5% usage
Read "./.build/ergodox_ez_xyverz.hex": 28532 bytes, 88.5% usage
Programming............................................................................................................................................................................
...................................................
Booting
```
## STM32 (ARM)
For a majority of ARM boards (including the Proton C, Planck Rev 6, and Preonic Rev 3), when you're ready to compile and flash your firmware, open up your terminal window and run the build command:
make <my_keyboard>:<my_keymap>:dfu-util
For example, if your keymap is named "xyverz" and you're building a keymap for the Planck Revision 6 keyboard, you'll use this command and then reboot the keyboard to the bootloader (before it finishes compiling):
make planck/rev6:xyverz:dfu-util
Once the firmware finishes compiling, it will output something like this:
```
Linking: .build/planck_rev6_xyverz.elf [OK]
Creating binary load file for flashing: .build/planck_rev6_xyverz.bin [OK]
Creating load file for flashing: .build/planck_rev6_xyverz.hex [OK]
Size after:
text data bss dec hex filename
0 41820 0 41820 a35c .build/planck_rev6_xyverz.hex
Copying planck_rev6_xyverz.bin to qmk_firmware folder [OK]
dfu-util 0.9
Copyright 2005-2009 Weston Schmidt, Harald Welte and OpenMoko Inc.
Copyright 2010-2016 Tormod Volden and Stefan Schmidt
This program is Free Software and has ABSOLUTELY NO WARRANTY
Please report bugs to http://sourceforge.net/p/dfu-util/tickets/
Invalid DFU suffix signature
A valid DFU suffix will be required in a future dfu-util release!!!
Opening DFU capable USB device...
ID 0483:df11
Run-time device DFU version 011a
Claiming USB DFU Interface...
Setting Alternate Setting #0 ...
Determining device status: state = dfuERROR, status = 10
dfuERROR, clearing status
Determining device status: state = dfuIDLE, status = 0
dfuIDLE, continuing
DFU mode device DFU version 011a
Device returned transfer size 2048
DfuSe interface name: "Internal Flash "
Downloading to address = 0x08000000, size = 41824
Download [=========================] 100% 41824 bytes
Download done.
File downloaded successfully
Transitioning to dfuMANIFEST state
```
## Test It Out!

View File

@@ -66,8 +66,10 @@ You will need to install Git. It's very likely that you already have it, but if
Once you have set up your Linux/Unix environment, you are ready to download QMK. We will do this by using Git to "clone" the QMK repository. Open a Terminal or MSYS2 MinGW window and leave it open for the remainder of this guide. Inside that window run these two commands:
git clone https://github.com/qmk/qmk_firmware.git
cd qmk_firmware
```shell
git clone --recurse-submodules https://github.com/qmk/qmk_firmware.git
cd qmk_firmware
```
?> If you already know [how to use GitHub](getting_started_github.md), we recommend that you create and clone your own fork instead. If you don't know what that means, you can safely ignore this message.

View File

@@ -13,9 +13,9 @@ Note: These programs are not provided by or endorsed by QMK.
* [Keyboard Tester](http://www.keyboardtester.com) (Web Based)
* [Keyboard Checker](http://keyboardchecker.com) (Web Based)
## Debugging With QMK Toolbox
## Debugging
[QMK Toolbox](https://github.com/qmk/qmk_toolbox) will show messages from your keyboard if you have `CONSOLE_ENABLE = yes` in your `rules.mk`. By default the output is very limited, but you can turn on debug mode to increase the amount of debug output. Use the `DEBUG` keycode in your keymap, use the [Command](feature_command.md) feature to enable debug mode, or add the following code to your keymap.
Your keyboard will output debug information if you have `CONSOLE_ENABLE = yes` in your `rules.mk`. By default the output is very limited, but you can turn on debug mode to increase the amount of debug output. Use the `DEBUG` keycode in your keymap, use the [Command](feature_command.md) feature to enable debug mode, or add the following code to your keymap.
```c
void keyboard_post_init_user(void) {
@@ -27,6 +27,14 @@ void keyboard_post_init_user(void) {
}
```
### Debugging With QMK Toolbox
For compatible platforms, [QMK Toolbox](https://github.com/qmk/qmk_toolbox) can be used to display debug messages from your keyboard.
### Debugging With hid_listen
Prefer a terminal based solution? [hid_listen](https://www.pjrc.com/teensy/hid_listen.html), provided by PJRC, can also be used to display debug messages. Prebuilt binaries for Windows,Linux,and MacOS are available.
<!-- FIXME: Describe the debugging messages here. -->
## Sending Your Own Debug Messages
@@ -41,3 +49,51 @@ After that you can use a few different print functions:
* `uprintf("%s string", var)`: Print a formatted string
* `dprint("string")` Print a simple string, but only when debug mode is enabled
* `dprintf("%s string", var)`: Print a formatted string, but only when debug mode is enabled
## Debug Examples
Below is a collection of real world debugging examples. For additional information, refer to [Debugging/Troubleshooting QMK](faq_debug.md).
### Which matrix position is this keypress?
When porting, or when attempting to diagnose pcb issues, it can be useful to know if a keypress is scanned correctly. To enable logging for this scenario, add the following code to your keymaps `keymap.c`
```c
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
// If console is enabled, it will print the matrix position and status of each key pressed
#ifdef CONSOLE_ENABLE
uprintf("KL: kc: %u, col: %u, row: %u, pressed: %u\n", keycode, record->event.key.col, record->event.key.row, record->event.pressed);
#endif
return true;
}
```
Example output
```text
Waiting for device:.......
Listening:
KL: kc: 169, col: 0, row: 0, pressed: 1
KL: kc: 169, col: 0, row: 0, pressed: 0
KL: kc: 174, col: 1, row: 0, pressed: 1
KL: kc: 174, col: 1, row: 0, pressed: 0
KL: kc: 172, col: 2, row: 0, pressed: 1
KL: kc: 172, col: 2, row: 0, pressed: 0
```
### How long did it take to scan for a keypress?
When testing performance issues, it can be useful to know the frequency at which the switch matrix is being scanned. To enable logging for this scenario, add the following code to your keymaps `config.h`
```c
#define DEBUG_MATRIX_SCAN_RATE
```
Example output
```text
> matrix scan frequency: 315
> matrix scan frequency: 313
> matrix scan frequency: 316
> matrix scan frequency: 316
> matrix scan frequency: 316
> matrix scan frequency: 316
```

117
docs/other_vscode.md Normal file
View File

@@ -0,0 +1,117 @@
# Setting up Visual Studio Code for QMK Development
[Visual Studio Code](https://code.visualstudio.com/) (VS Code) is an open-source code editor that supports many different programming languages.
Using a full-featured editor such as VS Code provides many advantages over a plain text editor, such as:
* intelligent code completion
* convenient navigation in the code
* refactoring tools
* build automation (no need for the command-line)
* a graphical front end for GIT
* many other tools such as debugging, code formatting, showing call hierarchies etc.
The purpose of this page is to document how to set up VS Code for developing QMK Firmware.
This guide covers how to configure everything needed on Windows and Ubuntu 18.04
# Set up VS Code
Before starting, you will want to make sure that you have all of the build tools set up, and QMK Firmware cloned. Head to the the [Newbs Getting Started Guide](newbs_getting_started.md) to get things set up, if you haven't already.
## Windows
### Prerequisites
* [Git for Windows](https://git-scm.com/download/win) (This link will prompt to save/run the installer)
1. Disable all of the options but `Git LFS (Large File Support)` and `Check daily for Git for Windows updates`.
2. Set the default editor to `Use Visual Studio Code as Git's default editor`
3. Select the `Use Git from Git Bash only` option, since that's the option that you should use here.
4. For the `Choosing HTTPS transport backend`, either option should be fine.
5. Select the `Checkout as-is, commit Unix-style line endings` option. QMK Firmware uses Unix style commits.
6. For the extra options, leave the default options as is.
This software is needed for Git support in VS Code. It may be possible to not include this, but it is much simpler to just use this.
* [Git Credential Manager for Windows](https://github.com/Microsoft/Git-Credential-Manager-for-Windows/releases) (Optional)
This software provides better support for Git by providing secure storage for git credentials, MFA and personal access token generation.
This isn't strictly needed, but we would recommend it.
### Installing VS Code
1. Head to [VS Code](https://code.visualstudio.com/) and download the installer
2. Run the installer
This part is super simple. However, there is some configuration that we need to do to ensure things are configured correctly.
### Configuring VS Code
First, we need to set up IntelliSense. This isn't strictly required, but it will make your life a LOT easier. To do this, we need to create the `.vscode/c_cpp_properies.json` file in the QMK Firmware folder, You can do this all manually, but I've done most of the work already.
Grab [this file](https://gist.github.com/drashna/48e2c49ce877be592a1650f91f8473e8) and save it. You may need to edit this file, if you didn't install MSYS2 to the default location, or are using WSL/LxSS.
Once you have saved this file, you will need to reload VS Code, if it was already running.
?> You should see an `extensions.json` and `settings.json` file in the `.vscode` folder, as well.
Now, we will set up the MSYS2 window to show up in VSCode as the integrated terminal. This has a number of advantages. Mostly, you can control+click on errors and jump to those files. This makes debugging much easier. It's also nice, in that you don't have to jump to another window.
1. Click <kbd><kbd>File</kbd> > <kbd>Preferences ></kbd> > <kbd>Settings</kbd> </kbd>
2. Click on the <kbd>{}</kbd> button, in the top right to open the `settings.json` file.
3. Set the file's content to:
```json
{
"terminal.integrated.shell.windows": "C:\\msys64\\usr\\bin\\bash.exe",
"terminal.integrated.env.windows": {
"MSYSTEM": "MINGW64",
"CHERE_INVOKING": "1"
},
"terminal.integrated.shellArgs.windows": [
"--login"
],
"terminal.integrated.cursorStyle": "line"
}
```
If there are settings here already, then just add everything between the first and last curly brackets.
?> If you installed MSYS2 to a different folder, then you'll need to change the path for `terminal.integrated.shell.windows` to the correct path for your system.
4. Hit Ctrl-` (grave) to bring up the terminal.
This should start the terminal in the workspace's folder (so the `qmk_firmware` folder), and then you can compile your keyboard.
## Every other Operating System
1. Head to [VS Code](https://code.visualstudio.com/) and download the installer
2. Run the installer
3. That's it
No, really, that's it. The paths needed are already included when installing the packages, and it is much better about detecting the current workspace files and parsing them for IntelliSense.
## Plugins
There are a number of extensions that you may want to install:
* [Git Extension Pack](https://marketplace.visualstudio.com/items?itemName=donjayamanne.git-extension-pack) -
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.
* [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.
* [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.
* [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.
Restart once you've installed any extensions
# Configure VS Code for QMK
1. Click <kbd><kbd>File</kbd> > <kbd>Open Folder</kbd></kbd>
2. Open the QMK Firmware folder that you cloned from GitHub.
3. Click <kbd><kbd>File</kbd> > <kbd>Save Workspace As...</kbd></kbd>
And now you're ready to code QMK Firmware in VS Code

View File

@@ -1,15 +1,25 @@
Setting up your ARM based PCB is a little more involved than an Atmel MCU, but is easy enough. Start by using `util/new_project.sh <keyboard>` to create a new project:
Setting up your ARM based PCB is a little more involved than an Atmel MCU, but is easy enough. Start by running `util/new_keyboard.sh`:
```
$ util/new_project.sh simontester
######################################################
# /keyboards/simontester project created. To start
# working on things, cd into keyboards/simontester
######################################################
$ ./util/new_keyboard.sh
Generating a new QMK keyboard directory
Keyboard Name: mycoolkb
Keyboard Type [avr]:
Your Name [John Smith]:
Copying base template files... done
Copying avr template files... done
Renaming keyboard files... done
Replacing %KEYBOARD% with mycoolkb... done
Replacing %YOUR_NAME% with John Smith... done
Created a new keyboard called mycoolkb.
To start working on things, cd into keyboards/mycoolkb,
or open the directory in your favourite text editor.
```
# END OF NEW ARM DOC, OLD ATMEL DOC FOLLOWS
## `/keyboards/<keyboard>/config.h`
@@ -22,6 +32,8 @@ The `MATRIX_ROW_PINS` and `MATRIX_COL_PINS` are the pins your MCU uses on each r
For the `DIODE_DIRECTION`, most hand-wiring guides will instruct you to wire the diodes in the `COL2ROW` position, but it's possible that they are in the other - people coming from EasyAVR often use `ROW2COL`. Nothing will function if this is incorrect.
To configure a keyboard where each switch is connected to a separate pin and ground instead of sharing row and column pins, use `DIRECT_PINS`. The mapping defines the pins of each switch in rows and columns, from left to right. Must conform to the sizes within `MATRIX_ROWS` and `MATRIX_COLS`, use `NO_PIN` to fill in blank spaces. Overrides the behaviour of `DIODE_DIRECTION`, `MATRIX_ROW_PINS` and `MATRIX_COL_PINS`.
`BACKLIGHT_PIN` is the pin that your PWM-controlled backlight (if one exists) is hooked-up to. Currently only B5, B6, and B7 are supported.
`BACKLIGHT_BREATHING` is a fancier backlight feature that adds breathing/pulsing/fading effects to the backlight. It uses the same timer as the normal backlight. These breathing effects must be called by code in your keymap.
@@ -54,10 +66,10 @@ This is where all of the custom logic for your keyboard goes - you may not need
## `/keyboards/<keyboard>/<keyboard>.h`
Here is where you can (optionally) define your `KEYMAP` function to remap your matrix into a more readable format. With ortholinear boards, this isn't always necessary, but it can help to accommodate the dead spots on your matrix, where there are keys that take up more than one space (2u, staggering, 6.25u, etc). The example shows the difference between the physical keys, and the matrix design:
Here is where you can (optionally) define your `LAYOUT` function to remap your matrix into a more readable format. With ortholinear boards, this isn't always necessary, but it can help to accommodate the dead spots on your matrix, where there are keys that take up more than one space (2u, staggering, 6.25u, etc). The example shows the difference between the physical keys, and the matrix design:
```
#define KEYMAP( \
#define LAYOUT( \
k00, k01, k02, \
k10, k11 \
) \

View File

@@ -1,6 +1,6 @@
# Quantum Keycodes
Quantum keycodes allow for easier customisation of your keymap than the basic ones provide, without having to define custom actions.
Quantum keycodes allow for easier customization of your keymap than the basic ones provide, without having to define custom actions.
All keycodes within quantum are numbers between `0x0000` and `0xFFFF`. Within your `keymap.c` it may look like you have functions and other special cases, but ultimately the C preprocessor will translate those into a single 4 byte integer. QMK has reserved `0x0000` through `0x00FF` for standard keycodes. These are keycodes such as `KC_A`, `KC_1`, and `KC_LCTL`, which are basic keys defined in the USB HID specification.
@@ -16,6 +16,11 @@ On this page we have documented keycodes between `0x00FF` and `0xFFFF` which are
|`KC_GESC` |`GRAVE_ESC`|Escape when tapped, <code>&#96;</code> when pressed with Shift or GUI|
|`KC_LSPO` | |Left Shift when held, `(` when tapped |
|`KC_RSPC` | |Right Shift when held, `)` when tapped |
|`KC_LCPO` | |Left Control when held, `(` when tapped |
|`KC_RCPC` | |Right Control when held, `)` when tapped |
|`KC_LAPO` | |Left Alt when held, `(` when tapped |
|`KC_RAPC` | |Right Alt when held, `)` when tapped |
|`KC_SFTENT` | |Right Shift when held, Enter when tapped |
|`KC_LEAD` | |The [Leader key](feature_leader_key.md) |
|`KC_LOCK` | |The [Lock key](feature_key_lock.md) |
|`FUNC(n)` |`F(n)` |Call `fn_action(n)` (deprecated) |

View File

@@ -89,7 +89,7 @@ Once the layout is as desired, move to the Raw Data tab in KLE, and copy the con
To convert this data into our JSON, go to the [QMK KLE-JSON Converter](https://qmk.fm/converter/), paste the Raw Data into the Input field, and click the Convert button. After a moment, our JSON data will appear in the Output field. Copy the contents to a new text document, and name the document `info.json`, saving it in the same folder that contains `numpad.h`.
Use the `keyboard_name` object to set the name of the keyboard. The `bootloader` object is deprecated, so it can be deleted. For instruction purposes, we will put each key's object on its own line. This is only to make the file more human-readable, and does not affect the Configurator's functionality.
Use the `keyboard_name` object to set the name of the keyboard. For instruction purposes, we will put each key's object on its own line. This is only to make the file more human-readable, and does not affect the Configurator's functionality.
```json
{

View File

@@ -57,10 +57,10 @@ Matrix Scanning runs many times per second. The exact rate varies but typically
Once we know the state of every switch on our keyboard we have to map that to a keycode. In QMK this is done by making use of C macros to allow us to separate the definition of the physical layout from the definition of keycodes.
At the keyboard level we define a C macro (typically named `KEYMAP()`) which maps our keyboard's matrix to physical keys. Sometimes the matrix does not have a switch in every location, and we can use this macro to pre-populate those with KC_NO, making the keymap definition easier to work with. Here's an example `KEYMAP()` macro for a numpad:
At the keyboard level we define a C macro (typically named `LAYOUT()`) which maps our keyboard's matrix to physical keys. Sometimes the matrix does not have a switch in every location, and we can use this macro to pre-populate those with KC_NO, making the keymap definition easier to work with. Here's an example `LAYOUT()` macro for a numpad:
```c
#define KEYMAP( \
#define LAYOUT( \
k00, k01, k02, k03, \
k10, k11, k12, k13, \
k20, k21, k22, \
@@ -75,17 +75,17 @@ At the keyboard level we define a C macro (typically named `KEYMAP()`) which map
}
```
Notice how the second block of our `KEYMAP()` macro matches the Matrix Scanning array above? This macro is what will map the matrix scanning array to keycodes. However, if you look at a 17 key numpad you'll notice that it has 3 places where the matrix could have a switch but doesn't, due to larger keys. We have populated those spaces with `KC_NO` so that our keymap definition doesn't have to.
Notice how the second block of our `LAYOUT()` macro matches the Matrix Scanning array above? This macro is what will map the matrix scanning array to keycodes. However, if you look at a 17 key numpad you'll notice that it has 3 places where the matrix could have a switch but doesn't, due to larger keys. We have populated those spaces with `KC_NO` so that our keymap definition doesn't have to.
You can also use this macro to handle unusual matrix layouts, for example the [Clueboard rev 2](https://github.com/qmk/qmk_firmware/blob/e1203a222bb12ab9733916164a000ef3ac48da93/keyboards/clueboard/66/rev2/rev2.h). Explaining that is outside the scope of this document.
##### Keycode Assignment
At the keymap level we make use of our `KEYMAP()` macro above to map keycodes to physical locations to matrix locations. It looks like this:
At the keymap level we make use of our `LAYOUT()` macro above to map keycodes to physical locations to matrix locations. It looks like this:
```
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = KEYMAP(
[0] = LAYOUT(
KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS, \
KC_P7, KC_P8, KC_P9, KC_PPLS, \
KC_P4, KC_P5, KC_P6, \
@@ -94,7 +94,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
}
```
Notice how all of these arguments match up with the first half of the `KEYMAP()` macro from the last section? This is how we take a keycode and map it to our Matrix Scan from earlier.
Notice how all of these arguments match up with the first half of the `LAYOUT()` macro from the last section? This is how we take a keycode and map it to our Matrix Scan from earlier.
##### State Change Detection
@@ -135,9 +135,11 @@ The `process_record()` function itself is deceptively simple, but hidden within
* [`void process_record(keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/e1203a222bb12ab9733916164a000ef3ac48da93/tmk_core/common/action.c#L172)
* [`bool process_record_quantum(keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/e1203a222bb12ab9733916164a000ef3ac48da93/quantum/quantum.c#L206)
* [Map this record to a keycode](https://github.com/qmk/qmk_firmware/blob/e1203a222bb12ab9733916164a000ef3ac48da93/quantum/quantum.c#L226)
* [`void velocikey_accelerate(void)`](https://github.com/qmk/qmk_firmware/blob/c1c5922aae7b60b7c7d13d3769350eed9dda17ab/quantum/velocikey.c#L27)
* [`void preprocess_tap_dance(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/e1203a222bb12ab9733916164a000ef3ac48da93/quantum/process_keycode/process_tap_dance.c#L119)
* [`bool process_key_lock(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/e1203a222bb12ab9733916164a000ef3ac48da93/quantum/process_keycode/process_key_lock.c#L62)
* [`bool process_clicky(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/e1203a222bb12ab9733916164a000ef3ac48da93/quantum/process_keycode/process_clicky.c#L79)
* [`bool process_haptic(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/2cee371bf125a6ec541dd7c5a809573facc7c456/drivers/haptic/haptic.c#L216)
* [`bool process_record_kb(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/e1203a222bb12ab9733916164a000ef3ac48da93/keyboards/clueboard/card/card.c#L20)
* [`bool process_record_user(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/e1203a222bb12ab9733916164a000ef3ac48da93/keyboards/clueboard/card/keymaps/default/keymap.c#L58)
* [`bool process_rgb_matrix(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/e1203a222bb12ab9733916164a000ef3ac48da93/quantum/rgb_matrix.c#L139)

32
docs/zh-cn/README.md Normal file
View File

@@ -0,0 +1,32 @@
# QMK机械键盘固件
[![当前版本](https://img.shields.io/github/tag/qmk/qmk_firmware.svg)](https://github.com/qmk/qmk_firmware/tags)
[![开发状态](https://travis-ci.org/qmk/qmk_firmware.svg?branch=master)](https://travis-ci.org/qmk/qmk_firmware)
[![异议](https://img.shields.io/discord/440868230475677696.svg)](https://discord.gg/Uq7gcHh)
[![文档状态](https://img.shields.io/badge/docs-ready-orange.svg)](https://docs.qmk.fm)
[![GitHub贡献者](https://img.shields.io/github/contributors/qmk/qmk_firmware.svg)](https://github.com/qmk/qmk_firmware/pulse/monthly)
[![GitHub分支](https://img.shields.io/github/forks/qmk/qmk_firmware.svg?style=social&label=Fork)](https://github.com/qmk/qmk_firmware/)
## 什么是 QMK 固件?
QMK (*Quantum Mechanical Keyboard*) 是一个社区维护的开源软件,包括 QMK 固件, QMK 工具箱, qmk.fm网站, 和这些文档。QMK 固件是一个基于[tmk\_keyboard](http://github.com/tmk/tmk_keyboard)的键盘固件它在爱特梅尔AVR微控制器实现一些有用的功能,确切地说, 是在 [OLKB product line](http://olkb.com), 在 [ErgoDox EZ](http://www.ergodox-ez.com) 键盘, 和 [Clueboard product line](http://clueboard.co/). 上。它被移植到使用ChibiOS的ARM芯片上. 它可以在飞线键盘或定制PCB键盘中发挥功能.
## 如何得到它
如果你打算贡献布局, 键盘, 或者其他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克隆 (`git@github.com:qmk/qmk_firmware.git`), 或 https (`https://github.com/qmk/qmk_firmware.git`).
## 如何编译
在你能编译之前, 你需要[部署环境](getting_started_build_tools.md) 用于 AVR or/and ARM 开发。完成后, 你可以使用 `make` 命令来编译一个键盘和布局使用以下命令:
make planck/rev4:default
这将建立 `planck``rev4` 修订版本并使用 `default`布局。并非所有键盘都有修订版本 (也叫做子项目或文件夹),在此情况下,修订版本可以省略,如下:
make preonic:default
## 如何定制
QMK 有许多 [特性](features.md)来探索,也有很多 [参考文档](http://docs.qmk.fm) 供您发掘。你可以通过修改 [布局](keymap.md)和[键码](keycodes.md)来利用许多特性。

106
docs/zh-cn/_summary.md Normal file
View File

@@ -0,0 +1,106 @@
* [完全菜鸟指南](newbs.md)
* [入门](newbs_getting_started.md)
* [构建你的第一个固件](newbs_building_firmware.md)
* [刷新固件](newbs_flashing.md)
* [测试和调试](newbs_testing_debugging.md)
* [Git最佳实践](newbs_best_practices.md)
* [学习资源](newbs_learn_more_resources.md)
* [QMK基础](README.md)
* [QMK简介](getting_started_introduction.md)
* [向QMK贡献](contributing.md)
* [如何使用Github](getting_started_github.md)
* [获得帮助](getting_started_getting_help.md)
* [问题解答](faq.md)
* [一般问题](faq_general.md)
* [构建/编译](faq_build.md)
* [调试/故障排除](faq_debug.md)
* [键盘映射](faq_keymap.md)
* 详细指南
* [安装构建工具](getting_started_build_tools.md)
* [vagrant指南](getting_started_vagrant.md)
* [构建/编译指令](getting_started_make_guide.md)
* [刷新固件](flashing.md)
* [定制功能](custom_quantum_functions.md)
* [映射概述](keymap.md)
* [硬件](hardware.md)
* [AVR处理器](hardware_avr.md)
* [驱动](hardware_drivers.md)
* 参考
* [键盘指南](hardware_keyboard_guidelines.md)
* [配置选项](config_options.md)
* [键码](keycodes.md)
* [记录最佳实践](documentation_best_practices.md)
* [文档模板](documentation_templates.md)
* [术语表](reference_glossary.md)
* [单元测试](unit_testing.md)
* [有用的功能](ref_functions.md)
* [配置器支持](reference_configurator_support.md)
* [info.json 格式](reference_info_json.md)
* [特性](features.md)
* [基本键码](keycodes_basic.md)
* [US ANSI控制码](keycodes_us_ansi_shifted.md)
* [量子键码](quantum_keycodes.md)
* [高级键码](feature_advanced_keycodes.md)
* [音频](feature_audio.md)
* [自动shift](feature_auto_shift.md)
* [背光](feature_backlight.md)
* [蓝牙](feature_bluetooth.md)
* [热改键](feature_bootmagic.md)
* [组合](feature_combo)
* [命令](feature_command.md)
* [动态宏指令](feature_dynamic_macros.md)
* [编码器](feature_encoders.md)
* [重音号Esc复合键](feature_grave_esc.md)
* [自锁键](feature_key_lock.md)
* [布局](feature_layouts.md)
* [前导键](feature_leader_key.md)
* [LED阵列](feature_led_matrix.md)
* [宏指令](feature_macros.md)
* [鼠标键](feature_mouse_keys.md)
* [一键功能](feature_advanced_keycodes.md#one-shot-keys)
* [指针设备](feature_pointing_device.md)
* [PS/2鼠标](feature_ps2_mouse.md)
* [RGB灯光](feature_rgblight.md)
* [RGB矩阵](feature_rgb_matrix.md)
* [空格候补换挡](feature_space_cadet_shift.md)
* [空格候补换挡回车](feature_space_cadet_shift_enter.md)
* [速录机](feature_stenography.md)
* [换手](feature_swap_hands.md)
* [多击键](feature_tap_dance.md)
* [终端](feature_terminal.md)
* [热敏打印机](feature_thermal_printer.md)
* [Unicode](feature_unicode.md)
* [用户空间](feature_userspace.md)
* [速度键](feature_velocikey.md)
* 针对制造者和定制者
* [手工连线指南](hand_wire.md)
* [ISP刷新指南](isp_flashing_guide.md)
* [ARM调试指南](arm_debugging.md)
* [I2C驱动](i2c_driver.md)
* [GPIO控制器](internals_gpio_control.md)
* [Proton C转换](proton_c_conversion.md)
* 深入了解
* [键盘如何工作](how_keyboards_work.md)
* [理解QMK](understanding_qmk.md)
* 其他话题
* [使用Eclipse开发QMK](other_eclipse.md)
* [使用VSCode开发QMK](other_vscode.md)
* [支持](support.md)
* QMK 内构 (正在编写)
* [定义](internals_defines.md)
* [输入回调寄存器](internals_input_callback_reg.md)
* [Midi设备](internals_midi_device.md)
* [Midi设备设置过程](internals_midi_device_setup_process.md)
* [Midi工具库](internals_midi_util.md)
* [发送函数](internals_send_functions.md)
* [Sysex工具](internals_sysex_tools.md)

205
docs/zh-cn/contributing.md Normal file
View File

@@ -0,0 +1,205 @@
# 如何做贡献
👍🎉 首先感谢各位百忙之中抽空阅读本文档,并为我们无私奉献。给您点赞啦! 🎉👍
第三方的帮助让Q酱成长了许多呢Q酱也从你们那学到了不少新东西。Q酱希望每一个想帮助我的人都能很方便的做出有用的贡献。在这里我给摩拳擦掌的你们写了一点引导让你们的代码在不对我做重大改动的情况下都能成功的被采纳哦。
* [项目概况](#项目概况)
* [代码规范](#代码规范)
* [一般教程](#一般教程)
* [行为守则对于我来说有何意义?](#行为守则对于我来说有何意义?)
## 这文章巨长无比不想读啊! 我就想问个问题而已!
您要是想问关于Q酱的问题的话可以在[OLKB Subreddit](https://reddit.com/r/olkb)或者是[Discord](https://discord.gg/Uq7gcHh)随意问。
请记住:
* 维护Q酱的小可爱有的时候可能会有点忙不能及时回答您的问题耐心等等他们都是很nice的人呀。
* 维护Q酱的人都是很无私的善良的人。无论是贡献代码还是回答问题都是义务的。有时见到他们努力回答各种问题解决各种BUGQ酱也是很心疼的。
* 您可以看看下面的教程,可以让您的问题浅显易懂,更容易回答:
* https://opensource.com/life/16/10/how-ask-technical-questions
* http://www.catb.org/esr/faqs/smart-questions.html
# 项目概况
Q酱很大一部分是用C语言组成的不过有一小部分特性是C++的。怎么说呢都是我的一部分两个我都爱。Q酱一般是在键盘上的嵌入式处理器那里工作的尤其与AVR([LUFA](http://www.fourwalledcubicle.com/LUFA.php))和ARM ([ChibiOS](http://www.chibios.com))两小哥哥搭配干活不累嘻嘻。如果您精通Arduino的话您会发现很多熟悉的概念但也有点不爽因为您以前的经验可能没法用来帮助Q酱。
<!-- 需要修正: 这里放些学习C语言的资源。另外感谢修正的小可爱。谢谢您了。-->
# Q酱我在哪能帮助你嘞?
您要是有问题的话可以 [提出一个issue](https://github.com/qmk/qmk_firmware/issues) 或 [在Discord上交流一下](https://discord.gg/Uq7gcHh).
# Q酱我如何帮助你?
您以前是否没为开源贡献过代码而又想知道帮助Q酱是怎么一回事? 稍安勿躁,咱给您总结一下!
0. 先注册一个 [GitHub](https://github.com) 账户。
1. 做好一个你要贡献的布局,那就要 [找一个你想解决的问题](https://github.com/qmk/qmk_firmware/issues),或者 [找一个你想添加的特性](https://github.com/qmk/qmk_firmware/issues?q=is%3Aopen+is%3Aissue+label%3Afeature)。
2. 把关联着问题的仓库分叉fork到你的仓库。这样你在`你的GitHub用户名/qmk_firmware`就有一个仓库备份啦。
3. 使用 `git clone https://github.com/此处添GitHub用户名/此处添仓库名.git`这个命令把仓库同步到你的电脑中。
4. 您要是想开发一个新特性的话可以先创建一个issue和Q酱的维护者讨论一下您要做什么。
5. 使用`git checkout -b 此处写分支名字(别用汉字)`命令来创建一个分支branch用于开发。
6. 对要解决的问题或要添加的特性进行适当的更改。
7. 使用 `git add 把改变的文件的目录写这里` 可以添加改变的文件内容到git用于管理工程状态的索引快照里。
8. 使用 `git commit -m "这里写修改的相关信息"` 来描述你做出了什么修改。
9. 使用 `git push origin 此处写分支名字`来把你的更改同步到GitHub库里反正不是打篮球那个库里
10. 提交一个[QMK 固件的pull request](https://github.com/qmk/qmk_firmware/pull/new/master)。
11. 给你的pull request拟一个标题包括简短的描述和问题或错误代码。比如, 你可以起一个这样的"Added more log outputting to resolve #4352"最好用英语毕竟Q酱的中文也不是那么的溜有可能会看不懂中文
12. 在描述description里面写你做了哪些更改你的代码里还存在什么问题, 或者你想问维护的小可爱们的问题。你的your pull request有点小问题无伤大雅(本来也没有完美的代码嘛), 维护的小可爱们会竭尽全力帮您改进的!
13. 维护人员审查代码可能需要一些时间。
14. 维护人员会通知您要更改什么地方,然后您就按照建议改一改。
15. 预祝您合并成功!
# 代码规范
其实也没有什么特别严格的规范啦,但是俗话说的好:没有规矩,不成方圆。您可以看一下您的要改动的代码周围的画风,然后保持队形。如果你感觉周围都不知道是什么牛鬼蛇神的话就看看下面的建议:
* 我们用肆(4)个空格来缩进(软件中也可以设置到Tab键)
* 我们使用改良的1TBS(允许单行样式)
* 左大括号: 在开放性语句块那行的末尾
* 右大括号: 和开放性语句块第一个字母对齐
* Else If: 将右大括号放在行的开头,下一个左大括号放在同一行的结尾
* 可选大括号: 可选大括号是必选的
* 应该这样: if (condition) { return false; }
* 不应该这样: if (condition) return false;
* 建议使用C语言风格的注释: `/* */`
* 把注释想象成一个描述特征的故事
* 充分使用注释来描述你为何这样修改
* 有些公认的东西就不要写到注释里面了
* 如果你不知道注释是否多余,看下面
* 一般不要主动换行主动换行的话每行不要超过76列
* 要把 `#pragma once` 放到头文件的开始哦,抛弃老土的(`#ifndef THIS_FILE_H`, `#define THIS_FILE_H`, ..., `#endif`)吧
* 下面两种预处理命令都可以用: `#ifdef DEFINED` 还有 `#if defined(DEFINED)`
* 以上那句对处女座不是很友好哈,处女座的朋友们就别纠结了,直接 `#if defined(DEFINED)`
* 还有就是选好一种风格就一直用,一直用一直爽,不要朝三暮四, 除非你要变化到多重条件的 `#if`
* `#``if`要挨在一起哦,再让本空格在中间冒充电灯泡本空格会生气的。
* 以下是缩进规则:
* 首先考虑可读性,强迫症的朋友们总想要保持代码的高一致性,这样可不好。
* 保证文件已有风格不变。如果代码本来就是杂糅风格,那就见机行事,让你的修改更有意义些。
* 其实你也可以在缩进的时候看看周围其他代码,然后范水模山,预处理命令可以有自己的缩进风格。
可以参照下面:
```c
/* foo 的 Enums*/
enum foo_state {
FOO_BAR,
FOO_BAZ,
};
/* 有返回值的情况 */
int foo(void) {
if (some_condition) {
return FOO_BAR;
} else {
return -1;
}
}
```
# Clang-format的自动格式化
[Clang-format](https://clang.llvm.org/docs/ClangFormat.html) 是LLVM的一部分可以帮你自动格式化代码。我们给你准备好了一个适用于以上规范的配置文件会帮你调整缩进和换行你只需要写好括号就好。有了它你再也不用担心调整代码格式太耗时没有时间陪伴自己虚构的另一半了。
使用[LLVM 完整安装](http://llvm.org/builds/)可以在Windows上安装clang-format, Ubuntu用户要用`sudo apt install clang-format`
命令行的朋友们, 加上 `-style=file`选项就会自动在QMK的根目录寻找.clang-format配置文件了。
VSCode用户, 标准的 C/C++ 插件就支持clang-format, 或者可以用[独立扩展](https://marketplace.visualstudio.com/items?itemName=LLVMExtensions.ClangFormat)也行。
有些东西(比如LAYOUT宏) 会被clang-format打乱所以那些文件就别用clang-format了,这里就教您一个小窍门,在`// clang-format off``//clang-format on`之间装上会被搞乱的代码就好了。
# 一般教程
你可以给Q酱的不同部分添砖加瓦但也要用不同的方法严谨检查。不论你修改哪里最好还是看看下边。
* 将PRpull request分成一个个的逻辑单元。 比如不要一次将两个新特性PR出去。要添加的特性排好队一个一个来。
* 提交之前看一眼,`git diff --check`的空格一定要写对了
* 确定你的代码能通过编译
* 布局: 确定`make keyboard:your_new_keymap` 不返回错误
* 键盘: 确定 `make keyboard:all` 不返回错误
* 核心代码: 确定 `make all` 不返回错误
* 提交的信息尽量明确。第一行写点简短介绍(每行不多于70个英文字母), 第二行空着,第三行和后面就要写些必要的细节了。最好用英文写,比如:
```
Adjust the fronzlebop for the kerpleplork
The kerpleplork was intermittently failing with error code 23. The root cause was the fronzlebop setting, which causes the kerpleplork to activate every N iterations.
Limited experimentation on the devices I have available shows that 7 is high enough to avoid confusing the kerpleplork, but I'd like to get some feedback from people with ARM devices to be sure.
```
## 文档
想帮助Q酱当然是先看文档最简单了。找到这个文档哪里错了然后改正它对于你来说超级简单! 我们也对有写文档能力的人求贤若渴,如果你是对的人[点这个](#Q酱我在哪能帮助你嘞?)!
文档呢,都静静的放在`qmk_firmware/docs` 目录里, 也或者您想为网页做贡献的话也是可以的哦。
在文档中附代码案例时, 先观察文档其他地方的命名规范。比如, 把enums的名字都改成像`my_layers`或者`my_keycodes`来防止名字不一致的enums被当作特务枪毙:
```c
enum my_layers {
_FIRST_LAYER,
_SECOND_LAYER
};
enum my_keycodes {
FIRST_LAYER = SAFE_RANGE,
SECOND_LAYER
};
```
## 布局
大多数QMK新手都从创建一个自己的布局开始。我们尽力保证布局规范宽松 (毕竟布局是个性的体现) 不过建议遵守以下准则,这样可以让别人更好理解你的代码
* 用 [模板](documentation_templates.md)写个`readme.md`
* 所有的布局PR都会被squash, 如果你想知道你的提交是怎么被squash的那你就自己来吧
* 不要把新特性和布局一起PR。可以分别PR他们
* 布局文件夹就不要放`Makefile`了,这个操作都过时啦
* 更新文件头部的copyrights(看`%YOUR_NAME%`那)
## 键盘
QMK的最终归宿是键盘。有些键盘是社区维护的有一些是制作这些键盘的人维护的。`readme.md`会告诉你是谁维护了这个键盘,如果你对某个键盘有疑问,可以 [创建一个Issue](https://github.com/qmk/qmk_firmware/issues) 来问一问维护者。
我们建议你按下面的来操作:
* 用[模板](documentation_templates.md)写`readme.md`
* 提交数量尽量合理不然我们可就要把你的PR给squash了。
* 不要把新特性和新键盘一起PR。可以分别PR他们
* 用父文件夹的名字命名 `.c`/`.h`文件, 比如`/keyboards/<kb1>/<kb2>/<kb2>.[ch]`
* 键盘文件夹就不要放`Makefile`了,这个操作都过时啦
* 更新文件头部的copyrights(看`%YOUR_NAME%`那)
## Quantum/TMK 核心
在您废寝忘食地开发Q酱新特性或者帮Q酱驱虫之前一定要确保你的工作是有意义的。看看[了解QMK](understanding_qmk.md)你会对Q酱有更深的了解这个文档将带你领略QMK的程序流程。现在你应该和维护团对谈谈来了解实现你想法的最佳方法了。一下渠道都可以
* [在Discord交流](https://discord.gg/Uq7gcHh)
* [建立一个Issue](https://github.com/qmk/qmk_firmware/issues/new)
新特性和BUG的修复影响所有键盘。开发组也在翻修QMK。所以在实施重大返修之前一定要讨论一下。如果你在没有事先与维护团队沟通的情况下提交了一个PR而且你的选择与维护团队的计划方向不符那你可能要面临大改了。
修复BUG或者开发新特性之前看看这个
* **默认不启用** - QMK运行的芯片多数内存有限所以首要考虑的还应该是布局不要被破坏于是特性默认是不启用的。你喜欢什么特性的话就打开它如果你觉得有些特性应该默认开启或者你能帮助缩减代码那就联系维护组吧。
* **提交之前在本地编译** - 这个简直就是家喻户晓了,但是也确实需要编译啊! 我们的Travis系统会发现一切问题但是自己编译一下可要比在线等快多了。
* **注意版本和芯片平台** - 有那么几个键盘有支持不同配置甚至是不同芯片的版本。试着写一个能AVR和ARM两个平台运行的特性或者在不支持的平台自动禁用。
* **解释你的新特性** - 在`docs/`写个文档, 你可以创建新文档或者写到现有文档中。如果你不把它记录下来,其他人就无法从你的努力中获益。
也可以看看以下建议:
* 提交数量尽量合理不然我们可就要把你的PR给squash了。
* 不要把新特性、布局和键盘一起PR。可以分别PR他们。
* 给你的特性写[单元测试](unit_testing.md)。
* 你编辑的文件风格要一致,如果风格不明确或者是混搭风的,你就要先看看[代码规范](#代码规范)确认情况。
## 重构
为了保持QMK脉络清晰Q酱打算深入规划重构一下自己然后让合作者进行修改。如果你有重构的思路或建议[创建一个issue](https://github.com/qmk/qmk_firmware/issues), Q酱很乐意讨论一下怎么改进一下。
# 行为守则对于我来说有何意义?
我们的[行为守则](https://github.com/qmk/qmk_firmware/blob/master/CODE_OF_CONDUCT.md) 是说明您有责任尊重和礼貌地对待项目中的每个人,无论他们的身份如何。 如果你是我们行为准则所描述的不当行为的受害者,我们将站在你这边,并按照行为准则对施暴者进行适当谴责。

View File

@@ -0,0 +1,490 @@
# <20><><EFBFBD>ζ<EFBFBD><CEB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̵Ĺ<CCB5><C4B9><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD>ںܶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD><EFBFBD>ƻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>̿ɲ<EFBFBD>ֻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD><EFBFBD>Է<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ǹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ô<EFBFBD>򵥡<EFBFBD><EFBFBD><EFBFBD><EFBFBD>϶<EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD>ֱȼ򵥰<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͺ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӵĹ<EFBFBD><EFBFBD>ܡ<EFBFBD>QMK<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ע<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĺ<EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD>ǹ<EFBFBD><C7B9><EFBFBD>, <20><><EFBFBD><EFBFBD><E2A3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD>ͬ<EFBFBD><CDAC><EFBFBD><EFBFBD><EFBFBD>µ<EFBFBD><C2B5><EFBFBD>Ϊ<EFBFBD><CEAA>
<EFBFBD><EFBFBD>ҳ<EFBFBD><EFBFBD><EFBFBD>ٶ<EFBFBD><EFBFBD>κ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>QMK֪ʶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ķ<EFBFBD>[<EFBFBD><EFBFBD><EFBFBD><EFBFBD>QMK](understanding_qmk.md)<29><><EFBFBD><EFBFBD><EFBFBD>ڸ<EFBFBD><DAB8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>IJ<EFBFBD><C4B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E2B7A2><EFBFBD><EFBFBD>ʲô<CAB2><C3B4>
## A Word on Core vs <20><><EFBFBD><EFBFBD> vs <20><><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD>qmk<EFBFBD><EFBFBD>֯<EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ν<EFBFBD><EFBFBD>
* Core (`_quantum`)
* Keyboard/Revision (`_kb`)
* Keymap (`_user`)
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ÿһ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϼ<EFBFBD>һ<EFBFBD><EFBFBD>`_kb()`<EFBFBD><EFBFBD> `_user()` <20><>׺<EFBFBD><D7BA> <20><><EFBFBD><EFBFBD><EFBFBD>ڼ<EFBFBD><DABC><EFBFBD>/<2F>޶<EFBFBD><DEB6><EFBFBD>ʹ<EFBFBD><CAB9>`_kb()`<EFBFBD><EFBFBD>׺<EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><EFBFBD>ֲ<EFBFBD>ʹ<EFBFBD><EFBFBD>`_user()`<EFBFBD><EFBFBD>׺<EFBFBD><EFBFBD>
<EFBFBD>ڼ<EFBFBD><EFBFBD><EFBFBD>/<2F>޶<EFBFBD><DEB6><EFBFBD><EFBFBD><E5BAAF>ʱ<EFBFBD><CAB1>`_kb()`<EFBFBD><EFBFBD>ִ<EFBFBD><EFBFBD><EFBFBD>κδ<EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD>ȵ<EFBFBD><EFBFBD><EFBFBD>`_user()`<EFBFBD>DZ<EFBFBD>Ҫ<EFBFBD>ģ<EFBFBD><EFBFBD><EFBFBD>Ȼ<EFBFBD><EFBFBD><EFBFBD>ֲ㺯<EFBFBD><EFBFBD><EFBFBD>Ͳ<EFBFBD>Ҫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>á<EFBFBD>
<!-- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E2A3BA><EFBFBD><EFBFBD><EFBFBD>Ǿ䷭<C7BE><E4B7AD><EFBFBD>IJ<EFBFBD>̫<EFBFBD><CCAB>-->
# <20>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD>ĿǰΪֹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ǹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>м<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD>򴴽<EFBFBD><EFBFBD>µļ<EFBFBD><EFBFBD><EFBFBD>Ӵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƕ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Щ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ơ<EFBFBD>
## <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>¼<EFBFBD><C2BC><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ö<EFBFBD>ٳ<EFBFBD><EFBFBD><EFBFBD>ȫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҳ<EFBFBD><EFBFBD><EFBFBD>Ǹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ψһ<EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD>QMKû<EFBFBD><EFBFBD>ֱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD>С<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>`SAFE_RANGE`<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ö<EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>`SAFE_RANGE`<EFBFBD><EFBFBD><EFBFBD><EFBFBD>֤<EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ψһ<EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ö<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD>`keymap.c`<EFBFBD>Ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>`FOO`<EFBFBD><EFBFBD>`BAR`<EFBFBD>ˡ<EFBFBD>
```c
enum my_keycodes {
FOO = SAFE_RANGE,
BAR
};
```
## Ϊ<><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD><EFBFBD>ڰ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD>`process_record_kb()`<EFBFBD><EFBFBD>`process_record_user()`<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><EFBFBD>QMK<EFBFBD><EFBFBD><EFBFBD>á<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>`true`<EFBFBD><EFBFBD>QMK<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ķ<EFBFBD>ʽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ժܷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>չ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĺ<EFBFBD><EFBFBD>ܶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>`false` QMK<4D><4B><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȼ<EFBFBD><C8BB><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD>̧<EFBFBD><CCA7><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ˡ<EFBFBD>
<EFBFBD><EFBFBD>ij<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>»<EFBFBD><EFBFBD>ͷ<EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>á<EFBFBD>
### process_record_user()`<60><><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE>ʵ<EFBFBD><CAB5>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¡<EFBFBD><EFBFBD>Զ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>`FOO`<EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڰ<EFBFBD><EFBFBD>»س<EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
```c
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
switch (keycode) {
case FOO:
if (record->event.pressed) {
// <20><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>Щʲô
} else {
// <20>ͷ<EFBFBD>ʱ<EFBFBD><CAB1>Щʲô
}
return false; // <20><><EFBFBD><EFBFBD><EFBFBD>˼<EFBFBD><CBBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>н<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
case KC_ENTER:
// <20><><EFBFBD><EFBFBD><EFBFBD>»س<C2BB>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (record->event.pressed) {
PLAY_NOTE_ARRAY(tone_qwerty);
}
return true; // <20><>QMK<4D><4B><EFBFBD><EFBFBD><EFBFBD>س<EFBFBD><D8B3><EFBFBD><EFBFBD><EFBFBD>/<2F>ͷ<EFBFBD><CDB7>¼<EFBFBD>
default:
return true; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
}
```
### `process_record_*` <20><><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD>
* <20><><EFBFBD><EFBFBD>/<2F>޶<EFBFBD>: `bool process_record_kb(uint16_t keycode, keyrecord_t *record)`
* <20><><EFBFBD><EFBFBD>: `bool process_record_user(uint16_t keycode, keyrecord_t *record)`
`keycode(<28><><EFBFBD><EFBFBD>)`<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>϶<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>`MO(1)`, `KC_L`, <20>ȵȡ<C8B5> <20><>Ҫ<EFBFBD><D2AA> `switch...case` <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Щ<EFBFBD>¼<EFBFBD><C2BC><EFBFBD>
`record`<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD>ʰ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD>
```c
keyrecord_t record {
keyevent_t event {
keypos_t key {
uint8_t col
uint8_t row
}
bool pressed
uint16_t time
}
}
```
# LED<45><44><EFBFBD><EFBFBD>
qmk<EFBFBD><EFBFBD>˶<EFBFBD>ȡHID<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>5<EFBFBD><EFBFBD>LED<EFBFBD>ķ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:
* `USB_LED_NUM_LOCK`
* `USB_LED_CAPS_LOCK`
* `USB_LED_SCROLL_LOCK`
* `USB_LED_COMPOSE`
* `USB_LED_KANA`
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>LED״̬<EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ի<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>LED״̬<EFBFBD><EFBFBD>
* ͨ<><CDA8>ִ<EFBFBD><D6B4> `led_set_user()`
* ͨ<><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD> `host_keyboard_leds()`
## `led_set_user()`
<EFBFBD><EFBFBD>5<EFBFBD><EFBFBD>LED<EFBFBD><EFBFBD><EFBFBD>κ<EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬<EFBFBD><EFBFBD>Ҫ<EFBFBD>ı<EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD>˺<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>á<EFBFBD><EFBFBD>˺<EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>LED<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ʹ<EFBFBD><EFBFBD>`IS_LED_ON(usb_led, led_name)`<EFBFBD><EFBFBD>`IS_LED_OFF(usb_led, led_name)`<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>LED״̬<EFBFBD><EFBFBD>
!> `host_keyboard_leds()`<EFBFBD><EFBFBD><EFBFBD>ܻ<EFBFBD><EFBFBD><EFBFBD>`led_set_user()`<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD>
### `led_set_user()`<60><><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE>ʵ<EFBFBD><CAB5>
```c
void led_set_user(uint8_t usb_led) {
if (IS_LED_ON(usb_led, USB_LED_NUM_LOCK)) {
writePinLow(B0);
} else {
writePinHigh(B0);
}
if (IS_LED_ON(usb_led, USB_LED_CAPS_LOCK)) {
writePinLow(B1);
} else {
writePinHigh(B1);
}
if (IS_LED_ON(usb_led, USB_LED_SCROLL_LOCK)) {
writePinLow(B2);
} else {
writePinHigh(B2);
}
if (IS_LED_ON(usb_led, USB_LED_COMPOSE)) {
writePinLow(B3);
} else {
writePinHigh(B3);
}
if (IS_LED_ON(usb_led, USB_LED_KANA)) {
writePinLow(B4);
} else {
writePinHigh(B4);
}
}
```
### `led_set_*`<60><><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD>
* <20><><EFBFBD><EFBFBD>/<2F>޶<EFBFBD>: `void led_set_kb(uint8_t usb_led)`
* <20><><EFBFBD><EFBFBD>: `void led_set_user(uint8_t usb_led)`
## `host_keyboard_leds()`
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><EFBFBD><EFBFBD>LED״̬<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>`led_set_*`֮<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡLED״̬ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>[`matrix_scan_user()`](#<23><><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>).
Ϊ<EFBFBD>˱<EFBFBD><EFBFBD>ݣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>`IS_HOST_LED_ON(led_name)`<EFBFBD><EFBFBD>`IS_HOST_LED_OFF(led_name)` <20><EFBFBD><EAA3AC><EFBFBD><EFBFBD>ֱ<EFBFBD>ӵ<EFBFBD><D3B5>úͼ<C3BA><CDBC><EFBFBD>`host_keyboard_leds()`<EFBFBD><EFBFBD>
## <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>LED״̬
һЩ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>LED<EFBFBD><EFBFBD>״̬<EFBFBD><EFBFBD>˷<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ķ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
### Ergodox Boards
Ergodoxʵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>`ergodox_right_led_1`/`2`/`3_on`/`off()`<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ÿ<EFBFBD><EFBFBD>LED<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, Ҳ<><D2B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD> `ergodox_right_led_on`/`off(uint8_t led)` <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>򿪻<EFBFBD><F2BFAABB>ر<EFBFBD><D8B1><EFBFBD><EFBFBD>ǡ<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><EFBFBD>`ergodox_led_all_set(uint8_t n)`ָ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>LED<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ÿ<EFBFBD><EFBFBD>LED<EFBFBD><EFBFBD>`ergodox_right_led_1`/`2`/`3_set(uint8_t n)`<EFBFBD><EFBFBD>ʹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ļ<EFBFBD><EFBFBD><EFBFBD>`ergodox_right_led_set(uint8_t led, uint8_t n)`<EFBFBD><EFBFBD>
Ergodox boards ͬʱ<CDAC><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȼ<EFBFBD><C8BC><EFBFBD>`LED_BRIGHTNESS_LO`<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȼ<EFBFBD><EFBFBD><EFBFBD>`LED_BRIGHTNESS_HI`<><C4AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>).
# <20><><EFBFBD>̳<EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD>̳<EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>м<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ǹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD>ʲô<EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˳<EFBFBD><EFBFBD><EFBFBD>г<EFBFBD><EFBFBD><EFBFBD>
* `keyboard_pre_init_*` - <20><><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Щ<EFBFBD><D0A9>Ҫ<EFBFBD><D2AA>ǰ<EFBFBD><C7B0><EFBFBD>е<EFBFBD>Ӳ<EFBFBD><D3B2><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>
* `matrix_init_*` - <20>ڹ̼<DAB9><CCBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>м䱻<D0BC><E4B1BB><EFBFBD>á<EFBFBD><C3A1><EFBFBD>ʱӲ<CAB1><D3B2><EFBFBD>ѳ<EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD><CEB4>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>
* `keyboard_post_init_*` - <20>ڹ̼<DAB9><CCBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>󱻵<EFBFBD><F3B1BBB5>á<EFBFBD><C3A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>£<EFBFBD><C2A3><EFBFBD><EFBFBD>ġ<EFBFBD><C4A1><EFBFBD><EFBFBD>ƻ<EFBFBD><C6BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EBB6BC><EFBFBD>Է<EFBFBD><D4B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
!> <20><><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵`keyboard_post_init_user`<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD><EFBFBD>õĺ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>RGB<47>Ʒ<EFBFBD><C6B7>
## <20><><EFBFBD><EFBFBD>Ԥ<EFBFBD><D4A4>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>У<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>USB<EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>ǰ<EFBFBD><EFBFBD><EFBFBD>С<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>֮<EFBFBD>󲻾þ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͱ<EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD>ˡ<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><EFBFBD><EFBFBD>˵,<2C><><EFBFBD>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӳ<EFBFBD><D3B2><EFBFBD>ij<EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD>Ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٺò<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>LED<45><44><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>).
### `keyboard_pre_init_user()`<60><><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE>ʵ<EFBFBD><CAB5>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڼ<EFBFBD><EFBFBD>̼<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>趨 B0, B1, B2, B3, <20><> B4 <20><>LED<45><44><EFBFBD>š<EFBFBD>
```c
void keyboard_pre_init_user(void) {
// <20><><EFBFBD>ü<EFBFBD><C3BC><EFBFBD>Ԥ<EFBFBD><D4A4>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>LED<45><44><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>ģʽ
setPinOutput(B0);
setPinOutput(B1);
setPinOutput(B2);
setPinOutput(B3);
setPinOutput(B4);
}
```
### `keyboard_pre_init_*` <20><><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD>
* <20><><EFBFBD><EFBFBD>/<2F>޶<EFBFBD>: `void keyboard_pre_init_kb(void)`
* <20><><EFBFBD><EFBFBD>: `void keyboard_pre_init_user(void)`
## <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ھ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><EFBFBD><EFBFBD>ijЩӲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>úú󣬵<EFBFBD><EFBFBD><EFBFBD>һЩ<EFBFBD><EFBFBD><EFBFBD>ܱ<EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>ǰ<EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ط<EFBFBD><EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD><EFBFBD>Ķ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӳ<EFBFBD><EFBFBD><EFBFBD>޹أ<EFBFBD>Ҳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD>á<EFBFBD>
### `matrix_init_*`<60><><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD>
* <20><><EFBFBD><EFBFBD>/<2F>޶<EFBFBD>: `void matrix_init_kb(void)`
* <20><><EFBFBD><EFBFBD>: `void matrix_init_user(void)`
## <20><><EFBFBD>̺<EFBFBD><CCBA><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD>Ǽ<EFBFBD><EFBFBD>̳<EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ijЩ<EFBFBD><EFBFBD><EFBFBD>ԣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD>ʱӦ<EFBFBD>ö<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǽ<EFBFBD><EFBFBD>г<EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
### `keyboard_post_init_user()`ʾ<><CABE>ʵ<EFBFBD><CAB5>
<EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>г<EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɺ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>У<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>RGB<EFBFBD>ơ<EFBFBD>
```c
void keyboard_post_init_user(void) {
// <20><><EFBFBD>ú<EFBFBD><C3BA><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
rgblight_enable_noeeprom(); // ʹ<><CAB9>Rgb<67><62><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
rgblight_sethsv_noeeprom(180, 255, 255); // <20><><EFBFBD><EFBFBD>ɫ<EFBFBD><C9AB><EFBFBD>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD>ɫ(<28><>ɫ)<29><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
rgblight_mode_noeeprom(RGBLIGHT_MODE_BREATHING + 3); // <20><><EFBFBD>ÿ<EFBFBD><C3BF>ٺ<EFBFBD><D9BA><EFBFBD>ģʽ<C4A3><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
```
### `keyboard_post_init_*` <20><><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD>
* <20><><EFBFBD><EFBFBD>/<2F>޶<EFBFBD>: `void keyboard_post_init_kb(void)`
* <20><><EFBFBD><EFBFBD>: `void keyboard_post_init_user(void)`
# <20><><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD>ܵĻ<EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD>`process_record_*()`<EFBFBD>Զ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̣<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD>ʽ<EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD><EFBFBD>¼<EFBFBD><EFBFBD>У<EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD><EFBFBD>̲<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӱ<EFBFBD>졣Ȼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>£<EFBFBD><EFBFBD>б<EFBFBD>Ҫ<EFBFBD><EFBFBD><EFBFBD>о<EFBFBD><EFBFBD><EFBFBD>ɨ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Щ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD>ر<EFBFBD>ע<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܣ<EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD>ÿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>10<EFBFBD>Ρ<EFBFBD>
### `matrix_scan_*`ʾ<><CABE>ʵ<EFBFBD><CAB5>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʡ<EFBFBD><EFBFBD><EFBFBD>ˡ<EFBFBD><EFBFBD><EFBFBD>hook<EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֮ǰ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>˽<EFBFBD>qmk<EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ա<EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>±<EFBFBD>д<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>[<EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>issue](https://github.com/qmk/qmk_firmware/issues/new)<29><>[<EFBFBD><EFBFBD>Discord<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǽ<EFBFBD><EFBFBD><EFBFBD>](https://discord.gg/Uq7gcHh).
### `matrix_scan_*` <20><><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD>
* <20><><EFBFBD><EFBFBD>/<2F>޶<EFBFBD>: `void matrix_scan_kb(void)`
* <20><><EFBFBD><EFBFBD>: `void matrix_scan_user(void)`
<EFBFBD>ú<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ÿ<EFBFBD>ξ<EFBFBD><EFBFBD><EFBFBD>ɨ<EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>MCU<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͬ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>кܶ<EFBFBD><EFBFBD>Ρ<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɨ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD>õ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><EFBFBD><EFBFBD>״̬<EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD>LED<45>ƻ<EFBFBD><C6BB><EFBFBD><EFBFBD><EFBFBD>Ļ)<29><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҳ<EFBFBD><EFBFBD><EBB6A8><EFBFBD><EFBFBD><EFBFBD>еĹ<D0B5><C4B9>ܡ<EFBFBD>
# <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>/<2F><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֧<EFBFBD>־Ϳ<EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><EFBFBD>ֹͣһ<EFBFBD><EFBFBD>Ʊ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ﵽ"<22><><EFBFBD><EFBFBD>"<22><>RGB<47>ƺͱ<C6BA><CDB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ǻܺõ<DCBA><C3B5><EFBFBD><EFBFBD>ӡ<EFBFBD><D3A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Խ<EFBFBD>Լ<EFBFBD>ܺģ<DCBA>Ҳ<EFBFBD><D2B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̷<EFBFBD>ζ<EFBFBD><CEB6><EFBFBD>ѡ<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: `suspend_power_down_*`<EFBFBD><EFBFBD>`suspend_wakeup_init_*`, <20>ֱ<EFBFBD><D6B1><EFBFBD>ϵͳ<CFB5><CDB3><EFBFBD><EFBFBD><EFBFBD>кͻ<D0BA><CDBB><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>á<EFBFBD>
### suspend_power_down_user()<29><>suspend_wakeup_init_user()ʾ<><CABE>ʵ<EFBFBD><CAB5>
```c
void suspend_power_down_user(void) {
rgb_matrix_set_suspend_state(true);
}
void suspend_wakeup_init_user(void) {
rgb_matrix_set_suspend_state(false);
}
```
### <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>/<2F><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD>
* <20><><EFBFBD><EFBFBD>/<2F>޶<EFBFBD>: `void suspend_power_down_kb(void)` <20><>`void suspend_wakeup_init_user(void)`
* <20><><EFBFBD><EFBFBD>: `void suspend_power_down_kb(void)` <20><> `void suspend_wakeup_init_user(void)`
# <20><><EFBFBD>ı<EFBFBD><C4B1><EFBFBD><EFBFBD><EFBFBD>
ÿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ı<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD>ָʾ<EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>á<EFBFBD>
### `layer_state_set_*` ʾ<><CABE>ʵ<EFBFBD><CAB5>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Planck<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> [RGB<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>](feature_rgblight.md)ʹ֮<CAB9><D6AE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ
```c
uint32_t layer_state_set_user(uint32_t state) {
switch (biton32(state)) {
case _RAISE:
rgblight_setrgb (0x00, 0x00, 0xFF);
break;
case _LOWER:
rgblight_setrgb (0xFF, 0x00, 0x00);
break;
case _PLOVER:
rgblight_setrgb (0x00, 0xFF, 0x00);
break;
case _ADJUST:
rgblight_setrgb (0x7A, 0x00, 0xFF);
break;
default: // for any other layers, or the default layer
rgblight_setrgb (0x00, 0xFF, 0xFF);
break;
}
return state;
}
```
### `layer_state_set_*` <20><><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD>
* <20><><EFBFBD><EFBFBD>/<2F>޶<EFBFBD>: `uint32_t layer_state_set_kb(uint32_t state)`
* <20><><EFBFBD><EFBFBD>: `uint32_t layer_state_set_user(uint32_t state)`
<EFBFBD><EFBFBD>`״̬`<EFBFBD>ǻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>bitmask, <20><><EFBFBD><EFBFBD>[<EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD><EFBFBD>](keymap.md#<23><><EFBFBD>ֵIJ<D6B5>״̬)
# <20><><EFBFBD><EFBFBD><E7B1A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (EEPROM)
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ó<EFBFBD><EFBFBD>ڵı<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD><EFBFBD><EFBFBD>Щ<EFBFBD><EFBFBD><EFBFBD>ñ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD>EEPROM<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><EFBFBD> <20><><EFBFBD>ÿ<EFBFBD><C3BF><EFBFBD><EFBFBD><EFBFBD>`eeconfig_read_kb`<EFBFBD><EFBFBD>`eeconfig_read_user`<EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>`eeconfig_update_kb`<EFBFBD><EFBFBD>`eeconfig_update_user`д<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD><EFBFBD><EFBFBD>ܹ<EFBFBD><EFBFBD>л<EFBFBD><EFBFBD>Ĺ<EFBFBD><EFBFBD>ܺ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD><EFBFBD>л<EFBFBD>RGB<47><42>ָʾ<D6B8><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E2A3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>`eeconfig_init_kb`<EFBFBD><EFBFBD>`eeconfig_init_user`<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>EEPROMĬ<EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD>
<EFBFBD><EFBFBD>ӵIJ<EFBFBD><EFBFBD>ֿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǣ<EFBFBD><EFBFBD>кܶ෽<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><EFBFBD>EEPROM<EFBFBD><EFBFBD>ͷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҳ<EFBFBD>û<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD><EFBFBD><EFBFBD>ġ<EFBFBD><EFBFBD><EFBFBD>ÿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>˫<EFBFBD><EFBFBD>(<28><><EFBFBD>ֽ<EFBFBD>)<29>ռ
<EFBFBD><EFBFBD>סEEPROM<EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ġ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܸߣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Dz<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><EFBFBD>EEPROM<EFBFBD>С<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><EFBFBD>Ƶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>MCU<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̡<EFBFBD>
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӣ<EFBFBD><D3A3><EFBFBD>ô<EFBFBD><C3B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD><CFA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԣ<EFBFBD><D4A3><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><E0B5B1><EFBFBD>ӡ<EFBFBD>
### ʾ<><CABE>ʵ<EFBFBD><CAB5>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҷ<EFBFBD>д<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><EFBFBD><EFBFBD><EFBFBD>֡<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӵĺ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>кܶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><EFBFBD><EFBFBD>˺ܶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>keymap.c<>ļ<EFBFBD><C4BC>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>´<EFBFBD><C2B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:
```c
typedef union {
uint32_t raw;
struct {
bool rgb_layer_change :1;
};
} user_config_t;
user_config_t user_config;
```
<EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ýṹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ洢<EFBFBD><EFBFBD><EFBFBD>ò<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><EFBFBD>EEPROM<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD>ڽṹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȼ<EFBFBD><EFBFBD><EFBFBD>塣Ҫ<EFBFBD><EFBFBD>ס`bool` (<28><><EFBFBD><EFBFBD>ʹ<D6B5><CAB9>1λ, `uint8_t`ʹ<EFBFBD><EFBFBD>8λ, `uint16_t`ʹ<EFBFBD><EFBFBD>16λ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ի<EFBFBD><EFBFBD>ϴ<EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD>ã<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˳<EFBFBD><EFBFBD><EFBFBD>Ǵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD>ǻ<EFBFBD><EFBFBD>ı<EFBFBD>д<EFBFBD><EFBFBD>д<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD>
`layer_state_set_*`<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>`rgb_layer_change`<EFBFBD><EFBFBD>ʹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>`keyboard_post_init_user`<EFBFBD><EFBFBD>`process_record_user`<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD>С<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫʹ<EFBFBD><EFBFBD>`keyboard_post_init_user<65><72><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>`eeconfig_read_user()`<60><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ոմ<D5B8><D5B4><EFBFBD><EFBFBD>Ľṹ<C4BD>塣Ȼ<E5A1A3><C8BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E1B9B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>IJ<EFBFBD><C4B2><EFBFBD><EFBFBD>еĹ<D0B5><C4B9>ܡ<EFBFBD><DCA1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
```c
void keyboard_post_init_user(void) {
// <20><><EFBFBD>ò<EFBFBD><C3B2>ּ<EFBFBD><D6BC><EFBFBD><EFBFBD>ľ<EFBFBD><C4BE><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>
// <20><>EEPROM<4F><4D><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>
user_config.raw = eeconfig_read_user();
// <20><>ʹ<EFBFBD>ܣ<EFBFBD><DCA3><EFBFBD><EFBFBD><EFBFBD>Ĭ<EFBFBD>ϲ<EFBFBD>
if (user_config.rgb_layer_change) {
rgblight_enable_noeeprom();
rgblight_sethsv_noeeprom_cyan();
rgblight_mode_noeeprom(1);
}
}
```
<EFBFBD><EFBFBD><EFBFBD>Ϻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڶ<EFBFBD>EEPROM<EFBFBD><EFBFBD><EFBFBD>ú<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD>ø<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĭ<EFBFBD>ϲ<EFBFBD>RGB<EFBFBD><EFBFBD>ɫ<EFBFBD><EFBFBD>"raw"<22><>ֵ<EFBFBD>Ǵ<EFBFBD><C7B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"union"<22><><EFBFBD><EFBFBD><EFBFBD>Ľṹ<C4BD><E1B9B9><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD>ġ<EFBFBD>
```c
uint32_t layer_state_set_user(uint32_t state) {
switch (biton32(state)) {
case _RAISE:
if (user_config.rgb_layer_change) { rgblight_sethsv_noeeprom_magenta(); rgblight_mode_noeeprom(1); }
break;
case _LOWER:
if (user_config.rgb_layer_change) { rgblight_sethsv_noeeprom_red(); rgblight_mode_noeeprom(1); }
break;
case _PLOVER:
if (user_config.rgb_layer_change) { rgblight_sethsv_noeeprom_green(); rgblight_mode_noeeprom(1); }
break;
case _ADJUST:
if (user_config.rgb_layer_change) { rgblight_sethsv_noeeprom_white(); rgblight_mode_noeeprom(1); }
break;
default: // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĭ<EFBFBD>ϲ<EFBFBD>
if (user_config.rgb_layer_change) { rgblight_sethsv_noeeprom_cyan(); rgblight_mode_noeeprom(1); }
break;
}
return state;
}
```
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵʹ<EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD>ı<EFBFBD>RGB<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ơ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ, Ϊ`process_record_user`<60><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>`RGB_LYR`<60><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫȷ<D2AA><C8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>RGB<47><42><EFBFBD>ʹ<EBA3AC><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>رգ<D8B1><D5A3><EFBFBD><EBBDAB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>
```c
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
switch (keycode) {
case FOO:
if (record->event.pressed) {
// <20><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>ʲô
} else {
// <20>ͷ<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>ʲô
}
return false; // <20><><EFBFBD><EFBFBD><EFBFBD>˼<EFBFBD><CBBC>Ľ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
case KC_ENTER:
// <20>ڰ<EFBFBD><DAB0>»س<C2BB>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (record->event.pressed) {
PLAY_NOTE_ARRAY(tone_qwerty);
}
return true; // <20><>QMK<4D><4B><EFBFBD><EFBFBD><EFBFBD>س<EFBFBD><D8B3><EFBFBD><EFBFBD><EFBFBD>/<2F>ͷ<EFBFBD><CDB7>¼<EFBFBD>
case RGB_LYR: // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>underglow<6F><77>Ϊ<EFBFBD><CEAA>ָʾ<D6B8><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD>á<EFBFBD>
if (record->event.pressed) {
user_config.rgb_layer_change ^= 1; // <20>л<EFBFBD>״̬
eeconfig_update_user(user_config.raw); // <20><>EEPROMд<4D><D0B4><EFBFBD><EFBFBD>״̬
if (user_config.rgb_layer_change) { // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬<D7B4><CCAC>ʹ<EFBFBD><CAB9>
layer_state_set(layer_state); // <20><>ô<EFBFBD><C3B4><EFBFBD≯<EFBFBD><CCB8>²<EFBFBD><C2B2><EFBFBD>ɫ
}
}
return false; break;
case RGB_MODE_FORWARD ... RGB_MODE_GRADIENT: // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD>RGB<47><42><EFBFBD><EFBFBD> (see quantum_keycodes.h, L400 <20><><EFBFBD>Բο<D4B2>)
if (record->event.pressed) { //<2F><><EFBFBD><EFBFBD>ʧ<EFBFBD>ܲ<EFBFBD>ָʾ<D6B8><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ı<EFBFBD><C4B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (user_config.rgb_layer_change) { // <20><><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>ʱ
user_config.rgb_layer_change = false; // ʧ<>ܣ<EFBFBD>Ȼ<EFBFBD><C8BB>
eeconfig_update_user(user_config.raw); // <20><>EEPROMд<4D><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
}
return true; break;
default:
return true; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
}
```
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>`eeconfig_init_user`<60><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ե<EFBFBD>EEPROM<4F><4D><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>Ĭ<EFBFBD><C4AC>ֵ, <20><><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǿ<EFBFBD><C7BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>EEPROM<4F><4D><EFBFBD><EFBFBD><EFBFBD><EFBFBD>`EEP_RST`<60><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>[Bootmagic](feature_bootmagic.md)<29><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E7A3AC><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA>Ĭ<EFBFBD><C4AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>RGB<47><42>ָʾ<D6B8><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĭ<EFBFBD><C4AC>ֵ
```c
void eeconfig_init_user(void) { // EEPROM<4F><4D><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
user_config.raw = 0;
user_config.rgb_layer_change = true; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҪĬ<D2AA><C4AC>ʹ<EFBFBD><CAB9>
eeconfig_update_user(user_config.raw); // <20><>EEPROMд<4D><D0B4>Ĭ<EFBFBD><C4AC>ֵ
// use the non noeeprom versions, <20><>Ҫ<EFBFBD><D2AA>EEPROMд<4D><D0B4><EFBFBD><EFBFBD>Щֵ
rgblight_enable(); // Ĭ<><C4AC>ʹ<EFBFBD><CAB9>RGB
rgblight_sethsv_cyan(); // Ĭ<><C4AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ
rgblight_mode(1); // Ĭ<><C4AC><EFBFBD><EFBFBD><EFBFBD>ó<EFBFBD><C3B3><EFBFBD>
}
```
Ȼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ˡ<EFBFBD>RGB<EFBFBD><EFBFBD>ָʾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>һֱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD><EFBFBD>̡<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>RGB<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָʾ<EFBFBD><EFBFBD>ʧ<EFBFBD>ܣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ˡ<EFBFBD>
### 'EECONFIG' <20><><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD>
* <20><><EFBFBD><EFBFBD>/<2F>޶<EFBFBD>: `void eeconfig_init_kb(void)`, `uint32_t eeconfig_read_kb(void)`<60><>`void eeconfig_update_kb(uint32_t val)`
* <20><><EFBFBD><EFBFBD>: `void eeconfig_init_user(void)`, `uint32_t eeconfig_read_user(void)`<60><>`void eeconfig_update_user(uint32_t val)`
`val` <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4>EEPROM<4F><4D>ֵ<EFBFBD><D6B5>`eeconfig_read_*`<60><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>EEPROM<4F><4D><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>32λ(˫<><CBAB>)<29><>ֵ<EFBFBD><D6B5>
# <20>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>-<2D><><EFBFBD><EFBFBD><EFBFBD>ٽ<EFBFBD>ֵ(TAPPING_TERM)
Ĭ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD>-<2D><><EFBFBD><EFBFBD><EFBFBD>ٽ<EFBFBD>ֵ<EFBFBD><D6B5>ȫ<EFBFBD><C8AB>ͳһ<CDB3>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD>Ҳ<EFBFBD><D2B2><EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>á<EFBFBD><C3A1><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD>˵<EFBFBD><CBB5><EFBFBD>ܺá<DCBA><C3A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Щ<EFBFBD><D0A9><EFBFBD><EFBFBD><EFBFBD>£<EFBFBD><C2A3><EFBFBD><EFBFBD><EFBFBD>`LT`<60><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>˫<EFBFBD><CBAB><EFBFBD>ܼ<EFBFBD><DCBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>󣬿<EFBFBD><F3A3ACBF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>Щ<EFBFBD><D0A9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>װ<EFBFBD>ס<EFBFBD><D7A1>Ϊ<EFBFBD>˲<EFBFBD><CBB2><EFBFBD>ÿ<EFBFBD><C3BF><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EBA3AC><EFBFBD><EFBFBD><EFBFBD>ܿ<EFBFBD><DCBF><EFBFBD>Ϊÿ<CEAA><C3BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>`TAPPING_TERM`<60><>
<EFBFBD><EFBFBD>ʹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܵĻ<EFBFBD>, Ҫ<><D2AA><EFBFBD><EFBFBD>`config.h`<60><><EFBFBD><EFBFBD>`#define TAPPING_TERM_PER_KEY`<60><>
## `get_tapping_term`ʾ<><CABE>ʵ<EFBFBD><CAB5>
<EFBFBD><EFBFBD>Ҫ<EFBFBD>޸Ļ<EFBFBD><EFBFBD>ڼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>`TAPPING TERM`,<2C><>Ҫ<EFBFBD><D2AA>`keymap.c`<60>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>´<EFBFBD><C2B4><EFBFBD>:
```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;
}
}
```
### `get_tapping_term` <20><><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƪ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫquantum<75><6D><EFBFBD>߼<EFBFBD><DFBC>̼<EFBFBD><CCBC><EFBFBD><EFBFBD>ĺ<EFBFBD><C4BA><EFBFBD><EFBFBD><EFBFBD>ֻҪ<D6BB>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɡ<EFBFBD>

6
docs/zh-cn/faq.md Normal file
View File

@@ -0,0 +1,6 @@
# 常见问题
* [一般问题](faq_general.md)
* [构建和编译QMK](faq_build.md)
* [QMK调试和故障排除](faq_debug.md)
* [布局问题](faq_keymap.md)

150
docs/zh-cn/faq_build.md Normal file
View File

@@ -0,0 +1,150 @@
# 关于构建的常见问题
本页所写是QMK构建的常见问题.如果你还没有进行过编译,就看一下[构建环境搭建](getting_started_build_tools.md) 和 [make的说明](getting_started_make_guide.md).
## 如果您不能在Linux上编程
您需要适当的权限才能操作设备。对于Linux用户, 请参阅下方有关`udev`规则的说明。如果您对`udev`有问题,解决方法是用`sudo`命令。如果您不熟悉此命令,使用`man sudo`查看其手册或[看这个网页](https://linux.die.net/man/8/sudo).
在你的主控是ATMega32u4时以下是使用`sudo`命令的样例:
$ sudo dfu-programmer atmega32u4 erase --force
$ sudo dfu-programmer atmega32u4 flash your.hex
$ sudo dfu-programmer atmega32u4 reset
或只用;
$ sudo make <keyboard>:<keymap>:dfu
使用`sudo`运行`make`一般来说**不**推荐,如果可能,尽量使用前一种方法之一。
### Linux `udev` 规则
在Linux上您需要适当的权限才能访问MCU。你也可以在刷新固件时使用 `sudo`,或把这些文件放到`/etc/udev/rules.d/`
**/etc/udev/rules.d/50-atmel-dfu.rules:**
```
# Atmel ATMega32U4
SUBSYSTEMS=="usb", ATTRS{idVendor}=="03eb", ATTRS{idProduct}=="2ff4", MODE:="0666"
# Atmel USBKEY AT90USB1287
SUBSYSTEMS=="usb", ATTRS{idVendor}=="03eb", ATTRS{idProduct}=="2ffb", MODE:="0666"
# Atmel ATMega32U2
SUBSYSTEMS=="usb", ATTRS{idVendor}=="03eb", ATTRS{idProduct}=="2ff0", MODE:="0666"
```
**/etc/udev/rules.d/52-tmk-keyboard.rules:**
```
# tmk键盘产品 https://github.com/tmk/tmk_keyboard
SUBSYSTEMS=="usb", ATTRS{idVendor}=="feed", MODE:="0666"
```
**/etc/udev/rules.d/54-input-club-keyboard.rules:**
```
# Input Club keyboard bootloader
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1c11", MODE:="0666"
```
### 串行设备在Linux上检测不到bootloader模式
确保您的内核对您的设备有相应的支持。 如果你的设备是 USB ACM, 比如Pro Micro (Atmega32u4),就要加上`CONFIG_USB_ACM=y`. 其他设备可能需要`USB_SERIAL` 及其任何子选项。
## DFU Bootloader的未知设备
如果您在使用Windows来刷新键盘的时候碰到了问题检查设备管理器。如果在键盘处于 "bootloader模式"时你看到 "未知设备",说明你可能面临设备问题。
重新运行MSYS2上的安装脚本或许会凑效比如在MSYS2/WSL运行 `./util/qmk_install.sh`) 或者重新安装QMK工具箱也可能会解决你的问题。
如果以上方法还是短针攻疽,那您可能需要使用[Zadig Utility](https://zadig.akeo.ie/)。下载此程序, 找到设备问题, 然后选择 `WinUSB`选项, 然后点击"Reinstall driver"。完成后再试试刷新你的键盘。倘若依然徒劳无功,那就尝试所有选项直到好用为止。
?> 事实上没有一个驱动的最佳选择有些选项就是和某些系统相辅相成。但libUSB和WinUSB似乎也算是这里的最佳选择了。
如果bootloader在设备列表中没有显示你可能要使能 "List all devices"选项在选项菜单中`Options`然后找到有问题的bootloader设备。(译者注在win10中可能为 查看-显示隐藏的设备)
## WINAVR已淘汰
不再推荐使用WINAVR使用可能会导致问题
详情请见[TMK Issue #99](https://github.com/tmk/tmk_keyboard/issues/99).
## USB VID 和 PID
你可以在编辑`config.h`时使用任何你想用的ID值。实际上使用任何可能未使用的ID都没有问题除了有极低的与其他产品发生冲突的可能性。
大多数QMK主板使用`0xFEED`作为vendor ID。您应该查看其他键盘以确保选择了唯一的Product ID。
也要看看这个。
https://github.com/tmk/tmk_keyboard/issues/150
一也可以在下方链接购买一个唯一的VID:PID。不过个人使用似乎用不着这个。
- http://www.obdev.at/products/vusb/license.html
- http://www.mcselec.com/index.php?page=shop.product_details&flypage=shop.flypage&product_id=92&option=com_phpshop&Itemid=1
## Cortex: `cstddef: No such file or directory`
在Ubuntu 14.04上的GCC 4.8 会出现这种问题需要用这个PPA升级到4.9。
https://launchpad.net/~terry.guo/+archive/ubuntu/gcc-arm-embedded
https://github.com/tmk/tmk_keyboard/issues/212
https://github.com/tmk/tmk_keyboard/wiki/mbed-cortex-porting#compile-error-cstddef
https://developer.mbed.org/forum/mbed/topic/5205/
## `clock_prescale_set` and `clock_div_1` Not Available
你的工具链太旧了不支持MCU。比如WinAVR 20100110就不支持ATMega32u2.
```
Compiling C: ../../tmk_core/protocol/lufa/lufa.c
avr-gcc -c -mmcu=atmega32u2 -gdwarf-2 -DF_CPU=16000000UL -DINTERRUPT_CONTROL_ENDPOINT -DBOOTLOADER_SIZE=4096 -DF_USB=16000000UL -DARCH=ARCH_AVR8 -DUSB_DEVICE_ONLY -DUSE_FLASH_DESCRIPTORS -DUSE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)" -DFIXED_CONTROL_ENDPOINT_SIZE=8 -DFIXED_NUM_CONFIGURATIONS=1 -DPROTOCOL_LUFA -DEXTRAKEY_ENABLE -DCONSOLE_ENABLE -DCOMMAND_ENABLE -DVERSION=unknown -Os -funsigned-char -funsigned-bitfields -ffunction-sections -fdata-sections -fno-inline-small-functions -fpack-struct -fshort-enums -fno-strict-aliasing -Wall -Wstrict-prototypes -Wa,-adhlns=obj_alps64/protocol/lufa/lufa.lst -I. -I../../tmk_core -I../../tmk_core/protocol/lufa -I../../tmk_core/protocol/lufa/LUFA-git -I../../tmk_core/common -std=gnu99 -include config.h -MMD -MP -MF .dep/obj_alps64_protocol_lufa_lufa.o.d ../../tmk_core/protocol/lufa/lufa.c -o obj_alps64/protocol/lufa/lufa.o
../../tmk_core/protocol/lufa/lufa.c: In function 'setup_mcu':
../../tmk_core/protocol/lufa/lufa.c:575: warning: implicit declaration of function 'clock_prescale_set'
../../tmk_core/protocol/lufa/lufa.c:575: error: 'clock_div_1' undeclared (first use in this function)
../../tmk_core/protocol/lufa/lufa.c:575: error: (Each undeclared identifier is reported only once
../../tmk_core/protocol/lufa/lufa.c:575: error: for each function it appears in.)
make: *** [obj_alps64/protocol/lufa/lufa.o] Error 1
```
## AVR的BOOTLOADER_SIZE
注意Teensy2.0++ bootloader的大小是2048字节。有些Makefile注释错了。
```
# Boot Section Size in *bytes*
# Teensy halfKay 512
# Teensy++ halfKay 2048
# Atmel DFU loader 4096 (TMK Alt Controller)
# LUFA bootloader 4096
# USBaspLoader 2048
OPT_DEFS += -DBOOTLOADER_SIZE=2048
```
## 在MacOS上 `avr-gcc: internal compiler error: Abort trap: 6 (program cc1)`
这是brew更新的问题导致AVR GCC依赖的符号链接被损坏。
解决方案是移除并重新安装所有受影响的模块。
```
brew rm avr-gcc
brew rm dfu-programmer
brew rm dfu-util
brew rm gcc-arm-none-eabi
brew rm avrdude
brew install avr-gcc
brew install dfu-programmer
brew install dfu-util
brew install gcc-arm-none-eabi
brew install avrdude
```
### avr-gcc 8.1 和 LUFA
如果你把avr-gcc升级到7以上你可能会遇到关于LUFA的问题。比如:
`lib/lufa/LUFA/Drivers/USB/Class/Device/AudioClassDevice.h:380:5: error: 'const' attribute on function returning 'void'`
那你就需要在brew中把avr-gcc回退到7。
```
brew uninstall --force avr-gcc
brew install avr-gcc@8
brew link --force avr-gcc@8
```
### 我刷新了我的键盘但是键盘不工作/按键没有注册 - 而且还是ARM的 (rev6 planck, clueboard 60, hs60v2, etc...) (Feb 2019)
由于EEPROM在基于ARM的芯片上的工作原理保存的设置可能不再有效。这会影响默认层而且*或许*在某些情况下会使键盘不好用我们仍在调查这些情况。重置EEPROM将解决此问题。
[Planck rev6键盘重置EEPROM](https://cdn.discordapp.com/attachments/473506116718952450/539284620861243409/planck_rev6_default.bin) 是用于强制重置EEPROM的。刷入这个文件后再次刷入正常固件这会将键盘恢复到_正常_工作状态。
[Preonic rev3键盘重置EEPROM](https://cdn.discordapp.com/attachments/473506116718952450/537849497313738762/preonic_rev3_default.bin)
如果以任何形式启用了bootmagic 那么您还需要(看[Bootmagic文档](feature_bootmagic.md) 以及键盘信息,以了解如何执行此操作的详细信息).

233
docs/zh-cn/faq_debug.md Normal file
View File

@@ -0,0 +1,233 @@
# 调试的常见问题
本篇详细介绍了人们在键盘故障排除时的各种常见问题。
# 调试控制台
## `hid_listen` 无法识别设备
当设备的调试控制台未就绪时,您将看到如下内容:
```
Waiting for device:.........
```
插入设备后,*hid_listen*找到该设备,您将收到以下消息:
```
Waiting for new device:.........................
Listening:
```
如果您无法获得这条“Listening:”消息,请尝试在[Makefile]中使用 `CONSOLE_ENABLE=yes`
在Linux这样的操作系统上你可能需要一些权限。
- 使用`sudo hid_listen`
## 控制台没有返回消息
检查:
- *hid_listen* 找到了你的设备。看前面。
- 输入**Magic**+d打开调试。详见[Magic Commands](https://github.com/tmk/tmk_keyboard#magic-commands)。
- 设置`debug_enable=true` ,一般存在于**matrix.c**的`matrix_init()`中。
- 尝试使用'print'函数而不要用调试输出。详见**common/print.h**。
- 断开其他有控制台功能的设备。 详见[Issue #97](https://github.com/tmk/tmk_keyboard/issues/97)。
## Linux或UNIX这样的系统如何请求超级用户权限
用'sudo'来执行*hid_listen*就有权限了。
```
$ sudo hid_listen
```
或者把一个文件放到规则文件夹来为TMK设备添加*udev规则*,不同系统的目录可能有所不同。
文件: /etc/udev/rules.d/52-tmk-keyboard.rules(在Ubuntu系统的情况下)
```
# tmk keyboard products https://github.com/tmk/tmk_keyboard
SUBSYSTEMS=="usb", ATTRS{idVendor}=="feed", MODE:="0666"
```
***
# 其他
## 安全注意事项
你应该不想要把你的键盘变成"砖头"吧,就是变成没法重写固件的那种。
下面讲解一些参数来告诉你什么风险很大(其实也不是很大)。
- 假如你键盘表面没有设计重置键"RESET", 那你要进入bootloader的话就要按PCB上的RESET了。
按PCB上的RESET要拧开键盘底部。
- 如果 tmk_core / common 里面的文件丢失键盘可能失灵。
- .hex太大可能不太好; `make dfu` 会删除块,检验大小(咦?好像反了...)。
一但出错刷新键盘失败的话就困在DFU出不去了。
- 所以, 要知道大小限制。 Planck键盘上.hex文件最大大小是 is 7000h (十进制是28672)
```
Linking: .build/planck_rev4_cbbrowne.elf [OK]
Creating load file for Flash: .build/planck_rev4_cbbrowne.hex [OK]
Size after:
text data bss dec hex filename
0 22396 0 22396 577c planck_rev4_cbbrowne.hex
```
- 上面那个文件大小是 22396/577ch比28672/7000h小
- 当你有一个合适的.hex文件时你就要重试加载那个了
- 您在键盘Makefile中的某些选项可能消耗额外内存注意以下这几个
BOOTMAGIC_ENABLE, MOUSEKEY_ENABLE, EXTRAKEY_ENABLE, CONSOLE_ENABLE, API_SYSEX_ENABLE
- DFU 工具/不/可以写入bootloader (unless you throw in extra fruit salad of options),
所以还是有点危险的
- EEPROM大概有100000次循环寿命。不要总是频繁重写固件EEPROM会玩坏的。
## 全键无冲不好用
首先你要在**Makefile**用如下命令编译固件`NKRO_ENABLE`
全键无冲还不好用的话试着用`Magic` **N** 命令(默认是`LShift+RShift+N`)。这个命令会在**全键无冲**和**六键无冲**之间临时切换。有些情况**全键无冲**不好用你就需要使用**六键无冲**模式尤其是在BIOS中。
如果你的固件使用`BOOTMAGIC_ENABLE`编译的你要用`BootMagic` **N** 命令(默认`Space+N`)打开开关。这个设置保存在EEPROM中并保存在电源循环中。
<!--翻译问题:上面这句翻译的不贴切 -->
https://github.com/tmk/tmk_keyboard#boot-magic-configuration---virtual-dip-switch
## 指点杆需要复位电路(PS/2 鼠标支持)
如果没有复位电路由于硬件初始化不正确您将得到不一致的结果。查看TPM754复位电路。
- http://geekhack.org/index.php?topic=50176.msg1127447#msg1127447
- http://www.mikrocontroller.net/attachment/52583/tpm754.pdf
## 矩阵不可读16以上的列
当列超过16时[matrix.h]的`read_cols()`中,用`1UL<<16`而不要用`1<<16`
在C语言中`1` 是一个[int] 类型的[16 bit]值在AVR中你不能左移大于15次。如果你使用`1<<16`的话会得到意外的零。你要用 [unsigned long]类型,比如`1UL`
http://deskthority.net/workshop-f7/rebuilding-and-redesigning-a-classic-thinkpad-keyboard-t6181-60.html#p146279
## Bootloader跳转不好用
在**Makefile**中正确配置**Makefile**大小。如果分区大小不正确,引导加载程序可能无法从**Magic command**和**Boot Magic**加载。
```
# bootloader字节数
# Atmel DFU loader(ATmega32U4) 4096
# Atmel DFU loader(AT90USB128) 8192
# LUFA bootloader(ATmega32U4) 4096
# Arduino Caterina(ATmega32U4) 4096
# USBaspLoader(ATmega***) 2048
# Teensy halfKay(ATmega32U4) 512
# Teensy++ halfKay(AT90USB128) 2048
OPT_DEFS += -DBOOTLOADER_SIZE=4096
```
AVR引导大小是通过**BOOTSZ**熔丝位来设置的。查阅你单片机的datasheet。
记住datasheet用的是**Word**(2字节)表示大小和地址TMK用的是**Byte**。
AVR引导部分位于闪存的末尾如下所示Application是应用区Bootloader是引导区
```
byte Atmel/LUFA(ATMega32u4) byte Atmel(AT90SUB1286)
0x0000 +---------------+ 0x00000 +---------------+
| | | |
| | | |
| Application | | Application |
| | | |
= = = =
| | 32KB-4KB | | 128KB-8KB
0x6000 +---------------+ 0x1E000 +---------------+
| Bootloader | 4KB | Bootloader | 8KB
0x7FFF +---------------+ 0x1FFFF +---------------+
byte Teensy(ATMega32u4) byte Teensy++(AT90SUB1286)
0x0000 +---------------+ 0x00000 +---------------+
| | | |
| | | |
| Application | | Application |
| | | |
= = = =
| | 32KB-512B | | 128KB-2KB
0x7E00 +---------------+ 0x1FC00 +---------------+
| Bootloader | 512B | Bootloader | 2KB
0x7FFF +---------------+ 0x1FFFF +---------------+
```
详情请见下方issue。
https://github.com/tmk/tmk_keyboard/issues/179
如果你使用TeensyUSB, 有一个[已知bug](https://github.com/qmk/qmk_firmware/issues/164)硬件重置按钮阻止软件定义重置键工作。重新插拔键盘就好了。
## 特殊额外键不起作用(系统,音频控制键)
你要在`rules.mk`定义`EXTRAKEY_ENABLE`在QMK中使用它们。
```
EXTRAKEY_ENABLE = yes # 音频控制和系统控制
```
## 睡眠唤醒不好用
在Windows查看设备管理器中该键盘设备属性中电源管理选项卡中的`允许此设备唤醒计算机(O)`是否勾选。同时看一眼BIOS设置。
在主机睡眠时按下任何键都可以唤醒了。
## 使用Arduino?
**注意Arduino的针脚名字和主控芯片的不一样。** 比如, Arduino的`D0`并不是`PD0`。自己用原理图捋一下电路。
- http://arduino.cc/en/uploads/Main/arduino-leonardo-schematic_3b.pdf
- http://arduino.cc/en/uploads/Main/arduino-micro-schematic.pdf
Arduino Leonardo和micro使用**ATMega32U4**该芯片TMK可用但Arduino的bootloader会导致问题。
## 在USB AVR使用PF4-7针脚?
你要置位MCUCR寄存器JTD位来将PF4-7设置为GPIO。这些针脚默认是JTAG功能。 像ATMega*U* or AT90USB*这样的MCU会受影响。
如果是用Teensy的话就不需要了。Tennsy自带JTAGEN位未编程来失能该功能。
<!--翻译问题上句可能有错原文为Teensy is shipped with JTAGEN fuse bit unprogrammed to disable the function. -->
代码如下。
```
// F接口JTAG失能。在四个周期内写入两次JTD位。
MCUCR |= (1<<JTD);
MCUCR |= (1<<JTD);
```
https://github.com/tmk/tmk_keyboard/blob/master/keyboard/hbkb/matrix.c#L67
阅读ATMega32U4的datasheet中的**26.5.1 MCU Control Register MCUCR**。
## 为锁定键添加指示灯
你要自制CapsLock, ScrollLock 和 NumLock指示灯见下文。
http://deskthority.net/workshop-f7/tmk-keyboard-firmware-collection-t4478-120.html#p191560
## 为Arduino Micro/Leonardo编程
按下重置键然后在8秒内运行下方这样的命令。
```
avrdude -patmega32u4 -cavr109 -b57600 -Uflash:w:adb_usb.hex -P/dev/ttyACM0
```
设备名称因系统而异。
http://arduino.cc/en/Main/ArduinoBoardMicro
https://geekhack.org/index.php?topic=14290.msg1563867#msg1563867
## USB 3 兼容性
据传说有些人用USB3接口会有问题用USB2的试试。
## Mac 兼容性
### OS X 10.11 和集线器
https://geekhack.org/index.php?topic=14290.msg1884034#msg1884034
## 对于BIOS (UEFI)/恢复(睡眠和唤醒)/重新启动 有问题
有人说他们的键盘在BIOS中或许是恢复(睡眠和唤醒)后不工作.
截止至目前其根本原因未知不排除与某些构建选项有关。试着在Makefile中失能`CONSOLE_ENABLE`, `NKRO_ENABLE`, `SLEEP_LED_ENABLE`这样的选项,也试试其他的。
https://github.com/tmk/tmk_keyboard/issues/266
https://geekhack.org/index.php?topic=41989.msg1967778#msg1967778
## FLIP 不工作
### `AtLibUsbDfu.dll` 未找到
从设备管理器中删除当前驱动程序并在设备管理器重新安装一个FLIP提供的程序。
http://imgur.com/a/bnwzy

19
docs/zh-cn/faq_general.md Normal file
View File

@@ -0,0 +1,19 @@
# <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
## QMK<4D><4B>ʲô?
[QMK](https://github.com/qmk), <20><><EFBFBD><EFBFBD><EFBFBD>ӻ<EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD>(Quantum Mechanical Keyboard)<29><><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD>һȺ<D2BB><C8BA>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD>Ƽ<EFBFBD><C6BC>̿<EFBFBD><CCBF><EFBFBD><EFBFBD>Ĺ<EFBFBD><C4B9>ߡ<EFBFBD><DFA1><EFBFBD><EFBFBD>Ǵ<EFBFBD>[QMK<EFBFBD>̼<EFBFBD>](https://github.com/qmk/qmk_firmware)<29><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>[TMK](https://github.com/tmk/tmk_keyboard)<29><>ħ<EFBFBD>ķֲ档
### Ϊʲô<CAB2><C3B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(Quantum)?
<!-- <20><><EFBFBD>޸<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>²ۣ<C2B2><DBA3>ĵ<EFBFBD><C4B5><EFBFBD><EFBFBD>߾<EFBFBD>ȻҲ<C8BB><D2B2>֪<EFBFBD><D6AA>Ϊɶ<CEAA><C9B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD> -->
## QMK<4D><4B>TMK<4D><4B>ʲô<CAB2><C3B4><EFBFBD><EFBFBD>?
TMK<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>[Jun Wako](https://github.com/tmk)<29><><EFBFBD>ƺ<EFBFBD>ִ<EFBFBD>С<EFBFBD>QMKʼ<4B><CABC>[Jack Humbert](https://github.com/jackhumbert)ΪPlanck<63><6B><EFBFBD>̴<EFBFBD><CCB4><EFBFBD><EFBFBD><EFBFBD>TMK<4D>ֲ档һ<E6A1A3><D2BB>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Jack<63>ķֲ<C4B7><D6B2>ͺ<EFBFBD>TMK<4D><4B>ȥ<EFBFBD><C8A5>Զ<EFBFBD>ˣ<EFBFBD><CBA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2015<31>꣬Jack<63><6B><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>QMK<4D><4B>
<EFBFBD>Ӽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>۵<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>QMK<EFBFBD><EFBFBD>TMK<EFBFBD><EFBFBD><EFBFBD><EFBFBD>һЩ<EFBFBD>¹<EFBFBD><EFBFBD>ܶ<EFBFBD><EFBFBD>ɵġ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>QMK<EFBFBD><EFBFBD>չ<EFBFBD>˿<EFBFBD><EFBFBD>õļ<EFBFBD><EFBFBD>ʹ<EFBFBD>߼<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܽ<EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> `S()`, `LCTL()`, <20><> `MO()`<EFBFBD><EFBFBD>ȫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>[<EFBFBD><EFBFBD><EFBFBD><EFBFBD>](keycodes.md).
<EFBFBD>ӹ<EFBFBD><EFBFBD>̵<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>TMK<EFBFBD>Լ<EFBFBD>ά<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>йٷ<EFBFBD>֧<EFBFBD>ֵļ<EFBFBD><EFBFBD>̣<EFBFBD>ֻ<EFBFBD>к<EFBFBD>Сһ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֧<EFBFBD>֡<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ά<EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD><EFBFBD>ڷֲ<EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̴<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ķֲ档Ĭ<EFBFBD><EFBFBD>֧<EFBFBD>ֺ<EFBFBD><EFBFBD>ٵļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>ͨ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˷<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֡<EFBFBD>QMK<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>й<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֺͼ<EFBFBD><EFBFBD>̣<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>з<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>׼<EFBFBD><EFBFBD>PR<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ı<EFBFBD>֤<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ά<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͬʱQMKС<EFBFBD><EFBFBD>Ҳ<EFBFBD><EFBFBD><EFBFBD>ڱ<EFBFBD>Ҫʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ŵ<EFBFBD><EFBFBD><EFBFBD>ȱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>TMK<EFBFBD><EFBFBD>QMK֮<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>

212
docs/zh-cn/faq_keymap.md Normal file
View File

@@ -0,0 +1,212 @@
# 布局常见问题
本页本页包含人们经常遇到的关于布局的问题。如果你觉得没什么问题,请先看[布局概览](keymap.md)。
## 我能用什么键码?
看[键码](keycodes.md)你可以找到你能用的键码索引。可以的话这些链接可以连接到更广泛的文档。
键码实际上定义在[common/keycode.h](https://github.com/qmk/qmk_firmware/blob/master/tmk_core/common/keycode.h).
## 默认的键码什么样?
世界上有三种标准键盘设计分别是ANSI, ISO, and JIS. 主要是北美用ANSI(译者注:中国很多键盘使用这个), 欧洲和非洲主要使用ISO日本使用JIS。未提及的区域通常使用ANSI或ISO。与这些设计对应的键代码如下所示
<!-- 该图片的来源: http://www.keyboard-layout-editor.com/#/gists/bf431647d1001cff5eff20ae55621e9a -->
![键盘设计图](https://i.imgur.com/5wsh5wM.png)
## 我有一些键变成了其他功能或者不工作了
QMK有两个功能Bootmagic和命令行它允许您在运行中更改键盘的行为。该功能包括但不仅限于, 交换Ctrl/Caps关闭界面交换Alt/Gui交换 Backspace/Backslash禁用所有键以及其他的行为改变。
快速解决方法是插入键盘时按住`Space`+`Backspace`。该操作将重置已保存设置,让这些键回复初始功能。这招不好用的话参阅下方:
* [Bootmagic](feature_bootmagic.md)
* [命令](feature_command.md)
## 菜单键不好用
现在大多数键盘 `KC_RGUI``KC_RCTL`中间的键子叫做`KC_APP`。这是因为在这个键子发明之前相关标准里就已经有键叫做`MENU(菜单)`了,所以微软叫他`APP(应用)`键。
## `KC_SYSREQ` 不工作
使用抓屏的键码(`KC_PSCREEN``KC_PSCR`)而不用`KC_SYSREQ`。组合键'Alt + Print Screen'会被当作'System request'。
见[issue #168](https://github.com/tmk/tmk_keyboard/issues/168)和
* http://en.wikipedia.org/wiki/Magic_SysRq_key
* http://en.wikipedia.org/wiki/System_request
## 电源键不工作
这有点让人困惑,QMK有两个"Power(电源)"键码: `KC_POWER` 在键盘/小键盘的HID使用页面中`KC_SYSTEM_POWER` (或者叫`KC_PWR`)在用户页。
前者只能被macOS识别但是后者`KC_SLEP``KC_WAKE`三大主要操作系统全都支持所以推荐使用这两个。Windows下这些键立即生效macOS要长按直到弹出对话框。
## 自动大小写锁定
可以解决'the'问题(正常应为The)。我经常在输入'The'时不慎输入了'the'或者'THe'。自动大小写锁定可以修正此类问题。详见下方链接。
https://github.com/tmk/tmk_keyboard/issues/67
## 修改 键/层 卡住
除非正确配置层切换,否则修改键或层可能会卡住。
对于修改键和图层操作,必须把`KC_TRANS`放到目标层的相同位置,用于注销修改键或在释放事件时返回到上一层。
* https://github.com/tmk/tmk_core/blob/master/doc/keymap.md#31-momentary-switching
* http://geekhack.org/index.php?topic=57008.msg1492604#msg1492604
* https://github.com/tmk/tmk_keyboard/issues/248
## 机械自锁开关支持Mechanical Lock Switch Support
本功能用于*机械自锁开关*比如[this Alps one](http://deskthority.net/wiki/Alps_SKCL_Lock)。你可以通过向`config.h`添加以下宏来使能该功能:
```
#define LOCKING_SUPPORT_ENABLE
#define LOCKING_RESYNC_ENABLE
```
在使能该功能后,要在键盘中使用`KC_LCAP`, `KC_LNUM``KC_LSCR`这三个键码。
远古机械键盘偶尔会有自锁机械开关,现在几乎没有了。***大多数情况下你不需要使用该功能,且要使用`KC_CAPS`, `KC_NLCK``KC_SLCK`这三个键码。***
## 输入ASCII之外的特殊字符比如Cédille 'Ç'
没有在所有系统中输入这个的通用方法。你要定义针对你的特定操作系统或布局的**宏**。
比如看这个**宏**代码的文章。
http://deskthority.net/workshop-f7/tmk-keyboard-firmware-collection-t4478-120.html#p195620
<!--翻译问题:下方维基百科链接应全部替换为中文链接,暂未找到全部-->
在**Windows**上,可以用`AltGr`键或**Alt码**。
* http://en.wikipedia.org/wiki/AltGr_key
* https://zh.wikipedia.org/wiki/Alt%E7%A0%81
在**Mac OS**定义`Option`键组合。
* https://zh.wikipedia.org/wiki/Option%E9%94%AE#%E6%9B%BF%E4%BB%A3%E9%94%AE%E7%9B%98%E8%BE%93%E5%85%A5
在**Xorg**可以改用`compose`键。
* http://en.wikipedia.org/wiki/Compose_key
下方链接查看**Unicode**输入。
* http://en.wikipedia.org/wiki/Unicode_input
## macOS上的`Fn`
不像大多数FN键苹果上那个有自己的键码...呃,基本上算吧。 他取缔了基本6键无冲HID报告的第六个键码 -- 所以苹果键盘其实是5键无冲的。
技术上说QMK可以发送这个键。但是这样做需要修改报告格式以添加FN键的状态。这还不是最糟糕的你的键盘的VID和PID和真的苹果键盘不一样的话还不会被识别。
QMK官方支持这个会被律师函的所以就当我没说过。
详见[issue#2179](https://github.com/qmk/qmk_firmware/issues/2179)。
## Mac OSX的媒体控制键
#### KC_MNXT 和 KC_MPRV 在Mac上不好用
使用 `KC_MFFD`(`KC_MEDIA_FAST_FORWARD`) 和 `KC_MRWD`(`KC_MEDIA_REWIND`),不要用 `KC_MNXT``KC_MPRV`.
详见 https://github.com/tmk/tmk_keyboard/issues/195
## Mac OSX中支持那些键?
你可以从此源码中获知在OSX中支持哪些键码
`usb_2_adb_keymap` 阵列映射 键盘/小键盘 页用于ADB扫描码(OSX内部键码).
https://opensource.apple.com/source/IOHIDFamily/IOHIDFamily-606.1.7/IOHIDFamily/Cosmo_USB2ADB.c
`IOHIDConsumer::dispatchConsumerEvent`会处理用户页面用法。
<!--翻译问题:上面那两句翻译的不好-> handles Consumer page usages. -->
https://opensource.apple.com/source/IOHIDFamily/IOHIDFamily-606.1.7/IOHIDFamily/IOHIDConsumer.cpp
## Mac OSX中的JIS键
岛国特别键比如`無変換(Muhenkan)`, `変換(Henkan)`, `ひらがな(hiragana)`OSX是不是别的。You can use **Seil** to enable those keys, try following options.
<!--翻译问题:以上“岛国特别键”没有任何地域歧视的意思 -->
* 在电脑键盘上使能NFER键
* 在电脑键盘上使能XFER键
* 在电脑键盘上使能KATAKAN键
https://pqrs.org/osx/karabiner/seil.html
## RN-42蓝牙模块与Karabiner不能有效协同工作
Karabiner - Mac OSX的改键软件 - 默认RN-42模块是不会被响应的。想要Karabiner和你的键盘协同工作你要使能此选项
https://github.com/tekezo/Karabiner/issues/403#issuecomment-102559237
此问题详见下方链接。
https://github.com/tmk/tmk_keyboard/issues/213
https://github.com/tekezo/Karabiner/issues/403
## Esc 和 <code>&#96;</code> 双功能键
请见[Grave Escape](feature_grave_esc.md)功能。
## 右侧双角色修改键(诸如Shift、Alt等有修改其他键作用的键)变箭头键
右侧修改键单击时会变为箭头键长按就还是修改键。在TMK中双角色键称之为**TAP**.
```
#include "keymap_common.h"
/* 用TMK双角色键功能实现右侧修改键改箭头键
*
* https://github.com/tmk/tmk_core/blob/master/doc/keymap.md#213-modifier-with-tap-keydual-role
* https://en.wikipedia.org/wiki/Modifier_key#Dual-role_keys
*/
const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* 0: qwerty */
[0] = LAYOUT( \
ESC, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, NUHS,BSPC, \
TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC,BSLS, \
LCTL,A, S, D, F, G, H, J, K, L, SCLN,QUOT,ENT, \
LSFT,NUBS,Z, X, C, V, B, N, M, COMM,DOT, SLSH,FN0, ESC, \
FN4, LGUI,LALT, SPC, APP, FN2, FN1, FN3),
[1] = LAYOUT( \
GRV, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, TRNS,TRNS, \
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,\
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, \
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,FN5, TRNS, \
TRNS,TRNS,TRNS, TRNS, TRNS,FN7, FN6, FN8),
};
const uint16_t PROGMEM fn_actions[] = {
[0] = ACTION_MODS_TAP_KEY(MOD_RSFT, KC_UP),
[1] = ACTION_MODS_TAP_KEY(MOD_RGUI, KC_DOWN),
[2] = ACTION_MODS_TAP_KEY(MOD_RALT, KC_LEFT),
[3] = ACTION_MODS_TAP_KEY(MOD_RCTL, KC_RIGHT),
[4] = ACTION_LAYER_MOMENTARY(1),
[5] = ACTION_MODS_TAP_KEY(MOD_RSFT, KC_PGUP),
[6] = ACTION_MODS_TAP_KEY(MOD_RGUI, KC_PGDN),
[7] = ACTION_MODS_TAP_KEY(MOD_RALT, KC_HOME),
[8] = ACTION_MODS_TAP_KEY(MOD_RCTL, KC_END),
};
```
双角色键说明: https://en.wikipedia.org/wiki/Modifier_key#Dual-role_keys
## Mac OSX的弹出键
`KC_EJCT` 键码在OSX可以使用 https://github.com/tmk/tmk_keyboard/issues/250
似乎Windows10会忽略该键码Linux/Xorg可以识别该键码但默认不映射。
目前尚不清楚如何在真正的苹果键盘按出弹出键。HHKB使用`F20`用于弹出键(`Fn+f`)该功能在MAC模式有效但不保证与苹果弹出键码相符。
## `action_util.c`中的 `weak_mods`和`real_mods`是什么
___待改善___
real_mods 用于保存实际(物理)修改键的实际状态。
weak_mods 用于保存虚拟或临时修改键,它将不会影响实际修改键。
以按下左侧Shift键然后输入ACTION_MODS_KEY(LSHIFT, KC_A)为例,
在weak_mods时
* (1) 按下不抬起左Shift: real_mods |= MOD_BIT(LSHIFT)
* (2) 按 ACTION_MODS_KEY(LSHIFT, KC_A): weak_mods |= MOD_BIT(LSHIFT)
* (3) 抬起 ACTION_MODS_KEY(LSHIFT, KC_A): weak_mods &= ~MOD_BIT(LSHIFT)
real_mods 还是保持在修改状态。
在没有weak_mods时
* (1) 按下不抬起左Shift: real_mods |= MOD_BIT(LSHIFT)
* (2) 按 ACTION_MODS_KEY(LSHIFT, KC_A): real_mods |= MOD_BIT(LSHIFT)
* (3) 抬起 ACTION_MODS_KEY(LSHIFT, KC_A): real_mods &= ~MOD_BIT(LSHIFT)
此时real_mods失去实际左Shift的状态。
weak_mods和real_mods现已全部加入键盘数据包发送豪华套餐。
https://github.com/tmk/tmk_core/blob/master/common/action_util.c#L57

View File

@@ -0,0 +1,15 @@
# 获得帮助
有很多方法来获得关于QMK的帮助.
## 实时聊天
你可以在我们的主要[Discord服务器](https://discord.gg/Uq7gcHh)找到QMK的开发者和用户。有很多讨论固件的不同频道, 工具箱(Toolbox), 硬件,配置工具(configurator).
## OLKB Subreddit
QMK的官方论坛是[/r/olkb](https://reddit.com/r/olkb) 在[reddit.com](https://reddit.com)上.
## Github的Issue
你可以在GitHub上 [提出issue](https://github.com/qmk/qmk_firmware/issues).当您的问题需要长期讨论或调试时,这尤其方便。

View File

@@ -0,0 +1,59 @@
# 如何在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并且您喜欢使用命令行工作。
首先 [Github上的QMK页面](https://github.com/qmk/qmk_firmware), 您能看到右上方有个按钮写着"Fork":
![从Github上分叉](http://i.imgur.com/8Toomz4.jpg)
如果你是某组织成员,你将需要选择分叉到哪个账户。一般情况下, 你是想要分叉到你的私人账户下。当你完成分叉 (有时需要等一会), 点击"Clone or Download" 按钮:
!从Github下载](http://i.imgur.com/N1NYcSz.jpg)
你要选择 "HTTPS", 然后选择链接复制:
![HTTPS链接](http://i.imgur.com/eGO0ohO.jpg)
然后,在命令行输入`git clone `,然后粘贴你的链接:
```
user@computer:~$ git clone https://github.com/whoeveryouare/qmk_firmware.git
Cloning into 'qmk_firmware'...
remote: Counting objects: 46625, done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 46625 (delta 0), reused 0 (delta 0), pack-reused 46623
Receiving objects: 100% (46625/46625), 84.47 MiB | 3.14 MiB/s, done.
Resolving deltas: 100% (29362/29362), done.
Checking out files: 100% (2799/2799), done.
```
现在你本地计算机有QMK的分叉了,你可以添加你的布局了, 为你的键盘编译并刷新固件吧。如果你觉得你的修改很不错, 你可以添加,提交,然后想你的分叉推出pull你的改变像这样:
```
user@computer:~$ git add .
user@computer:~$ git commit -m "adding my keymap"
[master cccb1608] adding my keymap
1 file changed, 1 insertion(+)
create mode 100644 keyboards/planck/keymaps/mine/keymap.c
user@computer:~$ git push
Counting objects: 1, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (1/1), done.
Writing objects: 100% (1/1), 1.64 KiB | 0 bytes/s, done.
Total 1 (delta 1), reused 0 (delta 0)
remote: Resolving deltas: 100% (1/1), completed with 1 local objects.
To https://github.com/whoeveryouare/qmk_firmware.git
+ 20043e64...7da94ac5 master -> master
```
现在你的改动已经在你Github上的分支中了 - 如果你回到这 (`https://github.com/你的GitHub账户名/qmk_firmware`) ,你可以点击下方所示按钮创建 "New Pull Request":
![新的 Pull Request](http://i.imgur.com/DxMHpJ8.jpg)
现在你可以看到你所做的一切 - 如果看起来不错, 就可以点击 "Create Pull Request"定稿了:
![创建Pull Request](http://i.imgur.com/Ojydlaj.jpg)
提交后,我们会开跟你说你的改动,要求您进行更改, 并最终接受您的更改!感谢您为QMK做的贡献 :)

View File

@@ -0,0 +1,54 @@
# 介绍
本页解释了使用QMK项目所需的基本信息。它假定您能熟练使用Unix shell但您不熟悉C语言也不熟悉使用make编译。
## 基本QMK结构
QMK是[Jun Wako](https://github.com/tmk)的[tmk_keyboard](https://github.com/tmk/tmk_keyboard)工程的一个分叉。经过更改的TMK原始代码放在`tmk` 文件夹中。 QMK增加的新东西可以在 `quantum` 文件夹中找到。 键盘项目可以在 `handwired`(手动飞线) 和 `keyboard`PCB键盘这两个文件夹找到。
### 用户空间结构
`users`文件夹里面的目录是每个用户的目录。这个文件夹里面放的是用户们在不同键盘都能用到的代码。详见[用户空间特性](feature_userspace.md)
### 键盘项目结构
`keyboards`文件夹和他的子文件夹`handwired`中就是各个键盘的项目了,比如`qmk_firmware/keyboards/clueboard`。内部结构与如下:
* `keymaps/`: 可以构建的不同布局
* `rules.mk`: 用来设置 "make" 命令默认选项的文件。别直接编辑这个文件,你应该使用具体某个布局的 `rules.mk`.
* `config.h`: 用于设置默认编译选项的文件。别直接编辑这个文件, 你应该使用具体某个布局的 `config.h`.
### 布局结构
在各个布局的文件夹,你能找到以下文件。只有 `keymap.c` 是必要的, 如果其他文件找不到就会直接选择默认选项。
* `config.h`: 配置布局的选项
* `keymap.c`: 布局的全部代码, 必要文件
* `rules.mk`: 使能的QMK特性
* `readme.md`:介绍你的布局,告诉别人怎么使用附上功能说明。请将图片上传到imgur等图床译者注imgur可能已被墙为了方便国人访问建议使用国内可以直接访问的图床
# `config.h` 文件
有三个重要的`config.h` 位置:
* 键盘 (`/keyboards/<keyboard>/config.h`)
* 用户空间 (`/users/<user>/config.h`)
* 布局 (`/keyboards/<keyboard>/keymaps/<keymap>/config.h`)
构建系统按照上述顺序自动获取配置文件。如果要覆盖由上一个 `config.h` 所做的设置,您需要首先为要更改的设置包含一些样板代码。
```
#pragma once
```
要覆盖上一个 `config.h` 所做的设置,你要先 `#undef` 然后再 `#define` 这个设置.
样板代码和设置看起来像这样:
```
#pragma once
// 像下面那样覆盖设置MY_SETTING指的是你要覆盖的设置项!
#undef MY_SETTING
#define MY_SETTING 4
```

23
docs/zh-cn/newbs.md Normal file
View File

@@ -0,0 +1,23 @@
# QMK菜鸟教程
QMK是为你机械硬盘设计的的一个强大的开源固件。使用QMK可以很简单的让你的定制键盘变得强大。看完这篇文章无论你是菜鸟还是大佬都可以顺利的使用QMK来定制键盘。
你是否为不知道你的键盘能不能运行QMK而苦恼? 如果你的机械键盘是你自己做的那么这把键盘一般可以运行QMK。我们提供了[一大堆自制键盘](http://qmk.fm/keyboards/), 所以即便你的键盘不能运行QMK你也很容易能找到满足你需求的键盘。
## 概览
这个教程有7个主要部分
* [新手上路](newbs_getting_started.md)
* [用命令行构建你的第一个固件](newbs_building_firmware.md)
* [用在线界面构建你的第一个固件](newbs_building_firmware_configurator.md)
* [刷新固件](newbs_flashing.md)
* [测试和调试](newbs_testing_debugging.md)
* [Git最佳实践](newbs_best_practices.md)
* [其他学习资源](newbs_learn_more_resources.md)
这份教程旨在帮助没有固件构建经验的人,也是根据该目的做出选择和建议。这些程序有很多替代方法,大部分替代我们都支持。如果你对完成一个任务有疑问,可以[向我们寻求帮助](getting_started_getting_help.md).
## 其他资源
* [Thomas Baart的 QMK基础博客](https://thomasbaart.nl/category/mechanical-keyboards/firmware/qmk/qmk-basics/) 这是一个用户创建的博客涵盖了为新手准备的使用QMK的基础知识。

View File

@@ -0,0 +1,163 @@
# 最佳实践
## 或者说, "我应如何学会不再担心并开始爱上Git。"
本文档旨在指导新手以最佳方式获得为QMK做出贡献的丝滑体验。我们将介绍为QMK做出贡献的过程详细介绍使这项任务更容易的一些方法然后我们将制造一些问题来教你如何解决它们。
本文假设了一些内容:
1. 一有个GitHub账户, 并[创建qmk_firmware仓库分叉](getting_started_github.md)到你的帐户.
2. 你已经[建立你的构建环境](newbs_getting_started.md?id=environment-setup).
## 你分叉的主分支: 一直在上传,但不要提交
十分推荐您在QMK开发过程中无论开发是否完成都要保持你的 `master` 分支更新,但是 ***一定不要*** 提交。相反你应该在一个开发分叉中做出你所有修改并在开发时提交pull request。
减少合并冲突的可能性 &mdash; 两个或多个用户同时编辑文件的同一部分的实例 &mdash; 保持 `master` 分支最新,并创建一个新的分支来开始新的开发。
### 更新你的主分支
保持你的 `master` 更新, 推荐你添加QMK Firmware仓库作为Git的远程仓库想这么做的话, 你可以打开你的Git命令行接口然后输入:
```
git remote add upstream https://github.com/qmk/qmk_firmware.git
```
运行 `git remote -v`, 来确定这个仓库已经添加,以下是回显:
```
$ git remote -v
origin https://github.com/<your_username>/qmk_firmware.git (fetch)
origin https://github.com/<your_username>/qmk_firmware.git (push)
upstream https://github.com/qmk/qmk_firmware.git (fetch)
upstream https://github.com/qmk/qmk_firmware.git (push)
```
现在添加已完成,你可以用`git fetch upstream`来检查仓库的更新. 这会检索branches 和 tags &mdash; 统称为"refs" &mdash; 从QMK仓库, 也就是 `upstream`。我们可以比较我们的分叉和QMK的 `origin` 数据的不同。
要更新你的分叉的主分支请运行以下命令在每行之后按Enter键:
```
git checkout master
git fetch upstream
git pull upstream master
git push origin master
```
这回切换到你的`master` 分支, 检索你QMK仓库的refs, 下载当前QMK `master` 分支到你的电脑, 并上传到你的分叉.
### 做改动
你可以输入以下命令来创建一个新的分支来做改动:
```
git checkout -b dev_branch
git push --set-upstream origin dev_branch
```
这回建立一个叫做 `dev_branch`的新分支, 检查一下, 然后想你的分叉保存分支. 使用 `--set-upstream` 参数来告诉git使用你的分叉并且当每次你对你的分支用`git push``git pull`时要使用`dev_branch`。 它仅需要在第一次push的时候使用然后你就可以很安全的用 `git push``git pull`, 并不需要其他参数了。
!> 使用 `git push`, 你可以用 `-u` 来代替 `--set-upstream` &mdash; `-u``--set-upstream`的简写。
您可以将您的分支命名为您想要的任何名称,但建议将其命名为与您要进行的更改相关的内容。
默认情况下 `git checkout -b` 在已经检出的分支上建立新的分支。您可以将新的分支建立在未检出的现有分支的基础上,方法是将现有分支的名称添加到命令:
```
git checkout -b dev_branch master
```
现在您已经有了一个开发分支那么就打开您的文本编辑器并进行您需要做的任何更改。建议对您的分支进行许多小的提交这样任何引起问题的更改都可以在需要时更容易地跟踪和撤消。要进行更改编辑并保存任何需要更新的文件请将它们添加到Git的 *staging area* ,然后将它们提交到您的分支:
```
git add path/to/updated_file
git commit -m "My commit message."
```
` git add`添加已更改到Git的*临时区域*也就是Git的“加载区域”的文件。其中包含使用 `git commit` 命令 *提交* 的并已经保存到仓库的更改。建议您使用描述性的提交消息,这样您就可以一目了然地知道更改了什么。
!> 如果你修改了很多文件,但所有的文件都是同一个更改的一部分,你可以用 `git add .` 来添加当前目录中所有已更改的文件而不是单独添加每个文件.
### 发布更改
最后一步是将更改推送到您的分叉。 输入 `git push`来推送. 现在Git将`dev_branch`的当前状态发布到您的分叉。
## 解决合并冲突
有时当您在某个分支中的工作需要很长时间才能完成时其他人所做的更改与您在打开pull request时对该分支所做的更改相冲突。这称为*rebase* 即合并冲突,当多个人编辑同一文件的同一部分时会发生这种情况。
### 重新调整您的更改
*rebase*是Git的一种方法它获取在某一点上应用的更改撤销它们然后将相同的更改应用到另一点。在合并冲突的情况下您可以重新设置您的分支以获取在创建分支时和当前时间之间的那段时间所做的更改。
运行以下命令来开始:
```
git fetch upstream
git rev-list --left-right --count HEAD...upstream/master
```
这里的`git rev-list` 命令返回当前分支和qmk的主分支之间不同的提交数。我们首先运行`git fetch`以确保我们有代表upstream仓库的refs。 `git rev-list` 命令的回显有两个数字:
```
$ git rev-list --left-right --count HEAD...upstream/master
7 35
```
第一个数字表示自创建以来当前分支的提交数, 第二个数字是自创建当前分支以来对 `upstream/master` 进行的提交数, 因此, 当前分支中未记录变动。
既然知道当前分支和upstream仓库的当前状态我们可以开始一个rebase操作
```
git rebase upstream/master
```
这就是让Git撤销当前分支上的提交然后根据QMK的主分支重新应用它们。
```
$ git rebase upstream/master
First, rewinding head to replay your work on top of it...
Applying: Commit #1
Using index info to reconstruct a base tree...
M conflicting_file_1.txt
Falling back to patching base and 3-way merge...
Auto-merging conflicting_file_1.txt
CONFLICT (content): Merge conflict in conflicting_file_1.txt
error: Failed to merge in the changes.
hint: Use 'git am --show-current-patch' to see the failed patch
Patch failed at 0001 Commit #1
Resolve all conflicts manually, mark them as resolved with
"git add/rm <conflicted_files>", then run "git rebase --continue".
You can instead skip this commit: run "git rebase --skip".
To abort and get back to the state before "git rebase", run "git rebase --abort".
```
这告诉我们有一个合并冲突,并给出带有冲突的文件的名称。在文本编辑器中打开冲突的文件,在该文件的某个位置,您会发现如下内容:
```
<<<<<<< HEAD
<p>For help with any issues, email us at support@webhost.us.</p>
=======
<p>Need help? Email support@webhost.us.</p>
>>>>>>> Commit #1
```
`<<<<<<< HEAD`行标记合并冲突的开始, `>>>>>>> Commit #1` 行标记结束, 冲突选项被 `=======`分隔。`HEAD`那端的部分来自文件的qmk master版本标记有commit消息的部分来自当前的分支持和提交。
因为Git跟踪 *对文件的更改* 而不是直接跟踪文件的内容所以如果Git在提交之前找不到文件中的文本它将不知道如何编辑该文件。重新编辑文件将解决冲突。进行更改然后保存文件。
```
<p>Need help? Email support@webhost.us.</p>
```
现在运行:
```
git add conflicting_file_1.txt
git rebase --continue
```
Git记录对冲突文件的更改并继续应用来自我们的分支的提交直到它到达末尾。

View File

@@ -0,0 +1,81 @@
# 构建第一个固件
现在您已经建立了构建环境就可以开始构建自定义固件了。对于本指南的这一部分我们将在3个程序之间切换——文件管理器、文本编辑器和终端窗口。请保持所有3个程序打开直到您完成并对键盘固件满意。
如果您在按照指南第一部分的操作之后关闭并重新打开了终端窗口请不要忘记输入“cd qmk_firmware”来使您的终端位于正确的目录。
## 导航到您的keymaps文件夹
首先导航到键盘的 `keymaps` 文件夹.
?> 如果您使用的是MacOS或Windows可以使用以下命令轻松地打开keymaps文件夹。
?> macOS:
open keyboards/<keyboard_folder>/keymaps
?> Windows:
start .\\keyboards\\<keyboard_folder>\\keymaps
## 创建`default` 布局副本
打开`keymaps`文件夹后,您将需要创建`default`文件夹的副本。我们强烈建议您将文件夹命名为与Github用户名相同的名称但您也可以使用任何您想使用的名称只要它只包含小写字母、数字和下划线字符。
要自动执行此过程,您还可以选择运行`new_keymap.sh`脚本。
导航到`qmk_firmware/util` 目录然后输入以下命令:
```
./new_keymap.sh <keyboard path> <username>
```
例如一个名字叫ymzcdg的用户要创建1up60hse的布局他需要输入
```
./new_keymap.sh 1upkeyboards/1up60hse ymzcdg
```
## 在你最钟爱的文本编辑器中打开`keymap.c`
打开你的`keymap.c`. 在这个文件中,您可以找到控制键盘行为的结构。 在你的`keymap.c` 的顶部有一些让布局更易读的define和enum。在靠下的位置你会找到一行和下面这句很像的:
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
从这一行开始便是层列表。这行下面你会看到包括 `LAYOUT``KEYMAP`这两个词的几行, 从这些行开始就是层。在这一行下面是组成该特定层的键的列表。
!> 编辑您的keymap文件时注意不要添加或删除任何逗号。如果这样做您将阻止您的固件编译并且您可能不容易找出多余的或缺少的逗号在哪里。
## 根据您的喜好自定义布局
如何完成这一步骤完全取决于您。改变一直困扰着你的问题或者完全重做所有的事情。如果您不需要全部图层可以删除图层或者将图层总数增加到32个。查看以下文档了解可以在此处定义的内容:
* [键码](keycodes.md)
* [特性](features.md)
* [问题与解答](faq.md)
?> 当你明白布局是怎么工作时,您也要让每次改变尽可能小。一次改变很大在调试时找出问题会十分困难。
## 构建你的固件
完成对布局的更改后您就要构建固件了。为此请返回终端窗口并运行build命令:
make <my_keyboard>:<my_keymap>
例如如果您的keymap名为“xyverz”并且您正在为rev5 planck构建一个keymap那么您将使用此命令
make planck/rev5:xyverz
在编译过程中,你将看到屏幕上有很多输出,通知您正在编译哪些文件他应该以与下文类似的输出结束:
```
Linking: .build/planck_rev5_xyverz.elf [OK]
Creating load file for flashing: .build/planck_rev5_xyverz.hex [OK]
Copying planck_rev5_xyverz.hex to qmk_firmware folder [OK]
Checking file size of planck_rev5_xyverz.hex [OK]
* File size is fine - 18392/28672
```
## 刷新你的固件
请移步 [Flashing Firmware](newbs_flashing.md) 来继续。

View File

@@ -0,0 +1,307 @@
# 刷新你的键盘
现在您已经构建了一个自定义固件文件,那么您就需要刷新键盘了。
## 用QMK工具箱刷新键盘
刷新键盘的最简单方法是使用[QMK 工具箱](https://github.com/qmk/qmk_toolbox/releases).
但是QMK工具箱目前仅适用于Windows和MacOS。如果您使用的是Linux或者只是希望从命令行刷新固件则必须使用 [方法概述](newbs_flashing.md#flash-your-keyboard-from-the-command-line).
### 将文件加载到QMK工具箱中
首先打开QMK工具箱应用程序。您将要在访达或资源管理器中找到固件文件。您的键盘固件可能是两种格式之一`.hex``.bin`。qmk会尝试将键盘的相应文件复制到“qmk_firmware”根目录中。
?> 如果您在Windows或MacOS上可以使用以下命令轻松地在资源管理器或访达中打开当前固件文件夹。
?> Windows:
start .
?> macOS:
open .
固件文件始终遵循此命名格式:
<keyboard_name>_<keymap_name>.{bin,hex}
例如,使用 `default` 布局的 `plank/rev5` 将使用以下名字:
planck_rev5_default.hex
找到固件文件后将其拖到QMK工具箱中的“Local file”框中或单击“Open”并导航到固件文件的存储位置。
### 将键盘置于DFUBootloader模式
要刷新自定义固件,您必须将键盘置于特殊的刷新模式。在此模式下,您将无法键入或使用键盘。在写入固件时,不要拔下键盘插头或以其他方式中断刷新过程,这一点非常重要。
不同的键盘有不同的方式进入这种特殊模式。如果您的键盘当前运行的是QMK或TMK而您没有得到特定的指示请按顺序尝试以下操作:
* 按住两个shift键并按 `Pause`
* 按住两个shift键并按 `B`
* 拔下键盘插头, 同时按住空格键和 `B` , 插上键盘然后等一会再放开按键
* 按下PCB底部的 `RESET` 物理键
* 找到PCB上标记有 `BOOT0``RESET`的金属点, 在插入PCB的同时短接它们
成功后您将在QMK工具箱中看到类似以下内容的消息:
```
*** Clueboard - Clueboard 66% HotSwap disconnected -- 0xC1ED:0x2390
*** DFU device connected
```
### 刷新你的键盘
单击QMK工具箱中的 `Flash` 按钮。您将看到类似以下内容的输出:
```
*** Clueboard - Clueboard 66% HotSwap disconnected -- 0xC1ED:0x2390
*** DFU device connected
*** Attempting to flash, please don't remove device
>>> dfu-programmer atmega32u4 erase --force
Erasing flash... Success
Checking memory from 0x0 to 0x6FFF... Empty.
>>> dfu-programmer atmega32u4 flash /Users/skully/qmk_firmware/clueboard_66_hotswap_gen1_skully.hex
Checking memory from 0x0 to 0x55FF... Empty.
0% 100% Programming 0x5600 bytes...
[>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>] Success
0% 100% Reading 0x7000 bytes...
[>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>] Success
Validating... Success
0x5600 bytes written into 0x7000 bytes memory (76.79%).
>>> dfu-programmer atmega32u4 reset
*** DFU device disconnected
*** Clueboard - Clueboard 66% HotSwap connected -- 0xC1ED:0x2390
```
## 使用命令行刷新键盘
首先您需要知道您的键盘使用的是哪个bootloader。通常是以下四个常见的bootloader。Pro-Micro 和 clones 使用 CATERINA, Teensy 使用 Halfkay, OLKB 键盘使用 QMK-DFU, 其他的atmega32u4芯片使用DFU。
您可以在以下文章中了解更多关于bootloader[刷新指令和Bootloader信息](flashing.md)。
如果您知道正在使用的bootloader是哪种那么在编译固件时可以向“make”命令里添加一些额外参数以自动执行刷新过程。
### DFU
对于DFU引导加载程序当您准备好编译和刷新固件时打开终端窗口并运行构建命令:
make <my_keyboard>:<my_keymap>:dfu
例如如果您的布局名为“xyverz”并且您正在为rev5 planck构建一个布局那么您可以使用此命令
make planck/rev5:xyverz:dfu
编译完成后,应输出以下内容:
```
Linking: .build/planck_rev5_xyverz.elf [OK]
Creating load file for flashing: .build/planck_rev5_xyverz.hex [OK]
Copying planck_rev5_xyverz.hex to qmk_firmware folder [OK]
Checking file size of planck_rev5_xyverz.hex
* File size is fine - 18574/28672
```
到了这个时候, 构建脚本将每隔5秒查找一次DFU。它将重复以下操作直到找到设备或将其取消。
dfu-programmer: no device present.
Error: Bootloader not found. Trying again in 5s.
一旦出现以上回显,您将需要重置控制器。然后,它应该显示与以下类似的输出:
```
*** Attempting to flash, please don't remove device
>>> dfu-programmer atmega32u4 erase --force
Erasing flash... Success
Checking memory from 0x0 to 0x6FFF... Empty.
>>> dfu-programmer atmega32u4 flash /Users/skully/qmk_firmware/clueboard_66_hotswap_gen1_skully.hex
Checking memory from 0x0 to 0x55FF... Empty.
0% 100% Programming 0x5600 bytes...
[>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>] Success
0% 100% Reading 0x7000 bytes...
[>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>] Success
Validating... Success
0x5600 bytes written into 0x7000 bytes memory (76.79%).
>>> dfu-programmer atmega32u4 reset
```
如果您对此有任何问题,您可能需要这样做:
sudo make <my_keyboard>:<my_keymap>:dfu
#### DFU命令
有许多DFU命令可用于将固件下载到DFU设备
* `:dfu` - 这是正常选项等待DFU设备可用然后刷新固件。这将每隔5秒检查一次以查看是否出现了DFU设备。
* `:dfu-ee` - 这将刷新一个`eep`文件,而不是普通的十六进制文件。这很不常见。
* `:dfu-split-left` - 这将刷新正常固件,就像默认选项 (`:dfu`)一样. 但是这也会刷新“左侧”EEPROM文件用于分割键盘。 _这是基于Elite C的键盘的推荐选择。_
* `:dfu-split-right` - 这将刷新正常固件,就像默认选项(`:dfu`). 但是这也会刷新“右侧”EEPROM文件用于分割键盘。 _这是基于Elite C的键盘的推荐选择。_
### Caterina
对于Arduino板以及其克隆版来说(比如SparkFun和ProMicro), 准备好编译和刷新固件后,打开终端窗口并运行构建命令:
make <my_keyboard>:<my_keymap>:avrdude
比如, 你的布局叫"xyverz"你要创建一个rev2 Lets Split的布局,你要用以下命令:
make lets_split/rev2:xyverz:avrdude
固件完成编译后,它将输出类似以下的内容:
```
Linking: .build/lets_split_rev2_xyverz.elf [OK]
Creating load file for flashing: .build/lets_split_rev2_xyverz.hex [OK]
Checking file size of lets_split_rev2_xyverz.hex [OK]
* File size is fine - 27938/28672
Detecting USB port, reset your controller now..............
```
此时复位然后脚本将检测bootloader然后刷新固件。输出应该像这样:
```
Detected controller on USB port at /dev/ttyS15
Connecting to programmer: .
Found programmer: Id = "CATERIN"; type = S
Software Version = 1.0; No Hardware Version given.
Programmer supports auto addr increment.
Programmer supports buffered memory access with buffersize=128 bytes.
Programmer supports the following devices:
Device code: 0x44
avrdude.exe: AVR device initialized and ready to accept instructions
Reading | ################################################## | 100% 0.00s
avrdude.exe: Device signature = 0x1e9587 (probably m32u4)
avrdude.exe: NOTE: "flash" memory has been specified, an erase cycle will be performed
To disable this feature, specify the -D option.
avrdude.exe: erasing chip
avrdude.exe: reading input file "./.build/lets_split_rev2_xyverz.hex"
avrdude.exe: input file ./.build/lets_split_rev2_xyverz.hex auto detected as Intel Hex
avrdude.exe: writing flash (27938 bytes):
Writing | ################################################## | 100% 2.40s
avrdude.exe: 27938 bytes of flash written
avrdude.exe: verifying flash memory against ./.build/lets_split_rev2_xyverz.hex:
avrdude.exe: load data flash data from input file ./.build/lets_split_rev2_xyverz.hex:
avrdude.exe: input file ./.build/lets_split_rev2_xyverz.hex auto detected as Intel Hex
avrdude.exe: input file ./.build/lets_split_rev2_xyverz.hex contains 27938 bytes
avrdude.exe: reading on-chip flash data:
Reading | ################################################## | 100% 0.43s
avrdude.exe: verifying ...
avrdude.exe: 27938 bytes of flash verified
avrdude.exe: safemode: Fuses OK (E:CB, H:D8, L:FF)
avrdude.exe done. Thank you.
```
如果您对此有任何问题,您可能需要这样做:
sudo make <my_keyboard>:<my_keymap>:avrdude
此外,如果要刷新多个板,请使用以下命令:
make <keyboard>:<keymap>:avrdude-loop
当你完成了刷新后你需要按下ctrl+c或者其他正确的按键来让你的操作系统终止循环。
## HalfKay
对于PJRC设备Teensy当您准备好编译和刷新固件时打开终端窗口并运行构建命令:
make <my_keyboard>:<my_keymap>:teensy
比如, 如果你的布局叫做"xyverz"你想创建Ergodox or Ergodox EZ的布局,你要使用以下命令:
make erdogox_ez:xyverz:teensy
固件完成编译后,它将输出如下内容:
```
Linking: .build/ergodox_ez_xyverz.elf [OK]
Creating load file for flashing: .build/ergodox_ez_xyverz.hex [OK]
Checking file size of ergodox_ez_xyverz.hex [OK]
* File size is fine - 25584/32256
Teensy Loader, Command Line, Version 2.1
Read "./.build/ergodox_ez_xyverz.hex": 25584 bytes, 79.3% usage
Waiting for Teensy device...
(hint: press the reset button)
```
此时,复位键盘。完成后,您将看到如下输出:
```
Found HalfKay Bootloader
Read "./.build/ergodox_ez_xyverz.hex": 28532 bytes, 88.5% usage
Programming............................................................................................................................................................................
...................................................
Booting
```
## STM32 (ARM)
对于大多数ARM板包括Proton C、Planck Rev 6和Preonic Rev 3当您准备好编译和刷新固件时打开终端窗口并运行构建命令
make <my_keyboard>:<my_keymap>:dfu-util
例如如果您的keymap被命名为“xyverz”并且您正在为Planck Revision 6键盘构建一个布局那么您需要使用以下命令然后将键盘重新启动到bootloader在完成编译之前
make planck/rev6:xyverz:dfu-util
固件完成编译后,它将输出如下内容:
```
Linking: .build/planck_rev6_xyverz.elf [OK]
Creating binary load file for flashing: .build/planck_rev6_xyverz.bin [OK]
Creating load file for flashing: .build/planck_rev6_xyverz.hex [OK]
Size after:
text data bss dec hex filename
0 41820 0 41820 a35c .build/planck_rev6_xyverz.hex
Copying planck_rev6_xyverz.bin to qmk_firmware folder [OK]
dfu-util 0.9
Copyright 2005-2009 Weston Schmidt, Harald Welte and OpenMoko Inc.
Copyright 2010-2016 Tormod Volden and Stefan Schmidt
This program is Free Software and has ABSOLUTELY NO WARRANTY
Please report bugs to http://sourceforge.net/p/dfu-util/tickets/
Invalid DFU suffix signature
A valid DFU suffix will be required in a future dfu-util release!!!
Opening DFU capable USB device...
ID 0483:df11
Run-time device DFU version 011a
Claiming USB DFU Interface...
Setting Alternate Setting #0 ...
Determining device status: state = dfuERROR, status = 10
dfuERROR, clearing status
Determining device status: state = dfuIDLE, status = 0
dfuIDLE, continuing
DFU mode device DFU version 011a
Device returned transfer size 2048
DfuSe interface name: "Internal Flash "
Downloading to address = 0x08000000, size = 41824
Download [=========================] 100% 41824 bytes
Download done.
File downloaded successfully
Transitioning to dfuMANIFEST state
```
## 试一试吧!
恭喜您! 您的自定义固件已经刷写到您的键盘
试一试,确保一切按你想的方式进行。我们写了[测试和调试](newbs_testing_debugging.md)来完善新手引导。 因此,请前往那里了解如何排除自定义功能的故障。

View File

@@ -0,0 +1,102 @@
# 介绍
你的电脑键盘里面包含一个处理器, 这个处理器和你电脑里面的不太一样。这个处理器负责运行一些特殊的软件这些软件可以监测按钮按下并将按钮处于按下还是释放状态的数据发送出去。QMK就是这样一种软件即监测按钮被按下并发送这样的信息到作为主机的计算机上。当你创建了你的布局, 你也就创建了你的键盘运行的的可执行程序。
QMK试图通过使简单的事情变得更简单使使不可能成为可能来把大量的权力交给你。你不需要懂如何通过程序创建强大的布局——你只需要遵循简单的语法规则。
# 新手上路
在你能创建布局前,你要安装一些软件来建立你的开发环境。无论你想编译多少固件,这个操作都只需要进行一次。
如果您更喜欢图形化界面, 请考虑使用在线工具[QMK配置器](https://config.qmk.fm)。 请参考 [使用在线GUI构建您的第一个固件](newbs_building_firmware_configurator.md)。
## 下载软件
### 文本编辑器
你需要一个可以编辑 **纯文本** 文件的程序。在Windows上你可以用Notepad, 在Linux上使用gedit这两个都是简单又实用的文本编辑工具。 在macOS上, 请小心使用 “文本编辑” 这个默认软件: 如果你不明确的选择_格式_菜单中的 _制作纯文本_ 的话文本将不会被保存为纯文本。
你也可以下载并安装一个专用编辑器 [Sublime Text](https://www.sublimetext.com/) 或 [VS Code](https://code.visualstudio.com/)。 这大概是跨平台的最好方法了, 这些编辑器是专门为了编辑代码设计的。
?>搞不清用哪种编辑器? Laurence Bradford 写了篇关于编辑器选择的文章 [a great introduction](https://learntocodewith.me/programming/basics/text-editors/)。
### QMK 工具箱
QMK 工具箱 是一种可选的Windows和macOS下的图形化工具它可以对你的定制键盘进行编程和调试。你可能会发现它就是你能简单的刷新你的键盘固件并查看调试信息的稀世珍宝。
[在这里下载最新发布版本](https://github.com/qmk/qmk_toolbox/releases/latest)
* Windows用户: `qmk_toolbox.exe` (绿色版) 或 `qmk_toolbox_install.exe` (安装版)
* macOS用户: `QMK.Toolbox.app.zip` (绿色版) or `QMK.Toolbox.pkg` (安装版)
## 建立你的环境
我们为了使QMK环境变得更容易建立已竭尽所能。你只需要准备Linux 或 Unix 环境, 然后让QMK安装剩余部分。
?> 如果你从未使用过Linux/Unix的命令行,有一些你需要学习的基础概念和命令以下资料将教会您使用QMK环境的必要能力:<br>
[必会Linux命令](https://www.guru99.com/must-know-linux-commands.html)<br>
[一些基本的Unix命令](https://www.tjhsst.edu/~dhyatt/superap/unixcmd.html)
### Windows
你需要安装MSYS2和Git.
* 按照以下安装说明进行操作[MSYS2 主页](http://www.msys2.org)。
* 关闭所有打开的MSYS2终端并打开新的MSYS2 MinGW 64-bit终端。
* 使用以下命令安装Git: `pacman -S git`
### macOS
你需要安装Homebrew。按照以下说明进行操作 [Homebrew 主页](https://brew.sh)。
在Homebrew安装完成后, 继续 _同步QMK工程_. 这一步你将会通过运行一个脚本安装其他包。
### Linux
你将需要安装Git.你很有可能已经安装,但若你尚未安装,可以使用以下命令进行安装:
* Debian / Ubuntu / Devuan: `apt-get install git`
* Fedora / Red Hat / CentOS: `yum install git`
* Arch: `pacman -S git`
?> 无论你使用哪种平台Docker都可以是你的选择[点这里进一步了解](getting_started_build_tools.md#docker)
## 同步QMK工程
当你建立Linux/Unix环境后,你就已经可以下载QMK了.下载时我们可以用Git来 "clone" QMK仓库. 打开一个终端或MSYS2 MinGW 窗口,在阅读剩余的指南时请保持窗口打开。在窗口里面运行以下两句命令:
```shell
git clone --recurse-submodules https://github.com/qmk/qmk_firmware.git
cd qmk_firmware
```
?> 如果您已经知道[如何使用GitHub](getting_started_github.md), 我们推荐您创建您自己的分支并克隆。 如果您不知道这是什么, 您完全可以忽略这句无关紧要的话。
QMK附带一个脚本可帮助您设置剩余的所需内容.您可以通过输入此命令来运行它:
util/qmk_install.sh
## 测试你的开发环境
现在你的QMK环境已经建立完毕, 你可以为你的键盘创建固件了。开始试着创建键盘的默认固件吧。 你需要使用以下格式的命令创建固件:
make <keyboard>:default
比如, 制作一个Clueboard 66%的固件,需要用:
make clueboard/66/rev3:default
当完成后你要看到一些回显,尾部如下:
```
Linking: .build/clueboard_66_rev3_default.elf [OK]
Creating load file for flashing: .build/clueboard_66_rev3_default.hex [OK]
Copying clueboard_66_rev3_default.hex to qmk_firmware folder [OK]
Checking file size of clueboard_66_rev3_default.hex [OK]
* The firmware size is fine - 26356/28672 (2316 bytes free)
```
# 创建你的布局
现在你可以创建属于你自己的布局了! 请移步 [构建你的第一个固件](newbs_building_firmware.md)来继续。

View File

@@ -0,0 +1,15 @@
# 学习资源
这些资源旨在让QMK社区的新成员更了解新成员文档中提供的信息。
Git 资源:
* [很好的通用教程](https://www.codecademy.com/learn/learn-git)
* [从例子中学习Git游戏](https://learngitbranching.js.org/)
* [了解有关GitHub的更多信息的Git资源](getting_started_github.md)
* [专门针对QMK的Git资源](contributing.md)
命令行资源:
* [超棒的命令行通用教程](https://www.codecademy.com/learn/learn-the-command-line)

View File

@@ -0,0 +1,43 @@
# 测试和调试
使用自定义固件刷新键盘后,您就可以测试它了。如果您幸运,一切都会完美运行,但如果没有,这份文件将帮助您找出问题所在。
## 测试
测试键盘通常非常简单。按下每一个键并确保它发送的是您期望的键。甚至有一些程序可以帮助您确保没有任何键失效。
注意这些程序不是由QMK提供或认可的。
* [Switch Hitter](https://elitekeyboards.com/switchhitter.php) (仅Windows)
* [Keyboard Viewer](https://www.imore.com/how-use-keyboard-viewer-your-mac) (仅Mac)
* [Keyboard Tester](http://www.keyboardtester.com) (网页版)
* [Keyboard Checker](http://keyboardchecker.com) (网页版)
## 使用QMK工具箱进行调试
[QMK工具箱](https://github.com/qmk/qmk_toolbox) 将会在你的`rules.mk`中有`CONSOLE_ENABLE = yes`的时候显示你键盘发来的消息。 默认情况下,输出极为有限,不过您可以打开调试模式来增加输出信息量。使用你键盘布局中的`DEBUG`键码,使用 [命令](feature_command.md) 特性来使能调试模式, 或者向你的布局中添加以下代码。
```c
void keyboard_post_init_user(void) {
// Customise these values to desired behaviour
debug_enable=true;
debug_matrix=true;
//debug_keyboard=true;
//debug_mouse=true;
}
```
<!-- 需要修改之处:这里要添加调试回显。 -->
## 发送您自己的调试消息
有时用[custom code](custom_quantum_functions.md)发送自定义调试信息很有用. 这么做很简单. 首先在你文件头部包含`print.h`:
#include <print.h>
之后,您可以使用一些不同的打印功能:
* `print("string")`: 打印简单字符串.
* `uprintf("%s string", var)`: 打印格式化字符串
* `dprint("string")`: 仅在调试模式使能时打印简单字符串
* `dprintf("%s string", var)`: 仅在调试模式使能时打印格式化字符串

View File

@@ -0,0 +1,170 @@
# QMK术语表
## ARM
多家公司生产的32位单片机系列例如Atmel, Cypress, Kinetis, NXP, ST, 和 TI等公司。
## AVR
[Atmel](http://www.microchip.com/)公司的单片机系列。 AVR是TMK的初始支持平台。
## AZERTY
Français (法国)标准键盘布局。用键盘的前六个字母命名。
## Backlight(背光)
键盘上照明的通称。背光通常是一组LED灯通过键帽或者按轴发光但也不总是这样。
## Bluetooth(蓝牙)
一种短距离点对点无线协议。许多多无线键盘使用此协议。
## Bootloader(引导加载程序)
一种写到你单片机的保护区的特殊的程序该程序可以使单片机升级自己的固件通常是通过USB来升级。
## Bootmagic(热改键)
允许各种键盘行为动态变化的功能,如交换或禁用常用键。
## C
一种适用于系统代码的低级编程语言。大多数qmk代码是用C编写的。
## Colemak
一种流行的键盘布局。
## Compile(编译)
把人可读的代码转换成你的单片机可以运行的机器代码的过程。
## Dvorak
一个由August Dvorak博士在20世纪30年代创建的布局。Dvorak简化键盘(Dvorak Simplified Keyboard)的缩写。
## Dynamic Macro(动态宏)
一种记录在键盘上的宏,当键盘拔出或计算机重新启动时,宏将丢失。
* [动态宏文档](feature_dynamic_macros.md)
## Eclipse
是一种受C语言开发者追捧的集成开发环境(IDE)。
* [Eclipse安装说明](eclipse.md)
## Firmware(固件)
用来控制单片机的软件。
## FLIP
爱特梅尔(Atmel)提供的AVR器件刷写软件。我们一般推荐 [QMK刷写工具](https://github.com/qmk/qmk_flasher)但是对于一些高级用例需要FLIP。
## git
命令行版本控制软件
## GitHub
负责大多数QMK项目的网站。它是Git、问题跟踪和其他帮助我们运行qmk的功能的集成平台。
## ISP(在系统编程)
在系统编程(In-system programming), 使用外部硬件和JTAG管脚对AVR芯片进行编程的一种方法。
## hid_listen
从键盘接收调试消息的接口。 您可以使用[QMK Flasher](https://github.com/qmk/qmk_flasher)或[PJRC's hid_listen](https://www.pjrc.com/teensy/hid_listen.html)查看这些消息
## Keycode(键码)
表示特定键的2字节数据。`0x00`-`0xFF`用于[基本键码](keycodes_basic.md)而`0x100`-`0xFFFF`用于[量子键码](quantum_keycodes.md).
## Key Down
一个键按下尚未抬起时触发的事件。
## Key Up
一个键抬起时触发的事件。
## Keymap(键映射)
映射到物理键盘布局的一组键码,在按键和按键释放时进行处理。有时翻译为布局,意为软件上表示的布局,即映射。
## Layer(层)
为了让一个键实现多个功能的抽象结构。最高活动层有限。
## Leader Key(前导键、设置菜单键)
本功能允许您点击前导键然后按顺序按1-3个键子来激活按键或其他量子功能。
* [前导键文档](feature_leader_key.md)
## LED
发光二极管,键盘上最常用的指示灯装置。
## Make
用于编译所有源文件的软件包。可以使用`make`命令和其他参数来编译你的固件。
## Matrix(矩阵)
一种由列和行组成的接线模式,使单片机能够用较少的引脚检测按键。矩阵通常包含二极管,以达到全键无冲。
## Macro(宏)
本功能可以在敲击单个键后发送多个按键事件(hid报告)。
* [宏文档](feature_macros.md)
## MCU(单片机、微控制单元)
微控制单元,键盘的处理器。
## Modifier(修改键、修饰键、功能键)
按住该键将会改变其他键的功能,修饰键包括 Ctrl, Alt, 和 Shift。
## Mousekeys(鼠标键)
本功能在您敲击键盘时会控制鼠标光标。
* [鼠标键文档](feature_mouse_keys.md)
## N-Key Rollover (NKRO、全键无冲)
一种术语,适用于能够同时报告任意数量按键的键盘。
## Oneshot Modifier(粘滞键)
一种能让你的功能键一直保持按下,直到你按下其他键的功能。它叫做粘滞键或叫做粘连键,该功能由软件实现而非机械结构。
## ProMicro
一种低成本AVR开发板。这种板子很容易在购物网站找到(价格不到20RMB)但是据说刷写pro micro有点令人抓狂。
## Pull Request(拉请求、PR)
向QMK请求提交代码。我们鼓励所有用户提交你们自己的键盘的代码。
## QWERTY
标准英文键盘通常也用于其他语言例如中文。是用键盘前6个字母命名的。
## QWERTZ
标准Deutsche(德语)键盘布局。使用前6个字母明名。
## Rollover(允许翻转、无冲形式)
该术语表示在一个键已按下时按下另一个键。形式包括2KRO(双键无冲),6KRO(6键无冲),和NKRO(全键无冲),无冲表示可同时按下而不产生冲突的键的数量。
## Scancode(扫描码)
HID报告中的一个1字节的数字表示一个键子。这些数字在下列文档中[HID Usage Tables](https://www.usb.org/sites/default/files/documents/hut1_12v2.pdf)该文档发布于[USB-IF](http://www.usb.org/)。
## Space Cadet键盘的shift键
一种特使的shift设置能让你通过敲击左或右shift一次或多次键入不同的括号。
* [Space Cadet键盘文档](feature_space_cadet.md)
## Tap(敲击、单击)
按下并释放一个键。在某些情况下您需要区分键按下和键抬起,但是单击把两个事件都包括了。
## Tap Dance(多击键)
本功能允许向同一个键子分配多个键码,并根据按键次数区分。
* [多击键文档](feature_tap_dance.md)
## Teensy
一种低成本AVR开发板<!--译者吐槽:我怎么感觉成本不低。好吧,我穷。 -->通常用于手工连线键盘。这个teensy是有点小贵但是halfkay bootloader会让它刷写十分简单所以也很常用。
## Underlight(背光)
用于照亮电路板底面的LED的总称。这些LED通常从印刷电路板的底部向键盘所在的表面发光。
## Unicode
在较大的计算机世界中Unicode是一组编码方案用于表示任何语言中的字符。 与qmk相关的是它意味着使用各种操作系统方案来发送Unicode代码点而不是扫描码。
* [Unicode文档](feature_unicode.md)
## Unit Testing(单元测试)
针对qmk的自动运行测试框架。单元测试帮助我们确信我们的更改不会破坏任何东西。
* [单元测试文档](unit_testing.md)
## USB
通用串行总线,键盘最常见的有线接口。
## USB 主机 (或简易主机)
USB诸暨市你的电脑或者你的键盘所插的任何设备。
# 并没有找到你想找到的术语?
[建立一个issue](https://github.com/qmk/qmk_firmware/issues) 想好你的问题或许你所问的术语就会添加到这里。创建一个PR帮我们添加需要添加的术语当然坠吼了:)

View File

@@ -32,54 +32,65 @@
static uint8_t i2c_address;
// This configures the I2C clock to 400khz assuming a 72Mhz clock
// For more info : https://www.st.com/en/embedded-software/stsw-stm32126.html
static const I2CConfig i2cconfig = {
STM32_TIMINGR_PRESC(15U) |
STM32_TIMINGR_SCLDEL(4U) | STM32_TIMINGR_SDADEL(2U) |
STM32_TIMINGR_SCLH(15U) | STM32_TIMINGR_SCLL(21U),
STM32_TIMINGR_PRESC(I2C1_TIMINGR_PRESC) |
STM32_TIMINGR_SCLDEL(I2C1_TIMINGR_SCLDEL) | STM32_TIMINGR_SDADEL(I2C1_TIMINGR_SDADEL) |
STM32_TIMINGR_SCLH(I2C1_TIMINGR_SCLH) | STM32_TIMINGR_SCLL(I2C1_TIMINGR_SCLL),
0,
0
};
static i2c_status_t chibios_to_qmk(const msg_t* status) {
switch (*status) {
case I2C_NO_ERROR:
return I2C_STATUS_SUCCESS;
case I2C_TIMEOUT:
return I2C_STATUS_TIMEOUT;
// I2C_BUS_ERROR, I2C_ARBITRATION_LOST, I2C_ACK_FAILURE, I2C_OVERRUN, I2C_PEC_ERROR, I2C_SMB_ALERT
default:
return I2C_STATUS_ERROR;
}
}
__attribute__ ((weak))
void i2c_init(void)
{
// Try releasing special pins for a short time
palSetPadMode(I2C1_BANK, I2C1_SCL, PAL_MODE_INPUT);
palSetPadMode(I2C1_BANK, I2C1_SDA, PAL_MODE_INPUT);
palSetPadMode(I2C1_SCL_BANK, I2C1_SCL, PAL_MODE_INPUT);
palSetPadMode(I2C1_SDA_BANK, I2C1_SDA, PAL_MODE_INPUT);
chThdSleepMilliseconds(10);
palSetPadMode(I2C1_BANK, I2C1_SCL, PAL_MODE_ALTERNATE(4) | PAL_STM32_OTYPE_OPENDRAIN);
palSetPadMode(I2C1_BANK, I2C1_SDA, PAL_MODE_ALTERNATE(4) | PAL_STM32_OTYPE_OPENDRAIN);
palSetPadMode(I2C1_SCL_BANK, I2C1_SCL, PAL_MODE_ALTERNATE(I2C1_SCL_PAL_MODE) | PAL_STM32_OTYPE_OPENDRAIN);
palSetPadMode(I2C1_SDA_BANK, I2C1_SDA, PAL_MODE_ALTERNATE(I2C1_SDA_PAL_MODE) | PAL_STM32_OTYPE_OPENDRAIN);
//i2cInit(); //This is invoked by halInit() so no need to redo it.
}
// This is usually not needed
uint8_t i2c_start(uint8_t address)
i2c_status_t i2c_start(uint8_t address)
{
i2c_address = address;
i2cStart(&I2C_DRIVER, &i2cconfig);
return 0;
return I2C_STATUS_SUCCESS;
}
uint8_t i2c_transmit(uint8_t address, uint8_t* data, uint16_t length, uint16_t timeout)
i2c_status_t i2c_transmit(uint8_t address, const uint8_t* data, uint16_t length, uint16_t timeout)
{
i2c_address = address;
i2cStart(&I2C_DRIVER, &i2cconfig);
return i2cMasterTransmitTimeout(&I2C_DRIVER, (i2c_address >> 1), data, length, 0, 0, MS2ST(timeout));
msg_t status = i2cMasterTransmitTimeout(&I2C_DRIVER, (i2c_address >> 1), data, length, 0, 0, MS2ST(timeout));
return chibios_to_qmk(&status);
}
uint8_t i2c_receive(uint8_t address, uint8_t* data, uint16_t length, uint16_t timeout)
i2c_status_t i2c_receive(uint8_t address, uint8_t* data, uint16_t length, uint16_t timeout)
{
i2c_address = address;
i2cStart(&I2C_DRIVER, &i2cconfig);
return i2cMasterReceiveTimeout(&I2C_DRIVER, (i2c_address >> 1), data, length, MS2ST(timeout));
msg_t status = i2cMasterReceiveTimeout(&I2C_DRIVER, (i2c_address >> 1), data, length, MS2ST(timeout));
return chibios_to_qmk(&status);
}
uint8_t i2c_writeReg(uint8_t devaddr, uint8_t regaddr, uint8_t* data, uint16_t length, uint16_t timeout)
i2c_status_t i2c_writeReg(uint8_t devaddr, uint8_t regaddr, const uint8_t* data, uint16_t length, uint16_t timeout)
{
i2c_address = devaddr;
i2cStart(&I2C_DRIVER, &i2cconfig);
@@ -91,19 +102,19 @@ uint8_t i2c_writeReg(uint8_t devaddr, uint8_t regaddr, uint8_t* data, uint16_t l
}
complete_packet[0] = regaddr;
return i2cMasterTransmitTimeout(&I2C_DRIVER, (i2c_address >> 1), complete_packet, length + 1, 0, 0, MS2ST(timeout));
msg_t status = i2cMasterTransmitTimeout(&I2C_DRIVER, (i2c_address >> 1), complete_packet, length + 1, 0, 0, MS2ST(timeout));
return chibios_to_qmk(&status);
}
uint8_t i2c_readReg(uint8_t devaddr, uint8_t* regaddr, uint8_t* data, uint16_t length, uint16_t timeout)
i2c_status_t i2c_readReg(uint8_t devaddr, uint8_t* regaddr, uint8_t* data, uint16_t length, uint16_t timeout)
{
i2c_address = devaddr;
i2cStart(&I2C_DRIVER, &i2cconfig);
return i2cMasterTransmitTimeout(&I2C_DRIVER, (i2c_address >> 1), regaddr, 1, data, length, MS2ST(timeout));
msg_t status = i2cMasterTransmitTimeout(&I2C_DRIVER, (i2c_address >> 1), regaddr, 1, data, length, MS2ST(timeout));
return chibios_to_qmk(&status);
}
// This is usually not needed. It releases the driver to allow pins to become GPIO again.
uint8_t i2c_stop(uint16_t timeout)
void i2c_stop(void)
{
i2cStop(&I2C_DRIVER);
return 0;
}

View File

@@ -26,9 +26,19 @@
#include "ch.h"
#include <hal.h>
#ifndef I2C1_BANK
#define I2C1_BANK GPIOB
#ifdef I2C1_BANK
#define I2C1_SCL_BANK I2C1_BANK
#define I2C1_SDA_BANK I2C1_BANK
#endif
#ifndef I2C1_SCL_BANK
#define I2C1_SCL_BANK GPIOB
#endif
#ifndef I2C1_SDA_BANK
#define I2C1_SDA_BANK GPIOB
#endif
#ifndef I2C1_SCL
#define I2C1_SCL 6
#endif
@@ -36,15 +46,47 @@
#define I2C1_SDA 7
#endif
// The default PAL alternate modes are used to signal that the pins are used for I2C
#ifndef I2C1_SCL_PAL_MODE
#define I2C1_SCL_PAL_MODE 4
#endif
#ifndef I2C1_SDA_PAL_MODE
#define I2C1_SDA_PAL_MODE 4
#endif
// The default timing values below configures the I2C clock to 400khz assuming a 72Mhz clock
// For more info : https://www.st.com/en/embedded-software/stsw-stm32126.html
#ifndef I2C1_TIMINGR_PRESC
#define I2C1_TIMINGR_PRESC 15U
#endif
#ifndef I2C1_TIMINGR_SCLDEL
#define I2C1_TIMINGR_SCLDEL 4U
#endif
#ifndef I2C1_TIMINGR_SDADEL
#define I2C1_TIMINGR_SDADEL 2U
#endif
#ifndef I2C1_TIMINGR_SCLH
#define I2C1_TIMINGR_SCLH 15U
#endif
#ifndef I2C1_TIMINGR_SCLL
#define I2C1_TIMINGR_SCLL 21U
#endif
#ifndef I2C_DRIVER
#define I2C_DRIVER I2CD1
#endif
typedef int16_t i2c_status_t;
#define I2C_STATUS_SUCCESS (0)
#define I2C_STATUS_ERROR (-1)
#define I2C_STATUS_TIMEOUT (-2)
void i2c_init(void);
uint8_t i2c_start(uint8_t address);
uint8_t i2c_transmit(uint8_t address, uint8_t* data, uint16_t length, uint16_t timeout);
uint8_t i2c_receive(uint8_t address, uint8_t* data, uint16_t length, uint16_t timeout);
uint8_t i2c_transmit_receive(uint8_t address, uint8_t * tx_body, uint16_t tx_length, uint8_t * rx_body, uint16_t rx_length);
uint8_t i2c_writeReg(uint8_t devaddr, uint8_t regaddr, uint8_t* data, uint16_t length, uint16_t timeout);
uint8_t i2c_readReg(uint8_t devaddr, uint8_t* regaddr, uint8_t* data, uint16_t length, uint16_t timeout);
uint8_t i2c_stop(uint16_t timeout);
i2c_status_t i2c_start(uint8_t address);
i2c_status_t i2c_transmit(uint8_t address, const uint8_t* data, uint16_t length, uint16_t timeout);
i2c_status_t i2c_receive(uint8_t address, uint8_t* data, uint16_t length, uint16_t timeout);
i2c_status_t i2c_transmit_receive(uint8_t address, uint8_t * tx_body, uint16_t tx_length, uint8_t * rx_body, uint16_t rx_length);
i2c_status_t i2c_writeReg(uint8_t devaddr, uint8_t regaddr, const uint8_t* data, uint16_t length, uint16_t timeout);
i2c_status_t i2c_readReg(uint8_t devaddr, uint8_t* regaddr, uint8_t* data, uint16_t length, uint16_t timeout);
void i2c_stop(void);

View File

@@ -25,7 +25,7 @@
#include <avr/io.h>
#include <avr/interrupt.h>
#include "rgblight_types.h"
#include "color.h"
/* User Interface

View File

@@ -7,43 +7,56 @@
#include "i2c_master.h"
#include "timer.h"
#include "wait.h"
#ifndef F_SCL
#define F_SCL 400000UL // SCL frequency
# define F_SCL 400000UL // SCL frequency
#endif
#define Prescaler 1
#define TWBR_val ((((F_CPU / F_SCL) / Prescaler) - 16 ) / 2)
#define TWBR_val ((((F_CPU / F_SCL) / Prescaler) - 16) / 2)
void i2c_init(void)
{
TWSR = 0; /* no prescaler */
void i2c_init(void) {
TWSR = 0; /* no prescaler */
TWBR = (uint8_t)TWBR_val;
#ifdef __AVR_ATmega32A__
// set pull-up resistors on I2C bus pins
PORTC |= 0b11;
// enable TWI (two-wire interface)
TWCR |= (1 << TWEN);
// enable TWI interrupt and slave address ACK
TWCR |= (1 << TWIE);
TWCR |= (1 << TWEA);
#endif
}
i2c_status_t i2c_start(uint8_t address, uint16_t timeout)
{
i2c_status_t i2c_start(uint8_t address, uint16_t timeout) {
// reset TWI control register
TWCR = 0;
// transmit START condition
TWCR = (1<<TWINT) | (1<<TWSTA) | (1<<TWEN);
TWCR = (1 << TWINT) | (1 << TWSTA) | (1 << TWEN);
uint16_t timeout_timer = timer_read();
while( !(TWCR & (1<<TWINT)) ) {
while (!(TWCR & (1 << TWINT))) {
if ((timeout != I2C_TIMEOUT_INFINITE) && ((timer_read() - timeout_timer) >= timeout)) {
return I2C_STATUS_TIMEOUT;
}
}
// check if the start condition was successfully transmitted
if(((TW_STATUS & 0xF8) != TW_START) && ((TW_STATUS & 0xF8) != TW_REP_START)){ return I2C_STATUS_ERROR; }
if (((TW_STATUS & 0xF8) != TW_START) && ((TW_STATUS & 0xF8) != TW_REP_START)) {
return I2C_STATUS_ERROR;
}
// load slave address into data register
TWDR = address;
// start transmission of address
TWCR = (1<<TWINT) | (1<<TWEN);
TWCR = (1 << TWINT) | (1 << TWEN);
timeout_timer = timer_read();
while( !(TWCR & (1<<TWINT)) ) {
while (!(TWCR & (1 << TWINT))) {
if ((timeout != I2C_TIMEOUT_INFINITE) && ((timer_read() - timeout_timer) >= timeout)) {
return I2C_STATUS_TIMEOUT;
}
@@ -51,38 +64,39 @@ i2c_status_t i2c_start(uint8_t address, uint16_t timeout)
// check if the device has acknowledged the READ / WRITE mode
uint8_t twst = TW_STATUS & 0xF8;
if ( (twst != TW_MT_SLA_ACK) && (twst != TW_MR_SLA_ACK) ) return I2C_STATUS_ERROR;
if ((twst != TW_MT_SLA_ACK) && (twst != TW_MR_SLA_ACK)) {
return I2C_STATUS_ERROR;
}
return I2C_STATUS_SUCCESS;
}
i2c_status_t i2c_write(uint8_t data, uint16_t timeout)
{
i2c_status_t i2c_write(uint8_t data, uint16_t timeout) {
// load data into data register
TWDR = data;
// start transmission of data
TWCR = (1<<TWINT) | (1<<TWEN);
TWCR = (1 << TWINT) | (1 << TWEN);
uint16_t timeout_timer = timer_read();
while( !(TWCR & (1<<TWINT)) ) {
while (!(TWCR & (1 << TWINT))) {
if ((timeout != I2C_TIMEOUT_INFINITE) && ((timer_read() - timeout_timer) >= timeout)) {
return I2C_STATUS_TIMEOUT;
}
}
if( (TW_STATUS & 0xF8) != TW_MT_DATA_ACK ){ return I2C_STATUS_ERROR; }
if ((TW_STATUS & 0xF8) != TW_MT_DATA_ACK) {
return I2C_STATUS_ERROR;
}
return I2C_STATUS_SUCCESS;
}
int16_t i2c_read_ack(uint16_t timeout)
{
int16_t i2c_read_ack(uint16_t timeout) {
// start TWI module and acknowledge data after reception
TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWEA);
TWCR = (1 << TWINT) | (1 << TWEN) | (1 << TWEA);
uint16_t timeout_timer = timer_read();
while( !(TWCR & (1<<TWINT)) ) {
while (!(TWCR & (1 << TWINT))) {
if ((timeout != I2C_TIMEOUT_INFINITE) && ((timer_read() - timeout_timer) >= timeout)) {
return I2C_STATUS_TIMEOUT;
}
@@ -92,14 +106,12 @@ int16_t i2c_read_ack(uint16_t timeout)
return TWDR;
}
int16_t i2c_read_nack(uint16_t timeout)
{
int16_t i2c_read_nack(uint16_t timeout) {
// start receiving without acknowledging reception
TWCR = (1<<TWINT) | (1<<TWEN);
TWCR = (1 << TWINT) | (1 << TWEN);
uint16_t timeout_timer = timer_read();
while( !(TWCR & (1<<TWINT)) ) {
while (!(TWCR & (1 << TWINT))) {
if ((timeout != I2C_TIMEOUT_INFINITE) && ((timer_read() - timeout_timer) >= timeout)) {
return I2C_STATUS_TIMEOUT;
}
@@ -109,115 +121,89 @@ int16_t i2c_read_nack(uint16_t timeout)
return TWDR;
}
i2c_status_t i2c_transmit(uint8_t address, uint8_t* data, uint16_t length, uint16_t timeout)
{
i2c_status_t i2c_transmit(uint8_t address, const uint8_t* data, uint16_t length, uint16_t timeout) {
i2c_status_t status = i2c_start(address | I2C_WRITE, timeout);
if (status) return status;
for (uint16_t i = 0; i < length; i++) {
for (uint16_t i = 0; i < length && status >= 0; i++) {
status = i2c_write(data[i], timeout);
if (status) return status;
}
status = i2c_stop(timeout);
if (status) return status;
i2c_stop();
return I2C_STATUS_SUCCESS;
return status;
}
i2c_status_t i2c_receive(uint8_t address, uint8_t* data, uint16_t length, uint16_t timeout)
{
i2c_status_t i2c_receive(uint8_t address, uint8_t* data, uint16_t length, uint16_t timeout) {
i2c_status_t status = i2c_start(address | I2C_READ, timeout);
if (status) return status;
for (uint16_t i = 0; i < (length-1); i++) {
for (uint16_t i = 0; i < (length - 1) && status >= 0; i++) {
status = i2c_read_ack(timeout);
if (status >= 0) {
data[i] = status;
} else {
return status;
}
}
status = i2c_read_nack(timeout);
if (status >= 0 ) {
data[(length-1)] = status;
} else {
return status;
if (status >= 0) {
status = i2c_read_nack(timeout);
if (status >= 0) {
data[(length - 1)] = status;
}
}
status = i2c_stop(timeout);
if (status) return status;
i2c_stop();
return I2C_STATUS_SUCCESS;
return (status < 0) ? status : I2C_STATUS_SUCCESS;
}
i2c_status_t i2c_writeReg(uint8_t devaddr, uint8_t regaddr, uint8_t* data, uint16_t length, uint16_t timeout)
{
i2c_status_t i2c_writeReg(uint8_t devaddr, uint8_t regaddr, const uint8_t* data, uint16_t length, uint16_t timeout) {
i2c_status_t status = i2c_start(devaddr | 0x00, timeout);
if (status) return status;
if (status >= 0) {
status = i2c_write(regaddr, timeout);
status = i2c_write(regaddr, timeout);
if (status) return status;
for (uint16_t i = 0; i < length; i++) {
status = i2c_write(data[i], timeout);
if (status) return status;
for (uint16_t i = 0; i < length && status >= 0; i++) {
status = i2c_write(data[i], timeout);
}
}
status = i2c_stop(timeout);
if (status) return status;
i2c_stop();
return I2C_STATUS_SUCCESS;
return status;
}
i2c_status_t i2c_readReg(uint8_t devaddr, uint8_t regaddr, uint8_t* data, uint16_t length, uint16_t timeout)
{
i2c_status_t i2c_readReg(uint8_t devaddr, uint8_t regaddr, uint8_t* data, uint16_t length, uint16_t timeout) {
i2c_status_t status = i2c_start(devaddr, timeout);
if (status) return status;
if (status < 0) {
goto error;
}
status = i2c_write(regaddr, timeout);
if (status) return status;
status = i2c_stop(timeout);
if (status) return status;
if (status < 0) {
goto error;
}
status = i2c_start(devaddr | 0x01, timeout);
if (status) return status;
for (uint16_t i = 0; i < (length-1); i++) {
for (uint16_t i = 0; i < (length - 1) && status >= 0; i++) {
status = i2c_read_ack(timeout);
if (status >= 0) {
data[i] = status;
} else {
return status;
}
}
status = i2c_read_nack(timeout);
if (status >= 0 ) {
data[(length-1)] = status;
} else {
return status;
if (status >= 0) {
status = i2c_read_nack(timeout);
if (status >= 0) {
data[(length - 1)] = status;
}
}
status = i2c_stop(timeout);
if (status) return status;
error:
i2c_stop();
return I2C_STATUS_SUCCESS;
return (status < 0) ? status : I2C_STATUS_SUCCESS;
}
i2c_status_t i2c_stop(uint16_t timeout)
{
void i2c_stop(void) {
// transmit STOP condition
TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWSTO);
uint16_t timeout_timer = timer_read();
while(TWCR & (1<<TWSTO)) {
if ((timeout != I2C_TIMEOUT_INFINITE) && ((timer_read() - timeout_timer) >= timeout)) {
return I2C_STATUS_TIMEOUT;
}
}
return I2C_STATUS_SUCCESS;
TWCR = (1 << TWINT) | (1 << TWEN) | (1 << TWSTO);
}

View File

@@ -22,10 +22,10 @@ i2c_status_t i2c_start(uint8_t address, uint16_t timeout);
i2c_status_t i2c_write(uint8_t data, uint16_t timeout);
int16_t i2c_read_ack(uint16_t timeout);
int16_t i2c_read_nack(uint16_t timeout);
i2c_status_t i2c_transmit(uint8_t address, uint8_t* data, uint16_t length, uint16_t timeout);
i2c_status_t i2c_transmit(uint8_t address, const uint8_t* data, uint16_t length, uint16_t timeout);
i2c_status_t i2c_receive(uint8_t address, uint8_t* data, uint16_t length, uint16_t timeout);
i2c_status_t i2c_writeReg(uint8_t devaddr, uint8_t regaddr, uint8_t* data, uint16_t length, uint16_t timeout);
i2c_status_t i2c_writeReg(uint8_t devaddr, uint8_t regaddr, const uint8_t* data, uint16_t length, uint16_t timeout);
i2c_status_t i2c_readReg(uint8_t devaddr, uint8_t regaddr, uint8_t* data, uint16_t length, uint16_t timeout);
i2c_status_t i2c_stop(uint16_t timeout);
void i2c_stop(void);
#endif // I2C_MASTER_H
#endif // I2C_MASTER_H

View File

@@ -16,7 +16,7 @@ static volatile bool slave_has_register_set = false;
void i2c_slave_init(uint8_t address){
// load address into TWI address register
TWAR = (address << 1);
TWAR = address;
// set the TWCR to enable address matching and enable TWI, clear TWINT, enable TWI interrupt
TWCR = (1 << TWIE) | (1 << TWEA) | (1 << TWINT) | (1 << TWEN);
}

View File

@@ -27,6 +27,12 @@
#include <util/delay.h>
#include "debug.h"
#if !defined(LED_ARRAY) && defined(RGB_MATRIX_ENABLE)
// LED color buffer
LED_TYPE led[DRIVER_LED_TOTAL];
#define LED_ARRAY led
#endif
#ifdef RGBW_BB_TWI
// Port for the I2C
@@ -141,6 +147,25 @@ unsigned char I2C_Write(unsigned char c)
#endif
#ifdef RGB_MATRIX_ENABLE
// Set an led in the buffer to a color
void inline ws2812_setled(int i, uint8_t r, uint8_t g, uint8_t b)
{
led[i].r = r;
led[i].g = g;
led[i].b = b;
}
void ws2812_setled_all (uint8_t r, uint8_t g, uint8_t b)
{
for (int i = 0; i < sizeof(led)/sizeof(led[0]); i++) {
led[i].r = r;
led[i].g = g;
led[i].b = b;
}
}
#endif
// Setleds for standard RGB
void inline ws2812_setleds(LED_TYPE *ledarray, uint16_t leds)
{

View File

@@ -28,8 +28,7 @@
//#include "ws2812_config.h"
//#include "i2cmaster.h"
#include "rgblight_types.h"
#include "quantum/color.h"
/* User Interface
*
@@ -43,6 +42,10 @@
* - Send out the LED data
* - Wait 50<35>s to reset the LEDs
*/
#ifdef RGB_MATRIX_ENABLE
void ws2812_setled (int index, uint8_t r, uint8_t g, uint8_t b);
void ws2812_setled_all (uint8_t r, uint8_t g, uint8_t b);
#endif
void ws2812_setleds (LED_TYPE *ledarray, uint16_t number_of_leds);
void ws2812_setleds_pin (LED_TYPE *ledarray, uint16_t number_of_leds,uint8_t pinmask);

View File

@@ -75,10 +75,10 @@ uint8_t g_twi_transfer_buffer[20];
// buffers and the transfers in IS31FL3733_write_pwm_buffer() but it's
// probably not worth the extra complexity.
uint8_t g_pwm_buffer[DRIVER_COUNT][192];
bool g_pwm_buffer_update_required = false;
bool g_pwm_buffer_update_required[DRIVER_COUNT] = { false };
uint8_t g_led_control_registers[DRIVER_COUNT][24] = { { 0 }, { 0 } };
bool g_led_control_registers_update_required = false;
bool g_led_control_registers_update_required[DRIVER_COUNT] = { false };
void IS31FL3733_write_register( uint8_t addr, uint8_t reg, uint8_t data )
{
@@ -123,12 +123,13 @@ void IS31FL3733_write_pwm_buffer( uint8_t addr, uint8_t *pwm_buffer )
}
}
void IS31FL3733_init( uint8_t addr )
void IS31FL3733_init( uint8_t addr, uint8_t sync)
{
// In order to avoid the LEDs being driven with garbage data
// in the LED driver's PWM registers, shutdown is enabled last.
// Set up the mode and other settings, clear the PWM registers,
// then disable software shutdown.
// Sync is passed so set it according to the datasheet.
// Unlock the command register.
IS31FL3733_write_register( addr, ISSI_COMMANDREGISTER_WRITELOCK, 0xC5 );
@@ -161,7 +162,7 @@ void IS31FL3733_init( uint8_t addr )
// Set global current to maximum.
IS31FL3733_write_register( addr, ISSI_REG_GLOBALCURRENT, 0xFF );
// Disable software shutdown.
IS31FL3733_write_register( addr, ISSI_REG_CONFIGURATION, 0x01 );
IS31FL3733_write_register( addr, ISSI_REG_CONFIGURATION, (sync << 6) | 0x01 );
// Wait 10ms to ensure the device has woken up.
#ifdef __AVR__
@@ -179,7 +180,7 @@ void IS31FL3733_set_color( int index, uint8_t red, uint8_t green, uint8_t blue )
g_pwm_buffer[led.driver][led.r] = red;
g_pwm_buffer[led.driver][led.g] = green;
g_pwm_buffer[led.driver][led.b] = blue;
g_pwm_buffer_update_required = true;
g_pwm_buffer_update_required[led.driver] = true;
}
}
@@ -218,35 +219,34 @@ void IS31FL3733_set_led_control_register( uint8_t index, bool red, bool green, b
g_led_control_registers[led.driver][control_register_b] &= ~(1 << bit_b);
}
g_led_control_registers_update_required = true;
g_led_control_registers_update_required[led.driver] = true;
}
void IS31FL3733_update_pwm_buffers( uint8_t addr1, uint8_t addr2 )
void IS31FL3733_update_pwm_buffers( uint8_t addr, uint8_t index )
{
if ( g_pwm_buffer_update_required )
if ( g_pwm_buffer_update_required[index] )
{
// Firstly we need to unlock the command register and select PG1
IS31FL3733_write_register( addr1, ISSI_COMMANDREGISTER_WRITELOCK, 0xC5 );
IS31FL3733_write_register( addr1, ISSI_COMMANDREGISTER, ISSI_PAGE_PWM );
IS31FL3733_write_register( addr, ISSI_COMMANDREGISTER_WRITELOCK, 0xC5 );
IS31FL3733_write_register( addr, ISSI_COMMANDREGISTER, ISSI_PAGE_PWM );
IS31FL3733_write_pwm_buffer( addr1, g_pwm_buffer[0] );
//IS31FL3733_write_pwm_buffer( addr2, g_pwm_buffer[1] );
IS31FL3733_write_pwm_buffer( addr, g_pwm_buffer[index] );
}
g_pwm_buffer_update_required = false;
g_pwm_buffer_update_required[index] = false;
}
void IS31FL3733_update_led_control_registers( uint8_t addr1, uint8_t addr2 )
void IS31FL3733_update_led_control_registers( uint8_t addr, uint8_t index )
{
if ( g_led_control_registers_update_required )
if ( g_led_control_registers_update_required[index] )
{
// Firstly we need to unlock the command register and select PG0
IS31FL3733_write_register( addr1, ISSI_COMMANDREGISTER_WRITELOCK, 0xC5 );
IS31FL3733_write_register( addr1, ISSI_COMMANDREGISTER, ISSI_PAGE_LEDCONTROL );
IS31FL3733_write_register( addr, ISSI_COMMANDREGISTER_WRITELOCK, 0xC5 );
IS31FL3733_write_register( addr, ISSI_COMMANDREGISTER, ISSI_PAGE_LEDCONTROL );
for ( int i=0; i<24; i++ )
{
IS31FL3733_write_register(addr1, i, g_led_control_registers[0][i] );
//IS31FL3733_write_register(addr2, i, g_led_control_registers[1][i] );
IS31FL3733_write_register(addr, i, g_led_control_registers[index][i] );
}
}
g_led_control_registers_update_required[index] = false;
}

View File

@@ -32,7 +32,7 @@ typedef struct is31_led {
extern const is31_led g_is31_leds[DRIVER_LED_TOTAL];
void IS31FL3733_init( uint8_t addr );
void IS31FL3733_init( uint8_t addr, uint8_t sync );
void IS31FL3733_write_register( uint8_t addr, uint8_t reg, uint8_t data );
void IS31FL3733_write_pwm_buffer( uint8_t addr, uint8_t *pwm_buffer );
@@ -45,8 +45,8 @@ void IS31FL3733_set_led_control_register( uint8_t index, bool red, bool green, b
// (eg. from a timer interrupt).
// Call this while idle (in between matrix scans).
// If the buffer is dirty, it will update the driver with the buffer.
void IS31FL3733_update_pwm_buffers( uint8_t addr1, uint8_t addr2 );
void IS31FL3733_update_led_control_registers( uint8_t addr1, uint8_t addr2 );
void IS31FL3733_update_pwm_buffers( uint8_t addr, uint8_t index );
void IS31FL3733_update_led_control_registers( uint8_t addr, uint8_t index );
#define A_1 0x00
#define A_2 0x01

252
drivers/issi/is31fl3737.c Normal file
View File

@@ -0,0 +1,252 @@
/* Copyright 2017 Jason Williams
* Copyright 2018 Jack Humbert
* Copyright 2018 Yiancar
*
* 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/>.
*/
#ifdef __AVR__
#include <avr/interrupt.h>
#include <avr/io.h>
#include <util/delay.h>
#else
#include "wait.h"
#endif
#include <string.h>
#include "i2c_master.h"
#include "progmem.h"
#include "rgb_matrix.h"
// This is a 7-bit address, that gets left-shifted and bit 0
// set to 0 for write, 1 for read (as per I2C protocol)
// The address will vary depending on your wiring:
// 00 <-> GND
// 01 <-> SCL
// 10 <-> SDA
// 11 <-> VCC
// ADDR1 represents A1:A0 of the 7-bit address.
// ADDR2 represents A3:A2 of the 7-bit address.
// The result is: 0b101(ADDR2)(ADDR1)
#define ISSI_ADDR_DEFAULT 0x50
#define ISSI_COMMANDREGISTER 0xFD
#define ISSI_COMMANDREGISTER_WRITELOCK 0xFE
#define ISSI_INTERRUPTMASKREGISTER 0xF0
#define ISSI_INTERRUPTSTATUSREGISTER 0xF1
#define ISSI_PAGE_LEDCONTROL 0x00 //PG0
#define ISSI_PAGE_PWM 0x01 //PG1
#define ISSI_PAGE_AUTOBREATH 0x02 //PG2
#define ISSI_PAGE_FUNCTION 0x03 //PG3
#define ISSI_REG_CONFIGURATION 0x00 //PG3
#define ISSI_REG_GLOBALCURRENT 0x01 //PG3
#define ISSI_REG_RESET 0x11// PG3
#define ISSI_REG_SWPULLUP 0x0F //PG3
#define ISSI_REG_CSPULLUP 0x10 //PG3
#ifndef ISSI_TIMEOUT
#define ISSI_TIMEOUT 100
#endif
#ifndef ISSI_PERSISTENCE
#define ISSI_PERSISTENCE 0
#endif
// Transfer buffer for TWITransmitData()
uint8_t g_twi_transfer_buffer[20];
// These buffers match the IS31FL3737 PWM registers.
// The control buffers match the PG0 LED On/Off registers.
// Storing them like this is optimal for I2C transfers to the registers.
// We could optimize this and take out the unused registers from these
// buffers and the transfers in IS31FL3737_write_pwm_buffer() but it's
// probably not worth the extra complexity.
uint8_t g_pwm_buffer[DRIVER_COUNT][192];
bool g_pwm_buffer_update_required = false;
uint8_t g_led_control_registers[DRIVER_COUNT][24] = { { 0 } };
bool g_led_control_registers_update_required = false;
void IS31FL3737_write_register( uint8_t addr, uint8_t reg, uint8_t data )
{
g_twi_transfer_buffer[0] = reg;
g_twi_transfer_buffer[1] = data;
#if ISSI_PERSISTENCE > 0
for (uint8_t i = 0; i < ISSI_PERSISTENCE; i++) {
if (i2c_transmit(addr << 1, g_twi_transfer_buffer, 2, ISSI_TIMEOUT) == 0)
break;
}
#else
i2c_transmit(addr << 1, g_twi_transfer_buffer, 2, ISSI_TIMEOUT);
#endif
}
void IS31FL3737_write_pwm_buffer( uint8_t addr, uint8_t *pwm_buffer )
{
// assumes PG1 is already selected
// transmit PWM registers in 12 transfers of 16 bytes
// g_twi_transfer_buffer[] is 20 bytes
// iterate over the pwm_buffer contents at 16 byte intervals
for ( int i = 0; i < 192; i += 16 ) {
g_twi_transfer_buffer[0] = i;
// copy the data from i to i+15
// device will auto-increment register for data after the first byte
// thus this sets registers 0x00-0x0F, 0x10-0x1F, etc. in one transfer
for ( int j = 0; j < 16; j++ ) {
g_twi_transfer_buffer[1 + j] = pwm_buffer[i + j];
}
#if ISSI_PERSISTENCE > 0
for (uint8_t i = 0; i < ISSI_PERSISTENCE; i++) {
if (i2c_transmit(addr << 1, g_twi_transfer_buffer, 17, ISSI_TIMEOUT) == 0)
break;
}
#else
i2c_transmit(addr << 1, g_twi_transfer_buffer, 17, ISSI_TIMEOUT);
#endif
}
}
void IS31FL3737_init( uint8_t addr )
{
// In order to avoid the LEDs being driven with garbage data
// in the LED driver's PWM registers, shutdown is enabled last.
// Set up the mode and other settings, clear the PWM registers,
// then disable software shutdown.
// Unlock the command register.
IS31FL3737_write_register( addr, ISSI_COMMANDREGISTER_WRITELOCK, 0xC5 );
// Select PG0
IS31FL3737_write_register( addr, ISSI_COMMANDREGISTER, ISSI_PAGE_LEDCONTROL );
// Turn off all LEDs.
for ( int i = 0x00; i <= 0x17; i++ )
{
IS31FL3737_write_register( addr, i, 0x00 );
}
// Unlock the command register.
IS31FL3737_write_register( addr, ISSI_COMMANDREGISTER_WRITELOCK, 0xC5 );
// Select PG1
IS31FL3737_write_register( addr, ISSI_COMMANDREGISTER, ISSI_PAGE_PWM );
// Set PWM on all LEDs to 0
// No need to setup Breath registers to PWM as that is the default.
for ( int i = 0x00; i <= 0xBF; i++ )
{
IS31FL3737_write_register( addr, i, 0x00 );
}
// Unlock the command register.
IS31FL3737_write_register( addr, ISSI_COMMANDREGISTER_WRITELOCK, 0xC5 );
// Select PG3
IS31FL3737_write_register( addr, ISSI_COMMANDREGISTER, ISSI_PAGE_FUNCTION );
// Set global current to maximum.
IS31FL3737_write_register( addr, ISSI_REG_GLOBALCURRENT, 0xFF );
// Disable software shutdown.
IS31FL3737_write_register( addr, ISSI_REG_CONFIGURATION, 0x01 );
// Wait 10ms to ensure the device has woken up.
#ifdef __AVR__
_delay_ms( 10 );
#else
wait_ms(10);
#endif
}
void IS31FL3737_set_color( int index, uint8_t red, uint8_t green, uint8_t blue )
{
if ( index >= 0 && index < DRIVER_LED_TOTAL ) {
is31_led led = g_is31_leds[index];
g_pwm_buffer[led.driver][led.r] = red;
g_pwm_buffer[led.driver][led.g] = green;
g_pwm_buffer[led.driver][led.b] = blue;
g_pwm_buffer_update_required = true;
}
}
void IS31FL3737_set_color_all( uint8_t red, uint8_t green, uint8_t blue )
{
for ( int i = 0; i < DRIVER_LED_TOTAL; i++ )
{
IS31FL3737_set_color( i, red, green, blue );
}
}
void IS31FL3737_set_led_control_register( uint8_t index, bool red, bool green, bool blue )
{
is31_led led = g_is31_leds[index];
uint8_t control_register_r = led.r / 8;
uint8_t control_register_g = led.g / 8;
uint8_t control_register_b = led.b / 8;
uint8_t bit_r = led.r % 8;
uint8_t bit_g = led.g % 8;
uint8_t bit_b = led.b % 8;
if ( red ) {
g_led_control_registers[led.driver][control_register_r] |= (1 << bit_r);
} else {
g_led_control_registers[led.driver][control_register_r] &= ~(1 << bit_r);
}
if ( green ) {
g_led_control_registers[led.driver][control_register_g] |= (1 << bit_g);
} else {
g_led_control_registers[led.driver][control_register_g] &= ~(1 << bit_g);
}
if ( blue ) {
g_led_control_registers[led.driver][control_register_b] |= (1 << bit_b);
} else {
g_led_control_registers[led.driver][control_register_b] &= ~(1 << bit_b);
}
g_led_control_registers_update_required = true;
}
void IS31FL3737_update_pwm_buffers( uint8_t addr1, uint8_t addr2 )
{
if ( g_pwm_buffer_update_required )
{
// Firstly we need to unlock the command register and select PG1
IS31FL3737_write_register( addr1, ISSI_COMMANDREGISTER_WRITELOCK, 0xC5 );
IS31FL3737_write_register( addr1, ISSI_COMMANDREGISTER, ISSI_PAGE_PWM );
IS31FL3737_write_pwm_buffer( addr1, g_pwm_buffer[0] );
//IS31FL3737_write_pwm_buffer( addr2, g_pwm_buffer[1] );
}
g_pwm_buffer_update_required = false;
}
void IS31FL3737_update_led_control_registers( uint8_t addr1, uint8_t addr2 )
{
if ( g_led_control_registers_update_required )
{
// Firstly we need to unlock the command register and select PG0
IS31FL3737_write_register( addr1, ISSI_COMMANDREGISTER_WRITELOCK, 0xC5 );
IS31FL3737_write_register( addr1, ISSI_COMMANDREGISTER, ISSI_PAGE_LEDCONTROL );
for ( int i=0; i<24; i++ )
{
IS31FL3737_write_register(addr1, i, g_led_control_registers[0][i] );
//IS31FL3737_write_register(addr2, i, g_led_control_registers[1][i] );
}
}
}

207
drivers/issi/is31fl3737.h Normal file
View File

@@ -0,0 +1,207 @@
/* Copyright 2017 Jason Williams
* Copyright 2018 Jack Humbert
* Copyright 2018 Yiancar
*
* 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/>.
*/
#ifndef IS31FL3737_DRIVER_H
#define IS31FL3737_DRIVER_H
#include <stdint.h>
#include <stdbool.h>
typedef struct is31_led {
uint8_t driver:2;
uint8_t r;
uint8_t g;
uint8_t b;
} __attribute__((packed)) is31_led;
extern const is31_led g_is31_leds[DRIVER_LED_TOTAL];
void IS31FL3737_init( uint8_t addr );
void IS31FL3737_write_register( uint8_t addr, uint8_t reg, uint8_t data );
void IS31FL3737_write_pwm_buffer( uint8_t addr, uint8_t *pwm_buffer );
void IS31FL3737_set_color( int index, uint8_t red, uint8_t green, uint8_t blue );
void IS31FL3737_set_color_all( uint8_t red, uint8_t green, uint8_t blue );
void IS31FL3737_set_led_control_register( uint8_t index, bool red, bool green, bool blue );
// This should not be called from an interrupt
// (eg. from a timer interrupt).
// Call this while idle (in between matrix scans).
// If the buffer is dirty, it will update the driver with the buffer.
void IS31FL3737_update_pwm_buffers( uint8_t addr1, uint8_t addr2 );
void IS31FL3737_update_led_control_registers( uint8_t addr1, uint8_t addr2 );
#define A_1 0x00
#define A_2 0x01
#define A_3 0x02
#define A_4 0x03
#define A_5 0x04
#define A_6 0x05
#define A_7 0x08
#define A_8 0x09
#define A_9 0x0A
#define A_10 0x0B
#define A_11 0x0C
#define A_12 0x0D
#define B_1 0x10
#define B_2 0x11
#define B_3 0x12
#define B_4 0x13
#define B_5 0x14
#define B_6 0x15
#define B_7 0x18
#define B_8 0x19
#define B_9 0x1A
#define B_10 0x1B
#define B_11 0x1C
#define B_12 0x1D
#define C_1 0x20
#define C_2 0x21
#define C_3 0x22
#define C_4 0x23
#define C_5 0x24
#define C_6 0x25
#define C_7 0x28
#define C_8 0x29
#define C_9 0x2A
#define C_10 0x2B
#define C_11 0x2C
#define C_12 0x2D
#define D_1 0x30
#define D_2 0x31
#define D_3 0x32
#define D_4 0x33
#define D_5 0x34
#define D_6 0x35
#define D_7 0x38
#define D_8 0x39
#define D_9 0x3A
#define D_10 0x3B
#define D_11 0x3C
#define D_12 0x3D
#define E_1 0x40
#define E_2 0x41
#define E_3 0x42
#define E_4 0x43
#define E_5 0x44
#define E_6 0x45
#define E_7 0x48
#define E_8 0x49
#define E_9 0x4A
#define E_10 0x4B
#define E_11 0x4C
#define E_12 0x4D
#define F_1 0x50
#define F_2 0x51
#define F_3 0x52
#define F_4 0x53
#define F_5 0x54
#define F_6 0x55
#define F_7 0x58
#define F_8 0x59
#define F_9 0x5A
#define F_10 0x5B
#define F_11 0x5C
#define F_12 0x5D
#define G_1 0x60
#define G_2 0x61
#define G_3 0x62
#define G_4 0x63
#define G_5 0x64
#define G_6 0x65
#define G_7 0x68
#define G_8 0x69
#define G_9 0x6A
#define G_10 0x6B
#define G_11 0x6C
#define G_12 0x6D
#define H_1 0x70
#define H_2 0x71
#define H_3 0x72
#define H_4 0x73
#define H_5 0x74
#define H_6 0x75
#define H_7 0x78
#define H_8 0x79
#define H_9 0x7A
#define H_10 0x7B
#define H_11 0x7C
#define H_12 0x7D
#define I_1 0x80
#define I_2 0x81
#define I_3 0x82
#define I_4 0x83
#define I_5 0x84
#define I_6 0x85
#define I_7 0x88
#define I_8 0x89
#define I_9 0x8A
#define I_10 0x8B
#define I_11 0x8C
#define I_12 0x8D
#define J_1 0x90
#define J_2 0x91
#define J_3 0x92
#define J_4 0x93
#define J_5 0x94
#define J_6 0x95
#define J_7 0x98
#define J_8 0x99
#define J_9 0x9A
#define J_10 0x9B
#define J_11 0x9C
#define J_12 0x9D
#define K_1 0xA0
#define K_2 0xA1
#define K_3 0xA2
#define K_4 0xA3
#define K_5 0xA4
#define K_6 0xA5
#define K_7 0xA8
#define K_8 0xA9
#define K_9 0xAA
#define K_10 0xAB
#define K_11 0xAC
#define K_12 0xAD
#define L_1 0xB0
#define L_2 0xB1
#define L_3 0xB2
#define L_4 0xB3
#define L_5 0xB4
#define L_6 0xB5
#define L_7 0xB8
#define L_8 0xB9
#define L_9 0xBA
#define L_10 0xBB
#define L_11 0xBC
#define L_12 0xBD
#endif // IS31FL3737_DRIVER_H

240
drivers/oled/glcdfont.c Normal file
View File

@@ -0,0 +1,240 @@
#pragma once
#ifdef __AVR__
#include <avr/io.h>
#include <avr/pgmspace.h>
#elif defined(ESP8266)
#include <pgmspace.h>
#else
#define PROGMEM
#endif
// Helidox 8x6 font with QMK Firmware Logo
// Online editor: http://teripom.x0.com/
static const unsigned char font[] PROGMEM = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x3E, 0x5B, 0x4F, 0x5B, 0x3E, 0x00,
0x3E, 0x6B, 0x4F, 0x6B, 0x3E, 0x00,
0x1C, 0x3E, 0x7C, 0x3E, 0x1C, 0x00,
0x18, 0x3C, 0x7E, 0x3C, 0x18, 0x00,
0x1C, 0x57, 0x7D, 0x57, 0x1C, 0x00,
0x1C, 0x5E, 0x7F, 0x5E, 0x1C, 0x00,
0x00, 0x18, 0x3C, 0x18, 0x00, 0x00,
0xFF, 0xE7, 0xC3, 0xE7, 0xFF, 0x00,
0x00, 0x18, 0x24, 0x18, 0x00, 0x00,
0xFF, 0xE7, 0xDB, 0xE7, 0xFF, 0x00,
0x30, 0x48, 0x3A, 0x06, 0x0E, 0x00,
0x26, 0x29, 0x79, 0x29, 0x26, 0x00,
0x40, 0x7F, 0x05, 0x05, 0x07, 0x00,
0x40, 0x7F, 0x05, 0x25, 0x3F, 0x00,
0x5A, 0x3C, 0xE7, 0x3C, 0x5A, 0x00,
0x7F, 0x3E, 0x1C, 0x1C, 0x08, 0x00,
0x08, 0x1C, 0x1C, 0x3E, 0x7F, 0x00,
0x14, 0x22, 0x7F, 0x22, 0x14, 0x00,
0x5F, 0x5F, 0x00, 0x5F, 0x5F, 0x00,
0x06, 0x09, 0x7F, 0x01, 0x7F, 0x00,
0x00, 0x66, 0x89, 0x95, 0x6A, 0x00,
0x60, 0x60, 0x60, 0x60, 0x60, 0x00,
0x94, 0xA2, 0xFF, 0xA2, 0x94, 0x00,
0x08, 0x04, 0x7E, 0x04, 0x08, 0x00,
0x10, 0x20, 0x7E, 0x20, 0x10, 0x00,
0x08, 0x08, 0x2A, 0x1C, 0x08, 0x00,
0x08, 0x1C, 0x2A, 0x08, 0x08, 0x00,
0x1E, 0x10, 0x10, 0x10, 0x10, 0x00,
0x0C, 0x1E, 0x0C, 0x1E, 0x0C, 0x00,
0x30, 0x38, 0x3E, 0x38, 0x30, 0x00,
0x06, 0x0E, 0x3E, 0x0E, 0x06, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x5F, 0x00, 0x00, 0x00,
0x00, 0x07, 0x00, 0x07, 0x00, 0x00,
0x14, 0x7F, 0x14, 0x7F, 0x14, 0x00,
0x24, 0x2A, 0x7F, 0x2A, 0x12, 0x00,
0x23, 0x13, 0x08, 0x64, 0x62, 0x00,
0x36, 0x49, 0x56, 0x20, 0x50, 0x00,
0x00, 0x08, 0x07, 0x03, 0x00, 0x00,
0x00, 0x1C, 0x22, 0x41, 0x00, 0x00,
0x00, 0x41, 0x22, 0x1C, 0x00, 0x00,
0x2A, 0x1C, 0x7F, 0x1C, 0x2A, 0x00,
0x08, 0x08, 0x3E, 0x08, 0x08, 0x00,
0x00, 0x80, 0x70, 0x30, 0x00, 0x00,
0x08, 0x08, 0x08, 0x08, 0x08, 0x00,
0x00, 0x00, 0x60, 0x60, 0x00, 0x00,
0x20, 0x10, 0x08, 0x04, 0x02, 0x00,
0x3E, 0x51, 0x49, 0x45, 0x3E, 0x00,
0x00, 0x42, 0x7F, 0x40, 0x00, 0x00,
0x72, 0x49, 0x49, 0x49, 0x46, 0x00,
0x21, 0x41, 0x49, 0x4D, 0x33, 0x00,
0x18, 0x14, 0x12, 0x7F, 0x10, 0x00,
0x27, 0x45, 0x45, 0x45, 0x39, 0x00,
0x3C, 0x4A, 0x49, 0x49, 0x31, 0x00,
0x41, 0x21, 0x11, 0x09, 0x07, 0x00,
0x36, 0x49, 0x49, 0x49, 0x36, 0x00,
0x46, 0x49, 0x49, 0x29, 0x1E, 0x00,
0x00, 0x00, 0x14, 0x00, 0x00, 0x00,
0x00, 0x40, 0x34, 0x00, 0x00, 0x00,
0x00, 0x08, 0x14, 0x22, 0x41, 0x00,
0x14, 0x14, 0x14, 0x14, 0x14, 0x00,
0x00, 0x41, 0x22, 0x14, 0x08, 0x00,
0x02, 0x01, 0x59, 0x09, 0x06, 0x00,
0x3E, 0x41, 0x5D, 0x59, 0x4E, 0x00,
0x7C, 0x12, 0x11, 0x12, 0x7C, 0x00,
0x7F, 0x49, 0x49, 0x49, 0x36, 0x00,
0x3E, 0x41, 0x41, 0x41, 0x22, 0x00,
0x7F, 0x41, 0x41, 0x41, 0x3E, 0x00,
0x7F, 0x49, 0x49, 0x49, 0x41, 0x00,
0x7F, 0x09, 0x09, 0x09, 0x01, 0x00,
0x3E, 0x41, 0x41, 0x51, 0x73, 0x00,
0x7F, 0x08, 0x08, 0x08, 0x7F, 0x00,
0x00, 0x41, 0x7F, 0x41, 0x00, 0x00,
0x20, 0x40, 0x41, 0x3F, 0x01, 0x00,
0x7F, 0x08, 0x14, 0x22, 0x41, 0x00,
0x7F, 0x40, 0x40, 0x40, 0x40, 0x00,
0x7F, 0x02, 0x1C, 0x02, 0x7F, 0x00,
0x7F, 0x04, 0x08, 0x10, 0x7F, 0x00,
0x3E, 0x41, 0x41, 0x41, 0x3E, 0x00,
0x7F, 0x09, 0x09, 0x09, 0x06, 0x00,
0x3E, 0x41, 0x51, 0x21, 0x5E, 0x00,
0x7F, 0x09, 0x19, 0x29, 0x46, 0x00,
0x26, 0x49, 0x49, 0x49, 0x32, 0x00,
0x03, 0x01, 0x7F, 0x01, 0x03, 0x00,
0x3F, 0x40, 0x40, 0x40, 0x3F, 0x00,
0x1F, 0x20, 0x40, 0x20, 0x1F, 0x00,
0x3F, 0x40, 0x38, 0x40, 0x3F, 0x00,
0x63, 0x14, 0x08, 0x14, 0x63, 0x00,
0x03, 0x04, 0x78, 0x04, 0x03, 0x00,
0x61, 0x59, 0x49, 0x4D, 0x43, 0x00,
0x00, 0x7F, 0x41, 0x41, 0x41, 0x00,
0x02, 0x04, 0x08, 0x10, 0x20, 0x00,
0x00, 0x41, 0x41, 0x41, 0x7F, 0x00,
0x04, 0x02, 0x01, 0x02, 0x04, 0x00,
0x40, 0x40, 0x40, 0x40, 0x40, 0x00,
0x00, 0x03, 0x07, 0x08, 0x00, 0x00,
0x20, 0x54, 0x54, 0x78, 0x40, 0x00,
0x7F, 0x28, 0x44, 0x44, 0x38, 0x00,
0x38, 0x44, 0x44, 0x44, 0x28, 0x00,
0x38, 0x44, 0x44, 0x28, 0x7F, 0x00,
0x38, 0x54, 0x54, 0x54, 0x18, 0x00,
0x00, 0x08, 0x7E, 0x09, 0x02, 0x00,
0x18, 0xA4, 0xA4, 0x9C, 0x78, 0x00,
0x7F, 0x08, 0x04, 0x04, 0x78, 0x00,
0x00, 0x44, 0x7D, 0x40, 0x00, 0x00,
0x20, 0x40, 0x40, 0x3D, 0x00, 0x00,
0x7F, 0x10, 0x28, 0x44, 0x00, 0x00,
0x00, 0x41, 0x7F, 0x40, 0x00, 0x00,
0x7C, 0x04, 0x78, 0x04, 0x78, 0x00,
0x7C, 0x08, 0x04, 0x04, 0x78, 0x00,
0x38, 0x44, 0x44, 0x44, 0x38, 0x00,
0xFC, 0x18, 0x24, 0x24, 0x18, 0x00,
0x18, 0x24, 0x24, 0x18, 0xFC, 0x00,
0x7C, 0x08, 0x04, 0x04, 0x08, 0x00,
0x48, 0x54, 0x54, 0x54, 0x24, 0x00,
0x04, 0x04, 0x3F, 0x44, 0x24, 0x00,
0x3C, 0x40, 0x40, 0x20, 0x7C, 0x00,
0x1C, 0x20, 0x40, 0x20, 0x1C, 0x00,
0x3C, 0x40, 0x30, 0x40, 0x3C, 0x00,
0x44, 0x28, 0x10, 0x28, 0x44, 0x00,
0x4C, 0x90, 0x90, 0x90, 0x7C, 0x00,
0x44, 0x64, 0x54, 0x4C, 0x44, 0x00,
0x00, 0x08, 0x36, 0x41, 0x00, 0x00,
0x00, 0x00, 0x77, 0x00, 0x00, 0x00,
0x00, 0x41, 0x36, 0x08, 0x00, 0x00,
0x02, 0x01, 0x02, 0x04, 0x02, 0x00,
0x3C, 0x26, 0x23, 0x26, 0x3C, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x40, 0x40, 0x40, 0xF0, 0xF8, 0xF8,
0xFF, 0x38, 0xFF, 0xF8, 0xF8, 0x3F,
0xF8, 0xF8, 0xFF, 0x38, 0xFF, 0xF8,
0xF8, 0xF0, 0x40, 0x40, 0x40, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x80,
0xC0, 0xC0, 0xC0, 0x80, 0x00, 0x00,
0xC0, 0xC0, 0x80, 0x00, 0x00, 0x00,
0x80, 0xC0, 0xC0, 0x00, 0xC0, 0xC0,
0x00, 0x00, 0x80, 0xC0, 0xC0, 0x00,
0x00, 0x00, 0x00, 0x00, 0xC0, 0xC0,
0xC0, 0xC0, 0xC0, 0x00, 0xC0, 0xC0,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xC0, 0xF0, 0xF8, 0xFC, 0x3E,
0x1E, 0x06, 0x01, 0x00, 0x00, 0x00,
0x7F, 0x41, 0x41, 0x41, 0x7F, 0x00,
0x7F, 0x41, 0x41, 0x41, 0x7F, 0x00,
0x00, 0x80, 0xC0, 0xE0, 0x7E, 0x5B,
0x4F, 0x5B, 0xFE, 0xC0, 0x00, 0x00,
0xC0, 0x00, 0xDC, 0xD7, 0xDE, 0xDE,
0xDE, 0xD7, 0xDC, 0x00, 0xC0, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x49, 0x49, 0x49, 0xFF, 0xFF, 0xFF,
0xFF, 0xE0, 0xDF, 0xBF, 0xBF, 0x00,
0xBF, 0xBF, 0xDF, 0xE0, 0xFF, 0xFF,
0xFF, 0xFF, 0x49, 0x49, 0x49, 0x00,
0x00, 0x00, 0x00, 0x00, 0x1F, 0x3F,
0x60, 0x60, 0xE0, 0xBF, 0x1F, 0x00,
0x7F, 0x7F, 0x07, 0x1E, 0x38, 0x1E,
0x07, 0x7F, 0x7F, 0x00, 0x7F, 0x7F,
0x0E, 0x1F, 0x3B, 0x71, 0x60, 0x00,
0x00, 0x00, 0x00, 0x00, 0x7F, 0x7F,
0x0C, 0x0C, 0x0C, 0x00, 0x7E, 0x7E,
0x00, 0x7F, 0x7E, 0x03, 0x03, 0x00,
0x7F, 0x7E, 0x03, 0x03, 0x7E, 0x7E,
0x03, 0x03, 0x7F, 0x7E, 0x00, 0x0F,
0x3E, 0x70, 0x3C, 0x06, 0x3C, 0x70,
0x3E, 0x0F, 0x00, 0x32, 0x7B, 0x49,
0x49, 0x3F, 0x7E, 0x00, 0x7F, 0x7E,
0x03, 0x03, 0x00, 0x1E, 0x3F, 0x69,
0x69, 0x6F, 0x26, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x03, 0x0F, 0x1F, 0x3F, 0x3C,
0x78, 0x70, 0x60, 0x00, 0x00, 0x00,
0x7F, 0x41, 0x41, 0x41, 0x7F, 0x00,
0x7F, 0x41, 0x41, 0x41, 0x7F, 0x00,
0x30, 0x7B, 0x7F, 0x78, 0x30, 0x20,
0x20, 0x30, 0x78, 0x7F, 0x3B, 0x00,
0x03, 0x00, 0x0F, 0x7F, 0x0F, 0x0F,
0x0F, 0x7F, 0x0F, 0x00, 0x03, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x01, 0x01, 0x01, 0x07, 0x0F, 0x0F,
0x7F, 0x0F, 0x7F, 0x0F, 0x0F, 0x7E,
0x0F, 0x0F, 0x7F, 0x0F, 0x7F, 0x0F,
0x0F, 0x07, 0x01, 0x01, 0x01, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x01, 0x01, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
};

45
drivers/oled/licenses.txt Normal file
View File

@@ -0,0 +1,45 @@
The Android robot is reproduced or modified from work created and shared by Google and used according to terms described in the Creative Commons 3.0 Attribution License.
This is the Linux-penguin again...
Originally drewn by Larry Ewing (http://www.isc.tamu.edu/~lewing/)
(with the GIMP) the Linux Logo has been vectorized by me (Simon Budig,
http://www.home.unix-ag.org/simon/).
This happened quite some time ago with Corel Draw 4. But luckily
meanwhile there are tools available to handle vector graphics with
Linux. Bernhard Herzog (bernhard@users.sourceforge.net) deserves kudos
for creating Sketch (http://sketch.sourceforge.net), a powerful free
tool for creating vector graphics. He converted the Corel Draw file to
the Sketch native format. Since I am unable to maintain the Corel Draw
file any longer, the Sketch version now is the "official" one.
Anja Gerwinski (anja@gerwinski.de) has created an alternate version of
the penguin (penguin-variant.sk) with a thinner mouth line and slightly
altered gradients. It also features a nifty drop shadow.
The third bird (penguin-flat.sk) is a version reduced to three colors
(black/white/yellow) for e.g. silk screen printing. I made this version
for a mug, available at the friendly folks at
http://www.kernelconcepts.de/ - they do good stuff, mail Petra
(pinguin@kernelconcepts.de) if you need something special or don't
understand the german :-)
These drawings are copyrighted by Larry Ewing and Simon Budig
(penguin-variant.sk also by Anja Gerwinski), redistribution is free but
has to include this README/Copyright notice.
The use of these drawings is free. However I am happy about a sample of
your mug/t-shirt/whatever with this penguin on it...
Have fun
Simon Budig
Simon.Budig@unix-ag.org
http://www.home.unix-ag.org/simon/
Simon Budig
Am Hardtkoeppel 2
D-61279 Graevenwiesbach

560
drivers/oled/oled_driver.c Normal file
View File

@@ -0,0 +1,560 @@
/*
Copyright 2019 Ryan Caltabiano <https://github.com/XScorpion2>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "i2c_master.h"
#include "oled_driver.h"
#include OLED_FONT_H
#include "timer.h"
#include "print.h"
#include <string.h>
#if defined(__AVR__)
#include <avr/io.h>
#include <avr/pgmspace.h>
#elif defined(ESP8266)
#include <pgmspace.h>
#else // defined(ESP8266)
#define PROGMEM
#define memcpy_P(des, src, len) memcpy(des, src, len)
#endif // defined(__AVR__)
// Used commands from spec sheet: https://cdn-shop.adafruit.com/datasheets/SSD1306.pdf
// for SH1106: https://www.velleman.eu/downloads/29/infosheets/sh1106_datasheet.pdf
// Fundamental Commands
#define CONTRAST 0x81
#define DISPLAY_ALL_ON 0xA5
#define DISPLAY_ALL_ON_RESUME 0xA4
#define NORMAL_DISPLAY 0xA6
#define DISPLAY_ON 0xAF
#define DISPLAY_OFF 0xAE
#define NOP 0xE3
// Scrolling Commands
#define ACTIVATE_SCROLL 0x2F
#define DEACTIVATE_SCROLL 0x2E
#define SCROLL_RIGHT 0x26
#define SCROLL_LEFT 0x27
#define SCROLL_RIGHT_UP 0x29
#define SCROLL_LEFT_UP 0x2A
// Addressing Setting Commands
#define MEMORY_MODE 0x20
#define COLUMN_ADDR 0x21
#define PAGE_ADDR 0x22
#define PAM_SETCOLUMN_LSB 0x00
#define PAM_SETCOLUMN_MSB 0x10
#define PAM_PAGE_ADDR 0xB0 // 0xb0 -- 0xb7
// Hardware Configuration Commands
#define DISPLAY_START_LINE 0x40
#define SEGMENT_REMAP 0xA0
#define SEGMENT_REMAP_INV 0xA1
#define MULTIPLEX_RATIO 0xA8
#define COM_SCAN_INC 0xC0
#define COM_SCAN_DEC 0xC8
#define DISPLAY_OFFSET 0xD3
#define COM_PINS 0xDA
#define COM_PINS_SEQ 0x02
#define COM_PINS_ALT 0x12
#define COM_PINS_SEQ_LR 0x22
#define COM_PINS_ALT_LR 0x32
// Timing & Driving Commands
#define DISPLAY_CLOCK 0xD5
#define PRE_CHARGE_PERIOD 0xD9
#define VCOM_DETECT 0xDB
// Charge Pump Commands
#define CHARGE_PUMP 0x8D
// Misc defines
#define OLED_TIMEOUT 60000
#define OLED_BLOCK_COUNT (sizeof(OLED_BLOCK_TYPE) * 8)
#define OLED_BLOCK_SIZE (OLED_MATRIX_SIZE / OLED_BLOCK_COUNT)
// i2c defines
#define I2C_CMD 0x00
#define I2C_DATA 0x40
#if defined(__AVR__)
// already defined on ARM
#define I2C_TIMEOUT 100
#define I2C_TRANSMIT_P(data) i2c_transmit_P((OLED_DISPLAY_ADDRESS << 1), &data[0], sizeof(data), I2C_TIMEOUT)
#else // defined(__AVR__)
#define I2C_TRANSMIT_P(data) i2c_transmit((OLED_DISPLAY_ADDRESS << 1), &data[0], sizeof(data), I2C_TIMEOUT)
#endif // defined(__AVR__)
#define I2C_TRANSMIT(data) i2c_transmit((OLED_DISPLAY_ADDRESS << 1), &data[0], sizeof(data), I2C_TIMEOUT)
#define I2C_WRITE_REG(mode, data, size) i2c_writeReg((OLED_DISPLAY_ADDRESS << 1), mode, data, size, I2C_TIMEOUT)
#define HAS_FLAGS(bits, flags) ((bits & flags) == flags)
// Display buffer's is the same as the OLED memory layout
// this is so we don't end up with rounding errors with
// parts of the display unusable or don't get cleared correctly
// and also allows for drawing & inverting
uint8_t oled_buffer[OLED_MATRIX_SIZE];
uint8_t* oled_cursor;
OLED_BLOCK_TYPE oled_dirty = 0;
bool oled_initialized = false;
bool oled_active = false;
bool oled_scrolling = false;
uint8_t oled_rotation = 0;
uint8_t oled_rotation_width = 0;
#if !defined(OLED_DISABLE_TIMEOUT)
uint16_t oled_last_activity;
#endif
// Internal variables to reduce math instructions
#if defined(__AVR__)
// identical to i2c_transmit, but for PROGMEM since all initialization is in PROGMEM arrays currently
// probably should move this into i2c_master...
static i2c_status_t i2c_transmit_P(uint8_t address, const uint8_t* data, uint16_t length, uint16_t timeout) {
i2c_status_t status = i2c_start(address | I2C_WRITE, timeout);
for (uint16_t i = 0; i < length && status >= 0; i++) {
status = i2c_write(pgm_read_byte((const char*)data++), timeout);
if (status) break;
}
i2c_stop();
return status;
}
#endif
// Flips the rendering bits for a character at the current cursor position
static void InvertCharacter(uint8_t *cursor)
{
const uint8_t *end = cursor + OLED_FONT_WIDTH;
while (cursor < end) {
*cursor = ~(*cursor);
cursor++;
}
}
bool oled_init(uint8_t rotation) {
oled_rotation = oled_init_user(rotation);
if (!HAS_FLAGS(oled_rotation, OLED_ROTATION_90)) {
oled_rotation_width = OLED_DISPLAY_WIDTH;
} else {
oled_rotation_width = OLED_DISPLAY_HEIGHT;
}
i2c_init();
static const uint8_t PROGMEM display_setup1[] = {
I2C_CMD,
DISPLAY_OFF,
DISPLAY_CLOCK, 0x80,
MULTIPLEX_RATIO, OLED_DISPLAY_HEIGHT - 1,
DISPLAY_OFFSET, 0x00,
DISPLAY_START_LINE | 0x00,
CHARGE_PUMP, 0x14,
#if (OLED_IC != OLED_IC_SH1106)
// MEMORY_MODE is unsupported on SH1106 (Page Addressing only)
MEMORY_MODE, 0x00, // Horizontal addressing mode
#endif
};
if (I2C_TRANSMIT_P(display_setup1) != I2C_STATUS_SUCCESS) {
print("oled_init cmd set 1 failed\n");
return false;
}
if (!HAS_FLAGS(oled_rotation, OLED_ROTATION_180)) {
static const uint8_t PROGMEM display_normal[] = {
I2C_CMD,
SEGMENT_REMAP_INV,
COM_SCAN_DEC };
if (I2C_TRANSMIT_P(display_normal) != I2C_STATUS_SUCCESS) {
print("oled_init cmd normal rotation failed\n");
return false;
}
} else {
static const uint8_t PROGMEM display_flipped[] = {
I2C_CMD,
SEGMENT_REMAP,
COM_SCAN_INC };
if (I2C_TRANSMIT_P(display_flipped) != I2C_STATUS_SUCCESS) {
print("display_flipped failed\n");
return false;
}
}
static const uint8_t PROGMEM display_setup2[] = {
I2C_CMD,
COM_PINS, OLED_COM_PINS,
CONTRAST, 0x8F,
PRE_CHARGE_PERIOD, 0xF1,
VCOM_DETECT, 0x40,
DISPLAY_ALL_ON_RESUME,
NORMAL_DISPLAY,
DEACTIVATE_SCROLL,
DISPLAY_ON };
if (I2C_TRANSMIT_P(display_setup2) != I2C_STATUS_SUCCESS) {
print("display_setup2 failed\n");
return false;
}
oled_clear();
oled_initialized = true;
oled_active = true;
oled_scrolling = false;
return true;
}
__attribute__((weak))
oled_rotation_t oled_init_user(oled_rotation_t rotation) {
return rotation;
}
void oled_clear(void) {
memset(oled_buffer, 0, sizeof(oled_buffer));
oled_cursor = &oled_buffer[0];
oled_dirty = -1; // -1 will be max value as long as display_dirty is unsigned type
}
static void calc_bounds(uint8_t update_start, uint8_t* cmd_array)
{
// Calculate commands to set memory addressing bounds.
uint8_t start_page = OLED_BLOCK_SIZE * update_start / OLED_DISPLAY_WIDTH;
uint8_t start_column = OLED_BLOCK_SIZE * update_start % OLED_DISPLAY_WIDTH;
#if (OLED_IC == OLED_IC_SH1106)
// Commands for Page Addressing Mode. Sets starting page and column; has no end bound.
// Column value must be split into high and low nybble and sent as two commands.
cmd_array[0] = PAM_PAGE_ADDR | start_page;
cmd_array[1] = PAM_SETCOLUMN_LSB | ((OLED_COLUMN_OFFSET + start_column) & 0x0f);
cmd_array[2] = PAM_SETCOLUMN_MSB | ((OLED_COLUMN_OFFSET + start_column) >> 4 & 0x0f);
cmd_array[3] = NOP;
cmd_array[4] = NOP;
cmd_array[5] = NOP;
#else
// Commands for use in Horizontal Addressing mode.
cmd_array[1] = start_column;
cmd_array[4] = start_page;
cmd_array[2] = (OLED_BLOCK_SIZE + OLED_DISPLAY_WIDTH - 1) % OLED_DISPLAY_WIDTH + cmd_array[1];
cmd_array[5] = (OLED_BLOCK_SIZE + OLED_DISPLAY_WIDTH - 1) / OLED_DISPLAY_WIDTH - 1;
#endif
}
static void calc_bounds_90(uint8_t update_start, uint8_t* cmd_array)
{
cmd_array[1] = OLED_BLOCK_SIZE * update_start / OLED_DISPLAY_HEIGHT * 8;
cmd_array[4] = OLED_BLOCK_SIZE * update_start % OLED_DISPLAY_HEIGHT;
cmd_array[2] = (OLED_BLOCK_SIZE + OLED_DISPLAY_HEIGHT - 1) / OLED_DISPLAY_HEIGHT * 8 - 1 + cmd_array[1];;
cmd_array[5] = (OLED_BLOCK_SIZE + OLED_DISPLAY_HEIGHT - 1) % OLED_DISPLAY_HEIGHT / 8;
}
uint8_t crot(uint8_t a, int8_t n)
{
const uint8_t mask = 0x7;
n &= mask;
return a << n | a >> (-n & mask);
}
static void rotate_90(const uint8_t* src, uint8_t* dest)
{
for (uint8_t i = 0, shift = 7; i < 8; ++i, --shift) {
uint8_t selector = (1 << i);
for (uint8_t j = 0; j < 8; ++j) {
dest[i] |= crot(src[j] & selector, shift - (int8_t)j);
}
}
}
void oled_render(void) {
// Do we have work to do?
if (!oled_dirty || oled_scrolling) {
return;
}
// Find first dirty block
uint8_t update_start = 0;
while (!(oled_dirty & (1 << update_start))) { ++update_start; }
// Set column & page position
static uint8_t display_start[] = {
I2C_CMD,
COLUMN_ADDR, 0, OLED_DISPLAY_WIDTH - 1,
PAGE_ADDR, 0, OLED_DISPLAY_HEIGHT / 8 - 1 };
if (!HAS_FLAGS(oled_rotation, OLED_ROTATION_90)) {
calc_bounds(update_start, &display_start[1]); // Offset from I2C_CMD byte at the start
} else {
calc_bounds_90(update_start, &display_start[1]); // Offset from I2C_CMD byte at the start
}
// Send column & page position
if (I2C_TRANSMIT(display_start) != I2C_STATUS_SUCCESS) {
print("oled_render offset command failed\n");
return;
}
if (!HAS_FLAGS(oled_rotation, OLED_ROTATION_90)) {
// Send render data chunk as is
if (I2C_WRITE_REG(I2C_DATA, &oled_buffer[OLED_BLOCK_SIZE * update_start], OLED_BLOCK_SIZE) != I2C_STATUS_SUCCESS) {
print("oled_render data failed\n");
return;
}
} else {
// Rotate the render chunks
const static uint8_t source_map[] = OLED_SOURCE_MAP;
const static uint8_t target_map[] = OLED_TARGET_MAP;
static uint8_t temp_buffer[OLED_BLOCK_SIZE];
memset(temp_buffer, 0, sizeof(temp_buffer));
for(uint8_t i = 0; i < sizeof(source_map); ++i) {
rotate_90(&oled_buffer[OLED_BLOCK_SIZE * update_start + source_map[i]], &temp_buffer[target_map[i]]);
}
// Send render data chunk after rotating
if (I2C_WRITE_REG(I2C_DATA, &temp_buffer[0], OLED_BLOCK_SIZE) != I2C_STATUS_SUCCESS) {
print("oled_render data failed\n");
return;
}
}
// Turn on display if it is off
oled_on();
// Clear dirty flag
oled_dirty &= ~(1 << update_start);
}
void oled_set_cursor(uint8_t col, uint8_t line) {
uint16_t index = line * oled_rotation_width + col * OLED_FONT_WIDTH;
// Out of bounds?
if (index >= OLED_MATRIX_SIZE) {
index = 0;
}
oled_cursor = &oled_buffer[index];
}
void oled_advance_page(bool clearPageRemainder) {
uint16_t index = oled_cursor - &oled_buffer[0];
uint8_t remaining = oled_rotation_width - (index % oled_rotation_width);
if (clearPageRemainder) {
// Remaining Char count
remaining = remaining / OLED_FONT_WIDTH;
// Write empty character until next line
while (remaining--)
oled_write_char(' ', false);
} else {
// Next page index out of bounds?
if (index + remaining >= OLED_MATRIX_SIZE) {
index = 0;
remaining = 0;
}
oled_cursor = &oled_buffer[index + remaining];
}
}
void oled_advance_char(void) {
uint16_t nextIndex = oled_cursor - &oled_buffer[0] + OLED_FONT_WIDTH;
uint8_t remainingSpace = oled_rotation_width - (nextIndex % oled_rotation_width);
// Do we have enough space on the current line for the next character
if (remainingSpace < OLED_FONT_WIDTH) {
nextIndex += remainingSpace;
}
// Did we go out of bounds
if (nextIndex >= OLED_MATRIX_SIZE) {
nextIndex = 0;
}
// Update cursor position
oled_cursor = &oled_buffer[nextIndex];
}
// Main handler that writes character data to the display buffer
void oled_write_char(const char data, bool invert) {
// Advance to the next line if newline
if (data == '\n') {
// Old source wrote ' ' until end of line...
oled_advance_page(true);
return;
}
// copy the current render buffer to check for dirty after
static uint8_t oled_temp_buffer[OLED_FONT_WIDTH];
memcpy(&oled_temp_buffer, oled_cursor, OLED_FONT_WIDTH);
// set the reder buffer data
uint8_t cast_data = (uint8_t)data; // font based on unsigned type for index
if (cast_data < OLED_FONT_START || cast_data > OLED_FONT_END) {
memset(oled_cursor, 0x00, OLED_FONT_WIDTH);
} else {
const uint8_t *glyph = &font[(cast_data - OLED_FONT_START) * OLED_FONT_WIDTH];
memcpy_P(oled_cursor, glyph, OLED_FONT_WIDTH);
}
// Invert if needed
if (invert) {
InvertCharacter(oled_cursor);
}
// Dirty check
if (memcmp(&oled_temp_buffer, oled_cursor, OLED_FONT_WIDTH)) {
uint16_t index = oled_cursor - &oled_buffer[0];
oled_dirty |= (1 << (index / OLED_BLOCK_SIZE));
// Edgecase check if the written data spans the 2 chunks
oled_dirty |= (1 << ((index + OLED_FONT_WIDTH) / OLED_BLOCK_SIZE));
}
// Finally move to the next char
oled_advance_char();
}
void oled_write(const char *data, bool invert) {
const char *end = data + strlen(data);
while (data < end) {
oled_write_char(*data, invert);
data++;
}
}
void oled_write_ln(const char *data, bool invert) {
oled_write(data, invert);
oled_advance_page(true);
}
#if defined(__AVR__)
void oled_write_P(const char *data, bool invert) {
uint8_t c = pgm_read_byte(data);
while (c != 0) {
oled_write_char(c, invert);
c = pgm_read_byte(++data);
}
}
void oled_write_ln_P(const char *data, bool invert) {
oled_write_P(data, invert);
oled_advance_page(true);
}
#endif // defined(__AVR__)
bool oled_on(void) {
#if !defined(OLED_DISABLE_TIMEOUT)
oled_last_activity = timer_read();
#endif
static const uint8_t PROGMEM display_on[] = { I2C_CMD, DISPLAY_ON };
if (!oled_active) {
if (I2C_TRANSMIT_P(display_on) != I2C_STATUS_SUCCESS) {
print("oled_on cmd failed\n");
return oled_active;
}
oled_active = true;
}
return oled_active;
}
bool oled_off(void) {
static const uint8_t PROGMEM display_off[] = { I2C_CMD, DISPLAY_OFF };
if (oled_active) {
if (I2C_TRANSMIT_P(display_off) != I2C_STATUS_SUCCESS) {
print("oled_off cmd failed\n");
return oled_active;
}
oled_active = false;
}
return !oled_active;
}
bool oled_scroll_right(void) {
// Dont enable scrolling if we need to update the display
// This prevents scrolling of bad data from starting the scroll too early after init
if (!oled_dirty && !oled_scrolling) {
static const uint8_t PROGMEM display_scroll_right[] = {
I2C_CMD, SCROLL_RIGHT, 0x00, 0x00, 0x00, 0x0F, 0x00, 0xFF, ACTIVATE_SCROLL };
if (I2C_TRANSMIT_P(display_scroll_right) != I2C_STATUS_SUCCESS) {
print("oled_scroll_right cmd failed\n");
return oled_scrolling;
}
oled_scrolling = true;
}
return oled_scrolling;
}
bool oled_scroll_left(void) {
// Dont enable scrolling if we need to update the display
// This prevents scrolling of bad data from starting the scroll too early after init
if (!oled_dirty && !oled_scrolling) {
static const uint8_t PROGMEM display_scroll_left[] = {
I2C_CMD, SCROLL_LEFT, 0x00, 0x00, 0x00, 0x0F, 0x00, 0xFF, ACTIVATE_SCROLL };
if (I2C_TRANSMIT_P(display_scroll_left) != I2C_STATUS_SUCCESS) {
print("oled_scroll_left cmd failed\n");
return oled_scrolling;
}
oled_scrolling = true;
}
return oled_scrolling;
}
bool oled_scroll_off(void) {
if (oled_scrolling) {
static const uint8_t PROGMEM display_scroll_off[] = { I2C_CMD, DEACTIVATE_SCROLL };
if (I2C_TRANSMIT_P(display_scroll_off) != I2C_STATUS_SUCCESS) {
print("oled_scroll_off cmd failed\n");
return oled_scrolling;
}
oled_scrolling = false;
}
return !oled_scrolling;
}
uint8_t oled_max_chars(void) {
if (!HAS_FLAGS(oled_rotation, OLED_ROTATION_90)) {
return OLED_DISPLAY_WIDTH / OLED_FONT_WIDTH;
}
return OLED_DISPLAY_HEIGHT / OLED_FONT_WIDTH;
}
uint8_t oled_max_lines(void) {
if (!HAS_FLAGS(oled_rotation, OLED_ROTATION_90)) {
return OLED_DISPLAY_HEIGHT / OLED_FONT_HEIGHT;
}
return OLED_DISPLAY_WIDTH / OLED_FONT_HEIGHT;
}
void oled_task(void) {
if (!oled_initialized) {
return;
}
oled_set_cursor(0, 0);
oled_task_user();
// Smart render system, no need to check for dirty
oled_render();
// Display timeout check
#if !defined(OLED_DISABLE_TIMEOUT)
if (oled_active && timer_elapsed(oled_last_activity) > OLED_TIMEOUT) {
oled_off();
}
#endif
}
__attribute__((weak))
void oled_task_user(void) {
}

245
drivers/oled/oled_driver.h Normal file
View File

@@ -0,0 +1,245 @@
/*
Copyright 2019 Ryan Caltabiano <https://github.com/XScorpion2>
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 <stdint.h>
#include <stdbool.h>
// an enumeration of the chips this driver supports
#define OLED_IC_SSD1306 0
#define OLED_IC_SH1106 1
#if defined(OLED_DISPLAY_CUSTOM)
// Expected user to implement the necessary defines
#elif defined(OLED_DISPLAY_128X64)
// Double height 128x64
#ifndef OLED_DISPLAY_WIDTH
#define OLED_DISPLAY_WIDTH 128
#endif
#ifndef OLED_DISPLAY_HEIGHT
#define OLED_DISPLAY_HEIGHT 64
#endif
#ifndef OLED_MATRIX_SIZE
#define OLED_MATRIX_SIZE (OLED_DISPLAY_HEIGHT / 8 * OLED_DISPLAY_WIDTH) // 1024 (compile time mathed)
#endif
#ifndef OLED_BLOCK_TYPE
#define OLED_BLOCK_TYPE uint16_t
#endif
#ifndef OLED_BLOCK_COUNT
#define OLED_BLOCK_COUNT (sizeof(OLED_BLOCK_TYPE) * 8) // 32 (compile time mathed)
#endif
#ifndef OLED_BLOCK_SIZE
#define OLED_BLOCK_SIZE (OLED_MATRIX_SIZE / OLED_BLOCK_COUNT) // 32 (compile time mathed)
#endif
#ifndef OLED_COM_PINS
#define OLED_COM_PINS COM_PINS_ALT
#endif
// For 90 degree rotation, we map our internal matrix to oled matrix using fixed arrays
// The OLED writes to it's memory horizontally, starting top left, but our memory starts bottom left in this mode
#ifndef OLED_SOURCE_MAP
#define OLED_SOURCE_MAP { 0, 8, 16, 24, 32, 40, 48, 56 }
#endif
#ifndef OLED_TARGET_MAP
#define OLED_TARGET_MAP { 56, 48, 40, 32, 24, 16, 8, 0 }
#endif
// If OLED_BLOCK_TYPE is uint32_t, these tables would look like:
// #define OLED_SOURCE_MAP { 32, 40, 48, 56 }
// #define OLED_TARGET_MAP { 24, 16, 8, 0 }
// If OLED_BLOCK_TYPE is uint16_t, these tables would look like:
// #define OLED_SOURCE_MAP { 0, 8, 16, 24, 32, 40, 48, 56 }
// #define OLED_TARGET_MAP { 56, 48, 40, 32, 24, 16, 8, 0 }
// If OLED_BLOCK_TYPE is uint8_t, these tables would look like:
// #define OLED_SOURCE_MAP { 0, 8, 16, 24, 32, 40, 48, 56, 64, 72, 80, 88, 96, 104, 112, 120 }
// #define OLED_TARGET_MAP { 56, 120, 48, 112, 40, 104, 32, 96, 24, 88, 16, 80, 8, 72, 0, 64 }
#else // defined(OLED_DISPLAY_128X64)
// Default 128x32
#ifndef OLED_DISPLAY_WIDTH
#define OLED_DISPLAY_WIDTH 128
#endif
#ifndef OLED_DISPLAY_HEIGHT
#define OLED_DISPLAY_HEIGHT 32
#endif
#ifndef OLED_MATRIX_SIZE
#define OLED_MATRIX_SIZE (OLED_DISPLAY_HEIGHT / 8 * OLED_DISPLAY_WIDTH) // 512 (compile time mathed)
#endif
#ifndef OLED_BLOCK_TYPE
#define OLED_BLOCK_TYPE uint16_t // Type to use for segmenting the oled display for smart rendering, use unsigned types only
#endif
#ifndef OLED_BLOCK_COUNT
#define OLED_BLOCK_COUNT (sizeof(OLED_BLOCK_TYPE) * 8) // 16 (compile time mathed)
#endif
#ifndef OLED_BLOCK_SIZE
#define OLED_BLOCK_SIZE (OLED_MATRIX_SIZE / OLED_BLOCK_COUNT) // 32 (compile time mathed)
#endif
#ifndef OLED_COM_PINS
#define OLED_COM_PINS COM_PINS_SEQ
#endif
// For 90 degree rotation, we map our internal matrix to oled matrix using fixed arrays
// The OLED writes to it's memory horizontally, starting top left, but our memory starts bottom left in this mode
#ifndef OLED_SOURCE_MAP
#define OLED_SOURCE_MAP { 0, 8, 16, 24 }
#endif
#ifndef OLED_TARGET_MAP
#define OLED_TARGET_MAP { 24, 16, 8, 0 }
#endif
// If OLED_BLOCK_TYPE is uint8_t, these tables would look like:
// #define OLED_SOURCE_MAP { 0, 8, 16, 24, 32, 40, 48, 56 }
// #define OLED_TARGET_MAP { 48, 32, 16, 0, 56, 40, 24, 8 }
#endif // defined(OLED_DISPLAY_CUSTOM)
#if !defined(OLED_IC)
#define OLED_IC OLED_IC_SSD1306
#endif
// the column address corresponding to the first column in the display hardware
#if !defined(OLED_COLUMN_OFFSET)
#define OLED_COLUMN_OFFSET 0
#endif
// Address to use for the i2c oled communication
#if !defined(OLED_DISPLAY_ADDRESS)
#define OLED_DISPLAY_ADDRESS 0x3C
#endif
// Custom font file to use
#if !defined(OLED_FONT_H)
#define OLED_FONT_H "glcdfont.c"
#endif
// unsigned char value of the first character in the font file
#if !defined(OLED_FONT_START)
#define OLED_FONT_START 0
#endif
// unsigned char value of the last character in the font file
#if !defined(OLED_FONT_END)
#define OLED_FONT_END 224
#endif
// Font render width
#if !defined(OLED_FONT_WIDTH)
#define OLED_FONT_WIDTH 6
#endif
// Font render height
#if !defined(OLED_FONT_HEIGHT)
#define OLED_FONT_HEIGHT 8
#endif
// OLED Rotation enum values are flags
typedef enum {
OLED_ROTATION_0 = 0,
OLED_ROTATION_90 = 1,
OLED_ROTATION_180 = 2,
OLED_ROTATION_270 = 3, // OLED_ROTATION_90 | OLED_ROTATION_180
} oled_rotation_t;
// Initialize the oled display, rotating the rendered output based on the define passed in.
// Returns true if the OLED was initialized successfully
bool oled_init(oled_rotation_t rotation);
// Called at the start of oled_init, weak function overridable by the user
// rotation - the value passed into oled_init
// Return new oled_rotation_t if you want to override default rotation
oled_rotation_t oled_init_user(oled_rotation_t rotation);
// Clears the display buffer, resets cursor position to 0, and sets the buffer to dirty for rendering
void oled_clear(void);
// Renders the dirty chunks of the buffer to oled display
void oled_render(void);
// Moves cursor to character position indicated by column and line, wraps if out of bounds
// Max column denoted by 'oled_max_chars()' and max lines by 'oled_max_lines()' functions
void oled_set_cursor(uint8_t col, uint8_t line);
// Advances the cursor to the next page, writing ' ' if true
// Wraps to the begining when out of bounds
void oled_advance_page(bool clearPageRemainder);
// Moves the cursor forward 1 character length
// Advance page if there is not enough room for the next character
// Wraps to the begining when out of bounds
void oled_advance_char(void);
// Writes a single character to the buffer at current cursor position
// Advances the cursor while writing, inverts the pixels if true
// Main handler that writes character data to the display buffer
void oled_write_char(const char data, bool invert);
// Writes a string to the buffer at current cursor position
// Advances the cursor while writing, inverts the pixels if true
void oled_write(const char *data, bool invert);
// Writes a string to the buffer at current cursor position
// Advances the cursor while writing, inverts the pixels if true
// Advances the cursor to the next page, wiring ' ' to the remainder of the current page
void oled_write_ln(const char *data, bool invert);
#if defined(__AVR__)
// Writes a PROGMEM string to the buffer at current cursor position
// Advances the cursor while writing, inverts the pixels if true
// Remapped to call 'void oled_write(const char *data, bool invert);' on ARM
void oled_write_P(const char *data, bool invert);
// Writes a PROGMEM string to the buffer at current cursor position
// Advances the cursor while writing, inverts the pixels if true
// Advances the cursor to the next page, wiring ' ' to the remainder of the current page
// Remapped to call 'void oled_write_ln(const char *data, bool invert);' on ARM
void oled_write_ln_P(const char *data, bool invert);
#else
// Writes a string to the buffer at current cursor position
// Advances the cursor while writing, inverts the pixels if true
#define oled_write_P(data, invert) oled_write(data, invert)
// Writes a string to the buffer at current cursor position
// Advances the cursor while writing, inverts the pixels if true
// Advances the cursor to the next page, wiring ' ' to the remainder of the current page
#define oled_write_ln_P(data, invert) oled_write(data, invert)
#endif // defined(__AVR__)
// Can be used to manually turn on the screen if it is off
// Returns true if the screen was on or turns on
bool oled_on(void);
// Can be used to manually turn off the screen if it is on
// Returns true if the screen was off or turns off
bool oled_off(void);
// Basically it's oled_render, but with timeout management and oled_task_user calling!
void oled_task(void);
// Called at the start of oled_task, weak function overridable by the user
void oled_task_user(void);
// Scrolls the entire display right
// Returns true if the screen was scrolling or starts scrolling
// NOTE: display contents cannot be changed while scrolling
bool oled_scroll_right(void);
// Scrolls the entire display left
// Returns true if the screen was scrolling or starts scrolling
// NOTE: display contents cannot be changed while scrolling
bool oled_scroll_left(void);
// Turns off display scrolling
// Returns true if the screen was not scrolling or stops scrolling
bool oled_scroll_off(void);
// Returns the maximum number of characters that will fit on a line
uint8_t oled_max_chars(void);
// Returns the maximum number of lines that will fit on the oled
uint8_t oled_max_lines(void);

View File

@@ -2,9 +2,7 @@ ifneq ($(strip $(QWIIC_ENABLE)),)
COMMON_VPATH += $(DRIVER_PATH)/qwiic
OPT_DEFS += -DQWIIC_ENABLE
SRC += qwiic.c
ifeq ($(filter "i2c_master.c", $(SRC)),)
SRC += i2c_master.c
endif
QUANTUM_LIB_SRC += i2c_master.c
endif
ifneq ($(filter JOYSTIIC, $(QWIIC_ENABLE)),)

View File

@@ -13,8 +13,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/>.
*/
#ifndef KB_H
#define KB_H
#pragma once
#include "quantum.h"
@@ -36,4 +35,3 @@
{ K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, KC_NO, KC_NO, K3D }, \
{ K40, K41, K42, KC_NO, KC_NO, K45, KC_NO, KC_NO, KC_NO, K49, K4A, K4B, KC_NO, K4D } \
}
#endif

View File

@@ -45,7 +45,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define MATRIX_COL_PINS { C7, F7, F6, F5, F4, F1, E6, D1, D0, D2, D3, D5, D6, D7 }
#define UNUSED_PINS
/* COL2ROW, ROW2COL, or CUSTOM_MATRIX */
/* COL2ROW, ROW2COL*/
#define DIODE_DIRECTION COL2ROW
#define BACKLIGHT_PIN B7
@@ -59,10 +59,11 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define RGBLIGHT_HUE_STEP 8
#define RGBLIGHT_SAT_STEP 8
#define RGBLIGHT_VAL_STEP 8
#define RGBLIGHT_SLEEP
#endif
/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
#define DEBOUNCING_DELAY 5
#define DEBOUNCE 5
/* define if matrix has ghost (lacks anti-ghosting diodes) */
//#define MATRIX_HAS_GHOST

View File

@@ -22,7 +22,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, MO(1), KC_LCTL
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, MO(1), KC_RCTL
),
[1] = LAYOUT_60_ansi(

View File

@@ -68,5 +68,6 @@ BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
AUDIO_ENABLE = no # Audio output on port C6
FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
HD44780_ENABLE = no # Enable support for HD44780 based LCDs (+400)
EXTRAFLAGS += -flto
LAYOUTS = 60_ansi

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