Compare commits

..

224 Commits

Author SHA1 Message Date
df8e417032 Fix mismatched aliased event and event stub function prototypes. 2018-09-11 12:52:57 -07:00
c7e1b53913 Remove unneccesary ATTR_CONST from stub functions (thanks to NicoHood). 2018-09-11 12:52:57 -07:00
e9a67f8fde Fix installation for linux finding ID:fedora in os_release 2018-09-10 20:52:34 -07:00
265eca0f7c Add manjaro asn arch-based distro 2018-09-10 17:55:46 -07:00
2e0c63e0af improve looks like hang up when first time execute make git-submodule (#3846) 2018-09-10 16:21:54 -07:00
e11e4a91ac Keymap: Redox: add a new Colemak keymap, macOS oriented. (#3861)
* Add my own keymap to the list of available Redox keymaps.

This keymap is a Colemak keymap, and is meant to be used on Mac OS.
More information can be found in the readme.

* Fix "macOS" typo and remove mention of the license.

This directory inherits the project's license.

* Add missing custom keycode.

* Address feedback from PR review

- Remove deprecated code
- Remove RGB logic since it is overwritten by code running later.
2018-09-10 07:39:05 -07:00
7d8f680b50 Fix typo in keymap_swedish.h (#3877)
* Fix typo in keymap_swedish.h

* Update keymap_swedish.h
2018-09-09 19:49:26 -07:00
63852e7a68 Keymap: Adjusted keymaps for standardisation (#3874)
* Added HHKB with 7U space bar
There are backlight changers on the function Z, X and C, mediat controls
have been removed.

* Fixed the default layout and added a keymap
GUI and ALT keys were swapped.
My own keymap which adds calculator, removes power, removes eject.

* Adjusted naming convention of hhkb layout layer

Fixed as per required from code review.

* Updated for qmk configurator

I didn't realise that there was a new standardisation across all the keymaps to accommodate the configurator.

Hopefully fixed now.
2018-09-09 19:47:14 -07:00
fa1e674bbb 65% and 68 key community layouts (#3872)
* rename 68_ansi layout to 65_ansi layout

* more renames and readme change

* add company names

* add community layouts for 68_ansi

* add 68_ansi support for mf68 type boards

* update readme
2018-09-09 19:45:59 -07:00
7b8e5d4555 Keymap: Updated my FC660C config (#3870)
* - Fixed DK60 version in config.h

* - Updated dk60 readme with new QMK rules

* - Fixed wording in readme

* Added dbroqua layout for DZ60

I've also updated dz60.h to add "true HHKD" keymap definition (6U
spacebar).

With the default HHKB definition r_alt was not mapped and when I pressed
r_menu it was r_alt.

Regards

* Updated dbroqua layout for HHKB keyboard

Added default configuration and alternate (swap gui/alt keys).

Save user choice in keyboard memory (like plank, thanks for this
feature!).

* Added dbroqua layout for Iris keyboard

* Updated layout and fixed includes

* Added personal layout for FC660C

* Inverted ESC & GRV
2018-09-09 19:43:45 -07:00
3dbdfbd99a Add support for a different pinout on Split boards (#3869)
* Add support for a different pinout for the right half of a split keyboard (number of cols/rows still has to be the same)
2018-09-09 19:42:46 -07:00
38c916a368 Keyboard: Updated readmes for 1upkeyboards (#3864)
Corrected the make examples by adding the parent directory.

Updated the QMK Docs links for the build environment setup and the make instructions. Added links to the Newbs Guide.
2018-09-09 19:33:30 -07:00
93b5c98fbb Keymap: remove unnecessary readme from my helix keymap (#3860) 2018-09-09 19:23:24 -07:00
17fffc3a51 Keymap: Initial PR for contributing my ortho_4x12 community layout. (#3853)
* Initial keymap with no BL and with Ctrl and Enter on the home row.

* Removing alternative layouts (Dvorak etc.).

* Putting Enter back in the default position, moving Esc next to Alt.

* Replacing grave with del.

* Adding a numpad layer.

* Adding operators and a triple zero to the numpad layer.

* Swapping Alt and Win.

* Updating to use new audio macros.

* Removing numpad layer and changing left space to MOD_HYPR on hold.

* Adding configurable 'clicky keys' feature.

* Cleaning up clicky conditional logic.

* Turning on backlight support and mapping backlight keys in the adjust layer.

* Enabling backlight functionality.

* Adding Adventure time theme song; increasing fake clicky randomness.

* Cleaning up layer constants in my Planck keymap.

* Initial implementation of porting my Planck keymap to a Let's Split.

* Updating keyboards/planck/keymaps/josh to use declarations from new work on master.

* Updating keyboards/lets_split/keymaps/josh to use declarations from new work on master.

* Work in progress migrating Planck and Let's Split keymaps to a community keymap.  Everything is working but Planck backlight.

* Fixing rules.mk to enable backlight & audio correctly on Planck PCBs.  Cleanup.

* Tweaks to get Let's Split working with my community layout.

* Switching to use EE_HANDS in my Let's Split build.

* Adding vitamins_included makefile options to my ortho_4x12 layout.

* Fixing planck/rev6 build -- backlight must be disabled.

* Removing I2C from my rules.mk and addressing it in the config.h instead.

* Moving community layout directory to my reddit username.  :D

* Adding a test encoder function; making lower left a media key and moving esc to a mod tap on ctrl.

* Commenting out -flto in the compiler flags for the vitamins_included keyboard (couldn't figure out how else to turn it off).

* Changing rotary encoder to control media volume.

* Changing backlight and clicky defaults to max brightness no breathing and a low pitch click.

* Initial implementation of backlight flickering.

* Updating my README.md

* Adding LINK_TIME_OPTIMIZATION to the vitamins_included/rev1 as a rules.mk feature.

* Reverting keyboards/vitamins_included/rules.mk to master and using 'filter_out' in my layout instead.

* Adding tested boards to the readme for my layout.

* Per drashna, removing redundant clicky implementation and cleaning up headers.

* Removing an extra include from my keymap.
2018-09-09 19:09:53 -07:00
e68c8f2ac6 Keyboard: CTRL LED scan code mapping fix (#3867)
* CTRL LED scan code mapping fix

Fixed scan codes to properly align with key wiring

* Update scan codes for caps and scroll lock lighting

Update scan codes for caps and scroll lock lighting according to previous scan code mapping update
2018-09-07 14:22:12 -07:00
7f7c278c3e Keyboard: Add support for Quefrency 65% right half (#3865)
* Add support for Quefrency 65% right half

* Add support for additional thumb key on Rev. 1.1 PCB
2018-09-06 12:49:13 -07:00
e0c9f1d9b9 Keymap: Added new Marianas keymap for DZ60 (#3858)
* Added new Marianas keymap for DZ60

* Included suggestions to remove unnecessary line regarding MODS_CTRL_MASK, and added names for layers.

Added enum to define names for layers, and removed unused #DEFINE
2018-09-06 08:08:16 -07:00
c3b3f33c6a Keymap: Update personal keymap (#3855)
* Updated personal keymap

* simplified keymap based on suggestions
2018-09-05 16:39:00 -07:00
e72d07c22b Keymap: mitosis/datagrok: bug fix (#3854)
I don't know how this slipped past the test suite in the last merge, but
this syntax I tried is invalid and doesn't compile. Fixed.
2018-09-05 13:52:29 -07:00
155850187d Keyboard: Add IBM 122-key Terminal keyboard and my Ergodox EZ keymap (Programmer's Dvorak + Gaming/QWERTY layer) (#3850)
* added my lukaus keymap (programmers dvorak with QWERTY, function, and mouse/keypad layers)

* updated ergodox_ez keymap and initial commit for IBM Model M 122 key

* added my lukaus keymap (programmers dvorak with QWERTY, function, and mouse/keypad layers)

* updated ergodox_ez keymap and initial commit for IBM Model M 122 key

* Add keyboard information and separated my custom layout from the default

* Add readme to Lukaus' Ergodox EZ keymap

* added my lukaus keymap (programmers dvorak with QWERTY, function, and mouse/keypad layers)

* updated ergodox_ez keymap and initial commit for IBM Model M 122 key

* added my lukaus keymap (programmers dvorak with QWERTY, function, and mouse/keypad layers)

* updated ergodox_ez keymap and initial commit for IBM Model M 122 key

* Add keyboard information and separated my custom layout from the default

* Add readme to Lukaus' Ergodox EZ keymap

* added my lukaus keymap (programmers dvorak with QWERTY, function, and mouse/keypad layers)

* updated ergodox_ez keymap and initial commit for IBM Model M 122 key

* Fix merge conflict again?

* updated ergodox_ez keymap and initial commit for IBM Model M 122 key

* Add keyboard information and separated my custom layout from the default

* Add readme to Lukaus' Ergodox EZ keymap

* added my lukaus keymap (programmers dvorak with QWERTY, function, and mouse/keypad layers)

* added my lukaus keymap (programmers dvorak with QWERTY, function, and mouse/keypad layers)

* updated ergodox_ez keymap and initial commit for IBM Model M 122 key

* updated ergodox_ez keymap and initial commit for IBM Model M 122 key

* Add keyboard information and separated my custom layout from the default

* update keymap

* Update rules.mk to remove redundant commented line

* Fix missing key on default layout for IBM Model M 122 key

* Fix issues identified by drashna and noroadsleft

* Update readme for IBM 122 key
2018-09-05 13:45:19 -07:00
2b09900bdc Keymap: Add am keymap (#3843)
* Add am keymap

* Add configuration to play nice with stuck modifiers

This is in particular useful with emacs since its easy to get ctrl stuck

* Deactivate mouse keys and backlight

* Add control/esc and shift/enter taps

* Remove DVORAK and PLOVER

I won't be using this soon, so getting some free space

* Raiser and Lower ideas from jeebak

* Add cursor and mouse layers

* Enable mouse keys

* Switch underscore with minus

* Disable audio and fix warnings

* Update to the upstream changes

* VIM line motion symbols on the raise layer

* Enable sound and freeup some media keys on layers

* Fix whitespace on keymap

* Code review changes

* Improve keymap documentation

* Improve keymap to match to the default one

* Restore DEFAULT_FOLDER to the default value

* Fix config.h unescaped line
2018-09-05 13:41:27 -07:00
e5465e1c57 CTRL and ALT updates
Added support to enter bootloader from software (bootloader version must be newer than "v2.18Jun 22 2018 17:28:08" until workaround for older is created).
Updated CTRL and ALT keymaps for entering bootloader with Fn+b held for >500ms.
Added basic MacOS keymap for ALT.
USB sleep LED indicator now turns off after 1 second.
Slowed down debug LED code printing.
2018-09-05 11:14:31 -07:00
73a3399d0e Add the ability to disable the USB startup check for Chibios
- Added support for NO_USB_STARTUP_CHECK. This allows the keyboard do function and not get stuck in a SUSPENDED state loop in case of no USB connection.
- Added support for WAIT_FOR_USB. In LUFA no keyboard has this flag enable therefor no keyboard waits for usb to be active.
- Added documentation for both configuration flags as they were missing.
2018-09-05 09:42:04 -04:00
1a907a1627 Keyboard: formatting changes for readme and enable bootmagic (#3851) 2018-09-04 13:29:58 -07:00
224b4dea98 mitosis:datagrok add layer select, more layouts (#3835)
* mitosis:datagrok: fix typo'd inconsistent brace arrangement

(thank you @cari66ean)

* mitosis:datagrok: add makefile argument MITOSIS_DATAGROK_SLOWUART

* mitosis:datagrok: return backspace to opposite space, use TT(), more

- move backspace back to its position opposite space
- move del to red+backspace
- move tab back to tap-leftshift
- move printscreen/scrolllock/pause to blue+left pinky column
- use TT() instead of MO() to stick a layer on if wanted
- indentation that my text editor wants
- default to no audio; i can enable it at compile time.

* mitosis:datagrok: modularize features, add default layer rotator key

* mitosis: add MITOSIS_DATAGROK_BOTTOMSPACE makefile argument

* mitosis:datagrok: README improvements; document new features

* mitosis:datagrok: dot. not "number pad dot." in numbers layer

* mitosis:datagrok remove unnecessary _user audio code

* mitosis:datagrok: return to MO() for red/blue, keep TT() for purple

in this way, the LED still updates quickly when red or blue is pressed,
but we can still lock the purple layer on for 10-key numpad operation
with red+tapping blue.

* mitosis:datagrok: add colemak and dvorak default layers

* mitosis:datagrok update readme re: available default layouts

* mitosis: remove unneeded code that was overriding led_set_user

also, add some comments

* mitosis:datagrok: updated led setting code for new layers

also, place into led_set_user where it belongs, not matrix_scan_user.

* mitosis:datagrok: update LEDs when setting the default layer

maybe this should go into default_layer_set?

* mitosis:datagrok update readme with new imgur links + other improvements

* mitosis:datagrok fix typo in image urls

* mitosis:datagrok remove useless #include (ty @drashna)

* mitosis:datagrok undo unnecessary change to quantum/quantum.h

i can put the extern float definition in my own keymap code. (ty @drashna)

* mitosis:datagrok move customized layout to my keymap

no need to modify keyboard-level mitosis.h. (ty @drashna)

* mitosis:datagrok update comment describing my led indicator logic

* datagrok:mitosis update readme to document LED indicator.
2018-09-04 08:55:31 -07:00
40718d2ca3 Keymap: Create ISO HHKB keymapping for GH60 (#3832)
* Create ISO HHKB keymapping for GH60

* Add media controls to Fn layer

* Use M(x) instead of F(x), add Copyright text
2018-09-04 08:52:52 -07:00
0533ea4a20 Keymap: Added a keymap like a JIS keyboard for JJ 40. (#3847) 2018-09-04 08:52:00 -07:00
a14eb01883 fix mousekey call 2018-09-03 16:59:32 -07:00
714c82cc2e Keymap: Massdrop CTRL: add basic MacOS support (#3842)
* swap KC_LALT with KC_LGUI
* replace KC_RALT with KC_RGUI

This makes the keyboard more mac friendly out of the box (I'm aware this
that this could partially be done in software with the preferences but
hey, where's the fun in that).
2018-09-03 16:57:57 -07:00
f48e20c1eb Keymap: Updates to xyverz keymaps (#3841)
* fixing ortho_4x12 configs

* Using upstream/master version instead

* Additions and Corrections

Corrected the Kinesis/Stapelberg's .c file to allow LEDs to work
Removed excess cruft from my Kinesis keymap to reflect this change
Other minor tweaks and adjustments to my ortho_4x12 and 5x12 layouts

* Rules for vitamins_included

Added a section to disable RGB underglow for the Let's Split
   Vitamins Included board.

* fixing ortho_4x12 configs

* Using upstream/master version instead

* Additions and Corrections

Corrected the Kinesis/Stapelberg's .c file to allow LEDs to work
Removed excess cruft from my Kinesis keymap to reflect this change
Other minor tweaks and adjustments to my ortho_4x12 and 5x12 layouts

* Creating my own userspace

* Added Rorschach keymap

* renamed userspace folder

I renamed my userspace folder since I'm not ready to start using
it just yet, and I want to get my keyboards programmed. This is
a temporary thing and will be fixed later as I get time.

* adding files in "new" folder

* Disabling LEDs on Pro Micro

* Modifications to Kinesis keymap

* More kinesis tweaks

* removed userspace from master

Created a new branch for my userspace stuff. I'll work on it there.

* Moved keymap to separate branch

Moved the Rorschach keymap I was working on to a separate branch
for development purposes. Not ready to push it up to upstream
master.
2018-09-03 16:57:06 -07:00
aa795dc33e Keymap: Fix missing braces around initializer error on older gcc (#3840) 2018-09-03 16:55:06 -07:00
07fac2fbbf Keymap: xtonhasvim Levinson (#3837)
* pulled in levinson from staging.

* simplified trilayer handling

and some other linting that bit me in the last code review

* formatting
2018-09-03 16:50:11 -07:00
dd29b64256 Keyboard: Add support for Diverge TM2 (#3829)
* pulling in diverge tm2 from staging branch

* cleaned up comments, docs, licenses

* refactored apparent grid to make 2u spacebars more obvious

* various delinting from noroadsleft review

* most of drashna's feedback responded to

- lots of lint swept
- used more modern tri-layer functions
- still need to adopt modern split support.

* switch to common split code. remove comment cruft

* tapping force hold makes LT way more usable for rapid ,  sequences
2018-09-03 16:35:27 -07:00
35efcc9f39 Keyboard: Improvement of crkbd communication functions (based on helix-keyboard) (#3798)
* improvement of crkbd communication functions (based on  helix-keyboard)

* Removed unnecessary code.

* Changed read restriction from #define to #pragma once.

* Changed from sizeof to defined size.

* moved lib folder to crkbdroot.
removed warning of ws2812.d
2018-09-03 16:34:16 -07:00
fa1ee47cf2 Enable mouse keys in register_code and unregister_code
This allows for macros to be assigned to press two mouse directions at same time, which allows for one key diagonals.
2018-09-03 19:27:11 -04:00
04bea9ef74 Keymap: share my ortho_4x12 layout symbolic (#3833)
* add ortho_4x12 symbolic layout

* delete trash

* modify little bit

* fixed doesn't requires

replace `#ifndef ... #endif` to `#pragma ones` in config.h
delete `QMK_KEYBOARD_CONFIG_H` in config.h
delete `action_layer.h` and `eeconfig.h` in keymap.c
2018-09-02 09:46:52 -07:00
479bf78f3e Keymap: Added personal layout for FC660C (#3834)
* - Fixed DK60 version in config.h

* - Updated dk60 readme with new QMK rules

* - Fixed wording in readme

* Added dbroqua layout for DZ60

I've also updated dz60.h to add "true HHKD" keymap definition (6U
spacebar).

With the default HHKB definition r_alt was not mapped and when I pressed
r_menu it was r_alt.

Regards

* Updated dbroqua layout for HHKB keyboard

Added default configuration and alternate (swap gui/alt keys).

Save user choice in keyboard memory (like plank, thanks for this
feature!).

* Added dbroqua layout for Iris keyboard

* Updated layout and fixed includes

* Added personal layout for FC660C
2018-09-02 08:35:04 -07:00
83df69488d Fix bad key label in ascii art (#3830)
Just fixed a key that was wrong in the Tokyo60 ASCII art
2018-09-02 08:29:13 -07:00
7e5a0def3a Keymap: new planck keymap (#3809)
* Add files via upload

* new planck keymap

* new planck keymap

* readme file updated

* deleted files from qmkfirmware folder

* re-added readme file to /qmk_firmware

* Fix main readme (hopefully)
2018-09-01 10:02:10 -07:00
0dcd60eeed Keymap: added keys to broswen keymap (#3825)
* added PGUP and PGDN to my keymap

* added VOLU VOLD and MUTE to keymap
2018-09-01 09:59:20 -07:00
ffc2dc0359 Keymap: add yshrsmz keymaps (#3770)
* add ergo42 keymap

* add helix keymap

* add keymap for lets_split

* Add keymap for nyquist

* update keymaps to address review comments

- remove unneeded include
- use `#pragma once`
2018-09-01 09:38:29 -07:00
8eb674b257 Keymap: Nojjan atreus (#3822)
* Add support for my Falbatech Atreus

This is currently the default Atreus keyboard layout, but I will
eventually customize it to match my Ergodox layout.

* Address review comments

* More review comments fixed

* More review comments fixed
2018-09-01 09:23:10 -07:00
dedffb5f6d Keymap: Cleaned up Rorschach keymap (#3823) 2018-09-01 09:22:21 -07:00
2aa27f0c78 Keyboard: Rename alt67 to alt (#3824)
Renamed keyboard alt67 to alt and adjusted necessary files where alt67 appeared.
CTRL keymap fixed enum structure name.
usb2422 removed stray define no longer used.
2018-09-01 09:21:48 -07:00
fb79015049 Keymap: Merlin Learns to QMK (#3820)
* Fix up my keymaps to use more QMK features

* update 60_ansi readme

* add the start of my userspace

* begin to use my new userspace

* use more of my userspace

* spread userspace love to my clueboard

* spread userspace love to 75 layout

* add a fairly vanilla readme

* put the FNX into a userspace incase I ever want to use it for something else

* respond to drashna's code review comments
2018-08-31 14:49:18 -07:00
acc06a0848 Keyboard: Add Tragicforce 68 (#3807)
* Fork MF68 to Tragicforce 68

* Set pinouts and key layout

* Reformat keymap, update comments/notes

* Cleanup rules.mk
2018-08-31 11:13:55 -07:00
c51b2266a0 Keymap: Adding adnw_puq-Layout for Ergodox (#3723)
* added adnw_p_u_q-Layout

* changed link

* 3723 - outsource definitions to config.h

* added TAPPING_TERM

* changed defines and added colors

* removed debug- and action_layer-Header
2018-08-31 08:44:15 -07:00
78ef62764b Keymap: I got my intern a KBParadise V60 Type R... (#3813)
* new mode for v60

xtonhasvim. still working on it:

- need to get indicator lights going
- and fun layer properly fleshed out.

* status lighting, proper fun layer

copied fun layout from keycaps to maximize accessibility

* enable power return

* support brightness adjustment for indicators

* refined brightness setting.

is saved in eeprom now

* readme. and fixed tilde

* more modifiers fall through fun layer

* i mean, this kinda works..

* much more reliable way of restoring lights

* responded to feedback
2018-08-31 08:28:14 -07:00
4e45119796 Keyboard: Adding Z-150 PCB firmware (#3793)
* Adding the AT101 PCB firmware

* Fixed AT101 keymap error

* Fixing AT101 firmware

* More Fixes for AT101 firmware

* Rename AT101_Blackheart.c to at101_blackheart.c

* Rename AT101_Blackheart.h to at101_blackheart.h

* Update readme.md

* Renaming AT101 folder pt1

* Renaming AT101 folder pt2

* Fixing AT101 LED function name

* Redoing AT101 folder naming pt2

Last round had issues, should be the last rename.

* Fixing missing comma in at101_blackheart.h

* Adding Z-150 PCB

* Adding Z-150 readme file

* Fixing Z-150 firmware errors

* Fixing Z-150 layout error

* Fixing Z-150 firmware errors

* Fixing Z-150 Issues

Still unsure where the extra "\" is that through the error.

* Fixing more Z-150 errors

* Finally fixing the Z-150 error

* Fixed Z-150 layout naming

* Removed Z-150 layout fillers
2018-08-31 08:15:09 -07:00
f9eedd7ce7 Keymap: Add backlight controls for Planck Light in dshields keymap (#3801) 2018-08-31 08:12:37 -07:00
2cd80f84a4 Keyboard: CTRL and ALT keyboard json fix (#3816)
Fixed incorrect layout names
2018-08-31 07:38:06 -07:00
94f92cedef Fix emulated EEPROM start address on STM32F303 (#3819)
MCU has 254 flash, changed 250 to 254. tested working on a planck rev6
2018-08-31 07:37:13 -07:00
be94e5e591 Keymap: Updated keymap with the "pretty" layout (#3812) 2018-08-30 15:38:31 -07:00
b61653739b Keyboard: CTRL and ALT updates (#3810)
Update to CTRL and ALT keyboard files
2018-08-30 13:49:17 -07:00
ce3ccd3f4a Docs: Tabulate Modifier & Mod-Tap keycode listings in advanced keycodes docs (#3799) 2018-08-30 09:37:05 -07:00
2fcfd5cff7 Keymap: Wanleg updates (#3794)
* various edits and minor additions

* updates

* updates

* updates

* lets_split LEDs off instructions

* lets_split LEDs off instructions

* turn off lets_split LEDs in userspace

* one-hand setup for right side
2018-08-30 09:34:14 -07:00
2b707f3470 Keymap: Added new tada68 keymap (#3788)
* Initial Commit

* Removed duplicate lines
2018-08-30 09:23:33 -07:00
1acaf2b2c2 Tweak the wording in "Becoming a QMK Collaborator" 2018-08-30 07:39:58 -04:00
4cd4e1ded6 Docs: add process_terminal() and update links to other functions (#3778)
* add process_terminal() and update links to other functions

* convert links to permalinks and add a few missing process_* functions

* update links in main text as well
2018-08-29 18:20:41 -07:00
11f49d6388 Keymap: Update keymap including LAYOUT_planck_grid (#3779)
* Update keymap including LAYOUT_planck_grid

* Change include
2018-08-29 18:19:43 -07:00
97d09ef8fa Keyboard: remove old comment from keyboards/helix/rules.mk (#3795)
remove 2 lines from keyboards/helix/rules.mk

 | -# if firmware size over limit, try this option
 | -# CFLAGS += -flto
 | -

see keyboards/helix/[rev2|pico]/keymaps/EACH_MAP/rules.mk:

 | Link_Time_Optimization = no # if firmware size over limit, try this option
 :
 :
 :
 | ifeq ($(strip $(Link_Time_Optimization)),yes)
 |    EXTRAFLAGS += -flto -DUSE_Link_Time_Optimization
 | endif
2018-08-29 18:12:09 -07:00
3cafc4e7c6 Keyboard: Update CTRL and ALT keyboard readme (#3796)
* Massdrop keyboards readme update

Massdrop keyboards readme update for flashing instructions

* ctrl and alt keyboard readme update

Updating make command in Massdrop CTRL and ALT keyboard readme files to reflect directory change
2018-08-29 18:11:32 -07:00
097f1a299f Mask off keycode/layer/mod where possible in LT(), MT(), etc. (#3430)
* Mask off keycode/layer/mod where possible in LT(), MT(), etc.

* Don't need these parentheses

* Put back parentheses for order of operations
2018-08-29 21:05:02 -04:00
d12d058bae Autodetect lack of screen presence
This is the simplest, most efficient way I could come up with to silence
the "Failed to start write 60" error that occurs when QMK tries to talk
to a screen that doesn't exist.

iota_gfx_init passes a success boolean. We catch that into a global bool
(we could rewrite multiple functions to pass this as an argument, but
given the number of keyboards using this code it seemed less disruptive
this way) and then use that as a conditional on running the
iota_gfx_task in matrix_scan_user.

Tl;dr: if the screen doesn't init, the screen write code doesn't run.
2018-08-29 21:03:23 -04:00
972388447b Massdrop keyboards readme update (#3791)
Massdrop keyboards readme update for flashing instructions
2018-08-29 14:11:58 -07:00
6794a5c9dc move massdrop boards into its own directory for configurator visibility 2018-08-29 16:38:12 -04:00
621ce29a53 STM32 EEPROM Emulation (#3741)
* STM32 EEPROM Emulation

- Added EEPROM emulation libaries from libmaple and Arduino_STM32. https://github.com/rogerclarkmelbourne/Arduino_STM32 and https://github.com/leaflabs/libmaple.
- Renamed teensy EEPROM library and added conditional selection of library.
- Remapped EEPROM memory map for 16 byte blocks (as is with STM32f3xx MCUs).
- Added EEPROM initialization in main.c of Chibios.
- Added EEPROM format to clear the emulated pages when EEPROM is marked as invalid.

* Fixed ifdef
2018-08-29 16:14:49 -04:00
30680c6eb3 Massdrop keyboard support (#3780)
* Massdrop SAMD51

Massdrop SAMD51 keyboards initial project upload

* Removing relocated files

Removing files that were relocated and not deleted from previous location

* LED queue fix and cleaning

Cleaned some white space or comments.
Fix for LED I2C command queue.
Cleaned up interrupts.
Added debug function for printing numbers to scope through m15 line.

* Factory programmed serial usage

Ability to use factory programmed serial in hub and keyboard usb descriptors

* USB serial number and bugfix

Added support for factory programmed serial and usage.
Incorporated bootloader's conditional compiling to align project closer.
Fixed issue when USB device attempted to send before enabled.
General white space and comment cleanup.

* Project cleanup

Cleaned up project in terms of white space, commented code, and unecessary files.
NKRO keyboard is now using correct setreport although KBD was fine to use.
Fixed broken linkage to __xprintf for serial debug statements.

* Fix for extra keys

Fixed possible USB hang on extra keys report set missing

* I2C cleanup

I2C cleanup and file renames necessary for master branch merge

* Boot tracing and clocks cleanup

Added optional boot debug trace mode through debug LED codes.
General clock code cleanup.

* Relocate ARM/Atmel headers

Moved ARM/Atmel header folder from drivers to lib and made necessary makefile changes.

* Pull request changes

Pull request changes

* Keymap and compile flag fix

Keymap fix for momentary layer.
Potential compile flag fix for Travis CI failure.

* va_list include fix

Fix for va_list compile failure

* Include file case fixes

Fixes for include files with incorrect case

* ctrl and alt67 keyboard readme

Added ctrl and alt67 keyboard readme files
2018-08-29 15:07:52 -04:00
a6c770432f Keymap: Add german layout for redox keyboard (#3695)
*     Add german layout for redox keyboard

    A german layout for the redox keyboard which tries
    to stay close to the default english redox layout
    while acommodating the umlauts at their usual position.

* Fix keycodes in german redox keymap

The keycode for Y was wrong.

* Minor changes

* Remove #ifdef include guard by #pragma once
* Remove unnecessary include from rules.mk

* Review changes

Remove unnecessary code fragments that
were pointed out in the review
of PR #3695 by @drashna.
2018-08-29 12:01:49 -07:00
190fcdde26 Keyboard: Adding the AT101 PCB (#3785)
* Adding the AT101 PCB firmware

* Fixed AT101 keymap error

* Fixing AT101 firmware

* More Fixes for AT101 firmware

* Rename AT101_Blackheart.c to at101_blackheart.c

* Rename AT101_Blackheart.h to at101_blackheart.h

* Update readme.md

* Renaming AT101 folder pt1

* Renaming AT101 folder pt2

* Fixing AT101 LED function name

* Redoing AT101 folder naming pt2

Last round had issues, should be the last rename.

* Fixing missing comma in at101_blackheart.h
2018-08-29 11:58:09 -07:00
836efb50c6 Updated templates for use by new_project.sh (#3783)
* template.h file cleanup

Reformatted the pre-macro comments as block comments.

Updated the ps2avrgb template comment to match the avr template's comment, which was more informative.

Deleted the line about the macro representing the Planck MIT layout, because the macro doesn't represent that layout anymore.

* base template keymap.c refactor

Deleted the deprecated TMK macro functions.

Defined two custom keycodes for use as macros by process_record_user.

process_record_user is now after the keymap and before matrix_init_user, where the deleted TMK functions were.

* Removed an extra " from macro command per @drashna

* Added BOOTLOADER rule to avr/rules.mk per @drashna

* Updated Bootloader sections per @drashna

* Updated links to docs at the bottom of both avr and ps2avrgb template readme.md files

Corrected the links to the Build Environment Setup and the Make Instructions docs.

Added direct link to the QMK Complete Newbs Guide.
2018-08-29 10:57:30 -07:00
74f2f855a3 Fixed bootloader target
Fixed matching grep matches (for PRODUCT in particular)
Fixed " Bootloader" concatenation for WSL (windows line-endings)
2018-08-29 13:43:12 -04:00
e4bbe057f2 Yet another update to drashna keymaps and userspace (#3787)
* Make tap function inline

* Use better makefile keyboard detection

* Remove Copy-Paste macro

* Add F11/F12 to Iris

* Minor tweaks to userspace config

* Set audio clicky randomness to 1.5
* Set NO_DEBUG to only be set if console is not enabled

* Move NO_MUSIC_MODE to userspace config.h

* Reduce Ergodox Debounce

* Add Planck Light config

* Use OSM for ortho 4x12

* Music Mode changes for planck light

* Cleanup do to shutdown user and other fixes in Master

* Add and use 'shutdown_user' fzunction

* Remove global NO_MUSIC_MODE define

* Add NO_MUSIC_MODE to individual keymaps

* Change layer colors

* Remove NO_PRINT and NO_DEBUG from userspace config.h

Since these are automatically disabled if the console isn't enabled.

* Remove backlight code if backlight isn't enabled

* Remove Twinkle from Ergodox

* Disable RGB twinkling and enable PSM

* Clean up RGB matrix code

* Clean up planck light indicators

* Clean up tap code

* Rules cleanup for ortho 4x12

* Fix up userspace template

* Revert "Clean up tap code"

This reverts commit 09f64d6d67aa021c3b5ac86a9a739a5ca2b9c1ec.

* Organize includes

* userspace cleanup

* Fix modifier spelling error

* Fix userspace rules

* Disable Permissive Hold again

* Minor clean up

* Fix Tap stuff

* Viterbi Updates for file size
2018-08-29 13:42:15 -04:00
661ca4440c Keymap: Boy_314's Preonic and XD75 Layouts (#3781)
* fixed arrow keys and left control

* added right shift

* latest version

* reverted arrow keys

* edited readme

* added osu layer

* updated osu layout

* updated osu layout

* added full arrow keys to osu layout

* in case i mess up creating macros

* added the best meme key in the world

* added plover steno layer

* updated boy314 layout

* removed unused layers

* added boy314 xd75 layout, inspired by preonic layout

* added boy314 xd75 layout, inspired by preonic layout

* version 2 of boy314's xd75 layout

* added readme notes

* updated readme for boy314 xd75 layout

* qwerty support, brackets on bottom row, caps lock underglow

* fixed readme/

* small changes to allow merging

* minor changes to format

* fixed up default readme
2018-08-28 18:17:52 -07:00
08c682c193 Docs: Add docs for the LAYOUT_* macro to layouts (#3772)
When moving my planck layout to my let's split, I ran into this issue
because I had copied my planck layout from the default layout which just
used the `{}` array form for the keymap layers. I checked the docs, but
this bit wasn't clear to me. I'm sure @ishtob or @drashna helped me on
discord, but this seemed to be the logical place to add a helpful hint.
2018-08-28 17:35:24 -07:00
9bd6d6112d Keyboard: xealous (#3731)
* Keyboard: HandWired/XeaL60

* Updated rules.mk

* Mapping for layout was flipped

* Figured out how to re-map bad pins.

* Updated Keymap

* Enabled audio, Forced NKRO

* Added QMK_KEYS_PER_SCAN

* Removed more unnecessary files, since split_keyboards are in main QMK branch already.

* Simplified rules.mk in rev1

* Removed i2c from matrix.c

* Re-formatted to 4 spaces per tab,

* Changed note for NUMPAD

* Added I2C support back!

* Fixed keyboard mappings. Both sides work

* Moved i2c configuration from keymaps/default/config.h to config.h

* Changed SCL_CLOCK to 400000L

* Added DEBUG_MATRIX_SCAN_RATE for future optimization efforts

* Removed row2col code to clean up matrix.c

* Scan rate from 2100 -> 4200 by using Nop instead of waiting 30us between columns.

* Further optimized column reading via optimized_col_reader.

* Immediate key-recognition

* Switched back to own implementation of SPLIT_KEYBOARD. Will optimize so that slave interrupts master.

* Moved scanrate debug messages to another file.

* Made matrix_scanrate.c compile if CONSOLE_ENABLE is off. Updated to latest i2c.c

* Latest i2c uses a few bytes for lighting information

* Optimizations in i2c.h to determine buffer size.

* Disabled a whole bunch of features. TODO: Test that keyboard still works fine.

* Minimum #define NO_ACTION's with still working keyboard

* Fixed matrix not working due to offsets not being respected

* Added numlock button for keymap.

* Use I2C_KEYMAP_START offset

* Removed serial, Backlight and RGB support

* Removed need for split_flags.

* Added audio on and off for numlock.

* Renamed from xeal60 to xealous, simplified build system.

* Used more shared split_common code.

* Updated audio code.

* moved tone_qwerty and tone_numpad to config.h. Removed keymaps/default/config.h

* Added more shortcut keys in _FN layer. Increased debounce to 6ms due to fencepost error.

* DF used with incorrect argument. Custom_keycodes no longer required.

* Fixed bug in update_debounce_counters which was resulting in no debouncing!

* Removed unnecessary #include
2018-08-28 17:08:07 -07:00
af5f59636e Keyboard: Dactyl - Only initialize relevant variables (#3771)
This small change prevents an unused variable from being initialized, throwing a warning during compilation, thus ending fatally.

[07:47:10] [Daniels-MacBook-Pro-3] [dburkhol] [ /Users/dburkhol/git/qmk_firmware ] [develop ]
: make handwired/dactyl:default
QMK Firmware 0.6.97
Making handwired/dactyl with keymap default

avr-gcc (GCC) 7.3.0
Copyright (C) 2017 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Size before:
   text    data     bss     dec     hex filename
      0   19972       0   19972    4e04 .build/handwired_dactyl_default.hex

Compiling: keyboards/handwired/dactyl/twimaster.c                                                   [OK]
Compiling: keyboards/handwired/dactyl/matrix.c                                                     keyboards/handwired/dactyl/matrix.c:52:22: error: 'expander_col_pins' defined but not used [-Werror=unused-const-variable=]
 static const uint8_t expander_col_pins[MATRIX_COLS] = MATRIX_EXPANDER_COL_PINS;
                      ^~~~~~~~~~~~~~~~~
cc1: all warnings being treated as errors
 [ERRORS]
 |
 |
 |
make[1]: *** [.build/obj_handwired_dactyl_default/matrix.o] Error 1
make: *** [handwired/dactyl:default] Error 1
Make finished with errors
2018-08-28 17:06:51 -07:00
3892829d74 Keymap: xtonhasvim updates (#3768)
* cherrypicking file changes just for updates

* removed unused heat foo

* avoid defining own min/max

* add license

* formatting
2018-08-28 16:54:17 -07:00
3c20983055 Keymap: Adding keymap to the XD60 (#3767)
* Created keymap based on Default base layer and GK64 function layer

* Update readme.md
2018-08-28 16:53:10 -07:00
b1935c5e0d Putting my ducks in a row: Eagle/Viper V2 into Duck directory (#3766)
* mv eagle_viper into duck

* delete files

* remove eagle_viper .c and .h
2018-08-28 16:52:30 -07:00
3916b06168 Putting my ducks in a row: Octagon V1/V2 (#3765)
* Move octagon directory into duck diretory and fix as many compile issues as I can

* fix formatting

* fix layout75 matrix

* edit readme for build instructions
2018-08-28 16:52:00 -07:00
444def8411 Keymap: Bocaj - Create Userspace and Ergodox Layout (#3750)
* Bocaj Layout Revamp

* Pull in Upstream (#1)

* Various tweaks for some Input:Club build processes

* change KEYMAP to LAYOUT for all new keyboards made using this script

* Add support for rev3 of the Atom47 (#2672)

* Added support for rev3 of the Atom47

* Updated Atom47 readme's

* Fix redefine error on rev2 and add maartenwut's keymap

* Fix redefine error on LEdiodes keymap

* Add Nyquist keymap (#2692)

* nyquist

* danielhklein nyquist setup

* shift left controls

* remove readme

* cleanup before pr

* ready for pr

* Adds Phantom TKL support (#2696)

* Add an info.json to phantom keyboard

* Add layouts

 - KEYMAP_WINKEYLESS
 - KEYMAP_7BIT
 - KEYMAP_ISO
 - KEYMAP_ISO_WINKEYLESS

* Add key_counts

* Add 2 missing F-Row keys

* Add TKC1800 info.json

Created an info.json for the tkc1800.

* Clueboard 60 info.json

 - adds
   - LAYOUT_60_ansi
   - LAYOUT_60_iso
   - KEYMAP_AEK
   - KEYMAP
   - LAYOUT_60_ansi_split_bs_rshift

* Add the Speedo keyboard

* Fix KC60 info.json file (#2707)

* change KEYMAP to LAYOUT in all the KC60 files

* Redo the info.json file

* Small fixes to TKC1800

 - adjust F-row to use 0.25 spacing
 - split left shift
 - add key_count

* Fix some Configurator Warnings regarding LAYOUT vs KEYMAP (#2708)

* change diverge 3 KC_KEYMAP to LAYOUT

* Change KEYMAP to LAYOUT for handwired arrow pad

* change M10A to LAYOUT for m10-a

* Change KC_KEYMAP to LAYOUT_kc and KEYMAP to LAYOUT for mf68

* change KC_KEYMAP to LAYOUT for nano

* Refactor to LAYOUT

* refactor to LAYOUT-ansi and LAYOUT_iso for s65

* LAYOUT conversions for lfkkeyboards

* missed a few renames

* mini1800 for lfkeyobards support of LAYOUT

* Improve state/chord handling and clean up namespace

Some values that can never, ever, change were held in local
variables, rather than in PROGMEM. Fixed.

Change "pressed" to a signed int so the test for < 0 makes
sense, and to avoid possible weird failure modes in the
case where a key release comes in when pressed is already
zero. (Shouldn't happen, sure, but computers are weird.)

A lot of things in process_steno had external linkage for no
particular reason. They've been marked static. Stuff still
builds.

Distinguish between currently-held keys and keys that have
been held, and expose these values through a nicely-named API
so other code could, say, check on the current set of steno
chording in order to make displays. Also in passing fix up the
"state" value having external linkage so it could clash with
other people's variable declarations.

The API also provides hooks for key processing and steno chord
events, so you can monitor those events without having to
run in matrix_scan_user and recheck the values directly. Also
document these.

There is no path through processing a key that doesn't
end with a return false, so the nested return foo() are
gone and we just return false.

* Pull information from config.h and rules.mk (#2711)

* Pull information from config.h and rules.mk

* Readd the kbd75 maintainer

* Remove obsolete info.json entries (#2712)

* Clean up some long-standing errors when populating the API (#2715)

* More Configurator Warning Fixes (#2716)

* mf68_ble did not have the correct .c and .h files

* Fix JC65 KEYMAP to LAYOUT

* Change KEYMAP to LAYOUT for s60_x

* Convert KEYMAP to LAYOUT for lets_split boards

* Convert KEYMAP to LAYOUT

* more fixes to keymap for iris

* convert KEYMAP to LAYOUT for levinson keyboard

* change losinggeneration's KEYMAP to LAYOUT

* convert KEYMAP to LAYOUT

* convert KEYMAP to LAYOUT for nyquist

* convert KEYMAP to LAYOUT

* convert KEYMAP to LAYOUT for viterbi

* convert KEYMAP to LAYOUT

* convert KEYMAP and its subsidiries to the LAYOUT standard

* convert KEYMAP and its subsidiries to the new LAYOUT standard

* Normacos keymap for let's split keyboard (#2691)

* Cheers let's split keymap

* fixed typo on norman layer of cheers keymap for let's split

* fixed right handed mappings for home row

* cheers keymap for let's split redefinition

* updated Cheers keymap for let's split

* cheers keymap for let's split updated with some terminal macros

* renamed cheers let's split keymap to a more appropriate normacos

* updated normacos keymap doc / removed non functional keys

* reset let's split rules to default values

* added more spotlight search macros

* normalized keymap comments

* Moved numpad on lower layer

* hhkb jp personal keymap (#2698)

* Add JJ40 Cockpit personal keymap (#2713)

* Add JJ40 Cockpit keymap

* Fix lower layer symbols

* Add readme for "major" keyboards to eliminate more QMK Configurator errors (#2718)

* add readme to ktype keyboard

* add readme to m10a

* add readme to mini1800

* add readme to parent directory

* Revert "Pull in Upstream (#1)"

This reverts commit eeba0cec17ccb636e4225eed88aeae72b99f5e45.

* Updates to Bocaj Files

- Gave up on Tap Dance for ' -> '
+ Added another 'Secret'
+ Add ' -> ' to the Swap Hands key
+ Add Swap Hands to the ' -> ' key
+ Made Hand Swapping a momentary toggle
- Removed Auto Shift
+ Added Layer Toggle to KC_QUOTE for the _TOOLS layer
- Disabled Tap Dance

* Merge remote-tracking branch 'upstream/master'

* Updates to Bocaj

Added Game Layers, Removed Unused Macros

* Removed 'secrets.h'

* Updates to Bocaj

Remove 'secrets'.
Remove 'sendstring_workman.h' and set related layer back to qwerty due to macro compatibility issues

* Total revisioning of keymap and layout structure

* Missed readme.md file

* Bocaj - Permissive Hold setting enabled

* Switching from ErgoDox EZ centric configuration to the layout/user approach

* Bocaj - Create Userspace and Ergodox layout

* Update settings.json
2018-08-28 16:48:41 -07:00
fdd0f91527 ISSI31FL3733 driver (#3679)
* ISSI31FL3733 driver

- Addapted IS31 driver for the above driver

* fix my branch

* ISSI31FL3733 driver

- Inclusion of above ISSI led driver

* IS31fl3733 driver

- Added correct function for control registers

* Finalized support for ISSI31fl3733 led driver

- Finalized and tested driver.
- Modified i2c_master for arm due to declaration mistake.
- Fixed spaces/tabs in quantum.h file.
- Fixed spaces/tabs in common_features.mk file.
- Removed unnecessary includes from rgb_matrix.c file.
- Added local definitions for MIN and MAX macros in rgb_matrix.c file.
- Adjusted chevron effect.
- Added necessary define (RGB_3733_MATRIX_ENABLE) for makefile.
- Added necessary C define (ISSI3733) to aid with inclusion of the correct header file.
- Added documentation for the new driver.

* Driver structure update

- Changed rule includes to be more condensed (RGB_MATRIX_ENABLE = IS31FL3731) and (RGB_MATRIX_ENABLE = IS31FL3733)
- Updated documentation
- Reverted to the use of differently named functions for each driver and selecting the needed ones within rgb_matrix.c

* ISSI Drivers refractoring

- Moved issi drivers in a dedicated folder
- Updated documentation

* I2C library fix

I released the special pins incorrectly before. It is now fixed.
2018-08-28 09:03:11 -04:00
2410f02359 Fixes STM32F303XC timer issue for Planck Rev 6 (#3777)
* Adding my personal planck keymap

* Adding readme.md to my keymap

* Create my userspace

add users/ishtob/

* Moved macros off keymap

macros now exsists in my userspace, moved them off keyboard specific keymaps

* Create my userspace

add users/ishtob/

* rebase from main QMK repo

* fixed compile error with planck rev6 keymap

* fixed compile error with planck rev6 keymap

* Revert "Merge branch 'master' of https://github.com/ishtob/qmk_firmware"

This reverts commit 6c8a9a6eec7ec311802338ea361099612182465d, reversing
changes made to 5c598d9a53a7f794d5be283ac40ca97631ae5578.

* fixed issue where compile errors if private macro file is not present

* Revert "fixed issue where compile errors if private macro file is not present"

This reverts commit e0035df48ffb9a95aa94e8339c58ef539e0449cf.

* Fixed STM32 timer issue with Planck Rev6 with tap mods

* Revert "fixed compile error with planck rev6 keymap"

This reverts commit 5c598d9a53a7f794d5be283ac40ca97631ae5578.

* Revert "Revert "fixed compile error with planck rev6 keymap""

This reverts commit c36896ca718f8b9bb3c653d7532797e9129477e3.

* Fixed compile issues with my personal userspace and keymap utilizing the userspace
2018-08-27 17:10:22 -04:00
c63d9ee0d5 mitosis: minor readme improvements (#3762)
* minor improvements to top-level mitosis keyboard readme

* typo

* trivial readme change
2018-08-26 12:00:22 -07:00
95e9ef27be add linebreaks to "Keyboard Maintainer:..." blocks where missing (#3763) 2018-08-26 11:59:52 -07:00
0680bfe03d Keymap: Made changes to buswerks ortho_4x12 keymap (#3757)
* Added buswerks keymap

* cleaned up comments on buswerks keymap

* Added buswerks keymap readme.md

* Fixed spelling in buswerks readme.md

* Removed unnecessary includes, changed process_record_user to now use set_single_persistent_default_layer(), removed deprecated functions, and moved the audio ifdef block to config.h

* Changed buswerks ortho_4x12 layout to accommodate 'MIT' layout

* Updated README.md to reflect layout changes
2018-08-26 09:33:43 -07:00
a63d4774f5 Keyboard: Putting all my ducks in a row: Lightsaver (#3758) 2018-08-26 09:30:49 -07:00
1ee545014a Keyboard: Make a 1upkeyboards directory for visibility (#3759) 2018-08-26 09:30:12 -07:00
eb19fb5b57 Helpful functions 2018-08-26 07:32:15 -07:00
91cf4b00c5 Keymap: initial migration of raffle planck (#3748)
* initial migration of raffle planck

* cleaned up includes per merge per drashna

* removed unicode shrug attempt

* cleaned up include.
2018-08-25 18:01:07 -07:00
e16b39f0c2 Keyboard: Duck Jetfire QMK Support (#3752)
* Initial Commit

Port from xauser's jetfire code. Does not compile yet

* fix up keymap from uint8 to uin16

* update rules file to contain custom matrix

* Good stopping point

Still lots of compile errors but I'm getting there.

* fix a few more compile errors

* move a few functions around to help with compiling

* Finally got it all to compile

* Get rid of that old KEYMAP macro

* edit readme

* Put my name everywhere and some minor code clean ups

* start to remove that kc nonsense

* fix keymap compilation issues

* add reset key info

* better human readable formatting

* match the duck default layout

* add confgurator support

* clarify reset key

* might be a good idea to use the correct pin

* get the riight keycode for RGB

* include an ALL layout

* I tried to fix the formatting....sigh

* add functons to ensure Configurator compile-ability

* move jetfire to duck directory

* Moved and renamed things as per Drashna's PR comments as his back was hurting as he reviewed this
2018-08-25 18:00:20 -07:00
a68057852b Keymap: initial migration of raffle 1up60rgb (#3747)
* initial migration of raffle 1up60rgb

* updated include statement
2018-08-25 17:13:07 -07:00
f6bd5d793a Keymap: PyroL Let's Split keymap + Alpha keymap modifications (#3753)
* 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
2018-08-25 17:11:53 -07:00
0e17a44b46 Keyboard: Change the default LAYOUT to LAYOUT_60_hhkb for tokyo60 (#3751) 2018-08-25 13:20:18 -07:00
1e7d08d2e3 Keyboard: Tokyo60 Cleanup: QMK Configurator support (#3749)
* use LAYOUT_60_hhkb

* cleanups

* more minute clean ups

* fix some capitilization issues

* add configurator support
2018-08-25 13:00:09 -07:00
b806cc9eea Keyboard: add tokyo60 (#2861)
* adding tokyo60 to qmk

* updating readme

* updating keymap and power consumption for mobile
2018-08-25 12:16:05 -07:00
26dacd51fc Keyboard: Added gamepad layout to cospad (#3714) 2018-08-25 10:35:24 -07:00
7e8c0a368b Keymap: Added my keymap for Rorschach keyboard; minor updates to my Kinesis files. (#3734)
* Added keymap for Rorschach

* Rorschach update

* Minor updates to Kinesis files

* Minor fixes

* Minor fixes for Rorschach
2018-08-25 09:29:43 -07:00
028a4feeed Keyboard: readme.md update (#3581)
for correct site link
2018-08-25 09:26:24 -07:00
a9b6ebcd89 Keymap: update to budi's tv44 (#3587)
* update to budi's tv44

* update august - budi's tv44
2018-08-25 09:04:40 -07:00
34d01f0a7f Keyboard: introduce new default layout 68_ansi (#3745) 2018-08-25 09:00:06 -07:00
80edd8a9d8 Keymap: Hold for MO and Tap for TG (#3742)
Special thanks to Drashna for teaching me how to implement myFNX command. This allows a user to hold Fn for regular Fn and
tap to toggle another layer.

For now this will stay within my community layout as this is the
only layout that I will be using this in. This may change in the future.
2018-08-25 08:47:54 -07:00
b6d8524794 Keyboard: add Wavelet (#3739)
* Add Wavelet keyboard

* Fix build error for keyboards w/o Planck MIT layout

* Add swap hands support
2018-08-25 08:46:42 -07:00
4de9ed7eb0 Add a belgian keymap, partially based on keymap_french.h (#3737) 2018-08-25 08:45:42 -07:00
067091d9c2 Introduce new 75_ansi standard layout (#3738)
* introduce new layout 75_ansi

* use the new 75_ansi layout for my octagon v2
2018-08-24 08:54:16 -07:00
37d3055264 Keyboard: Support PCBDOWN variants for Atreus keyboard (#3735) 2018-08-24 08:53:03 -07:00
c6eccb39e0 Keyboard: dactyl_manuform 5x7 aka Ergodox-ish added (#3691)
* dactyl_manuform 5x7 aka Ergodox added

* LAYOUTS = ergodox removed

* README updated

* README updated again

* zip file removed
2018-08-23 11:48:30 -07:00
6d1536db1d Keymap: fix conditionals in userspace rules.mk (#3726)
* fix conditionals in rules.mk

* minor keymap change
2018-08-22 20:16:49 -07:00
9064b424e9 Keymap: Add Dvorak Svorak A5 layout for Ergodox-EZ (#3725)
* Add svorak a5

* Update Svorak A5 keymap

* Fix issue with special characters

The initial keymap did not account for non US software layout. Hence, the
special characters were incorrect. Since this layout is aimed towards Swedish
writing people the presumption is that whoever uses it will have Swedish as
their OS language.

Includes:
 - Special character issue fixed
 - QWERTY layer that can be toggled if requiered (also presumes Swedish software
   layout)

* Add special characters and media keys

* Add ctrl, alt, etc. to functional layer
2018-08-22 20:16:16 -07:00
5d8d350976 Keyboard: Finish up the HSE now that I have a board to play with! (#3728)
* fix up readmes

* update keymap to match configurator default

* add more info
2018-08-22 20:14:52 -07:00
6076ed85be Keyboard: Partial refactor of the crkbd code (#3600)
* Add display to LED-parameters function
* Improvement of update timing for OLED display (Need TWI_Init)
2018-08-22 09:51:37 -07:00
9d27d55443 Keyboard: Blockey refactor (#3722)
* Matrix refactor

Edited for readability.

* Keymap refactor

Deleted TMK-syntax macro block. Edited for readability.

* Readme cleanup

Edited image link (link previously referenced a single-image album).

* Configurator support
2018-08-22 09:00:40 -07:00
4951fc52be Keyboard: AL1 Configurator fix: misplaced arrow keys (#3716)
* Configurator fix: misplaced arrow keys

* rules.mk: set backlight and RGB rules
2018-08-22 08:59:00 -07:00
356fe590e6 Keyboard: AMJ96 Refactor and Configurator update (#3707)
* AMJ96 Refactor

LAYOUT matrix and default keymap refactored to use full-length keycodes (instead of shorthand).

* Configurator update

Minor physical layout update and made the labels more sensible.

* Readme update

White space correction.

* Default keymap update: #include QMK_KEYBOARD_H

* rules.mk update

Disabled the following options as my local test compile's .hex ended up too big to fit in the available flash space:

MOUSEKEY_ENABLE
EXTRAKEY_ENABLE
BACKLIGHT_ENABLE
RGBLIGHT_ENABLE

If this is undesirable, suggestions are welcome.

* Config/rules update

Re-enabled MOUSEKEY_ENABLE, EXTRAKEY_ENABLE, BACKLIGHT_ENABLE, and RGBLIGHT_ENABLE and disabled COMMAND_ENABLE in rules.mk; enabled NO_ACTION_MACRO and NO_ACTION_FUNCTION per @drashna

* Swapped `___` for `XXX` in amj96.h per @mechmerlin
2018-08-22 08:58:12 -07:00
c8cd1ebc45 Keyboard: Fix tada68 Linux readme (#3717)
Remove confusing mention of a "Windows" computer.
2018-08-21 19:08:17 -07:00
a4294a153b Keymap: Added personal keymap for bface (#3719)
* [keymap] Added personal keymap for bface

* Add readme

* [keymap] Added personal keymap for bface

Add readme

Remove right shift slash test
2018-08-21 19:07:18 -07:00
343dc1be7f Keyboard: UT47 Configurator support and readme cleanup (#3708)
* Configurator support

* Readme cleanup
2018-08-21 08:45:42 -07:00
cffaf0acf4 Keyboard: Configurator render fix for AMJPad (#3706)
- `LAYOUT` updated to `LAYOUT_numpad_6x4`
- `LAYOUT_all` update to `LAYOUT_ortho_6x4`
2018-08-21 08:42:18 -07:00
3f8654c85d Keyboard: AMJ60 LAYOUT_iso matrix fix (#3705)
LAYOUT_iso matrix was invalid.
2018-08-21 08:41:40 -07:00
8720c6628a Keyboard: Alf X2 matrix fix (#3704)
Invalid syntax in LAYOUT_split_arrows matrix macro.
2018-08-21 08:41:12 -07:00
e1be79d7c9 Keyboard: Corrected LFK65_HS LAYOUT_all matrix (#3703)
Switch `k3D` was listed as `K3D` in the parameter list, causing a compile error (undeclared variable).
2018-08-21 08:40:25 -07:00
d0b55b59f9 Keyboard: bface update (#3702)
* add configurator support

* update bface code to more modern QMK standards

* update readme

* update readme

* Make changes thanks to noroadsleft's PR comments
2018-08-21 08:39:25 -07:00
9d99fd8418 Keymap: Adding stephengrier keymap for the DZ60 PCB (#3700) 2018-08-21 08:38:26 -07:00
220ea4c9b7 Keymap: Nordic layouts for ErgoDox, Planck (#3693)
* first verion of skug

* zudvp layer added and new thumb cluster

* move del to arrw cluster and switch places of algr and no_circ

* first verion of skug

* zudvp layer added and new thumb cluster

* move del to arrw cluster and switch places of algr and no_circ

* rework layouts

* Adds SYMB layer toggle to 'ä'

Closes #2

Also moves ctrl away from '-' and 'z' to the outer bottom corners
and removes redundant SYMB layer binds from there

* Adds mouse movement to right hand on ARRW layer

Closes #3

* Fix typoed keycodes

* planck qwerty nordic

* Update README.md

* Update README.md

* Implemented changes to planck layout requested by drashna

* Implemented changes to ergodox layout requested by drashna

NOTE: `version.h` is still required.
2018-08-21 08:37:29 -07:00
dbef2ad6b9 Keymap: Update 333fred's keymap for Zen (#3690)
Reset file to upstream/master, update only macro name (KEYMAP to LAYOUT).
2018-08-20 09:45:15 -07:00
e2755c11b3 Keyboard: forgot to rename the layout 1up60hse correctly (#3699) 2018-08-19 19:35:14 -07:00
2091280bbb Keyboard: Fix Configurator rendering for Big Series 2-, 3-, and 4-key boards (#3698) 2018-08-19 19:33:49 -07:00
4a3eb3bdd4 [WIP] Added support for the b.face keyboard (#2493)
* Added support for the b.face keyboard

This commit adds support for the 60% keyboard from winkeyless, the
b.face. The basic keyboard layout as well as the RGB backlighting
works as expected; the per-key LEDs can be turned on or off but not
yet dimmed. A default 60% US-layout is included.

* Added link to the bface in the ps2avrGB README
2018-08-19 19:32:35 -07:00
10c636a1ee Keyboard: add Telophase board (and Graham's keymaps) (#3244)
* add my config

* fix backlight, clean up that code

* group background code, restore static var

* qwerty is supposed to be in the middle

* wrap layer change backlight in ifdef

* backlight levels and some more 'emojis'.

* Restructure to make it possible to press cmd ent on the right side of the board with one hand.

* Expose the period through the number layer. Add Hyper keys to mouse layer

* reduce mouse speed

* add a : -P  key

* Thumbs up and down, remove some keys that are duplicated via function keys, clean up

* fix build issues

* add various emoji

* duplicate default Meira keymaps

* Miera updates

* add documented but unmapped emoji

* Sound for the Meira, was stumped by a file size! Thanks drashna!

* add docs

* docs

* revert lib changes...

* clean up

* clean up

* remove make file

* Fixes missing key

* clean up

* add my lets split

* add more emoji

* add the telophase board (unofficially, I guess...)

* add missing files

* add/reset files

* Review feedback implementation: Not needed. Add #define FLIP_HALF to your config.h file instead.

* Review feedback implementation: All of these includes should be replaced with #include QMK_KEYBOARD_H.

* Review feedback implementation: [FAILING] You may want to use LAYOUT_ortho_4x12 instead, and move this to /layouts/community/ortho_4x12/ instead. That way, you can use the same keymap for all of the boards.

* clean up

* add a key for command tilde (osx loves it)

* at least its building again

* remove adjusts and migrate layer switching to MO(_LAYER)

* update the telophase readme

* update the telophase readme

* grahampheaths -> grahampheath

* ONEHAND_ENABLE -> SWAP_HANDS_ENABLE

* convert lets split to use ortho_4x12

* Move lets split keyboard layout into community/ortho_4x12

* make telophase use LAYOUT()

* I did it?!

* Add clap and grin

* swap tabs and back and forward

* whitespace
2018-08-19 13:29:11 -07:00
99da48c72b Keyboard: add mint60 keyboard (#3543)
* add mint60

* change source by reviews
2018-08-19 13:26:42 -07:00
4cc1edbb67 Keyboard: Add QWERTYYdox keyboard (#3636)
* Add files via upload

* Update readme.md

* Update readme.md

* Update readme.md

* Add files via upload

* Delete split_util.h

* Delete split_util.c

* Delete serial.h

* Delete serial.c

* Delete matrix.c

* Delete i2c.h

* Delete i2c.c

* Update rules.mk

* Update config.h

* Update readme.md

* Update readme.md
2018-08-19 13:23:13 -07:00
d87ef88de0 Keyboard: add 5x5 board support (#3694)
* 5x5 board support

* 5x5 work

* 5x5board config

* add 5x5 board support
2018-08-19 13:18:19 -07:00
8bc771a842 Added arrow layout. 2018-08-19 13:09:31 -07:00
ee238f1219 Keyboard: add 1up60hse (#3687)
* initial commit

* update readme

* enable/disable some keyboard features and add 60_ansi community layout support

* put my name everywhere

* can't use numbers for defines

* enable lighting

* put in a default keymap, use the correct pins, and put in a switch matrix

* update switch matrix to use KXY hex notation

* add QMK Configurator support

* add the rest of my name

* update where to get this keyboard
2018-08-19 13:04:03 -07:00
c55313509f Keyboard: Update Ergo42 default keymap (#3686) 2018-08-19 12:53:41 -07:00
78a01068a4 Keymap: Remove needless lines / files for Ergo42 (#3685) 2018-08-19 12:52:23 -07:00
10b4591d88 Keymap: Added deastiny layout for contra [based on dvorak type II] (#3673)
* Added deastiny layout for contra [based on dvorak type II]

* added questionmark and slash to another layer

* added pragma once
2018-08-19 12:30:28 -07:00
fe687af54d Keyboard: Add Big Series 2-, 3-, and 4-key boards (#3669)
* Implement magic 8-ball mode for big series switch

* LED Testing

* Add Ctrl+Alt+Del key mapping

* Add Windows lock (win+L) layout.

* Add Big Series 3-key

* Add Big Series 4-key

* Add Big Series 2-key

* Fix layout mapping for Big Series 3u

* Fix merge-conflict.

* Refactor bigseries boards into a single folder
2018-08-19 12:29:03 -07:00
a18cd1b2b6 Keymap: Ergo42 biacco-biacco keymap (#3659)
* Add biacco-biacco keymap

* Change P position

* Update biacco-biacco map y position

* Revert y position...

* Refactor needless lines

* Fix some review commentted
2018-08-19 12:27:21 -07:00
19fdfccca2 Keyboard: Ckeys refactor (#3681)
* Obelus Refactor: LAYOUT to LAYOUT_ortho_4x4

- Keymap also now uses #include QMK_KEYBOARD_H
- Readability and white space changes
- rules.mk now has LAYOUTS = ortho_4x4
- added info.json

* naKey Refactor: LAYOUT to LAYOUT_numpad_5x4

- Matrix LAYOUT renamed to LAYOUT_numpad_5x4
- Now supports community layout numpad_5x4
- White space changes

* naKey Configurator update

Updated order of JSON objects to match new matrix order.
2018-08-17 16:12:22 -07:00
9175eebc87 Keymap: Wanleg userspace (#3670)
* configure wanleg userspace

* additional layout support

* additional layout support

* userspace edits

* fix swap hands between 30 and 40 percent

* add additional keymaps

* userspace edits

* userspace configuration

* userspace configuration

* Update readme.md

* userspace work

* swap hands userspace fix

* made requested edits

* Update readme.md

* use relative paths instead of copying file

* Update wanleg.h

* fixing layer order
2018-08-17 16:11:21 -07:00
8007d9f3a7 Keyboard: Zen refactor and Configurator support (#3677)
* Matrix refactor

* Keymap refactor

* Configurator support

* Readme reformatting
2018-08-17 16:04:21 -07:00
da24a34efb First pass at reorganizing docs 2018-08-16 09:16:05 -07:00
700aa8fe1c Tidy up keycode.h (#3666)
* Tidy up keycode.h

* Fix spacing here

* Add back this comma
2018-08-16 12:12:48 -04:00
97df0fc072 Keyboard: DC60 Support (#3667)
* initial commit and get pins correct

* get the switch matrix done

* Add Configurator support

* update LED numbering

* enable lighting options

* add a default-ish keymap

* turn off mouse keys as the file gets too large

* put my name everywhere

* update Alf names

* update keymap to match whats on qmkeyboard.cn
2018-08-16 09:06:19 -07:00
fe0683938a change messege at 'check-size' target 2018-08-16 12:04:35 -04:00
15a73f4f64 Add Atreus as an official board. 2018-08-16 12:01:34 -04:00
4044c746d0 Keyboard: Eagle/Viper V2 refactor and Configurator update (#3671)
* Matrix refactor: eagle_viper/v2 LAYOUT_all

- Deleted K0L (research indicates no switch position at this location)
- Renamed K0J to K0I (spacebar key; on 9th column instead of 10th)
- Updated info.json and default keymap to match
- readability updates

* Keymap refactor

readability update
2018-08-16 08:54:17 -07:00
9b237f5de3 fix line endings 2018-08-16 08:38:42 -07:00
303ca46e77 Keyboard: add ergoinu keyboard (#3655)
* add ergoinu

* remove unnecessary code

* replace include guard
delete unused code

* remove unused RGBLED defines
2018-08-16 08:36:35 -07:00
a828d49f8c Keymap: Adding broswen keymap for iris split keyboard. (#3654)
* Adding broswen keymap for iris split keyboard.

* added changes as requested by drashna

* formatting
2018-08-16 08:33:02 -07:00
9eab1667b0 Keyboard: Update AL1 default keycaps to new QMK standards (#3675)
* update keymaps to not use KC_FNX anymore

* add a reset key as the al1 has no hardware reset
2018-08-16 08:31:52 -07:00
c19d949b72 Keymap: Revamp replicaJunction keymaps (#3589)
* Revamp replicaJunction keymaps

Updates both the replicaJunction Ergodox and Atreus keymaps and moves
most of the logic into a new user directory.

* Cleanup as requested in #3589

* Slightly increased TAPPING_TERM

* Fixed typo in #pragma once

* Fix TAPPING_TERM redefined in config.h

* Add include of replicaJunction.h

Due to the tap dance references, without this include, I was getting
compiler errors about both internal QMK items like
`qk_tap_dance_state_t` and constants defined in my replicaJunction.h
file like TD_LAYER_TOGGLE.

Also remove some commented-out code that defined an enum which has since
moved to replicaJunction.h.
2018-08-15 15:38:41 -07:00
632287535c Keyboard: add generic ortho 5x14 layout support to Viterbi (#3658)
* Add default ortho 5x14 layout

* Fix layout_ortho_5x14: KC_EQLS -> KC_EQL

* Add ortho_5x14 layout to Viterbi
2018-08-15 15:34:25 -07:00
789619eeb9 Keymap: Adding readme file to personal keymap folder (#3665)
* Create a

* Add files via upload

* Delete a

* added readme
2018-08-15 15:32:58 -07:00
3549415116 Keyboard: dactyl manuform 6x6 added (#3662)
* mouse layer keys shifted

* mouse layer keys shifted

* manuform 5x6 added

* mouse layer keys shifted

* manuform 5x6 added

* dactyl_manuform 5x6 keymap added

* reorg. dactyl manuform folder

* removed LAYOUTS = ortho_4x12 for 4x5

* Rows and Cols in config.h fixed

* MASTER_LEFT

* 5x6 matrix fixed

* keymap updated

* removed the i2c, serial, split_util and matrix files and inserted SPLIT_KEYBOARD

* default keymap for dactyl_manuform 5x6

* Fixes for Dactyl Manuform

* Add/update default keymap

* readme dactyl_manuform updated

* links to keymaps added

* dactyl_manuform 6x6 added. README updated

* dactyl_manuform README updated

* cleanup

* more cleanup
2018-08-15 15:31:59 -07:00
4cfdd2cff5 Add configurator support for 66_ansi layout for rev1, 2 and 3 2018-08-15 13:53:28 -07:00
1eaf9c8b9b this commit fixes #3643, rev2 was affected too 2018-08-15 10:51:55 -07:00
bfc9aa66f9 Docs: Update image in FAQ/Keymap: KC_EQLS -> KC_EQL (#3660) 2018-08-15 09:48:14 -07:00
23867894c0 Layouts: Add default ortho 5x14 layout (#3656)
* Add default ortho 5x14 layout

* Fix layout_ortho_5x14: KC_EQLS -> KC_EQL
2018-08-15 09:43:39 -07:00
b3d80d4af0 Keymap: Helix : Update froggy keymap (#3652)
* led ripple effect

* fix key name
2018-08-15 09:30:34 -07:00
77b7e2cd59 Keyboard: Added layout LAYOUT_60_ansi_split_bksp_rshift to ok60 (#3644)
* Added layout LAYOUT_60_ansi_split_bksp_rshift

* Added layout 60_ansi_split_bksp_rshift
2018-08-15 09:28:47 -07:00
89838d0939 Keyboard: Migrate Quefrency to use split common files (#3642) 2018-08-15 09:27:34 -07:00
ad2bb529c7 Rgb matrix arm (#3648)
* Addition of I2C master driver for STM32, Generalization of ISSI3731 driver

- Addition of an i2c_master driver for STM32 to replicate expectations of AVR driver.
- Moved ISSI3731 driver one level up to make it accesible by both architectures.
- Renamed ISSI3731 functions to a more general name for preparation of other ISSI drivers.
- Added compiler directives where necessary to differenciate each architecture.

* converted tabs to spaces
2018-08-15 01:19:38 -04:00
feec8ad469 Keyboard: Add default keymap for dactyl_manuform 5x6 (#3649)
* mouse layer keys shifted

* mouse layer keys shifted

* manuform 5x6 added

* mouse layer keys shifted

* manuform 5x6 added

* dactyl_manuform 5x6 keymap added

* reorg. dactyl manuform folder

* removed LAYOUTS = ortho_4x12 for 4x5

* Rows and Cols in config.h fixed

* MASTER_LEFT

* 5x6 matrix fixed

* keymap updated

* removed the i2c, serial, split_util and matrix files and inserted SPLIT_KEYBOARD

* default keymap for dactyl_manuform 5x6

* Fixes for Dactyl Manuform

* Add/update default keymap
2018-08-14 10:54:22 -07:00
61b6116147 Keyboard: Dactyl manuform 5x6 added and working (#3627)
* mouse layer keys shifted

* mouse layer keys shifted

* manuform 5x6 added

* mouse layer keys shifted

* manuform 5x6 added

* dactyl_manuform 5x6 keymap added

* reorg. dactyl manuform folder

* removed LAYOUTS = ortho_4x12 for 4x5

* Rows and Cols in config.h fixed

* MASTER_LEFT

* 5x6 matrix fixed

* keymap updated

* removed the i2c, serial, split_util and matrix files and inserted SPLIT_KEYBOARD
2018-08-13 20:23:11 -07:00
e12151f15e Keyboard: Clean up Iris files (#3640) 2018-08-13 12:38:49 -07:00
6cdc6e8397 Keyboard: Update info.json (#3638)
Add a layout of ANSI split backspace & R.Shift
2018-08-13 12:37:53 -07:00
08963796d8 Keymap: Added buswerks ortho_4x12 keymap (#3623)
* Added buswerks keymap

* cleaned up comments on buswerks keymap

* Added buswerks keymap readme.md

* Fixed spelling in buswerks readme.md

* Removed unnecessary includes, changed process_record_user to now use set_single_persistent_default_layer(), removed deprecated functions, and moved the audio ifdef block to config.h
2018-08-13 12:37:11 -07:00
05b7383703 Keyboard: Refactor Levinson to use split common code (#3639)
* Migrate Levinson to use split_common code

* Update keymap
2018-08-13 12:05:58 -07:00
39256c2449 Keyboard: Pearl keyboard LAYOUT_spacebar had an undefined constant K34 (#3633) 2018-08-12 09:33:04 -07:00
e510491bbc Keymap: Created and populated a keymap folder for Iris (#3632)
* Create a

* Add files via upload

* Delete a
2018-08-12 09:31:28 -07:00
09759c20ae Document FIRMWARE_FORMAT (#3631) 2018-08-11 23:02:06 -07:00
3be4d2417c Keyboard: Make tada68 build .bin files by default (#3630) 2018-08-11 22:35:07 -07:00
f0e0ca402c Keymap: copy skully's faux clicky mods (#3628) 2018-08-11 16:45:29 -07:00
2a49832db3 Update FAQ section on power keys 2018-08-11 14:30:53 -07:00
d263b27c9a Dedupe shifted keycodes listing 2018-08-11 14:29:53 -07:00
1cdef7cd2f Keymap: Add fauxclicky support to my keymap (#3625) 2018-08-11 14:28:01 -07:00
acd2767631 Keyboard: add blockey keyboard (#3545)
* add blockey

* change sources by reviews
2018-08-11 14:22:49 -07:00
7ad0f24efa Move my keymap to the community folder 2018-08-11 13:36:08 -07:00
5d723ab158 Keyboard: Add ansi, split bs and rshift, 5 1u keys to right of space in DZ60 (#3612)
* Dz60 keymap, ansi, split bs and rshift, 5 1u keys to right of space

fixup

* Change Keymap to layout
2018-08-11 13:27:05 -07:00
a1568b9972 Keymap: Add mac layout (#3607)
- tv44
- planck
2018-08-11 13:24:06 -07:00
317c624761 Keyboard: Six Shooter Keyboard (#3598)
* Created base sixshooter configuration

* Added SixShooter basic LED on/off support.

* Updated LED identifier numbers to align with layout identifiers (and IDs on PCB).

* Minor sixshooter documentation cleanup.

* Added sixshooter info.json file.

* Moved sixshooter custom keycodes out of keymaps and into base keyboard files, small documentation tweaks.

* Removed unnecessary boot section size definition.

* Removing CONFIG_H if/define and replacing with #pragma once.
2018-08-11 13:23:11 -07:00
e5f201edb4 Keymap: Port ergo42/biacco keymap to Helix pico (#3585)
* Port ergo42/biacco keymap to Helix pico

* Fix for review
2018-08-11 13:22:32 -07:00
8e50a472ab Make both RGB and sound work on Clueboard 66% hotswap 2018-08-11 13:19:39 -07:00
c909c4ea50 Fix Typos in echo 2018-08-11 13:18:36 -07:00
bd4ba8d180 Add WSL support to script 2018-08-11 13:18:36 -07:00
bcdd7735c8 Add error message if config not detected 2018-08-11 13:18:36 -07:00
99cb107b71 Add 32 bit MINGW support .... 2018-08-11 13:18:36 -07:00
9c8f8bd3bc Fix minor typo in qmk_install.sh for MSYS/MINGW64 detection 2018-08-11 13:18:36 -07:00
98b16b3294 Comment and organize build_keyboard.mk a bit 2018-08-11 15:19:08 -04:00
85659ae5e1 add layout support to clueboard 2018-08-11 11:59:51 -07:00
2a89134d8e add some of my default layouts for the clueboard I got 2018-08-11 11:59:51 -07:00
3eabd7946e Split Common: Serial Backlight LED fix (#3586) 2018-08-11 11:10:23 -07:00
fd0bd29a0a Keymap: adding my personal userspace to QMK master (#3605)
* Adding my personal planck keymap

* Adding readme.md to my keymap

* Create my userspace

add users/ishtob/

* Moved macros off keymap

macros now exsists in my userspace, moved them off keyboard specific keymaps

* Create my userspace

add users/ishtob/

* rebase from main QMK repo
2018-08-10 08:30:21 -07:00
feb5e4aaeb Keyboard: Helix serial improvements (#3608)
* add change_reciver2sender()/change_sender2reciver()

This is a change to improve readability.

* txled, rxled off in matrix_init()

* add serial_send_packet() / serial_recive_packet()

This is a change to reduce object size.

* add serial_low() at ISR() top

* add __attribute__((always_inline)) to some functions

* modify serial_send_packet()/serial_recive_packet()

A little, object size reduction.
A little, speedup.

* add debug code to helix/serial.c

* Adjust sampling timing of serial signal being received

* add split_scomm.c/split_scomm.h and change serial.c/serial.h

serial.c was divided into 2 layers, split_scom.c and serial.c.
The upper layer split_scomm.c is called from matrix.c.
The lower layer serial.c accesses the hardware.

* add split_scomm.c/split_scomm.h into helix/rev1

* reduce object size helix/rev2/matrix.c

* remove checksum check, add parity check

* force occur parity error for test

* parity test ok. remove test code

* change some comment & add skip code when buffer_size == 0

* serial.c: multiple types of transaction support

Add 4 bits transaction-type field at packet top.
Select Transaction Descriptor Table entry by transaction-type.

* helix serial master-slave transaction optimize

Using multi-type transaction feature of serial.c, communication contents between master slaves were optimized.

* add debug code for retry

* add comment into each config.h

* fix ISR status drop

* add a debug macro 'debug_retry_chg()'

* reduce led_test size

* remove debug code from helix/serial.c and etc.

* helix:five_rows change TAPPING_TERM value 140

* Improved compatibility with let's split of serial.c. Finish helix/serial.c improvement.

- The difference with the original let's split's serial.c
  - It's high-speed about 4 times.
  - Stable bi-directional data transfer. (Helix need master to slave transfer)
  - serial.h was divided 2 files, serial_config.h and sereial.h
  - With multiple types of transaction support, communication contents can be optimized. (NEW flexible API)

- USE OLD Simple APIs (compatible with let's split serial.c)
  - files :
    - serial_config.h -- hardware configuration (need include by config.h)
    - serial.c/serial.h -- serial communication

- USE NEW flexible APIs. (Support multi-type transaction function.)
  serial.c was divided into 2 layers, split_scom.c and serial.c.
  The upper layer split_scomm.c is called from matrix.c.
  The lower layer serial.c accesses the hardware.
  - files
    - split_scomm.c -- communication buffer is defined in here. call by matrix.c.
    - split_scomm.h -- buffer size is defined in here. include by matrix.c, split_util.c
    - serial_config.h -- hardware configuration (need include by config.h)
      To use the NEW API, specify #define SERIAL_USE_MULTI_TRANSACTION
    - serial.c/serial.h -- serial communication lower layer

- NEW APIs for serial.c / serial.h (The lower layer)
  // Soft Serial Transaction Descriptor
  typedef struct _SSTD_t  {
      uint8_t *status;
      uint8_t initiator2target_buffer_size;
      uint8_t *initiator2target_buffer;
      uint8_t target2initiator_buffer_size;
      uint8_t *target2initiator_buffer;
  } SSTD_t;

  // initiator is transaction start side
  void soft_serial_initiator_init(SSTD_t *sstd_table);
  // target is interrupt accept side
  void soft_serial_target_init(SSTD_t *sstd_table);
  int soft_serial_transaction(int sstd_index);
  int soft_serial_get_and_clean_target_status(int sstd_index);

- NEW APIs for split_scomm.c / split_scomm.h (The upper layer)
   move from old serial.c the following buffer and functions
     serial_slave_buffer[]
     serial_master_buffer[]
     void serial_master_init(void)
     void serial_slave_init(void)
     int serial_update_buffers(void)
   define SERIAL_xxxxx_BUFFER_LENGTH move from serial_config.h to split_scomm.h
2018-08-10 08:22:09 -07:00
90d8ed6c44 Keyboard: Add Configurator support for Clueboard 66 Hotswap (#3522) 2018-08-10 08:15:11 -07:00
243764b83d Keymap: Custom L0 layout for ergodone (#3591) 2018-08-09 18:09:43 -07:00
489a922f34 Keyboard: Disable mouse keys for kbd6x (#3603) 2018-08-09 18:03:34 -07:00
1ac2dd9b63 Keymap: Spaceman Spiff layout for KBD75 (#3595)
![Keyboard Layout](https://i.imgur.com/tQLYDvu.png)

<!-- http://www.keyboard-layout-editor.com/#/gists/c1e8a15c68e4c52eed84653f21ae2d29 -->

Designed specifically to make switching back-n-forth with the Apple's MacBook Pro keyboard intuitive. Has a slight tendency toward readline/vim keybindings.

Caps locks becomes an `Esc` when pressed alone, or a `Ctrl` when pressed with another key.

Base Layer
----------

As simalar to the Apple keyboard as possible. Notiable exception is `Caps Lock`:
- `Esc` when pressed alone
- `Ctrl` when pressed with another key

Control+ Layer
--------------

Left `Ctrl` key switches to the "Control+ Layer". This layer mostly acts like a control key in most cases, with a few exceptions:

- `Ctl+` + `hjkl` are vim-style motion keys
- `Ctl+` + `p` and `Ctl+` + `n` are page up and down
- `Ctl+` + `Backspace` is forward delete

Fn Layer
--------

Audio Controls:
- `Fn` + `a` Volume Down
- `Fn` + `s` Volume Up
- `Fn` + `d` Mute

To flash this layout you need to press `Fn+Backspace`
2018-08-09 17:53:13 -07:00
98afb45a27 Keymap: Spaceman Spiff layout for the GH60 Satan (#3596)
![Keyboard Layout](https://i.imgur.com/M9glFON.png)

Designed specifically to make switching back-n-forth with the Apple's
MacBook Pro keyboard intuitive. Has a slight tendency toward
readline/vim keybindings.

Caps locks becomes an `Esc` when pressed alone, or a `Ctrl` when pressed
with another key.

Base Layer
----------

As simalar to the Apple keyboard as possible. Notiable exception is
`Caps Lock`:

- `Esc` when pressed alone
- `Ctrl` when pressed with another key

Control+ Layer
--------------

Left Ctrl key switches to the "Control+ Layer". This layer mostly acts
like a control key in most cases, with a few exceptions:

- `Ctl+` + `hjkl` are vim-style motion keys
- `Ctl+` + `p` and `Ctl+` + `n` are page up and down
- `Ctl+` + `Backspace` is forward delete

Fn Layer
--------

Audio Controls:
- `Fn` + `a` Volume Down
- `Fn` + `s` Volume Up
- `Fn` + `d` Mute

To flash this layout you need to press `Fn+Backspace`
2018-08-09 17:52:35 -07:00
83da38c5e4 Keymap: Update cache22 default keymap (#3597)
- requested by rockydbull
2018-08-09 17:50:09 -07:00
ccfe60eb57 Update ps2avrgb readme (#3599)
* give ps2avrgb a specific readme

* add homebrew and crosspack avr step

* update readme of all ps2avrgb boards to reflect the new template
2018-08-09 17:45:43 -07:00
435e9b7bdb RGB Driver Documentation Update (#3601)
- Minor formating in rgb matrix page
- Added a short discription for is31fl3731 in drivers page
2018-08-09 17:41:48 -07:00
925b65b7d0 Update message.mk (#3602)
Fixed typo
2018-08-09 17:41:07 -07:00
619b5d1e6d Keymap: add like jis(iso) layout keymap for crkbd (#3562)
* add like jis(iso) layout keymap for crkbd

* Modified code by review.
2018-08-07 21:05:35 -07:00
69fef83b0e Keyboard: Adds Fleuron v1.0 keyboard (#3571)
* Adds Fleuron keyboard directory and default layout

* Adds Fleuron keyboard directory and default layout

* adds double zero macro, and updates to the new macro methodology

* adds raise and lower layers

* removes makefile from default layout, turns off mousekey, console, and command in rules.mk

* makes upper right key a bksp in default layout, adds .json layout file

* updates to default layout

* tweak default layout jusabit

* fix raise and lower switch case, and scoot a few keycodes around

* make changes for PR #3571

* fixing erros for PR #3571

* adds Dollartacos first custom keymap

* fixes for PR #3571
2018-08-07 17:47:49 -07:00
fd085837e1 fix swap_hands keycodes in documentation (#3588) 2018-08-07 14:20:29 -07:00
d8e6ada5d7 Improve RGB lighting documentation (#3580) 2018-08-07 09:07:19 -07:00
16d6fd6e8e Keyboard: Add Catch 22 Hotswap Macropad to QMK (#3576)
* Initial Commit of catch22 macropad by rockydbull

* Add configurator info.json

* Use macros

* Use pragma once

* Use CA22 as product id

* Clean up readme

* Use the layer define value

* Feedback from @drashna
2018-08-06 08:40:00 -07:00
2b0f5d3bea Keyboard: Remap layout to match the actual keys sent from the tada68 board. (#3483)
* Remap layout to match the actual keys sent from board.
Fixes #3480

* Remap layer 1
2018-08-06 08:37:46 -07:00
0c4e0a2097 Keyboard: KBD6x Support (#3560)
* initial commit

* get the matrix correct

* make my name be known

* add rgblight enable

* add a default keymap

* Add QMK Configurator support for the base layout

* add name here too

* fix up readme

* remove set user from keymap

* use led_set_kb as per drashna's comments on PR
2018-08-06 08:20:19 -07:00
f6ec2ce201 Update Shifted keycodes docs (#3575) 2018-08-05 08:55:53 -07:00
0346bc2c5b Keymap: XD75 keymap (#3553)
* cloned colinta as base

* switched to default base. started customising

* minor changes to layout

* added mouse keys

* minor tweaks to layout and mouse speed

* updated readme

* tweaked layout

- added middle fn keys
- moved rgb controls to fn layer middle
- added special keys to fn layer right

* moved scroll buttons as to not interfere with lshift

* turned on backlight

* fixed backlight

* changed user keycodes to differentiate

* changed folder name to lowercase

* updated readme

* stop processing after custom keycode

* edits to suit new standards

* added layer indicator using gp100 and gp103
2018-08-05 08:55:17 -07:00
e818b29879 Update FAQ section on Apple Fn (#3574) 2018-08-05 08:51:33 -07:00
9a4db7a860 Keymap: Adds zen layout for 333fred (#3563)
* Initial commit of zen keymap

* Added RGB control for my zen

* Fixed ergodox layout.

* Reduce brightness.

* PR feedback.
2018-08-05 08:42:16 -07:00
a6e1cb08c6 Keymap: frogger keymap (#3570)
* adding my keymap

A bit of pok3r, and a bit of some other things.

* Adding a readme

* undoing changes to gitignore

* adding a bit of commentary
2018-08-04 14:02:03 -07:00
a2b4178245 Make sure 'shutdown_user' is called 2018-08-04 16:49:57 -04:00
ef5b161bb5 Fix Audio code when resetting keyboard
I incorrectly disabled a bunch of code that shouldn't have been disabled.  This should only disable music mode stuff, not general audio.
2018-08-04 16:49:57 -04:00
23d68d0ba1 Make sure Planck light calls user suspend functions (#3568)
* Make sure Planck light calls user suspend functions

* Add suspend.h include to quantum.h for kb/user function compatibility
2018-08-04 16:49:10 -04:00
435a1202e7 More improvements to keycode docs (#3567)
* Reorder keycode list docs according to HID usage

* Add missing keycodes/descriptions/aliases
2018-08-04 09:09:22 -07:00
3e8f272873 Keyboard: LED fixes for Kinesis Stapelberg controller, and keymap changes (#3564)
* Rules for vitamins_included

Added a section to disable RGB underglow for the Let's Split
   Vitamins Included board.

* fixing ortho_4x12 configs

* Using upstream/master version instead

* Additions and Corrections

Corrected the Kinesis/Stapelberg's .c file to allow LEDs to work
Removed excess cruft from my Kinesis keymap to reflect this change
Other minor tweaks and adjustments to my ortho_4x12 and 5x12 layouts

* Updated readme
2018-08-04 09:01:26 -07:00
f8a915a2db Keymap: dz60 macos arrow rev2 (#3561)
* dz60/macos_arrow: move the eject key on esc to leave right cmd+bksp for move to trash

* dz60/macos_arrow: move the reset key on the media layer

This avoids accidental activation.

* dz60/macos_arrow: disable LEDs
2018-08-04 08:50:17 -07:00
1213 changed files with 113103 additions and 8650 deletions

View File

@ -578,7 +578,7 @@ lib/%:
git-submodule:
git submodule sync --recursive
git submodule update --init --recursive
git submodule update --init --recursive --progress
ifdef SKIP_VERSION
SKIP_GIT := yes

View File

@ -1,3 +1,9 @@
# Determine what keyboard we are building and setup the build environment.
#
# We support folders up to 5 levels deep below `keyboards/`. This file is
# responsible for determining which folder is being used and doing the
# corresponding environment setup.
ifndef VERBOSE
.SILENT:
endif
@ -6,26 +12,15 @@ endif
include common.mk
# 5/4/3/2/1
KEYBOARD_FOLDER_PATH_1 := $(KEYBOARD)
KEYBOARD_FOLDER_PATH_2 := $(patsubst %/,%,$(dir $(KEYBOARD_FOLDER_PATH_1)))
KEYBOARD_FOLDER_PATH_3 := $(patsubst %/,%,$(dir $(KEYBOARD_FOLDER_PATH_2)))
KEYBOARD_FOLDER_PATH_4 := $(patsubst %/,%,$(dir $(KEYBOARD_FOLDER_PATH_3)))
KEYBOARD_FOLDER_PATH_5 := $(patsubst %/,%,$(dir $(KEYBOARD_FOLDER_PATH_4)))
KEYBOARD_FOLDER_1 := $(notdir $(KEYBOARD_FOLDER_PATH_1))
KEYBOARD_FOLDER_2 := $(notdir $(KEYBOARD_FOLDER_PATH_2))
KEYBOARD_FOLDER_3 := $(notdir $(KEYBOARD_FOLDER_PATH_3))
KEYBOARD_FOLDER_4 := $(notdir $(KEYBOARD_FOLDER_PATH_4))
KEYBOARD_FOLDER_5 := $(notdir $(KEYBOARD_FOLDER_PATH_5))
# Set the filename for the final firmware binary
KEYBOARD_FILESAFE := $(subst /,_,$(KEYBOARD))
TARGET ?= $(KEYBOARD_FILESAFE)_$(KEYMAP)
KEYBOARD_OUTPUT := $(BUILD_DIR)/obj_$(KEYBOARD_FILESAFE)
# Force expansion
TARGET := $(TARGET)
# For split boards we need to set a master half.
MASTER ?= left
ifdef master
MASTER = $(master)
@ -39,35 +34,58 @@ $(error MASTER does not have a valid value(left/right))
endif
endif
# Determine which subfolders exist.
KEYBOARD_FOLDER_PATH_1 := $(KEYBOARD)
KEYBOARD_FOLDER_PATH_2 := $(patsubst %/,%,$(dir $(KEYBOARD_FOLDER_PATH_1)))
KEYBOARD_FOLDER_PATH_3 := $(patsubst %/,%,$(dir $(KEYBOARD_FOLDER_PATH_2)))
KEYBOARD_FOLDER_PATH_4 := $(patsubst %/,%,$(dir $(KEYBOARD_FOLDER_PATH_3)))
KEYBOARD_FOLDER_PATH_5 := $(patsubst %/,%,$(dir $(KEYBOARD_FOLDER_PATH_4)))
KEYBOARD_FOLDER_1 := $(notdir $(KEYBOARD_FOLDER_PATH_1))
KEYBOARD_FOLDER_2 := $(notdir $(KEYBOARD_FOLDER_PATH_2))
KEYBOARD_FOLDER_3 := $(notdir $(KEYBOARD_FOLDER_PATH_3))
KEYBOARD_FOLDER_4 := $(notdir $(KEYBOARD_FOLDER_PATH_4))
KEYBOARD_FOLDER_5 := $(notdir $(KEYBOARD_FOLDER_PATH_5))
KEYBOARD_PATHS :=
KEYBOARD_PATH_1 := keyboards/$(KEYBOARD_FOLDER_PATH_1)
KEYBOARD_PATH_2 := keyboards/$(KEYBOARD_FOLDER_PATH_2)
KEYBOARD_PATH_3 := keyboards/$(KEYBOARD_FOLDER_PATH_3)
KEYBOARD_PATH_4 := keyboards/$(KEYBOARD_FOLDER_PATH_4)
KEYBOARD_PATH_5 := keyboards/$(KEYBOARD_FOLDER_PATH_5)
ifneq ("$(wildcard $(KEYBOARD_PATH_5)/rules.mk)","")
ifneq ("$(wildcard $(KEYBOARD_PATH_5)/)","")
KEYBOARD_PATHS += $(KEYBOARD_PATH_5)
endif
ifneq ("$(wildcard $(KEYBOARD_PATH_4)/)","")
KEYBOARD_PATHS += $(KEYBOARD_PATH_4)
endif
ifneq ("$(wildcard $(KEYBOARD_PATH_3)/)","")
KEYBOARD_PATHS += $(KEYBOARD_PATH_3)
endif
ifneq ("$(wildcard $(KEYBOARD_PATH_2)/)","")
KEYBOARD_PATHS += $(KEYBOARD_PATH_2)
endif
ifneq ("$(wildcard $(KEYBOARD_PATH_1)/)","")
KEYBOARD_PATHS += $(KEYBOARD_PATH_1)
endif
# Pull in rules.mk files from all our subfolders
ifneq ("$(wildcard $(KEYBOARD_PATH_5)/rules.mk)","")
include $(KEYBOARD_PATH_5)/rules.mk
endif
ifneq ("$(wildcard $(KEYBOARD_PATH_4)/rules.mk)","")
KEYBOARD_PATHS += $(KEYBOARD_PATH_4)
include $(KEYBOARD_PATH_4)/rules.mk
endif
ifneq ("$(wildcard $(KEYBOARD_PATH_3)/rules.mk)","")
KEYBOARD_PATHS += $(KEYBOARD_PATH_3)
include $(KEYBOARD_PATH_3)/rules.mk
endif
ifneq ("$(wildcard $(KEYBOARD_PATH_2)/rules.mk)","")
KEYBOARD_PATHS += $(KEYBOARD_PATH_2)
include $(KEYBOARD_PATH_2)/rules.mk
endif
ifneq ("$(wildcard $(KEYBOARD_PATH_1)/rules.mk)","")
KEYBOARD_PATHS += $(KEYBOARD_PATH_1)
include $(KEYBOARD_PATH_1)/rules.mk
endif
# Find all the C source files to be compiled in subfolders.
KEYBOARD_SRC :=
KEYBOARD_C_1 := $(KEYBOARD_PATH_1)/$(KEYBOARD_FOLDER_1).c
@ -95,6 +113,15 @@ endif
OPT_DEFS += -DKEYBOARD_$(KEYBOARD_FILESAFE)
# Setup the define for QMK_KEYBOARD_H. This is used inside of keymaps so
# that the same keymap may be used on multiple keyboards.
#
# We grab the most top-level include file that we can. That file should
# use #ifdef statements to include all the neccesary subfolder includes,
# as described here:
#
# https://docs.qmk.fm/#/feature_layouts?id=tips-for-making-layouts-keyboard-agnostic
#
ifneq ("$(wildcard $(KEYBOARD_PATH_1)/$(KEYBOARD_FOLDER_1).h)","")
QMK_KEYBOARD_H = $(KEYBOARD_FOLDER_1).h
endif
@ -111,13 +138,18 @@ ifneq ("$(wildcard $(KEYBOARD_PATH_5)/$(KEYBOARD_FOLDER_5).h)","")
QMK_KEYBOARD_H = $(KEYBOARD_FOLDER_5).h
endif
# We can assume a ChibiOS target When MCU_FAMILY is defined , since it's not used for LUFA
# Determine and set parameters based on the keyboard's processor family.
# We can assume a ChibiOS target When MCU_FAMILY is defined since it's
# not used for LUFA
ifdef MCU_FAMILY
FIRMWARE_FORMAT=bin
FIRMWARE_FORMAT?=bin
PLATFORM=CHIBIOS
else ifdef ARM_ATSAM
PLATFORM=ARM_ATSAM
FIRMWARE_FORMAT=bin
else
PLATFORM=AVR
FIRMWARE_FORMAT=hex
FIRMWARE_FORMAT?=hex
endif
ifeq ($(PLATFORM),CHIBIOS)
@ -148,6 +180,7 @@ ifeq ($(PLATFORM),CHIBIOS)
endif
endif
# Find all of the config.h files and add them to our CONFIG_H define.
CONFIG_H :=
ifneq ("$(wildcard $(KEYBOARD_PATH_5)/config.h)","")
CONFIG_H += $(KEYBOARD_PATH_5)/config.h
@ -203,7 +236,7 @@ else
# this state should never be reached
endif
# User space stuff
# Userspace setup and definitions
ifeq ("$(USER_NAME)","")
USER_NAME := $(KEYMAP)
endif
@ -256,6 +289,11 @@ endif
include $(TMK_PATH)/avr.mk
endif
ifeq ($(PLATFORM),ARM_ATSAM)
include $(TMK_PATH)/arm_atsam.mk
include $(TMK_PATH)/protocol/arm_atsam.mk
endif
ifeq ($(PLATFORM),CHIBIOS)
include $(TMK_PATH)/protocol/chibios.mk
endif
@ -283,11 +321,6 @@ $(KEYBOARD_OUTPUT)_CONFIG := $(PROJECT_CONFIG)
# Default target.
all: build check-size
# Change the build target to build a HEX file or a library.
build: elf cpfirmware
#build: elf hex eep lss sym
#build: lib
include $(TMK_PATH)/rules.mk

View File

@ -61,8 +61,8 @@ endif
ifeq ($(strip $(STENO_ENABLE)), yes)
OPT_DEFS += -DSTENO_ENABLE
VIRTSER_ENABLE := yes
SRC += $(QUANTUM_DIR)/process_keycode/process_steno.c
VIRTSER_ENABLE := yes
SRC += $(QUANTUM_DIR)/process_keycode/process_steno.c
endif
ifeq ($(strip $(VIRTSER_ENABLE)), yes)
@ -75,9 +75,9 @@ ifeq ($(strip $(FAUXCLICKY_ENABLE)), yes)
endif
ifeq ($(strip $(POINTING_DEVICE_ENABLE)), yes)
OPT_DEFS += -DPOINTING_DEVICE_ENABLE
OPT_DEFS += -DMOUSE_ENABLE
SRC += $(QUANTUM_DIR)/pointing_device.c
OPT_DEFS += -DPOINTING_DEVICE_ENABLE
OPT_DEFS += -DMOUSE_ENABLE
SRC += $(QUANTUM_DIR)/pointing_device.c
endif
ifeq ($(strip $(UCIS_ENABLE)), yes)
@ -110,12 +110,14 @@ ifeq ($(strip $(RGBLIGHT_ENABLE)), yes)
ifeq ($(strip $(RGBLIGHT_CUSTOM_DRIVER)), yes)
OPT_DEFS += -DRGBLIGHT_CUSTOM_DRIVER
else
SRC += ws2812.c
SRC += ws2812.c
endif
endif
ifeq ($(strip $(RGB_MATRIX_ENABLE)), yes)
OPT_DEFS += -DRGB_MATRIX_ENABLE
OPT_DEFS += -DIS31FL3731
COMMON_VPATH += $(DRIVER_PATH)/issi
SRC += is31fl3731.c
SRC += i2c_master.c
SRC += $(QUANTUM_DIR)/color.c
@ -123,6 +125,28 @@ ifeq ($(strip $(RGB_MATRIX_ENABLE)), yes)
CIE1931_CURVE = yes
endif
ifeq ($(strip $(RGB_MATRIX_ENABLE)), IS31FL3731)
OPT_DEFS += -DRGB_MATRIX_ENABLE
OPT_DEFS += -DIS31FL3731
COMMON_VPATH += $(DRIVER_PATH)/issi
SRC += is31fl3731.c
SRC += i2c_master.c
SRC += $(QUANTUM_DIR)/color.c
SRC += $(QUANTUM_DIR)/rgb_matrix.c
CIE1931_CURVE = yes
endif
ifeq ($(strip $(RGB_MATRIX_ENABLE)), IS31FL3733)
OPT_DEFS += -DRGB_MATRIX_ENABLE
OPT_DEFS += -DIS31FL3733
COMMON_VPATH += $(DRIVER_PATH)/issi
SRC += is31fl3733.c
SRC += i2c_master.c
SRC += $(QUANTUM_DIR)/color.c
SRC += $(QUANTUM_DIR)/rgb_matrix.c
CIE1931_CURVE = yes
endif
ifeq ($(strip $(TAP_DANCE_ENABLE)), yes)
OPT_DEFS += -DTAP_DANCE_ENABLE
SRC += $(QUANTUM_DIR)/process_keycode/process_tap_dance.c
@ -169,7 +193,7 @@ ifeq ($(strip $(BACKLIGHT_ENABLE)), yes)
ifeq ($(strip $(VISUALIZER_ENABLE)), yes)
CIE1931_CURVE = yes
endif
ifeq ($(strip $(BACKLIGHT_CUSTOM_DRIVER)), yes)
ifeq ($(strip $(BACKLIGHT_CUSTOM_DRIVER)), yes)
OPT_DEFS += -DBACKLIGHT_CUSTOM_DRIVER
endif
endif
@ -200,7 +224,7 @@ endif
ifeq ($(strip $(HD44780_ENABLE)), yes)
SRC += drivers/avr/hd44780.c
OPT_DEFS += -DHD44780_ENABLE
OPT_DEFS += -DHD44780_ENABLE
endif
QUANTUM_SRC:= \

View File

@ -1,36 +1,51 @@
* [Getting Started](README.md)
* [QMK Introduction](getting_started_introduction.md)
* [Install Build Tools](getting_started_build_tools.md)
* Alternative: [Vagrant Guide](getting_started_vagrant.md)
* [Build/Compile Instructions](getting_started_make_guide.md)
* [Flashing Firmware](flashing.md)
* [Contributing to QMK](contributing.md)
* [How to Use Github](getting_started_github.md)
* [Getting Help](getting_started_getting_help.md)
* [Complete Newbs Guide](newbs.md)
* [Getting Started](newbs_getting_started.md)
* [Building Your First Firmware](newbs_building_firmware.md)
* [Flashing Firmware](newbs_flashing.md)
* [Testing and Debugging](newbs_testing_debugging.md)
* [QMK Basics](README.md)
* [QMK Introduction](getting_started_introduction.md)
* [Contributing to QMK](contributing.md)
* [How to Use Github](getting_started_github.md)
* [Getting Help](getting_started_getting_help.md)
* [FAQ](faq.md)
* [General FAQ](faq_general.md)
* [Build/Compile QMK](faq_build.md)
* [Debugging/Troubleshooting QMK](faq_debug.md)
* [Keymap](faq_keymap.md)
* Detailed Guides
* [Install Build Tools](getting_started_build_tools.md)
* [Vagrant Guide](getting_started_vagrant.md)
* [Build/Compile Instructions](getting_started_make_guide.md)
* [Flashing Firmware](flashing.md)
* [Customizing Functionality](custom_quantum_functions.md)
* [Keymap Overview](keymap.md)
* [Hardware](hardware.md)
* [Keyboard Guidelines](hardware_keyboard_guidelines.md)
* [AVR Processors](hardware_avr.md)
* ARM Processors (TBD)
* [Drivers](hardware_drivers.md)
* Reference
* [Keyboard Guidelines](hardware_keyboard_guidelines.md)
* [Config Options](config_options.md)
* [Keycodes](keycodes.md)
* [Documentation Best Practices](documentation_best_practices.md)
* [Documentation Templates](documentation_templates.md)
* [Glossary](reference_glossary.md)
* [Unit Testing](unit_testing.md)
* [Useful Functions](ref_functions.md)
* [Features](features.md)
* [Basic Keycodes](keycodes_basic.md)
* [Quantum Keycodes](quantum_keycodes.md)
* [Advanced Keycodes](feature_advanced_keycodes.md)
* [Audio](feature_audio.md)
* [Auto Shift](feature_auto_shift.md)
* [Backlight](feature_backlight.md)
* [Bluetooth](feature_bluetooth.md)
* [Bootmagic](feature_bootmagic.md)
* [Command](feature_command.md)
* [Dynamic Macros](feature_dynamic_macros.md)
@ -40,6 +55,7 @@
* [Leader Key](feature_leader_key.md)
* [Macros](feature_macros.md)
* [Mouse Keys](feature_mouse_keys.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)
@ -53,36 +69,8 @@
* [Thermal Printer](feature_thermal_printer.md)
* [Unicode](feature_unicode.md)
* [Userspace](feature_userspace.md)
* [Keycodes](keycodes.md)
* [Basic](keycodes_basic.md)
* [Quantum](quantum_keycodes.md)
* [Audio](feature_audio.md#audio-keycodes)
* [Backlight](feature_backlight.md#backlight-keycodes)
* [Bluetooth](feature_bluetooth.md#bluetooth-keycodes)
* [Bootmagic](feature_bootmagic.md#bootmagic-keycodes)
* [Layer Switching](feature_advanced_keycodes.md#switching-and-toggling-layers)
* [Mod+Key](feature_advanced_keycodes.md#modifier-keys)
* [Mod Tap](feature_advanced_keycodes.md#mod-tap)
* [Mouse Keys](feature_mouse_keys.md#mapping-mouse-actions-to-keyboard-keys)
* [One Shot Keys](feature_advanced_keycodes.md#one-shot-keys)
* [RGB Light](feature_rgblight.md#rgblight-keycodes)
* [RGB Matrix](feature_rgb_matrix.md#keycodes)
* [Shifted Keys](feature_advanced_keycodes.md#shifted-keycodes)
* [Stenography](feature_stenography.md#keycode-reference)
* [Swap Hands](feature_swap_hands.md#swap-keycodes)
* [Thermal Printer](feature_thermal_printer.md#thermal-printer-keycodes)
* [US ANSI Shifted Keys](keycodes_us_ansi_shifted.md)
* Reference
* [Config Options](config_options.md)
* [Customizing Functionality](custom_quantum_functions.md)
* [Documentation Best Practices](documentation_best_practices.md)
* [Documentation Templates](documentation_templates.md)
* [Glossary](reference_glossary.md)
* [Keymap Overview](keymap.md)
* [Unit Testing](unit_testing.md)
* For Makers and Modders
* [Hand Wiring Guide](hand_wire.md)
* [ISP Flashing Guide](isp_flashing_guide.md)

View File

@ -1,36 +1,51 @@
* [Getting Started](README.md)
* [QMK Introduction](getting_started_introduction.md)
* [Install Build Tools](getting_started_build_tools.md)
* Alternative: [Vagrant Guide](getting_started_vagrant.md)
* [Build/Compile Instructions](getting_started_make_guide.md)
* [Flashing Firmware](flashing.md)
* [Contributing to QMK](contributing.md)
* [How to Use Github](getting_started_github.md)
* [Getting Help](getting_started_getting_help.md)
* [Complete Newbs Guide](newbs.md)
* [Getting Started](newbs_getting_started.md)
* [Building Your First Firmware](newbs_building_firmware.md)
* [Flashing Firmware](newbs_flashing.md)
* [Testing and Debugging](newbs_testing_debugging.md)
* [QMK Basics](README.md)
* [QMK Introduction](getting_started_introduction.md)
* [Contributing to QMK](contributing.md)
* [How to Use Github](getting_started_github.md)
* [Getting Help](getting_started_getting_help.md)
* [FAQ](faq.md)
* [General FAQ](faq_general.md)
* [Build/Compile QMK](faq_build.md)
* [Debugging/Troubleshooting QMK](faq_debug.md)
* [Keymap](faq_keymap.md)
* Detailed Guides
* [Install Build Tools](getting_started_build_tools.md)
* [Vagrant Guide](getting_started_vagrant.md)
* [Build/Compile Instructions](getting_started_make_guide.md)
* [Flashing Firmware](flashing.md)
* [Customizing Functionality](custom_quantum_functions.md)
* [Keymap Overview](keymap.md)
* [Hardware](hardware.md)
* [Keyboard Guidelines](hardware_keyboard_guidelines.md)
* [AVR Processors](hardware_avr.md)
* ARM Processors (TBD)
* [Drivers](hardware_drivers.md)
* Reference
* [Keyboard Guidelines](hardware_keyboard_guidelines.md)
* [Config Options](config_options.md)
* [Keycodes](keycodes.md)
* [Documentation Best Practices](documentation_best_practices.md)
* [Documentation Templates](documentation_templates.md)
* [Glossary](reference_glossary.md)
* [Unit Testing](unit_testing.md)
* [Useful Functions](ref_functions.md)
* [Features](features.md)
* [Basic Keycodes](keycodes_basic.md)
* [Quantum Keycodes](quantum_keycodes.md)
* [Advanced Keycodes](feature_advanced_keycodes.md)
* [Audio](feature_audio.md)
* [Auto Shift](feature_auto_shift.md)
* [Backlight](feature_backlight.md)
* [Bluetooth](feature_bluetooth.md)
* [Bootmagic](feature_bootmagic.md)
* [Command](feature_command.md)
* [Dynamic Macros](feature_dynamic_macros.md)
@ -40,6 +55,7 @@
* [Leader Key](feature_leader_key.md)
* [Macros](feature_macros.md)
* [Mouse Keys](feature_mouse_keys.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)
@ -53,36 +69,8 @@
* [Thermal Printer](feature_thermal_printer.md)
* [Unicode](feature_unicode.md)
* [Userspace](feature_userspace.md)
* [Keycodes](keycodes.md)
* [Basic](keycodes_basic.md)
* [Quantum](quantum_keycodes.md)
* [Audio](feature_audio.md#audio-keycodes)
* [Backlight](feature_backlight.md#backlight-keycodes)
* [Bluetooth](feature_bluetooth.md#bluetooth-keycodes)
* [Bootmagic](feature_bootmagic.md#bootmagic-keycodes)
* [Layer Switching](feature_advanced_keycodes.md#switching-and-toggling-layers)
* [Mod+Key](feature_advanced_keycodes.md#modifier-keys)
* [Mod Tap](feature_advanced_keycodes.md#mod-tap)
* [Mouse Keys](feature_mouse_keys.md#mapping-mouse-actions-to-keyboard-keys)
* [One Shot Keys](feature_advanced_keycodes.md#one-shot-keys)
* [RGB Light](feature_rgblight.md#rgblight-keycodes)
* [RGB Matrix](feature_rgb_matrix.md#keycodes)
* [Shifted Keys](feature_advanced_keycodes.md#shifted-keycodes)
* [Stenography](feature_stenography.md#keycode-reference)
* [Swap Hands](feature_swap_hands.md#swap-keycodes)
* [Thermal Printer](feature_thermal_printer.md#thermal-printer-keycodes)
* [US ANSI Shifted Keys](keycodes_us_ansi_shifted.md)
* Reference
* [Config Options](config_options.md)
* [Customizing Functionality](custom_quantum_functions.md)
* [Documentation Best Practices](documentation_best_practices.md)
* [Documentation Templates](documentation_templates.md)
* [Glossary](reference_glossary.md)
* [Keymap Overview](keymap.md)
* [Unit Testing](unit_testing.md)
* For Makers and Modders
* [Hand Wiring Guide](hand_wire.md)
* [ISP Flashing Guide](isp_flashing_guide.md)

View File

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

View File

@ -199,6 +199,8 @@ This is a [make](https://www.gnu.org/software/make/manual/make.html) file that i
* `DEFAULT_FOLDER`
* Used to specify a default folder when a keyboard has more than one sub-folder.
* `FIRMWARE_FORMAT`
* Defines which format (bin, hex) is copied to the root `qmk_firmware` folder after building.
* `SRC`
* Used to add files to the compilation/linking list.
* `LAYOUTS`
@ -246,3 +248,7 @@ Use these to enable or disable building certain features. The more you have enab
* Enable Bluetooth with the Adafruit EZ-Key HID
* `SPLIT_KEYBOARD`
* 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
* `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.

View File

@ -11,8 +11,8 @@ Keycodes are actually defined in [common/keycode.h](https://github.com/qmk/qmk_f
There are 3 standard keyboard layouts in use around the world- ANSI, ISO, and JIS. North America primarily uses ANSI, Europe and Africa primarily use ISO, and Japan uses JIS. Regions not mentioned typically use either ANSI or ISO. The keycodes corresponding to these layouts are shown here:
<!-- Source for this image: http://www.keyboard-layout-editor.com/#/gists/9ce023dc6caadc0cf11c88c782350a8c -->
![Keyboard Layout Image](https://i.imgur.com/45m4mRf.png)
<!-- Source for this image: http://www.keyboard-layout-editor.com/#/gists/070a530eedaed36a2d77f3f6fd455677 -->
![Keyboard Layout Image](https://i.imgur.com/gvlNUpQ.png)
## Some Of My Keys Are Swapped Or Not Working
@ -34,12 +34,11 @@ See [issue #168](https://github.com/tmk/tmk_keyboard/issues/168) and
* http://en.wikipedia.org/wiki/Magic_SysRq_key
* http://en.wikipedia.org/wiki/System_request
## Power Key Doesn't Work
Use `KC_PWR` instead of `KC_POWER` or vice versa.
* `KC_PWR` works with Windows and Linux, not with OSX.
* `KC_POWER` works with OSX and Linux, not with Windows.
## Power Keys Aren't Working
More info: http://geekhack.org/index.php?topic=14290.msg1327264#msg1327264
Somewhat confusingly, there are two "Power" keycodes in QMK: `KC_POWER` in the Keyboard/Keypad HID usage page, and `KC_SYSTEM_POWER` (or `KC_PWR`) in the Consumer page.
The former is only recognized on macOS, while the latter, `KC_SLEP` and `KC_WAKE` are supported by all three major operating systems, so it is recommended to use those instead. Under Windows, these keys take effect immediately, however on macOS they must be held down until a dialog appears.
## One Shot Modifier
Solves my personal 'the' problem. I often got 'the' or 'THe' wrongly instead of 'The'. One Shot Shift mitigates this for me.
@ -87,14 +86,14 @@ On **Xorg** you can use `compose` key, instead.
And see this for **Unicode** input.
* http://en.wikipedia.org/wiki/Unicode_input
## `Fn` Key on macOS
## Apple/Mac Keyboard `Fn`
Not supported.
Unlike most Fn keys, the one on Apple keyboards actually has its own keycode... sort of. It takes the place of the sixth keycode in a basic 6KRO HID report -- so an Apple keyboard is in fact only 5KRO.
Apple/Mac keyboard sends keycode for Fn unlike most of other keyboards.
I think you can send Apple Fn key using Apple venter specific Page 0xff01 and usage 0x0003. But you have to change HID Report Descriptor for this, of course.
It is technically possible to get QMK to send this key. However, doing so requires modification of the report format to add the state of the Fn key.
Even worse, it is not recognized unless the keyboard's VID and PID match that of a real Apple keyboard. The legal issues that official QMK support for this feature may create mean it is unlikely to happen.
https://opensource.apple.com/source/IOHIDFamily/IOHIDFamily-606.1.7/IOHIDFamily/AppleHIDUsageTables.h
See [this issue](https://github.com/qmk/qmk_firmware/issues/2179) for detailed information.
## Media Control Keys in Mac OSX

View File

@ -1,6 +1,6 @@
# Advanced Keycodes
Your keymap can include keycodes that are more advanced than normal, for example shifted keys. This page documents the functions that are available to you.
Your keymap can include keycodes that are more advanced than normal, for example keys that switch layers or send modifiers when held, but send regular keycodes when tapped. This page documents the functions that are available to you.
### Assigning Custom Names
@ -13,9 +13,11 @@ People often define custom names using `#define`. For example:
This will allow you to use `FN_CAPS` and `ALT_TAB` in your `KEYMAP()`, keeping it more readable.
### Limits of These Aliases
### Caveats
Currently, the keycodes able to used with these functions are limited to the [Basic Keycodes](keycodes_basic.md), meaning you can't use keycodes like `KC_TILD`, or anything greater than 0xFF. For a full list of the keycodes able to be used see [Basic Keycodes](keycodes_basic.md).
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.
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.
# Switching and Toggling Layers
@ -55,85 +57,73 @@ Sometimes, you might want to switch between layers in a macro or as part of a ta
# Modifier Keys
These functions allow you to combine a mod with a keycode. When pressed the keydown for the mod will be sent first, and then *kc* will be sent. When released the keyup for *kc* will be sent and then the mod will be sent.
These allow you to combine a modifier with a keycode. When pressed, the keydown event for the modifier, then `kc` will be sent. On release, the keyup event for `kc`, then the modifier will be sent.
* `LSFT(kc)` or `S(kc)` - applies left Shift to *kc* (keycode)
* `RSFT(kc)` - applies right Shift to *kc*
* `LCTL(kc)` - applies left Control to *kc*
* `RCTL(kc)` - applies right Control to *kc*
* `LALT(kc)` - applies left Alt to *kc*
* `RALT(kc)` - applies right Alt to *kc*
* `LGUI(kc)` - applies left GUI (command/win) to *kc*
* `RGUI(kc)` - applies right GUI (command/win) to *kc*
* `HYPR(kc)` - applies Hyper (all modifiers) to *kc*
* `MEH(kc)` - applies Meh (all modifiers except Win/Cmd) to *kc*
* `LCAG(kc)` - applies CtrlAltGui to *kc*
|Key |Aliases |Description |
|----------|----------------------|----------------------------------------------------|
|`LCTL(kc)`| |Hold Left Control and press `kc` |
|`LSFT(kc)`|`S(kc)` |Hold Left Shift and press `kc` |
|`LALT(kc)`| |Hold Left Alt and press `kc` |
|`LGUI(kc)`|`LCMD(kc)`, `LWIN(kc)`|Hold Left GUI and press `kc` |
|`RCTL(kc)`| |Hold Right Control and press `kc` |
|`RSFT(kc)`| |Hold Right Shift and press `kc` |
|`RALT(kc)`| |Hold Right Alt and press `kc` |
|`RGUI(kc)`|`RCMD(kc)`, `LWIN(kc)`|Hold Right GUI and press `kc` |
|`HYPR(kc)`| |Hold Left Control, Shift, Alt and GUI and press `kc`|
|`MEH(kc)` | |Hold Left Control, Shift and Alt and press `kc` |
|`LCAG(kc)`| |Hold Left Control, Alt and GUI and press `kc` |
|`ALTG(kc)`| |Hold Right Control and Alt and press `kc` |
|`SGUI(kc)`|`SCMD(kc)`, `SWIN(kc)`|Hold Left Shift and GUI and press `kc` |
|`LCA(kc)` | |Hold Left Control and Alt and press `kc` |
You can also chain these, like this:
You can also chain them, for example `LCTL(LALT(KC_DEL))` makes a key that sends Control+Alt+Delete with a single keypress.
LALT(LCTL(KC_DEL)) -- this makes a key that sends Alt, Control, and Delete in a single keypress.
# Mod-Tap
# Shifted Keycodes
The Mod-Tap key `MT(mod, kc)` acts like a modifier when held, and a regular keycode when tapped. In other words, you can have a key that sends Escape when you tap it, but functions as a Control or Shift key when you hold it down.
The following shortcuts automatically add `LSFT()` to keycodes to get commonly used symbols.
The modifiers this keycode and `OSM()` accept are prefixed with `MOD_`, not `KC_`:
|Key |Aliases |Description |
|------------------------|------------------|-------------------|
|`KC_TILDE` |`KC_TILD` |`~` |
|`KC_EXCLAIM` |`KC_EXLM` |`!` |
|`KC_AT` | |`@` |
|`KC_HASH` | |`#` |
|`KC_DOLLAR` |`KC_DLR` |`$` |
|`KC_PERCENT` |`KC_PERC` |`%` |
|`KC_CIRCUMFLEX` |`KC_CIRC` |`^` |
|`KC_AMPERSAND` |`KC_AMPR` |`&` |
|`KC_ASTERISK` |`KC_ASTR` |`*` |
|`KC_LEFT_PAREN` |`KC_LPRN` |`(` |
|`KC_RIGHT_PAREN` |`KC_RPRN` |`)` |
|`KC_UNDERSCORE` |`KC_UNDS` |`_` |
|`KC_PLUS` | |`+` |
|`KC_LEFT_CURLY_BRACE` |`KC_LCBR` |`{` |
|`KC_RIGHT_CURLY_BRACE` |`KC_RCBR` |`}` |
|`KC_PIPE` | |<code>&#124;</code>|
|`KC_COLON` |`KC_COLN` |`:` |
|`KC_DOUBLE_QUOTE` |`KC_DQT`/`KC_DQUO`|`"` |
|`KC_LEFT_ANGLE_BRACKET` |`KC_LT`/`KC_LABK` |`<` |
|`KC_RIGHT_ANGLE_BRACKET`|`KC_GT`/`KC_RABK` |`>` |
|`KC_QUESTION` |`KC_QUES` |`?` |
|Modifier |Description |
|----------|----------------------------------------|
|`MOD_LCTL`|Left Control |
|`MOD_LSFT`|Left Shift |
|`MOD_LALT`|Left Alt |
|`MOD_LGUI`|Left GUI (Windows/Command/Meta key) |
|`MOD_RCTL`|Right Control |
|`MOD_RSFT`|Right Shift |
|`MOD_RALT`|Right Alt |
|`MOD_RGUI`|Right GUI (Windows/Command/Meta key) |
|`MOD_HYPR`|Hyper (Left Control, Shift, Alt and GUI)|
|`MOD_MEH` |Meh (Left Control, Shift, and Alt) |
# Mod Tap
You can combine these by ORing them together like so:
`MT(mod, kc)` - is *mod* (modifier key - MOD_LCTL, MOD_LSFT) when held, and *kc* when tapped. In other words, you can have a key that sends Esc (or the letter O or whatever) when you tap it, but works as a Control key or a Shift key when you hold it down.
```c
MT(MOD_LCTL | MOD_LSFT, KC_ESC)
```
These are the values you can use for the `mod` in `MT()` and `OSM()`:
This key would activate Left Control and Left Shift when held, and send Escape when tapped.
* MOD_LCTL
* MOD_LSFT
* MOD_LALT
* MOD_LGUI
* MOD_RCTL
* MOD_RSFT
* MOD_RALT
* MOD_RGUI
* MOD_HYPR
* MOD_MEH
For convenience, QMK includes some Mod-Tap shortcuts to make common combinations more compact in your keymap:
These can also be combined like `MOD_LCTL | MOD_LSFT` e.g. `MT(MOD_LCTL | MOD_LSFT, KC_ESC)` which would activate Control and Shift when held, and send Escape when tapped.
We've added shortcuts to make common modifier/tap (mod-tap) mappings more compact:
* `CTL_T(kc)` - is LCTL when held and *kc* when tapped
* `SFT_T(kc)` - is LSFT when held and *kc* when tapped
* `ALT_T(kc)` - is LALT when held and *kc* when tapped
* `ALGR_T(kc)` - is AltGr when held and *kc* when tapped
* `GUI_T(kc)` - is LGUI when held and *kc* when tapped
* `ALL_T(kc)` - is Hyper (all mods) when held and *kc* when tapped. To read more about what you can do with a Hyper key, see [this blog post by Brett Terpstra](http://brettterpstra.com/2012/12/08/a-useful-caps-lock-key/)
* `LCAG_T(kc)` - is CtrlAltGui when held and *kc* when tapped
* `MEH_T(kc)` - is like Hyper, but not as cool -- does not include the Cmd/Win key, so just sends Alt+Ctrl+Shift.
?> Due to the way that keycodes are structured, any modifiers specified as part of `kc`, such as `LCTL()` or `KC_LPRN`, will only activate when held instead of tapped.
?> Additionally, if there is at least one right-handed modifier, any other modifiers in a chain of functions will turn into their right-handed equivalents, so it is not possible to "mix and match" the two.
|Key |Aliases |Description |
|------------|---------------------------------------|-------------------------------------------------------|
|`LCTL_T(kc)`|`CTL_T(kc)` |Left Control when held, `kc` when tapped |
|`RCTL_T(kc)`| |Right Control when held, `kc` when tapped |
|`LSFT_T(kc)`|`SFT_T(kc)` |Left Shift when held, `kc` when tapped |
|`RSFT_T(kc)`| |Right Shift when held, `kc` when tapped |
|`LALT_T(kc)`|`ALT_T(kc)` |Left Alt when held, `kc` when tapped |
|`RALT_T(kc)`|`ALGR_T(kc)` |Right Alt when held, `kc` when tapped |
|`LGUI_T(kc)`|`LCMD_T(kc)`, `RWIN_T(kc)`, `GUI_T(kc)`|Left GUI when held, `kc` when tapped |
|`RGUI_T(kc)`|`RCMD_T(kc)`, `RWIN_T(kc)` |Right 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|
|`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 |
|`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/)|
|`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 |
# One Shot Keys

View File

@ -51,3 +51,22 @@ 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.
## Backlight Functions
|Function |Description |
|----------|----------------------------------------------------------|
|`backlight_toggle()` |Turn the backlight on or off |
|`backlight_step()` |Cycle through backlight levels |
|`backlight_increase()` |Increase the backlight level |
|`backlight_decrease()` |Decrease the backlight level |
|`backlight_level(x)` |Sets the backlight level to specified level |
|`get_backlight_level()`|Toggle backlight breathing |
### Backlight Breathing Functions
|Function |Description |
|----------|----------------------------------------------------------|
|`breathing_toggle()` |Turn the backlight breathing on or off |
|`breathing_enable()` |Turns on backlight breathing |
|`breathing_disable()` |Turns off backlight breathing |

View File

@ -53,6 +53,8 @@ but the `LAYOUT_<layout>` variable must be defined in `<folder>.h` as well.
## Tips for Making Layouts Keyboard-Agnostic
### Includes
Instead of using `#include "planck.h"`, you can use this line to include whatever `<keyboard>.h` (`<folder>.h` should not be included here) file that is being compiled:
#include QMK_KEYBOARD_H
@ -72,3 +74,7 @@ For example:
```
Note that the names are lowercase and match the folder/file names for the keyboard/revision exactly.
### Keymaps
In order to support both split and non-split keyboards with the same layout, you need to use the keyboard agnostic `LAYOUT_<layout name>` macro in your keymap. For instance, in order for a Let's Split and Planck to share the same layout file, you need to use `LAYOUT_ortho_4x12` instead of `LAYOUT_planck_grid` or just `{}` for a C array.

View File

@ -1,8 +1,12 @@
# RGB Matrix Lighting
## 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 = yes
RGB_MATRIX_ENABLE = IS31FL3731
Configure the hardware via your `config.h`:
@ -36,7 +40,51 @@ Define these arrays listing all the LEDs in your `<keyboard>.c`:
....
}
Where `Cx_y` is the location of the LED in the matrix defined by [the datasheet](http://www.issi.com/WW/pdf/31FL3731.pdf). The `driver` is the index of the driver you defined in your `config.h` (`0` or `1` right now).
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
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
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.
#define DRIVER_COUNT 1
#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},
....
}
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}
@ -80,7 +128,7 @@ All RGB keycodes are currently shared with the RGBLIGHT system:
These are the effects that are currently available:
enum rgb_matrix_effects {
RGB_MATRIX_SOLID_COLOR = 1,
RGB_MATRIX_SOLID_COLOR = 1,
RGB_MATRIX_ALPHAS_MODS,
RGB_MATRIX_DUAL_BEACON,
RGB_MATRIX_GRADIENT_UP_DOWN,
@ -93,7 +141,7 @@ These are the effects that are currently available:
RGB_MATRIX_RAINBOW_MOVING_CHEVRON,
RGB_MATRIX_JELLYBEAN_RAINDROPS,
#ifdef RGB_MATRIX_KEYPRESSES
RGB_MATRIX_SOLID_REACTIVE,
RGB_MATRIX_SOLID_REACTIVE,
RGB_MATRIX_SPLASH,
RGB_MATRIX_MULTISPLASH,
RGB_MATRIX_SOLID_SPLASH,
@ -107,7 +155,7 @@ These are the effects that are currently available:
Custom layer effects can be done by defining this in your `<keyboard>.c`:
void rgb_matrix_indicators_kb(void) {
// rgb_matrix_set_color(index, red, green, blue);
rgb_matrix_set_color(index, red, green, blue);
}
A similar function works in the keymap as `rgb_matrix_indicators_user`.

View File

@ -1,131 +1,46 @@
# RGB Lighting
If you've installed addressable RGB lights on your keyboard you can control them with QMK. Currently we support the following addressable LEDs on Atmel AVR processors:
QMK has the ability to control RGB LEDs attached to your keyboard. This is commonly called *underglow*, due to the LEDs often being mounted on the bottom of the keyboard, producing a nice diffused effect when combined with a translucent case.
* WS2811 and variants (WS2812, WS2812B, WS2812C, etc)
* SK6812RGBW
![Planck with RGB Underglow](https://raw.githubusercontent.com/qmk/qmk_firmware/3774a7fcdab5544fc787f4c200be05fcd417e31f/keyboards/planck/keymaps/yang/planck-with-rgb-underglow.jpg)
Some keyboards come with RGB LEDs pre-installed. Others have to have LEDs installed after the fact. See below for information on modifying your keyboard.
Some keyboards come with RGB LEDs preinstalled. Others must have them installed after the fact. See the [Hardware Modification](#hardware-modification) section for information on adding RGB lighting to your keyboard.
## Selecting Colors
Currently QMK supports the following addressable LEDs on AVR microcontrollers (however, the white LED in RGBW variants is not supported):
QMK uses Hue, Saturation, and Value to set color rather than using RGB. You can use the color wheel below to see how this works. Changing the Hue will cycle around the circle. Saturation will affect the intensity of the color, which you can see as you move from the inner part to the outer part of the wheel. Value sets the overall brightness.
* WS2811, WS2812, WS2812B, WS2812C, etc.
* SK6812, SK6812MINI, SK6805
<img src="gitbook/images/color-wheel.svg" alt="HSV Color Wheel" width="250">
These LEDs are called "addressable" because instead of using a wire per color, each LED contains a small microchip that understands a special protocol sent over a single wire. The chip passes on the remaining data to the next LED, allowing them to be chained together. In this way, you can easily control the color of the individual LEDs.
If you would like to learn more about HSV you can start with the [Wikipedia article](https://en.wikipedia.org/wiki/HSL_and_HSV).
## Usage
## Configuration
On keyboards with onboard RGB LEDs, it is usually enabled by default. If it is not working for you, check that your `rules.mk` includes the following:
Before RGB Lighting can be used you have to enable it in `rules.mk`:
RGBLIGHT_ENABLE = yes
You can configure the behavior of the RGB lighting by defining values inside `config.h`.
### Required Configuration
At minimum you have to define the pin your LED strip is connected to and the number of LEDs connected.
```c
#define RGB_DI_PIN D7 // The pin the LED strip is connected to
#define RGBLED_NUM 14 // Number of LEDs in your strip
```make
RGBLIGHT_ENABLE = yes
```
### Optional Configuration
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.
You can change the behavior of the RGB Lighting by setting these configuration values. Use `#define <Option> <Value>` in a `config.h` at the keyboard, revision, or keymap level.
|Define |Description |
|------------|---------------------------------------------|
|`RGB_DI_PIN`|The pin connected to the data pin of the LEDs|
|`RGBLED_NUM`|The number of LEDs connected |
| Option | Default Value | Description |
|--------|---------------|-------------|
| `RGBLIGHT_HUE_STEP` | 10 | How many hues you want to have available. |
| `RGBLIGHT_SAT_STEP` | 17 | How many steps of saturation you'd like. |
| `RGBLIGHT_VAL_STEP` | 17 | The number of levels of brightness you want. |
| `RGBLIGHT_LIMIT_VAL` | 255 | Limit the val of HSV to limit the maximum brightness simply. |
| `RGBLIGHT_SLEEP` | | `#define` this will shut off the lights when the host goes to sleep |
Then you should be able to use the keycodes below to change the RGB lighting to your liking.
### Color Selection
### Animations
QMK uses [Hue, Saturation, and Value](https://en.wikipedia.org/wiki/HSL_and_HSV) to select colors rather than RGB. The color wheel below demonstrates how this works.
If you have `#define RGBLIGHT_ANIMATIONS` in your `config.h` you will have a number of animation modes you can cycle through using the `RGB_MOD` key. You can also `#define` other options to tweak certain animations.
<img src="gitbook/images/color-wheel.svg" alt="HSV Color Wheel" width="250"/>
| Option | Default Value | Description |
|--------|---------------|-------------|
| `RGBLIGHT_ANIMATIONS` | | `#define` this to enable animation modes. |
| `RGBLIGHT_EFFECT_BREATHE_CENTER` | 1.85 | Used to calculate the curve for the breathing animation. Valid values 1.0-2.7. |
| `RGBLIGHT_EFFECT_BREATHE_MAX` | 255 | The maximum brightness for the breathing mode. Valid values 1-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 | Start the knight animation this many LEDs from the start of the strip. |
| `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. Specified in ms. |
| `RGBLIGHT_EFFECT_CHRISTMAS_STEP` | 2 | How many LED's to group the red/green colors by for the christmas mode. |
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.
You can also tweak the behavior of the animations by defining these consts in your `keymap.c`. These mostly affect the speed different modes animate at.
```c
// How long (in ms) to wait between animation steps for the breathing mode
const uint8_t RGBLED_BREATHING_INTERVALS[] PROGMEM = {30, 20, 10, 5};
// How long (in ms) to wait between animation steps for the rainbow mode
const uint8_t RGBLED_RAINBOW_MOOD_INTERVALS[] PROGMEM = {120, 60, 30};
// How long (in ms) to wait between animation steps for the swirl mode
const uint8_t RGBLED_RAINBOW_SWIRL_INTERVALS[] PROGMEM = {100, 50, 20};
// How long (in ms) to wait between animation steps for the snake mode
const uint8_t RGBLED_SNAKE_INTERVALS[] PROGMEM = {100, 50, 20};
// How long (in ms) to wait between animation steps for the knight modes
const uint8_t RGBLED_KNIGHT_INTERVALS[] PROGMEM = {127, 63, 31};
// These control which colors are selected for the gradient mode
const uint16_t RGBLED_GRADIENT_RANGES[] PROGMEM = {360, 240, 180, 120, 90};
```
### LED Control
Look in `rgblights.h` for all available functions, but if you want to control all or some LEDs your goto functions are:
```c
// turn all lights off (stored in EEPROM)
rgblight_disable();
// turn lights on, based on their previous state (stored in EEPROM)
rgblight_enable();
// turn all lights off (not stored in EEPROM)
rgblight_disable_noeeprom();
// turn lights on, based on their previous state (not stored in EEPROM)
rgblight_enable_noeeprom();
// where r/g/b is a number from 0..255. Turns all the LEDs to this color (ignores mode, not stored in EEPROM).
rgblight_setrgb(r, g, b);
// HSV color control - h is a value from 0..360 and s/v is a value from 0..255 (stored in EEPROM)
rgblight_sethsv(h, s, v);
// HSV color control - h is a value from 0..360 and s/v is a value from 0..255 (not stored in EEPROM)
rgblight_sethsv_noeeprom(h, s, v);
// Sets the mode, if rgb animations are enabled (stored in eeprom)
rgblight_mode(x);
// Sets the mode, if rgb animations are enabled (not stored in eeprom)
rgblight_mode_noeeprom(x);
// MODE 1, solid color
// MODE 2-5, breathing
// MODE 6-8, rainbow mood
// MODE 9-14, rainbow swirl
// MODE 15-20, snake
// MODE 21-23, knight
// MODE 24, xmas
// MODE 25-34, static rainbow
rgblight_setrgb_at(r,g,b, LED); // control a single LED. 0 <= LED < RGBLED_NUM
rgblight_sethsv_at(h,s,v, LED); // control a single LED. 0 <= LED < RGBLED_NUM
```
You can find a list of predefined colors at [`quantum/rgblight_list.h`](https://github.com/qmk/qmk_firmware/blob/master/quantum/rgblight_list.h). Free to add to this list!
## RGB Lighting Keycodes
These control the RGB Lighting functionality.
## Keycodes
|Key |Aliases |Description |
|-------------------|----------|--------------------------------------------------------------------|
@ -146,25 +61,97 @@ These control the RGB Lighting functionality.
|`RGB_MODE_KNIGHT` |`RGB_M_K` |"Knight Rider" animation mode |
|`RGB_MODE_XMAS` |`RGB_M_X` |Christmas animation mode |
|`RGB_MODE_GRADIENT`|`RGB_M_G` |Static gradient animation mode |
|`RGB_MODE_RGBTEST `|`RGB_M_T` |Red,Green,Blue test animation mode |
|`RGB_MODE_RGBTEST` |`RGB_M_T` |Red, Green, Blue test animation mode |
note: for backwards compatibility, `RGB_SMOD` is an alias for `RGB_MOD`.
?> For backwards compatibility, `RGB_SMOD` is another alias of `RGB_MOD`.
## Configuration
Your RGB lighting can be configured by placing these `#define`s in your `config.h`:
|Define |Default |Description |
|---------------------|-------------|-----------------------------------------------------------------------------|
|`RGBLIGHT_HUE_STEP` |`10` |The number of steps to cycle through the hue by |
|`RGBLIGHT_SAT_STEP` |`17` |The number of steps to increment the saturation by |
|`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|
## Animations
Not only can this lighting be whatever color you want, if `RGBLIGHT_ANIMATIONS` is defined, you also have a number of animation modes at your disposal:
|Mode |Description |
|-----|---------------------|
|1 |Solid color |
|2-5 |Solid color breathing|
|6-8 |Cycling rainbow |
|9-14 |Swirling rainbow |
|15-20|Snake |
|21-23|Knight |
|24 |Christmas |
|25-34|Static gradient |
|35 |RGB Test |
|36 |Alternating |
Check out [this video](https://youtube.com/watch?v=VKrpPAHlisY) for a demonstration.
The following options can be used to tweak the various animations:
|Define |Default |Description |
|------------------------------------|-------------|-------------------------------------------------------------------------------------|
|`RGBLIGHT_ANIMATIONS` |*Not defined*|If defined, enables 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_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 |
You can also modify the speeds that the different modes animate at:
```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};
// How long (in milliseconds) to wait between animation steps for each of the "Cycling rainbow" animations
const uint8_t RGBLED_RAINBOW_MOOD_INTERVALS[] PROGMEM = {120, 60, 30};
// How long (in milliseconds) to wait between animation steps for each of the "Swirling rainbow" animations
const uint8_t RGBLED_RAINBOW_SWIRL_INTERVALS[] PROGMEM = {100, 50, 20};
// How long (in milliseconds) to wait between animation steps for each of the "Snake" animations
const uint8_t RGBLED_SNAKE_INTERVALS[] PROGMEM = {100, 50, 20};
// How long (in milliseconds) to wait between animation steps for each of the "Knight" animations
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};
```
## 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_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)|
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!
## Hardware Modification
![Planck with RGB Underglow](https://raw.githubusercontent.com/qmk/qmk_firmware/3774a7fcdab5544fc787f4c200be05fcd417e31f/keyboards/planck/keymaps/yang/planck-with-rgb-underglow.jpg)
Here is a quick demo on Youtube (with NPKC KC60) (https://www.youtube.com/watch?v=VKrpPAHlisY).
For this mod, you need an unused pin wiring to DI of WS2812 strip. After wiring the VCC, GND, and DI, you can enable the underglow in your Makefile.
RGBLIGHT_ENABLE = yes
In order to use the underglow animation functions, you need to have `#define RGBLIGHT_ANIMATIONS` in your `config.h`.
Please add the following options into your config.h, and set them up according your hardware configuration. These settings are for the `F4` pin by default:
#define RGB_DI_PIN F4 // The pin your RGB strip is wired to
#define RGBLED_NUM 14 // Number of LEDs
You'll need to edit `RGB_DI_PIN` to the pin you have your `DI` on your RGB strip wired to.
If your keyboard lacks onboard underglow LEDs, you may often be able to solder on an RGB LED strip yourself. You will need to find an unused pin to wire to the data pin of your LED strip. Some keyboards may break out unused pins from the MCU to make soldering easier. The other two pins, VCC and GND, must also be connected to the appropriate power pins.

View File

@ -22,9 +22,9 @@ Note that the array indices are reversed same as the matrix and the values are o
|Key |Description |
|-----------|-------------------------------------------------------------------------|
|`SH_T(key)`|Sends `key` with a tap; momentary swap when held. |
|`SW_ON` |Turns on swapping and leaves it on. |
|`SW_OFF` |Turn off swapping and leaves it off. Good for returning to a known state.|
|`SW_MON` |Swaps hands when pressed, returns to normal when released (momentary). |
|`SW_MOFF` |Momentarily turns off swap. |
|`SH_ON` |Turns on swapping and leaves it on. |
|`SH_OFF` |Turn off swapping and leaves it off. Good for returning to a known state.|
|`SH_MON` |Swaps hands when pressed, returns to normal when released (momentary). |
|`SH_MOFF` |Momentarily turns off swap. |
|`SH_TG` |Toggles swap on and off with every key press. |
|`SH_TT` |Toggles with a tap; momentary when held. |

View File

@ -3,7 +3,7 @@
QMK has a staggering number of features for building your keyboard. It can take some time to understand all of them and determine which one will achieve your goal.
* [Advanced Keycodes](feature_advanced_keycodes.md) - Change layers, type shifted keys, and more. Go beyond typing simple characters.
* [Advanced Keycodes](feature_advanced_keycodes.md) - Change layers, dual-action keys, and more. Go beyond typing simple characters.
* [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.

View File

@ -25,3 +25,11 @@ You can make use of uGFX within QMK to drive character and graphic LCD's, LED ar
## WS2812 (AVR Only)
Support for WS2811/WS2812{a,b,c} LED's. For more information see the [RGB Light](feature_rgblight.md) page.
## IS31FL3731
Support for up to 2 drivers. Each driver impliments 2 charlieplex matrices to individually address LEDs using I2C. This allows up to 144 same color LEDs or 32 RGB LEDs. For more information on how to setup the driver see the [RGB Matrix](feature_rgb_matrix.md) page.
## 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.

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,31 +1,33 @@
# US ANSI Shifted Symbols
These keycodes correspond to characters that are "shifted" on a standard US ANSI keyboards. They do not have dedicated keycodes but are instead typed by holding down shift and then sending a keycode.
These keycodes correspond to characters that are "shifted" on a standard US ANSI keyboard. They do not have keycodes of their own but are simply shortcuts for `LSFT(kc)`, and as such send a Left Shift with the unshifted keycode, not the symbol itself.
It's important to remember that all of these keycodes send a left shift - this may cause unintended actions if unaccounted for. The short code is preferred in most situations.
## Caveats
## US ANSI Shifted Keycodes
Unfortunately, these keycodes cannot be used in Mod-Taps or Layer-Taps, since any modifiers specified in the keycode are ignored.
|Key |Aliases |Description |
|------------------------|------------------|-------------------|
|`KC_TILDE` |`KC_TILD` |`~` |
|`KC_EXCLAIM` |`KC_EXLM` |`!` |
|`KC_AT` | |`@` |
|`KC_HASH` | |`#` |
|`KC_DOLLAR` |`KC_DLR` |`$` |
|`KC_PERCENT` |`KC_PERC` |`%` |
|`KC_CIRCUMFLEX` |`KC_CIRC` |`^` |
|`KC_AMPERSAND` |`KC_AMPR` |`&` |
|`KC_ASTERISK` |`KC_ASTR` |`*` |
|`KC_LEFT_PAREN` |`KC_LPRN` |`(` |
|`KC_RIGHT_PAREN` |`KC_RPRN` |`)` |
|`KC_UNDERSCORE` |`KC_UNDS` |`_` |
|`KC_PLUS` | |`+` |
|`KC_LEFT_CURLY_BRACE` |`KC_LCBR` |`{` |
|`KC_RIGHT_CURLY_BRACE` |`KC_RCBR` |`}` |
|`KC_PIPE` | |<code>&#124;</code>|
|`KC_COLON` |`KC_COLN` |`:` |
|`KC_DOUBLE_QUOTE` |`KC_DQT`/`KC_DQUO`|`"` |
|`KC_LEFT_ANGLE_BRACKET` |`KC_LT`/`KC_LABK` |`<` |
|`KC_RIGHT_ANGLE_BRACKET`|`KC_GT`/`KC_RABK` |`>` |
|`KC_QUESTION` |`KC_QUES` |`?` |
## Keycodes
|Key |Aliases |Description |
|------------------------|-------------------|-------------------|
|`KC_TILDE` |`KC_TILD` |`~` |
|`KC_EXCLAIM` |`KC_EXLM` |`!` |
|`KC_AT` | |`@` |
|`KC_HASH` | |`#` |
|`KC_DOLLAR` |`KC_DLR` |`$` |
|`KC_PERCENT` |`KC_PERC` |`%` |
|`KC_CIRCUMFLEX` |`KC_CIRC` |`^` |
|`KC_AMPERSAND` |`KC_AMPR` |`&` |
|`KC_ASTERISK` |`KC_ASTR` |`*` |
|`KC_LEFT_PAREN` |`KC_LPRN` |`(` |
|`KC_RIGHT_PAREN` |`KC_RPRN` |`)` |
|`KC_UNDERSCORE` |`KC_UNDS` |`_` |
|`KC_PLUS` | |`+` |
|`KC_LEFT_CURLY_BRACE` |`KC_LCBR` |`{` |
|`KC_RIGHT_CURLY_BRACE` |`KC_RCBR` |`}` |
|`KC_PIPE` | |<code>&#124;</code>|
|`KC_COLON` |`KC_COLN` |`:` |
|`KC_DOUBLE_QUOTE` |`KC_DQUO`, `KC_DQT`|`"` |
|`KC_LEFT_ANGLE_BRACKET` |`KC_LABK`, `KC_LT` |`<` |
|`KC_RIGHT_ANGLE_BRACKET`|`KC_RABK`, `KC_GT` |`>` |
|`KC_QUESTION` |`KC_QUES` |`?` |

48
docs/ref_functions.md Normal file
View File

@ -0,0 +1,48 @@
# List of Useful Core Functions To Make Your Keyboard Better
There are a lot of hidden functions in QMK that are incredible useful, or may add a bit of functionality that you've been wanting. Functions that are specific to certain features are not included here, as those will be on their respective feature page.
## (OLKB) Tri Layers
There are actually separate functions that you can use there, depending on what you're after.
The first is the `update_tri_layer(x, y, z)` function. This function check to see if layers `x` and `y` are both on. If they are both on, then it runs on layer `z`. Otherwise, if both `x` and `y` are not both on (either only one is, or neither is), then it runs off layer `z`.
This function is useful if you want to create specific keys that have this functionality, but other layer keycodes won't do this.
The other function is `update_tri_layer_state(state, x, y, z)`. This function is meant to be called from they [`layer_state_set_*` functions](custom_quantum_functions.md#layer-change-code). This means that any time that you use a keycode to change the layer, this will be checked. So you could use `LT(layer, kc)` to change the layer and it will trigger the same layer check.
The caveat to this method is that you cannot access the `z` layer without having `x` and `y` layers on, since if you try to activate just layer `z`, it will run this code and turn off layer `z` before you could use it.
## Setting the Persistent Default Layer
Do you want to set the default layer, so that it's retained even after you unplug the board? If so, this is the function for you.
To use this, you would use `set_single_persistent_default_layer(layer)`. If you have a name defined for your layer, you can use that instead (such as _QWERTY, _DVORAK or _COLEMAK).
This will set the default layer, update the persistent settings, and play a tune if you have [Audio](feature_audio.md) enabled on your board, and the default layer sounds set.
To configure the default layer sounds, you would want to define this in your `config.h` file, like this:
```c
#define DEFAULT_LAYER_SONGS { SONG(QWERTY_SOUND), \
SONG(COLEMAK_SOUND), \
SONG(DVORAK_SOUND) \
}
```
?> There are a large number of predefined songs in [quantum/audio/song_list.h](https://github.com/qmk/qmk_firmware/blob/master/quantum/audio/song_list.h) that you can use.
## Reseting the keyboard
There is the `RESET` quantum keycode that you can use. But if you want to reset the board as part of a macro, rather than hitting a key separately, you can do that.
And to do so, add `reset_keyboard()` to your function or macro, and this will reset to bootloader.
## Wiping the EEPROM (Persistent Storage)
If you're having issues with Audio, RGB Underglow, backlighting or keys acting weird, then you can reset the EEPROM (persistent setting storage). Bootmagic is one way to do this, but if that isn't enabled, then you can use a custom macro to do so.
To wipe the EEPROM, run `eeconfig_init()` from your function or macro to reset most of the settings to default.

View File

@ -12,7 +12,7 @@ You can think of QMK as no different from any other computer program. It is star
The reason for this is the different platforms that QMK supports. The most common platform is `lufa`, which runs on AVR processors such at the atmega32u4. We also support `chibios` and `vusb`.
We'll focus on AVR processors for the moment, which use the `lufa` platform. You can find the `main()` function in [tmk_core/protocol/lufa/lufa.c](https://github.com/qmk/qmk_firmware/blob/master/tmk_core/protocol/lufa/lufa.c#L1129). If you browse through that function you'll find that it initializes any hardware that has been configured (including USB to the host) and then it starts the core part of the program with a [`while(1)`](https://github.com/qmk/qmk_firmware/blob/master/tmk_core/protocol/lufa/lufa.c#L1182). This is [The Main Loop](#the_main_loop).
We'll focus on AVR processors for the moment, which use the `lufa` platform. You can find the `main()` function in [tmk_core/protocol/lufa/lufa.c](https://github.com/qmk/qmk_firmware/blob/661ca4440cc42f3b60697e98985c44b0571ccfc1/tmk_core/protocol/lufa/lufa.c#L1019). If you browse through that function you'll find that it initializes any hardware that has been configured (including USB to the host) and then it starts the core part of the program with a [`while(1)`](https://github.com/qmk/qmk_firmware/blob/661ca4440cc42f3b60697e98985c44b0571ccfc1/tmk_core/protocol/lufa/lufa.c#L1060). This is [The Main Loop](#the-main-loop).
## The Main Loop
@ -22,7 +22,7 @@ This section of code is called "The Main Loop" because it's responsible for loop
keyboard_task();
```
This is where all the keyboard specific functionality is dispatched. The source code for `keyboard_task()` can be found in [tmk_core/common/keyboard.c](https://github.com/qmk/qmk_firmware/blob/master/tmk_core/common/keyboard.c#L154), and it is responsible for detecting changes in the matrix and turning status LED's on and off.
This is where all the keyboard specific functionality is dispatched. The source code for `keyboard_task()` can be found in [tmk_core/common/keyboard.c](https://github.com/qmk/qmk_firmware/blob/661ca4440cc42f3b60697e98985c44b0571ccfc1/tmk_core/common/keyboard.c#L206), and it is responsible for detecting changes in the matrix and turning status LED's on and off.
Within `keyboard_task()` you'll find code to handle:
@ -77,7 +77,7 @@ 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.
You can also use this macro to handle unusual matrix layouts, for example the [Clueboard rev 2](https://github.com/qmk/qmk_firmware/blob/master/keyboards/clueboard/66/rev2/rev2.h). Explaining that is outside the scope of this document.
You can also use this macro to handle unusual matrix layouts, for example the [Clueboard rev 2](https://github.com/qmk/qmk_firmware/blob/661ca4440cc42f3b60697e98985c44b0571ccfc1/keyboards/clueboard/66/rev2/rev2.h). Explaining that is outside the scope of this document.
##### Keycode Assignment
@ -129,27 +129,32 @@ Comparing against our keymap we can see that the pressed key is KC_NLCK. From he
<!-- FIXME: Magic happens between here and process_record -->
##### Process Record
The `process_record()` function itself is deceptively simple, but hidden within is a gateway to overriding functionality at various levels of QMK. The chain of events is listed below, using cluecard whenever we need to look at the keyboard/keymap level functions. Depending on options set in rule.mk or elsewhere, only a subset of the functions below will be included in final firmware.
The `process_record()` function itself is deceptively simple, but hidden within is a gateway to overriding functionality at various levels of QMK. The chain of events is described below, using cluecard whenever we need to look at the keyboard/keymap level functions.
* [`void process_record(keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/master/tmk_core/common/action.c#L128)
* [`bool process_record_quantum(keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/master/quantum/quantum.c#L140)
* [Map this record to a keycode](https://github.com/qmk/qmk_firmware/blob/master/quantum/quantum.c#L143)
* [`bool process_record_kb(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/master/keyboards/clueboard/card/card.c#L20)
* [`bool process_record_user(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/master/keyboards/clueboard/card/keymaps/default/keymap.c#L58)
* [`bool process_midi(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/master/quantum/process_keycode/process_midi.c#L102)
* [`bool process_audio(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/master/quantum/process_keycode/process_audio.c#L10)
* [`bool process_music(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/master/quantum/process_keycode/process_music.c#L69)
* [`bool process_tap_dance(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/master/quantum/process_keycode/process_tap_dance.c#L75)
* [`bool process_leader(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/master/quantum/process_keycode/process_leader.c#L32)
* [`bool process_chording(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/master/quantum/process_keycode/process_chording.c#L41)
* [`bool process_combo(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/master/quantum/process_keycode/process_combo.c#L115)
* [`bool process_unicode(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/master/quantum/process_keycode/process_unicode.c#L22)
* [`bool process_ucis(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/master/quantum/process_keycode/process_ucis.c#L91)
* [`bool process_printer(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/master/quantum/process_keycode/process_printer.c#L77)
* [`bool process_auto_shift(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/master/quantum/process_keycode/process_auto_shift.c#L47)
* [`bool process_unicode_map(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/master/quantum/process_keycode/process_unicodemap.c#L47)
* [Identify and process quantum specific keycodes](https://github.com/qmk/qmk_firmware/blob/master/quantum/quantum.c#L211)
* [`void process_record(keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/08c682c193f43e5d54df990680ae93fc2e06150a/tmk_core/common/action.c#L172)
* [`bool process_record_quantum(keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/08c682c193f43e5d54df990680ae93fc2e06150a/quantum/quantum.c#L193)
* [Map this record to a keycode](https://github.com/qmk/qmk_firmware/blob/08c682c193f43e5d54df990680ae93fc2e06150a/quantum/quantum.c#L213)
* [`void preprocess_tap_dance(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/08c682c193f43e5d54df990680ae93fc2e06150a/quantum/process_keycode/process_tap_dance.c#L115)
* [`bool process_key_lock(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/08c682c193f43e5d54df990680ae93fc2e06150a/quantum/process_keycode/process_key_lock.c#L62)
* [`bool process_clicky(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/08c682c193f43e5d54df990680ae93fc2e06150a/quantum/process_keycode/process_clicky.c#L44)
* [`bool process_record_kb(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/08c682c193f43e5d54df990680ae93fc2e06150a/keyboards/clueboard/card/card.c#L20)
* [`bool process_record_user(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/08c682c193f43e5d54df990680ae93fc2e06150a/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/fdd0f915271f79b104aa5d216566bcc3fd134e85/quantum/rgb_matrix.c#L139)
* [`bool process_midi(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/661ca4440cc42f3b60697e98985c44b0571ccfc1/quantum/process_keycode/process_midi.c#L81)
* [`bool process_audio(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/661ca4440cc42f3b60697e98985c44b0571ccfc1/quantum/process_keycode/process_audio.c#L19)
* [`bool process_steno(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/661ca4440cc42f3b60697e98985c44b0571ccfc1/quantum/process_keycode/process_steno.c#L160)
* [`bool process_music(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/661ca4440cc42f3b60697e98985c44b0571ccfc1/quantum/process_keycode/process_music.c#L114)
* [`bool process_tap_dance(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/661ca4440cc42f3b60697e98985c44b0571ccfc1/quantum/process_keycode/process_tap_dance.c#L136)
* [`bool process_leader(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/661ca4440cc42f3b60697e98985c44b0571ccfc1/quantum/process_keycode/process_leader.c#L38)
* [`bool process_chording(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/661ca4440cc42f3b60697e98985c44b0571ccfc1/quantum/process_keycode/process_chording.c#L41)
* [`bool process_combo(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/661ca4440cc42f3b60697e98985c44b0571ccfc1/quantum/process_keycode/process_combo.c#L115)
* [`bool process_unicode(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/661ca4440cc42f3b60697e98985c44b0571ccfc1/quantum/process_keycode/process_unicode.c#L22)
* [`bool process_ucis(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/661ca4440cc42f3b60697e98985c44b0571ccfc1/quantum/process_keycode/process_ucis.c#L91)
* [`bool process_printer(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/661ca4440cc42f3b60697e98985c44b0571ccfc1/quantum/process_keycode/process_printer.c#L77)
* [`bool process_auto_shift(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/661ca4440cc42f3b60697e98985c44b0571ccfc1/quantum/process_keycode/process_auto_shift.c#L94)
* [`bool process_unicode_map(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/661ca4440cc42f3b60697e98985c44b0571ccfc1/quantum/process_keycode/process_unicodemap.c#L47)
* [`bool process_terminal(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/661ca4440cc42f3b60697e98985c44b0571ccfc1/quantum/process_keycode/process_terminal.c#L264)
* [Identify and process quantum specific keycodes](https://github.com/qmk/qmk_firmware/blob/661ca4440cc42f3b60697e98985c44b0571ccfc1/quantum/quantum.c#L287)
At any step during this chain of events a function (such as `process_record_kb()`) can `return false` to halt all further processing.

104
drivers/arm/i2c_master.c Normal file
View File

@ -0,0 +1,104 @@
/* 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/>.
*/
/* This library is only valid for STM32 processors.
* This library follows the convention of the AVR i2c_master library.
* As a result addresses are expected to be already shifted (addr << 1).
* I2CD1 is the default driver which corresponds to pins B6 and B7. This
* can be changed.
* Please ensure that HAL_USE_I2C is TRUE in the halconf.h file and that
* STM32_I2C_USE_I2C1 is TRUE in the mcuconf.h file. Pins B6 and B7 are used
* but using any other I2C pins should be trivial.
*/
#include "i2c_master.h"
#include <string.h>
#include <hal.h>
static uint8_t i2c_address;
// This configures the I2C clock to 400Mhz 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),
0,
0
};
void i2c_init(void)
{
palSetGroupMode(GPIOB, GPIOB_PIN6 | GPIOB_PIN7, 0, PAL_MODE_INPUT); // Try releasing special pins for a short time
chThdSleepMilliseconds(10);
palSetPadMode(GPIOB, 6, PAL_MODE_ALTERNATE(4) | PAL_STM32_OTYPE_OPENDRAIN | PAL_STM32_PUPDR_PULLUP);
palSetPadMode(GPIOB, 7, PAL_MODE_ALTERNATE(4) | PAL_STM32_OTYPE_OPENDRAIN | PAL_STM32_PUPDR_PULLUP);
//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_address = address;
i2cStart(&I2C_DRIVER, &i2cconfig);
return 0;
}
uint8_t i2c_transmit(uint8_t address, 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));
}
uint8_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));
}
uint8_t i2c_writeReg(uint8_t devaddr, uint8_t regaddr, uint8_t* data, uint16_t length, uint16_t timeout)
{
i2c_address = devaddr;
i2cStart(&I2C_DRIVER, &i2cconfig);
uint8_t complete_packet[length + 1];
for(uint8_t i = 0; i < length; i++)
{
complete_packet[i+1] = data[i];
}
complete_packet[0] = regaddr;
return i2cMasterTransmitTimeout(&I2C_DRIVER, (i2c_address >> 1), complete_packet, length + 1, 0, 0, MS2ST(timeout));
}
uint8_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));
}
// This is usually not needed. It releases the driver to allow pins to become GPIO again.
uint8_t i2c_stop(uint16_t timeout)
{
i2cStop(&I2C_DRIVER);
return 0;
}

39
drivers/arm/i2c_master.h Normal file
View File

@ -0,0 +1,39 @@
/* Copyright 2018 Jack Humbert
* Copyright 2018 Yiancar
*
* This program is free sofare: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Sofare 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/>.
*/
/* This library follows the convention of the AVR i2c_master library.
* As a result addresses are expected to be already shifted (addr << 1).
* I2CD1 is the default driver which corresponds to pins B6 and B7. This
* can be changed.
* Please ensure that HAL_USE_I2C is TRUE in the halconf.h file and that
* STM32_I2C_USE_I2C1 is TRUE in the mcuconf.h file.
*/
#include "ch.h"
#include <hal.h>
#ifndef I2C_DRIVER
#define I2C_DRIVER I2CD1
#endif
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_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);

View File

@ -1,262 +0,0 @@
/* Copyright 2017 Jason Williams
* Copyright 2018 Jack Humbert
*
* 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 "is31fl3731.h"
#include <avr/interrupt.h>
#include <avr/io.h>
#include <util/delay.h>
#include <string.h>
#include "i2c_master.h"
#include "progmem.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 ISSI_ADDR_DEFAULT 0x74
#define ISSI_REG_CONFIG 0x00
#define ISSI_REG_CONFIG_PICTUREMODE 0x00
#define ISSI_REG_CONFIG_AUTOPLAYMODE 0x08
#define ISSI_REG_CONFIG_AUDIOPLAYMODE 0x18
#define ISSI_CONF_PICTUREMODE 0x00
#define ISSI_CONF_AUTOFRAMEMODE 0x04
#define ISSI_CONF_AUDIOMODE 0x08
#define ISSI_REG_PICTUREFRAME 0x01
#define ISSI_REG_SHUTDOWN 0x0A
#define ISSI_REG_AUDIOSYNC 0x06
#define ISSI_COMMANDREGISTER 0xFD
#define ISSI_BANK_FUNCTIONREG 0x0B // helpfully called 'page nine'
#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 IS31FL3731 PWM registers 0x24-0xB3.
// 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 IS31FL3731_write_pwm_buffer() but it's
// probably not worth the extra complexity.
uint8_t g_pwm_buffer[DRIVER_COUNT][144];
bool g_pwm_buffer_update_required = false;
uint8_t g_led_control_registers[DRIVER_COUNT][18] = { { 0 }, { 0 } };
bool g_led_control_registers_update_required = false;
// This is the bit pattern in the LED control registers
// (for matrix A, add one to register for matrix B)
//
// reg - b7 b6 b5 b4 b3 b2 b1 b0
// 0x00 - R08,R07,R06,R05,R04,R03,R02,R01
// 0x02 - G08,G07,G06,G05,G04,G03,G02,R00
// 0x04 - B08,B07,B06,B05,B04,B03,G01,G00
// 0x06 - - , - , - , - , - ,B02,B01,B00
// 0x08 - - , - , - , - , - , - , - , -
// 0x0A - B17,B16,B15, - , - , - , - , -
// 0x0C - G17,G16,B14,B13,B12,B11,B10,B09
// 0x0E - R17,G15,G14,G13,G12,G11,G10,G09
// 0x10 - R16,R15,R14,R13,R12,R11,R10,R09
void IS31FL3731_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 IS31FL3731_write_pwm_buffer( uint8_t addr, uint8_t *pwm_buffer )
{
// assumes bank is already selected
// transmit PWM registers in 9 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 < 144; i += 16 ) {
// set the first register, e.g. 0x24, 0x34, 0x44, etc.
g_twi_transfer_buffer[0] = 0x24 + i;
// copy the data from i to i+15
// device will auto-increment register for data after the first byte
// thus this sets registers 0x24-0x33, 0x34-0x43, 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 IS31FL3731_init( uint8_t addr )
{
// In order to avoid the LEDs being driven with garbage data
// in the LED driver's PWM registers, first enable software shutdown,
// then set up the mode and other settings, clear the PWM registers,
// then disable software shutdown.
// select "function register" bank
IS31FL3731_write_register( addr, ISSI_COMMANDREGISTER, ISSI_BANK_FUNCTIONREG );
// enable software shutdown
IS31FL3731_write_register( addr, ISSI_REG_SHUTDOWN, 0x00 );
// this delay was copied from other drivers, might not be needed
_delay_ms( 10 );
// picture mode
IS31FL3731_write_register( addr, ISSI_REG_CONFIG, ISSI_REG_CONFIG_PICTUREMODE );
// display frame 0
IS31FL3731_write_register( addr, ISSI_REG_PICTUREFRAME, 0x00 );
// audio sync off
IS31FL3731_write_register( addr, ISSI_REG_AUDIOSYNC, 0x00 );
// select bank 0
IS31FL3731_write_register( addr, ISSI_COMMANDREGISTER, 0 );
// turn off all LEDs in the LED control register
for ( int i = 0x00; i <= 0x11; i++ )
{
IS31FL3731_write_register( addr, i, 0x00 );
}
// turn off all LEDs in the blink control register (not really needed)
for ( int i = 0x12; i <= 0x23; i++ )
{
IS31FL3731_write_register( addr, i, 0x00 );
}
// set PWM on all LEDs to 0
for ( int i = 0x24; i <= 0xB3; i++ )
{
IS31FL3731_write_register( addr, i, 0x00 );
}
// select "function register" bank
IS31FL3731_write_register( addr, ISSI_COMMANDREGISTER, ISSI_BANK_FUNCTIONREG );
// disable software shutdown
IS31FL3731_write_register( addr, ISSI_REG_SHUTDOWN, 0x01 );
// select bank 0 and leave it selected.
// most usage after initialization is just writing PWM buffers in bank 0
// as there's not much point in double-buffering
IS31FL3731_write_register( addr, ISSI_COMMANDREGISTER, 0 );
}
void IS31FL3731_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];
// Subtract 0x24 to get the second index of g_pwm_buffer
g_pwm_buffer[led.driver][led.r - 0x24] = red;
g_pwm_buffer[led.driver][led.g - 0x24] = green;
g_pwm_buffer[led.driver][led.b - 0x24] = blue;
g_pwm_buffer_update_required = true;
}
}
void IS31FL3731_set_color_all( uint8_t red, uint8_t green, uint8_t blue )
{
for ( int i = 0; i < DRIVER_LED_TOTAL; i++ )
{
IS31FL3731_set_color( i, red, green, blue );
}
}
void IS31FL3731_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 - 0x24) / 8;
uint8_t control_register_g = (led.g - 0x24) / 8;
uint8_t control_register_b = (led.b - 0x24) / 8;
uint8_t bit_r = (led.r - 0x24) % 8;
uint8_t bit_g = (led.g - 0x24) % 8;
uint8_t bit_b = (led.b - 0x24) % 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 IS31FL3731_update_pwm_buffers( uint8_t addr1, uint8_t addr2 )
{
if ( g_pwm_buffer_update_required )
{
IS31FL3731_write_pwm_buffer( addr1, g_pwm_buffer[0] );
IS31FL3731_write_pwm_buffer( addr2, g_pwm_buffer[1] );
}
g_pwm_buffer_update_required = false;
}
void IS31FL3731_update_led_control_registers( uint8_t addr1, uint8_t addr2 )
{
if ( g_led_control_registers_update_required )
{
for ( int i=0; i<18; i++ )
{
IS31FL3731_write_register(addr1, i, g_led_control_registers[0][i] );
IS31FL3731_write_register(addr2, i, g_led_control_registers[1][i] );
}
}
}

271
drivers/issi/is31fl3731.c Normal file
View File

@ -0,0 +1,271 @@
/* Copyright 2017 Jason Williams
* Copyright 2018 Jack Humbert
*
* 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 "is31fl3731.h"
#include <string.h>
#include "i2c_master.h"
#include "progmem.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 ISSI_ADDR_DEFAULT 0x74
#define ISSI_REG_CONFIG 0x00
#define ISSI_REG_CONFIG_PICTUREMODE 0x00
#define ISSI_REG_CONFIG_AUTOPLAYMODE 0x08
#define ISSI_REG_CONFIG_AUDIOPLAYMODE 0x18
#define ISSI_CONF_PICTUREMODE 0x00
#define ISSI_CONF_AUTOFRAMEMODE 0x04
#define ISSI_CONF_AUDIOMODE 0x08
#define ISSI_REG_PICTUREFRAME 0x01
#define ISSI_REG_SHUTDOWN 0x0A
#define ISSI_REG_AUDIOSYNC 0x06
#define ISSI_COMMANDREGISTER 0xFD
#define ISSI_BANK_FUNCTIONREG 0x0B // helpfully called 'page nine'
#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 IS31FL3731 PWM registers 0x24-0xB3.
// 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 IS31FL3731_write_pwm_buffer() but it's
// probably not worth the extra complexity.
uint8_t g_pwm_buffer[DRIVER_COUNT][144];
bool g_pwm_buffer_update_required = false;
uint8_t g_led_control_registers[DRIVER_COUNT][18] = { { 0 }, { 0 } };
bool g_led_control_registers_update_required = false;
// This is the bit pattern in the LED control registers
// (for matrix A, add one to register for matrix B)
//
// reg - b7 b6 b5 b4 b3 b2 b1 b0
// 0x00 - R08,R07,R06,R05,R04,R03,R02,R01
// 0x02 - G08,G07,G06,G05,G04,G03,G02,R00
// 0x04 - B08,B07,B06,B05,B04,B03,G01,G00
// 0x06 - - , - , - , - , - ,B02,B01,B00
// 0x08 - - , - , - , - , - , - , - , -
// 0x0A - B17,B16,B15, - , - , - , - , -
// 0x0C - G17,G16,B14,B13,B12,B11,B10,B09
// 0x0E - R17,G15,G14,G13,G12,G11,G10,G09
// 0x10 - R16,R15,R14,R13,R12,R11,R10,R09
void IS31FL3731_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 IS31FL3731_write_pwm_buffer( uint8_t addr, uint8_t *pwm_buffer )
{
// assumes bank is already selected
// transmit PWM registers in 9 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 < 144; i += 16 ) {
// set the first register, e.g. 0x24, 0x34, 0x44, etc.
g_twi_transfer_buffer[0] = 0x24 + i;
// copy the data from i to i+15
// device will auto-increment register for data after the first byte
// thus this sets registers 0x24-0x33, 0x34-0x43, 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 IS31FL3731_init( uint8_t addr )
{
// In order to avoid the LEDs being driven with garbage data
// in the LED driver's PWM registers, first enable software shutdown,
// then set up the mode and other settings, clear the PWM registers,
// then disable software shutdown.
// select "function register" bank
IS31FL3731_write_register( addr, ISSI_COMMANDREGISTER, ISSI_BANK_FUNCTIONREG );
// enable software shutdown
IS31FL3731_write_register( addr, ISSI_REG_SHUTDOWN, 0x00 );
// this delay was copied from other drivers, might not be needed
#ifdef __AVR__
_delay_ms( 10 );
#else
wait_ms(10);
#endif
// picture mode
IS31FL3731_write_register( addr, ISSI_REG_CONFIG, ISSI_REG_CONFIG_PICTUREMODE );
// display frame 0
IS31FL3731_write_register( addr, ISSI_REG_PICTUREFRAME, 0x00 );
// audio sync off
IS31FL3731_write_register( addr, ISSI_REG_AUDIOSYNC, 0x00 );
// select bank 0
IS31FL3731_write_register( addr, ISSI_COMMANDREGISTER, 0 );
// turn off all LEDs in the LED control register
for ( int i = 0x00; i <= 0x11; i++ )
{
IS31FL3731_write_register( addr, i, 0x00 );
}
// turn off all LEDs in the blink control register (not really needed)
for ( int i = 0x12; i <= 0x23; i++ )
{
IS31FL3731_write_register( addr, i, 0x00 );
}
// set PWM on all LEDs to 0
for ( int i = 0x24; i <= 0xB3; i++ )
{
IS31FL3731_write_register( addr, i, 0x00 );
}
// select "function register" bank
IS31FL3731_write_register( addr, ISSI_COMMANDREGISTER, ISSI_BANK_FUNCTIONREG );
// disable software shutdown
IS31FL3731_write_register( addr, ISSI_REG_SHUTDOWN, 0x01 );
// select bank 0 and leave it selected.
// most usage after initialization is just writing PWM buffers in bank 0
// as there's not much point in double-buffering
IS31FL3731_write_register( addr, ISSI_COMMANDREGISTER, 0 );
}
void IS31FL3731_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];
// Subtract 0x24 to get the second index of g_pwm_buffer
g_pwm_buffer[led.driver][led.r - 0x24] = red;
g_pwm_buffer[led.driver][led.g - 0x24] = green;
g_pwm_buffer[led.driver][led.b - 0x24] = blue;
g_pwm_buffer_update_required = true;
}
}
void IS31FL3731_set_color_all( uint8_t red, uint8_t green, uint8_t blue )
{
for ( int i = 0; i < DRIVER_LED_TOTAL; i++ )
{
IS31FL3731_set_color( i, red, green, blue );
}
}
void IS31FL3731_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 - 0x24) / 8;
uint8_t control_register_g = (led.g - 0x24) / 8;
uint8_t control_register_b = (led.b - 0x24) / 8;
uint8_t bit_r = (led.r - 0x24) % 8;
uint8_t bit_g = (led.g - 0x24) % 8;
uint8_t bit_b = (led.b - 0x24) % 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 IS31FL3731_update_pwm_buffers( uint8_t addr1, uint8_t addr2 )
{
if ( g_pwm_buffer_update_required )
{
IS31FL3731_write_pwm_buffer( addr1, g_pwm_buffer[0] );
IS31FL3731_write_pwm_buffer( addr2, g_pwm_buffer[1] );
}
g_pwm_buffer_update_required = false;
}
void IS31FL3731_update_led_control_registers( uint8_t addr1, uint8_t addr2 )
{
if ( g_led_control_registers_update_required )
{
for ( int i=0; i<18; i++ )
{
IS31FL3731_write_register(addr1, i, g_led_control_registers[0][i] );
IS31FL3731_write_register(addr2, i, g_led_control_registers[1][i] );
}
}
}

View File

@ -23,7 +23,7 @@
#include <stdbool.h>
typedef struct is31_led {
uint8_t driver:2;
uint8_t driver:2;
uint8_t r;
uint8_t g;
uint8_t b;

253
drivers/issi/is31fl3733.c Normal file
View File

@ -0,0 +1,253 @@
/* 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 "is31fl3733.h"
#include <string.h>
#include "i2c_master.h"
#include "progmem.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 IS31FL3733 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 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;
uint8_t g_led_control_registers[DRIVER_COUNT][24] = { { 0 }, { 0 } };
bool g_led_control_registers_update_required = false;
void IS31FL3733_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 IS31FL3733_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 IS31FL3733_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.
IS31FL3733_write_register( addr, ISSI_COMMANDREGISTER_WRITELOCK, 0xC5 );
// Select PG0
IS31FL3733_write_register( addr, ISSI_COMMANDREGISTER, ISSI_PAGE_LEDCONTROL );
// Turn off all LEDs.
for ( int i = 0x00; i <= 0x17; i++ )
{
IS31FL3733_write_register( addr, i, 0x00 );
}
// Unlock the command register.
IS31FL3733_write_register( addr, ISSI_COMMANDREGISTER_WRITELOCK, 0xC5 );
// Select PG1
IS31FL3733_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++ )
{
IS31FL3733_write_register( addr, i, 0x00 );
}
// Unlock the command register.
IS31FL3733_write_register( addr, ISSI_COMMANDREGISTER_WRITELOCK, 0xC5 );
// Select PG3
IS31FL3733_write_register( addr, ISSI_COMMANDREGISTER, ISSI_PAGE_FUNCTION );
// Set global current to maximum.
IS31FL3733_write_register( addr, ISSI_REG_GLOBALCURRENT, 0xFF );
// Disable software shutdown.
IS31FL3733_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 IS31FL3733_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 IS31FL3733_set_color_all( uint8_t red, uint8_t green, uint8_t blue )
{
for ( int i = 0; i < DRIVER_LED_TOTAL; i++ )
{
IS31FL3733_set_color( i, red, green, blue );
}
}
void IS31FL3733_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 IS31FL3733_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
IS31FL3733_write_register( addr1, ISSI_COMMANDREGISTER_WRITELOCK, 0xC5 );
IS31FL3733_write_register( addr1, ISSI_COMMANDREGISTER, ISSI_PAGE_PWM );
IS31FL3733_write_pwm_buffer( addr1, g_pwm_buffer[0] );
//IS31FL3733_write_pwm_buffer( addr2, g_pwm_buffer[1] );
}
g_pwm_buffer_update_required = false;
}
void IS31FL3733_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
IS31FL3733_write_register( addr1, ISSI_COMMANDREGISTER_WRITELOCK, 0xC5 );
IS31FL3733_write_register( addr1, 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] );
}
}
}

255
drivers/issi/is31fl3733.h Normal file
View File

@ -0,0 +1,255 @@
/* 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 IS31FL3733_DRIVER_H
#define IS31FL3733_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 IS31FL3733_init( uint8_t addr );
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 );
void IS31FL3733_set_color( int index, uint8_t red, uint8_t green, uint8_t blue );
void IS31FL3733_set_color_all( uint8_t red, uint8_t green, uint8_t blue );
void IS31FL3733_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 IS31FL3733_update_pwm_buffers( uint8_t addr1, uint8_t addr2 );
void IS31FL3733_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 0x06
#define A_8 0x07
#define A_9 0x08
#define A_10 0x09
#define A_11 0x0A
#define A_12 0x0B
#define A_13 0x0C
#define A_14 0x0D
#define A_15 0x0E
#define A_16 0x0F
#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 0x16
#define B_8 0x17
#define B_9 0x18
#define B_10 0x19
#define B_11 0x1A
#define B_12 0x1B
#define B_13 0x1C
#define B_14 0x1D
#define B_15 0x1E
#define B_16 0x1F
#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 0x26
#define C_8 0x27
#define C_9 0x28
#define C_10 0x29
#define C_11 0x2A
#define C_12 0x2B
#define C_13 0x2C
#define C_14 0x2D
#define C_15 0x2E
#define C_16 0x2F
#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 0x36
#define D_8 0x37
#define D_9 0x38
#define D_10 0x39
#define D_11 0x3A
#define D_12 0x3B
#define D_13 0x3C
#define D_14 0x3D
#define D_15 0x3E
#define D_16 0x3F
#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 0x46
#define E_8 0x47
#define E_9 0x48
#define E_10 0x49
#define E_11 0x4A
#define E_12 0x4B
#define E_13 0x4C
#define E_14 0x4D
#define E_15 0x4E
#define E_16 0x4F
#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 0x56
#define F_8 0x57
#define F_9 0x58
#define F_10 0x59
#define F_11 0x5A
#define F_12 0x5B
#define F_13 0x5C
#define F_14 0x5D
#define F_15 0x5E
#define F_16 0x5F
#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 0x66
#define G_8 0x67
#define G_9 0x68
#define G_10 0x69
#define G_11 0x6A
#define G_12 0x6B
#define G_13 0x6C
#define G_14 0x6D
#define G_15 0x6E
#define G_16 0x6F
#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 0x76
#define H_8 0x77
#define H_9 0x78
#define H_10 0x79
#define H_11 0x7A
#define H_12 0x7B
#define H_13 0x7C
#define H_14 0x7D
#define H_15 0x7E
#define H_16 0x7F
#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 0x86
#define I_8 0x87
#define I_9 0x88
#define I_10 0x89
#define I_11 0x8A
#define I_12 0x8B
#define I_13 0x8C
#define I_14 0x8D
#define I_15 0x8E
#define I_16 0x8F
#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 0x96
#define J_8 0x97
#define J_9 0x98
#define J_10 0x99
#define J_11 0x9A
#define J_12 0x9B
#define J_13 0x9C
#define J_14 0x9D
#define J_15 0x9E
#define J_16 0x9F
#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 0xA6
#define K_8 0xA7
#define K_9 0xA8
#define K_10 0xA9
#define K_11 0xAA
#define K_12 0xAB
#define K_13 0xAC
#define K_14 0xAD
#define K_15 0xAE
#define K_16 0xAF
#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 0xB6
#define L_8 0xB7
#define L_9 0xB8
#define L_10 0xB9
#define L_11 0xBA
#define L_12 0xBB
#define L_13 0xBC
#define L_14 0xBD
#define L_15 0xBE
#define L_16 0xBF
#endif // IS31FL3733_DRIVER_H

View File

@ -0,0 +1,43 @@
/* Copyright 2018 MechMerlin
*
* 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 "1up60hse.h"
void matrix_init_kb(void) {
// put your keyboard start-up code here
// runs once when the firmware starts up
matrix_init_user();
}
void matrix_scan_kb(void) {
// put your looping keyboard code here
// runs every cycle (a lot)
matrix_scan_user();
}
bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
// put your per-action keyboard code here
// runs for every action, just before processing by the firmware
return process_record_user(keycode, record);
}
void led_set_kb(uint8_t usb_led) {
// put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
led_set_user(usb_led);
}

View File

@ -0,0 +1,39 @@
/* Copyright 2018 MechMerlin
*
* 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 KB_H
#define KB_H
#include "quantum.h"
// This a shortcut to help you visually see your layout.
// The first section contains all of the arguments representing the physical
// layout of the board and position of the keys
// The second converts the arguments into a two-dimensional array which
// represents the switch matrix.
#define LAYOUT_60_ansi( \
K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, \
K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, \
K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2D, \
K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3D, \
K40, K41, K42, K45, K49, K4A, K4B, K4D \
) { \
{ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D }, \
{ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D }, \
{ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, KC_NO, K2D }, \
{ 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

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