Compare commits

...

103 Commits

Author SHA1 Message Date
Dean Camera
df8e417032 Fix mismatched aliased event and event stub function prototypes. 2018-09-11 12:52:57 -07:00
Dean Camera
c7e1b53913 Remove unneccesary ATTR_CONST from stub functions (thanks to NicoHood). 2018-09-11 12:52:57 -07:00
Miguel Garcia Rodriguez
e9a67f8fde Fix installation for linux finding ID:fedora in os_release 2018-09-10 20:52:34 -07:00
Thomas Vandaele
265eca0f7c Add manjaro asn arch-based distro 2018-09-10 17:55:46 -07:00
leico
2e0c63e0af improve looks like hang up when first time execute make git-submodule (#3846) 2018-09-10 16:21:54 -07:00
Jeremy Herve
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
Peter Nguyen
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
sK0pe
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
MechMerlin
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
Damien
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
Danny
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
noroadsleft
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
Yasuhiro Shimizu
93b5c98fbb Keymap: remove unnecessary readme from my helix keymap (#3860) 2018-09-09 19:23:24 -07:00
Josh
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
patrickmt
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
Danny
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
TheOneTrueTrench
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
Matthew Treadwell
c3b3f33c6a Keymap: Update personal keymap (#3855)
* Updated personal keymap

* simplified keymap based on suggestions
2018-09-05 16:39:00 -07:00
Michael F. Lamb
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
Luke Stanley
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
antonio miranda
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
patrickmt
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
yiancar
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
MechMerlin
1a907a1627 Keyboard: formatting changes for readme and enable bootmagic (#3851) 2018-09-04 13:29:58 -07:00
Michael F. Lamb
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
Emīls Delle
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
marksard
0533ea4a20 Keymap: Added a keymap like a JIS keyboard for JJ 40. (#3847) 2018-09-04 08:52:00 -07:00
Jack Humbert
a14eb01883 fix mousekey call 2018-09-03 16:59:32 -07:00
Elisiano Petrini
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
Xyverz
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
Xin-Xin Wang
aa795dc33e Keymap: Fix missing braces around initializer error on older gcc (#3840) 2018-09-03 16:55:06 -07:00
Christon DeWan
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
Christon DeWan
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
marksard
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
Steven Liu
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
leico
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
Damien
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
Travis Carr
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
Pranav Singh
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
Brad
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
Yasuhiro Shimizu
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
Jon Olsson
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
Salt-Peanuts
dedffb5f6d Keymap: Cleaned up Rorschach keymap (#3823) 2018-09-01 09:22:21 -07:00
patrickmt
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
MechMerlin
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
Danny
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
rschardt
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
Christon DeWan
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
blindassassin111
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
Daniel Shields
f9eedd7ce7 Keymap: Add backlight controls for Planck Light in dshields keymap (#3801) 2018-08-31 08:12:37 -07:00
patrickmt
2cd80f84a4 Keyboard: CTRL and ALT keyboard json fix (#3816)
Fixed incorrect layout names
2018-08-31 07:38:06 -07:00
ishtob
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
Salt-Peanuts
be94e5e591 Keymap: Updated keymap with the "pretty" layout (#3812) 2018-08-30 15:38:31 -07:00
patrickmt
b61653739b Keyboard: CTRL and ALT updates (#3810)
Update to CTRL and ALT keyboard files
2018-08-30 13:49:17 -07:00
fauxpark
ce3ccd3f4a Docs: Tabulate Modifier & Mod-Tap keycode listings in advanced keycodes docs (#3799) 2018-08-30 09:37:05 -07:00
wanleg
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
Lars Herbach
2b707f3470 Keymap: Added new tada68 keymap (#3788)
* Initial Commit

* Removed duplicate lines
2018-08-30 09:23:33 -07:00
fauxpark
1acaf2b2c2 Tweak the wording in "Becoming a QMK Collaborator" 2018-08-30 07:39:58 -04:00
arlenk
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
Sascha Grunert
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
Takeshi ISHII
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
patrickmt
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
fauxpark
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
TerryMathews
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
patrickmt
972388447b Massdrop keyboards readme update (#3791)
Massdrop keyboards readme update for flashing instructions
2018-08-29 14:11:58 -07:00
mechmerlin
6794a5c9dc move massdrop boards into its own directory for configurator visibility 2018-08-29 16:38:12 -04:00
yiancar
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
patrickmt
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
frederik-h
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
blindassassin111
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
noroadsleft
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
Jumail
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
Drashna Jaelre
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
Boy_314
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
Evan Travers
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
Alex Ong
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
Daniel Burkholder
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
xton
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
Eduardo Lourenço Pinto Neto
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
MechMerlin
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
MechMerlin
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
Jacob Jerrell
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 eeba0cec17.

* 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
yiancar
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
ishtob
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 6c8a9a6eec, reversing
changes made to 5c598d9a53.

* 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 e0035df48f.

* Fixed STM32 timer issue with Planck Rev6 with tap mods

* Revert "fixed compile error with planck rev6 keymap"

This reverts commit 5c598d9a53.

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

This reverts commit c36896ca71.

* Fixed compile issues with my personal userspace and keymap utilizing the userspace
2018-08-27 17:10:22 -04:00
Michael F. Lamb
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
Michael F. Lamb
95e9ef27be add linebreaks to "Keyboard Maintainer:..." blocks where missing (#3763) 2018-08-26 11:59:52 -07:00
Logan Bussell
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
MechMerlin
a63d4774f5 Keyboard: Putting all my ducks in a row: Lightsaver (#3758) 2018-08-26 09:30:49 -07:00
MechMerlin
1ee545014a Keyboard: Make a 1upkeyboards directory for visibility (#3759) 2018-08-26 09:30:12 -07:00
Drashna Jaelre
eb19fb5b57 Helpful functions 2018-08-26 07:32:15 -07:00
Doug Raffle
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
MechMerlin
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
Doug Raffle
a68057852b Keymap: initial migration of raffle 1up60rgb (#3747)
* initial migration of raffle 1up60rgb

* updated include statement
2018-08-25 17:13:07 -07:00
Luciano Malavasi
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
MechMerlin
0e17a44b46 Keyboard: Change the default LAYOUT to LAYOUT_60_hhkb for tokyo60 (#3751) 2018-08-25 13:20:18 -07:00
MechMerlin
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
Alvin C
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
Njiall
26dacd51fc Keyboard: Added gamepad layout to cospad (#3714) 2018-08-25 10:35:24 -07:00
Salt-Peanuts
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
Barry Huang
028a4feeed Keyboard: readme.md update (#3581)
for correct site link
2018-08-25 09:26:24 -07:00
Budi Dharmawan
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
MechMerlin
34d01f0a7f Keyboard: introduce new default layout 68_ansi (#3745) 2018-08-25 09:00:06 -07:00
MechMerlin
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
695 changed files with 91613 additions and 2413 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

@@ -144,6 +144,9 @@ endif
ifdef MCU_FAMILY
FIRMWARE_FORMAT?=bin
PLATFORM=CHIBIOS
else ifdef ARM_ATSAM
PLATFORM=ARM_ATSAM
FIRMWARE_FORMAT=bin
else
PLATFORM=AVR
FIRMWARE_FORMAT?=hex
@@ -286,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

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

@@ -36,6 +36,7 @@
* [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)

View File

@@ -36,6 +36,7 @@
* [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)

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

@@ -248,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

@@ -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,57 +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
# Mod Tap
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.
`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.
The modifiers this keycode and `OSM()` accept are prefixed with `MOD_`, not `KC_`:
These are the values you can use for the `mod` in `MT()` and `OSM()`:
|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_LCTL
* MOD_LSFT
* MOD_LALT
* MOD_LGUI
* MOD_RCTL
* MOD_RSFT
* MOD_RALT
* MOD_RGUI
* MOD_HYPR
* MOD_MEH
You can combine these by ORing them together like so:
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.
```c
MT(MOD_LCTL | MOD_LSFT, KC_ESC)
```
We've added shortcuts to make common modifier/tap (mod-tap) mappings more compact:
This key would activate Left Control and Left Shift when held, and send Escape when tapped.
* `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.
For convenience, QMK includes some Mod-Tap shortcuts to make common combinations more compact in your keymap:
?> 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}

View File

@@ -26,6 +26,10 @@ You can make use of uGFX within QMK to drive character and graphic LCD's, LED ar
Support for WS2811/WS2812{a,b,c} LED's. For more information see the [RGB Light](feature_rgblight.md) page.
## IS31FL3731 (AVR Only)
## 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.

View File

@@ -318,7 +318,7 @@ This is a reference only. Each group of keys links to the page documenting their
## [Modifiers](feature_advanced_keycodes.md#modifier-keys)
|Key |Aliases |Description |
|----------|---------- |----------------------------------------------------|
|----------|----------------------|----------------------------------------------------|
|`KC_HYPR` | |Hold Left Control, Shift, Alt and GUI |
|`KC_MEH` | |Hold Left Control, Shift and Alt |
|`LCTL(kc)`| |Hold Left Control and press `kc` |
@@ -353,7 +353,7 @@ This is a reference only. Each group of keys links to the page documenting their
|`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/)|
|`SCMD_T(kc)`|`SWIN_T(kc)` |Left Shift and GUI when held, `kc` when tapped |
|`SGUI_T(kc)`|`SCMD_T(kc)`, `SWIN_T(kc)` |Left Shift and GUI when held, `kc` when tapped |
|`LCA_T(kc)` | |Left Control and Alt when held, `kc` when tapped |
## [RGB Lighting](feature_rgblight.md)

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.

View File

@@ -15,12 +15,14 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/* This library follows the convention of the AVR i2c_master library.
/* 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.
* 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"
@@ -41,7 +43,7 @@ static const I2CConfig i2cconfig = {
void i2c_init(void)
{
palSetGroupMode(GPIOB,6,7, PAL_MODE_INPUT); // Try releasing special pins for a short time
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);
@@ -82,12 +84,12 @@ uint8_t i2c_writeReg(uint8_t devaddr, uint8_t regaddr, uint8_t* data, uint16_t l
{
complete_packet[i+1] = data[i];
}
complete_packet[0] = regaddr
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)
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);
@@ -97,7 +99,6 @@ uint8_t i2c_readReg(uint8_t devaddr, uint8_t regaddr, uint8_t* data, uint16_t le
// This is usually not needed. It releases the driver to allow pins to become GPIO again.
uint8_t i2c_stop(uint16_t timeout)
{
i2c_address = address;
i2cStop(&I2C_DRIVER);
return 0;
}

View File

@@ -35,5 +35,5 @@ 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);
void i2c_stop(void);
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

@@ -91,7 +91,7 @@ bool g_led_control_registers_update_required = false;
// 0x10 - R16,R15,R14,R13,R12,R11,R10,R09
void IS31_write_register( uint8_t addr, uint8_t reg, uint8_t data )
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;
@@ -106,7 +106,7 @@ void IS31_write_register( uint8_t addr, uint8_t reg, uint8_t data )
#endif
}
void IS31_write_pwm_buffer( uint8_t addr, uint8_t *pwm_buffer )
void IS31FL3731_write_pwm_buffer( uint8_t addr, uint8_t *pwm_buffer )
{
// assumes bank is already selected
@@ -135,7 +135,7 @@ void IS31_write_pwm_buffer( uint8_t addr, uint8_t *pwm_buffer )
}
}
void IS31_init( uint8_t addr )
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,
@@ -143,10 +143,10 @@ void IS31_init( uint8_t addr )
// then disable software shutdown.
// select "function register" bank
IS31_write_register( addr, ISSI_COMMANDREGISTER, ISSI_BANK_FUNCTIONREG );
IS31FL3731_write_register( addr, ISSI_COMMANDREGISTER, ISSI_BANK_FUNCTIONREG );
// enable software shutdown
IS31_write_register( addr, ISSI_REG_SHUTDOWN, 0x00 );
IS31FL3731_write_register( addr, ISSI_REG_SHUTDOWN, 0x00 );
// this delay was copied from other drivers, might not be needed
#ifdef __AVR__
_delay_ms( 10 );
@@ -155,47 +155,47 @@ void IS31_init( uint8_t addr )
#endif
// picture mode
IS31_write_register( addr, ISSI_REG_CONFIG, ISSI_REG_CONFIG_PICTUREMODE );
IS31FL3731_write_register( addr, ISSI_REG_CONFIG, ISSI_REG_CONFIG_PICTUREMODE );
// display frame 0
IS31_write_register( addr, ISSI_REG_PICTUREFRAME, 0x00 );
IS31FL3731_write_register( addr, ISSI_REG_PICTUREFRAME, 0x00 );
// audio sync off
IS31_write_register( addr, ISSI_REG_AUDIOSYNC, 0x00 );
IS31FL3731_write_register( addr, ISSI_REG_AUDIOSYNC, 0x00 );
// select bank 0
IS31_write_register( addr, ISSI_COMMANDREGISTER, 0 );
IS31FL3731_write_register( addr, ISSI_COMMANDREGISTER, 0 );
// turn off all LEDs in the LED control register
for ( int i = 0x00; i <= 0x11; i++ )
{
IS31_write_register( addr, i, 0x00 );
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++ )
{
IS31_write_register( addr, i, 0x00 );
IS31FL3731_write_register( addr, i, 0x00 );
}
// set PWM on all LEDs to 0
for ( int i = 0x24; i <= 0xB3; i++ )
{
IS31_write_register( addr, i, 0x00 );
IS31FL3731_write_register( addr, i, 0x00 );
}
// select "function register" bank
IS31_write_register( addr, ISSI_COMMANDREGISTER, ISSI_BANK_FUNCTIONREG );
IS31FL3731_write_register( addr, ISSI_COMMANDREGISTER, ISSI_BANK_FUNCTIONREG );
// disable software shutdown
IS31_write_register( addr, ISSI_REG_SHUTDOWN, 0x01 );
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
IS31_write_register( addr, ISSI_COMMANDREGISTER, 0 );
IS31FL3731_write_register( addr, ISSI_COMMANDREGISTER, 0 );
}
void IS31_set_color( int index, uint8_t red, uint8_t green, uint8_t blue )
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];
@@ -208,15 +208,15 @@ void IS31_set_color( int index, uint8_t red, uint8_t green, uint8_t blue )
}
}
void IS31_set_color_all( uint8_t red, uint8_t green, uint8_t blue )
void IS31FL3731_set_color_all( uint8_t red, uint8_t green, uint8_t blue )
{
for ( int i = 0; i < DRIVER_LED_TOTAL; i++ )
{
IS31_set_color( i, red, green, blue );
IS31FL3731_set_color( i, red, green, blue );
}
}
void IS31_set_led_control_register( uint8_t index, bool red, bool green, bool blue )
void IS31FL3731_set_led_control_register( uint8_t index, bool red, bool green, bool blue )
{
is31_led led = g_is31_leds[index];
@@ -247,24 +247,24 @@ void IS31_set_led_control_register( uint8_t index, bool red, bool green, bool bl
}
void IS31_update_pwm_buffers( uint8_t addr1, uint8_t addr2 )
void IS31FL3731_update_pwm_buffers( uint8_t addr1, uint8_t addr2 )
{
if ( g_pwm_buffer_update_required )
{
IS31_write_pwm_buffer( addr1, g_pwm_buffer[0] );
IS31_write_pwm_buffer( addr2, g_pwm_buffer[1] );
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 IS31_update_led_control_registers( uint8_t addr1, uint8_t addr2 )
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++ )
{
IS31_write_register(addr1, i, g_led_control_registers[0][i] );
IS31_write_register(addr2, i, g_led_control_registers[1][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

@@ -31,21 +31,21 @@ typedef struct is31_led {
extern const is31_led g_is31_leds[DRIVER_LED_TOTAL];
void IS31_init( uint8_t addr );
void IS31_write_register( uint8_t addr, uint8_t reg, uint8_t data );
void IS31_write_pwm_buffer( uint8_t addr, uint8_t *pwm_buffer );
void IS31FL3731_init( uint8_t addr );
void IS31FL3731_write_register( uint8_t addr, uint8_t reg, uint8_t data );
void IS31FL3731_write_pwm_buffer( uint8_t addr, uint8_t *pwm_buffer );
void IS31_set_color( int index, uint8_t red, uint8_t green, uint8_t blue );
void IS31_set_color_all( uint8_t red, uint8_t green, uint8_t blue );
void IS31FL3731_set_color( int index, uint8_t red, uint8_t green, uint8_t blue );
void IS31FL3731_set_color_all( uint8_t red, uint8_t green, uint8_t blue );
void IS31_set_led_control_register( uint8_t index, bool red, bool green, bool blue );
void IS31FL3731_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 IS31_update_pwm_buffers( uint8_t addr1, uint8_t addr2 );
void IS31_update_led_control_registers( uint8_t addr1, uint8_t addr2 );
void IS31FL3731_update_pwm_buffers( uint8_t addr1, uint8_t addr2 );
void IS31FL3731_update_led_control_registers( uint8_t addr1, uint8_t addr2 );
#define C1_1 0x24
#define C1_2 0x25

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

@@ -10,6 +10,6 @@ Hardware Availability: [1upkeyboards.com](https://www.1upkeyboards.com/shop/cont
Make example for this keyboard (after setting up your build environment):
make 1up60hse:default
make 1upkeyboards/1up60hse:default
See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).

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